
シェア:
Jẹ́káyinOlúwa is a software craftsman and product manager passionate about technology and its impact on people. He works on product management, backend development, DevOps, technical writing, and community strategy. He enjoys dealing in the intersection of software, design, and human interaction. He likes reading and music.
VonageとGrafanaを統合してSMSで通知を受け取る
所要時間:8 分
はじめに
Grafanaは、開発者がクラウド上のアプリケーションやシステムからメトリクスを追跡するために使用できる、オープンなマルチプラットフォーム観測可能プラットフォームです。それは、チャート、グラフ、およびアラートでメトリクスから分析と可視化を生成します。この記事では、Vonage Messages API を使用して SMS で通知を受け取るために、Vonage を Grafana のセットアップと統合する方法を紹介します。
使用言語はPythonである。提案された記事を通じて共有される知識は、システム内のアクティビティや異常な発生を通知するためにGrafanaに依存しているDevOpsチーム、SRE、システム管理者に役立つだろう。
目次
ステップ1:Grafanaスタックのセットアップ
Grafanaでは、ローカルマシンやサーバー上に独自のGrafanaインスタンスをセットアップすることができます。また、クラウド上でGrafanaを使用することもできます。 サインアップを使用することもできます。そのため、Grafanaインスタンスはクラウドベースで管理されるため、インストールやメンテナンスを行う必要はありません。
ダッシュボードの作成
このチュートリアルでは、組み込みの Grafana -- データソースを使用して簡単なダッシュボードを構築します。新しいGrafanaユーザーのために、Grafanaは新しいダッシュボードを作成する際にあなたを導くために、初めてのワークフローを促します。プロンプトの手順またはこの記事のセクションで強調表示されている手順に従うことができます。すでにGrafanaに慣れている場合は、このセクションをスキップできます。
左側メニューのダッシュボードをクリックして、ダッシュボードのページに移動します。
をクリックします。 新規作成ボタンをクリックすると、オプションのドロップダウンメニューが表示されます。 新しいダッシュボード
New dashboard(新規ダッシュボード)ページで、+ Add Visualization(可視化の追加)をクリックして、データ・ソースを選択するためのモデルを開きます。
データソースモーダルを選択し、右側の -- Grafana -- オプションを選択します。
select-data-source.png
を選択すると -- を選択するとオプションを選択すると、2つのことが起こります:
- Grafana configures your query
- Grafana generates the Random Walk dashboard.これで、下図の「ダッシュボードを更新」アイコンをクリックして、データ・ソースを照会できるようになります。
create-contact-point.png
次に、右上隅にある[保存]をクリックします。保存する前に、ダッシュボードの名前を入力するよう求められます。
これで、Grafanaアカウントに基本的なダッシュボードがセットアップされたはずです。データソースを追加して他のプロジェクトのダッシュボードを作成することで、Grafanaをさらに探求することができます。
ステップ2:ロジックを実装するためのPythonアプリケーションの作成
をインストールする必要があります。 フラスコをインストールする必要があります。ターミナルで以下のコマンドを実行することでFlaskをインストールできます。
最初のPython関数を書く
ここで、Grafanaアラートを受信するためのFlask webhookをセットアップします。
notify.pyというファイルを作成し、以下のPythonコードを追加する。
from flask import Flask, request
app = Flask(__name__)
@app.route("/grafana-webhook", methods=["POST"])
def grafana_webhook():
if request.method == "POST":
data = request.json
alert_description = data["alerts"][0]["annotations"]["desc"]
print(alert_description)
return "Webhook received!"
if __name__ == "__main__":
app.run(host="", port=3000, debug=True)上記のコードでは
ルートを作成した。
POSTルートを作成した、/grafana-webhookルートはPOSTリクエストを受け取るためのPOSTエンドポイントであるgrafana_webhook関数を装飾します。
リクエストペイロードから
alert_descriptionリクエストペイロードから抽出された属性の1つであるalert_summaryは、実行時にprint()関数を使ってコンソールに出力される。
アプリケーションの実行にポート3000を指定しました。こうすることで、アプリケーションのポートと Ngrok が実行されるポートを対応付けることができます。そうすれば、アプリケーションは Ngrok サーバー経由で提供されます。
アプリケーションをローカルで実行するには、ターミナルで以下のbashコマンドを使用する:
開発サーバーがアクティブであることを示す、以下のようなターミナル出力が得られるはずだ:
Ngrokサーバーのセットアップ
次に、Pythonアプリケーションをテストするための軽量オンラインサーバー、Ngrokをインストールします。Ngrokをインストールすることで、Pythonスクリプトを公共のインターネット経由で提供できるようになります。公式 ウェブサイトのインストール手順に従ってください。
以下のターミナル・コマンドでNgrokを実行すれば、軽量サーバーをスピンアップしてくれる:
上記のコマンドを実行すると、軽量サーバーが起動し、その公開URLがターミナルに以下のように表示される:
つまり、Pythonスクリプトに基づくWebhookエンドポイントは以下のようになります:
これはGrafanaがPythonアプリケーションにWebhook通知を送信するための専用URLになります。
PythonアプリケーションとGrafanaを接続する
PythonアプリケーションとGrafanaを接続するには、Grafanaがアプリケーションにアラートを送信できるWebhook URLを指定します。この目的のためにWebhook URLを持っているので、それをGrafanaダッシュボードのAlertsコンタクトポイントに追加します。次の手順に従って、アプリケーションのWebhookでGrafanaアラートを設定します。
Grafanaのメインメニューから アラートとIRM > アラートを選択する。
alerting-menu.png
クリック コンタクトポイントをクリックします。 コンタクトポイントページに移動します。をクリックします。 + コンタクトポイントの追加ボタンをクリックします。これで コンタクトポイントの作成ページに移動します。
contact-points.png
希望する 名前を入力し ウェブフックを選択します。 インテグレーションを選択します。専用のWebhook URLを URLフィールドに入力します。
contact-point-setup.png
をクリックしてください。 ボタンをクリックします。ボタンをクリックして、コンタクトポイントをテストするためのプロンプトに従ってください。テスト中は、定義済みのオプションではなく、カスタム通知オプションを使用してみてください。そうすることで、エンドポイントのコードが、ターミナルで表示する通知の概要と説明を正しく解析できるようになります。テストでは、ダミーの通知をあなたのウェブフックURLに送信します。通知が正常に送信されると、成功アラートが表示されます、 "テストアラートが送信されました"という成功アラートが表示されます。
test-alert-sent.png
をクリックします。 コンタクトポイントの保存ボタンをクリックして、コンタクトポイントを保存します。
ステップ 3: メッセージ API SMS 通知用 Vonage アカウントの設定
VonageアプリケーションURLの定義
Ngrok が生成した URL にステータスと受信エンドポイントを追加することができます。以下のようになります:
ステータス URL: https://d5fs-104-25-63-145.eu.ngrok.io/webhooks/message-status
インバウンドURL: https://d5fs-104-25-63-145.eu.ngrok.io/webhooks/inbound-message
上記のURLは、次のセクションでMessages API用にVonageアカウントを設定する際に必要になりますので、メモしておいてください。
Vonageアプリケーションの設定
必要なもの サインアップまだアカウントをお持ちでない場合は、Vonageアカウントにサインアップする必要があります。
Vonage経由でユーザーにSMSメッセージを送信するには、Messages APIで設定されたVonageアカウントが必要です。この場合、ユーザは Grafana のアップデートを通知したいチームメイトかもしれません。
以下の手順で、Messages API用にVonageアカウントを設定します:
VonageダッシュボードのメインメニューからAPI設定メニューに移動して API設定ページに移動します。API設定
SMS設定セクションで、Messages APIを選択します。その他の設定はデフォルトのままにしてください。
をご覧ください。 アプリケーションページにアクセスし + アプリケーションの作成ボタンをクリックしてアプリケーションを作成します。
に名前を入力します。 名前フィールドに名前を入力します。をクリックする。 公開鍵と秘密鍵を生成するボタンをクリックします。秘密鍵ファイル
private.keyがローカル・マシンにダウンロードされます。選択 メッセージを選択します。 機能セクションで
Ngrokのセットアップ時に指定したInbound URLとStatus URLを入力します。
をクリックします。 新規アプリケーションの作成ボタンをクリックして作成を完了します。その後、アプリケーションの概要ページにリダイレクトされ、Vonage番号をアプリケーションにリンクすることもできます。
メモ以下をチェックしてください。 Vonage CLIで番号を管理するをご覧ください。
必ず アプリケーションID次のセッションで必要になるためです。また private.keyファイルがあるローカルパスも記録しなければなりません。これらは以下のようでなければなりません:
アプリケーションID 53a2ed68-f2d8-498c-9b17-032669e3bf90
秘密鍵のパス: /Users/Downloads/private.key
ユーザーにSMSを送信する
このサブセクションでは、Grafana webhook 通知を SMS 経由でユーザーに送信します。Pythonアプリケーションでこの機能を使用するには、Vonage Python SDKを使用できます。以下のbashコマンドを使用して、ローカルマシンにVonage Python SDKをインストールします。
次に、以下のコードをPythonスクリプトに追加する:
...
import vonage
def grafana_webhook():
if request.method == "POST":
...
client = vonage.Client(
application_id=YOUR_VONAGE_APPLICATION_ID,
private_key=YOUR_APPLICATION_PRIVATE_KEY_PATH,
)
notification = client.messages.send_message(
{
"channel": "sms",
"message_type": "text",
"from": YOUR_VONAGE_NUMBER,
"to": DESTINATION_PHONE_NUMBER,
"text": alert_description,
}
)
return "Webhook successfully delivered as a notification message."上記のコードでは
Python SDKクライアントを次の行で初期化しました。
client = vonage.Client().をYOUR_VONAGE_APPLICATION_IDとYOUR_APPLICATION_PRIVATE_KEY_PATHを アプリケーションIDと 秘密鍵パスを指定します。その後
send_message()関数を使ってnotification = client.messages.send_message()で初期化されたクライアントにメッセージを送信します:"チャンネル":はメッセージモード、SMS。
"message_type":送信するメッセージのテキスト形式。
"from":メッセージの送信者。ここではVonage番号を使用できます。YOUR_VONAGE_NUMBERを購入した番号に置き換えてください。
"宛先":SMSを受信する受信者、電話番号。DESTINATION_PHONE_NUMBERを受信者の番号に置き換える。
"text":送信するメッセージの内容で、Grafanaからのアラート説明文字列である。
コードが実行されたときの動作を反映させるために、return文を修正したのですね。
完全なコードは以下の通り:
from flask import Flask, request
import vonage
app = Flask(__name__)
@app.route("/grafana-webhook", methods=["POST"])
def grafana_webhook():
if request.method == "POST":
data = request.json
alert_description = data["alerts"][0]["annotations"]["desc"]
print(alert_description)
client = vonage.Client(
application_id=YOUR_VONAGE_APPLICATION_ID,
private_key=YOUR_APPLICATION_PRIVATE_KEY_PATH,
)
notification = client.messages.send_message(
{
"channel": "sms",
"message_type": "text",
"from": YOUR_VONAGE_NUMBER,
"to": DESTINATION_PHONE_NUMBER,
"text": alert_description,
}
)
return "Webhook successfully delivered as a notification message."
if __name__ == "__main__":
app.run(host="", port=3000, debug=True) アプリケーションのテスト
コードをテストし、セットアップが機能することを確認するには、次のページに移動してください。 コンタクトポイントに移動し、Grafanaダッシュボードの コンタクトポイントの編集ボタンを選択します。これは次の画像に示されています。
edit-contact-button.png
でテストウェブフック通知を送信できます。 テストコンタクトポイントモーダルでテストウェブフック通知を送信できます。
test-contact-point.png
を選択してください。 カスタムタブを選択し、カスタムメッセージをテスト送信します。
お好きな要約と説明のテキストを入力してください。
下にスクロールして テスト通知の送信ボタンをクリックします。
受信者は以下のスクリーンショットのようなテスト・メッセージを受け取るはずだ:
alert-from-grafana.png
概要
この記事では、Vonage Messages API を使用してユーザーにアラートを取得および送信するために Grafana webhook 通知システムを使用するガイドを提供しました。Grafana ダッシュボードのセットアップ、Flask による Python webhook の作成、Messages API で動作する Vonage アプリケーションの構成について説明しました。
ご質問やフィードバックがありましたら Vonage開発者向けSlackに参加するか X以前はTwitterとして知られていました。また次回もお楽しみに!
その他のリソース
シェア:
Jẹ́káyinOlúwa is a software craftsman and product manager passionate about technology and its impact on people. He works on product management, backend development, DevOps, technical writing, and community strategy. He enjoys dealing in the intersection of software, design, and human interaction. He likes reading and music.