Установка Grafana на Debian довольна простая задача и хорошо документирована на официальном сайте, но в то же время есть несколько нюансов правильной первоначальной настройки Grafana.
В данной статье мы установим Grafana на Debian 9, в качестве базы хранения данных для Grafana мы будем использовать MySQL (по-умолчанию используется sqlite3), в качестве frontend мы будем использовать nginx в режиме reverse proxy.
Исходные данные: Debian 9, MariaDB 10.3.11, nginx 1.15.5
Задача: Установить Grafana, произвести первоначальную настройку.
Обновим список пакетов, установим пакет lsb-release (опционально, у Вас он уже может быть установлен), установим curl (опционально, у Вас он уже может быть установлен):
apt-get update apt-get install -y lsb-release apt-get install -y curl apt-get install -y adduser libfontconfig
Установим репозитарий и последнюю стабильную версию Grafana, активируем запуск Grafana при старте сервера:
echo "deb https://packages.grafana.com/oss/deb stable main" > /etc/apt/sources.list.d/grafana.list curl https://packages.grafana.com/gpg.key | apt-key add - apt-get update apt-get install -y grafana systemctl enable grafana-server.service
После установки мы не будем запускать Grafana, а сразу отредактируем настройки к нужному нам виду.
Основной файл конфигурации Grafana — /etc/grafana/grafana.ini
Отключаем регистрацию пользователей, а так же возможность создания организации для непривилегированных пользователей (в секции [users] нужно изменить параметры allow_sign_up и allow_org_create):
[users] allow_sign_up = false allow_org_create = false
Для быстрого изменения выполним:
sed -i '0,/allow_sign_up/{s/;allow_sign_up = true/allow_sign_up = false/}' /etc/grafana/grafana.ini sed -i 's/;allow_org_create = true/allow_org_create = false/g' /etc/grafana/grafana.ini
Отключаем отправку статистики на stats.grafana.org и проверку обновлений (в секции [analytics] нужно изменить параметры reporting_enabled и check_for_updates):
[analytics] reporting_enabled = false check_for_updates = false
Для быстрого изменения выполним:
sed -i 's/;reporting_enabled = true/reporting_enabled = false/g' /etc/grafana/grafana.ini sed -i 's/;check_for_updates = true/check_for_updates = false/g' /etc/grafana/grafana.ini
Настраиваем хранение данных в MySQL, для этого подключимся к MySQL с правами root и выполним создание БД и пользователя:
mysql> CREATE DATABASE grafana; mysql> CREATE USER 'grafana'@'localhost' identified by 'grafana-strong-password'; mysql> GRANT ALL PRIVILEGES ON `grafana`.* to 'grafana'@'localhost'; mysql> CREATE USER 'grafana'@'127.0.0.1' identified by 'grafana-strong-password'; mysql> GRANT ALL PRIVILEGES ON `grafana`.* to 'grafana'@'127.0.0.1'; mysql> FLUSH PRIVILEGES;
Далее вернемся к файлу настроек /etc/grafana/grafana.ini, пишем в нем настройки подключения к MySQL:
[database] type = mysql host = 127.0.0.1:3306 name = grafana user = grafana password = grafana-strong-password [session] provider = mysql provider_config = `grafana:grafana-strong-password@tcp(127.0.0.1:3306)/grafana`
В целях безопасности отключим проверку аватарок с сервиса gravatar (в секции [security] нужно изменить параметр disable_gravatar):
[security] disable_gravatar = true
Для быстрого изменения выполним:
sed -i 's/;disable_gravatar = false/disable_gravatar = true/g' /etc/grafana/grafana.ini
Меняем адрес на котором grafana принимает соединения на 127.0.0.1 (в секции [server] нужно изменить параметр http_addr):
[server] http_addr = 127.0.0.1
Для быстрого изменения выполним:
sed -i 's/;http_addr =/http_addr = 127.0.0.1/g' /etc/grafana/grafana.ini
Так же нам нужно изменить параметр отвечающий за публичный адрес нашей Grafan’ы, у нас он будет grafana.myorg.ru (в секции [server] нужно изменить параметр root_url):
root_url = https://grafana.myorg.ru
После этого можно запустить Grafana:
systemctl start grafana-server
После успешного запуска можно проверить лог-файл /var/log/grafana/grafana.log на наличие ошибок, их там не должно быть.
Проверяем факт запуска, Grafana должна принимать входящие соединения только на 127.0.0.1, порт 3000:
# netstat -ltupn |grep [g]rafana tcp 0 0 127.0.0.1:3000 0.0.0.0:* LISTEN 26594/grafana-serve
Теперь настроим nginx для проксирования запросов на Grafan’у. Предполагается, что nginx у Вас уже установлен и настроен и нам лишь необходимо добавить новый виртуальный сервер для обслуживания запросов к Grafan’е. В качестве адреса для доступа к Grafan’е у нас будет grafana.myorg.ru, у Вас будет свой домен.
Создаем каталоги для размещения лог-файлов nginx, хранения ssl сертификатов и каталог который нам потребуется в дальнейшем для получения SSL сертификата Let’s Encrypt:
mkdir -p /var/www/grafana.myorg.ru/{log,ssl,web} chmod 755 /var/www/grafana.myorg.ru chown -R grafana:grafana /var/www/grafana.myorg.ru chown root:root /var/www/grafana.myorg.ru/ssl
Далее создаем файл конфигурации nginx, пока без поддержки https.
Файл /etc/nginx/sites-available/grafana.myorg.ru.vhost
server { listen 185.125.XXX.XXX:80; server_name grafana.myorg.ru; root /var/www/grafana.myorg.ru/web; index index.html index.htm; error_log /var/www/grafana.myorg.ru/log/error.log; access_log /var/www/grafana.myorg.ru/log/access.log main; location "/.well-known/" { default_type "text/plain"; root /var/www/grafana.myorg.ru/web; } set $ssl off; set $port 80; if ($scheme = https) { set $ssl on; set $port 443; } location / { proxy_connect_timeout 59s; proxy_send_timeout 600s; proxy_read_timeout 600s; proxy_buffer_size 64k; proxy_buffers 16 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; proxy_max_temp_file_size 0; proxy_pass_header Set-Cookie; proxy_redirect off; proxy_hide_header Vary; proxy_ignore_headers Cache-Control Expires; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Accept-Encoding ''; proxy_set_header Referer $http_referer; proxy_set_header Host $host; proxy_set_header Cookie $http_cookie; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Ssl $ssl; proxy_set_header X-Forwarded-Port $port; proxy_set_header Proxy ""; proxy_cache_bypass $http_upgrade; proxy_http_version 1.1; proxy_pass http://127.0.0.1:3000; } }
Хочу обратить внимание на несколько настроек:
1. Вместо подстроки 185.125.XXX.XXX Вы пишите адрес своего сервера;
2. В строке access_log в конце указан формат лога main, возможно у Вас в файле /etc/nginx/nginx.conf его нет. Если данного формата у Вас нет, то будет выдана ошибка, добавьте его в /etc/nginx/nginx.conf:
log_format main '$remote_addr - $remote_user [$time_local] ' '"$request" $status $bytes_sent ' '"$http_referer" "$http_user_agent" "$http_x_forwarded_for" "$host" $upstream_response_time';
3. Указание location /.well-known/ необходимо для дальнейшего получения SSL-сертификата Let’s Encrypt;
Создаем симлинк:
ln -s /etc/nginx/sites-available/grafana.myorg.ru.vhost /etc/nginx/sites-enabled/100-grafana.myorg.ru.vhost
Хочу обратить внимание, что для того, чтобы наша конфигурация виртуального сервера работала, в файле /etc/nginx/nginx.conf в секции http должна быть строка:
include /etc/nginx/sites-enabled/*;
Проверяем конфигурацию nginx:
nginx -t
Должно выдать:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Если конфигурацию nginx не содержит ошибок, то говорим nginx перечитать ее:
nginx -s reload
Теперь мы можем открыть в браузере наш сайт http://grafana.myorg.ru и увидеть окно ввода логина и пароля в Grafan’у.
Но работать по http не безопасно и поэтому настроим https.
Первым делом запрашиваем SSL-сертификат от Let’s Encrypt (предполагается, что Вы уже знакомы с работой утилиты certbot-auto и она установлена на вашем сервере):
certbot-auto certonly --agree-tos --webroot -d grafana.myorg.ru -w /var/www/grafana.myorg.ru/web
Если SSL-сертификат был успешно получен, то можно изменить наш файл /etc/nginx/sites-available/grafana.myorg.ru.vhost к следующему виду:
server { listen 185.125.XXX.XXX:80; server_name grafana.myorg.ru; return 301 https://$host$request_uri; } server { listen 185.125.XXX.XXX:443 http2 ssl; ssl_certificate /etc/letsencrypt/live/grafana.myorg.ru/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/grafana.myorg.ru/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; ssl_session_tickets on; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 5s; ssl_stapling on; ssl_stapling_verify on; ssl_stapling_responder http://ocsp.int-x3.letsencrypt.org; server_name grafana.myorg.ru; root /var/www/grafana.myorg.ru/web; index index.html index.htm; error_log /var/www/grafana.myorg.ru/log/error.log; access_log /var/www/grafana.myorg.ru/log/access.log main; location "/.well-known/" { default_type "text/plain"; root /var/www/grafana.myorg.ru/web; } set $ssl off; set $port 80; if ($scheme = https) { set $ssl on; set $port 443; } location / { proxy_connect_timeout 59s; proxy_send_timeout 600s; proxy_read_timeout 600s; proxy_buffer_size 64k; proxy_buffers 16 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; proxy_max_temp_file_size 0; proxy_pass_header Set-Cookie; proxy_redirect off; proxy_hide_header Vary; proxy_ignore_headers Cache-Control Expires; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Accept-Encoding ''; proxy_set_header Referer $http_referer; proxy_set_header Host $host; proxy_set_header Cookie $http_cookie; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Ssl $ssl; proxy_set_header X-Forwarded-Port $port; proxy_set_header Proxy ""; proxy_cache_bypass $http_upgrade; proxy_http_version 1.1; proxy_pass http://127.0.0.1:3000; } }
Вновь проверяем конфигурацию nginx:
nginx -t
Должно выдать:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Если конфигурацию nginx не содержит ошибок, то говорим nginx перечитать ее:
nginx -s reload
Теперь мы можем открыть в браузере наш сайт http://grafana.myorg.ru, нас должно переадресовать на https версию и мы снова должны увидеть окно ввода логина и пароля в Grafan’у.
Если у Вас не получилось что-то настроить, то Вы всегда можете обратиться за профессиональной помощью ко мне.
В следующей статье я расскажу как устанавливать плагины для Grafan’ы разными способами, а так же как настроить аутентификацию в Grafana через OpenLDAP и Active Directory.
На этом все, до скорых встреч. Если у Вас возникли вопросы или Вы хотите, чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.
Профессионально занимаюсь системным администрированием Linux -серверов и баз данных (MySQL, PostgreSQL) на протяжении последних 24 лет.