
Ejecuta filtros personalizados en Elasticsearch y alerta sobre coincidencias
Reactor comenzó como un fork del proyecto de código abierto ElastAlert. El mantenedor de este proyecto debe seguir de cerca los cambios en ElastAlert (excluyendo sus alertadores adicionales) y asegurarse de que cualquier corrección de errores relevante sea aplicada y cualquier característica útil sea incorporada.
Reactor es un motor de alertas que toma un conjunto de reglas con filtros personalizados y alerta sobre las coincidencias. Reactor actualiza automáticamente las alertas silenciadas con información de alertas repetidas.
| Fecha de acceso | Commit | Notas |
|---|---|---|
| 2019-10-16 | 325f1dfe7a45f3ca2a2cc00127ab71fcd4f9cead | Se retrocedió hasta antes de que Reactor fuera creado por primera vez. |
| 2020-01-09 | ec5d03b95708ea0aa3d29c065f9794fdd95a82a1 | No utilizamos cobertura. |
Actualmente Reactor es compatible con ElasticSearch 5.x.x, 6.x.x y 7.x.x A medida que estén disponibles nuevas versiones de Elasticsearch, Reactor se actualizará para darles soporte. No hay intención de añadir soporte para versiones anteriores de ElasticSearch. Actualmente, no hay fecha para eliminar el soporte de versiones anteriores de ElasticSearch. Si la librería de Python de ElasticSearch elimina el soporte, es probable que hagamos lo mismo.
Según las directrices de la librería de Python de ElasticSearch, se recomienda instalar la versión de la librería con la misma versión principal que el clúster.
Para Elasticsearch 7.0 y versiones posteriores, use la versión principal 7 (elasticsearch<8.0.0,>=7.0.0).
Para Elasticsearch 6.0 y versiones posteriores, use la versión principal 6 (elasticsearch<7.0.0,>=6.0.0).
Para Elasticsearch 5.0 y versiones posteriores, use la versión principal 5 (elasticsearch<6.0.0,>=5.0.0).
Tenga en cuenta que hay un bug conocido introducido en la versión 6.4.0
de la librería de ElasticSearch que se corrigió en 7.0.4 pero no en la versión principal 6. El bug coloca el scroll_id en
el parámetro de consulta, lo que puede hacer que Elasticsearch devuelva códigos de estado 400 para ids de scroll válidos.
Puede iniciar una instancia de Elasticsearch dentro de Docker para el desarrollo local usando el siguiente comando:
$ docker run -d -p 9200:9200/tcp --name elasticsearch docker.elastic.co/elasticsearch/elasticsearch:<version>
Y la siguiente configuración en 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
Este proyecto proporciona hooks de Git para evitar errores del usuario. Por favor, ejecute los siguientes comandos:
$ cp .git-hooks-pre-push .git/hooks/pre-push
Reactor está cubierto por dos tipos de pruebas: unitarias y de integración. Las pruebas unitarias garantizan que las funciones individuales y los flujos lógicos funcionen correctamente; las pruebas de integración garantizan que el sistema completo funcione al unísono.
Las pruebas unitarias están escritas con PyTest. Para ejecutar todas las pruebas, use el siguiente comando:
$ py.test
Las pruebas unitarias se ejecutan en Docker y requieren un archivo .env en el directorio raíz del proyecto.
Las pruebas requieren el siguiente contenido dentro del archivo .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
El archivo Docker Compose de integración test.docker-compose.yml tiene 3 variables de entorno que
son necesarias para >= v7.x.x y que romperán las versiones anteriores:
node.name=elasticsearch
discovery.seed_hosts=elasticsearch
cluster.initial_master_nodes=elasticsearch
Para ejecutar las pruebas de integración, use el siguiente comando:
$ docker-compose -f docker-compose-test.yml up --abort-on-container-exit --build reactor elasticsearch
El siguiente conjunto de comandos (ejecutados en ./certs/) creará un conjunto de certificados de CA y de dispositivo para ejecutar el clúster simulado en 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
Para generar la documentación:
$ 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