Привіт, я Kernelka. Якщо ви хочете бачити всі log-файли Linux з різних машин у зручних дашбордах і швидко ловити помилки — час подружити Promtail, Loki і Grafana. Нижче — мій дружній покроковий гайд: від встановлення до першого запиту, плюс альтернативи і часті питання. Поїхали! 🚀
Як це працює і що знадобиться
Схема проста: Promtail на кожному хості читає логи й шле їх у Loki (центральне сховище). Grafana підключається до Loki як джерела даних і малює графіки та списки логів.
- Promtail — агент-збирач логів.
- Loki — легке та дешеве сховище логів.
- Grafana — GUI для дашбордів і пошуку.
Порти за замовчуванням: Loki — 3100/tcp, Grafana — 3000/tcp. Якщо у вас увімкнений firewall Linux, відкрийте їх на центральному вузлі.
Покрокова інсталяція (How‑to)
1) Підготуйте систему
sudo apt update && sudo apt install -y wget unzip curl ufw
Далі налаштуємо Loki та Promtail на ваш сервер Linux. Grafana — для зручного пошуку і дашбордів. Це відмінна база для Linux моніторинг логів.
2) Встановіть Loki (сховище логів)
# Користувач і каталоги
sudo useradd --system --no-create-home --shell /sbin/nologin loki
sudo mkdir -p /etc/loki /var/lib/loki/{chunks,index,boltdb-cache,compactor}
sudo chown -R loki:loki /etc/loki /var/lib/loki
# Бінарник Loki
cd /usr/local/bin
sudo wget -O loki.zip https://github.com/grafana/loki/releases/latest/download/loki-linux-amd64.zip
sudo unzip -o loki.zip
sudo mv loki-linux-amd64 loki
sudo chmod +x loki
sudo rm loki.zip
# Конфіг Loki (filesystem + boltdb-shipper, ретеншн 7 днів)
sudo tee /etc/loki/config.yml >/dev/null <<'YAML'
server:
http_listen_port: 3100
log_level: info
storage_config:
boltdb_shipper:
active_index_directory: /var/lib/loki/index
cache_location: /var/lib/loki/boltdb-cache
shared_store: filesystem
filesystem:
directory: /var/lib/loki/chunks
schema_config:
configs:
- from: 2024-01-01
store: boltdb-shipper
object_store: filesystem
schema: v13
index:
prefix: index_
period: 24h
compactor:
working_directory: /var/lib/loki/compactor
shared_store: filesystem
limits_config:
retention_period: 168h
ingester:
lifecycler:
ring:
kvstore:
store: inmemory
replication_factor: 1
chunk_idle_period: 1h
chunk_retain_period: 30s
YAML
# Сервіс systemd
echo "[Unit]
Description=Loki Log Aggregation System
After=network-online.target
Wants=network-online.target
[Service]
User=loki
Group=loki
ExecStart=/usr/local/bin/loki -config.file=/etc/loki/config.yml
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target" | sudo tee /etc/systemd/system/loki.service >/dev/null
sudo systemctl daemon-reload
sudo systemctl enable --now loki
# Дозволити порт (за потреби)
sudo ufw allow 3100/tcp || true
# Перевірка здоров'я (має повернути HTTP 200)
curl -sS http://localhost:3100/ready
3) Встановіть Promtail (збирач логів)
# Користувач і каталоги
sudo useradd --system --no-create-home --shell /sbin/nologin promtail
sudo mkdir -p /etc/promtail /var/lib/promtail
sudo chown -R promtail:promtail /etc/promtail /var/lib/promtail
# Бінарник Promtail
cd /usr/local/bin
sudo wget -O promtail.zip https://github.com/grafana/loki/releases/latest/download/promtail-linux-amd64.zip
sudo unzip -o promtail.zip
sudo mv promtail-linux-amd64 promtail
sudo chmod +x promtail
sudo rm promtail.zip
# Дозволи для читання журналів
sudo usermod -aG adm,systemd-journal promtail
# Конфіг Promtail: читаємо /var/log/*.log та systemd-journal, шлемо у Loki
sudo tee /etc/promtail/config.yml >/dev/null <<'YAML'
server:
http_listen_port: 9080
log_level: info
positions:
filename: /var/lib/promtail/positions.yaml
clients:
- url: http://localhost:3100/loki/api/v1/push
scrape_configs:
- job_name: varlogs
static_configs:
- targets: [localhost]
labels:
job: varlogs
host: ${HOSTNAME}
__path__: /var/log/*.log
- job_name: journal
journal:
path: /var/log/journal
max_age: 12h
labels:
job: systemd-journal
relabel_configs:
- source_labels: ['__journal__systemd_unit']
target_label: 'unit'
YAML
# Сервіс systemd
echo "[Unit]
Description=Promtail for Loki
After=network-online.target
Wants=network-online.target
[Service]
User=promtail
Group=promtail
ExecStart=/usr/local/bin/promtail -config.file=/etc/promtail/config.yml
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target" | sudo tee /etc/systemd/system/promtail.service >/dev/null
sudo systemctl daemon-reload
sudo systemctl enable --now promtail
# Перевірити, що логи течуть у Loki
journalctl -u promtail -n 50 --no-pager
4) Встановіть Grafana (дашборди)
# Репозиторій Grafana OSS
sudo apt-get install -y apt-transport-https software-properties-common
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://packages.grafana.com/gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/grafana.gpg
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://packages.grafana.com/oss/deb stable main" | sudo tee /etc/apt/sources.list.d/grafana.list >/dev/null
sudo apt update && sudo apt install -y grafana
sudo systemctl enable --now grafana-server
sudo ufw allow 3000/tcp || true
Відкрийте Grafana: http://<IP>:3000 (логін/пароль за замовчуванням — admin/admin, вас попросять змінити пароль).
5) Додайте джерело Loki і перший запит
- У Grafana: Connections → Data sources → Add data source → Loki → URL: http://localhost:3100 → Save & test.
- Перейдіть Explore і виконайте запит LogQL: {job="varlogs"} |= "error" — побачите помилки з /var/log/*.log.
- Ще приклад: {job="systemd-journal", unit="sshd.service"} — фільтр за юнітом.
Альтернативні способи
Docker на Linux (компонуємо весь стек)
# docker-compose.yml з Loki, Promtail, Grafana
cat > docker-compose.yml <<'YAML'
version: '3.8'
services:
loki:
image: grafana/loki:2.9.0
command: -config.file=/etc/loki/config/config.yml
ports:
- "3100:3100"
volumes:
- ./loki:/etc/loki/config
- loki-data:/loki
promtail:
image: grafana/promtail:2.9.0
command: -config.file=/etc/promtail/config.yml
volumes:
- /var/log:/var/log:ro
- /var/lib/docker/containers:/var/lib/docker/containers:ro
- ./promtail:/etc/promtail
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
volumes:
- grafana-data:/var/lib/grafana
volumes:
loki-data:
grafana-data:
YAML
docker compose up -d
Цей варіант зручний для швидкого старту і тестів. У прод середовищі стежте за диском і бекапами.
Збір лише з journald (без файлів)
У Promtail можна лишити тільки блок journal: в scrape_configs, якщо ваші сервіси логують у системний журнал. Це зменшує навантаження на файлову систему та спрощує ротацію.
GUI-спосіб у Grafana
- Джерело Loki вже додано? Супер ✅
- Import готового дашборда: Dashboards → Import → введіть ID (наприклад, 12019 або 15141), виберіть свій Loki.
- Створіть алерти: Alerting → New alert rule → виберіть запит LogQL (наприклад, кількість «error» за 5 хвилин > 10) → канал сповіщень.
- Налаштуйте панелі: використовуйте трансформації і поля labels (host, job, unit) для фільтрів.
FAQ
Логи не з'являються в Grafana. З чого почати діагностику?
Перевірте, що Loki здоровий (curl http://localhost:3100/ready) і що Promtail шле дані: journalctl -u promtail -f. У Grafana перевірте Data source → Save & test.
Promtail не читає systemd‑journal
Додайте користувача promtail у групу systemd-journal і перезапустіть сервіс:
sudo usermod -aG systemd-journal promtail
sudo systemctl restart promtail
Які порти відкрити у firewall Linux?
На вузлі з Loki: 3100/tcp. На вузлі з Grafana: 3000/tcp. Додатково (не обов'язково): 9080/tcp для локального UI Promtail.
sudo ufw allow 3100/tcp
sudo ufw allow 3000/tcp
Диск стрімко заповнюється. Як обмежити?
Встановіть ретеншн у Loki (приклад вище — 7 днів), винесіть дані на диск з достатнім об'ємом, увімкніть моніторинг використання диска та алерти Grafana. Для великих обсягів — зовнішнє object storage.
Багато лейблів — усе гальмує. Чому?
Уникайте «вибуху кардинальності» — не додавайте у labels унікальні значення на кожний рядок (типу довгих UUID, шляхів файлів, повідомлень). Краще парсити це в поля і фільтрувати через |= або |~.
Час у логах «пливе»
Синхронізуйте час на всіх вузлах (NTP/chrony). Різниця часу заважає коректному пошуку та побудові графіків.
Як збирати логи з кількох серверів?
Ставте Promtail на кожен хост і в clients.url вказуйте центральний Loki (http://<FQDN>:3100). За потреби налаштуйте TLS/автентифікацію через реверс‑проксі.
Порада від Kernelka
Тримайте конфіги чистими: мінімум лейблів, зрозумілі job і host, окрема папка під дані Loki. Для критичних сервісів додайте окремий scrape_config із власними лейблами — так легше будувати дашборди і алерти. І не забувайте про бекапи! 🔍
Підсумок
- Promtail збирає log-файли Linux і передає їх у Loki.
- Loki зберігає логи економно, з ретеншном та пошуком LogQL.
- Grafana дає швидкий пошук, дашборди та алерти.
- Є варіант через Docker на Linux для швидкого деплою.
- Не забудьте про firewall, доступи до journald і синхронізацію часу.

Прокоментувати
На сайті відображається лише твоє ім'я та коментар. Електронна пошта зберігається виключно для зв'язку з тобою за потреби та в жодному разі не передається стороннім особам.