Blogical

AWS/Salesforceを中心に様々な情報を配信していきます(/・ω・)/

IoT SiteWise で取り込んだデータにアラームを作成する

こんにちは、ロジカル・アーツの井川です。

SiteWise では取り込んだ機器データに対してしきい値を設定し、しきい値に達したときにアラートを通知することができます。この記事では産業機器に見立てた EC2 インスタンスから取り込んでいる CPU 使用率が 90%を超えたときにアラーム状態と見なすことにします。

はじめに

SiteWise では取り込んだ機器データに対してアラームを作成し、データの状態を監視できます。定義できるアラームは「AWS IoT Events アラーム」と「外部アラーム」の 2 種類ありますが、この記事では「AWS IoT Events アラーム」を使用します。IoT Events アラームでは、アラームの状態が変化したときに他の AWS サービスへのアクション*1を定義できます。今回は SNS を使用してメール通知を行います。

以下の記事の設定が完了している前提で進めていきます。
なお、OPC UA サーバについては asyncua でも node-opcua でもどちらでも構いません。

blog.logical.co.jp

また、SNS トピックの作成・設定手順についてはここでは扱いません。手順については以下の記事を参照してください。

dev.classmethod.jp

アラームの定義

モデルに対してアラームを定義します。その際にしきい値が必要なので、まず属性としてしきい値を定義します。

SiteWise のコンソール画面で対象のモデルをクリックします。

モデルの詳細画面で「編集」をクリックします。

属性の定義」で下記のように入力します。

項目 備考
名前 CPU_Threshold
デフォルト値 90 アセット毎に上書き可能
データ型 整数

画面下までスクロールして「保存」をクリックします。

次にアラームを定義します。

モデルの詳細画面から「定義」のアラームタブをクリックし、「アラームを追加」をクリックします。

アラームタイプのオプション」は「AWS IoT Events アラーム」を選択し、「アラーム名」に High_CPU_Usage_Alarm と入力します。

しきい値の定義」の項目を以下のように選択します。

項目
プロパティ CPU
演算子 > より大きい
CPU_Threshold

詳細設定」をクリックし、「状態アクションの設定 - オプション」をクリックします。さらに「アクションの編集」をクリックします。

SNS メッセージを送信」を選択し、SNS トピックの ARN を指定します。 ペイロードはデフォルトを選択して「保存」をクリックします。

最後に「アラームを追加」をクリックします。

アラームが作成されたら CPU 使用率を上げ、動作を確認してみます。

動作検証

インスタンスに接続して以下のコマンドを実行し、CPU に負荷をかけます。

yes > /dev/null &

CPU 使用率が 90%を超えるよう、必要であれば複数回実行します。CPU 使用率は top コマンドで確認できます。

以下のような本文のメールが通知されればうまくいっています*2
※見やすいように整形しています。

{
  "alarmModelName": "High_CPU_Usage_Alarm_assetModel_6b40d695-1405-448c-b294-06ea3acbc37e",
  "alarmModelVersion": "1",
  "alarmState": {
    "stateName": "ACTIVE",
    "ruleEvaluation": {
      "simpleRule": {
        "inputProperty": 100.0,
        "operator": "GREATER",
        "threshold": 90
      }
    }
  },
  "keyValue": "3f3c87a4-d3cd-4798-b214-b67aed672b95",
  "stateUpdateTime": 1685063263945
}

検証が完了したら、バックグラウンドで実行されている yes コマンドを終了させます。
jobs コマンドでジョブ番号を確認し、kill %1 %2 のように終了したいジョブ番号を指定して kill コマンドを実行します。

例えば、以下のように表示されたら kill %1 %2 %3 と実行します。

$ jobs
[1]   Running                 yes > /dev/null &
[2]-  Running                 yes > /dev/null &
[3]+  Running                 yes > /dev/null &

おわりに

機器データの監視をしたいとなった際、SiteWise では比較的簡単にその仕組みを導入できると思います。さらに、アラームの状態が変化した際に連携できるサービスは複数あるので、用途に応じてカスタマイズができます。例えば、今回の設定だとアラームの状態が変わる度に通知が来るので、 SNS の代わりに Lambda に連携し、アラーム状態になったときだけ Lambda から SNS にメッセージを発行するといったことができます。

参考

*1:サポートされているアクションについてはこちらを参照してください。

*2:おそらくアラーム作成時にも、stateNameNORMAL のメールが届いているかと思います。