Общие сведения по проверке состояния компонентов
Для отслеживания состояния компонентов Termidesk и обращения к ним для выполнения проверок состояния здоровья (health check) используется API-запрос /api/health.
Начальная спецификация схемы 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-taskman
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.
/etc/opt/termidesk-vdi/termidesk.conf. Порт можно переопределить в этом же файле. Для исключения злоупотреблением частыми вызовами API, способными создать нагрузку на систему, доступ к API-запросу контролируется отдельным токеном. Значение токена задается конфигурационным файлом /etc/opt/termidesk-vdi/termidesk.conf в переменной HEALTH_CHECK_ACCESS_KEY.
Пример:
HEALTH_CHECK_ACCESS_KEY = "9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b"
Состояние компонента «Универсальный диспетчер»
При распределенной установке Termidesk экземпляры компонента «Универсальный диспетчер» могут быть установлены на нескольких узлах. Доступ к узлам организуется через балансировщик трафика, но для механизма проверок состояния нужно обращаться к каждому узлу напрямую.
Компонент изначально задействован для работы по протоколу HTTP, поэтому механизм проверки состояния реализуется отдельными вызовами REST API.
Пример команды проверки состояния компонента через утилиту curl:
curl -v -s -X 'GET' "${HOSTNAME}:${HEALTH_PORT}/api/health" -H 'accept: application/json' -H "Authorization: Token ${HEALTH_CHECK_ACCESS_KEY}" --fail -w "\n%{http_code}"
Состояние компонента «Шлюз»
При распределенной установке Termidesk экземпляры компонента «Шлюз» могут быть установлены на нескольких узлах. Доступ к узлам организуется через балансировщик трафика, но для механизма проверок состояния нужно обращаться к каждому узлу напрямую.
Пример команды проверки состояния компонента через утилиту curl:
curl -I -X 'GET' -H "Accept: text/plain" http://<IP-адрес_шлюза>:5099/info
Пример ответа для работоспособного компонента:
HTTP/1.1 200 OK Date: Tue, 28 Nov 2023 07:37:51 GMT uWebSockets: 20 Content-Length: 314
Код 200 в ответе на API-запрос свидетельствует о работоспособности компонента «Шлюз». Отсутствие ответа говорит о том, что компонент не работает. Данное правило необходимо добавить на балансировщике трафика.
Состояние компонента «Менеджер рабочих мест»
При распределенной установке Termidesk экземпляры компонента «Менеджер рабочих мест» могут быть установлены на нескольких узлах, но активен должен быть только один из них. Все остальные компоненты являются резервными и, по умолчанию, находятся в состоянии «Passive».
Для использования механизма проверки состояния компонента необходимо в конфигурационном файле /etc/opt/termidesk-vdi/termidesk.conf раскомментировать строки параметров TASKMAN_HEALTH_CHECK_PORT, TASKMAN_HEALTH_CHECK_CERT,
TASKMAN_HEALTH_CHECK_KEY. Для параметров TASKMAN_HEALTH_CHECK_CERT, TASKMAN_HEALTH_CHECK_KEY нужно указать путь к сертификату и ключу, используемых для защищенного подключения, и выполнить перезапуск служб Termidesk.
Пример задания значений:
TASKMAN_HEALTH_CHECK_PORT=8100 TASKMAN_HEALTH_CHECK_CERT=/etc/opt/termidesk-vdi/taskman-healthcheck.pem TASKMAN_HEALTH_CHECK_KEY=/etc/opt/termidesk-vdi/taskman-healthcheck-decrypted.key
Пример команды проверки состояния компонента через утилиту curl:
curl -v -s -X 'GET' "${HOSTNAME}:8100/api/health" -H 'accept: application/json' -H "Authorization: Token ${HEALTH_CHECK_ACCESS_KEY}" --fail -w "\n%{http_code}"