Как искать по URL-адресу точно в ElasticSearch / Kibana

Я импортировал файл журнала IIS, и данные были перемещены через Logstash (1.4.2) в ElasticSearch (1.3.1), а затем отображаются в Kibana.

Мой раздел фильтров выглядит следующим образом:

filter {
  grok {
     match => 
        ["message" , "%{TIMESTAMP_ISO8601:iisTimestamp} %{IP:serverIP} %{WORD:method} %{URIPATH:uri} - %{NUMBER:port} - %{IP:clientIP} - %{NUMBER:status} %{NUMBER:subStatus} %{NUMBER:win32Status} %{NUMBER:timeTaken}"]
  }
}

При использовании панели «Условия» в Kibana и использовании «uri» (одно из моих захваченных полей из Logstash) она сопоставляет токены в URI. Следовательно, это такие элементы, как:

  • 'Скрипты'
  • '/'
  • 'EN

В: Как мне отобразить «Популярные URL-адреса» в их полной форме?

Вопрос: Как сообщить ElasticSearch, что это поле «not_analysed». Я не против иметь 2 поля, например:

  • uri - токенизированный URI
  • uri.raw - полностью сформированный URL.

Можно ли это сделать на стороне Logstash или это сопоставление, которое необходимо настроить в ElasticSearch?


Отображение выглядит следующим образом:

//http://localhost:9200/iislog-2014.10.09/_mapping?pretty

{
  "iislog-2014.10.09" : {
    "mappings" : {
      "iislogs" : {
        "properties" : {
          "@timestamp" : {
            "type" : "date",
            "format" : "dateOptionalTime"
          },
          "@version" : {
            "type" : "string"
          },
          "clientIP" : {
            "type" : "string"
          },
          "device" : {
            "type" : "string"
          },
          "host" : {
            "type" : "string"
          },
          "id" : {
            "type" : "string"
          },
          "iisTimestamp" : {
            "type" : "string"
          },
          "logFilePath" : {
            "type" : "string"
          },
          "message" : {
            "type" : "string"
          },
          "method" : {
            "type" : "string"
          },
          "name" : {
            "type" : "string"
          },
          "os" : {
            "type" : "string"
          },
          "os_name" : {
            "type" : "string"
          },
          "port" : {
            "type" : "string"
          },
          "serverIP" : {
            "type" : "string"
          },
          "status" : {
            "type" : "string"
          },
          "subStatus" : {
            "type" : "string"
          },
          "tags" : {
            "type" : "string"
          },
          "timeTaken" : {
            "type" : "string"
          },
          "type" : {
            "type" : "string"
          },
          "uri" : {
            "type" : "string"
          },
          "win32Status" : {
            "type" : "string"
          }
        }
      }
    }
  }
}

person Dominic Zukiewicz    schedule 14.10.2014    source источник
comment
покажите нам вашу карту ES   -  person Pierre-Louis Gottfrois    schedule 14.10.2014
comment
Это значение по умолчанию из коробки. Никаких дополнительных сопоставлений не создано   -  person Dominic Zukiewicz    schedule 14.10.2014


Ответы (2)


В вашем сопоставлении Elasticsearch:

url: {
  type: "string",
  index: "not_analyzed"
}
person Pierre-Louis Gottfrois    schedule 14.10.2014
comment
Мне нужно будет добавлять это в каждый индекс? Файлы журнала охватывают 2 месяца? - person Dominic Zukiewicz; 14.10.2014
comment
Возможно, вы захотите прочитать этот elasticsearch .org / blog / - person Pierre-Louis Gottfrois; 14.10.2014
comment
Подробнее здесь github.com/elasticsearch/ logstash / blob / master / lib / logstash / - person Pierre-Louis Gottfrois; 14.10.2014

Проблема в том, что iislog- не соответствует формату logstash- и, следовательно, не подобрал шаблон:

Мой формат индекса был iislog-YYYY.MM.dd, при этом не использовались стандартные сопоставления Logstash. При использовании формата индекса logstash- Logstash создаст 2 пары полей для строк. Например, uri:

  • uri (появляется в Кибане)
  • uri.raw (не появляется в Кибане)

Обратите внимание, что uri.raw не будет отображаться в Kibana, но его можно запросить.

Таким образом, решение использовать альтернативный индекс заключается в следующем:

  1. Не беспокойтесь! Используйте формат индекса по умолчанию logstash-%{+YYYY.MM.dd}
  2. Добавьте «тип» к входу file, чтобы помочь вам отфильтровать правильные журналы в Kibana (при использовании формата индекса logstash-)

    input { 
      file {
          type => "iislog"
          ....
      }
    }
    
  3. Примените фильтрацию в Kibana на основе типа

OR

Если вам действительно действительно нужен другой формат индекса:

  1. Скопируйте файл конфигурации по умолчанию. в новый файл, скажем iislog-template.json
  2. Ссылайтесь на файл конфигурации в output ==> elasticsearch следующим образом:

    output {    
       elasticsearch_http {
          host => localhost
          template_name => "iislog-template.json"
          template => "<path to template>"
          index => "iislog-%{+YYYY.MM.dd}"   
       }
    }
    
person Dominic Zukiewicz    schedule 14.10.2014