Установка Grafana на Debian 9

Установка 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:[email protected](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.programs74.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.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.

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


Хотите оставить комментарий?