Хочу поделиться опытом установки и настройки сервиса для сбора и отображения метрик Graphite + Grafana.
Искал долго, читал много, нашёл 2 статьи на английском, добавил своё, в итоге получилась данная статья.
Немного предыстории..
Graphite — система для отображения метрик (числовых значений) для любых свойств сервера или домашнего ПК.
Carbon — демон/бэкенд, в который пишутся метрики.
Grafana — более красивая и удобная Web-морда для Graphite.
И так, приступим.
Установка и настройка Php + Nginx + MySQL
Установка Php + Nginx + MySQL
Тут всё довольно просто.
sudo apt install php5-fpm php5-json php5-mysql sudo apt install nginx nginx-extras sudo apt install mysql-server
Во время установки будет запрос пароля для root-пользователя MySQL.
Установка phpMyAdmin
Для более удобного доступа у базам данных MySQL установим phpMyAdmin.
Скачиваем отсюда последнюю версию
cd /usr/share/ sudo wget https://files.phpmyadmin.net/phpMyAdmin/4.6.2/phpMyAdmin-4.6.2-all-languages.zip sudo unzip phpMyAdmin-4.6.2-all-languages.zip sudo rm phpMyAdmin-4.6.2-all-languages.zip sudo mv phpMyAdmin-4.6.2-all-languages phpmyadmin
Настраиваем Nginx для phpMyAdmin
В файл настроек /etc/nginx/conf.d/pma.conf пишем следующее:
server { server_name pma.your.site; listen 80; location / { root /usr/share/phpmyadmin/; index index.php index.html index.htm; location ~ ^/(.+\.php)$ { try_files $uri =404; root /usr/share/phpmyadmin/; fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $request_filename; include /etc/nginx/fastcgi_params; } location ~* ^/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { root /usr/share/phpmyadmin/; } } }
И перезапускаем Nginx
sudo service nginx restart
Предварительные настройки MySQL
Заходим по адресу pma.your.site, который Вы прописали в настройках выше, авторизируемся под root пользователем с тем паролем, который Вы установили во время установки MySQL.
Создадим базу данных graphite и пользователя graphite, и дадим этому пользователю все привилегии на эту базу.
Установка и настройка Graphite + Carbon
Установка Graphite + Carbon
Тут тоже всё довольно просто:
sudo apt-get install graphite-web graphite-carbon
Настройка Graphite
Редактируем файл конфигурации /etc/graphite/local_settings.py.
SECRET_KEY = 'MY NICE RANDOM SALT' TIME_ZONE = 'UTC' USE_REMOTE_USER_AUTHENTICATION = True DATABASES = { 'default': { 'NAME': 'graphite', 'ENGINE': 'django.db.backends.mysql', 'USER': 'graphite', 'PASSWORD': 'mypassword', 'HOST': '127.0.0.1', 'PORT': '' } }
Синхронизация базу данных
Синхронизируем базу данных следующей командой
sudo graphite-manage syncdb
Настройка Carbon
Редактируем следующие файлы конфигурации
/etc/default/graphite-carbon
CARBON_CACHE_ENABLED = true
/etc/carbon/carbon.conf
ENABLE_LOGROTATION = True
Копируем стандартные настройки агрегации хранилища
sudo cp /usr/share/doc/graphite-carbon/examples/storage-aggregation.conf.example /etc/carbon/storage-aggregation.conf
И перезапускаем Carbon
sudo service carbon-cache start
Установка uWSGI
Для установки uWSGI запустите следующие команды
sudo apt-get install python-dev sudo pip install uwsgi
Если в Вашей системе не установлен pip — устанавливаем его
sudo apt-get install python-pip
И выполняем команды выше.
Копируем стандартный файл конфигурации
sudo cp /usr/share/graphite-web/graphite.wsgi /usr/share/graphite-web/graphite_wsgi.py
Создаём файл конфигурации:
sudo nano /etc/init/uwsgi-graphite.conf
И вписываем туда следующие строки:
env UWSGI_BIN=/usr/local/bin/uwsgi env PYTHONPATH=/usr/share/graphite-web expect fork umask 0000 start on runlevel [2345] stop on runlevel [!2345] script exec $UWSGI_BIN --socket /var/run/graphite.sock --master --need-app \ --catch-exceptions --reload-on-exception --pp $PYTHONPATH \ -w graphite_wsgi:application --buffer-size 32768 -p 4 -O 2 >>/var/log/graphite.log 2>&1 & end script
И запускаем Graphite
sudo service uwsgi-graphite start
Настройка Nginx для Graphite
Редактируем файл конфигурации /etc/nginx/conf.d/graphite.conf
server { server_name graphite.your.site; listen 80; access_log /var/log/nginx/graphite.access.log; error_log /var/log/nginx/graphite.error.log; root /usr/share/graphite-web; location = /favicon.ico { return 204; } location /content { alias /usr/share/graphite-web/static; expires max; } location / { uwsgi_pass unix:/var/run/graphite.sock; include uwsgi_params; } }
Перезапускаем Nginx и переходим по адресу graphite.your.site

Тестирование Graphite
Для проверки работоспособности Graphite достаточно выполнить одну простую команду:
echo "test.count 9 `date +%s`" | nc -q0 127.0.0.1 2003;
Ну или запустить цикл:
for i in 4 6 8 16 2; do echo "test.count $i `date +%s`" | nc -q0 127.0.0.1 2003; sleep 6; done
Теперь в Graphite модно наблюдать следующее:

Установка и настройка красивой Web-морды Grafana
Установка Grafana

Для установки Grafana выполняем следующие команды:
echo 'deb https://packagecloud.io/grafana/stable/debian/ wheezy main' | sudo tee -a /etc/apt/sources.list curl https://packagecloud.io/gpg.key | sudo apt-key add - sudo apt-get update sudo apt-get install grafana
Настройка MySQL для Grafana
Создадим в MySQL базу данных grafana и дадим все привилегии на неё пользователю graphite, которого мы создали ранее.
Редактируем файл конфигурации /etc/grafana/grafana.ini
[database] type = mysql host = 127.0.0.1:3306 name = grafana user = graphite password = mypassword [server] protocol = http http_addr = 127.0.0.1 http_port = 3000 domain = grafana.your.site enforce_domain = true root_url = %(protocol)s://%(domain)s/ [security] admin_user = admin #Имя пользователя-администратора admin_password = your_secure_password # Пароль пользователя-администратора secret_key = your_random_secret_salt
И запускаем Grafana
sudo service grafana-server start
Настройка Nginx для Grafana
Редактируем файл конфигурации /etc/nginx/conf.d/grafana.conf
server { server_name grafana.your.site; listen 80; access_log /var/log/nginx/grafana.access.log; error_log /var/log/nginx/grafana.error.log; location = /robots.txt { echo "User-agent: *\nDisallow: /\n"; } location / { proxy_pass http://localhost:3000; proxy_set_header Host $host; } }
Перезапускаем Nginx и переходим по адресу grafana.your.site

Вводим логин/пароль администратора, которые Вы установили выше, и попадаем в админ-панель Grafana.

Перед тем, как создавать дашборды и выводить метрики, нужно настроить источники данных.
Переходим в раздел Data Source -> Add New
Вводим следующие данные
- Name: graphite
- URL: graphite.your.site
Вот пример:

Теперь переходим на главную страницу, жмём New Dashboard -> New,
Слева будет малозаметная зелёная кнопка, при наведении на которую она выползет из-за края экрана. Нажимаем на неё и затем Add Panel -> Graph
Внизу Вы увиlите метрики, которые мы создавали тестовой командой выше, test и count.

На этом пока что всё, позже я расcкажу о плагинах для Grafana.
Больше информации
Пожалуйста, проследуйте по приведенным ниже ссылкам, чтобы узнать больше о Grafana и его удивительных настройках.
Благодарность
За основу статьи были взяты материалы следующих статей:
- Deploy Graphite and Nginx on an Ubuntu 14.04 server
- Deploy Grafana and Graphite an Ubuntu 14.04 server
Оригинал статьи опубликован на моём блоге
