Как заставить logstash отправлять полные JSON-сообщения, а не разбивать их на строки? - PullRequest
0 голосов
/ 28 мая 2019

Сводка: я хочу, чтобы операции регистрации в моих док-контейнерах отправлялись в стек ELK.Я получаю сообщение, предназначенное для JSON, разбитое на отдельные строки.

Я настроил ведение журнала в Docker:

# cat /etc/docker/daemon.json
{
    "log-driver": "gelf",
    "log-opts": {
        "gelf-address": "udp://logstash:12201"
    }
}

Logstash настроен на получение сообщений GELF и затем пересылкуих в Elasticsearch (он сам работает в контейнере Docker):

# cat /etc/docker/logstash/gelf.yml
input {
  gelf {
    type => docker
    port => 12201
  }
}
output {
  stdout {}
  elasticsearch {
    hosts => ["http://elasticsearch:80"]
  }
}

Я получаю сообщения в Elasticsearch, но все они разбиты на строки, а не отправляются в виде блока JSON:

enter image description here

Детали одной из этих строк (3-я - "container_name" => "logstash"):

{
  "_index": "logstash-2019.05.28-000001",
  "_type": "_doc",
  "_id": "-I4b_moBBedB4gDKLglO",
  "_score": 1,
  "_source": {
    "source_host": "192.168.10.2",
    "host": "srv",
    "created": "2019-05-28T11:01:16.452463192Z",
    "tag": "2a6e38842912",
    "container_id": "2a6e38842912d8d7033a5db5d4fa8ac0c19df3a8bfe667607323fd12df5e705f",
    "@timestamp": "2019-05-28T11:02:34.212Z",
    "@version": "1",
    "message": "    \"container_name\" => \"logstash\",",
    "image_id": "sha256:93ae8cd115605387515d96373bd16709c507376fe0c73dd125505763ffdf0500",
    "level": 6,
    "command": "/usr/local/bin/docker-entrypoint",
    "version": "1.1",
    "image_name": "docker.elastic.co/logstash/logstash:7.1.0",
    "container_name": "logstash",
    "type": "docker"
  },
  "fields": {
    "created": [
      "2019-05-28T11:01:16.452Z"
    ],
    "@timestamp": [
      "2019-05-28T11:02:34.212Z"
    ]
  }
}

Что не так снастройки logstash?

...