こんにちは。k.takeiです。
Oracle Cloud Infrastructure Advent Calendar 2024のDay23の記事です。
本記事ではアラームのメッセージをFunctionsに連携する方法について紹介いたします。
今まで、アラームの通知には電子メールを使用していたのですが、Functionsを使用してPOSTなどができれば外部のアプリケーションと連携ができるようになるので試してみました。
今回の内容について
今回はOCI上にコンピュートインスタンスを構築し、モニタリング機能で監視をしました。
そしてアラーム機能を試したいのでわざと発報させ、Functionsに連携をしたという内容になっています。
コンピュートインスタンスの構築については本記事の対象外とさせていただきます。
各サービスについては下記を参照してください。
・OCIモニタリング機能概要
・OCI Funtions 概要
モニタリングのアラーム定義を設定する
今回のメインはアラーム機能とFunctionsの連携なので、Functionsの作成に関する細かい情報は下記を参照してください。
まずは監視および管理 > モニタリング > アラーム定義に遷移します。
(なんか画面が変わっている。。。)
Create Alarmをクリックすると作成画面に遷移します。
設定についてはOCIモニタリング機能概要に記載してありますので、そちらを参照してください。
DestinationでFunctionsを指定しています。
Topicの設定については開発者サービス > アプケーション統合 > 通知から遷移ができます。
トピックの作成ボタンをクリックすると作成画面が出てきますので、名前と説明欄を入力して作成ボタンをクリックします。
作成したトピックをクリックすると詳細画面に遷移しますので、そこでサブスクリプションの作成ボタンをクリックします。
今回はFunctionsを使用するので、ファンクションを選択します。
そのまま連携したいFunctionsを選択して、作成ボタンをクリックします。
これでアラームが発報した場合、Functionsが起動するようになりました。
FunctionsからNginxへアラームの内容をPOSTしてみる
監視対象で用意したコンピュートインスタンスにNginxをインストールし、access.logにPOSTされた内容が出力されるように設定しました。
そこに向かってアラームの内容をPOSTしてみた結果が下記となります。
文字化けしてしまっていますね。。。
下記はFunctionsのログです。
アラームからの値はしっかり受け取れていそうで安心しました。
今回使用したpythonコードはこちらです。
import io
import json
import logging
import requests
def handler(ctx, data: io.BytesIO = None):
try:
body = json.loads(data.getvalue())
alerm_title = body["title"]
alerm_body = body["body"]
alerm_type = body["type"]
alerm_severity = body["severity"]
alerm_timestamp = body["timestamp"]
alerm_meta_id = body["alarmMetaData"][0]["id"]
headers = {
"content-type": "application/json"
}
data = {
"to": "test",
"messages":[
{
"title":alerm_title,
"body":alerm_body,
"type":alerm_type,
"severity":alerm_severity,
"timestamp":alerm_timestamp,
"alerm_meta_id":alerm_meta_id,
"text":"Alerm-TEST"
}
]
}
requests.post("http://Function-Test/", headers=headers, data=json.dumps(data))
print(alerm_title + alerm_body + alerm_type + alerm_severity + alerm_timestamp + alerm_meta_id)
except Exception as e:
print('ERROR: bad Event!', flush=True)
raise
また、下記のページに取得できる値が記載してありますので、参照して下さい。
・OCIモニタリング機能概要(21P)
まとめ
今回はアラーム機能とFunctionsの連携について試したことを記事にしてみました。
普段はコードを書く機会があまりないので身構えていましたが、意外とすんなり動作したのでホッとしております。
アラーム機能 → Functions → 外部サービスの連携ができるようになればOCIの監視情報を外部サービスから通知することも可能になるので運用の幅が広がりますね!
例えばですが、OCIで監視しているリソースに何かあった際にBacklogやServiceNowへ連携し、チケットを発行するみたいなことも可能になると思います。
本記事が皆様の参考になれば幸いです。
最後まで読んでいただき、ありがとうございました。