Как заставить журналы Compute Engine оказаться в структурированном jsonPayload вместо textPayload?

Я запускаю API на виртуальной машине Linux в качестве вычислительного экземпляра в Google Cloud.API запускается с systemd , и он записывается в syslog . Я запускаю агент ведения журнала StackDriver, чтобы передать журналы в StackDriver.

С помощью этого API я записываю сообщения Json на стандартный вывод. Если я читаю / var / log / syslog (или выполняю systemctl status ), я вижу такие сообщения:

May  9 14:10:25 test-rulesapi-core-473n dotnet-example[4021]: {"customfield": "value"}

Я бы хотел добиться, чтобы эта полезная нагрузка Json закончилась. вверх в поле jsonPayload записей журнала, чтобы иметь возможность выполнять пользовательские запросы. Я попытался изменить конфигурацию StackDriver таким образом, чтобы она игнорировала префикс, добавленный к сообщениям журнала (с датой, именем приложения и т. Д.), Чтобы в StackDriver отправлялся только необработанный Json. Конфигурация выглядит так (конфигурация по умолчанию закомментирована):

# format /^(?<message>(?<time>[^ ]*\s*[^ ]* [^ ]*) .*)$/
format /^(?<time>[^ ]*\s*[^ ]* [^ ]*)[^{]*(?<message>.*)$/

Кажется, это правильно извлекает только json-часть сообщения, но моя проблема в том, что в записях журнала она все еще заканчивается в textPayload поле.

Например, если я получаю одну конкретную запись журнала с помощью gcloud , это выглядит так:

$ gcloud logging read "logName=projects/my-project/logs/syslog AND insertId=ajooj1g318gl2l"
---
insertId: ajooj1g318gl2l
labels:
  compute.googleapis.com/resource_name: myapi-473n
logName: projects/travix-production/logs/syslog
receiveTimestamp: '2018-05-09T14:00:03.877941542Z'
resource:
  labels:
    instance_id: '3565608832621021979'
    project_id: travix-production
    zone: europe-west1-c
  type: gce_instance
textPayload: '{"customfield": "value"}'
timestamp: '2018-05-09T14:00:03Z'

Как я могу заставить StackDriver поместить объект Json в jsonPayload в качестве правильного объект, чтобы иметь возможность использовать пользовательские запросы?

1
задан 29 May 2018 в 23:54
1 ответ

Я вижу, что вы хотели бы напечатать объект Json в поле jsonPayload для ведения журнала.

Прочитав некоторые документы, я вот что думаю. Вам стоит заглянуть в синтаксический анализатор [1], также я хотел поделиться с вами тем, как плагин парсера syslog анализирует логи [2].


[1] https://cloud.google.com/logging/docs/structured-logging#writing_your_own_parser

[2] https://docs.fluentd.org/parser/syslog

1
ответ дан 24 August 2020 в 14:11

Теги

Похожие вопросы