Удалить поле сообщения для данных набора metricbeat

Я пытаюсь получить данные metricbeat с помощью logstash. (Кафка в качестве ввода и ElasticSearch в качестве вывода).

input {
  kafka {
    bootstrap_servers => "XX.XX.XXX.XX:9092"
    topics => ["cc-data"]
  }
}
output {
  elasticsearch {
    hosts => ["XX.XX.XXX.XX:9200"]
    index => "metricbeat-%{+YYYY.MM.dd}"
  }
}

В выводе я вижу данные как:

     {
        "_index" : "metricbeat-2017.01.18",
        "_type" : "logs",
        "_id" : "AVmzQUytyldhSr4kUaUS",
        "_score" : 1.0,
        "_source" : {
          "@timestamp" : "2017-01-18T20:21:45.324Z",
          "@version" : "1",
          "message" : "{\"@timestamp\":\"2017-01-18T20:21:44.394Z\",\"beat\":{\"hostname\":\"ip-XX-XXX-XX-XXX\",\"name\":\"ip-XX-XXX-XX-XXX\",\"version\":\"5.0.0\"},\"metricset\":{\"module\":\"system\",\"name\":\"process\",\"rtt\":104061},\"system\":{\"process\":{\"cpu\":{\"start_time\":\"2016-08-03T10:10:17.000Z\",\"total\":{\"pct\":0.000000}},\"fd\":{\"limit\":{\"hard\":4096,\"soft\":1024},\"open\":0},\"memory\":{\"rss\":{\"bytes\":0,\"pct\":0.000000},\"share\":0,\"size\":0},\"name\":\"migration/2\",\"pgid\":0,\"pid\":47,\"ppid\":2,\"state\":\"sleeping\",\"username\":\"root\"}},\"type\":\"metricsets\"}"
        }
      }
    ]
  }
}

Я не хочу, чтобы поле «сообщение» было само по себе. Вместо этого все данные в этом поле должны отображаться как есть [хочу удалить только имя поля «сообщение», но его содержимое должно появиться] Как мне удалить поле только имя и оставить содержимое как есть.

Может ли кто-нибудь помочь, как мы этого достигаем?


person Soundarya Thiagarajan    schedule 19.01.2017    source источник


Ответы (1)


Вход kafka по умолчанию имеет кодек plain, что означает, что он потребляет тему и интерпретирует содержимое как простую строку. Вместо этого вам нужно изменить кодек на json, чтобы он анализировал содержимое в структуру JSON:

input {
  kafka {
    bootstrap_servers => "XX.XX.XXX.XX:9092"
    topics => ["cc-data"]
    codec => "json"           # <---- add this
  }
}
person Val    schedule 19.01.2017
comment
Привет, Вэл, вот ошибка, которую я получаю: [2017-01-19T05:22:48,052][WARN ][logstash.outputs.elasticsearch] Неудачное действие. {:status=›400, :action=›[index, {:_id=›nil, :_index=›metricbeat-2017.01.19, :_type=›metricsets, :_routing=›nil}, 2017-01-19T04: 45:04.733Z %{host} %{message}], :response=›{index=›{_index=›metricbeat-2017.01.19, _type=›metricsets, _id=›AVm1MKLZyldhSr4khi3q, status=›400, error=› {type=›mapper_parsing_exception, Reason=›не удалось разобрать [system.process.cpu.start_time], Reason_by=›{type=›illegal_argument_exception - person Soundarya Thiagarajan; 19.01.2017
comment
Это данные metricbeat. - person Soundarya Thiagarajan; 19.01.2017
comment
Теперь это другая проблема, и признак того, что теперь он правильно анализирует ваше поле message как JSON. Можете ли вы обновить свой вопрос с выводом, который вы получаете от curl -XGET localhost:9200/_template и curl -XGET localhost:9200/metricbeat-2017.01.19 ? - person Val; 19.01.2017
comment
шаблон слишком длинный для прикрепления. Я обновил вопрос с файлом metricbeat.yml и конфигурацией logstash ... Из metricbeat -> передача данных в тему Kafka «cc-data» и в конфигурации Logstash -> Чтение входных данных из темы Kafka «cc-data» и отправить вывод в ElasticSearch. Мне не нужны поля logstash по умолчанию. Я ищу данные, как мы привыкли видеть, когда мы пушим от metricbeat -> Elasticsearch... - person Soundarya Thiagarajan; 19.01.2017