X-PackのWatcher Alert
開発元:Elastic
有償
Elasticsearchのアラート検知プラグイン「Watcher」を使ってみた
Elastic Stack Alertingではまったことと対処方法
Elastic Stack を使った予兆検知結果の可視化 〜検知した異常の通知〜
Elasticsearchのプラグイン「Shield」「Watcher」による不正アクセス監査
Elastic StackのX-Packを試す(Watcher編)
X-PackのAlerting and action settings in Kibana
開発元:Elastic
Kibana alerts
Elastic StackをPrometheusとFluentdと組み合わせてKubernetesを監視する
https://www.elastic.co/jp/blog/monitoring-kubernetes-with-the-elastic-stack-using-prometheus-and-fluentd
Prometheusのデプロイでは、Alertmanagerは無効にしていました。Elastic Stackにログ、メトリックを収集した場合、Alertmanagerの代わりにKibana Alertを使ってアラーティングを実装することができます。Prometheusからのメトリックだけではなく、ログでも他のインデックスでも、Elasticsearchに格納されているデータは全て活用することができますし、機械学習を使ったより高度なアラーティングも可能になります。
ElastAlert
開発元:Yelp
Pythonで作られている。
Pythonライブラリの「elasticsearch-py」を使用している。
https://pypi.org/project/elasticsearch/
ライセンスは、Apache License 2.0
0.2.4 (2020/04/17)
https://pypi.org/project/elastalert/
・コマンド・設定ファイル(YAML)ベースでの動作のみ。
・0.2.0b2よりElasticsearch 7.xに対応。
・0.2.0よりPython3対応。
・バグ修正や機能追加は今後ありません。
・Python 3.9以降は動きません。
・Elasticsearch 8に対応していません。
Please don't let this die. ElastAlert usecase is very strong. #2947
Should someone else maintain this? #2946
Status of the elastalert project #2911
AWSのOpenSearch
- 対応していない。正常に動かない
(内部のElasticsearch バージョンは7.10.2だが、バージョンを1.0.0と返してしまう。バージョンチェックでElasticsearch 5の処理にいってしまう) - ElastAlert2は対応を開始した。
ElasticsearchのBearer認証
- 対応していない。
- ElastAlert2は対応してる。
ElasticsearchのApiKey認証
- 対応していない。
- ElastAlert2は対応してる。
ElasticsearchのProxy接続
Missing proxy configuration feature
- 対応していない。
- ElastAlert2も対応していない。
Python 3.9以降は動きません。
blist no longer works in Python 3.9
Elastalert is broken on python3.9 through blist dependency
- ElastAlert2は対応してる。
AWS SNSは、以下のように書かないと動かない
alert:
- sns:
aws_region: 'us-east-1'
sns_topic_arn: 'arn:aws:sns:us-east-1:123456789:somesnstopic'
aws_access_key_id: 'XXXXXXXXXXXXXXXXXX'
aws_secret_access_key: 'YYYYYYYYYYYYYYYYYYYY'
検索結果が 10,000 件を超える場合、検索結果画面での件数表示は 10,000 件以上と表示
track_total_hitsをtrueに設定すると10,000hits以上を検索できるようになるが、現在の実装ではtrack_total_hitをtrueにする設定変更をサポートしていない
Elasticsearchを7.Xにアップグレードしたら、hitsが10,000 になってた
blacklist、whitelistに1024の制限がある
Blacklist filter with 10.000+ terms is extremely slow
"Failed to parse query" for blacklist rule when file contains more than 1024 entries
blacklist line limit
Emailアラートの制限
- Microsoft 365(旧名称Office 365)はfrom_addrに設定に対応していません。to,cc,bccに指定は問題無し。
- Gmailをfrom_addrに設定する場合、Googleの設定で安全性の低いアプリのアクセスを有効にしないとメールの送信ができません。
KibanaのDashboard関連は正常に動きません
内部のロジックでkibana-int
というインデックスを参照していますが、現在のElaticsearchでは.kibana*
という名前なのでプログラムを修正しないと動きません。
それとDashboard関係のロジックがElasticsearch 7対応していません。
- elastalert-rule-from-kibana
- use_kibana_dashboard
- use_kibana4_dashboard
- kibana4_start_timedelta
- kibana4_end_timedelta
- download_dashboard
download_dashboardのドキュメントに不備があります。
https://elastalert.readthedocs.io/en/latest/recipes/writing_filters.html#loading-filters-directly-from-kibana-3
https://github.com/Yelp/elastalert/issues/1481
現在の記載
filter:
download_dashboard: "My Dashboard Name"
正しい記載
filter:
- term:
download_dashboard: "My Dashboard Name"
ElastAlertのアラート通知先
アラート通知先 | 備考 |
---|---|
Command | アラート通知確認済 |
アラート通知確認済 gmailまたはoffice365でうまくいかないというissueを見かける問題ありそう。gmailまたはoffice365はfrom_addrに指定しなければ大丈夫 |
|
Jira | 以下のものがドキュメントに記載し忘れている ・jira_assignee カスタムフィールドで正常に動かない情報あり Jira customfield not taking argument #3073 Trying to assign Epic Link to Jira ticket #3108 |
OpsGenie | 以下のものがドキュメントに記載し忘れている ・opsgenie_addr ・opsgenie_proxy ・opsgenie_details |
AWS SNS | ドキュメントの記載が古い ・aws_access_key→aws_access_key_id ・aws_secret_key→aws_secret_access_key ・profile→aws_profile |
HipChat | HipChatは2019/02にサービス終了している |
Stride | Strideは2019/02にサービス終了している |
Microsoft Teams | アラート通知確認済 |
Slack | アラート通知確認済 以下のものがドキュメントに記載し忘れている ・slack_ca_certs ・slack_ignore_ssl_errors ・slack_timeout |
Mattermost | アラート通知確認済 |
Telegram | アラート通知確認済 以下のものがドキュメントに記載し忘れている ・telegram_proxy_login ・telegram_proxy_pass |
GoogleChat | |
PagerDuty | |
PagerTree | 最新の0.2.4で正常に動作しない 以下のものがドキュメントに記載し忘れている ・pagertree_proxy |
Exotel | Exotelは日本でサポート外のため未確認 |
Twilio | アラート通知確認済 |
VictorOps | アラート通知確認済 |
Gitter | アラート通知確認済 |
ServiceNow | アラート通知確認済 |
Debug | |
Stomp | 最新の0.2.4で正常に動作しない 以下のものがドキュメントに記載し忘れている ・stomp_ssl |
Alerta | アラート通知は動いているという情報あり 以下のものがドキュメントに記載し忘れている ・alerta_api_skip_ssl |
HTTP POST | |
Line Notify | 最新の0.2.4で正常に動作しない |
TheHive | アラート通知は動いているという情報あり 以下のものがドキュメントに記載し忘れている ・hive_verify |
Zabbix | ・ドキュメントで「zbx_item」という記載されているのは「zbx_key」。zbx_itemと書くと「Missing required option(s): zbx_key」のエラーが出る。 ・設定を追加して動かすとエラーが出る。バグがあるようです。 (expected 2, got 1)Could not import module zabbix: not enough values to unpack Zabbix alert #2601 Zabbix alert module error #2621 Elastalet fails if alerter type zabbix is used: "ValueError: not enough values to unpack" [bug] #2586 以下の対応で正常に動作します。動作確認手伝いました Bugfix and better error handling on zabbix alerter #2640 |
ElastAlert Server Dockerイメージ
ElastAlert Serverが今後もメンテナンスされるのか不安がある。
bitsensor/elastalertはメンテナンスしていない状況。
johnsusek/elastalert-serverをforkして独自でメンテナンスしていくことが発生することも考えて採用を考えたほうがいいと思います。
・新しいNode.jsへの対応。
・Elasticserachメジャーバージョンアップ対応(直近だと8.x)
・ElastAlert2を使う場合、praecoapp/elastalert-serverとkarql/elastalert2-server以外の選択肢はない。
Dockerイメージ名 | タグ | ElastAlert | 備考 |
---|---|---|---|
bitsensor/elastalert | 2.0.1 | 0.1.39 | Elastcserach 7.xで問題が発生 |
bitsensor/elastalert | lastet | 0.1.39 | Elastcserach 7.xで問題が発生 |
bitsensor/elastalert | 3.0.0-beta.0 | 0.2.0b2 | |
bitsensor/elastalert | 3.0.0-beta.1 | 未確認 | |
servercentral/elastalert | latest | 0.2.1 | bitsensor/elastalertフォーク |
daichi703n/elastalert | 0.2.1-dev2 | 0.2.1+bugfix | servercentral/elastalertフォーク jfcantu/elastalert:v0.1.1のイメージ使用?。その他のバグ修正は以下のサイトを参照。 Praeco + ElastAlert2.0 + ES7.x 構成の不具合対応方法 daichi703n/elastalert-server (GitHub) |
karql/elastalert2-server | latest | ElastAlert2 2.15.0 | bitsensor/elastalertフォーク node.jsからTypeScriptに変更している |
praecoapp/elastalert-server | latest | ElastAlert2 2.15.0 | servercentral/elastalertフォーク Praeco用ElastAlert Serverの最新版 Elasticsearch 8対応 |
インデックスのオープンしすぎによるJavaヒープメモリ枯渇
circuit_breaking_exceptionが発生することがある
→ElasticSearchのヒープサイズ変更
→ElasticSearch
indices.breaker.total.limit変更
→ElasticSearchのIndexデータ削除、or 不要Indexデータのクローズ
Elasticsearchのインデックス開きすぎによるヒープメモリ枯渇
elastalert feels very unhappy (circuit_breaking_exception, Data too large) #2485
circuit_breaking_exception, Data too large #349
After Upgrade to 6.2.4 Circuitbreaker Exception Data too large #31197
Elastalert deployment failed
参考URL
Elastic StackによるKubernetesモニタリングシステムの紹介
ElastAlert による Elasticsearch のインデックス監視・通知
elastalertでアプリの異常を自動検知して通知したい
elastalert – ElasticSearchによる簡単で柔軟なアラート
ElastAlertでカスタムルールを作成する
ElasticSearch + Elastalertでエラーログ検出時に通知したい
ElastAlertの監視ルールを拡張してすこしだけ幸せになる
Elasticsearchを活用したサービス監視ですこしだけ幸せになる
AWS ElasticSearch ServiceのログをElastAlertで監視する
twitter -> fluentd -> elasticsearch -> elastalert -> slackで、エゴサをしたい人生だった。
elastalertを利用したslackへのアラート
Alerting on Kubernetes Events with EFK Stack
ElastAlert: Alerting At Scale With Elasticsearch, Part 1
Using Elastalert to monitor disk growth
サンプル
elastalert/example_rules
andromedarabbit/elastalert-rule.yaml
elastalertを利用したslackへのアラート
Elastalert rule for CPU usage in percentage
Elastalert-Regel ausgeführt: IOError: [Errno 2] Keine solche Datei oder Verzeichnis: 'config.yaml'
ELK: ElastAlert for alerting based on data from ElasticSearch
manankalra/elastalert-tutorial
・elastalert_cpu_watch.yaml
・elastalert_filesystem_watch.yaml
・elastalert_memory_watch.yaml
ElastAlertのフォーク
- ElastAlert 0.2.4ベース
- crontrigger, must_notなどを追加している。
- Python 3.9以降は動きません。
- Elasticsearch 8に対応していません。
- ElastAlert 0.2.1ベース
- auto resolve alert、generate_kibana6_linkなどを追加している。
- Python 3.9以降は動きません。
- Elasticsearch 8に対応していません。
sherifabdlnaby/elastalert
v0.4.0
- ElastAlert 0.2.1ベース
- Jinja2 Optionsなどを追加している。
- Python 3.9以降は動きません。
- Elasticsearch 8に対応していません。
- ElastAlert 0.2.4ベース
- Python 3.9以降は動きません。
- Elasticsearch 8に対応していません。
v0.3.0 (2020/6/20)
https://github.com/JasperJuergensen/elastalert/blob/master/changelog.md
Restructure
Ruletypes in their own module instead of one file
Alerter in their own module instead of one file
Enhancements in their own module instead of one file
Loaders in their own module instead of one file
New global config Object instead of a dictionary
Added
MAAS rule
New metrics for spike and spike metric aggregation rule
Correlation rule
Queries
Rule class which covers some functionality previously the elastalerter object had
EARuntimeException for exceptions during the execution of a rule
EAConfigExceptions for exceptions raised during the configuration phase of a rule
Fixed
Fixed spike metric aggregation rule windows
- ElastAlert 0.1.35ベース
- Python 3.8、elasticsearch-pyバージョンアップなど
- Python 3.9以降は動きません。
- Elasticsearch 8に対応していません。
ElastAlert2
メンテナー:Jason Ertel
オリジナルのYelp/elastalertに無い機能があります。
ライセンスは、Apache License 2.0
2.15.0 (2023/11/25)
https://pypi.org/project/elastalert2/
・コードのリファクタリング、テストコードの追加。
・Python 3.9以降に対応している。
・Elasticsearch 7, 8, Opensearchに対応
・アラート通知先にDatadog、Discord、Chartwork、Dingtalk、Rocket.Chat、Amazon SES、Tencent SMS、Alertmanager、HTTP POST 2などが追加されている。
・多数のバグ修正(Line Notify、Stomp、Zabbix、Pagertreeは正常に動作。AWS SNSのバグ修正など)
・Dockerイメージ、 Helm chartも提供しています。
ElastAlert Kibana Plugin
開発元:BitSensor
ライセンスは、The 3-clause BSD license (Modified)
1.1.0 (2019/07/22)
・ElastAlert ルールファイルエディタ
・ElastAlertをKibanaのタブとして組み込める。
・アラートルールディレクトリの直下のファイルしか管理できない
・同じ名前のルールファイル名がある状態で新規で同じ名前のルールファイルを作ると上書きされてしまう。
・ルールのテンプレートフォルダを参照してルールファイルを作成する対応はできていない。
・Kibana 7.2.0~7.5.0に対応している。
・Praecoと一緒に使わないことをおすすめする。
<理由>
Praecoで対応していない設定で編集した場合、Praecoでアラートルールの有効・無効に変更したりした時に書いた設定が消えたりするからです。
なお、この動きは使用者が誤った使い方をしたことにより発生することであり、仕様だと思います。
ElastAlert Kibana Pluginについて思っていること
最新のKibanaで使えない(公式ではKibana 7.5.0までサポート)ので採用をおすすめできない状況
今後動かなくなっても最新のKibanaで動くように改修できるなら採用していいと思います。
Kibana 6.8.1~6.8.10、7.5.1~7.9.3、7.10.0~8.5.3
Kibana 7.10.0以降に対応
https://github.com/karql/elastalert-kibana-plugin
Kibana 6.8.1~6.8.10、7.5.1~7.9.3対応
https://github.com/nsano-rururu/elastalert-kibana-plugin/releases
Kibana 6.8.xでも動く?
kibana 6.8.1 support #117
Can't install elastalert-kibana-plugin-1.0.3-6.8.0.zip to Kibana 6.8.3 #123
Kibana 7.5.1~7.8.1で動きます
elastalert-kibana-plugin-1.1.0-7.5.0.zipをダウンロードしてきて、
kibana/elastalert-kibana-plugin/package.jsonの
Kibanaのバージョンを更新してzipファイルに圧縮すれば
Kibana 7.5.1、7.5.2で動きます。
Kibana 7.6.0~7.8.1については、package.jsonのKibanaのバージョン更新以外にelastalert.jsの差し替えも必要です。
Plugin elastalert-kibana-plugin [7.5.0] is incompatible with Kibana [7.5.1] #139
Plugin is incompatible with Kibana 7.6.0 #141
[Legacy] Route payload must be set to 'parse' when payload validation enabled #57777
update elasticsearch to 7.6.2; also, fix issue idaholab#119
KibanaにElastAlertのプラグインをインストールしたDockerイメージを作る場合
Kibana 7.5.1~7.8.1のDockerイメージの作成方法は別記事を書きました
elastalert-kibana-pluginをインストールした状態のDockerイメージを作成する方法
以下はdocker-composeのcommandでElastAlertのプラグインをインストールする場合
# (参考情報)elastalert-kibana-plugin-1.1.0-7.5.1.zip作成
cd /tmp
curl -L -O https://github.com/bitsensor/elastalert-kibana-plugin/releases/download/1.1.0/elastalert-kibana-plugin-1.1.0-7.5.0.zip
mv elastalert-kibana-plugin-1.1.0-7.5.0.zip elastalert-kibana-plugin-1.1.0-7.5.1.zip
unzip elastalert-kibana-plugin-1.1.0-7.5.1.zip kibana/elastalert-kibana-plugin/package.json
sed -i "s/7\.5\.0/7\.5\.1/g" kibana/elastalert-kibana-plugin/package.json
zip elastalert-kibana-plugin-1.1.0-7.5.1.zip kibana/elastalert-kibana-plugin/package.json
rm -rf kibana
# elastalert-kibana-plugin-1.1.0-7.5.2.zip作成
cd /tmp
curl -L -O https://github.com/bitsensor/elastalert-kibana-plugin/releases/download/1.1.0/elastalert-kibana-plugin-1.1.0-7.5.0.zip
mv elastalert-kibana-plugin-1.1.0-7.5.0.zip elastalert-kibana-plugin-1.1.0-7.5.2.zip
unzip elastalert-kibana-plugin-1.1.0-7.5.2.zip kibana/elastalert-kibana-plugin/package.json
sed -i "s/7\.5\.0/7\.5\.2/g" kibana/elastalert-kibana-plugin/package.json
zip elastalert-kibana-plugin-1.1.0-7.5.2.zip kibana/elastalert-kibana-plugin/package.json
rm -rf kibana
# (参考情報)elastalert-kibana-plugin-1.1.0-7.6.0.zip作成
cd /tmp
curl -L -O https://github.com/bitsensor/elastalert-kibana-plugin/releases/download/1.1.0/elastalert-kibana-plugin-1.1.0-7.5.0.zip
# [update elasticsearch to 7.6.2; also, fix issue idaholab#119](https://github.com/mmguero-dev/Malcolm/commit/b38ddb7f0d4c5b03e6f8ccad58a656644e113b19)
curl -L -O https://raw.githubusercontent.com/mmguero-dev/Malcolm/development/kibana/elastalert-kibana-plugin/server/routes/elastalert.js
mv elastalert.js elastalert-server-routes.js
mv elastalert-kibana-plugin-1.1.0-7.5.0.zip elastalert-kibana-plugin-1.1.0-7.6.0.zip
unzip elastalert-kibana-plugin-1.1.0-7.6.0.zip kibana/elastalert-kibana-plugin/package.json
sed -i "s/7\.5\.0/7\.6\.0/g" kibana/elastalert-kibana-plugin/package.json
mkdir -p kibana/elastalert-kibana-plugin/server/routes/
cp /tmp/elastalert-server-routes.js kibana/elastalert-kibana-plugin/server/routes/elastalert.js
zip elastalert-kibana-plugin-1.1.0-7.6.0.zip kibana/elastalert-kibana-plugin/package.json kibana/elastalert-kibana-plugin/server/routes/elastalert.js
rm -rf kibana
rm elastalert-server-routes.js
# (参考情報)elastalert-kibana-plugin-1.1.0-7.6.1.zip作成
cd /tmp
curl -L -O https://github.com/bitsensor/elastalert-kibana-plugin/releases/download/1.1.0/elastalert-kibana-plugin-1.1.0-7.5.0.zip
# [update elasticsearch to 7.6.2; also, fix issue idaholab#119](https://github.com/mmguero-dev/Malcolm/commit/b38ddb7f0d4c5b03e6f8ccad58a656644e113b19)
curl -L -O https://raw.githubusercontent.com/mmguero-dev/Malcolm/development/kibana/elastalert-kibana-plugin/server/routes/elastalert.js
mv elastalert.js elastalert-server-routes.js
mv elastalert-kibana-plugin-1.1.0-7.5.0.zip elastalert-kibana-plugin-1.1.0-7.6.1.zip
unzip elastalert-kibana-plugin-1.1.0-7.6.1.zip kibana/elastalert-kibana-plugin/package.json
sed -i "s/7\.5\.0/7\.6\.1/g" kibana/elastalert-kibana-plugin/package.json
mkdir -p kibana/elastalert-kibana-plugin/server/routes/
cp /tmp/elastalert-server-routes.js kibana/elastalert-kibana-plugin/server/routes/elastalert.js
zip elastalert-kibana-plugin-1.1.0-7.6.1.zip kibana/elastalert-kibana-plugin/package.json kibana/elastalert-kibana-plugin/server/routes/elastalert.js
rm -rf kibana
rm elastalert-server-routes.js
# (参考情報)elastalert-kibana-plugin-1.1.0-7.6.2.zip作成
cd /tmp
curl -L -O https://github.com/bitsensor/elastalert-kibana-plugin/releases/download/1.1.0/elastalert-kibana-plugin-1.1.0-7.5.0.zip
# [update elasticsearch to 7.6.2; also, fix issue idaholab#119](https://github.com/mmguero-dev/Malcolm/commit/b38ddb7f0d4c5b03e6f8ccad58a656644e113b19)
curl -L -O https://raw.githubusercontent.com/mmguero-dev/Malcolm/development/kibana/elastalert-kibana-plugin/server/routes/elastalert.js
mv elastalert.js elastalert-server-routes.js
mv elastalert-kibana-plugin-1.1.0-7.5.0.zip elastalert-kibana-plugin-1.1.0-7.6.2.zip
unzip elastalert-kibana-plugin-1.1.0-7.6.2.zip kibana/elastalert-kibana-plugin/package.json
sed -i "s/7\.5\.0/7\.6\.2/g" kibana/elastalert-kibana-plugin/package.json
mkdir -p kibana/elastalert-kibana-plugin/server/routes/
cp /tmp/elastalert-server-routes.js kibana/elastalert-kibana-plugin/server/routes/elastalert.js
zip elastalert-kibana-plugin-1.1.0-7.6.2.zip kibana/elastalert-kibana-plugin/package.json kibana/elastalert-kibana-plugin/server/routes/elastalert.js
rm -rf kibana
rm elastalert-server-routes.js
# (参考情報)elastalert-kibana-plugin-1.1.0-7.7.0.zip作成
cd /tmp
curl -L -O https://github.com/bitsensor/elastalert-kibana-plugin/releases/download/1.1.0/elastalert-kibana-plugin-1.1.0-7.5.0.zip
# [update elasticsearch to 7.7.0; also, fix issue idaholab#119](https://github.com/mmguero-dev/Malcolm/commit/b38ddb7f0d4c5b03e6f8ccad58a656644e113b19)
curl -L -O https://raw.githubusercontent.com/mmguero-dev/Malcolm/development/kibana/elastalert-kibana-plugin/server/routes/elastalert.js
mv elastalert.js elastalert-server-routes.js
mv elastalert-kibana-plugin-1.1.0-7.5.0.zip elastalert-kibana-plugin-1.1.0-7.7.0.zip
unzip elastalert-kibana-plugin-1.1.0-7.7.0.zip kibana/elastalert-kibana-plugin/package.json
sed -i "s/7\.5\.0/7\.7\.0/g" kibana/elastalert-kibana-plugin/package.json
mkdir -p kibana/elastalert-kibana-plugin/server/routes/
cp /tmp/elastalert-server-routes.js kibana/elastalert-kibana-plugin/server/routes/elastalert.js
zip elastalert-kibana-plugin-1.1.0-7.7.0.zip kibana/elastalert-kibana-plugin/package.json kibana/elastalert-kibana-plugin/server/routes/elastalert.js
rm -rf kibana
rm elastalert-server-routes.js
# (参考情報)elastalert-kibana-plugin-1.1.0-7.7.1.zip作成
cd /tmp
curl -L -O https://github.com/bitsensor/elastalert-kibana-plugin/releases/download/1.1.0/elastalert-kibana-plugin-1.1.0-7.5.0.zip
# [update elasticsearch to 7.7.1; also, fix issue idaholab#119](https://github.com/mmguero-dev/Malcolm/commit/b38ddb7f0d4c5b03e6f8ccad58a656644e113b19)
curl -L -O https://raw.githubusercontent.com/mmguero-dev/Malcolm/development/kibana/elastalert-kibana-plugin/server/routes/elastalert.js
mv elastalert.js elastalert-server-routes.js
mv elastalert-kibana-plugin-1.1.0-7.5.0.zip elastalert-kibana-plugin-1.1.0-7.7.1.zip
unzip elastalert-kibana-plugin-1.1.0-7.7.1.zip kibana/elastalert-kibana-plugin/package.json
sed -i "s/7\.5\.0/7\.7\.1/g" kibana/elastalert-kibana-plugin/package.json
mkdir -p kibana/elastalert-kibana-plugin/server/routes/
cp /tmp/elastalert-server-routes.js kibana/elastalert-kibana-plugin/server/routes/elastalert.js
zip elastalert-kibana-plugin-1.1.0-7.7.1.zip kibana/elastalert-kibana-plugin/package.json kibana/elastalert-kibana-plugin/server/routes/elastalert.js
rm -rf kibana
rm elastalert-server-routes.js
# (参考情報)elastalert-kibana-plugin-1.1.0-7.8.0.zip作成
cd /tmp
curl -L -O https://github.com/bitsensor/elastalert-kibana-plugin/releases/download/1.1.0/elastalert-kibana-plugin-1.1.0-7.5.0.zip
# [update elasticsearch to 7.8.0; also, fix issue idaholab#119](https://github.com/mmguero-dev/Malcolm/commit/b38ddb7f0d4c5b03e6f8ccad58a656644e113b19)
curl -L -O https://raw.githubusercontent.com/mmguero-dev/Malcolm/development/kibana/elastalert-kibana-plugin/server/routes/elastalert.js
mv elastalert.js elastalert-server-routes.js
mv elastalert-kibana-plugin-1.1.0-7.5.0.zip elastalert-kibana-plugin-1.1.0-7.8.0.zip
unzip elastalert-kibana-plugin-1.1.0-7.8.0.zip kibana/elastalert-kibana-plugin/package.json
sed -i "s/7\.5\.0/7\.8\.0/g" kibana/elastalert-kibana-plugin/package.json
mkdir -p kibana/elastalert-kibana-plugin/server/routes/
cp /tmp/elastalert-server-routes.js kibana/elastalert-kibana-plugin/server/routes/elastalert.js
zip elastalert-kibana-plugin-1.1.0-7.8.0.zip kibana/elastalert-kibana-plugin/package.json kibana/elastalert-kibana-plugin/server/routes/elastalert.js
rm -rf kibana
rm elastalert-server-routes.js
ディレクトリ構成
./elastalert/rules、./elastalert/rule_templates、./es/dataは chmodで777設定
ElastAlertのファイルは以下のサイトの物を使用。一部の値を修正
https://github.com/bitsensor/elastalert
/home/ユーザー名/dkwork/es/
|--docker-compose.yml
|--Dockerfiles
| |--Dockerfile.elastalert
|
|--es
| |--config
| | |--elasticsearch.yml
| |--data
|
|--kibana
| |--config
| | |--kibana.yml
| |--plugin
| | |--elastalert-kibana-plugin-1.1.0-7.7.0.zip
|
|--elastalert
| |--bin
| | |--elastalert-start.sh
| | |--elastic_search_status.sh
| |--config
| | |--config.json
| | |--elastalert-test.yaml
| | |--elastalert.yaml
| |--rule_templates
| |--rules
version: "3.7"
services:
elasticsearch:
container_name: elasticsearch
image: docker.elastic.co/elasticsearch/elasticsearch:7.7.0
ports:
- 9200:9200
- 9300:9300
environment:
- ES_JAVA_OPTS=-Xms256m -Xmx512m
- discovery.type=single-node
restart: always
volumes:
- ./es/data:/usr/share/elasticsearch/data
- ./es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:9200 || exit 1"]
interval: 30s
timeout: 15s
retries: 3
start_period: 180s
kibana:
container_name: kibana
image: docker.elastic.co/kibana/kibana:7.7.0
command: sh -c './bin/kibana-plugin list | grep elastalert-kibana-plugin@1.1.0; result=`echo $$?`; if [ $$result = 1 ]; then ./bin/kibana-plugin install file:///usr/share/kibana/work/elastalert-kibana-plugin-1.1.0-7.7.0.zip && exec /usr/local/bin/kibana-docker; else exec /usr/local/bin/kibana-docker; fi'
ports:
- 5601:5601
depends_on:
- elasticsearch
restart: always
volumes:
- ./kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml
- ./kibana/plugin:/usr/share/kibana/work
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:5601/api/status || exit 1"]
interval: 30s
timeout: 15s
retries: 3
start_period: 200s
elastalert:
container_name: elastalert
build:
context: .
dockerfile: Dockerfiles/Dockerfile.elastalert
image: elastalert:3.0.0-beta.0
ports:
- 3030:3030
- 3333:3333
depends_on:
- elasticsearch
- kibana
restart: always
volumes:
- ./elastalert/config/elastalert.yaml:/opt/elastalert/config.yaml
- ./elastalert/config/elastalert-test.yaml:/opt/elastalert/config-test.yaml
- ./elastalert/config/config.json:/opt/elastalert-server/config/config.json
- ./elastalert/rules:/opt/elastalert/rules
- ./elastalert/rule_templates:/opt/elastalert/rule_templates
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:3030 || exit 1"]
interval: 30s
timeout: 15s
retries: 3
start_period: 200s
FROM bitsensor/elastalert:3.0.0-beta.0
USER root
RUN apk update && \
apk add bash curl && \
rm -rf /var/cache/apk/*
ADD elastalert/bin/elastalert-start.sh /usr/local/bin/
ADD elastalert/bin/elastic_search_status.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/elastalert-start.sh
RUN chmod +x /usr/local/bin/elastic_search_status.sh
USER node
ENTRYPOINT ["/usr/local/bin/elastalert-start.sh"]
#!/bin/bash
set -e
if [ $# -gt 0 ]; then
ES_URL="$1"
elif [[ -n $ELASTICSEARCH_URL ]]; then
ES_URL="$ELASTICSEARCH_URL"
elif [[ -n $ES_HOST ]] && [[ -n $ES_PORT ]]; then
ES_URL="http://$ES_HOST:$ES_PORT"
else
ES_URL="http://elasticsearch:9200"
fi
until [[ "$(curl -fsSL "$ES_URL/_cat/health?h=status" | sed -r 's/^[[:space:]]+|[[:space:]]+$//g')" =~ ^(yellow|green)$ ]]; do
# printf '+' >&2
sleep 1
done
echo "Elasticsearch is up and healthy at "$ES_URL"" >&2
#!/bin/bash
set -e
echo "Giving Elasticsearch at $ELASTICSEARCH_URL time to start..."
elastic_search_status.sh
echo "Starting ElastAlert!"
npm start
cluster.name: "docker-cluster"
network.host: 0.0.0.0
discovery.zen.minimum_master_nodes: 1
server.name: kibana
server.host: "0"
elasticsearch.hosts: http://elasticsearch:9200
xpack.monitoring.ui.container.elasticsearch.enabled: true
# elastalert-kibana-plugin
elastalert-kibana-plugin.serverHost: elastalert
elastalert-kibana-plugin.serverPort: 3030
{
"appName": "elastalert-server",
"port": 3030,
"wsport": 3333,
"elastalertPath": "/opt/elastalert",
"verbose": false,
"es_debug": false,
"debug": false,
"rulesPath": {
"relative": true,
"path": "/rules"
},
"templatesPath": {
"relative": true,
"path": "/rule_templates"
},
"es_host": "elasticsearch",
"es_port": 9200,
"writeback_index": "elastalert_status"
}
es_hostの値を「localhost」から「elasticsearch」に変更
# NOTE: This config is used when testing a rule
# The elasticsearch hostname for metadata writeback
# Note that every rule can have its own elasticsearch host
es_host: elasticsearch
# The elasticsearch port
es_port: 9200
# This is the folder that contains the rule yaml files
# Any .yaml file will be loaded as a rule
rules_folder: rules
# How often ElastAlert will query elasticsearch
# The unit can be anything from weeks to seconds
run_every:
seconds: 5
# ElastAlert will buffer results from the most recent
# period of time, in case some log sources are not in real time
buffer_time:
minutes: 1
# Optional URL prefix for elasticsearch
#es_url_prefix: elasticsearch
# Connect with TLS to elasticsearch
#use_ssl: True
# Verify TLS certificates
#verify_certs: True
# GET request with body is the default option for Elasticsearch.
# If it fails for some reason, you can pass 'GET', 'POST' or 'source'.
# See http://elasticsearch-py.readthedocs.io/en/master/connection.html?highlight=send_get_body_as#transport
# for details
#es_send_get_body_as: GET
# Option basic-auth username and password for elasticsearch
#es_username: someusername
#es_password: somepassword
# The index on es_host which is used for metadata storage
# This can be a unmapped index, but it is recommended that you run
# elastalert-create-index to set a mapping
writeback_index: elastalert_status
# If an alert fails for some reason, ElastAlert will retry
# sending the alert until this time period has elapsed
alert_time_limit:
days: 2
es_hostの値を「localhost」から「elasticsearch」に変更
# The elasticsearch hostname for metadata writeback
# Note that every rule can have its own elasticsearch host
es_host: elasticsearch
# The elasticsearch port
es_port: 9200
# This is the folder that contains the rule yaml files
# Any .yaml file will be loaded as a rule
rules_folder: rules
# How often ElastAlert will query elasticsearch
# The unit can be anything from weeks to seconds
run_every:
seconds: 5
# ElastAlert will buffer results from the most recent
# period of time, in case some log sources are not in real time
buffer_time:
minutes: 1
# Optional URL prefix for elasticsearch
#es_url_prefix: elasticsearch
# Connect with TLS to elasticsearch
#use_ssl: True
# Verify TLS certificates
#verify_certs: True
# GET request with body is the default option for Elasticsearch.
# If it fails for some reason, you can pass 'GET', 'POST' or 'source'.
# See http://elasticsearch-py.readthedocs.io/en/master/connection.html?highlight=send_get_body_as#transport
# for details
#es_send_get_body_as: GET
# Option basic-auth username and password for elasticsearch
#es_username: someusername
#es_password: somepassword
# The index on es_host which is used for metadata storage
# This can be a unmapped index, but it is recommended that you run
# elastalert-create-index to set a mapping
writeback_index: elastalert_status
# If an alert fails for some reason, ElastAlert will retry
# sending the alert until this time period has elapsed
alert_time_limit:
days: 2
「Save」ボタンをクリックすると elastalert/rulesディレクトリに
Rule nameのyamlファイル(ここではtest.yaml)が作成されます。
Delete ruleボタンを押すと確認ダイアログが出ますので
OKを押すとelastalert/rulesディレクトリから該当の
ルールファイルが削除されます。
削除確認ダイアログ
Praeco
メンテナー:John Susek、Naoyuki Sano
ライセンスは、GNU General Public License v3.0
1.8.18 (2024/01/04)
Praeco (ElastAlert GUI) を Helm で Kubernetes にインストールする (Beta)
Praeco + ElastAlert2.0 + ES7.x 構成の不具合対応方法
Praeco (ElastAlert GUI)でElasticsearchログアラートする
Praeco、ElastAlertServer、Hiveなど(英語)
・Praecoでは、ElastAlert Kibana Pluginの開発元のBitSensorが開発したElastAlert ServerをForkしたjohnsusek/elastalert-serverを使用している。
・Praecoを使用することでGUIベースでElastAlertを操作して、
Elasticsearchのログからアラート通知設定ができる。
・アラートルール設定
・アラート履歴
→ 1.0.1では何も表示されません。1.1.0で修正されました(2020/6/17確認)
・クエリ履歴
・一定期間のアラートルールの無効化
・Elasticsearch 7対応(0.4.2~)
・アラート通知先はSlack、Email、HTTP POST、Telegram、Jira、MS Teams、Mattermost、Command、Line Notify、Gitter、Zabbix、SNS、Twilio、PagerTree、Exotel、GoogleChat、Stomp、VictorOps、ServiceNow、Chatwork、Discord、TheHive、Alerta, Datadog、AWS SES、Rocket.Chatの設定がある
・Rule Typeは、Percentage MatchとSpike Aggregationは対応しない。
Add "Percentage Match" rule type #82
Add "Spike Aggregation" rule type #228
・ElastAlert Serverが、Amazon Elasticsearch Serviceの接続に対応できていない。
Dockerイメージ
Dockerイメージ名 | タグ | Praeco | 備考 |
---|---|---|---|
praecoapp/praeco | latest | 1.8.11 |
mkdir Dockerfiles
touch Dockerfiles/Dockerfile.elastalert
mkdir -p es/config
touch es/config/elasticsearch.yml
mkdir -p es/data
chmod 777 es/data
mkdir -p kibana/config
touch kibana/config/kibana.yml
mkdir -p praeco/bin
touch praeco/bin/elastalert-start.sh
touch praeco/bin/elastic_search_status.sh
mkdir -p praeco/config
mkdir -p praeco/nginx_config
mkdir -p praeco/public
mkdir -p praeco/public/js
mkdir -p praeco/rule_templates
chmod 777 praeco/rule_templates
mkdir -p praeco/rules
chmod 777 praeco/rules
cd praeco/rules
wget https://raw.githubusercontent.com/johnsusek/praeco/master/rules/BaseRule.config
cd ../
cd praeco/config
wget https://raw.githubusercontent.com/johnsusek/praeco/master/config/api.config.json
wget https://raw.githubusercontent.com/johnsusek/praeco/master/config/elastalert.yaml
cd ../
cd nginx_config
wget https://raw.githubusercontent.com/johnsusek/praeco/master/nginx_config/default.conf
wget https://raw.githubusercontent.com/johnsusek/praeco/master/nginx_config/nginx.conf
cd ../
cd public
wget https://raw.githubusercontent.com/johnsusek/praeco/master/public/praeco.config.json
cd ../../
docker-compose up -d
/home/ユーザー名/dkwork/es/
|--docker-compose.yml
|--Dockerfiles
| |--Dockerfile.elastalert
|--es
| |--config
| | |--elasticsearch.yml
| |--data
|
|--kibana
| |--config
| | |--kibana.yml
|
|--praeco
| |--bin
| | |--elastalert-start.sh
| | |--elastic_search_status.sh
| |--config
| | |--api.config.json
| | |--elastalert.yaml
| |--public
| | |--praeco.config.json
| |--rule_templates
| |--rules
| | |--BaseRule.config
FROM johnsusek/elastalert-server:latest
USER root
RUN apk update && \
apk add bash curl && \
rm -rf /var/cache/apk/*
ADD praeco/bin/elastalert-start.sh /usr/local/bin/
ADD praeco/bin/elastic_search_status.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/elastalert-start.sh
RUN chmod +x /usr/local/bin/elastic_search_status.sh
USER node
ENTRYPOINT ["/usr/local/bin/elastalert-start.sh"]
#!/bin/bash
set -e
if [ $# -gt 0 ]; then
ES_URL="$1"
elif [[ -n $ELASTICSEARCH_URL ]]; then
ES_URL="$ELASTICSEARCH_URL"
elif [[ -n $ES_HOST ]] && [[ -n $ES_PORT ]]; then
ES_URL="http://$ES_HOST:$ES_PORT"
else
ES_URL="http://elasticsearch:9200"
fi
until [[ "$(curl -fsSL "$ES_URL/_cat/health?h=status" | sed -r 's/^[[:space:]]+|[[:space:]]+$//g')" =~ ^(yellow|green)$ ]]; do
# printf '+' >&2
sleep 1
done
echo "Elasticsearch is up and healthy at "$ES_URL"" >&2
#!/bin/bash
set -e
echo "Giving Elasticsearch at $ELASTICSEARCH_URL time to start..."
elastic_search_status.sh
echo "Starting ElastAlert!"
npm start
cluster.name: "docker-cluster"
network.host: 0.0.0.0
discovery.zen.minimum_master_nodes: 1
server.name: kibana
server.host: "0"
elasticsearch.hosts: http://elasticsearch:9200
xpack.monitoring.ui.container.elasticsearch.enabled: true
version: "3.7"
services:
elasticsearch:
container_name: elasticsearch
image: docker.elastic.co/elasticsearch/elasticsearch:7.7.0
ports:
- 9200:9200
- 9300:9300
environment:
- ES_JAVA_OPTS=-Xms256m -Xmx512m
- discovery.type=single-node
restart: always
volumes:
- ./es/data:/usr/share/elasticsearch/data
- ./es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:9200 || exit 1"]
interval: 30s
timeout: 15s
retries: 3
start_period: 180s
kibana:
container_name: kibana
image: docker.elastic.co/kibana/kibana:7.7.0
ports:
- 5601:5601
depends_on:
- elasticsearch
restart: always
volumes:
- ./kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:5601/api/status || exit 1"]
interval: 30s
timeout: 15s
retries: 3
start_period: 200s
elastalert:
container_name: elastalert
build:
context: .
dockerfile: Dockerfiles/Dockerfile.elastalert
image: elastalert-server:1.1.0
ports:
- 3030:3030
- 3333:3333
depends_on:
- elasticsearch
restart: always
volumes:
- ./praeco/config/elastalert.yaml:/opt/elastalert/config.yaml
- ./praeco/config/api.config.json:/opt/elastalert-server/config/config.json
- ./praeco/rules:/opt/elastalert/rules
- ./praeco/rule_templates:/opt/elastalert/rule_templates
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:3030 || exit 1"]
interval: 30s
timeout: 15s
retries: 3
start_period: 200s
praeco:
container_name: praeco
image: johnsusek/praeco:latest
ports:
- 8080:8080
depends_on:
- elastalert
restart: always
volumes:
- ./praeco/public/praeco.config.json:/var/www/html/praeco.config.json
healthcheck:
test: ["CMD-SHELL", "curl -f http://localhost:8080 || exit 1"]
interval: 30s
timeout: 15s
retries: 3
start_period: 200s
以下のファイルはPraecoのサイトの物を使用
https://github.com/johnsusek/praeco
・praeco/config/api.config.json
・praeco/config/elastalert.yaml
・praeco/public/praeco.config.json
・praeco/rules/BaseRule.config
OpenSearch
2.4.1 (2022/12/03)
開発元:AWS
AmazonはElasticsearchのフォークをOpenSearchにブランド変更
AWS、ElasticsearchとKibanaのフォークによる「OpenSearch」プロジェクトを発表。Elasticとの溝は埋まらないまま
ElasticのクライアントライブラリがAWS OpenSearchへの接続を排除。AWSは仕方なくクライアントライブラリのフォークを発表
Open Distro for Elasticsearch
Open Distro for Elasticsearch development has moved to OpenSearch. The ODFE plugins will continue to work with legacy versions of Elasticsearch OSS, but we recommend upgrading to OpenSearch to take advantage of the latest features and improvements.
■google翻訳
Elasticsearch開発用のOpenDistroはOpenSearchに移動しました。 ODFEプラグインはElasticsearchOSSのレガシーバージョンで引き続き機能しますが、最新の機能と改善点を利用するには、OpenSearchにアップグレードすることをお勧めします。
https://opendistro.github.io/for-elasticsearch-docs/
開発元:AWS
ライセンスは、Apache License 2.0
「Elasticsearch」の独自ディストリビューション
1.13.2 (2021/04/07。ElastcsearchとKibanaのバージョンは7.10.2)
amazon/opendistro-for-elasticsearch
amazon/opendistro-for-elasticsearch-kibana
画面を動かしてみて気づいた点(バージョン1.3.0)
・ログイン画面がある
初期ユーザー/パスワードは、admin/admin
・X-PackのIndex managementのように画面でIndexの削除するのは、現在のバージョンではできない?
・X-PackのIndex Lifecycle Management(ILM)のような機能は設定するyamlを画面で編集できる機能のようです。
・アラートの設定を画面でできる
Amazon Elasticsearch ServiceのAlertingを使ってAWS ConsoleLoginを監視してみた
・CSV/PDFファイルに出力機能は、まだ実装されていない
PDF Generation and reporting #16
以下は、まだ未確認
・Elastic社のKibana 7.4.2で作成したダッシュボードをImportできるか。また7.4.2より上のバージョンの場合はどうなるか。
・FluentdのElastcsearchプラグインの設定で、Index Lifecycle Management(ILM)に関する設定は利用できないはずなので設定がある場合はコメントにして動作確認する必要がありそう
・FluentdのX-Packに関するプラグインはアンインストールして動作確認する必要がありそう
・Fluentd、Metricbeat、Filebeat、Heartbeat、Logstashは、まだ情報が少ないので情報をもとに動く設定を調査して使用するかよく検討する必要がありそう。
Security
https://opendistro.github.io/for-elasticsearch-docs/docs/security-configuration/
https://opendistro.github.io/for-elasticsearch-docs/docs/security-access-control/
https://opendistro.github.io/for-elasticsearch-docs/docs/security-audit-logs/
Alerting
https://opendistro.github.io/for-elasticsearch-docs/docs/alerting/
SQL
https://opendistro.github.io/for-elasticsearch-docs/docs/sql/
Index State Management(ISM)
X-PackのIndex Lifecycle Management(ILM)のような機能
https://opendistro.github.io/for-elasticsearch-docs/docs/ism/
KNN
https://opendistro.github.io/for-elasticsearch-docs/docs/knn/
Anomaly Detection (Alpha)
https://opendistro.github.io/for-elasticsearch-docs/docs/ad/
Performance Analyzer
https://opendistro.github.io/for-elasticsearch-docs/docs/pa/
Root Cause Analysis (Alpha)
https://opendistro.github.io/for-elasticsearch-docs/docs/rca/
Fluentd
Fluentd support
Self-signed Certificate verify failed (Fluend + Open Distro for Elasticsearch) #597
Beats
Trying out Open Distro for Elasticsearch with LogstashFilebeat connection issue
Integration with beats
Unable to index filebeat logs with LogStash #136
filebeat 6.5.4 output to elasticsearch #21
Metricbeat User Permission
Configuring OSS Beats (File/Metric) with opendistro
Alerting using metricbeat parameters #13
Logstash intergration
新登場 – Open Distro for Elasticsearch
AWSのOpen Distro for Elasticsearchに異議を唱えるベンダたち
AWSがElasticsearchの新ディストリビューションをApacheライセンスで公開
Open Distro for Elasticsearchを作ってみた!
Open Distro for Elasticsearch Kickstart guide
[アップデート] Amazon Elasticsearch Service でアラート機能がサポートされました
Grafana
読み方は、グラファナ
開発元:Grafana Labs
ライセンスは、Apache License 2.0
9.3.2 (2022-12-16)
5.2.0からElasticsearch内のデータに対するアラート通知が可能になっている。
[Alerting]
(https://grafana.com/docs/grafana/latest/alerting/)
Alert Notifications
DingDing
Discord
Email
Google Hangouts Chat
Hipchat
Kafka
Line
Microsoft Teams
OpsGenie
Pagerduty
Prometheus Alertmanager
Pushover
Sensu
Slack
Squadcast
Telegram
Threema
VictorOps
Webhook
Creating alert that can send SNMP Trap as a notification
That is not supported right now
Email
Grafanaでアラート時通知を設定する
Grafana Eメール通知設定
Grafanaのメール設定で詰まった話
Grafana でメール通知
Slack
BLE経由で取得したデータの 可視化(Grafana) & アラート通知(Slack) を実施
Grafana で Elasticserch に蓄積したサーバーメトリクスの可視化+アラートのSlack通知環境を構築してみた (ニフクラ)
Prometheus+Grafanaでパフォーマンス監視をしています
Discord
Grafana5.2.0+でElasticsearch内のデータに対するAlertingを実行し、Discordに通知する
Teams
Prometheusのすすめ - Grafana で AlertをTeamsに通知するのは簡単です
webhook
Prometheus2とGrafana6によるシステム監視 GrafanaのAlertを使う
Elastalert UI
ライセンスは、Apache License 2.0
メンテナンス終了。GitHubの最終更新日は2018/02/12