我有这样的配置:
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_什么的
如何删除容器标签不以"interesting_"开头的所有行?/不匹配&;interesting_.*&;?
我已经找到了方法来删除标签"container"有条件地;我还找到了根据内容过滤日志消息的方法;我还找到了一种在管道阶段后期删除标签的方法;但是我还没有找到任何方法来过滤/保留/删除基于标签内容的整个日志行,这就是我问的原因。
除此之外,我还经常被错误"管道阶段必须只包含一个键"所困扰。有很多报告解释了这是一个真正的YAML缩进错误,但从来没有描述实际的格式化解决方案是什么。所以我真的在寻找一种解决方案,可以逐字复制。
因为在我的例子中所有有趣的容器都是由一个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=chronicle-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
仍然不知道它是否有管道解决方案。
我通过根据容器名称进行过滤实现了类似的效果:
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"]
需要在docker中执行以下操作:
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