Принцип работы
Okmeter построен на клиент-серверной модели взаимодействия, когда все мониторинговые данные отправляются клиентами на сервер (push-модель доставки данных). Клиентом могут быть как агенты Okmeter (Okagent), устанавливаемый на серверы, так и инсталляции Prometheus, VictoriaMetrics и иное ПО, которое поддерживает отправку метрик по протоколу Remote Write. Сервером (Okserver) в данном случае выступает централизованная инсталляция, состоящая из хранилища метрик, пользовательских интерфейсов к нему, а также иных компонентов мониторинга.
Компоненты системы:
- Okagent – агент для сбора метрик, устанавливаемый на серверы;
- Okserver состоит из:
- Модуля хранения данных, основанном на Grafana Mimir и CEPH/Minio, куда поступают мониторинговые данные от агентов;
- Модуля мониторинга, для проверки условий триггеров и отправки нотификаций;
- Модуля интерфейса мониторинга, в котором отображаются графики и дашборды;
- Модуля интерфейса управления хранилищем и просмотра метрик из внешних источников (Prometheus, VictoriaMetrics).
Все компоненты системы спроектированы таким образом, чтобы иметь возможность горизонтально масштабироваться под любые нагрузки и требования по глубине хранения данных.
Okagent
Okagent – это бинарный файл написанный на языке Go, который может быть запущен как systemd служба, как Docker container или как DaemonSet в Kubernetes кластере. Okagent раз в минуту производит сбор базовых метрик по утилизации ресурсов на сервере, а также метрик по всем запущенным процессам. Так же, исходя из списка запущенных процессов, Okagent производит поиск прикладного программного обеспечения и в случае обнаружения прикладного ПО, с которым Okagent умеет взаимодействовать (список поддерживаемых интеграция доступен в соответствующем разделе документации) начинает сбор метрик также с обнаруженного ПО.
Okagent написан таким образом, что он одинаково эффективно взаимодействует с процессами (приложениями) запущенными как непосредственно на хосте, так и в Docker container, и в Kubernetes Pod.
Для расширения списка собираемых метрик могут быть использованы дополнительные плагины, которые позволяют собирать произвольные метрики. Полный список доступных плагинов и способ их настройки доступен в соответствующем разделе документации.
Протокол доставки метрик в Okserver обладает высокой степенью сжатия, что позволяет существенно сократить объем сетевого трафика между Okagent и Okserver.
В Okagent реализован механизм гарантированной доставки данных. В случае недоступности Okserver (например, в случае потери сетевой связности между Okagent и Okserver), Okagent формирует spool-файлы и записывает в них все метрик, которые не удалось отправить. После возобновления сетевой доступности, Okagent производит отправку метрик из spool файла. Отправка производится асинхронно и не влияет на доставку текущих метрик, что позволяет увидеть текущие метрики сразу же после восстановление доступности Okserver. Такой механизм позволяет Okagent сохранять мониторинговые данные в течение нескольких суток, пока сетевая связность до Okserver не восстановится.
Обновление
Okagent раз в 15 минут обращается к Okserver и запрашивает доступную версию Okagent. Ответом на данный запрос является манифест в котором указана последняя доступная версия для Okagent и ссылка для скачивания. В случае, если текущая версия Okagent отличается от доступной, происходит скачивание новой версии и ее запуск. На сервере, где запущен Okagent хранятся его последние 5 версий. В случае если в процессе обновления возникли ошибки или новая версия работает не стабильно, то Okagent самостоятельно автоматически откатится на последнюю стабильную (успешно работавшую ранее) версию.
Okserver
Представляет собой набор модулей, запущенных в кластере Kubernetes. Okserver поддерживает два протокола для приема данных: Okprotocol (собственный протокол, который используется в Okagent) и Prometheus Remote Write. Okserver принимает данные от множества источников (Okagent’ов или иного ПО, отправляющего данные по протоколу Remote Write) и сохраняет их в хранилище. Хранилище базируется на Grafana Mimir, при этом данные, после обработки, помещаются в S3 для долговременного хранения. Доступны две реализации S3, в зависимости от требований к нагрузкам: CEPH (radosgw) или Minio. Данные можно визуализировать с помощью двух интерфейсов:
- базовый интерфейс, в котором автоматически появляются все графики и дашборды по найденному ПО;
- интерфейс Grafana, который служит для отображения данных, отправленных по протоколу Remote Write.
Модуль мониторинга производит ежеминутную проверку изменения показателей относительно заданных порогов всех триггеров во всех проектах, затем, при необходимости, отправляются нотификации по преднастроенным каналам связи ответственным лицам или системам.
Аутентификация
Аутентификация отправляемых данных производится на основание API token проекта. Каждый Okagent конфигурируется при установке и отправляет данные используя API-токен одного из проектов.