Grafana Loki — это система для сбора, хранения и анализа логов, c визуализацией через веб-интерфейс Grafana.
Promtail — агент для сборки журналов и отправки их в Loki.
Установка Loki через Docker Compose
Официальный мануал по установке здесь.
Пример docker-compose.yaml с volumes для сохранения данных при удалении контейнеров.
version: "3.3"
networks:
loki:
volumes:
loki-data:
promtail-data:
grafana-data:
services:
loki:
image: grafana/loki:latest
ports:
- "3100:3100"
command: -config.file=/etc/loki/local-config.yaml
networks:
- loki
volumes:
- loki-data:/loki
promtail:
image: grafana/promtail:latest
command: -config.file=/etc/promtail/config.yml
networks:
- loki
volumes:
- promtail-data:/var/promtail
security_opt:
- seccomp:unconfined
grafana:
environment:
- GF_PATHS_PROVISIONING=/etc/grafana/provisioning
- GF_AUTH_ANONYMOUS_ENABLED=false
- GF_AUTH_ANONYMOUS_ORG_ROLE=Admin
- GF_FEATURE_TOGGLES_ENABLE=alertingSimplifiedRouting,alertingQueryAndExpressionsStepMode
- TZ=${SYSTEM_TIMEZONE:-Europe/Moscow}
entrypoint:
- sh
- -euc
- |
mkdir -p /etc/grafana/provisioning/datasources
cat <<EOF > /etc/grafana/provisioning/datasources/ds.yaml
apiVersion: 1
datasources:
- name: Loki
type: loki
access: proxy
orgId: 1
url: http://loki:3100
basicAuth: false
isDefault: true
version: 1
editable: false
EOF
/run.sh
image: grafana/grafana:latest
ports:
- "3000:3000"
networks:
- loki
volumes:
- grafana-data:/var/lib/grafana
- grafana-data:/etc/grafana/provisioning/datasources
Кладем файл docker-compose.yaml в нужную директорию и запускаем командой
docker-compose up -d
Проверяем, что все контейнеры запустились
docker-compose ps
После этого Grafana доступна по адресу http://hostname:3000. Пароль поумолчанию admin/admin.
Loki соответственно http://hostname:3100. Можно посмотреть статус http://hostname:3100/ready, и метрики http://hostname:3100/metrics.
Loki запущен и работает, теперь нужно настроить отправку логов с другого сервера.
Установка Promtail (на примере Centos)
Добавляем пользователя, от которого будет работать Promtail
sudo useradd -r -M -s /bin/false promtail
Скачиваем и распаковываем Promtail
cd /usr/local/bin
sudo curl -O -L https://github.com/grafana/loki/releases/latest/download/promtail-linux-amd64.zip
sudo unzip promtail-linux-amd64.zip
sudo rm promtail-linux-amd64.zip
Делаем файл исполняемым и меняем владельца
sudo chmod a+x "promtail-linux-amd64"
sudo chown promtail:promtail promtail-linux-amd64
Скачиваем конфиг и редактируем под свои нужды
wget https://raw.githubusercontent.com/grafana/loki/refs/tags/v3.3.0/clients/cmd/promtail/promtail-local-config.yaml
sudo chown promtail:promtail promtail-local-config.yaml
В секции clients - url нужно указать адрес вашего сервера Loki. Описание структуры конфига в официальном мануале.
Регистрируем сервис
sudo nano /etc/systemd/system/promtail.service
[Unit]
Description=Promtail service
After=network.target
[Service]
Type=simple
User=promtail
ExecStart=/usr/local/bin/promtail-linux-amd64 -config.file /usr/local/bin/promtail-local-config.yaml
[Install]
WantedBy=multi-user.target
Добавляем сервис в автозагрузку и стартуем
sudo systemctl daemon-reload
sudo systemctl enable --now promtail
systemctl status promtail
У Promtail есть свой простенький веб-клиент, по умолчанию на порту 9080. Соответственно проверяем порт и открываем наружу
ss -nltup | grep 9080
sudo firewall-cmd --add-port=9080/tcp --permanent
sudo firewall-cmd --reload
Чтобы дать возможность Promtail читать системные журналы, добавляем пользователя в группу systemd-journal и перезапускаем службу
sudo usermod -aG systemd-journal promtail
sudo systemctl restart promtail
Для доступа к директориям
sudo setfacl -m u:promtail:x /var
sudo setfacl -R -m u:promtail:rX /var/log
sudo setfacl -R -m d:u:promtail:rX /var.log
sudo -u promtail ls -l /var/log # Проверка
Так-же для проверки работы Promtail можно использовать команду
promtail-linux-amd64 --dry-run --inspect --config.file=promtail-local-config.yaml
--dry-run - без отправки в Loki
--inspect - отладочная информация в консоль
После запуска Promtail, если все сделано правильно, логи должны появиться в Grafana. В разделе Explore должны быть доступны джобы указанные в promtail-local-config.yaml
Источники:
- https://itdraft.ru/2021/02/26/ustanavlivaem-promtail-v-centos-debian/
- https://iu5edu.ru/wiki/devops/docs/labs/observability/loki/
- https://habr.com/ru/articles/772702/
- https://habr.com/ru/companies/badoo/articles/507718/
- https://temofeev.ru/info/articles/delaem-dashbord-dlya-logov-ispolzuya-promtail-loki-grafana/