配置Logstash过滤器

时间:2015-09-17 06:59:29

标签: logging elasticsearch logstash-grok logstash-configuration logstash-forwarder

我最近配置了一个ELK服务器,

在我的应用服务器(magento)中,var / log /目录有许多日志文件(包括magento的一些第三方扩展日志), 所以我想把所有使用* .log发送到logstash,因为我们不知道由于第三方集成可能在将来创建的一些日志文件名。我们也需要抓住这些。

Magento异常日志包含带有堆栈跟踪的多行日志, 所以我做的是使用gork添加一个过滤器,现在看起来很有效(给出连接输出),

因为我有一个定义类型" staging-all-lincraft-logs" (在两个配置中)所有日志文件都通过它解析(参见下面的代码),

我无法移除* .log并提供具体名称,因为他们不知道文件名

有没有办法我只能解析logstash配置中的特定文件(exception.log和system.log)(我尝试添加parth,它不起作用)

logstash forwarder config:

"files": [
    {
      "paths": [
        "/home/deploy/lindcraft/current/codepool/var/log/*.log"
       ],
      "fields": { "type": "staging-all-lincraft-logs" }
    }
]

logstash filter config:

filter {
  if [type] == "staging-all-lincraft-logs" {

    multiline{
#      path => "/home/deploy/lindcraft/current/codepool/var/log/exception.log"
      pattern => "^%{TIMESTAMP_ISO8601:timestamp}"
      what => "previous"
      negate=> true
    }
    grok {
      match => [
        "message",
        "(?m)%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:priority_name} \(%{INT:priority_level}\): %{GREEDYDATA:message}"
      ]
      add_field => [ "received_at", "%{@timestamp}" ]
      add_field => [ "received_from", "%{host}" ]
      overwrite => [ "message" ]
    }
    date {
      match => [ "timestamp", "ISO8601" ]
    }
  }
}

1 个答案:

答案 0 :(得分:1)

如果您可以更改第三方扩展程序的日志目录,则可以使用解决方法。然后,您可以将所有名称未发现的文件发送到新目录(例如/ var / log / new_directory /),并将所有其他已知日志保存在 / var / log / 中。因此,您可以按如下所示更改logstash-forwader.conf文件,以将不同类型的日志文件发送到logstash服务器。

    "files": [
        {
          "paths": [
              "/home/deploy/lindcraft/current/codepool/var/log/syslog"
           ],
          "fields": { "type": "syslog" }
        },
        {
          "paths": [
              "/home/deploy/lindcraft/current/codepool/var/log/exeption.log"
           ],
           "fields": { "type": "exeption-log" }
        },
        {
          "paths": [
              "/home/deploy/lindcraft/current/codepool/var/log/new_directory/*.log"
           ],
           "fields": { "type": "staging-all-lincraft-logs" }
        }
    ]

然后添加一个过滤器来解析具有相关GROK模式的不同日志文件。这将是下面的事情。

filter {
  if [type] == "syslog"  {
      grok {
          match => { "message" => "GROK pattern for syslog" } 
      }
  }
  else if [type] == "exeption-log" {
      grok {
          match => { "message" => "GROK pattern for exeption-log" } 
      }
  }
  else if [type] == "staging-all-lincraft-logs" {
      grok {
          match => { "message" => "GROK pattern for staging-all-lincraft-logs" } 
      }
  }
}

我认为如果我们需要在logstash中以不同方式处理日志文件,我们必须使用logstash-forwarder中的特定类型发送它们。

希望它有所帮助。