概要
Oracle Cloud Infrastructure(OCI)の監視機能としてモニタリングやイベント等があり、あらかじめ設定したメールIDやSlack等の通知先に通知することができます。
モニタリングについては通知内容は情報を見やすくフォーマットする機能がありますが、イベントについてはJSON形式の内容をそのまま送信します。
今回はSlackに送付するイベント通知内容をFunctionsで処理して見やすくしました。
Functions作成
OCIのAlarmをLINE Notifyを利用して通知を参考にFunctionsを作成します。
コードは以下のように作成しました。
- OCIイベントが作成するJSONを読み込み、必要な要素を抽出して通知テキストを作成しました。今回はブロックボリュームバックアップ作成イベント情報から日付やボリューム名等の情報を抽出しています
- 送信元をわかりやすくするためユーザー名や絵文字を追加しています
- これらの情報を事前に取得したSlackのWebhook URLにPostします
func.py
import io
import json
import logging
import requests
def handler(ctx, data: io.BytesIO = None):
try:
body = json.loads(data.getvalue())
text = "eventType: " + body["eventType"] + "\n" \
+ "eventTime: " + body["eventTime"] + "\n" \
+ "volumeName: " + body["data"]["additionalDetails"]["volumeName"] + "\n" \
+ "status: " + body["data"]["additionalDetails"]["status"]
data = json.dumps({
"text": text,
"icon_emoji" : ":cloud:",
"username" : "OCI Events"
})
requests.post('https://hooks.slack.com/services/.....', data=data)
except Exception as e:
print('ERROR: bad Event!', flush=True)
raise
func.yaml
schema_version: 20180708
name: event2slack
version: 0.0.3
runtime: python
build_image: fnproject/python:3.11-dev
run_image: fnproject/python:3.11
entrypoint: /python/bin/fdk /function/func.py handler
memory: 256
requirements.txt
fdk>=0.1.75
requests
イベントのアクションに追加
通知したいイベントのアクションに以下のいずれかを登録します
- アクションタイプ:ファンクションで作成したFunctionsを登録
- アクションタイプ:通知でトピックにFunctionsを登録
結果
イベント結果のJSONをそのままNotoficationsでSlackに送信した場合とFunctionsで見やすくしてSlackに送信した場合の比較です。