kubernetes-filebeat自动发现容器日志

version: filebeat 7.0.0

自动发现
在容器上运行应用程序时,它们会成为监视系统的移动目标。自动发现允许您跟踪它们并在发生变化时调整设置。通过定义配置模板,自动发现子系统可以在服务开始运行时对其进行监控。

您可以filebeat.autodiscover在filebeat.yml 配置文件的部分中定义自动发现设置 。要启用自动发现,请指定提供程序列表。

提供商
自动发现提供程序通过观察系统上的事件并将这些事件转换为具有通用格式的内部自动发现事件来工作。配置提供程序时,您可以选择使用自动发现事件中的字段来设置满足条件时启动特定配置的条件。

一开始,Filebeat将扫描现有容器并为它们启动适当的配置。然后它将观察新的开始/停止事件。这可以确保您不必担心状态,而只需定义您想要的配置。

Docker
Docker自动发现提供程序监视Docker容器的启动和停止。这些是每个事件的可用字段:

  • host
  • port
  • docker.container.id
  • docker.container.image
  • docker.container.name
  • docker.container.labels

例如:

# cat autodiscover-docker.yaml 
filebeat.autodiscover:
  providers:
    - type: docker
      labels.dedot: true
      templates:
        - condition:
            contains:
              docker.container.name: echo2
          config:
            - type: docker
              containers.ids:
                - "${data.docker.container.id}"
                stream: "stderr" #读入指定的流:all, stdout or stderr. The default is all
              #include_lines: ["^ERROR"]  # 只包括的行
              #exclude_lines: ["^\\s+[\\-`('.|_]"]  # 排除的行


output.file:
  path: "/tmp/filebeat"
  filename: autodiscover-docker.log

注:容器往终端输出日志,最好区分类型:一般日志输出到stdout中,错误日志输出到stderr中。这样的好处是:当我们需要过滤错误日志的时候,只要设置:stream: "stderr" ,就可以过滤出所有错误日志;这样比include_lines更加准确。


Kubernetes
Kubernetes自动发现提供商监视Kubernetes pods的启动,更新和停止。这些是每个事件的可用字段:

  • host
  • port (if exposed)
  • kubernetes.container.id
  • kubernetes.container.image
  • kubernetes.container.name
  • kubernetes.labels
  • kubernetes.namespace
  • kubernetes.node.name
  • kubernetes.pod.name
  • kubernetes.pod.uid

例如:

filebeat.autodiscover:
  providers:
    - type: kubernetes
      templates:
        - condition:
            equals:
              kubernetes.namespace: kube-system
          config:
            - type: docker
              containers.ids:
                - "${data.kubernetes.container.id}"
              exclude_lines: ["^\\s+[\\-`('.|_]"]  # drop asciiart lines

Filebeat支持基于提供程序提示的自动发现:提示系统在Kubernetes Pod annotations 或具有前缀的Docker labels中查找提示co.elastic.logs。一旦容器启动,Filebeat将检查它是否包含任何提示并为其启动正确的配置。提示告诉Filebeat如何获取给定容器的日志。默认情况下,将使用docker输入从容器中检索日志。参考:Filebeat支持基于提供程序提示的自动发现

 

参考:
https://www.elastic.co/guide/en/beats/filebeat/master/configuration-autodiscover.html

建议以Docker或者k8s POD方法运行filebeat:

kubernetes: https://www.elastic.co/guide/en/beats/filebeat/7.0/running-on-kubernetes.html

Docker:https://www.elastic.co/guide/en/beats/filebeat/7.0/running-on-docker.html

在k8s以Pod方式运行filebeat: https://www.blog-wuchen.cn/2018/10/22/FileBeat-k8s.html

你可能感兴趣的:(kubernetes,ELK,k8s,filebeat)