Образец message
из подключаемого модуля logstash концентратора событий Azure: https://pastebin.com/b8WnQHug
Я хотел бы получить вывод:
{
"operationName": "Microsoft.ContainerService/managedClusters/diagnosticLogs/Read",
"category": "kube-apiserver",
"ccpNamespace": "5d764286d7481f0001d4b054",
"resourceId": "/SUBSCRIPTIONS/XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/RESOURCEGROUPS/MY-RG/PROVIDERS/MICROSOFT.CONTAINERSERVICE/MANAGEDCLUSTERS/MY-AKS",
"properties": {
"log": "First line from record\n Second line from another record\n Third line from another record \n etc from another recors",
"stream": "stderr",
"pod": "kube-apiserver-8b5b9cd44-khjfk",
"containerID": "4c2ddb8ba9639ae9c88f728d850d550473eb36f4eb3e1d99c3f052b87cff9357"
},
"time": "2019-10-16T13:44:16.0000000Z",
"Cloud": "Public",
"Environment": "prod"
}
Основные поля:
- time (как отметка времени)
- pod (имя поля pod)
- stream (поле типа события)
- log (наихудшая часть, поле журнала должно быть объединено с другими
message.records[]
с теми же полями time
и containerID
)
Elasticsearch имеет экспериментальный модуль Azure, вот исходный код / фильтр для logstash:
https://github.com/elastic/logstash/blob/master/x-pack/modules/azure/configuration/logstash/azure.conf.erb
Мне не нужна такая сложность.
Думаю, мне нужно:
- разделить фильтр для новых полей
- фильтр даты для message.records []. Timestamp
- "что-то", чтобы найти все
message.records
с одинаковыми message.records[].time
и message.records[].properties.containerID
полями и объединить message.records[].properties.log
поле
Кто-нибудь может помочь?
Спасибо
РЕДАКТИРОВАТЬ: Я думаю, что мне придется рассмотреть также это: https://www.elastic.co/guide/en/logstash/current/plugins-filters-aggregate.html, хотя, вероятно, будет в 90% всех многострочных журналов в одном событии, может бытьвероятность того, что он будет разбит на несколько событий. Другая проблема заключается в том, что агрегат не работает в масштабе (плагин концентратора событий Azure), поэтому агрегат будет узким местом.