Я настраиваю журналы агента cloudwatch, используя солончак (вот почему существует какой-то странный синтаксис). Я пытаюсь объединить произвольное количество файлов, содержащих идентичные схемы, но разные данные, в один файл.
Файл 1
{
"logs": {
"logs_collected": {
"files":{
"collect_list": [
{
"file_name": "/var/log/suricata/eve-ips.json",
"log_group_name": "{{grains.environment_full}}SuricataIPS",
"log_stream_name": "{{grains.id}}",
"timezone": "UTC",
"timestamp_format": "%Y-%m-%dT%H:%M:%S.%f+0000"
}
]
}
}
}
}
Файл 2
{
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_name": "/var/log/company/company-json.log",
"log_group_name": "{{grains.environment_full}}Play",
"log_stream_name": "{{grains.id}}",
"timezone": "UTC",
"timestamp_format": "%Y-%m-%dT%H:%M:%S.%fZ"
},
{
"file_name": "/var/log/company/company-notifications.log",
"log_group_name": "{{grains.environment_full}}Notifications",
"log_stream_name": "{{grains.id}}",
"timezone": "UTC",
"timestamp_format": "%Y-%m-%dT%H:%M:%S.%fZ"
}
]
}
}
}
}
Файл 3
{
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_name": "/var/ossec/logs/alerts/alerts.json",
"log_group_name": "{{grains.environment_full}}OSSEC",
"log_stream_name": "{{grains.id}}",
"timezone": "UTC",
"timestamp_format": "%Y-%m-%d %H:%M:%S"
}
]
}
}
}
}
JQ-запрос (на основании некоторой справки SO)
jq -s '.[0].logs.logs_collected.files.collect_list += [.[].logs.logs_collected.files.collect_list | add] | unique| .[0]' web.json suricata.json wazuh-agent.json
Выходные данные
{
"logs": {
"logs_collected": {
"files": {
"collect_list": [
{
"file_name": "/var/log/company/company-json.log",
"log_group_name": "{{grains.environment_full}}Play",
"log_stream_name": "{{grains.id}}",
"timezone": "UTC",
"timestamp_format": "%Y-%m-%dT%H:%M:%S.%fZ"
},
{
"file_name": "/var/log/company/company-notifications.log",
"log_group_name": "{{grains.environment_full}}Notifications",
"log_stream_name": "{{grains.id}}",
"timezone": "UTC",
"timestamp_format": "%Y-%m-%dT%H:%M:%S.%fZ"
},
{
"file_name": "/var/log/company/company-notifications.log",
"log_group_name": "{{grains.environment_full}}Notifications",
"log_stream_name": "{{grains.id}}",
"timezone": "UTC",
"timestamp_format": "%Y-%m-%dT%H:%M:%S.%fZ"
},
{
"file_name": "/var/log/suricata/eve-ips.json",
"log_group_name": "{{grains.environment_full}}SuricataIPS",
"log_stream_name": "{{grains.id}}",
"timezone": "UTC",
"timestamp_format": "%Y-%m-%dT%H:%M:%S.%f+0000"
},
{
"file_name": "/var/ossec/logs/alerts/alerts.json",
"log_group_name": "{{grains['environment_full']}}OSSEC",
"log_stream_name": "{{grains.id}}",
"timezone": "UTC",
"timestamp_format": "%Y-%m-%d %H:%M:%S"
}
]
}
}
}
}
Если вы прошли так далеко, спасибо. Еще одно замечание: если я меняю порядок файлов, первый индекс collect_list
всегда дублируется, а если web.json
последний (единственный с длиной 2), второй файл журнала не группа.