Работа с реакциями
Модуль реакции позволяет писать обработчики срабатываний директивы корреляции для автоматической реакции на инцидент.
Разрешается использовать любые скриптовые языки, например, Bash
, Python
, Perl
, Lua
, но потребуется установка интерпретатора языка в ОС на узле с komrad-reactor
.
По умолчанию скрипты располагаются в папке /opt/echelon/komrad/komrad-reactor/scripts
. Изменить данную папку возможно в файле конфигурации komrad-reactor. Также в конфигурационном файле можно управлять доступными интерпретаторами скриптов.
Проверяйте права на папку со скриптами, пользователь komrad-reactor
должен иметь права не только на папку, но и на запускаемый скрипт
Логирование исполнения скриптов осуществляется в файлы в папке /var/log/echelon/komrad/komrad-reactor/
, путь можно изменять в файле конфигурации. Имена файлов с логами запуска соответствуют имени файла скрипта с суффиксами .stderr
для ошибок и .stdout
для вывода консоли скрипта.
Пример скрипта реакции на инцидент
Создайте скрипт реакции:
nano /opt/echelon/komrad/komrad-reactor/scripts/react-incident.py
chown -R komrad-reactor:komrad /opt/echelon/komrad/komrad-reactor
chmod u+x /opt/echelon/komrad/komrad-reactor/scripts/react-incident.py
Текст скрипта:
import json
import sys
def load_komrad_reactor_vars():
all_vars = {}
for arg in sys.argv[1:]:
data = json.loads(arg)
for k, v in data.items():
all_vars[k] = v
return all_vars
def react_incident(all_vars):
if all_vars.get('vars.Debug', '') != '':
# вывести все переменные для отладки скрипта
# если в инциденте есть не пустая переменная Debug.
# Вывод производится в файл
# /var/log/echelon/komrad/komrad-reactor/react.py.stdout
print(all_vars)
foo = all_vars.get('vars.Foo', '')
bar = all_vars.get('vars.Bar', '')
tenant_id = all_vars.get('vars.TID', '')
if len(tenant_id) == 0:
return # нет реакции при пустой переменной
with open("reaction-py.txt", "a") as f:
f.write('tenant_id: [%s]: new incident on host=%s port=%s\n' % (tenant_id, foo, bar))
def react():
data = load_komrad_reactor_vars()
react_incident(data)
if __name__ == '__main__':
react()
Включите http-tls (Если ваш скрипт не имеет сертификата):
-
Откройте файл конфигурации komrad-reactor
sudo nano /etc/echelon/komrad/komrad-reactor.yaml
-
В файле измените параметр false на true
http-tls:
disable: true
Выберите скрипт реакции в дополнительных настройках директивы.
При срабатывании директивы в папке /opt/echelon/komrad/komrad-reactor/scripts/
появится новый файл reaction-py.txt
примерно с таким текстом:
tenant_id: [75]: new incident on host=10.0.4.112 port=49000
tenant_id: [75]: new incident on host=10.0.4.112 port=49000