В этой статье я хотел бы поделиться своим опытом настройки сервиса для сбора и визуализации статистики.
собрано в сочетании с графит .
Первый используется как сборщик данных, второй — как хранилище с визуализатором.
Мотивация
До недавнего времени я использовал Мунин для сбора и отображения статистики, но его графики меня всегда раздражали (внешний вид), не знаю почему.К тому же после обновления постоянно что-то отваливалось и мне это надоело.
В связи со всем этим я решил поискать альтернативу и наткнулся на Collectd. В целом мне это показалось достойной альтернативой, но все веб-визуализаторы, которые я для него рассматривал, показались мне немного убогими и я уже хотел отказаться от этой идеи.
И тут я вспомнил, что мы недавно на работе настраивали графит. Я решил попробовать, что из этого выйдет.
Цель
Настройте графит так, чтобы он запускался с использованием супервизора, uwsgi и virtualenv и был виден снаружи (nginx).
Collectd в этом случае должен передавать данные непосредственно в графит.
Графит
Сначала вам нужно создать каталог, в котором будет жить графит, и развернуть там виртуальную среду.
Для работы с изображениями графит использует cairo, поэтому данная библиотека должна быть установлена в системе.$ mkdir /var/projects/graphite $ cd /var/projects/graphite $ virtualenv --no-site-packages .
env $ virtualenv --relocatable .
env $ source .
env/bin/activate
В моем случае все уже есть, поэтому опишу только, как установить 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
-
Firefox 3.6 И Пространственная Ориентация
19 Oct, 24 -
Asn1Js И Pkijs — Год После Создания
19 Oct, 24