如果日志包含特定字段,如何限制Filebeat仅将日志发送到ELK?

时间:2019-04-01 22:22:33

标签: elasticsearch kubernetes elastic-stack filebeat

我正在尝试使用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

2 个答案:

答案 0 :(得分:1)

您可以使用数字进行选择:

  1. Filter data by filebeat
processors:
 - drop_event:
     when:
        contains:
           source: "field"
  1. Use ingest pipeline into elasticsearch
output.elasticsearch:
  hosts: ["localhost:9200"]
  pipeline: my_pipeline_id

然后将事件测试到pipeline中:

{
  "drop": {
    "if" : "ctx['field'] == null "
  }
}
  1. Use drop filter of logstash
filter {
  if ![field] {
    drop { }
  }
}

答案 1 :(得分:0)

最后,我通过将放置处理器从配置文件移至输入配置文件来解决此问题。