Logstash - Как фильтровать по [тегам]

Фильтр Logstash по тегам для разных сайтов

Проблема: у меня есть несколько веб-сайтов на одном сервере IIS. Я хочу добавить «тег» для каждого из файлов журнала, которые я отправляю в logstash

Это моя конфигурация пересылки logstash

Каждый файл журнала представляет собой отдельный веб-сайт ... поэтому я хочу добавить теги для каждого из этих журналов и иметь возможность фильтровать по этому конкретному тегу.

"журналы\svr05\ex*",

{
  "network": {
    "servers": [ "logsvr1.logs.local:5000", "logsvr2.logs.local:5000" ],
    "timeout": 15,
    "ssl ca": "logstash-forwarder-new.crt"
  },
  "files": [
    {
      "paths": [
         "logs\\svr08\\ex*",
         "logs\\svr05\\ex*",
         "logs\\svr04\\ex*",
         "logs\\svr03\\ex*"
       ],
      "fields": { "type": "iis" },
      "dead time": "24h" 
        }
   ]
}

Это моя конфигурация IIS для logstash.

filter {
    if [type] == "iis" {
            if [message] =~ "^#" {
                            drop {}
            }
            grok {
                    break_on_match => false
                    match => [
                            "message", "%{TIMESTAMP_ISO8601:log_timestamp} %{IPORHOST:s-sitename} %{IPORHOST:s-ip} %{URIPROTO:cs-method} %{URIPATH:cs-uri-stem} (?:%{NOTSPACE:cs_query}|-) %{NUMBER:src_port} %{NOTSPACE:cs_username} %{IP:clientip} %{NOTSPACE:useragent} %{NUMBER:sc-substatus} %{NUMBER:sc_win32_status} %{NUMBER:sc-bytes} %{NUMBER:cs-bytes} %{NUMBER:timetaken}"
                    ]
            }

            date {

                    locale => "en"
                    match => [ "log_timestamp", "YYYY-MM-dd HH:mm:ss" ]
                    target => "@timestamp"
                    timezone => "Indian/Maldives"
            }
            useragent {
                    source=> "useragent"
                    prefix=> "browser"
            }
            geoip {
                    source => "clientip"
                    target => "geoip"
                    add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
                    add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}"  ]
            }

            mutate {
                    add_field => [ "src_ip", "%{clientip}" ]
                    convert => [ "[geoip][coordinates]", "float" ]
                    replace => [ "@source_host", "%{clientip}" ]
                    replace => [ "@message", "%{message}" ]
                    rename => [ "cs_method", "method" ]
                    rename => [ "cs_stem", "request" ]
                    rename => [ "useragent", "agent" ]
                    rename => [ "cs_username", "username" ]
                    rename => [ "sc_status", "response" ]
                    rename => [ "timetaken", "time_request" ]
           }
    }
}
filter
  {
    if [type] == "iis" {
            mutate {
                    remove_field => [ "clientip", "host", "hostname", "logtime" ]
            }
    }
}

Предположим, я хочу отправлять логи разных приложений

app1.egov.mv app2.egov.mv

как я могу добавить теги для этих разных приложений IIS? и отфильтровать их в модуле обнаружения, чтобы сделать графики для конкретных веб-сайтов с помощью тега? :|

с уважением,

Исмаил


person Ismail Kaleem    schedule 03.06.2015    source источник


Ответы (1)


Вы уже знаете, как добавить поле type, поэтому просто используйте тот же метод, чтобы добавить еще одно поле, содержащее имя хоста:

{
  ...,
  "files": [
    {
      "paths": [
         "logs\\svr08\\ex*",
         "logs\\svr05\\ex*",
         "logs\\svr04\\ex*",
         "logs\\svr03\\ex*"
      ],
      "fields": {
        "type": "iis",
        "virtualhost": "app1.egov.mv"
      },
      "dead time": "24h" 
    }
  ]
}

Очевидно, что если ваши разные шаблоны лог-файлов предназначены для разных серверов, вам придется разделить конфигурацию:

{
  ...,
  "files": [
    {
      "paths": [
         "logs\\svr08\\ex*"
      ],
      "fields": {
        "type": "iis",
        "virtualhost": "app1.egov.mv"
      },
      "dead time": "24h" 
    },
    {
      "paths": [
         "logs\\svr05\\ex*"
      ],
      "fields": {
        "type": "iis",
        "virtualhost": "app2.egov.mv"
      },
      "dead time": "24h" 
    },
    ...
  ]
}

Другой вариант (который я предпочитаю) состоит в том, чтобы сам веб-сервер включал имя хоста в каждую запись журнала.

person Magnus Bäck    schedule 03.06.2015