
Elasticsearch पर कस्टम फ़िल्टर चलाता है और मिलानों पर अलर्ट करता है
Reactor, ओपन सोर्स प्रोजेक्ट ElastAlert का एक फोर्क (fork) के रूप में शुरू हुआ। इस प्रोजेक्ट के अनुरक्षक (maintainer) को ElastAlert में हुए परिवर्तनों पर करीबी नज़र रखनी चाहिए (उनके अतिरिक्त अलर्टर्स को छोड़कर) और यह सुनिश्चित करना चाहिए कि किसी भी प्रासंगिक बग फिक्स को पैच किया जाए और किसी भी उपयोगी सुविधा को पोर्ट किया जाए।
Reactor एक अलर्टिंग इंजन है जो कस्टम फिल्टर वाले नियमों (rules) का एक सेट लेता है और मिलान (matches) पर अलर्ट करता है। Reactor स्वचालित रूप से साइलेंस किए गए अलर्ट्स को दोहराए जाने वाली अलर्ट जानकारी के साथ अपडेट करता है।
| पहुँच की तिथि | कमिट | टिप्पणियाँ |
|---|---|---|
| 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 के पुराने संस्करणों के लिए समर्थन हटाने की कोई तिथि नहीं है। यदि ElasticSearch की पायथन लाइब्रेरी समर्थन हटा देती है, तो हम संभवतः उसी का अनुसरण करेंगे।
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) का उपयोग करें।
कृपया ध्यान दें कि ElasticSearch लाइब्रेरी के संस्करण 6.4.0 में एक ज्ञात बग पेश किया गया था, जिसे 7.0.4 में ठीक किया गया था, लेकिन मेजर संस्करण 6 में नहीं। यह बग scroll_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
यह प्रोजेक्ट उपयोगकर्ता की त्रुटि रोकने के लिए गिट हुक प्रदान करता है। कृपया निम्न कमांड चलाएँ:
$ 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/ में निष्पादित) 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