如何使用 Elastic Stack 监控 docker 服务

How to monitor docker services using elastic stack

我有一个 docker swarm 运行 多个服务。我正在使用弹性堆栈(kibana、elastic、filebeat 等)进行监控。
对于业务逻辑,我正在编写日志并使用 filebeat 将它们移动到 logstash 并在 kibana 中分析数据。

但是我在监控 docker 服务的活跃度时遇到了问题。其中一些部署在全球范围内(如 filebeat),其中一些具有多个副本。我不想在 kibana 中看到 运行 容器的数量等于服务应有的数量。我正在尝试将 metricbeat 与 docker module, the most useful metricset I've found is container 一起使用,但它似乎没有包含足够的信息让我显示或分析服务实例的数量。

如果有任何关于如何实现这一目标的建议,我将不胜感激。

metricbeat 配置

metricbeat.autodiscover:
  providers:
    - type: docker
      hits.enabled: true

metricbeat.modules:
  - module: docker
    enabled: true
    metricsets:
      - container
      - healthcheck
      - info
    period: 10s
    hosts: [ "unix:///var/run/docker.sock" ]

processors:
  - add_docker_metadata: ~
  - add_locale:
      format: offset

output.logstash:
  hosts: [ "mylogstash.com" ]

指标集container日志数据(相关docker部分)

...
"docker" : {
  "container": {
    "id": "60983ad304e13cb0245a589ce843100da82c5fv9e093aad68abb439cdc2f3044"
    "status": "Up 3 weeks",
    "command": "./entrypoint.sh",
    "image": "registry.com/myimage",
    "created": "2019-04-08T11:38:10.000Z",
    "name": "mystack_myservice.wuiqep73p99hcbto2kgv6vhr2.mufs70y24k5388jxv782in18f",
    "ip_addresses": [ "10.0.0.148" ]
    "labels" : {
       "com_dokcer_swarm_node_id": "wuiqep73p99hcbto2kgv6vhr2",
       "com_docker_swarm_task_name": "stack_service.wuiqep73p99hcbto2kgv6vhr2.mufs70y24k5388jxv782in18f",
       "com_docker_swarm_service_id": "kxm5dk43yzyzpemcbz23s21xo",
       "com_docker_swarn_task_id":  "mufs70y24k5388jxv782in18f",
       "com_docker_swarm_task" : "",
       "com_docker_stack_namespace": "mystack",
       "com_docker_swarm_service_name": "mystack_myservice"
     },
     "size": {
        "rw": 0,
        "root_fs": 0
     }
  }
}
...

供日后参考:

我写了一个 bash 脚本,它按时间间隔运行,并为每个 swarm 服务写了一个 json 日志。脚本包裹在图像 docker service logger