簡體   English   中英

配置Logstash過濾器

[英]Configuring Logstash filters

我最近配置了ELK服務器,

在我的應用程序服務器(magento)的var / log /目錄中,有許多日志文件(包括magento的一些第三方擴展日志),所以我想到了將所有使用* .log發送到logstash的方法,因為我們不了解某些日志由於第三方集成而可能在將來創建的文件名。 我們也需要抓住那些。

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

如果可以更改第三方分機的日志目錄,則有一個解決方法。 然后,您可以將所有不帶名稱的文件發送到該新目錄(例如/ 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發送特定類型的日志文件。

希望能幫助到你。!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM