我正在尝试使用Filebeat从Kubernetes节点收集日志,并且仅在日志源自特定Kubernetes命名空间的情况下才将它们发送到ELK。
到目前为止,我发现您可以定义处理器,我认为可以做到这一点。但是,无论我做什么,都无法约束出厂的日志。看起来合适吗?
嗯,那看起来正确吗?
filebeat.config:
inputs:
path: ${path.config}/inputs.d/*.yml
reload.enabled: true
reload.period: 10s
when.contains:
kubernetes.namespace: "NAMESPACE"
modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
processors:
- add_kubernetes_metadata:
namespace: "NAMESPACE"
xpack.monitoring.enabled: true
output.elasticsearch:
hosts: ['elasticsearch:9200']
尽管进行了这种配置,我仍然从所有名称空间获取日志。
Filebeat在Kubernetes上作为DaemonSet运行。这是扩展日志条目的示例:https://i.imgur.com/xfTwbhl.png
答案 0 :(得分:1)
您可以使用数字进行选择:
processors:
- drop_event:
when:
contains:
source: "field"
output.elasticsearch:
hosts: ["localhost:9200"]
pipeline: my_pipeline_id
然后将事件测试到pipeline中:
{
"drop": {
"if" : "ctx['field'] == null "
}
}
filter {
if ![field] {
drop { }
}
}
答案 1 :(得分:0)
最后,我通过将放置处理器从配置文件移至输入配置文件来解决此问题。