天天看點

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

繼續閱讀