Elastalert не оповещает по электронной почте?
Я пытаюсь использовать простое правило, используя Elastalert, и оно, кажется, не работает должным образом. Мое правило:
name: termrule
type: Any
index: logstash-*
fields:
- "ip"
filter:
- term:
_type: "log"
- term:
agentip: 1.2.3.4
alert:
email:
- "myemail@company.com "
##remote mailserver
smtp_host:
- "remote mailserver_ip"
Мой config.yaml
es_host: 1.2.3.4
es_port: 9200
rules_folder: rules
run_every:
minutes: 1
buffer_time:
minutes: 15
writeback_index: elastalert_status
alert_time_limit:
days: 2
es_conn_timeout: 20
журнал отладки:
INFO:elastalert:Note: In debug mode, alerts will be logged to console but NOT actually sent. To send them, use --verbose.
Traceback (most recent call last):
File "/usr/lib/python2.7/runpy.py", line 162, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
exec code in run_globals
File "/home/george/elastalert/elastalert/elastalert.py", line 1408, in <module>
sys.exit(main(sys.argv[1:]))
File "/home/george/elastalert/elastalert/elastalert.py", line 1403, in main
client = ElastAlerter(args)
File "/home/george/elastalert/elastalert/elastalert.py", line 94, in __init__
self.conf = load_rules(self.args)
File "elastalert/config.py", line 400, in load_rules
raise EAException('Error loading file %s: %s' % (rule_file, e))
elastalert.util.EAException: Error loading file ./rules/term_rule.yaml: Invalid Rule: termrule
{'index': 'logstash-*', 'name': 'termrule', 'fields': ['agentip'], 'smtp_host': ['X.X.X.X'], 'alert': ['email'], 'filter': [{'term': {'_type': 'log'}}, {'term': {'agentip': '1.2.3.4'}}], 'rule_file': './rules/term_rule.yaml', 'type': 'Any', 'email': ['myemail@company.com']} is not valid under any of the given schemas
Но когда я бегу с командой
#sudo python -m elastalert.elastalert --config ./config.yaml --rule ./rules/term_rule.yaml --es_debug_trace ./elastalert.log
Я только что выполнил запрос Kibana, чтобы убедиться, что мои фильтры вернули 5 обращений, но мой файл elastalert.log пуст, и я не получил оповещения по электронной почте. Если правило "любое", то о любых попаданиях запроса следует предупреждать, но как Вы можете видеть, что это не так. Есть идеи?
Любая помощь приветствуется. Спасибо
1 ответ
YAML чувствителен к пробелам. Я не уверен, что копирование и вставка пошли не так, но некоторые поля выглядят смещенными:
alert:
email:
- "myemail@company.com
Я бы поменял на
alert:
- "email"
email:
- "myemail@company.com"
Также у вас есть
smtp_host:
- "remote mailserver_ip"
Который конвертируется в массив в вашем сообщении об ошибке. Я не думаю, что у вас может быть список SMTP-реле, поэтому он может не соответствовать схеме, которая может с этим справиться. Попробуйте изменить это на
smtp_host: "remote mailserver_ip"