четверг, 23 июня 2022 г.

Настройка Google Cloud Ops Agent для Nextcloud

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

Комментариев нет:

Отправить комментарий