Отправка сообщений по нескольким поисковым индексам elasti c - PullRequest
0 голосов
/ 07 мая 2020

Мы используем стек 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, специфичных для службы?

...