我正在使用ELK堆栈(elasticsearch,logsash,kibana)在Kubernetes(minikube)环境中进行日志处理和分析。要捕获日志,我正在使用filebeat。日志从filebeat成功传播到elasticsearch,并且可以在Kibana中查看。
我的问题是我无法获取实际发布日志记录的pod名称。相反,我只获取收集日志文件的filebeat podname,而不是发起日志记录的pod的名称。
我可以从filebeat获得的信息(在Kibana中查看)
我还可以看到/识别Kibana中从filebeat / logstash / elasticsearch流过的容器信息:
如上所示,我似乎能够获得容器ID但不能获取容器名称。
为了缓解这种情况,我可能会将pod-name嵌入到实际的日志消息中并从那里解析它,但我希望有一个解决方案,我可以配置filebeat来发出实际的pod名称。
现在有人如何配置filebeat(或其他组件)来捕获日志中的kubernetes(minikube)pod名称?
我目前的文件配置如下:
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
答案 0 :(得分:1)
免责声明:我是一名节拍开发者
filebeat尚不支持您想要做的事情,但绝对是我们想要付出一些努力的事情,因此您可以期待将来的版本支持这种映射。
与此同时,我认为您的方法是正确的。您可以将所需信息附加到日志中,以便将其存储在elasticsearch
中答案 1 :(得分:1)
通过将一组特定的pod分配给命名空间,我已经实现了您所寻找的目标,现在可以使用命名空间,pod名称和容器名称的组合来查询我查找的日志,该名称也包含在生成的日志中如你所见,没有任何额外的努力,通过文件节拍进行管道传输
答案 2 :(得分:0)
对于将来来这里的人们来说,它已经在filebeat处理器中提供了:
filebeat.prospectors:
- type: log
enabled: true
paths:
- /var/log/*.log
- /var/log/messages
- /var/log/syslog
- type: docker
containers.ids:
- "*"
processors:
- add_kubernetes_metadata:
in_cluster: true
- drop_event:
when:
equals:
kubernetes.container.name: "filebeat"
helm chart默认值:https://github.com/helm/charts/blob/master/stable/filebeat/values.yaml
doc:https://www.elastic.co/guide/en/beats/filebeat/current/add-kubernetes-metadata.html