...

среда, 30 октября 2013 г.

[Из песочницы] Мониторинг статистики Django проектов с помощью Pinba на Debian GNU/Linux

В данном топике, будет рассказано о пошаговой настройке и конфигурации проекта и сервера с использованием связки pinba-engine + pinboard + django-pinba, для сбора и визулизации статистики проектов на django.

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


Почему pinba?




В команде есть проекты, которые были написаны на php. Посещаемость у проектов достаточно высокая(свыше 200к). Есть очень много узких мест. Часто после каких-либо обновлений и новшеств, мы получали огромные тормоза, о которых мы узнавали не сразу. Нужно было решение, которое повернуто лицом к заказчику и программисту. Закачик очень не любит zabbix и munin. Решение нашлось. Это был pinboard и pinba. Заказчику понравилось. Он попросил прикрутить pinba на все проекты, которые крутились на django.



Поехали




Настройка состоит из нескольких частей:

1. Установка pinba-engine-mysql в качестве сервера для мониторинга(на Debian GNU/Linux)

2. Установка pinboard, для просмотра текущего состояния проекта

3. Установка батарейки django-pinba, для отправки статистики

1. Установка pinba-engine-mysql в качестве сервера для мониторинга(на Debian GNU/Linux)




1.1. Подключаем дополнительный репозиторий, от автора проекта pinba:

# echo "deb http://php53.dotdeb.org stable all" >> /etc/apt/sources.list && echo "deb-src http://php53.dotdeb.org stable all" >> /etc/apt/sources.list
# gpg --keyserver keys.gnupg.net --recv-key 89DF5277 && gpg -a --export 89DF5277 | sudo apt-key add -
# apt-get update && apt-get upgrade -y




1.2. Установливаем MySQL и Pinba-Engine:

# apt-get install dialog mysql-server -y
# apt-get install pinba-engine-mysql-5.5 -y




1.3. Проверяем слушает ли pinba-engine-mysql нужный нам порт:

# netstat -uln|grep :30002




2. Установка pinboard, для просмотра текущего состояния проекта




2.1. Устанавливаем все необходимые зависимости:

# apt-get install git-core nginx php5-fpm curl php-apc php5-cli php5-mysqlnd vim -y




2.2. Клонируем проект и подтягиваем необходимые пакеты:

# cd /var/www/ && git clone git://github.com/intaro/pinboard.git && cd ./pinboard
# git checkout v1.0
# curl -sS https://getcomposer.org/installer | php && php composer.phar install
# cp config/parameters.yml.dist config/parameters.yml




2.3. Настраиваем параметры подключения к БД:

# vim config/parameters.yml




2.4. Мигрируем и регистрируем задания в кроне:

# ./console migrations:migrate
# ./console register-crontab




2.5. Настраиваем виртуальный хост nginx:

# touch /etc/nginx/sites-available/pinba.conf && ln -s /etc/nginx/sites-available/pinba.conf /etc/nginx/sites-enabled/ && vim /etc/nginx/sites-enabled/pinba.conf




2.6. Вставляем конифигурацию вирутального хоста и указываем необходимый server_name:

server {
listen 80;
server_name pinboard.example.com;
root /var/www/pinboard/web;

location = / {
try_files @site @site;
}

location / {
try_files $uri $uri/ @site;
}

location ~ \.php$ {
return 404;
}

location @site {
fastcgi_pass unix:/var/run/php5-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root/index.php;
fastcgi_param HTTPS $https if_not_empty;
}

location ~ /\.(ht|svn|git) {
deny all;
}
}




2.7. Перезагружаем демон nginx:

# /etc/init.d/nginx restart




2.8. Добавляем конфигурацию тайм-зоны в php.ini:

# sed -i 's/;date.timezone =/date.timezone = Europe\/Moscow/g' /etc/php5/cli/php.ini /etc/php5/fpm/php.ini




2.9. Проверим работу скрипта, прописанного в кроне:

# /var/www/pinboard/src/Pinboard/Command/../../../console aggregate




Если скрипт выполнил работу без ошибок, значит все работает верно. На этом настройка pinboard закончена.

3. Установка батарейки django-pinba, для отправки статистики




3.1. Установим батарейку:

$ pip install django-pinba




3.2. Откроем файл настройки settings.py и добавим django-pinba в MIDDLEWARE_CLASSES:

MIDDLEWARE_CLASSES = (
'pinba.middleware.PinbaMiddleware',
...
)




3.3. Укажем настройки нашего сервера с pinba-engine:

PINBA_SERVER = '192.168.55.11'
PINBA_PORT = 30002
PINBA_ENABLED = True




Желательно не держать статистику на одном сервере с проектом.

Заключение




Теперь можно открыть в окне браузера наш сайт, подождать некоторое время, которое было указано в crontab для pinboard, и любоваться красивыми графиками. Нагрузку для теста, можно создать с помощью ab или wget.

Интерфейс выглядит следующим образом:

image


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



Комментариев нет:

Отправить комментарий