0

我最近配置了一个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" ]
    }
  }
}
4

1 回答 1

1

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

希望能帮助到你。!

于 2015-12-12T18:08:34.993 回答