
Esegue filtri personalizzati su Elasticsearch e invia avvisi in caso di corrispondenze.
Reactor è nato come fork del progetto open source ElastAlert. Il maintainer di questo progetto dovrebbe tenere d'occhio le modifiche a ElastAlert (escludendo i loro alerter aggiuntivi) e assicurarsi che eventuali fix di bug rilevanti vengano integrati e che qualsiasi funzionalità utile venga portata.
Reactor è un motore di alerting che accetta un insieme di regole con filtri personalizzati e genera avvisi sulle corrispondenze. Reactor aggiorna automaticamente gli avvisi silenziati con le informazioni di ripetizione dell'avviso.
| Data di accesso | Commit | Note |
|---|---|---|
| 2019-10-16 | 325f1dfe7a45f3ca2a2cc00127ab71fcd4f9cead | Siamo andati indietro fino a prima della creazione di Reactor. |
| 2020-01-09 | ec5d03b95708ea0aa3d29c065f9794fdd95a82a1 | Non usiamo coverage. |
Attualmente Reactor supporta ElasticSearch 5.x.x, 6.x.x e 7.x.x. Man mano che diventano disponibili nuove versioni di elasticsearch, Reactor verrà aggiornato per supportarle. Non c'è intenzione di aggiungere supporto per versioni precedenti di ElasticSearch. Attualmente non c'è una data per la rimozione del supporto per le versioni precedenti di ElasticSearch. Se la libreria python di ElasticSearch rimuove il supporto, probabilmente seguiremo la stessa strada.
Come da linee guida della libreria python di ElasticSearch, si consiglia di installare la versione della libreria con la stessa major version del cluster.
Per Elasticsearch 7.0 e versioni successive, usa la major version 7 (elasticsearch<8.0.0,>=7.0.0).
Per Elasticsearch 6.0 e versioni successive, usa la major version 6 (elasticsearch<7.0.0,>=6.0.0).
Per Elasticsearch 5.0 e versioni successive, usa la major version 5 (elasticsearch<6.0.0,>=5.0.0).
Si noti che c'è un bug noto introdotto nella versione 6.4.0
della libreria ElasticSearch, corretto in 7.0.4 ma non nella major version 6. Il bug inserisce lo scroll_id nel
parametro della query, il che può far sì che Elasticsearch restituisca codici di stato 400 per scroll id validi.
Puoi avviare un'istanza elasticsearch dentro docker per lo sviluppo locale usando il seguente comando:
$ docker run -d -p 9200:9200/tcp --name elasticsearch docker.elastic.co/elasticsearch/elasticsearch:<version>
E la seguente configurazione in 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
Questo progetto fornisce git hook per evitare errori dell'utente. Esegui i seguenti comandi:
$ cp .git-hooks-pre-push .git/hooks/pre-push
Reactor è coperto da due tipi di test: unitari e di integrazione. I test unitari garantiscono che le singole funzioni e i flussi logici funzionino correttamente; i test di integrazione garantiscono che l' intero sistema funzioni in modo coordinato.
I test unitari sono scritti usando PyTest. Per eseguire tutti i test esegui il seguente comando:
$ py.test
I test unitari vengono eseguiti in docker e richiedono un file .env nella directory root del progetto.
I test richiedono i seguenti contenuti all'interno del file .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
Il file Docker Compose di integrazione test.docker-compose.yml ha 3 variabili d'ambiente
richieste per >= v7.x.x, che romperanno le versioni precedenti:
node.name=elasticsearch
discovery.seed_hosts=elasticsearch
cluster.initial_master_nodes=elasticsearch
Per eseguire i test di integrazione esegui il seguente comando:
$ docker-compose -f docker-compose-test.yml up --abort-on-container-exit --build reactor elasticsearch
La seguente serie di comandi (eseguita in ./certs/) creerà un set di certificati CA e dispositivo per eseguire il cluster mock su 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
Per compilare la documentazione:
$ 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