Зміст

🚧 Централізований збір та аналіз логів з 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 prometheus

Loki: усунення помилки з **enable_multi_variant_queries**

sudo nano /etc/loki/config.yml

# коментуємо рядок:
# enable_multi_variant_queries: false

sudo systemctl restart loki

2. Підключення джерел даних у 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 alloy

4. Конфігурація 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 alloy

5. Аналіз логів у 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 alloy

7. Перегляд метрик у 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. Це:

  • зручно

  • прозоро

  • дозволяє швидко виявляти проблеми