Настройка Комбинации Графит+Виртуаленв+Колледд

В этой статье я хотел бы поделиться своим опытом настройки сервиса для сбора и визуализации статистики.

собрано в сочетании с графит .

Первый используется как сборщик данных, второй — как хранилище с визуализатором.



Мотивация

До недавнего времени я использовал Мунин для сбора и отображения статистики, но его графики меня всегда раздражали (внешний вид), не знаю почему.

К тому же после обновления постоянно что-то отваливалось и мне это надоело.

В связи со всем этим я решил поискать альтернативу и наткнулся на Collectd. В целом мне это показалось достойной альтернативой, но все веб-визуализаторы, которые я для него рассматривал, показались мне немного убогими и я уже хотел отказаться от этой идеи.

И тут я вспомнил, что мы недавно на работе настраивали графит. Я решил попробовать, что из этого выйдет.

Цель

Настройте графит так, чтобы он запускался с использованием супервизора, uwsgi и virtualenv и был виден снаружи (nginx).

Collectd в этом случае должен передавать данные непосредственно в графит.

Графит
Сначала вам нужно создать каталог, в котором будет жить графит, и развернуть там виртуальную среду.

  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
   

$ mkdir /var/projects/graphite $ cd /var/projects/graphite $ virtualenv --no-site-packages .

env $ virtualenv --relocatable .

env $ source .

env/bin/activate

Для работы с изображениями графит использует cairo, поэтому данная библиотека должна быть установлена в системе.

В моем случае все уже есть, поэтому опишу только, как установить pycario в виртуальной среде.

Загрузите и установите py2cairo

$ wget http://cairographics.org/releases/py2cairo-1.10.0.tar.bz2 $ tar -jxf py2cairo-1.10.0.tar.bz2 && cd py2cairo-1.8.10 $ .

/waf configure --prefix=$VIRTUAL_ENV $ .

/waf build $ .

/waf install $ cd .

&& rm -R py2cairo-1.8.10 && rm py2cairo-1.10.0.tar.bz2

Настроить шепот

$ wget https://launchpad.net/graphite/0.9/0.9.9/+download/whisper-0.9.9.tar.gz $ tar -xzpf whisper-0.9.9.tar.gz && cd whisper-0.9.9 $ python setup.py install $ cd .

&& rm -R whisper-0.9.9 && rm whisper-0.9.9.tar.gz

Мы наносим углерод

$ wget https://launchpad.net/graphite/0.9/0.9.9/+download/carbon-0.9.9.tar.gz $ tar -xzpf carbon-0.9.9.tar.gz && cd carbon-0.9.9

Чтобы все установилось в нашей песочнице, в файле setup.cfg меняем:

prefix = /opt/graphite

на:

prefix = $VIRTUAL_ENV/.



Затем:

$ python setup.py install $ cd .

&& rm -R carbon-0.9.9 && rm carbon-0.9.9.tar.gz

Установите графит (веб-приложение)

$ wget https://launchpad.net/graphite/0.9/0.9.9/+download/graphite-web-0.9.9.tar.gz $ tar -xzpf graphite-web-0.9.9.tar.gz && cd graphite-web-0.9.9

С помощью check-dependents.py проверяем, что еще нужно установить, в моем случае это:

$ pip install django django-tagging twisted python-memcached psycopg2 egenix-mx-base

Последнее в принципе необязательно, но я подумал, раз оно у меня и так есть, то пусть будет. По аналогии с карбоном, в файле setup.cfg меняем:

prefix = /opt/graphite

на:

prefix = $VIRTUAL_ENV/.



Затем:

$ python setup.py install $ cd .

&& rm -R graphite-web-0.9.9 && rm graphite-web-0.9.9.tar.gz

Настройка карбона и графита Файл конфигурации для супервизора будет выглядеть примерно так:

[program:graphite_uwsgi] command=/usr/bin/uwsgi --pidfile /var/projects/graphite/run/graphite_uwsgi.pid -x /var/projects/graphite/conf/uwsgi.conf --vacuum directory=/var/projects/graphite/webapp/ autostart=true autorestart=true startsecs=5 startretries=3 stopsignal=TERM stopwaitsecs=15 stopretries=1 stopsignal=QUIT redirect_stderr=false stdout_logfile=/var/projects/graphite/storage/log/graphite_uwsgi.log stdout_logfile_maxbytes=1MB stdout_logfile_backups=10 stdout_capture_maxbytes=1MB stderr_logfile=/var/projects/graphite/storage/log/graphite_uwsgi-error.log stderr_logfile_maxbytes=1MB stderr_logfile_backups=10 stderr_capture_maxbytes=1MB [program:carbon] command=/var/projects/graphite/.

env/bin/python /var/projects/graphite/bin/carbon-cache.py --debug start priority=1 autostart=true autorestart=true startsecs=3 redirect_stderr=false stdout_logfile=/var/projects/graphite/storage/log/carbon.log stdout_logfile_maxbytes=1MB stdout_logfile_backups=10 stdout_capture_maxbytes=1MB stderr_logfile=/var/projects/graphite/storage/log/carbon-error.log stderr_logfile_maxbytes=1MB stderr_logfile_backups=10 stderr_capture_maxbytes=1MB

Он определяет, как запускать серверную часть графита и сервер углерода.

В моем случае я помещаю этот файл в каталог conf песочницы и ссылаюсь на него в каталоге, где его найдет супервизор.

Параллельно я создаю конфигурацию для uwsgi, которая выглядит следующим образом:

<uwsgi> <socket>127.0.0.1:8001</socket> <processes>2</processes> <home>/var/projects/graphite/.

env</home> <pythonpath>/var/projects/graphite/webapp/</pythonpath> <chdir>/var/projects/graphite/webapp</chdir> <max-requests>2000</max-requests> <touch-reload>/var/projects/graphite/uwsgi.reload</touch-reload> <harakiri>120</harakiri> <post-buffering>8192</post-buffering> <post-buffering-bufsize>65536</post-buffering-bufsize> <master/> <single-interpreter/> <env>DJANGO_SETTINGS_MODULE=graphite.settings</env> <module>wsgi</module> </uwsgi>

Директива модуля указывает на модуль Python, который необходимо запустить.

За основу я взял графит.wsgi.example который тут же, подправил и положил в директорию /var/projects/graphite/webapp с именем wsgi.py .

После правок это выглядело так:

import os import django.core.handlers.wsgi application = django.core.handlers.wsgi.WSGIHandler() # READ THIS # Initializing the search index can be very expensive, please include # the WSGIScriptImport directive pointing to this script in your vhost # config to ensure the index is preloaded before any requests are handed # to the process. from graphite.logger import log log.info("graphite.wsgi - pid %d - reloading search index" % os.getpid()) import graphite.metrics.search

Далее в каталоге conf переименуем пару файлов:

$ mv carbon.conf.example carbon.conf $ mv storage-schemas.conf.example storage-schemas.conf

Кроме того, в каталоге webapp/graphite необходимо переименовать файл настроек:

$ mv local_settings.py.example local_settings.py

Также рекомендуется внести в этот файл необходимые изменения, например, я ввел туда настройки доступа к posgresql. После редактирования local_settings для инициализации графитовой базы нужно запустить и следовать инструкциям:

$ python webapp/graphite/manage.py syncdb

Nginx для графита Я сделал такой файл:

server { access_log /var/projects/graphite/storage/log/nginx.access.log main; error_log /var/projects/graphite/storage/log/nginx.error.log info; listen 80; server_name graphite.some_site.com; root /var/projects/graphite/webapp/; location / { include /etc/nginx/uwsgi_params; uwsgi_pass 127.0.0.1:8001; } location /content/ { access_log off; expires 30d; } }

Я сохранил его в каталоге conf песочницы рядом с указанными выше файлами для супервизора и uwsgi, назвал его nginx.conf и сделал на него символическую ссылку в каталоге виртуальных хостов nginx. Запуск Перед перезапуском супервизора и nginx необходимо исправить права доступа к каталогу песочницы, чтобы файлы и каталоги были доступны для чтения пользователю, под которым запущены nginx и супервизор.

Кроме того, этим пользователям необходимо разрешить запись в каталоги выполнения и хранения.

В моем случае и супервизор, и nginx принадлежат группе www, поэтому я делаю следующее:

$ mkdir /var/projects/graphite/run $ chown myuser:www -R /var/projects/graphite $ cd /var/projects/graphite $ chmod -R 770 storage run

Все, перезапускаем супервизор и nginx. По логам в хранилище видим, что всё нормально, но в браузере по данному адресу видим графит.

Собран
Здесь все гораздо проще :-) Сначала нужно установить в систему сам Collectd с набором необходимых плагинов.

Описывать этот процесс я не буду, так как все знают, как устанавливать приложения в том или ином дистрибутиве.

Поскольку сервис не требует хранения данных, я не стал устанавливать rrd*.

Вместо rrftool будет использоваться графит. Для того, чтобы собранные данные передавались туда, где они должны быть, вам необходимо установить плагин, который это сделает. Я выбрал собранный углерод , который написан на Python. Сначала я попробовал использовать плагин, написанный на C ( Collectd-write_graphite ), оно даже сразу заработало, но присылались какие-то странные названия метрик и я забросил это.

Настройка плагина проста и понятна, его можно просмотреть на Github по ссылке выше.



Нижняя граница
Пожалуй, на этом закончу, раз уж цель достигнута.

Эту связку я использую для просмотра статистики на своем домашнем сервере и в ближайшее время планирую добавить сюда отправку данных с нескольких внешних машин.

Таким образом, графит выступает агрегатором статистики.

Спасибо за внимание, надеюсь, что пост будет полезен еще кому-нибудь.

Если получилось немного длинно (а может местами не совсем гладко), то прошу прощения.



Ссылки
http://graphite.readthedocs.org/en/1.0/index.html http://www.frlinux.eu/Эp=199 http://graphite.wikidot.com/ http://mldav.blogspot.com/2011/10/debian-graphite.html http://collectd.org/

ПС
По поводу «движений тела».

Это критика в адрес разработчиков графита, которые почему-то не удосужились сделать, например, 1 пакет вместо 3 + небольшой скрипт, который будет настраивать окружение.

Теги: #python #Администрирование сервера #graphite #статистика #collectd #virtualenv

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.