Установка 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: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.

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


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

avatar
1000

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

  Подписаться  
Уведомление о