使用 Loki 和 Promtail 解密 Grafana 中的 Docker 容器名称

wor*_*rum 3 monitoring docker grafana grafana-loki promtail

我的任务是为大约 70 个容器配置 Docker 日志监控。将所有日志合并到一个面板中并不理想,尤其是在压力测试和监控 Docker 应用程序期间。我希望能够在面板中选择 Docker 容器应用程序并查看相应的日志。我已经实现了这一点,但问题是容器名称是加密的,我需要解密它们。

我的问题是:如何使用 Loki 数据源和 Promtail 解密容器名称?

此外,我注意到 Prometheus 数据源显示解密的容器名称,但 Loki 数据源则不显示。这是我对两者的配置:

另外,我像普通应用程序一样运行 Loki 和 Promtail,并配置了 systemd 守护进程。洛基:

auth_enabled: false

server:
  http_listen_port: 3100
  grpc_listen_port: 9096


ingester:
  lifecycler:
    address: 127.0.0.1
    ring:
      kvstore:
        store: inmemory
      replication_factor: 1
    final_sleep: 0s
  chunk_idle_period: 5m
  chunk_retain_period: 30s

schema_config:
  configs:
  - from: 2021-03-08
    store: boltdb
    object_store: filesystem
    schema: v11
    index:
      prefix: index_
      period: 24h

storage_config:
  boltdb:
    directory: /tmp/loki/index
Run Code Online (Sandbox Code Playgroud)

宣传尾声:

server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
  - url: http://localhost:3100/loki/api/v1/push

scrape_configs:
- job_name: cadvisor
  static_configs:
  - targets: ['localhost:8080/containers/']
    labels:
      job: cadvisonr
      __path__: /containers
- job_name: system
  static_configs:
  - targets:
      - localhost
    labels:
      job: varlogs
      __path__: /var/log/*log

- job_name: containers
  static_configs:
  - targets:
      - localhost
    labels:
      job: containerlogs
      __path__: /var/lib/docker/containers/*/*log

  pipeline_stages:
  - json:
      expressions:
        output: log
        stream: stream
        attrs:
  - json:
      expressions:
        tag:
      source: attrs
  - regex:
      expression: (?P<container_name>(?:[^|]*[^|]))
      source: tag
  - timestamp:
      format: RFC3339Nano
      source: time
  - labels:
      # tag:
      stream:
      container_name:
  - output:
      source: output
Run Code Online (Sandbox Code Playgroud)

另外,我知道 loki-driver-docker 插件,但我尝试运行它,但对我来说没有任何改变,而且文档很糟糕,它说只需运行它,几乎没有关于配置或如何检查它是否正常工作的信息。

因此,我很高兴听到任何想法和建议。论坛是我解决这个问题的最后机会。

UPD:目前,它看起来像这样: Grafana docker 容器名称

我希望它像在 cadvisor 中一样被解密: 想要的结果

Kam*_*Cuk 5

它的工作原理如下:

  • promtail 有后端<something>_configs
  • 每个后端都略有不同
  • Loki 收集日志行
  • Loki 中的每一行日志都有“标签”
  • promtail 后端可以将一些内部信息转换为“标签”并发送该 loki
  • promtail 文件后端只能看到文件,因此static_config只能看到文件
  • promtail docker 后端连接到 docker deamon 并且实际上了解这些 docker 的一些信息

Promtail 配置可能如下所示:

  - job_name: "docker"
    docker_sd_configs:
      - host: "unix:///var/run/docker.sock"
        refresh_interval: "1s"
    relabel_configs:
      - source_labels: ['__meta_docker_container_name']
        target_label: "container_name"
      - source_labels: ['__meta_docker_container_id']
        target_label: "container_id"
      # etc.
Run Code Online (Sandbox Code Playgroud)

然后在grafana-loki中你可以使用LogQL语言过滤日志,例如:

logcli '{container_name="something"}'
Run Code Online (Sandbox Code Playgroud)