@SchmeL

Как создать json template для elasticsearch?

У меня настроена связка ELK. Приложение отдает лог через http в json формате. В моем случае это play framework.
В logstash настроен http_pooler для чтения лога.
input {
  http_poller {
    urls => {
      finac => {
        method => get
        url => "http://192.168.1.100:9010/health/status"
        headers => {
          Accept => "application/json"
        }
      }
    }
    request_timeout => 20
    interval => 60
    tags => ["finac"]
    type => "app"
    codec => "json"
    metadata_target => "http_poller_metadata"

  }
}

filter {
 if "finac" in [tags] {

    json {
     source => "message"
    }

 }
}

output {
 if "finac" in [tags] {
    elasticsearch {
      codec => "json"
      hosts => "localhost:9200"
      index => "debug-%{+YYYY.MM.dd}"
    }

 stdout { codec => rubydebug }

 }
}


Но при попытке записи в Elasticsearch получаю ошибку
{:timestamp=>"2017-02-09T16:07:20.880000+0300", :message=>"Failed action. ", :status=>400, :action=>["index", {:_id=>nil,
..........
{"type"=>"mapper_parsing_exception", "reason"=>"failed to parse", "caused_by"=>{"type"=>"illegal_argument_exception", "reason"=>"mapper [play.CorePlugin.monitors.max] of different type, current_type [double], merged_type [long]"}}}}, :level=>:warn}


Я так понял он не может его распарсить правильно и ругается. В инете советуют писать шаблон для json.
Например такой:
{
  "template": "userkeyword*",
  "order": 1,
  "mappings": {
    "logs": {
      "dynamic_templates": [{
        "string_template": {
          "match": "*",
          "match_mapping_type": "string",
          "mapping": {
            "type": "string",
            "index": "not_analyzed"
          }
        }
      }],
      "properties": {
        "keyword": {
          "type": "string",
          "analyzer": "keyword_analyzer",
          "fields": {
            "autocomplete": {
              "type": "string",
              "search_analyzer": "autocomplete_search_analyzer",
              "analyzer": "autocomplete_index_analyzer"
            },
            "readingform": {
              "type": "string",
              "search_analyzer": "readingform_search_analyzer",
              "analyzer": "readingform_index_analyzer"
            }
          }
        }
      }
    }
  }
}


У приложения логи которого я хочу загнать в elasticsearch json log содержит порядка 2000 компонентов.
Существуют ли какие нибудь автоматизированные системы для конвертирования сформированного json лога в template?
  • Вопрос задан
  • 1060 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы