
Reactor は、オープンソースプロジェクト ElastAlert のフォークとして始まりました。このプロジェクトのメンテナーは、ElastAlert の変更(追加のアラート機能を除く)を注意深く追跡し、関連するバグ修正がパッチとして適用され、有用な機能が移植されるようにする必要があります。
Reactor は、カスタムフィルターを持つ一連のルールを受け取り、一致したアラートを通知するアラートエンジンです。Reactor は、抑制されたアラートを繰り返しアラート情報で自動的に更新します。
| アクセス日 | コミット | 備考 |
|---|---|---|
| 2019-10-16 | 325f1dfe7a45f3ca2a2cc00127ab71fcd4f9cead | Reactor が最初に作成される前まで遡りました。 |
| 2020-01-09 | ec5d03b95708ea0aa3d29c065f9794fdd95a82a1 | カバレッジは使用していません。 |
現在 Reactor は ElasticSearch 5.x.x、6.x.x、7.x.x をサポートしています。 新しいバージョンの elasticsearch が利用可能になり次第、Reactor もサポートするよう更新されます。 以前のバージョンの ElasticSearch のサポートを追加する予定はありません。 現時点では、以前のバージョンの ElasticSearch のサポートを削除する予定日はありません。ElasticSearch の python ライブラリがサポートを廃止した場合、それに追随する可能性が高いです。
ElasticSearch の python ライブラリのガイドラインに従って、クラスターと同じメジャーバージョンのライブラリをインストールすることをお勧めします。
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)。
なお、ElasticSearch ライブラリのバージョン 6.4.0 で導入された 既知のバグ があります。これは 7.0.4 で修正されましたが、メジャーバージョン 6 では修正されていません。このバグは scroll_id をクエリパラメータに含めるため、有効なスクロール ID に対して Elasticsearch が 400 ステータスコードを返す可能性があります。
次のコマンドを使用して、ローカル開発用に docker 内で elasticsearch インスタンスを起動できます:
$ 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 は、ユニットテストと統合テストの 2 種類のテストでカバーされています。ユニットテストは個々の関数とロジックフローが正しく動作することを確認し、統合テストはシステム全体が一体となって動作することを確認します。
ユニットテストは 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 には、>= v7.x.x で必要となり、旧バージョンでは壊れてしまう 3 つの環境変数があります:
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/ 内で実行)は、localhost でモッククラスターを実行するための CA 証明書とデバイス証明書を生成します:
# 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