Skip to main content

Мониторинг работы сервиса и сбор логов

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

На странице описаны все процессы, которые необходимо поддерживать в рабочем состоянии для полноценной работы сервиса.

Процессы сервиса

Работу MoodRec обеспечивают следующие микропроцессы:

СервисНазначение
vectorsРабота с векторным хранилищем и поиск
transПреобразование описаний товаров в векторные представления
tasksВыполнение отложенных заданий
offersУправление продуктами
gatewayПроксирование HTTP (JSON) → gRPC (Proto)
eventsОбработка событий
catbossРабота с рекомендациями
authАвторизация
audienceУправление аудиториями

Проверка статуса всех сервисов:

bash
moodrec status

Проверка статуса конкретного сервиса:

bash
moodrec status vectors
moodrec status trans
moodrec status tasks
moodrec status offers
moodrec status gateway
moodrec status events
moodrec status catboss
moodrec status auth
moodrec status audience

Если сервис запущен корректно, вывод содержит active (running). Если сервис остановлен — inactive или failed.

Управление конкретным сервисом выполняется отдельно для каждого микропроцесса.

Запуск:

bash
moodrec start vectors

Остановка:

bash
moodrec stop vectors

Перезапуск:

bash
moodrec restart vectors

Аналогично для остальных сервисов:

bash
moodrec start <service>
moodrec stop <service>
moodrec restart <service>

где <service> — один из: vectors, trans, tasks, offers, gateway, events, catboss, auth, audience. После выполнения операций рекомендуется проверить состояние:

bash
moodrec status <service>

Рекомендуется использовать проверку на существование процесса по имени встроенными средствами системы мониторинга либо с помощью pidof.

В обязательном порядке по хосту (или виртуальной машине) должна собираться такая информация:

  • потребление и количество свободного ОЗУ;
  • потребление и количество свободного времени CPU;
  • количество свободного места и информация по утилизации дисков (скорость, задержки, SMART);
  • количество открытых файлов и соединений.

Базы данных и сервисы

СервисIP адрес по умолчаниюПортВажностьДоступУведомление
Интерфейс платформы MoodRec0.0.0.0443 (HTTPS)ЧрезвычайнаяПубличный или через VPN / allowlistНедоступен веб-интерфейс
Публичный API (события, рекомендации, импорт)0.0.0.0443 (HTTPS)ЧрезвычайнаяПубличный или в сетевом периметре клиентаНедоступны API-методы
MongoDB127.0.0.127017 (TCP)ЧрезвычайнаяТолько из внутренней сетиНевозможно установить TCP-соединение
ClickHouse127.0.0.19000 (TCP)ЧрезвычайнаяТолько из внутренней сетиНевозможно установить TCP-соединение
Apache Kafka127.0.0.19092, 9093 (TCP)ЧрезвычайнаяТолько из внутренней сетиНевозможно установить TCP-соединение
KV Rocks127.0.0.16666 (TCP)ЧрезвычайнаяТолько из внутренней сетиНевозможно установить TCP-соединение
Сервис работы с продуктами127.0.0.11111 (TCP)ВысокаяТолько из внутренней сетиСервис недоступен по TCP
Сервис управления задачами127.0.0.12222 (TCP)ВысокаяТолько из внутренней сетиСервис недоступен по TCP
Сервис расчёта продуктовых представлений127.0.0.13333 (TCP)ВысокаяТолько из внутренней сетиСервис недоступен по TCP
Сервис обращений к векторному индексу127.0.0.14444 (TCP)ВысокаяТолько из внутренней сетиСервис недоступен по TCP
Сервис выдачи рекомендаций127.0.0.15555 (TCP)ЧрезвычайнаяТолько из внутренней сетиСервис недоступен по TCP
Сервис аудиторий127.0.0.17777 (TCP)ВысокаяТолько из внутренней сетиСервис недоступен по TCP
Сервис работы с пользователями127.0.0.18888 (TCP)ВысокаяТолько из внутренней сетиСервис недоступен по TCP
Сервис обработки событий127.0.0.19999 (TCP)ЧрезвычайнаяТолько из внутренней сетиСервис недоступен по TCP
SMTP / SMTPS (оповещения)внешний SMTP-сервер25 или 465СредняяИсходящее соединение к SMTP-провайдеруНевозможно установить соединение с SMTP

Дополнительно по каждому процессу

Можно собирать дополнительные данные: потребление памяти, количество открытых файлов и соединений, использование CPU и т.д. Пример — в разделе «Диагностика проблем», блок «Сбор информации для запроса в поддержку».

Процессорное время

CPU time: https://en.wikipedia.org/wiki/CPU_time

Тип метрикиОписаниеВажностьУведомление
CPU system timeИспользование CPU процессом в процентах (system)Информация-
CPU iowait timeИспользование CPU процессом в процентах (iowait)Высокая> 15% * количество ядер CPU
CPU user timeИспользование CPU процессом в процентах (user)Информация-
CPU utilizationИспользование CPU процессом в процентах (total)Высокая> 50% * количество ядер CPU

Память

RSS: https://en.wikipedia.org/wiki/Resident_set_size SWAP: https://en.wikipedia.org/wiki/Paging#Unix_and_Unix-like_systems

Тип метрикиОписаниеВажностьУведомление
RSS (resident set size)Память процесса (RSS)Высокая> 20% от общего количества памяти
SWAPИспользование SWAPВысокая> 5% от общего объема SWAP

Сеть

Рекомендуется мониторить количество соединений по каждому состоянию: https://en.wikipedia.org/wiki/Transmission_Control_Protocol#Protocol_operation

Тип метрикиОписаниеВажностьУведомление
CLOSEЗакрыт. Сокет не используется.Информация-
CLOSE_WAITУдаленная сторона отключилась; ожидание закрытия сокета.СредняяКоличество соединений > 2500
CLOSINGСокет закрыт, затем удаленная сторона отключилась; ожидание подтверждения.Информация-
ESTABLISHEDСоединение установлено.СредняяКоличество соединений > 5000
FIN_WAIT1Сокет закрыт; отключение соединения.Информация-
FIN_WAIT2Сокет закрыт; ожидание отключения удаленной стороны.Информация-
LAST_ACKУдаленная сторона отключилась, затем сокет закрыт; ожидание подтверждения.Информация-
LISTENОжидает входящих соединений.Информация-
SYN_RECVИдет начальная синхронизация соединения.Информация-
SYN_SENTАктивно пытается установить соединение.ВысокаяКоличество соединений > 5000
TIME_WAITСокет закрыт, но ожидает пакеты в сети для обработки.ВысокаяКоличество соединений > 5000

Сбор и хранение логов приложения

Сбор логов сервиса может быть организован разными способами, в зависимости от инфраструктуры. Ниже описана типовая схема, в которой используется связка systemd — journald — Filebeat — Logstash — OpenSearch.

Архитектура хранения и обработки

Логи приложения хранятся в OpenSearch — это основное хранилище для долгосрочного хранения и индексации.

Для поиска, анализа и построения дашбордов используется OpenSearch Dashboards.

Сбор логов с серверов, контейнеров или подов выполняется агентом Filebeat.

Обработка, парсинг, обогащение и нормализация логов выполняется в Logstash.

Типовая цепочка движения логов:

text
Приложение — journald — Filebeat — Logstash — OpenSearch — OpenSearch Dashboards

Все компоненты рекомендуется использовать в совместимых версиях (желательно в рамках одной ветки OpenSearch или OSS-совместимых релизов).

Итоговый результат может выглядеть так:


Логирование сервиса через systemd

Для каждого бинарного файла микросервиса скрипт-установщик создаёт unit-файл systemd. Пример:

ini
[Unit]
Description=moodrec-offers
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
ExecStart=/opt/moodrec/bin/offers
StandardOutput=journal
StandardError=journal
SyslogIdentifier=moodrec-offers
Restart=always
RestartSec=2
KillSignal=SIGTERM
KillMode=control-group
TimeoutStopSec=20

[Install]
WantedBy=multi-user.target

Сервис пишет логи в journald через stdout и stderr.


Чтение логов из journald через Filebeat

Filebeat может напрямую читать события из journald и отправлять их в Logstash.

Пример конфигурации:

yaml
filebeat.inputs:
- type: journald
id: moodrec-journald
seek: cursor
include_matches:
- "_SYSTEMD_UNIT=moodrec-offers.service"

processors:
- add_host_metadata: {}
- rename:
fields:
- from: "systemd.unit"
to: "service.name"
ignore_missing: true
fail_on_error: false

output.logstash:
hosts: ["logstash:5044"]

logging.level: info
logging.to_files: true
logging.files:
path: /var/log/filebeat
name: filebeat
keepfiles: 7

В этой схеме:

  • Filebeat считывает записи из journald в реальном времени.
  • Logstash принимает события, разбирает строки логов (grok, dissect и другие фильтры), добавляет метаданные (application, environment, pod_name и др.), нормализует формат и отправляет данные в OpenSearch.
  • OpenSearch индексирует события и хранит их.
  • OpenSearch Dashboards используется для поиска и визуализации логов.