使用 Promtail,如何只保留指定 Docker 容器的日志消息

问题描述 投票:0回答:2

所以我有这样的配置:

scrape_configs:
  - job_name: flog_scrape
    docker_sd_configs:
      - host: unix:///var/run/docker.sock
        refresh_interval: 5s
    relabel_configs:
      - source_labels: ['__meta_docker_container_name']
        regex: '/(.*)'
        target_label: 'container'

一切都很好,但在目标机器上我有有趣的容器和垃圾容器,我只想要来自名为interesting_something

的容器的日志

如何删除容器标签不以“interesting_”开头/与“interesting_.*”不匹配的所有行?

我找到了有条件地删除标签“容器”的方法;我还找到了根据内容过滤日志消息的方法;我还找到了一种稍后在管道阶段删除标签的方法;但我还没有找到任何方法来根据标签内容过滤/保留/删除整个日志行,这就是我问的原因。

除此之外,我经常被错误“管道阶段必须只包含一个键”所困扰 - 其中有许多报告解释它实际上是一个 YAML 缩进错误,但从未描述实际的格式化解决方案是什么。所以我真的在寻找一种在逐字复制时有效的解决方案。

logging grafana-loki promtail
2个回答
2
投票

我通过根据容器名称进行过滤实现了类似的效果:

scrape_configs:
  - job_name: docker
    docker_sd_configs:
      - host: unix:///var/run/docker.sock
        filters:
          - name: name
            # Filter logging to just our containers
            values: ["cosmos-openc3-*"]
    relabel_configs:
      - source_labels: ["__meta_docker_container_name"]
        regex: "/(.*)"
        target_label: "container"

您还可以按标签过滤:

    filters:
      - name: label
        values: ["logging=promtail"]

这需要您的泊坞窗中具备以下内容:

services:
  nginx-app:
    container_name: nginx-app
    image: nginx
    labels:
      logging: "promtail"

基于 Promtail 文档的我的解决方案:https://grafana.com/docs/loki/latest/clients/promtail/configuration/#docker_sd_config 其中列出了可用的过滤选项:https://docs.docker.com/engine/api/v1.41/#tag/Container/operation/ContainerList


1
投票

由于在我的例子中所有有趣的容器都是由单个 docker-compose 带来的,所以我刚刚通过 docker-compose 项目名称过滤了

docker_sd_configs

scrape_configs:
  - job_name: flog_scrape
    docker_sd_configs:
      - host: unix:///var/run/docker.sock
        refresh_interval: 1s
        filters:
          - name: label
            values: ['com.docker.compose.project=compose-web']
    relabel_configs:
      - source_labels: ['__meta_docker_container_name']
        regex: '/(.*)'
        target_label: 'container'
    pipeline_stages:
      - static_labels: # Needs four whitespace indentation below, will complain otherwise
          host: ${VMHOST} # Env var defined externally, passed via -config.expand-env=true

仍然不知道它是否有 Pipeline 解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.