Преминете към основното съдържание

Мониторинг — Loki

Loki е системата за log aggregation на Dictaro. Събира логове от Docker контейнери на двата хоста (licensing server и DGX Spark) чрез Promtail агенти.

Архитектура

Loki конфигурация

Файл: licensing-go/monitoring/loki-config.yml

ПараметърСтойностОписание
auth_enabledfalseБез multi-tenancy автентикация
http_listen_port3100HTTP API порт
path_prefix/lokiPrefix за storage paths
storagefilesystemЛокален filesystem storage
chunks_directory/loki/chunksДиректория за log chunk-ове
rules_directory/loki/rulesДиректория за alerting rules
replication_factor1Single instance (без clustering)
kvstoreinmemoryIn-memory hash ring
schemav13 с tsdb storeНай-новата schema версия
index_period24hИндекс период
retention_period720h (30 дни)Логовете се пазят 30 дни

Storage layout

Promtail конфигурации

Dictaro използва два Promtail агента — по един на всеки хост.

Локален Promtail (licensing server)

Файл: licensing-go/monitoring/promtail-config.yml

ПараметърСтойност
http_listen_port9080
positions_file/tmp/positions.yaml
Client URLhttp://loki:3100/loki/api/v1/push
DiscoveryDocker SD чрез Unix socket
Host labellicensing-server

Relabeling:

  1. __meta_docker_container_namecontainer (премахва водещ /)
  2. Static label host: licensing-server
  3. __meta_docker_container_log_streamstream (stdout/stderr)

Отдалечен Promtail (DGX Spark)

Файл: server/promtail-config.yml

ПараметърСтойност
http_listen_port9080
positions_file/tmp/positions.yaml
Client URLhttps://loki.dictaro.ai/loki/api/v1/push
External labelshost: gx10-804f
DiscoveryDocker SD чрез Unix socket

Relabeling:

  1. __meta_docker_container_namecontainer
  2. Static label host: gx10-804f
  3. __meta_docker_container_log_streamstream

Ключова разлика: Отдалеченият Promtail push-ва логове чрез HTTPS към loki.dictaro.ai (Cloudflare Tunnel), а не директно към Loki.

Label модел

LabelСтойностиОписание
hostlicensing-server, gx10-804fХост, от който идва логът
containerИме на Docker контейнераКонкретен контейнер
streamstdout, stderrLog stream тип

LogQL заявки в Grafana

Основни заявки

# Всички логове от ASR сървъра
{host="gx10-804f", container="asr"}

# Error логове от всички контейнери на licensing server
{host="licensing-server"} |= "error"

# Stderr от конкретен контейнер
{container="api", stream="stderr"}

# Логове с JSON parsing и филтриране
{container="api"} | json | level="error"

Aggregate заявки

# Log volume по хост за последния час
sum by (host) (count_over_time({job="docker"}[1h]))

# Error rate по контейнер
sum by (container) (count_over_time({stream="stderr"}[5m]))

# Top контейнери по обем логове
topk(5, sum by (container) (bytes_over_time({}[1h])))

Cloudflare Tunnel за Loki

Docker Compose дефинира tunnel-loki услуга, която expose-ва Loki на loki.dictaro.ai:

tunnel-loki:
image: cloudflare/cloudflared:latest
command: tunnel --no-autoupdate run --token ${CLOUDFLARE_TUNNEL_TOKEN_LOKI}
depends_on:
- loki

Retention и поддръжка

  • Retention: 30 дни (720h), конфигурирано в limits_config.retention_period
  • Storage: Filesystem-based (Docker volume loki-data)
  • Backup: Не е конфигуриран автоматичен backup — при нужда може да се копира volume-ът
  • Scaling: Single instance, достатъчен за текущия обем логове