
Запускает пользовательские фильтры по Elasticsearch и оповещает о совпадениях.
Reactor начинался как форк проекта с открытым исходным кодом ElastAlert. Поддерживающий этот проект разработчик должен внимательно следить за изменениями в ElastAlert (за исключением их дополнительных алертеров) и обеспечивать, чтобы все relevant исправления ошибок были внесены, а любые полезные функции перенесены.
Reactor — это механизм оповещений, который принимает набор правил с пользовательскими фильтрами и оповещает о совпадениях. Reactor автоматически обновляет отключённые оповещения информацией о повторных срабатываниях.
| Дата обращения | Commit | Примечания |
|---|---|---|
| 2019-10-16 | 325f1dfe7a45f3ca2a2cc00127ab71fcd4f9cead | Откат к состоянию до момента создания Reactor. |
| 2020-01-09 | ec5d03b95708ea0aa3d29c065f9794fdd95a82a1 | Мы не используем coverage. |
В настоящее время Reactor поддерживает ElasticSearch 5.x.x, 6.x.x и 7.x.x. По мере выхода новых версий elasticsearch Reactor будет обновляться для их поддержки. Добавлять поддержку более старых версий ElasticSearch не планируется. На данный момент нет даты удаления поддержки старых версий ElasticSearch. Если python-библиотека ElasticSearch прекратит их поддержку, мы, скорее всего, последуем её примеру.
Следуя рекомендациям python-библиотеки ElasticSearch, рекомендуется устанавливать версию библиотеки с той же основной версией, что и кластер.
Для Elasticsearch 7.0 и новее используйте основную версию 7 (elasticsearch<8.0.0,>=7.0.0).
Для Elasticsearch 6.0 и новее используйте основную версию 6 (elasticsearch<7.0.0,>=6.0.0).
Для Elasticsearch 5.0 и новее используйте основную версию 5 (elasticsearch<6.0.0,>=5.0.0).
Обратите внимание, что в версии 6.4.0 библиотеки ElasticSearch есть известная ошибка,
которая была исправлена в 7.0.4, но не в основной версии 6. Ошибка помещает scroll_id в
параметр запроса, из-за чего Elasticsearch может возвращать коды состояния 400 для допустимых scroll ids.
Вы можете запустить экземпляр elasticsearch в docker для локальной разработки с помощью следующей команды:
$ docker run -d -p 9200:9200/tcp --name elasticsearch docker.elastic.co/elasticsearch/elasticsearch:<version>
И следующую конфигурацию в config.yaml:
writeback_index: reactor
alert_alias: reactor_alerts
elasticsearch: &elasticsearch
host: localhost
port: 9200
# Global settings to be applied to every run
rule:
elasticsearch: *elasticsearch
Этот проект предоставляет git-хуки для предотвращения ошибок пользователя. Выполните следующие команды:
$ cp .git-hooks-pre-push .git/hooks/pre-push
Reactor покрыт двумя типами тестирования: модульным и интеграционным. Модульное тестирование гарантирует, что отдельные функции и логические потоки работают корректно; интеграционное тестирование — что вся система работает согласованно.
Модульные тесты написаны с использованием PyTest. Чтобы запустить все тесты, выполните следующую команду:
$ py.test
Интеграционные тесты выполняются в docker и требуют наличия файла .env в корневом каталоге проекта.
Тесты требуют следующего содержимого внутри файла .env:
# The ElasticSearch version to be tested, reactor supports >= 5.x.x
ES_VERSION=6.3.2
# Basic configuration information so that reactor can query ElasticSearch
ES_HOST=elasticsearch
ES_USER=elastic
ES_PASSWORD=changeme
Файл интеграционного Docker Compose test.docker-compose.yml содержит 3 переменные окружения, которые
обязательны для >= v7.x.x и сломают более старые версии:
node.name=elasticsearch
discovery.seed_hosts=elasticsearch
cluster.initial_master_nodes=elasticsearch
Для выполнения интеграционных тестов запустите следующую команду:
$ docker-compose -f docker-compose-test.yml up --abort-on-container-exit --build reactor elasticsearch
Следующий набор команд (выполняемых в ./certs/) создаст набор сертификатов — корневого CA и устройства — для запуска имитированного кластера на localhost:
# Only do once: generate the root CA key:
$ openssl genrsa -out transport-ca.key 4096
# Generate the root CA certificate:
## Country Name (2 letter code) []:GB
## State or Province Name (full name) []:.
## Locality Name (eg, city) []:.
## Organization Name (eg, company) []:.
## Organizational Unit Name (eg, section) []:.
## Common Name (eg, fully qualified host name) []:PyRaftLog
## Email Address []:.
$ openssl req -x509 -new -nodes -key transport-ca.key -sha256 -days 1024 -out transport-ca.pem
# Generate device certificates
# Only do once: generate device key:
$ openssl genrsa -out transport-consensus.key 4096
# Generate device certificate signing request:
## Country Name (2 letter code) []:GB
## State or Province Name (full name) []:.
## Locality Name (eg, city) []:.
## Organization Name (eg, company) []:.
## Organizational Unit Name (eg, section) []:.
## Common Name (eg, fully qualified host name) []:localhost
## Email Address []:.
$ openssl req -new -key transport-consensus.key -out transport-consensus.csr
# Generate a signed device certificate:
$ openssl x509 -req -in transport-consensus.csr -CA transport-ca.pem -CAkey transport-ca.key -CAcreateserial -out transport-consensus.crt -days 500 -sha256
Чтобы собрать документацию:
$ pip install -r requirements-docs.txt
$ cd docs
$ sphinx-build -b html -d build/doctrees -W source build/html
pip install --upgrade setuptools wheelpip install --upgrade twinepython3 setup.py sdist bdist_wheeltwine check dist/*twine upload --skip-existing dist/* --verbose