Администрирование
April 19, 2022

Мониторим логи из systemctl с помощью Grafana

А сперва хокку:

Поздняя ночь

Самурай в печали

Нода крашнулась

Вы ведь уже используете Grafana для того, что-бы мониторить состояние вашего сервера, но что если вы сможете окинув взглядом ваш Dashboard увидеть не только степень загруженности вашего процессора и забитость SSD?

Сегодня мы добавим на Ваш Dashboard панели с логами, их может обязано быть несколько, для того, что-бы вы с комфортом отслеживали работу сразу всех нод!)

Правки комментарии и предложения Teleram: @p_agony

Содержание:

  1. Вводные данные :/
  2. Установка стека Loki + Promtail автоматически :б
  3. Установка стека Loki + Promtail руками;)
  4. Конфигурация Grafana
  5. Как делать красивые панельки :3
  6. Проверяем порты
  7. Чиним порты

Вводные данные :/

Этот гайд работает с Grafana если у вас есть права администратора и вы можете редактировать Dashboard и добавлять источники данных.

Тобишь - если ставили по какому-либо скрипту то откройте графану и посмотрите есть ли у вас там такая менюшка в боковой панели:

Если ставили руками то у вас она есть)

Еще можно завести бесплатный аккаунт на официальном сайте.

Можно приступать к установке)

Установка стека Loki + Promtail автоматически :б

Сперва перепроверьте доступность портов.

Выполните скрипт:

curl -s https://raw.githubusercontent.com/agonyp/Scripts-ALPHA-Noderunning/main/loki-promtail.sh | bash

Если у вас были заняты порты. то после отработки скрипта перейдите к починке портов)

И выполните:

sudo systemctl restart loki.service && sudo systemctl restart promtail.service

Установка стека Loki + Promtail руками ;)

Сначала скачаем Loki и Promtail с файлами конфигурации.

Актуальные версии можно найти на GitHub проекта.

Команды ниже загрузят версию 2.5.0 актуальную на момент написания гайда.

wget https://github.com/grafana/loki/releases/download/v2.5.0/loki-linux-amd64.zip && wget https://github.com/grafana/loki/releases/download/v2.5.0/promtail-linux-amd64.zip

Качаем файлы конфигурации:

wget https://raw.githubusercontent.com/grafana/loki/master/cmd/loki/loki-local-config.yaml && wget https://raw.githubusercontent.com/grafana/loki/main/clients/cmd/promtail/promtail-local-config.yaml

Нам нужно разархивировать софт который мы только что скачали

Если у вас еще не установлена утилита unzip то можете выполнить:

sudo apt update && sudo apt install unzip

Разархивируем:

unzip loki-linux-amd64.zip && unzip promtail-linux-amd64.zip

Делаем файлы исполняемыми:

chmod a+x loki-linux-amd64 promtail-linux-amd64

Отправляем наши программы в папку /usr/bin/ :

sudo mv promtail-linux-amd64 loki-linux-amd64 -t /usr/bin/

Самое время разобраться с файлами конфигурации которые мы скачали, сделаем папку loki по пути /etc/loki/ и скопируем туда наши файлы):

sudo mkdir /etc/loki/ && sudo mv promtail-local-config.yaml loki-local-config.yaml -t /etc/loki/

Возможно у вас будет занят порт по умолчанию для софта, проверьте)

С файлами конфигурации мы закончили для того, что-бы не хитро посмотреть логи этого хватит!)


Делаем пользователей для сервисов Loki и Promtail и добавляем пользователя Promtail в группу adm:

sudo useradd --system loki && sudo useradd --system promtail && sudo usermod -a -G adm promtail

Далее нам нужно будет создать сервисы для того, что-бы софт работал в фоне, начнем с Loki -

Создаем файл конфигурации:

sudo nano /etc/systemd/system/loki.service

И копируем в него текст ниже:

[Unit]
Description=Loki service 
After=network.target 

[Service]
Type=simple
User=loki
ExecStart=/usr/bin/loki-linux-amd64 -config.file /etc/loki/loki-local-config.yaml

[Install]
WantedBy=multi-user.target

Добавляем Loki в автозапуск и запускаем командой:

sudo systemctl enable loki.service && sudo systemctl start loki.service

Проверяем:

sudo systemctl status loki.service

Теперь добавляем файл для Promtail:

sudo nano /etc/systemd/system/promtail.service

И вставляем туда этот текст:

[Unit]
Description=Promtail service
After=network.target

[Service]
Type=simple
User=promtail
ExecStart=/usr/bin/promtail-linux-amd64 -config.file /etc/loki/promtail-local-config.yaml

[Install]
WantedBy=multi-user.target

Добавляем Promtail в автозапуск и запускаем командой:

sudo systemctl enable promtail.service && sudo systemctl start promtail.service

Проверяем:

sudo systemctl status promtail.service

Конфигурация Grafana:

Открываем Grafana и с помощью меню заходим в меню настройки источников данных:

Добавляем новый источник данных:

Из списка источников выбираем Loki!

Сюда пишем http://IP-ВАШЕГО-СЕРВЕРА:ПОРТ, по умолчанию порт 3100, а если Grafana у вас на том-же сервере что и Loki, то можно вместо IP указать localhost:

Если у вас несколько серверов то вы можете по аналогии с первым добавить его, указать удобное для себя название и при создании панели указывать любой из ваших серверов в качестве источника!

Листаем вниз и нажимаем Save & test, если все прошло хорошо то источник добавиться о чем вас оповестит уведомление)

Как делать красивые панельки :3

Открываем Dashboard, который хотим отредактировать и нажимаем кнопку добавить панель:

Для удобства и сортировки нашей информации добавим новую строку в которую поместим наши панели с логами:

Открываем настройки строки и меняем ее название на любое нам удобное:

Снова нажимаем кнопку добавить панель и в этот раз добавляем панель:

Меняем тип панели на Logs:

Выбираем Loki в качестве источника данных:

В качестве запроса используем {filename="/var/log/syslog"} :

Нажимаем Shift + Enter и видим все логи нашего сервера!) Также ставим порядок на Ascending тогда свежие логи у вас будут как и в окне терминала будут внизу!

Для удобства так-же можете включить опцию Wrap lines она будет добавлять переносы в строку лога, так что-бы он помещался в пределах панели)

Это конечно тоже хорошо но, нам бы их фильтровать и видеть логи конкретного приложения, будем выполнять фильтрацию по куску текста, разберем на примере:

Сейчас вместо солянки из всех логов у меня исключительно данные Subspace ноды. Что означают эти новые выражения?

Значение в кавычках после операнды |= - это текст по которому нам в панель будут отфильтровывать логи! Что-бы точно попасть со значением можете просто отыскать названия ваших нод в неотфильтрованных логах и указать его)

Значение в кавычках после операнды != - это текст логи с которым будут исключены из вывода, к примеру: loki отчитывался о чем-то упоминая название subspace-node поэтому логи loki попадали в общий вывод, но мы их успешно убрали)

По аналогии панели что мы с вами только что сделали, можно сделать панель для любого другого приложения, просто добавьте еще одну панель и повторите действия!)

Проверяем порты:

У меня так случилось, что одна из нод использовала порт который нужен Loki в конфигурации по умолчанию, нас интересуют порты 3100 и 9080, что-бы понять не занят ли порт используем команду:

ss -lp | grep 9080 && ss -lp | grep 3100

Если команда в результате нам ничего не вывела, то - можно использовать конфигурацию по умолчанию!

Если порт все таки занят, то вам предстоит покопаться в потрохах конфиг файла)

Если занят 9080;

Если занят 3100;


Чиним порты:


Порт 9080 у нас используется Promtail`ом:

sudo nano /etc/loki/promtail-local-config.yaml

http_listen_port: 9080 - этого товарища мы заменяем на любого его незанятого соседа и сохраняем файл с помощью комбинации Ctrl + S, закрываем nano с помощью Ctrl + X

Как найти соседа?

ss -lp | grep НОМЕРПОРТА

Порт 3100 у нас использует и Loki и Promtail:

sudo nano /etc/loki/promtail-local-config.yaml


- url: http://localhost:3100/loki/api/v1/push

Меняем 3100 на любого незанятого соседа и запоминаем на что поменяли. Cохраняем файл с помощью комбинации Ctrl + S, закрываем nano с помощью Ctrl + X

Как найти соседа?

ss -lp | grep НОМЕРПОРТА

Открываем файл конфигурации Loki:

sudo nano /etc/loki/loki-local-config.yaml

http_listen_port: 3100 - 3100 меняем на тот порт который указали в файле конфигурации Promtail.

И его-же мы будем использовать при добавлении источника данных в Grafana.