Как мы можем сделать однострочные jsons в выходной файл filebeat - PullRequest
0 голосов
/ 09 апреля 2019

Я использовал FileBeat для конвертации логов apache2 и выгрузки в выходной файл.генерируемый выходной файл имеет тело JSON для каждого сообщения журнала apache2.но здесь мне нужно тело JSON в одной строке вместо анализа.

В текущем формате я не могу извлечь каждое тело JSON из выходного файла, если мы сохраняем строчный JSON, то мы можем разделить каждую строку выходного файла и взять каждый JSONтело легко.

Я изменил настройки вывода файла filebeat.yml.как показано ниже

output.file: путь: "/ tmp / logstojson / apache2 /" имя_файла: filebeat разрешения: 0600 codec.json: pretty: false

Я не нашел ожидаемый форматв выходном файле.

Фактические данные выходного файла:

{ "@timestamp": "2019-04-09T13:12:47.106Z", 

  "@metadata": {

    "beat": "filebeat",

    "type": "doc",

    "version": "6.6.2",

    "pipeline": "filebeat-6.6.2-system-auth-pipeline"

  },

  "fileset": {

    "module": "system",

    "name": "auth"

  },

  "prospector": {

    "type": "log"

  },

  "input": {

    "type": "log"

  },

  "source": "/var/log/auth.log",

  "log": {

    "file": {

      "path": "/var/log/auth.log"

    }

  },

  "message": "Apr  9 13:12:45 ip-172-31-22-12 sudo: 
pam_unix(sudo:session): session closed for user root",

  "event": {

    "dataset": "system.auth"

  },

  "beat": {

    "version": "6.6.2",

    "name": "ip-172-31-22-12",

    "hostname": "ip-172-31-22-12"

  },

  "host": {

    "name": "ip-172-31-22-12"

  },

  "offset": 537068

}

ожидаемые данные выходного файла:

{ "@timestamp": "2019-04-09T13:12:47.106Z", "@metadata": {  "beat": "filebeat", "type": "doc", "version": "6.6.2",  "pipeline": "filebeat-6.6.2-system-auth-pipeline" }, "fileset": { "module": "system", "name": "auth" }, "prospector": { "type": "log" }, "input": { "type": "log" }, "source": "/var/log/auth.log", "log": { "file": {  "path": "/var/log/auth.log" } }, "message": "Apr  9 13:12:45 ip-172-31-22-12 sudo: pam_unix(sudo:session): session closed for user root", "event": { "dataset": "system.auth" }, "beat": { "version": "6.6.2", "name": "ip-172-31-22-12",  "hostname": "ip-172-31-22-12"  }, "host": { "name": "ip-172-31-22-12" }, "offset": 537068}

1 Ответ

0 голосов
/ 10 апреля 2019

Не полный ответ, но это нормально, если вы не видите разницы при установке codec.json: pretty: false, поскольку значение по умолчанию уже ложно (см .: filebeat codec doc )

другое решение, которое я мог бы увидеть, - это вручную отформатировать вывод json через codec.format: string: '%{[@timestamp]} %{[message]}'

Но это далеко не чисто и не эффективно (если не совсем невозможно, если ваш вклад имеет некоторый уровень вариации или сложности)

Возможно, FB поддерживает другой кодек, не документированный на этой странице; Доку Э.С. иногда может не хватать точности, поэтому его стоит изучить.

С другой стороны: если вам нужны такие возможности преобразования / форматирования в ваших журналах, вы можете вместо этого рассмотреть возможность использования logstash (или, если вам также нужна облегченная транспортировка FB, используйте FB и LS). LS поддерживает ввод файла или файлового бита и вывод файла, и это в основном просто более полная утилита ETL, чем FB (которая является более легким форвардером). Вы должны окончательно рассмотреть это для такого рода вопросов. (см. вывод файла LS: doc: По умолчанию этот вывод записывает одно событие на строку в формате json. Вы можете настроить формат строки, используя строковый кодек, например )

...