Мониторим логи из systemctl с помощью Grafana
Вы ведь уже используете Grafana для того, что-бы мониторить состояние вашего сервера, но что если вы сможете окинув взглядом ваш Dashboard увидеть не только степень загруженности вашего процессора и забитость SSD?
Сегодня мы добавим на Ваш Dashboard панели с логами, их может обязано быть несколько, для того, что-бы вы с комфортом отслеживали работу сразу всех нод!)
Правки комментарии и предложения Teleram: @p_agony
Содержание:
- Вводные данные :/
- Установка стека Loki + Promtail автоматически :б
- Установка стека Loki + Promtail руками;)
- Конфигурация Grafana
- Как делать красивые панельки :3
- Проверяем порты
- Чиним порты
Вводные данные :/
Этот гайд работает с 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, который хотим отредактировать и нажимаем кнопку добавить панель:
Для удобства и сортировки нашей информации добавим новую строку в которую поместим наши панели с логами:
Открываем настройки строки и меняем ее название на любое нам удобное:
Снова нажимаем кнопку добавить панель и в этот раз добавляем панель:
Выбираем 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 у нас используется 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.