Общие сведения по проверке состояния компонентовДля отслеживания состояния компонентов Termidesk и обращения к ним для выполнения проверок состояния (health check) используется API-запрос |
Начальная спецификация схемы HealthCheck API в формате OpenAPI соответствует описанию:
openapi: 3.0.3
info:
title: Termidesk health check api schema
version: 0.1
paths:
/api/health:
get:
responses:
'200':
description: Successful Response
content:
application/json:
schema:
type: object
properties:
status:
type: string
enum: [pass, warn, fail]
example: fail
description: "Состояние компонента"
version:
type: string
example: 3.3
description: "Версия компонента"
description:
type: string
example: termidesk-celery
description: "Описание компонента"
output:
type: string
example: "django.db.utils.OperationalError: FATAL: password authentication failed for user 'termidesk'"
description: "Описание ошибки (если есть)"
required:
- status
'401':
description: Authorization information is missing or invalid |
Базовый URL для API: /api/health.
Тип контента: application/json.
Для каждого компонента Termidesk механизм проверки состояния доступен на порте, заданном в конфигурационном файле:
Для компонента «Универсальный диспетчер» порт определен настройками веб-сервера (по умолчанию используется 443). |
/etc/opt/termidesk-vdi/termidesk.conf, в параметрах CELERY_BEAT_HEALTH_CHECK_PORT (по умолчанию используется 8103), CELERY_WORKER_HEALTH_CHECK_PORT (по умолчанию используется 8104);/etc/termidesk/gateway.yaml, в параметре ${mgtServerPort:8102} (по умолчанию используется 8102).Для исключения злоупотреблением частыми вызовами API, способными создать нагрузку на систему, доступ к API-запросу контролируется отдельным токеном. Значение токена задается конфигурационным файлом:
/etc/opt/termidesk-vdi/termidesk.conf, в параметре HEALTH_CHECK_ACCESS_KEY;/etc/termidesk/gateway.yaml, в параметре token: ${healthCheckAccessKey}.Пример HEALTH_CHECK_ACCESS_KEY:
HEALTH_CHECK_ACCESS_KEY = "9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b" |
Пример token: ${healthCheckAccessKey}:
${healthCheckAccessKey:9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b} |
Процесс автоматического опроса состояния компонентов осуществляется следующим образом:
termidesk-celery-beat (реализована в компоненте «Менеджер рабочих мест») с периодичностью в 60 секунд забирает из очереди RabbitMQ список всех узлов компонентов Termidesk;termidesk-celery-beat создает задачу на опрос состояния;termidesk-celery-worker выполняет задачу на опрос состояния узлов. Полученные результаты служба termidesk-celery-worker записывает в БД.Следующие порты должны быть доступны с узла «Менеджер рабочих мест»:
|
В случае если используются несколько узлов «Менеджера рабочих мест», опрос выполняет узел, первый забравший очередь из RabbitMQ. Опрос инициируется по времени:
|
Состояние компонента «Универсальный диспетчер»При распределенной установке Termidesk экземпляры компонента «Универсальный диспетчер» могут быть установлены на нескольких узлах. Доступ к узлам организуется через балансировщик нагрузки, но для механизма проверок состояния нужно обращаться к каждому узлу напрямую. |
Компонент изначально задействован для работы по протоколу HTTP, поэтому механизм проверки состояния реализуется отдельными вызовами REST API.
Пример команды проверки состояния компонента через утилиту curl:
curl --insecure -v -s -X 'GET' "https://${HOSTNAME}:443/api/health/check" -H 'accept: application/json' -H "Authorization: Token ${HEALTH_CHECK_ACCESS_KEY}" |
Ключ |
Состояние компонента «Шлюз»При распределенной установке Termidesk экземпляры компонента «Шлюз» могут быть установлены на нескольких узлах. Доступ к узлам организуется через балансировщик нагрузки, но для механизма проверок состояния нужно обращаться к каждому узлу напрямую. |
Для исключения злоупотреблением частыми вызовами API, способными создать нагрузку на систему, доступ к API-запросу компонента «Шлюз» termidesk-gateway контролируется отдельным токеном. Значение токена задается при запуске службы «Шлюза» в параметре token: ${healthCheckAccessKey}.
Пример команды проверки состояния компонента через утилиту curl для компонента «Шлюз» termidesk-gateway (предполагается, что «Шлюз» настроен для работы по защищенному соединению):
curl --insecure -v -s -X 'GET' "https://${HOSTNAME}:8102/api/health" -H 'accept: application/json' -H "Authorization: Token ${healthCheckAccessKey}" |
Состояние компонента «Менеджер рабочих мест»При распределенной установке Termidesk экземпляры компонента «Менеджер рабочих мест» могут быть установлены на нескольких узлах. |
Для использования механизма проверки состояния компонента необходимо в конфигурационном файле /etc/opt/termidesk-vdi/termidesk.conf раскомментировать строки параметров:
termidesk-celery-beat: CELERY_BEAT_CHECK_IP, CELERY_BEAT_HEALTH_CHECK_PORT, HEALTH_CHECK_CERT, HEALTH_CHECK_KEY. Для параметров HEALTH_CHECK_CERT, HEALTH_CHECK_KEY нужно указать путь к сертификату и ключу, используемых для защищенного подключения, и выполнить перезапуск служб Termidesk;termidesk-celery-worker: CELERY_WORKER_CHECK_IP, CELERY_WORKER_HEALTH_CHECK_PORT, HEALTH_CHECK_CERT, HEALTH_CHECK_KEY. Для параметров HEALTH_CHECK_CERT, HEALTH_CHECK_KEY нужно указать путь к сертификату и ключу, используемых для защищенного подключения, и выполнить перезапуск служб Termidesk.Пример задания значений:
CELERY_BEAT_HEALTH_CHECK_PORT=8103 CELERY_BEAT_HEALTH_CHECK_IP='0.0.0.0' CELERY_WORKER_HEALTH_CHECK_PORT=8104 CELERY_WORKER_HEALTH_CHECK_IP='0.0.0.0' HEALTH_CHECK_CERT=/etc/opt/termidesk-vdi/healthcheck.pem HEALTH_CHECK_KEY=/etc/opt/termidesk-vdi/healthcheck-decrypted.key |
Пример команды проверки состояния компонента «Менеджер рабочих мест» через утилиту curl (предполагается, что «Менеджер рабочих мест» настроен для работы по защищенному соединению):
curl --insecure -v -s -X 'GET' "${HOSTNAME}:8103/api/health/check" -H 'accept: application/json' -H "Authorization: Token ${HEALTH_CHECK_ACCESS_KEY}" |