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

lx0bsm1f  于 2023-04-05  发布在  Docker
关注(0)|答案(1)|浏览(251)

bounty将在5天后过期。回答此问题可获得+100声望奖励。worrum希望引起更多人关注此问题。

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

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

此外,我注意到Prometheus数据源显示解密的容器名称,但Loki数据源没有。下面是我对两者的配置:
此外,我运行Loki和Promtail像正常的应用程序与配置systemd守护进程. Loki:

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

Promtail:

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

此外,我知道loki-driver-docker插件,但我试图运行它,对我来说没有任何变化,文档很糟糕,它说只要运行它,几乎没有关于配置或如何检查它是否正常工作的内容。
所以,我很乐意听到任何想法和建议。论坛是我解决这个问题的最后机会。
UPD:目前看起来是这样的:

我希望它像cadvisor一样被解密:

jmo0nnb3

jmo0nnb31#

它是这样工作的:

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

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.

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

logcli '{container_name="something"}'

相关问题