Logstash и JSON

Спасибо. Я открыл https://github.com/elastic/kibana/issues/10658. Будем разбираться. Возможно, будут дополнительные вопросы.

хорошо, могу дополнить: ubuntu 16.04.01 LTS, Google Chrome 56.0.2924.87 (64-bit) Mac OS, установка deb-пакетом из офиц. реп,

Если я сделал:

"app_json" : {
    "properties" : {
      "extra" : {
        "type" : "object",
        "enabled" : false
         },
      "context" : {
        "type" : "object",
        "enabled" : false
         }
    }

То можно ли вручную добавить маппинг на конкретный field в json внутри этих отключенных?

Нет, не думаю, что это возможно. Лучше скопировать это поле куда-нибудь в logstash или ingest processor.

Спасибо за совет, пробую первое так как про второе не в курсе)
Вообще как-то тяжеловато все идет((
Вот например пробую

if [extra][http][POST][access_token] ~= /.+/ {
mutate {
add_field => {"access_token" => "%{[extra][http][POST][access_token]}"}
}
}

То логсташ валится с большой ошибкой INTERPRET_BLOCK и все.

~==~

это не играет роли, я пробовал и без этого - if [extra][http][POST][access_token] {
все равно логсташ вырубается. ищу варианты, спасибо

Как он вырубается? Я только что попробовал - такой скрипт работает на 5.3.0.

input {
    stdin { }
}
filter {
    json { 
      source => message
    }

    if [extra][http][POST][access_token] =~ /.+/ {
      mutate {
        add_field => {"access_token" => "%{[extra][http][POST][access_token]}"}
      }
    }
}
# For debugging
output {
    stdout { codec => rubydebug }
}

Logstash после перечтения конфига, через полминуты выдает вот такие ошибки (штук 5 одинаковых), и начинает писать что он busy. И ничего не работает.

Лог

Какая версия logstash?

все элементы последней версии. ubuntu 16

logstash v5.3.0? Вы обновили его на этой неделе?

Да, все обновил на этой неделе. Тестировал проблему на последней версии только

А можно тогда полный лог посмотреть, а не только эту строку?

Итак, logstash 1:5.3.0-1
Конфиг приемника:

input {
        udp {
                type => "app_json"
                host => "0.0.0.0"
                port => "2514"
        }
}
filter {
if [type] == "app_json" {
        json {
                source => "message"
                remove_tag => ["_jsonparsefailure"]
        }
        mutate {
                remove_field => [ "datetime", "LEVEL_NUM" ]
        }
        if [extra][http][POST][access_token] =~ /.+/ {
                mutate {
                        add_field => {"access_token" => "%{[extra][http][POST][access_token]}"}
                        }
        }
        date {
                match => [ "ISODATE", "YYYY-MM-dd'T'HH:mm:ssZ" ]
                target => "@timestamp"
                remove_tag => ["_dateparsefailure"]
        }
}
}
output {
if [type] == "app_json" {
                elasticsearch {
                hosts => ["localhost:9200"]
                sniffing => false
                index => "applications-%{+YYYY.MM.dd}"
                document_type => "%{type}"
                template => "/etc/logstash/templates/applications-template.json"
                template_name => "applications-*"
                template_overwrite => true
        }
}
}

Вот лог с момента старта logstash - Log
Больше ничего, и logstash не работает, но если сделать рестарт то:

[2017-03-31T19:44:59,621][WARN ][logstash.runner ] SIGTERM received. Shutting down the agent.
[2017-03-31T19:44:59,827][WARN ][logstash.agent ] stopping pipeline {:id=>".monitoring-logstash"}
[2017-03-31T19:45:01,306][WARN ][logstash.agent ] stopping pipeline {:id=>"main"}
[2017-03-31T19:45:06,338][WARN ][logstash.shutdownwatcher ] {"inflight_count"=>4, "stalling_thread_info"=>{}}
[2017-03-31T19:45:06,376][ERROR][logstash.shutdownwatcher ] The shutdown process appears to be stalled due to busy or blocked plugins. Check the logs for more information.
[2017-03-31T19:45:11,338][WARN ][logstash.shutdownwatcher ] {"inflight_count"=>4, "stalling_thread_info"=>{}}
[2017-03-31T19:45:16,338][WARN ][logstash.shutdownwatcher ] {"inflight_count"=>4, "stalling_thread_info"=>{}}
[2017-03-31T19:45:21,338][WARN ][logstash.shutdownwatcher ] {"inflight_count"=>4, "stalling_thread_info"=>{}}
[2017-03-31T19:45:26,381][WARN ][logstash.shutdownwatcher ] {"inflight_count"=>4, "stalling_thread_info"=>{}}
[2017-03-31T19:45:31,338][WARN ][logstash.shutdownwatcher ] {"inflight_count"=>4, "stalling_thread_info"=>{}}
[2017-03-31T19:45:36,338][WARN ][logstash.shutdownwatcher ] {"inflight_count"=>4, "stalling_thread_info"=>{}}
[2017-03-31T19:45:41,338][WARN ][logstash.shutdownwatcher ] {"inflight_count"=>4, "stalling_thread_info"=>{}}
[2017-03-31T19:45:46,351][WARN ][logstash.shutdownwatcher ] {"inflight_count"=>4, "stalling_thread_info"=>{}}
[2017-03-31T19:45:51,363][WARN ][logstash.shutdownwatcher ] {"inflight_count"=>4, "stalling_thread_info"=>{}}
[2017-03-31T19:45:56,339][WARN ][logstash.shutdownwatcher ] {"inflight_count"=>4, "stalling_thread_info"=>{}}
[2017-03-31T19:46:01,338][WARN ][logstash.shutdownwatcher ] {"inflight_count"=>4, "stalling_thread_info"=>{}}
[2017-03-31T19:46:06,338][WARN ][logstash.shutdownwatcher ] {"inflight_count"=>4, "stalling_thread_info"=>{}}
[2017-03-31T19:46:11,338][WARN ][logstash.shutdownwatcher ] {"inflight_count"=>4, "stalling_thread_info"=>{}}
[2017-03-31T19:46:16,339][WARN ][logstash.shutdownwatcher ] {"inflight_count"=>4, "stalling_thread_info"=>{}}
[2017-03-31T19:46:21,338][WARN ][logstash.shutdownwatcher ] {"inflight_count"=>4, "stalling_thread_info"=>{}}
[2017-03-31T19:46:26,338][WARN ][logstash.shutdownwatcher ] {"inflight_count"=>4, "stalling_thread_info"=>{}}
[2017-03-31T19:46:50,509][INFO ][logstash.outputs.elasticsearch] Elasticsearch pool URLs updated {:changes=>{:removed=>, :added=>[http://logstash_system:xxxxxx@localhost:9200/_xpack/monitoring/?system_id=logstash&system_api_version=2&interval=1s]}}
[2017-03-31T19:46:50,515][INFO ][logstash.outputs.elasticsearch] Running health check to see if an Elasticsearch connection is working {:healthcheck_url=>http://logstash_system:xxxxxx@localhost:9200/, :path=>"/"}
[2017-03-31T19:46:50,712][WARN ][logstash.outputs.elasticsearch] Restored connection to ES instance {:url=>#<URI::HTTP:0x649ab33c URL:http://logstash_system:xxxxxx@localhost:9200/>}
[2017-03-31T19:46:50,727][INFO ][logstash.outputs.elasticsearch] New Elasticsearch output {:class=>"LogStash::Outputs::Elasticsearch", :hosts=>[#<URI::HTTP:0x5c455e13 URL:http://localhost:9200>]}
[2017-03-31T19:46:50,729][INFO ][logstash.pipeline ] Starting pipeline {"id"=>".monitoring-logstash", "pipeline.workers"=>1, "pipeline.batch.size"=>2, "pipeline.batch.delay"=>5, "pipeline.max_inflight"=>2}

Похоже, что когда вы обновили logstash до 5.3.0, y вас осталась старая конфигурация для log4j. В файле log4j2.properties должна быть строка

appender.rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c] %.10000m%n

Вы не могли бы заменить ее на строку из 5.3.0:

appender.rolling.layout.pattern = [%d{ISO8601}][%-5p][%-25c] %-.10000m%n

С вашим конфигурационным файлом ошибка выводиться с последними 10000 символами вместо первых 10000, и поэтому сложно сказать, что у вас там происходит. Самая полезная информация, как правило, в начале сообщения а не в конце.

После этого, воспроизведите ошибку и пришлите, пожалуйста, опять полный лог.

прошу прощения, за длительный ответ.
За это время я перенес инстанс на ubuntu 14.04. Версии ELK последние.
В конфигурации логов все верно.
Все равно получаю тоже самое. Лог

Поговорил с разработчиком logstash и по его мнению, если конфигурация лога правильная, то такого лога в принципе получится не может. Может, у вас несколько файлов конфигурации и вы проверили не тот файл, который используется. Вы не могли бы изменить pattern в файле (скажем увеличить его с 10000 до 50000) чтобы посмотреть, а тот ли конфигурационный файл используется.

Только один файл.

# ls  /etc/logstash/
GeoLite2-City.mmdb  conf.d  jvm.options  log4j2.properties  logstash.yml  patterns  startup.options  templates

Да, он один в этой директории, а вы уверены, что именно он используется и другого такого файла в системе не существует? Вы пробовали его менять?