4

我使用 logstash-forwarder 和 logstash 并使用以下配置创建带有标签的动态索引:

/etc/logstash/conf.d/10-output.conf

output {
  elasticsearch {
    hosts => "localhost:9200"
    manage_template => false
    index => "logstash-%{tags}-%{+YYYY.MM.dd}"
  }
}

/etc/logstash-forwarder.conf

"files": [
    {
      "paths": [
        "/var/log/httpd/ssl_access_log",
        "/var/log/httpd/ssl_error_log"
       ],
      "fields": { "type": "apache", "tags": "mytag" }
    },

相关的 filebeat 配置为:

/etc/filebeat/filebeat.yml

filebeat:
  prospectors:
    -
     paths:
       - /var/log/httpd/access_log
     input_type: log
     document_type: apache
     fields:
       tags: mytag

在 Kibana 中,mytag我看到beats_input_codec_plain_applied的不是我所有的索引。

4

4 回答 4

8

我可以看到这个主题中提到的两个问题。为了我自己的利益,让我总结一下,希望也能帮助其他在这个问题上苦苦挣扎的访客。

  1. 在 filebeat 探矿者中添加标签的格式(每个探矿者标签自 5.0 或 1.2.3 起可用,如 aj 注意到的)配置

坏的:

 fields:
       tags: mytag

好的:

 fields:
       tags: ["mytag"]

然而,还有更重要的问题

  1. 标签正在连接。我们希望标签是一个数组,但是如果我们将新添加的标签发送到 logstash,我们会看到它们是 ES 中的串联字符串。

如果您只添加一个标签,解决方法(根据 hellb0y77)将是删除 filebeat 添加的自动标签,在 logstash(中央服务器端):

filter {
    if "beats_input_codec_plain_applied" in [tags] {
        mutate {
            remove_tag => ["beats_input_codec_plain_applied"]
        }
    }
}

如果想在 filebeat 中添加多个标签,这是行不通的。

必须使 logstash 拆分连接的字符串并将每个项目添加到标签中。在这种情况下,将filebeat端的标签放入某个自定义字段而不是“标签”字段并从logstash上的该自定义字段中提取它们可能会更好。

无论如何,似乎没有办法通过更改 filebeat 配置使其工作。唯一的方法是对接收的logstash过滤器链进行一些解析。另请参阅https://github.com/elastic/filebeat/issues/220

如果您可以删除logstash,那么这也可能是您的解决方案。当从filebeat直接向elasticsearch发送日志时,标签如预期出现在ES中。

于 2016-08-30T14:30:01.020 回答
2

默认情况下,在 Filebeat 中,您定义的那些字段将添加到名为fields. 要更改此行为并将字段添加到事件的根,您必须设置fields_under_root: true.

此外,在 Filebeat 5.X 中,tagsprospector 下是一个配置选项。此标签列表与全局标签配置合并。此拉取请求包含几个使用Beats 5.X 的 、 和 的fields示例fields_under_roottags

以下是您应该如何更改 Filebeat 1.X 的配置:

filebeat:
  prospectors:
    - paths:
        - /var/log/httpd/access_log
      input_type: log
      document_type: apache
      fields:
        tags: ["mytag"]
      fields_under_root: true
于 2016-05-26T20:31:00.117 回答
1

我已经解决了在logstash中插入一个过滤器:

filter {
    if "beats_input_codec_plain_applied" in [tags] {
        mutate {
            remove_tag => ["beats_input_codec_plain_applied"]
        }
    }
}
于 2016-06-14T15:10:32.930 回答
0

[xxxx@yyyy init.d]# cat /etc/filebeat/filebeat.yml

### 由 Puppet 管理的 Filebeat 配置(Ruby 1.8 版本)###

filebeat: spool_size: 1024 publish_async: false idle_timeout: 10s registry_file: .filebeat config_dir: /etc/filebeat/conf.d

输出:logstash:主机:- 1.1.1.1:5033

托运人:标签:- foo-beta

上述指定标签的方式有效,但在 logstash 中,您仍会看到默认的“beats_input_codec_plain_applied”。不知道如何摆脱它。

于 2016-05-26T18:20:05.000 回答