В процессе настройки отправки логов Nextcloud в Google Cloud Logging довелось поработать с Google Cloud Ops Agent. Это относительно новый агент, который отвечает и за логи и за метрики.
Nextcloud пишет структурированные логи в JSON формате так что возиться с регулярками не придется. Одна запись выглядит примерно так:
{ "reqId": "fA6aIAL7fObKyDA2YeDq", "level": 2, "time": "2022-06-21T06:55:18+00:00", "remoteAddr": "", "user": "--", "app": "news", "method": "", "url": "--", "message": "https://[skipped]/data/rss read error : Server error: `GET https://[skipped]/data/rss` resulted in a `500 Internal Server Error` response:\n<html>\r\n<head><title>500 Internal Server Error</title></head>\r\n<body bgcolor=\"white\">\r\n<center><h1>500 Internal Server E (truncated...)\n", "userAgent": "--", "version": "23.0.5.1" }
Для начала нужно вытащить timestamp и severity. Timestamp буду брать из поля time
, а severity из поля level
, но для level потребуется преобразование из значения Nextcloud в значение Google LogEntry:
- 0 = DEBUG
- 1 = INFO
- 2 = WARNING
- 3 = ERROR
- 4 = CRITICAL (в Nextcloud "4" означает FATAL, но в GCP нет такого уровня)
Ops Agent настраивается через один конфигурационный файл в формате YAML (для Debian он находится в /etc/google-cloud-ops-agent/config.yaml)
В документации на strptime(3) нет шаблона для временной зоны вида +00:00, а только %z который дает +0000 (без двоеточия). Наименее затратное решение в таком случае - задать одинаковый формат времени в Nextcloud и в Ops Agent и заодно поменять расположение лог файла.
Nextcloud config.php
<?php $CONFIG = array ( 'logfile' => '/var/log/nextcloud/nextcloud.log', 'logdateformat' => 'Y-m-d\TH:i:sO', );
Нужно помнить что PHP использует свой собственный формат, который отличается от strptime.
Ops Agent config.yaml
logging: receivers: nextcloud: type: files include_paths: - /var/log/nextcloud/nextcloud.log processors: nextcloud: type: parse_json time_key: time time_format: %Y-%m-%dT%H:%M:%S%z nextcloud_severity: type: modify_fields fields: severity: copy_from: jsonPayload.level default_value: DEFAULT map_values: "0": DEBUG "1": INFO "2": WARNING "3": ERROR "4": CRITICAL service: pipelines: default_pipeline: receivers: [] processors: [] nextcloud: receivers: [nextcloud] processors: [nextcloud, nextcloud_severity]
После изменения настроек Ops Agent нужно перезагрузить сервис
$ sudo systemctl restart google-cloud-ops-agent
Комментариев нет:
Отправить комментарий