Визуализация задач Jobber на ELK (через Filebeat) - PullRequest
0 голосов
/ 20 января 2020

A Jobber Docker контейнер (выполняемые периоды c задачи) выводит на стандартный вывод, который захватывается Filebeat (с включенным флагом автоматического обнаружения контейнеров Docker) и затем отправляется в Logsta sh (внутри стека ELK) или напрямую в Elasticsearch.

Теперь на Kibana документ выглядит так:

@timestamp  Jan 20, 2020 @ 20:15:07.752
...
agent.type  filebeat
container.image.name    jobber_jobber
...
message {
          "job": {
                    "command":"curl http://my.service/run","name":"myperiodictask",
                    "status":"Good",
                    "time":"0 */5 * * * *"
          },
          "startTime":1579540500,
          "stdout":"{\"startDate\":\"2020-01-20T16:35:00.000Z\",\"endDate\":\"2020-01-20T17:00:00.000Z\",\"zipped\":true,\"size\":3397}",
          "succeeded":true,
          "user":"jobberuser",
          "version":"1.4"
        }
...

Примечание: над полем 'message' находится простая строка отражающий json объект; приведенный выше формат предназначен для более четкой читаемости.

Моя цель - иметь возможность запрашивать Elasti c в полях сообщений, поэтому я могу фильтровать, например, по заданиям Jobber.

Как я могу это сделать? Я знаю, что Filebeat использует плагины и теги контейнеров для применения того или иного фильтра: есть ли что-нибудь для Джоббера? Если нет, то как это сделать?

Еще лучше иметь возможность использовать поля результата задачи Jobber (в поле 'stdout')! Не могли бы вы указать мне, как это осуществить?

1 Ответ

0 голосов
/ 22 января 2020

Filebeat предоставляет процессоров для обработки таких задач.

Ниже приведена конфигурация для удовлетворения потребностей "Декодировать json в поле 'message'", "Декодировать json в 'stdout' Within "(оба с использованием процессора decode_json_fields ) и другие потребности, связанные с Jobber.

Обратите внимание, что в данном примере фильтруются события, проходящие через Filebeat, с помощью пользовательского тега 'метка, присваиваемая контейнеру Docker, в котором находится процесс Jobber. Условие docker.container.labels.custom-tag: jobber следует заменить в соответствии с вашим вариантом использования.

filebeat.yml:

processors:

# === Jobber events processing ===
- if:
    equals:
      docker.container.labels.custom-tag: jobber
  then:
    # Drop Jobber events which are not job results
    - drop_event:
        when:
          not:
            regexp:
              message: "{.*"
    # Json-decode event's message part
    - decode_json_fields:
        when:
          regexp:
            message: "{.*"
        fields: ["message"]
        target: "jobbertask"
    # Json-decode message's stdout part
    - decode_json_fields:
        when:
          has_fields: ["jobbertask.stdout"]
        fields: ["jobbertask.stdout"]
        target: "jobbertask.result"
    # Drop event's decoded fields
    - drop_fields:
        fields: ["message"]
    - drop_fields:
        when:
          has_fields: ["jobbertask.stdout"]
        fields: ["jobbertask.stdout"]

Декодированные поля помещаются в поле "jobbertask". Это сделано для того, чтобы избежать конфликта сопоставления индекса в полях root. Не стесняйтесь заменять «jobbertask» любым другим именем поля, заботясь о сопоставлении коллизий.

В моем случае это работает независимо от того, обращается ли Filebeat к событиям в Logsta sh или напрямую в Elasticsearch.

...