【问题标题】:Configuring Logstash filters配置 Logstash 过滤器
【发布时间】:2015-12-13 23:10:31
【问题描述】:

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

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

Magento 异常日志有一个带有堆栈跟踪的多行日志, 所以我所做的是使用 gork 添加一个过滤器,现在它似乎工作(给出连接输出),

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

我无法删除 *.log 并在不知道文件名的情况下提供特定名称

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

logstash 转发器配置:

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

logstash 过滤器配置:

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" ]
    }
  }
}

【问题讨论】:

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


    【解决方案1】:

    如果您可以更改第 3 方扩展的日志目录,则有一种解决方法。然后您可以将所有不知道名称的文件发送到该新目录(例如 /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 以特定类型发送它们。

    希望对您有所帮助。!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-24
      • 2018-10-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多