Я не совсем уверен, как go об этом, я пытаюсь найти лучший способ получить нужные мне данные, и я не могу понять, как это сделать без трех разных наборов процессоров AssessmentJsonPath.
Мои данные выглядят следующим образом.
{
"@timestamp": "2020-05-29T18:06:53.965Z",
"@metadata": {
"beat": "filebeat",
"type": "_doc",
"version": "7.7.0"
},
"agent": {
"ephemeral_id": "691847ce-87fa-49de-a635-555b31ed28f4",
"hostname": "acal",
"id": "c3336311-de5a-4563-b24b-655613b399aa",
"version": "7.7.0",
"type": "filebeat"
},
"log": {
"offset": 3759198,
"file": {
"path": "/opt/zactivity.log"
}
},
"message": "{\"eventDate\":\"2020-05-29 18:06:50.913\",\"status\":\"SUCCEEDED\",\"activityType\":\"AUTHENTICATION\",\"user\":\"admin\",\"accountId\":\"4dadb154\",\"ip\":\"111.11.1.111\",\"userRoles\":[\"ROLE_DELETE_ALL\",\"ROLE_INVOKE_ACTIONS\",\"ROLE_SAVE\",\"ROLE_CREATE\",\"ROLE_READ\",\"ROLE_SAVE\",\"ROLE_ADMINISTER\",\"ROLE_SHARE\",\"ROLE_MANAGE\",\"ROLE_EXPORT\",\"ROLE_MANAGE_ALL\",\"ROLE_MANAGE_ACTION\",\"ROLE_EDIT\",\"ROLE_ADMIN\",\"ROLE_MANAG\",\"ROLE_RAW_DATA_ACCESS\",\"ROLE_ADMINIST\"],\"userGroups\":[\"1fb\"],\"userType\":\"USER\",\"authenticationType\":\"USERNAME_PASSWORD\"} ",
"input": {
"type": "log"
},
"ecs": {
"version": "1.5.0"
},
"host": {
"mac": [
"50:6b:8d:db:04:2e"
],
"hostname": "local",
"architecture": "x86_64",
"os": {
"version": "7 (Core)",
"family": "redhat",
"name": "CentOS Linux",
"kernel": "3.10.0-1062.12.1.el7.x86_64",
"codename": "Core",
"platform": "centos"
},
"id": "a29a885a0aba48418d46414ecbe449e1",
"containerized": false,
"name": "local",
"ip": [
"11.11.11.11"
]
}
}
Мне нужно несколько значений из сообщения, а также log.file.path и, возможно, даже @ timestamp.
Сейчас у меня есть EvaluateJsonPath только для получения сообщения, log.file.path и @timestamp. Затем я маршрутизирую его на основе пути к файлу и отправляю его другому EvaluateJsonPath, чтобы получить сообщение и сделать его потоковым файлом, чтобы передать его другому EvaluateJsonPath для анализа значений в сообщении.
Есть ли лучший способ чтобы сделать это вместо трех разных EvaluateJsonPath?