Использование журналов контроллера#

Для хранения служебных сообщений в виде журналов в Automation Controller используется syslog-ng.

Общие сведения#

syslog-ng позволяет передавать данные журналов в различные приемники (destinations): файлы на локальных и сетевых дисках, серверы журналирования, а также во внешние агрегаторы журналов.

Если сетевой приемник становится недоступным, syslog-ng сохраняет сообщения на локальном диске. При восстановлении соединения сообщения автоматически передаются из локальной копии в приемник в том же порядке, в котором они были получены.

При каждом изменении настроек журналирования происходит следующее:

  • обновляется содержимое конфигурационного файла /var/lib/awx/syslogng/syslog-ng.conf;

  • для применения новых настроек перезапускается служба awx-syslogng.

Совет

Настройки журналирования рекомендуется изменять через графический интерфейс.

syslog-ng поддерживает два режима дисковой буферизации:

  • Надежная (reliable):

    • Сообщения из буфера удаляются только при получении от приемника подтверждения записи.

    • Низкая производительность (по сравнению с нормальной дисковой буферизацией).

    • Обеспечивается сохранность сообщений при перезагрузке и перезапуске службы, потере подключения к приемнику или сбое в работе самого syslog-ng.

  • Обычная (normal):

    • Высокая производительность.

    • Возможна потеря сообщений в случае сбоя syslog-ng.

Если Automation Controller настроен на передачу журналов во внешний агрегатор, для syslog-ng используются настройки, реализующие следующее поведение:

  • Исходящие сообщения помещаются непосредственно в очередь вывода, если она не заполнена.

  • Если очередь вывода заполнена (количество сообщений в очереди достигло значения mem-buf-length), а параметру reliable присвоено значение no, сообщения помещаются в обычный дисковый буфер.

Если контроллер настроен на передачу журналов во внешний агрегатор с использованием HTTP/TCP/UDP, по умолчанию используются следующие настройки дисковой буферизации:

disk-buffer(
  dir("/var/lib/awx")
  disk-buf-size(1073741824)
  qout-size(1000)
  mem-buf-length(131072)
  reliable(no)
)

Некоторые из указанных настроек можно изменить через API (точка доступа – /api/controller/v2/settings/logging/) или в настройках журналирования:

  • dir – полный путь к локальному каталогу для хранения журналов.

    Параметр API – LOG_AGGREGATOR_MAX_DISK_USAGE_PATH.

  • disk-buf-size – размер дискового буфера в байтах.

    Параметр API – LOG_AGGREGATOR_ACTION_MAX_DISK_USAGE_GB.

    Важно

    При изменении через API значение этого параметра необходимо указывать в гигабайтах.

  • mem-buf-length – максимальное количество сообщений в очереди.

    Параметр API – LOG_AGGREGATOR_ACTION_QUEUE_SIZE.

Ротация журналов и дисковое пространство#

Помимо пересылки во внешние приемники, компоненты Astra Automation ведут локальные журналы на каждом узле платформы. Их суммарный объем значителен даже без выполнения заданий, поэтому при планировании дискового пространства и эксплуатации необходимо учитывать скорость роста журналов и настройки их ротации.

Объем журналов#

Ниже приведена измеренная скорость роста журналов для базовой топологии в режиме простоя, без выполнения заданий. Под нагрузкой объем возрастает кратно.

Узел

Рост, МБ/сут

Основные источники

Узел базы данных

≈ 146

Журнал аудита PostgreSQL

Узел Event-Driven Automation

≈ 39

Системный журнал и daemon.log, журнал аудита

Узел шлюза

≈ 22

gateway.log, журнал доступа nginx, envoy.log

Управляющий узел

≈ 17

Журнал аудита, awx-uwsgi.log

Исполняющий узел

≈ 12

Журнал аудита

Узел Private Automation Hub

≈ 4,5

Журнал аудита, журнал доступа nginx, galaxy_api_access.log

Вся базовая топология

≈ 240

Наибольший объем приходится на журнал аудита PostgreSQL. Он расположен вне каталога /var/log/ – в каталоге /var/lib/postgresql/15/main/pg_log/, поэтому при контроле только каталога /var/log/ остается незамеченным.

Ротация по умолчанию#

Ротация локальных журналов выполняется утилитой logrotate. Правила, устанавливаемые платформой, по умолчанию срабатывают по времени (daily) и не ограничивают размер файла. Это необходимо учитывать: ротация по времени не защищает от резкого роста журнала между запусками – в пределах суток файл может вырасти до любого размера.

Запуск logrotate настроен ежечасно (/etc/cron.hourly/logrotate), однако для правил без ограничения по размеру ежечасные запуски ротацию не выполняют – она срабатывает только в правилах с параметром size или maxsize.

Кроме того, часть журналов не покрыта правилами ротации, устанавливаемыми платформой, и требует ручной настройки:

Узел

Журналы без ротации по умолчанию

Узел шлюза

/var/log/astra-automation/gateway/ (в том числе gateway.log, envoy.log, grpc_server.log), /var/log/supervisor/

Узел Private Automation Hub

/var/log/galaxy_api_access.log

Управляющий узел, узел Private Automation Hub, узел шлюза

/var/log/redis/redis.log

Управляющий узел

/var/log/tower/ws_heartbeat.log, /var/log/tower/tower_rbac_migrations.log

Узел базы данных

Каталог pg_log/ – параметр PostgreSQL log_rotation_size равен 0 (без ограничения размера)

Рекомендации#

Для предотвращения переполнения диска рекомендуется:

  • выделять под каталог /var/log/ отдельный том (volume), а на узле базы данных – отдельный том и под каталог pg_log/;

  • не размещать журналы на общем небольшом разделе с корневой файловой системой;

  • добавлять ограничение по размеру (size или maxsize) в правила logrotate для журналов платформы, а для журналов без правил ротации – создавать собственные правила logrotate;

  • при необходимости снижать детализацию журналов, например аудита подключений PostgreSQL;

  • контролировать свободное место на узлах платформы штатными средствами мониторинга.

Если на узле заканчивается свободное место (No space left on device), освободите место или расширьте раздел, после чего при необходимости перезапустите затронутые службы компонента.

Агрегаторы#

Automation Controller может быть настроен на передачу журналов в следующие внешние агрегаторы:

В агрегатор передаются только сообщения, важность которых выше или равна указанной (в порядке возрастания важности):

  • DEBUG – все сообщения журнала;

  • INFO – информационные сообщения;

  • WARNING – предупреждения;

  • ERROR – информация об ошибках;

  • CRITICAL – информация о критических событиях.

По умолчанию в агрегатор передаются записи, полученные от всех внутренних регистраторов Automation Controller:

  • awx – общие журналы сервера;

  • activity_stream – запись изменений объектов в Automation Controller;

  • job_events – данные, возвращаемые модулем обратного вызова Ansible;

  • system_tracking – данные о фактах, собранные модулем setup;

  • broadcast_websocket – данные об отправленных сообщениях по WebSocket;

  • job_lifecycle – события обработки заданий.

Обработка журналов с помощью Logstash и OpenSearch#

Программное обеспечение Logstash используется для приема, преобразования и доставки записей журналов различных форматов. Поддержка форматов реализуется расширениями. Для хранения и поиска данных используются внешние системы, например OpenSearch или Elasticsearch, для визуализации – OpenSearch Dashboards или Kibana.

Logstash может одновременно обрабатывать данные, полученные от разных поставщиков.

../../../_images/logstash-opensearch-scheme-light.svg ../../../_images/logstash-opensearch-scheme-dark.svg

Для настройки Automation Controller на передачу журналов в систему OpenSearch через агрегатор Logstash выполните следующие действия:

  1. В настройках журналирования задайте значения следующих параметров:

    • Агрегатор протоколирования: http://10.10.10.10:5050.

    • Тип агрегатора ведения журнала: logstash.

    • Имя пользователя агрегатора ведения журнала: aac.

    • Пароль/токен агрегатора ведения журнала: пароль для подключения к Logstash.

    • Протокол ведения журналов: HTTPS/HTTP.

    • Включить/отключить проверку сертификата HTTPS: выкл.

    • Порог уровня агрегатора ведения журнала: INFO.

    • Включить внешнее ведение журнала: вкл.

    ../../../_images/aac-logstash-settings.png
  2. Установите Logstash согласно инструкции.

  3. Для работы с Automation Controller отредактируйте файл конфигурации агрегатора logstash.conf:

    input {
      http {
        port => <listen_port>
        user => <username>
        password => "<password>"
        codec => json {
          charset => "UTF-8"
        }
      }
    }
    
    output {
      opensearch {
        hosts => ["https://<opensearch_host>:<opensearch_port>"]
        index => "<aac-index-name>-%{+YYYY.MM.dd}"
        user => "<opensearch_user>"
        password => "<opensearch_password>"
        ssl => true
        ssl_certificate_verification => false
      }
    }
    
    input {
      http {
        port => <listen_port>
        user => <username>
        password => "<password>"
        codec => json {
          charset => "UTF-8"
        }
      }
    }
    
    filter {
      json {
        source => "message"
      }
    }
    
    output {
      opensearch {
        hosts => ["https://<opensearch_host>:<opensearch_port>"]
        index => "<aac-index-name>-%{+YYYY.MM.dd}"
        user => "<opensearch_user>"
        password => "<opensearch_password>"
        ssl => true
        ssl_certificate_verification => false
      }
    }
    

    Здесь:

    • listen_port – порт, на котором Logstash будет ожидать соединение;

    • username – название учетной записи для подключения к серверу Logstash;

    • password – пароль для подключения к серверу Logstash;

    • opensearch_host – IP-адрес или FQDN сервера OpenSearch;

    • opensearch_port – порт сервера OpenSearch;

    • opensearch_user – название учетной записи пользователя для подключения к серверу OpenSearch;

    • opensearch_password – пароль для подключения к серверу OpenSearch.

Пример визуализации журналов Automation Controller в режиме Discover:

../../../_images/logging-result-opensearch.png

Обработка журналов с помощью Logstash и Elasticsearch#

Чтобы настроить Automation Controller на передачу журналов в систему Elasticsearch через агрегатор Logstash, в настройках журналирования укажите значения следующих параметров:

  • Агрегатор протоколирования – FQDN сервера Elasticsearch, например, test-elastic.zapto.org.

  • Порт агрегатора протоколирования – порт сервера Elasticsearch, например, 50000.

  • Тип агрегатора ведения журналаlogstash.

  • Протокол ведения журналовTCP.

  • Порог уровня агрегатора ведения журналаINFO.

  • Включить внешнее ведение журнала – вкл.

Пример визуализации журналов контроллера в режиме Stream:

../../../_images/logging-result-elastic.png