gpt4 book ai didi

elasticsearch - 在 Kubernetes 中运行的带有 ELK 堆栈的 Filebeat 不会在日志中捕获 pod 名称

转载 作者:行者123 更新时间:2023-11-29 02:52:23 25 4
gpt4 key购买 nike

我正在使用 ELK 堆栈(elasticsearch、logsash、kibana)在 Kubernetes (minikube) 环境中进行日志处理和分析。为了捕获日志,我正在使用 filebeat。日志从 filebeat 成功传播到 elasticsearch,并且可以在 Kibana 中查看。

我的问题是无法获取到实际pod发布日志记录的pod名称。相反,我只得到正在收集日志文件的 filebeat podname,而不是产生日志记录的 pod 的名称。

我从filebeat可以得到的信息是(在Kibana中查看的)

  • beat.hostname:该字段的值为filebeat pod名称
  • beat.name:值为filebeat pod名称
  • host: 值为 filebeat pod 名称

我还可以在 Kibana 中查看/辨别从 filebeat/logstash/elasticsearch 流经的容器信息:

  • 应用:值为{log-container-id}-json.log
  • 来源:值为/hostfs/var/lib/docker/containers/{log-container-id}-json.log

如上所示,我好像可以获取容器Id,但获取不到pod名称。

为了缓解这种情况,我可能会在实际的日志消息中嵌入 pod 名称并从那里解析它,但我希望有一个解决方案,我可以在其中配置 filebeat 以发出实际的 pod 名称。

现在有人知道如何配置 filebeat(或其他组件)以在其日志中捕获 kubernetes(minikube)pod 名称吗?

我当前的 filebeat 配置如下:

ConfigMap如下图所示:

apiVersion: v1
kind: ConfigMap
metadata:
name: filebeat
namespace: logging
labels:
component: filebeat
data:
filebeat.yml: |
filebeat.prospectors:

- input_type: log
tags:
- host
paths:
- "/hostfs/var/log"
- "/hostfs/var/log/*"
- "/hostfs/var/log/*/*"
exclude_files:
- '\.[0-9]$'
- '\.[0-9]\.gz$'

- input_type: log
tags:
- docker
paths:
- /hostfs/var/lib/docker/containers/*/*-json.log
json:
keys_under_root: false
message_key: log
add_error_key: true
multiline:
pattern: '^[[:space:]]+|^Caused by:'
negate: false
match: after

output.logstash:
hosts: ["logstash:5044"]

logging.level: info

DamemonSet如下图所示:

apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
name: filebeat
namespace: logging
spec:
template:
metadata:
labels:
component: filebeat
spec:
containers:
- name: filebeat
image: giantswarm/filebeat:5.2.2
imagePullPolicy: IfNotPresent
resources:
limits:
cpu: 100m
requests:
cpu: 100m
volumeMounts:
- name: config
mountPath: /etc/filebeat
readOnly: true
- name: hostfs-var-lib-docker-containers
mountPath: /hostfs/var/lib/docker/containers
readOnly: true
- name: hostfs-var-log
mountPath: /hostfs/var/log
readOnly: true
volumes:
- name: config
configMap:
name: filebeat
- name: hostfs-var-log
hostPath:
path: /var/log
- name: hostfs-var-lib-docker-containers
hostPath:
path: /var/lib/docker/containers

最佳答案

免责声明:我是一名节拍开发者

filebeat 尚不支持您想做的事情,但我们肯定会在这方面付出一些努力,因此您可以期待 future 的版本支持这种映射。

同时,我认为你的做法是正确的。你可以将你需要的信息附加到你的日志中,这样你就可以在 elasticsearch 中拥有它

关于elasticsearch - 在 Kubernetes 中运行的带有 ELK 堆栈的 Filebeat 不会在日志中捕获 pod 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43052277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com