Скрипты Проверок
Общие сведения о скриптах Проверок
Скрипты Проверок – это файлы, содержащие пользовательскую логику Проверки работоспособности сервиса или узла.
Для создания скрипта Проверки используются файлы в формате:
-
.py– для python-скрипта; -
.sh– для bash-скрипта.
Файлы скриптов Проверок располагаются в каталоге /var/lib/tdc/lbscripts/hc/.
Скрипты Проверок позволяют выполнять Проверки по протоколам:
-
HTTP/HTTPS;
-
TCP.
Параметры Проверки передаются скрипту в качестве аргумента командной
строки в формате JSON, и обязательно содержат поля:
-
source-ip; -
target-ip; -
target-port.
| Для каждой выполняемой Проверки запускается отдельный процесс с собственной копией скрипта Проверки. Большое количество таких процессов может негативно сказаться на производительности системы. |
Пример использования python-скрипта:
| Описание полей приведено в таблице (см. Описание полей python-скрипта Проверки). |
import requests
import sys
import json
config = json.loads(sys.argv[1])
target_ip = config["target-ip"]
target_port = config["target-port"]
response = requests.get(f"http://{target_ip}:{target_port}", timeout=5)
response.raise_for_status()
sys.exit(0)
| Поле | Описание |
|---|---|
|
Импортирует модуль |
|
Импортирует модуль |
|
Импортирует модуль |
|
Читает первый аргумент командной строки, содержащий строку в формате JSON, и преобразует его в объект Python |
|
Извлекает из объекта |
|
Извлекает из объекта |
|
Выполняет HTTP-запрос по адресу, составленному из значений параметров |
|
Генерирует исключение, если код ответа сервера не входит в диапазон значений 200 – 299 |
|
Завершает работу скрипта с кодом |
Проверку с использованием python-скрипта можно упростить, используя логику обработки аргументов командной строки в конфигурационном файле config.py.
Файл config.py должен располагаться в каталоге /var/lib/tdc/lbscripts/hc/.
|
Пример содержимого файла config.py :
Описание полей приведено в таблице (см. Описание полей конфигурационного файла config.py).
|
import json
class Config:
source_ip: str
target_ip: str
target_port: str
def __init__(self, argv):
if len(argv) != 2:
raise ValueError(f"List must be the length of two, but has {len(argv)} elements")
try:
config = json.loads(argv[1])
self.source_ip = config.get("source-ip")
self.target_ip = config.get("target-ip")
self.target_port = config.get("target-port")
except json.JSONDecodeError:
raise TypeError("List's second element must contain valid JSON object")
| Поле | Описание |
|---|---|
|
Импортирует модуль |
|
Задает класс |
|
Атрибут для хранения IP-адреса источника запроса |
|
Атрибут для хранения IP-адреса назначения |
|
Атрибут для хранения порта назначения |
|
Конструктор класса, принимающий список аргументов командной строки |
|
Проверяет, что список аргументов содержит ровно два элемента |
|
Генерирует исключение, если количество аргументов не равно двум |
|
Читает второй аргумент командной строки, содержащий строку в формате JSON, и преобразует его в объект Python |
|
Сохраняет значение поля |
|
Сохраняет значение поля |
|
Сохраняет значение поля |
|
Обрабатывает ошибку, если второй аргумент не является корректной JSON-строкой |
|
Генерирует исключение, если аргумент не содержит корректный JSON-объект |
Пример python-скрипта с использованием конфигурационного файла config.py:
Описание полей приведено в таблице (см. Описание полей python-скрипта с использованием файла config.py).
|
import sys
import requests
import config # Импорт файла с классом Config
def check_http(target_ip, target_port):
url = f"http://{target_ip}:{target_port}"
try:
response = requests.head(url, timeout=3)
print("HEAD: OK")
response = requests.get(url, timeout=3)
print("GET: OK")
return True
except requests.exceptions.RequestException:
print("NOT OK")
return False
config = config.Config(sys.argv) # Использование класса
source_ip = config.source_ip # Получение source-ip
target_ip = config.target_ip # Получение target-ip
target_port = config.target_port # Получение target-port
print(f"Config:")
print(f" Source IP: {source_ip}")
print(f" Target IP: {target_ip}")
print(f" Target Port: {target_port}")
print(f"Checking HTTP server at {target_ip}:{target_port}...", end=" ")
if not check_http(target_ip, target_port):
sys.exit(1)
sys.exit(0)
| Поле | Описание |
|---|---|
|
Импортирует модуль |
|
Импортирует модуль |
|
Импортирует модуль |
|
Определяет функцию |
|
Формирует URL-адрес из значений параметров |
|
Выполняет HEAD-запрос по указанному адресу с временем ожидания 3 секунды |
|
Выводит сообщение об успешном выполнении HEAD-запроса |
|
Выполняет GET-запрос по указанному адресу с временем ожидания 3 секунды |
|
Выводит сообщение об успешном выполнении GET-запроса |
|
Возвращает значение |
|
Перехватывает исключения, возникающие при выполнении HTTP-запросов |
|
Выводит сообщение о неуспешной проверке |
|
Возвращает значение |
|
Создает объект класса |
|
Получает значение параметра |
|
Получает значение параметра |
|
Получает значение параметра |
|
Выводит заголовок конфигурации |
|
Выводит IP-адрес источника запроса |
|
Выводит IP-адрес назначения |
|
Выводит порт назначения Проверки |
|
Выводит сообщение о начале HTTP-Проверки |
|
Проверяет результат выполнения функции |
|
Завершает работу скрипта с кодом ошибки |
|
Завершает работу скрипта с кодом |
Пример использования bash-скрипта:
| Описание полей приведено в таблице (см. Описание полей bash-скрипта Проверки). |
#!/bin/bash
json_input="$1"
target_ip=$(jq -r '.["target-ip"]' <<< "$json_input")
target_port=$(jq -r '.["target-port"]' <<< "$json_input")
curl -s -o /dev/null "http://${target_ip}:${target_port}"
exit $?
| Поле | Описание |
|---|---|
|
Сохраняет первый аргумент командной строки в переменную |
|
Извлекает значение параметра |
|
Извлекает значение параметра |
|
Выполняет HTTP-запрос с использованием утилиты |
|
Завершает выполнение скрипта с кодом ответа, который вернула утилита |
Добавление скрипта Проверки
Добавление скрипта Проверки выполняется одним из способов:
-
из интерфейса командной строки Termidesk Connect;
-
из веб-интерфейса Termidesk Connect (см.подраздел Веб. Проверки).
Пример команды добавления скрипта Проверки:
set health-check id <имя> USER script <имя_файла_скрипта>
Файл должен располагаться в каталоге /var/lib/tdc/lbscripts/hc/.
Для каждой выполняемой Проверки запускается отдельный процесс с собственной копией скрипта Проверки. Большое количество таких процессов может негативно сказаться на производительности системы.
|
Примеры bash-скриптов для Проверок
Примеры приведены в таблице (см. Примеры bash-скриптов для выполнения Проверки).
| Скрипт | Описание |
|---|---|
|
HTTP/HTTPS-Проверка c использованием утилит |
|
TCP-Проверка c использованием утилит |
Примеры python-скриптов для Проверок
Примеры приведены в таблице (см. Примеры python-скриптов для выполнения Проверки).
| Скрипт | Описание |
|---|---|
|
HTTP/HTTPS-Проверка |
|
TCP-Проверка |