Сводка: я хочу, чтобы операции регистрации в моих док-контейнерах отправлялись в стек 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](https://i.stack.imgur.com/nvD9X.png)
Детали одной из этих строк (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?