Elastalert Blacklist оповещение об ошибках отслеживания
В нашей ES есть псевдоним для нескольких индексов, которые мы регулярно ищем. Один из покрытых индексов содержит наши журналы DNS.
Если я ищу в Кибане или ES:
Запрос: www.testbad.domain
Я могу получить хиты, независимо от того, ищу ли я в индексах с псевдонимами или в индексе DNS.
Поэтому я создал следующее правило:
# Test alert to check function
use_ssl: False
es_username: me
es_password: 12345
type: blacklist
- "www.testbad.domain"
- "!file /opt/elastalert/black_lists/bad_domains.txt"
index: alias-*
name: Detect-bad-domains
compare_key: Query
ignore_null: true
alert:
- command
command: send_alert.sh
Но когда я проверяю предупреждение, я получаю следующее:
Successfully loaded Detect-bad-domains
Got 12345325 hits from the last 1 day
Available terms in first hit: <list of terms which does NOT include Query>
Warning: compare key %s is either missing or null!
Included term Query may be missing or null
Traceback (most recent call last):
File "/usr/bin/elastalert-test-rule", line 11 in <module>
load_entry_point('elastalert==0.1.29', 'console_scripts','elastalert-test-rule')()
File "/usr/lib/python2.7/site-packages/elastalert-0.1.29.py2.7.egg/elastalert/test_rule.py", line 378, in main
test_instance.run_rule_test()
File "/usr/lib/python2.7/site-packages/elastalert-0.1.29.py2.7.egg/elastalert/test_rule.py", line 373, in run_rule_test
self.run_elastalert(rule_yaml, conf, args_
File "/usr/lib/python2.7/site-packages/elastalert-0.1.29.py2.7.egg/elastalert/test_rule.py", line 211, in run_elastalert
load_modules(rule, load_modules_args)
File "/usr/lib/python2.7/site-packages/elastalert-0.1.29.py2.7.egg/elastalert/config.py", line 341, in load_modules
rule['type']=get_module(rule['type'])
File "/usr/lib/python2.7/site-packages/elastalert-0.1.29.py2.7.egg/elastalert/config.py", line 100, in get_module
base_module = __import__(module_path, globals(), locals(), [module_class])
elastalert.util.EAException:
Could not import module blacklist: - "www.testbad.domain": No module named blacklist = "www.testbad
Если я удаляю значение www.testbad.domain из списка под типом: черный список, я получаю ошибку отслеживания difnet:
Traceback (most recent call last):
File "/usr/bin/elastalert-test-rule", line 11 in <module>
load_entry_point('elastalert==0.1.29', 'console_scripts','elastalert-test-rule')()
File "/usr/lib/python2.7/site-packages/elastalert-0.1.29.py2.7.egg/elastalert/test_rule.py", line 378, in main
test_instance.run_rule_test()
File "/usr/lib/python2.7/site-packages/elastalert-0.1.29.py2.7.egg/elastalert/test_rule.py", line 357, in run_rule_test
rule_yaml=load_rule_yaml(arg.file)
File "/usr/lib/python2.7/site-packages/elastalert-0.1.29.py2.7.egg/elastalert/config.py", line 128, in load_rule_yaml
loaded = yaml_loader(filename)
File "build/bdist.linux-x86_64/egg/staticconf/loader.py",line 93, in yaml_loader
File "/usr/lib64/python2.7/site-packages/yaml/__init__.py", line 71, in load return
loader.get_single_data()
File "/usr/lib64/python2.7/site-packages/yaml/constructor.py", line 37, in get_single_data
node = self.get_single_node()
File "/usr/lib64/python2.7/site-packages/yaml/composer.py", line 36, in get_single_node
document = self.compose_document()
File "/usr/lib64/python2.7/site-packages/yaml/composer.py", line 55, in compose_document
node = self.compose_document(None, None)
File "/usr/lib64/python2.7/site-packages/yaml/composer.py", line 84, in compose_node
node = self.compose_mapping_node(anchor)
File "/usr/lib64/python2.7/site-packages/yaml/composer.py", line 127, in compose_mapping_node
while not self.check_event(MappingEndEvent):
File "/usr/lib64/python2.7/site-packages/yaml/parser.py", line 98, in check_event
self.current_event = self.state()
File "/usr/lib64/python2.7/site-packages/yaml/parser.py", line 439, in parse_block_mapping_key
"expected <block end>, but found %r" % token.id, token.start_mark)
yaml.parser.ParserError: while parsing a block mapping
in "test-detect.yaml", line 3, column 1
expected <block end, but found '<block sequence start>'
in "test-detect.yaml", line 10, column 5
Затем я попытался изменить тип любого и указать запрос.
type: any
filter:
- query:
query_string:
query: "Query: www.testbad.domain"
Это не дало никаких результатов, НО "Запрос" был включен в список "Доступные термины в первом обращении"
Поэтому я попытался: query: "Query: *www.testbad.domain*". По-прежнему нет хитов.
Затем я попытался: query: "Query: *testbad*". Теперь я получаю хиты.
(Я не могу заставить его показывать правильно, но оба запроса должны быть окружены звездочками без пробелов)
Итак, мои вопросы таковы:
- Что происходит с поиском в черном списке? Почему происходит ошибка Python?
- Почему я не получаю попадание при поиске полного доменного имени в определенном индексе для строки запроса?
- Почему Query не указан как поле, которое я могу искать, используя псевдоним?
1 ответ
Gaaah!!! синтаксис, синтаксис, синтаксис.
type: blacklist
- "www.testbad.domain"
- "!file /opt/elastalert/black_lists/bad_domains.txt"
Должно быть:
type: blacklist
blacklist:
- "www.testbad.domain"
- "!file /opt/elastalert/black_lists/bad_domains.txt"