Я запускаю 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
в качестве правильного объект, чтобы иметь возможность использовать пользовательские запросы?
Я вижу, что вы хотели бы напечатать объект Json в поле jsonPayload для ведения журнала.
Прочитав некоторые документы, я вот что думаю. Вам стоит заглянуть в синтаксический анализатор [1], также я хотел поделиться с вами тем, как плагин парсера syslog анализирует логи [2].
[1] https://cloud.google.com/logging/docs/structured-logging#writing_your_own_parser