多个Logstash输出取决于collectd

时间:2015-12-30 09:14:33

标签: elasticsearch logstash collectd

我面临配置失败,我无法自行解决,试图通过文档获得解决方案,但没有运气。

我有几个不同的主机通过collectd将他们的指标发送到logstash。在logstash配置中,我希望将每个主机分开并将其传输到自己的ES索引中。当我尝试配置我的设置时,logstash会导致失败 - 也许有人可以帮助我。

分离应由主机名collectd deliver:

触发

[这是一个旧的原始json输出,所以请不要介意错误的设置索引]

{
  "_index": "wv-metrics",
  "_type": "logs",
  "_id": "AVHyJunyGanLcfwDBAon",
  "_score": null,
  "_source": {
    "host": "somefqdn.com",
    "@timestamp": "2015-12-30T09:10:15.211Z",
    "plugin": "disk",
    "plugin_instance": "dm-5",
    "collectd_type": "disk_merged",
    "read": 0,
    "write": 0,
    "@version": "1"
  },
  "fields": {
    "@timestamp": [
      1451466615211
    ]
  },
  "sort": [
    1451466615211
  ]
} 

请参阅我的配置:

输入配置(到目前为止工作)

input {
  udp {
    port => 25826
    buffer_size => 1452
    codec => collectd { }
  }
}

输出配置文件:

filter {
if [host] == "somefqdn.com" {
output {
  elasticsearch {
   hosts => "someip:someport"
   user => logstash
   password => averystrongpassword
   index => "somefqdn.com"
                }
          }
     }
}

引发的错误:

root@test-collectd1:/home/username# service logstash configtest
Error: Expected one of #, => at line 21, column 17 (byte 314) after filter {
if [host] == "somefqdn.com" {
output {
  elasticsearch

我理解,我的配置中可能缺少某个字符,但我无法找到它。

提前thx!

1 个答案:

答案 0 :(得分:0)

我在快速扫描中发现了两个错误:

首先,你的输出节不应该用filter {}块包装。

其次,你的输出节应该以output {}开头(把条件置于内部):

output {
    if [host] == "somefqdn.com" {
        elasticsearch {
            ...
        }
    }
}