В процессе настройки отправки логов 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
Комментариев нет:
Отправить комментарий