3

我刚刚建立了一个 ELK 堆栈,但是我在 /etc/logstash/conf.d 中的 logstash 配置方面遇到了问题我有两个输入源从一台 linux 服务器转发,该服务器上安装了一个带有“文件”看起来像:

{
      "paths": ["/var/log/syslog","/var/log/auth.log"],
      "fields": { "type": "syslog" }
    },
    { 
      "paths": ["/var/log/osquery/osqueryd.results.log"],
      "fields": { "type": "osquery_json" } 
}

如您所见,一个输入是 osquery 输出(json 格式),另一个是 syslog。我当前对 logstash 的配置是 osquery.conf:

input {
  lumberjack {
    port => 5003
    ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
    ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
    codec => "json"
  }
}

filter {
   if [type] == "osquery_json" {
      date {
        match => [ "unixTime", "UNIX" ]
      }
   }
}

output {
  elasticsearch { host => localhost }
  stdout { codec => rubydebug }
}

这对于一个输入源来说很好,但我不知道如何将我的另一个 syslog 输入源添加到同一个配置中,因为“编解码器”字段在输入中——我无法将其更改为 syslog ...

我还计划以 Windows 日志格​​式添加另一个输入源,该输入源未由 logstash 转发器转发。反正有什么不同的结构吗?

4

1 回答 1

2

如果您要在同一输入上处理不同的编解码器,最好从输入中删除编解码器:

input {
  lumberjack {
    port => 5003
    ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
    ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
  }
}

filter {
   if [type] == "osquery_json" {
      json {
        source => "field_name_the_json_encoded_data_is_stored_in"
      }
      date {
        match => [ "unixTime", "UNIX" ]
      }
   }
   if [type] == "syslog" {

   }
}

output {
  elasticsearch { host => localhost }
  stdout { codec => rubydebug }
}

然后你只需要决定你想对你的系统日志消息做什么。

我建议还将您的配置拆分为多个文件。我倾向于使用 01-filename.conf - 10-filename.conf 作为输入,使用 11-29 作为过滤器,高于此的任何东西作为输出。这些文件将按照它们在 ls 中的打印顺序加载到 logstash。

于 2015-04-29T07:59:23.327 回答