Мы используем стек ELK для агрегирования всех наших журналов, и у нас есть несколько систем. В настоящее время у нас есть Filebeat, настроенный для ведения журнала с указанием индексов c в зависимости от системы (SystemA, SystemB, System C).
Я хотел бы дополнительно отправить все журналы с уровнем ERROR в другой индекс, где я хотел бы собирать все ошибки в системах, но почему-то я не могу понять, как заставить Filebeat отправлять одно сообщение на несколько индексов
Согласно документации , первое условие, которое соответствует, будет определять индекс, который будет использоваться, что для меня звучит так, как будто невозможно отправить сообщение, которое соответствовало бы нескольким шаблонам по нескольким индексам?
Что я хочу сделать:
output.elasticsearch:
hosts: '${ELASTICSEARCH_HOSTS}'
username: '${ELASTICSEARCH_USERNAME}'
password: '${ELASTICSEARCH_PASSWORD}'
index: "filebeat-external-%{+yyyy.MM.dd}"
indices:
- index: "filebeat-error-logs-%{+yyyy.MM.dd}"
when:
or:
- equals:
level: "ERROR"
- equals:
level: "error"
- index: "filebeat-service-a-%{+yyyy.MM.dd}"
when:
regexp:
container.name: "^service-a-"
- index: "filebeat-service-b-%{+yyyy.MM.dd}"
when:
regexp:
container.name: "^service-b-"
Единственный способ, который я сейчас вижу, - это иметь несколько индексов для каждой системы и объединять их в Kibana:
output.elasticsearch:
hosts: '${ELASTICSEARCH_HOSTS}'
username: '${ELASTICSEARCH_USERNAME}'
password: '${ELASTICSEARCH_PASSWORD}'
index: "filebeat-external-%{+yyyy.MM.dd}"
indices:
- index: "error-log-service-a-%{+yyyy.MM.dd}"
when:
and:
- equals:
level: "ERROR"
- regexp:
container.name: "^service-a-"
- index: "service-log-service-a-%{+yyyy.MM.dd}"
when:
and:
- not:
- equals:
level: "ERROR"
- regexp:
container.name: "^service-a-"
Но это удвоит количество индексов и является дублированием кода. Мне что-то здесь не хватает, есть ли более простой способ получить общий индекс ошибок, но все еще есть ошибки go для индексов c, специфичных для службы?