Подтвердить что ты не робот

Работник Logstash умирает без причины

Используя logstash 2.3.4-1 на centos 7 с плагином kafka-input, я иногда получаю

{: timestamp = > "2016-09-07T13: 41: 46.437000 + 0000",: message = > # 0,: events_consumed = > 822,: worker_count = > 1,: inflight_count = > 0,: worker_states = > [{: status = > "dead",: alive = > false,: index = > 0,: inflight_count = > 0}],: output_info = > [{: type = > "http",: config = > { "http_method" = > "post", "url" = > "$ {APP_URL}/", "headers" = > [ "AUTHORIZATION", "Basic ${CREDS}" ], "ALLOW_ENV" = > true},: is_multi_worker = > false,: events_received = > 0,: workers = > ", headers = > {..}, codec = > " UTF-8 " > , workers = > 1, request_timeout = > 60, socket_timeout = > 10, connect_timeout = > 10, follow_redirects = > true, pool_max = > 50, pool_max_per_route = > 25, keepalive = > true, automatic_retries = > 1, retry_non_idempotent = > false, validate_after_inactivity = > 200, ssl_certificate_validation = > true, keystore_type = > " JKS ", truststore_type = > " JKS ", cookies = > true, verify_ssl = > true, format = > " json " > ] > ,: busy_workers = > 1}, {: type = > " stdout ",: config = > { "ALLOW_ENV" = > true},: is_multi_worker = > false,: events_received = > 0,: workers = > "\n" > , workers = > 1 > ] > ,: busy_workers = > 0}],: thread_info = > [],: stalling_threads_info = > []} > ,: level = > : warn}

это config

        input {
      kafka {
        bootstrap_servers => "${KAFKA_ADDRESS}"
        topics => ["${LOGSTASH_KAFKA_TOPIC}"]
      }
    }

    filter {
      ruby {
        code =>
      "require 'json'
       require 'base64'

       def good_event?(event_metadata)
         event_metadata['key1']['key2'].start_with?('good')
       rescue
         true 
       end

       def has_url?(event_data)
         event_data['line'] && event_data['line'].any? { |i| i['url'] && !i['url'].blank? }
       rescue
         false
       end

       event_payload = JSON.parse(event.to_hash['message'])['payload']

       event.cancel unless good_event?(event_payload['event_metadata'])
       event.cancel unless has_url?(event_payload['event_data'])
    "
  }
    }

    output {
      http {
          http_method => 'post'
          url => '${APP_URL}/'
          headers => ["AUTHORIZATION", "Basic ${CREDS}"]
      }

      stdout { }
    }

Что нечетно, поскольку он записывается в logstash.log, а не в logstash.err

Что означает эта ошибка и как ее избежать? (только перезапуск logstash разрешает его, до следующего раза)

4b9b3361

Ответ 1

В соответствии с этот вопрос github ваш код ruby ​​может вызвать проблему. В принципе любое исключение ruby ​​заставит работника фильтра умереть. Не видя вашего рубинового кода, невозможно отлаживать его дальше, но вы можете попробовать обернуть свой рубиновый код в обработчик исключений и зарегистрировать исключение где-нибудь (по крайней мере, до тех пор, пока не будет обновлена ​​logstash для его регистрации).