我使用 Grafana Agent 来抓取我的所有 Docker 容器。因此,我使用 Prometheus 的
<docker_sd_config>
。它适用于正在运行的 Docker 容器,但不适用于已停止的 Docker 容器。没有发送警报。
配置
configs:
- name: agent
scrape_configs:
- job_name: docker
metrics_path: '/prometheus'
docker_sd_configs:
- host: unix:///var/run/docker.sock
relabel_configs:
- source_labels: [__meta_docker_port_private]
regex: '8081'
action: keep
- source_labels: ['__meta_docker_container_name']
regex: '/(.*)'
target_label: 'job'
警报规则
- alert: ServerDown
expr: up{} < 1
for: 15m
annotations:
summary: Server down
Docker 容器
f8070378f38b gitlab.mycomp.com:5005/test/my-app1:latest "java -jar app.jar" 2 weeks ago Up 12 hours (healthy) 0.0.0.0:8205->8081/tcp, :::8205->8081/tcp my-app1
c4a5042b9fcf gitlab.mycomp.com:5005/test/my-app2:latest "java -jar app.jar" 2 weeks ago Exited (143) 40 seconds ago my-app2
研究
<static_config>
它可以工作,但我不想手动列出所有 Docker 容器。我想使用服务发现。问题
如何使用 Grafana Agent 抓取已停止的 Docker 容器?
遗憾的是,似乎没有简单的开关可以实现这一点。用于检索容器列表的 API (https://docs.docker.com/engine/api/v1.40/#tag/Container) 可以选择显示所有容器,但我没有看到选项在
docker_sd_configs
中使用它。但是,有一个选项可以指定 filters
。我不确定它是否有效,但也许如果您可以创建这样一个过滤器,它将覆盖所有容器。像这样的东西:
docker_sd_configs:
- host: unix:///var/run/docker.sock
# Optional filters to limit the discovery process to a subset of available
# resources.
# The available filters are listed in the upstream documentation:
# https://docs.docker.com/engine/api/v1.40/#operation/ContainerList
filters:
# Not sure which is correct, try either this:
- name: status
values: created, restarting, running, removing, paused, exited, dead
# or this:
- name: status
values: created
- name: status
values: restarting
- name: status
values: running
- name: status
values: removing
- name: status
values: paused
- name: status
values: exited
- name: status
value: dead