Facebook Twitter
お問い合わせ
TOPICS
更新情報
ホーム > ブログ > 【Oracle Cloud】アラームメッセージをFunctionsに連携する

【Oracle Cloud】アラームメッセージをFunctionsに連携する

ブログ
Oracle Cloud
2024.12.23

こんにちは。k.takeiです。
Oracle Cloud Infrastructure Advent Calendar 2024のDay23の記事です。

   

本記事ではアラームのメッセージをFunctionsに連携する方法について紹介いたします。
今まで、アラームの通知には電子メールを使用していたのですが、Functionsを使用してPOSTなどができれば外部のアプリケーションと連携ができるようになるので試してみました。

   

今回の内容について

今回はOCI上にコンピュートインスタンスを構築し、モニタリング機能で監視をしました。
そしてアラーム機能を試したいのでわざと発報させ、Functionsに連携をしたという内容になっています。
コンピュートインスタンスの構築については本記事の対象外とさせていただきます。

  

各サービスについては下記を参照してください。
OCIモニタリング機能概要
OCI Funtions 概要

     

     

モニタリングのアラーム定義を設定する

今回のメインはアラーム機能とFunctionsの連携なので、Functionsの作成に関する細かい情報は下記を参照してください。

Oracle 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へ連携し、チケットを発行するみたいなことも可能になると思います。

  

本記事が皆様の参考になれば幸いです。

最後まで読んでいただき、ありがとうございました。



この記事が気に入ったら
「いいね!」

この記事を書いた人


関連コンテンツ

CONTACT お問い合わせ

Cloudiiのサービスやプロダクトについて
興味をお持ちの方は、
お気軽にお問い合わせください。