🚧 Централізований збір та аналіз логів з Grafana
Мета: Мати доступ до логів та метрик з усіх пристроїв та віртуальних машин централізовано через один інтерфейс
Вступ
Цей гайд допоможе налаштувати централізований моніторинг та логування з використанням Grafana-стеку: Grafana, Loki, Prometheus та агента Alloy.
🔧 Структура стеку
Серверна частина: Loki (логи) + Prometheus (метрики)
Клієнтська частина: Alloy — універсальний агент збору логів і метрик
Візуалізація: Grafana
🏅 Альтернативи
Перед тим як перейти до Grafana-стеку, варто згадати й інші популярні системи для логування та моніторингу:
Netdata — дуже легкий і простий у розгортанні моніторинг-сервер. Має красиву панель із метриками “із коробки” та мінімальну затримку. Підійде для візуалізації одного хоста або невеликої кількості пристроїв.
Zabbix — класика корпоративного моніторингу з великою кількістю вбудованих шаблонів. Підтримує SNMP, агенти, алерти, мапи та автодетекцію. Потужний, але трохи важчий в освоєнні.
Graylog — спеціалізується саме на логах. Має чудовий пошук і фільтрацію, добре підходить для аналізу подій безпосередньо з журналів. Базується на Elasticsearch.
Elastic Stack (ELK) — Elasticsearch, Logstash і Kibana. Надпотужний стек, що використовується в масштабних проєктах, але потребує більше ресурсів і досвіду.
1. Встановлення Grafana + Loki + Prometheus в LXC контейнері
Базується на Ubuntu 22.04 у LXC. Можна розгорнути і в Docker, але кроки будуть іншими.
Додавання репозиторію Grafana:
sudo apt update
sudo apt install gpg
sudo mkdir -p /etc/apt/keyrings/
wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
sudo apt update
sudo apt install grafana loki prometheusАвтозапуск сервісів:
sudo systemctl enable --now grafana-serverУвімкнення Prometheus Remote Write:
sudo systemctl edit prometheusДодаємо у файл:
[Service]
ExecStart=
ExecStart=/usr/bin/prometheus --config.file=/etc/prometheus/prometheus.yml --enable-feature=remote-write-receiverПерезавантажуємо Prometheus:
sudo systemctl daemon-reexec
sudo systemctl restart prometheusLoki: усунення помилки з **enable_multi_variant_queries**
sudo nano /etc/loki/config.yml
# коментуємо рядок:
# enable_multi_variant_queries: false
sudo systemctl restart loki2. Підключення джерел даних у Grafana
Відкриваємо:
http://{IP_контейнера}:3000Авторизуємося: admin / admin та змінюємо пароль.
Переходимо:
**Connections → Data Sources → Add data source**Додаємо Loki: URL —
**http://localhost:3100**Додаємо Prometheus: URL —
**http://localhost:9090**
3. Встановлення Alloy на клієнті
Зверніть увагу: для старих 32-бітних процесорів (наприклад, першого покоління Pi Zero) немає збірок Alloy. Для таких пристроїв доведеться шукати альтернативні агенти для збору даних.
Cпершу додаємо репозиторії Grafana в систему та встановимо Alloy агент:
sudo apt update
sudo apt install gpg
sudo mkdir -p /etc/apt/keyrings/
wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
sudo apt update
sudo apt install alloyУвімкнення web-доступу (необов’язково):
sudo nano /etc/default/alloy
# Додати:
# CUSTOM_ARGS="--server.http.listen-addr=0.0.0.0:12345"Запускаємо Alloy та перевіряємо його статус одразу:
sudo systemctl enable --now alloy
sudo systemctl status alloy4. Конфігурація Alloy для логів
Створення/редагування файлу кофігурацій
sudo nano /etc/alloy/config.alloy👉 Повна базова конфігурація для журналу systemd та надсилання в Loki:
// Увімкнення або вимкнення веб-інтерфейсу живого дебагу Alloy
livedebugging {
enabled = false
}
// Налаштування логування самого агента Alloy
logging {
level = "info"
write_to = [loki.write.default.receiver]
}
// Налаштування відправки логів у Loki
loki.write "default" {
endpoint {
url = "http://IP_з_Loki:3100/loki/api/v1/push"
}
}
// Джерело логів: системний журнал (systemd journal)
loki.source.journal "loki_source_journal" {
max_age = "24h"
labels = {
job = "journal_logs",
}
relabel_rules = discovery.relabel.journal_relabel_rules.rules
forward_to = [loki.write.default.receiver]
}
// Читаємо логи з усіх файлів
// loki.source.file "varlog" {
// targets = [{
// path = "/var/log/**/*.log",
// labels = {
// job = "varlog",
// host = "${HOSTNAME}",
// },
// }]
// forward_to = [loki.write.default.receiver]
// }
// Читатимемо конкретний файл /var/log/auth.log
// loki.source.file "authlog" {
// targets = [{
// path = "/var/log/auth.log",
// labels = {
// job = "auth_logs",
// host = "${HOSTNAME}",
// },
// }]
// forward_to = [loki.write.default.receiver]
// }
// Правила перемаркування для логів з journal
discovery.relabel "journal_relabel_rules" {
targets = []
rule {
source_labels = ["__journal__systemd_unit"]
target_label = "unit"
}
rule {
source_labels = ["__journal__boot_id"]
target_label = "boot_id"
}
rule {
source_labels = ["__journal__transport"]
target_label = "transport"
}
rule {
source_labels = ["__journal__hostname"]
target_label = "instance"
}
rule {
source_labels = ["__journal_priority_keyword"]
target_label = "level"
}
}Перевірка конфігурації та перезапуск:
sudo alloy validate /etc/alloy/config.alloy
sudo systemctl restart alloy5. Аналіз логів у Grafana
Відкриваємо в браузері http://{grafana-ip}:3000
Explore → Loki: зручно шукати за
job,instance,level, ключовими словами тощоLive mode — перегляд логів у реальному часі
Drilldown → Logs — швидкий огляд по всіх пристроях
6. Додавання збору метрик у Alloy
Знову відкриваємо файл конфігурацій Alloy на клієнті:
sudo nano /etc/alloy/config.alloy👉 Додаємо конфігурацію для збору метрик в кінці файлу:
// Правила для маркування метрик — додає мітки, які легко фільтрувати у Grafana
discovery.relabel "metrics_relabel" {
targets = prometheus.exporter.unix.node.targets
rule {
target_label = "instance"
replacement = constants.hostname
}
rule {
target_label = "job"
replacement = "linux_node"
}
}
// Основний експортер метрик з Linux — подібний до Node Exporter
prometheus.exporter.unix "node" {
disable_collectors = ["ipvs", "btrfs", "infiniband", "xfs", "zfs"]
enable_collectors = ["meminfo"]
filesystem {
fs_types_exclude = "^(autofs|binfmt_misc|...)$"
mount_points_exclude = "^/(dev|proc|run/credentials/.+|...)($|/)"
mount_timeout = "5s"
}
netclass {
ignored_devices = "^(veth.*|cali.*|[a-f0-9]{15})$"
}
netdev {
device_exclude = "^(veth.*|cali.*|[a-f0-9]{15})$"
}
}
// Налаштовуємо сам процес збору метрик
prometheus.scrape "node" {
scrape_interval = "15s"
targets = discovery.relabel.metrics_relabel.output
forward_to = [prometheus.remote_write.local.receiver]
}
// Вказуємо куди саме надсилати метрики (Prometheus Remote Write)
prometheus.remote_write "local" {
endpoint {
url = "http://IP_з_Prometheus:9090/api/v1/write"
}
}Перевірка та рестарт:
sudo alloy validate /etc/alloy/config.alloy
sudo systemctl restart alloy7. Перегляд метрик у Grafana
Explore → Prometheus — гнучкий аналіз, ручний вибір метрик, агрегація, фільтри
Drilldown → Metrics — готові графіки для CPU, RAM, мережі тощо (дуже зручно для старту)
8. Автоматизація розгортання Alloy
Якщо потрібно додавати багато пристроїв, можна використовувати Bash-скрипт з усіма кроками:
додавання ключів та репозиторіїв grafana
встановлення Alloy
створення конфігурації логів і метрик
запуск і перевірка
Скрипт доступний у репозиторії (https://github.com/ravado/homeserver/tree/main/logs-and-monitoring)
Запускати просто:
sudo apt update
sudo apt install -y curl
bash -c "$(curl -fsSL https://raw.githubusercontent.com/ravado/homeserver/refs/heads/main/logs-and-monitoring/install_alloy.sh)"✅ Висновки
Тепер у вас є централізований збір логів і метрик із усіх пристроїв у Grafana. Це:
зручно
прозоро
дозволяє швидко виявляти проблеми