Elastic CloudにおけるKibanaダッシュボードの自動送信について #Elastic #Elasticsearch #ElasticCloud #Kibana

この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
皆様、Elasticしてますか? ^^
今回は、Elastic CloudでKibanaダッシュボードを定期的に自動送信するお話です。
Elasticの有償機能をX-Packと呼んでいた頃からある機能ですが
これをElastic Cloud環境で使ってみると意外とこれまでセルフマネージドで
Elastic Stackを構築していた時と勝手が違いました。そのナレッジを共有できればと思います!
Watcherとは?

このロゴをご存知でしょうか?
はい、X-Packの機能の1つでWatcherのロゴになります。
Elasticsearchに格納されているデータを検索し、条件に応じてアラート通知を行います。
まだ現役ですが、7.11以降では新しいアラートの仕組み(Kibana Alerting)が登場しています。
Kibanaのダッシュボードを自動送信する場合は、このWatcherの機能を活用します。
【参考】
・ Watcherとは
・ Kibana Alertingとは
・ What’s new in Kibana 7.11.0: Alerting is now generally available
利用環境
| 項目 | 内容 |
|---|---|
| Elastic Cloud | 7.12.1 |
今回実現したかったこと
- 毎月1日に前月分の集計データをKibanaダッシュボードでSlackに送りたい。
- ダッシュボードの通知先はメールにしかできないため、メールからSlackに転送しました。
【参考】
・ Slackにメールを送信する
実施手順
- 以下の設定手順で実施しました。
- メールアドレスの登録
- ダッシュボードのURL取得
- ロールとユーザの作成
- Watcherの作成
1. メールアドレスの登録
- Elastic Cloud Loginで管理コンソールにログインします。
- ログイン後、画面右上からAccount & Billingを開きます。

- Contactsタブを開きます。
- Monitoring email whitelistでAdd new emailで通知したいメールアドレスを入れます。
- Addボタンを押します。

- 数分後に登録したメールアドレス宛に確認メールが届きます。
- Confirm Email Whitelistingを押すと登録が完了します。

【補足】
・ 登録されているメールアドレスを確認する方法はないです。
・ 一度登録解除してしまうと再登録する方法はないです。
【参考】
・ Enable Watcher
2. ダッシュボードのURL取得
- Kibanaにログインします。
- 左上のメニューからDashboardを選択し、対象のダッシュボードを開きます。
- 右上のShareを開き、Copy POST URLをクリックします。

- 手順4でURLを利用します。エディタに一時的に貼り付けておきましょう。
【参考】
・ Automating report generation
3. ロールとユーザの作成
- まず先にロールを作成します。
- Kibanaの左上のメニューからStack Managementを開きます。
- [Security] > [Roles]を開き、Create roleをクリックします。
- [Role name]は好きな名前を入力します。
- [Indices]はダッシュボードで参照しているもの指定します。
- [Privillages]は参照のみで良いので、readを指定します。
- 下部のCreate roleを押してロール作成を完了します。

- WatcherでPDF化に必要なKibanaログインユーザを作成します。
- [Security] > [Users]を開き、Create userをクリックします。
- [Username]は好きな名前を入力し、パスワードをセットします。
- [Roles]には先ほど作成したロールとreporting_userを指定します。
- 下部のCreate userを押してロール作成を完了します。

【参考】
・ Reporting and security
4. Watcherの作成
- Kibanaの左メニューからStack Managementを開きます。
- [Alerts and Insights] > [Watcher]を開き、
- Create advanced watchをクリックします。

- Watch JSONに下記のJSONテキストを貼り付けます。
{
"trigger": {
"schedule": {
"monthly": [
{
"on": [
1
],
"at": [
"00:00"
]
}
]
}
},
"input": {
"none": {}
},
"condition": {
"always": {}
},
"actions": {
"email_gmail": {
"email": {
"profile": "gmail",
"attachments": {
"[ダッシュボード名].pdf": {
"reporting": {
"url": "[Copy POST URLを貼りつける]",
"retries": 1,
"interval": "5m",
"auth": {
"basic": {
"username": "reporting-user",
"password": "[ユーザパスワード]"
}
}
}
}
},
"to": [
"[登録したメールアドレス]"
],
"subject": "[メールの件名]",
"body": {
"text": "[メールの本文]"
}
}
}
}
}
- 下部のCreate watchを押します。
- 以上で完了です。あとは月初が来るのを待つだけです。
【参考】
・ Watcher monthly schedule
注意点
- 今回利用してみて、IP Traffic Filterとの併用ができないという問題がありました。
- この仕組みはElasticsearch上のWatcherがKibanaにログインする必要があります。
- IP Traffic FilterがWatcherのKibanaログインを遮断してしまうようです。
- もし通信を許可するには該当クラウドの利用しているリージョンのIP範囲を全て登録することになります。

【参考】
・ IP Traffic Filter
まとめ
いかがでしたでしょうか?
Elastic Cloudの場合、利用するメールアドレスをelasticsearch.ymlではなく
クラウドの管理コンソールで設定するところがセルフマネージド版との違いかと思います。
またセキュリティを高めるためのIP Traffic Filterとの併用ができないのは痛いですね。
おそらく、今後はKibana Alertingをメインにしていくため、改修しないのかもしれないですね。。
