Мониторинг серверов и сервисов с помощью Grafana

Я хотел написать про Grafana и его друзей Consul, Loki и т.п. потом передумал, это будет лютый лонгрид и поехали просто как графану установить.

Установка Grafana.

Импортируем ключ репозитория.

# wget -q -O gpg.key https://rpm.grafana.com/gpg.key

Создаем файл описания репозитория в файле /etc/yum.repos.d/grafana.repo.

[grafana]
name=grafana
baseurl=https://rpm.grafana.com
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://rpm.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt

Обратите внимание, что из РФ в свете последних событий вас пошлют лесом с такой вот ошибкой.

Errors during downloading metadata for repository ‘grafana’:
 – Status code: 403 for https://rpm.grafana.com/repodata/repomd.xml (IP: 151.101.130.217)
Error: Failed to download metadata for repo ‘grafana’: Cannot download repomd.xml: Cannot download repodata/repomd.xml: All mirrors were tried

И в этом случае у нас есть два варианта. Можем поднять клон репозиория который мы скачаем через зарубежный прокси или напрямую укажем использовать прокси для этого репозиторя добавив наш прокси в конфигурационный файл одной строкой.

proxy=http://45.138.27.6:3128

Естественно, что вместо 45.138.27.6 надо будет указать ваш прокси сервер и если ипользуется авторизация, то запись будет выглядеть вот так.

proxy=http://user:password@proxy.example.com:3128

Теперь мы устанавливаем графану как сервис, активируем и запускаем.

# dnf install grafana
# systemctl enable grafana-server
# systemctl start grafana-server

Сервис доступен на порту 3000 и логин-пароль по умолчанию admin/admin. Если у вас активен Firewalld, то добавляем разрешения.

# firewall-cmd --permanent --add-port=3000/tcp
success
# firewall-cmd --reload

Графана готова и можно пробовать авторизоваться.

По IP-Port ходить не кошерно и сделаем реверс-прокси отсучением по IP-адресам внутренный сети примерно такого содержания (поправить по вкусу).

  server {
    listen   80;
    include acme;
    server_name sms-grafana.smsfinanceit.ru;
        location / {
      if ($request_method = GET) {
        rewrite  ^ https://$host$request_uri? permanent;
      }
      return 405;
    }
  }

  server {
    listen   443 ssl;
    http2 on;
    server_name sms-grafana.smsfinanceit.ru;
    include acme;

  ssl_protocols TLSv1.1 TLSv1.2;
  ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES256-SHA384;
  ssl_prefer_server_ciphers on;
  ssl_session_timeout 10m;
  ssl_certificate      /etc/letsencrypt/live/sms-grafana.smsfinanceit.ru/fullchain.pem;
  ssl_certificate_key  /etc/letsencrypt/live/sms-grafana.smsfinanceit.ru/privkey.pem;
  ssl_trusted_certificate /etc/letsencrypt/live/sms-grafana.smsfinanceit.ru/chain.pem;

         access_log /var/log/nginx/sms-grafana.smsfinanceit.ru_access.log;
         error_log  /var/log/nginx/sms-grafana.smsfinanceit.ru_error.log;

    proxy_set_header   Host                 $http_host;
    proxy_set_header   X-Forwarded-Proto    $scheme;
    proxy_set_header   X-Forwarded-For      $remote_addr;

    proxy_read_timeout 120s;
    proxy_send_timeout 120s;
    send_timeout 120s;
    resolver_timeout 120s;
    client_body_timeout 120s;

    client_max_body_size 50m;
    client_body_buffer_size 200k;

    location / {
      allow 34.22.136.63;
      deny all;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection $connection_upgrade;
      add_header Strict-Transport-Security "max-age=31536000";
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header Host $http_host;
      proxy_set_header X-Forwarded-Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-Server $host;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Scheme $scheme;
      proxy_pass http://10.54.110.94:3000;
    }
  }

Конфиг достаточно типовой и особых вопросов думаю не вызывает.

Установка Prometheus

Сразу, чтобы два раза не вставать откроем нужные порты.

# firewall-cmd --permanent --zone=public --add-port=9090/tcp --add-port=9093/tcp --add-port=9094/{tcp,udp} --add-port=9100/tcp
# firewall-cmd --reload

Я честно говоря не пониаю за каким чертом они поставляют свое решение в виде tar.gz, а не репозиторием, хотя у них есть конечно докер образ, но мы решили bare-metal пусть так оно и будет. Посему скачиваем текущую стабильную версию с официального сайта https://prometheus.io/download/.

# wget https://github.com/prometheus/prometheus/releases/download/v2.54.1/prometheus-2.54.1.linux-amd64.tar.gz

Дальше по классике, все то что бы за нас сделал докер, мы сделаем руками. Создадим пользователя, распакуем образ, напишем скрипты для запуска и т.п. и если вам лень, то берите образ докера, там все тоже самое.

# useradd --no-create-home --shell /bin/bash prometheus
# usermod --home /opt/prometheus prometheus
# mkdir /etc/prometheus
# mkdir /var/lib/prometheus
....
Дальше лень копипастить.

В принципе ничего интересного расписывать, тупо раскидываем бинарники по каталогам, меняем владельца и погнали. Единственное, что стоит отметь два бинаря promtool и prometheus симлинками лучше загнать в /usr/local/bin/, чисто для красоты.

Теперь, мы попробуем запустить это чудо локально от имени пользователя которго мы создали и проверим, что оно у нас вообще запускается перед тем как сервис рисовать.

# su prometheus -s /bin/bash
$ /usr/local/bin/prometheus --config.file /etc/prometheus/prometheus.yml --storage.tsdb.path /var/lib/prometheus/ --web.console.templates=/opt/prometheus/consoles --web.console.libraries=/opt/prometheus/console_libraries

Если веб-интерфейс на порту 9090 отображается, то значит мы все правильно сделали.

Рисуем сервис в файле /etc/systemd/system/prometheus.service

[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus --config.file /etc/prometheus/prometheus.yml --storage.tsdb.path /var/lib/prometheus/ --web.console.templates=/opt/prometheus/consoles --web.console.libraries=/opt/prometheus/console_libraries
[Install]
WantedBy=multi-user.target

Дальше, классика активируем и включаем. Тюнить все это хозайство будем позже.

# systemctl enable prometheus
# systemctl start prometheus

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *