Oracle Cloud Observability and Management Platformを使ってみた。(Windows編)

1章 概要

 こんにちは。Oracle Cloud Infrastructure(OCI)特集 編集部です。

 Oracle Cloud Observability and Management Platform(以下O&M)というものをご存じでしょうか。O&MはOracle Cloud Infrastructure(以下OCI)上のリソースに対して用意されている様々な監視機能の総称になります。今回は皆さんが一番使われているであろう、Windowsインスタンスに対し、稼働状況を監視する死活監視、CPUやメモリなどの使用状況を監視する性能監視、イベントビューアなどログを監視するログ監視、exeなどプロセスを監視するプロセス監視について設定手順をまとめさせていただきました。

(本ブログは2022年5月現在の情報となります。)

2章 前提条件

・OCIコンソールへ接続可能であること
・OCI VCNが作成済みであること
・OCIコンパートメントが作成済みであること
・接続可能なWindowsインスタンスが作成済みであること。
・対象インスタンスの所属するサブネットからOracle Service Networkへ接続可能なこと。
※各章で設定している値は監視の要件に沿って適宜指定してください。

3章 死活監視

 死活監視はOCI ヘルスチェック機能を用いて行います。ヘルスチェックは、Oracle社が世界中に用意しているバンテージポイントから監視対象となるインスタンスのWebサービスもしくはパブリックIPアドレスに対して行われます。そのため対象のインスタンスはパブリック・インターネットからアクセス可能な設定を行う必要があります。
 本手順ではICMP通信を全許可にする設定としていますが、バンテージポイントのIPリストが提供されているので、それらを個別で許可する設定も可能です。

①OCIコンソールのコンピュート>インスタンス>対象インスタンスをクリックし、インスタンスの詳細のOracleCloudエージェントタブ開き、OSサービス・管理エージェントが有効になっていることを確認してください。

②監視および管理>モニタリング>ヘルス・チェックに遷移後ヘルスチェックの作成をクリック、下記項目を入力し、作成をします。
 ・ヘルス・チェック名:任意
 ・コンパートメント:監視対象インスタンスのあるコンパートメント
 ・ターゲット:監視対象インスタンスのIP
 ・バンテージ・ポイント:AWS Asia Pacific(Tokyo)
  →リクエストタイム:ping
  →プロトコル:ICMP
 ・タイムアウト:任意
 ・間隔:任意

③ネットワーキング>仮想クラウド・ネットワーク>対象VCN>インスタンスの所属するサブネットに遷移後、セキュリティ・リストの追加をクリックし、下記項目を入力、セキュリティリストを追加します。
 イングレス・ルール
 ・ソースタイプ:CICR
 ・ソースCDR:0.0.0.0/0
 ・IPプロトコル:ICMP
 ・タイプオプション:All
 ・コードオプション:All
  →コードオプション:空欄
  →説明オプション:任意

④開発者サービス>アプリケーション統合>通知に遷移後、トピックの作成をクリックし、下記項目を入力、作成をクリックします。
 ・名前:任意
 ・説明オプション:任意

⑤作成されたトピックの詳細を表示し、サブスクリプションの作成をクリック、下記項目を入力、作成をクリックします。
 ・プロトコル:電子メール
 ・電子メール:任意のアドレス

⑥監視および管理>モニタリング>アラーム定義と画面遷移後、アラームの作成をクリックし、下記を入力、作成をクリックします。
 ・アラーム名:任意
 ・アラームの重要度:任意
 ・アラーム本体:任意
 ・コンパートメント:監視対象インスタンスのあるコンパートメント
 ・メトリック・ネームスペース:oci_healthchecks
 ・メトリック名:PING.isHealthy
 ・間隔:任意
 ・統計:Mean
  →メトリック・ディメンション
  →ディメンション名:resourceDisplayName
  →ディメンション値:作成した定義名
  →集計メトリック・ストリーム:チェックをつけない
 ・トリガー・ルール:次と等しい
  →演算子:次と等しい
 ・値:0
 ・トリガー遅延分数:1
  →宛先サービス:Notifications Service
  →トピック:⑤項番で作成したトピックを選択します。
  →フォーマットされたメッセージの送信
  →通知の繰り返し(アラームが起動し続ける場合):チェックをつけない
  →通知の抑制:チェックをつけない

⑦対象サーバをコンソールから停止させ、登録したメール宛に通知が発生すれば完成です。

4章 性能監視

 性能監視は対象インスタンスにインストールされるエージェントがメトリックを取得することによって行います。
CPUやメモリの情報はコンピュートインスタンス構築時に自動でインストールされるエージェントによって取得できるのですが、ディスク情報を取得するには「管理エージェント」と呼ばれる別のエージェントを手動でインストールさせる必要があります。また、管理エージェントを実行させるのにJava8をインストールする必要があり、本手順はJava8のインストール手順から紹介させていただきます。

①以下のサイトから対象インスタンスのOSに対応するJDK8(64bit)をダウンロードし、対象インスタンスに格納します。(Oracleプロファイルのサインインが必要です)
https://www.oracle.com/java/technologies/downloads/#java8

②対象インスタンスにログイン、JDKインストーラを実行し、対象インスタンスにインストールします。

③スタート>コントロールパネル>システム>システムの詳細設定>環境変数をクリック、システム変数に下記を追加します。
 ・変数名:JAVA_HOME
 ・変数値:C:\Program Files\Java\jdk1.8.0_321

④OCIコンソールの監視および管理>管理エージェント左タブから「ダウンロードとキー」をクリックし、WINDOWSのエージェント (X86_64)をダウンロード、対象インスタンスに格納します。

⑤画面下部のインストール・キー項目の「キーの作成」をクリック、下記を入力し、キーの作成を選択します。
 ・名前:任意
 ・コンパートメント:対象インスタンスが所属するコンパートメントを選択
 ・最大インストール数と有効な対象:任意

⑥作成したキーの右側「:」をクリック、キーをファイルにダウンロードを選択し、ダウンロードしたファイルを対象インスタンスに格納します。

⑦対象インスタンスにログイン、管理者でコマンドプロンプトを開き、本章の④項番で格納したWINDOWSエージェントのディレクトリに移動します。

 cd /[格納先ディレクトリパス]


⑧下記コマンドを入力し、エージェントのインストールをする。
 installer.bat /[⑥項番で作成したキーファイルのフルパス]

⑨スタートからサービスをクリックし、エージェントが実行中であることを確認します。

⑩OCIコンソールの監視および管理>管理エージェントの左側タブからエージェントをクリック、名前項目にAgent(対象インスタンスプライベートIP)があり、アクティブであることを確認します。


⑪コンピュート>インスタンス>対象インスタンスをクリック、インスタンスの詳細のOracleCloudエージェントタブ開き、OSサービス・管理エージェントが有効になっていることを確認してください。

⑫3章ヘルスチェックの④⑤項番を参照し、アラートを知らせる通知を作成してください。


⑬監視および管理>モニタリング>アラーム定義と画面遷移後、アラームの作成をクリックし、下記を入力、作成をクリックします。
※CPU監視をする場合は以下の項目を参照してください

 ・アラーム名:任意
 ・アラームの重要度:任意
 ・アラーム本体:任意
 ・コンパートメント:監視対象インスタンスのあるコンパートメント
 ・メトリック・ネームスペース:oci_computeagent 
 ・メトリック名:CpuUtilization (メモリを監視する場合、当項目をMemoryUtilizationに変更してください。)
 ・間隔:任意
 ・統計:Max
  →メトリック・ディメンション
  →ディメンション名:resourceDisplayName
  →ディメンション値:対象サーバ名
 ・トリガー・ルール
  →演算子:次より大きい
  →値:50 (メモリを監視する場合、当項目を適切な数値に変更してください。)
  →トリガー遅延分数:1
  →宛先サービス:Notifications Service
  →トピック:⑫項番で作成したトピックを選択します。
  →フォーマットされたメッセージの送信
  →通知の繰り返し?(アラームが起動し続ける場合):チェックをつけない
  →通知の抑制:チェックをつけない

⑭任意の負荷でCPU(メモリ)の負荷を上げて通知が飛ぶことを確認します。


⑮再度、監視および管理>モニタリング>アラーム定義と画面遷移後、アラームの作成をクリックし、下記を入力、作成をクリックします。
 ・アラーム名:任意
 ・アラームの重要度:任意
 ・アラーム本体:任意
 ・コンパートメント:監視対象インスタンスのあるコンパートメント
 ・メトリック・ネームスペース:oci_managementagent
 ・メトリック名:diskUsageUsed
 ・間隔:任意
 ・統計:Max
  →メトリック・ディメンション
  →ディメンション名:resourceDisplayName
  →ディメンション値:対象サーバ名
 ・トリガー・ルール
  →演算子:次より大きい
  →値:20
  →トリガー遅延分数:1
  →宛先サービス:Notifications Service
  →トピック:~で作成したトピックを選択します。
  →フォーマットされたメッセージの送信
  →通知の繰り返し?(アラームが起動し続ける場合):チェックをつけない
  →通知の抑制:チェックをつけない


⑯アラームの作成をクリックします。



⑰任意の負荷でDisk使用率の負荷を上げて通知が飛ぶことを確認します。

5章 ログ監視

 ログ監視はOCI ロギングの機能を用いて行います。
対象インスタンスのログをOCI側で収集するために必要なエージェントはコンピュートインスタンス構築時に自動でインストールされます。また、OCI ロギングの機能だけでは管理者へ発報させることができないため、サービスコネクタハブを用いてOCI 通知サービスと連携します。

①OCIコンソールのアイデンティティとセキュリティ>動的グループに遷移後、「動的グループの作成」をクリックし、以下項目を入力します。
 ・名前:任意
 ・説明:任意
  ルール1:All {instance.compartment.id = [対象コンパートメントのID]}
 ・コンパートメントIDの取得方法 :
  アイデンティティとセキュリティ>コンパートメント>対象コンパートメントをクリック>OCIDの右にある表示をクリックします。


②作成をクリックします。

③3章ヘルスチェックの④⑤項番を参照し、アラートを知らせる通知を作成してください。


④監視及び管理>ロググループに遷移後、ログ・グループの作成をクリックし、以下項目を入力します。
 ・名前:任意


⑤作成をクリックします。

⑥監視および管理>ロギング>ログに遷移後、カスタム・ログの作成をクリックします。


⑦以下項目を入力し、作成します。
 ・カスタム・ログ名:任意
 ・コンパートメント:本章①②項番の動的グループ作成時に指定したコンパートメントを指定します。
 ・ログ・グループ:本章④⑤で作成したロググループを指定します。


⑧カスタム・ログの作成をクリックします。

⑨エージェント構成の作成で以下項目を入力し、作成します。
 ・エージェント構成の作成:「新規構成の作成」を選択します。
 ・構成名:任意
 ・説明:任意
 ・ホストグループ
 ・グループ・タイプ:「動的グループ」を選択します。
 ・グループ:本章①②で作成した動的グループを指定します。
 ・ログ入力の構成
  入力タイプ:「Windowsイベント・ログ」を選択します。
  名前の入力:任意の名前を入力します。
  イベント・チャネル:「アプリケーション」「セキュリティ」「システム」から監視対象のものを選択します。(複数選択可)
  ログの保存先の選択:本章④⑤で作成されたロググループが指定されていることを確認します。


⑩カスタム・ログの作成をクリックします。

⑪サービス検索バーでサービス・コネクタ・ハブを検索、管理コンソールに遷移後、サービス・コネクタの作成をクリックし、以下項目を入力します。
 ・コネクタ名:任意
 ・説明:任意
 ・リソース・コンパートメント:本章①②項番の動的グループ作成時に指定したコンパートメントを指定します。
 ・サービス・コネクタの構成
 ・ソース:「ロギング」を選択します。
 ・ターゲット:「通知」を選択します。


⑫ソース接続の構成で「拡張モードに切り替え」をクリックし、以下の通り入力します。
  search “[コンパートメントのOCID]/[ロググループのOCID]/[ログのOCID]


 ・ログ・フィルタ・タスク:
  ”メール通知をする条件をしたい場合は、問い合わせコード・エディタ内に条件式を記載します。”
  例 
  search “[コンパートメントのOCID]/[ロググループのOCID]/[ログのOCID] “ | level = ‘ERROR’
 ・ファンクション・タスクの構成:指定なし。
 ・ターゲット接続の構成:本章③で作成した通知を選択します。


⑬作成をクリックします。

⑭指定したログを出力し、通知が来ることを確認したら完成です。

6章プロセス監視

 プロセス監視はOCI モニタリングサービスに対してOS上からCLIやAPIを用いて独自のカスタムメトリックを公開することで行います。
本手順ではOS上にPythonスクリプトを作成し、取得したOSのプロセス情報をOCIへアップロードしています。

①3章ヘルスチェックの④⑤項番を参照し、アラートを知らせる通知を作成してください。


②OCIコンソールのアイデンティティとセキュリティ>ユーザー>APIキーへ遷移後、「APIキーの追加」をクリック、「APIキー・ペアの生成」にチェックが入った状態で「秘密キーのダウンロード」で任意のフォルダにファイルをダウンロードします。


③「追加」をクリック、構成ファイルのプレビューが表示されるので、「コピー」をクリックしテキストデータをコピーします。
※APIキーを発行するため、ユーザーがいない場合、IAMユーザーを作成してください。

④新しくテキストファイルを作成し、項番③でコピーしたデータを張り付けてファイル名を「config」として保存します。


⑤「config」を開き以下の部分を修正します。
前:key_file= # TODO
後:key_file=/home/opc/.oci/[④で保存した秘密キーファイルの名前]

例:key_file=/home/opc/.oci/-03-31-02-19.pem

⑥「config」ファイルの中身のプロファイル名を編集します。
前:[DEFAULT]

後:[UNIFIED_MONITORING_AGENT]

※もともと存在する[DEFAULT]プロファイルはなくてもいいですが、画像では残しています。

⑦新しくテキストファイルを作成し、ファイル名を「CustomMetric_osprocess_httpd.py」にし、対象インスタンスのリージョンに合わせて、OCIリージョンのエンドポイントを確認します。
 ※確認サイト:https://docs.oracle.com/en-us/iaas/api/#/en/monitoring/20180401/
 ※東京リージョンの場合は「https://telemetry-ingestion.ap-tokyo-1.oraclecloud.com」

⑧アイデンティティとセキュリティ>コンパートメントに遷移後、対象コンパートメントをクリックし、対象サーバの所属する対象コンパートメントIDを取得します。

⑨項番⑦で作成した「CustomMetric_osprocess_httpd.py」に以下のサンプルコードの[エンドポイント]と[コンパートメントID]を項番⑦⑧で取得した値と置き換えます。([]不要)    
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
import oci,psutil,datetime
from pytz import timezone
from oci.config import from_file
config = from_file()


monitoring_client = oci.monitoring.MonitoringClient(config,service_endpoint=”[エンドポイント]“)

existvalue = 0


for proc in psutil.process_iter():
    try:
        if “notepad.exe” in proc.exe():
            existvalue = 1
    except psutil.AccessDenied:
        pass

dt_now = datetime.datetime.now(timezone(‘UTC’))


post_metric_data_response = monitoring_client.post_metric_data(
    post_metric_data_details=oci.monitoring.models.PostMetricDataDetails(
        metric_data=[
            oci.monitoring.models.MetricDataDetails(
                namespace=”osprocesswin”,
                compartment_id=”[コンパートメントID],
                name=”processwin”,
                dimensions={
                    ‘serverid’: ‘testsrvwin’},
                datapoints=[
                    oci.monitoring.models.Datapoint(
                        timestamp=datetime.datetime.strftime(
                            dt_now,”%Y-%m-%dT%H:%M:%S.%fZ”),
                        value=existvalue)]
                )]
    )
)

print(existvalue)
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

⑩下記サイトから対象サーバに必要なJAVAとpythonインストーラをダウンロードします。         https://www.oracle.com/java/technologies/downloads/#java18  
https://www.python.org/downloads/windows/

⑪項番⑩でダウンロードしたJAVA,Pythonインストーラを対象サーバに格納、JAVAインストーラをクリックし、インストールします。

⑫Pythonインストーラをクリックし、インストールします。
※インストール時にオプションにチェックをつけるとすぐにコマンドが実行できます。

⑬スタートからpowershellを検索、右クリックから「管理者として実行」をクリックし、下記コマンドを実行します。
 Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
 pip install –upgrade pip setuptools
 pip install -U oci
 pip install -U psutil

⑫スタートからコマンドプロンプトを起動し、下記コマンドを実行します。
 cd C:\Users\opc
 mkdir .oci

⑬項番②④⑨で作成した3つのファイルを下記フォルダに配置します。(秘密キーファイル、構成ファイル、Pythonファイル)
 C:¥Users¥opc¥.oci

⑭Powershellを起動し、下記コマンドを実行します。指定した対象プロセスが起動していれば「1」、起動していなければ「0」が表示されることを確認してください。

⑮監視および管理>モニタリング>アラーム定義と画面遷移後、アラームの作成をクリック、以下項目を入力し、「作成」をクリックします。
 ・アラーム名:任意
 ・アラームの重要度:任意
 ・アラーム本体:任意
 ・コンパートメント:監視対象インスタンスのあるコンパートメント
 ・メトリック・ネームスペース:osprocesswin
 ・メトリック名:processwin
 ・間隔:任意
 ・統計:Mean
  →メトリック・ディメンション
  →ディメンション名:serverid
  →ディメンション値:testsrvwin
 ・トリガー・ルール
  →演算子:次と等しい
  →値:0
  →トリガー遅延分数:1
  →宛先サービス:Notifications Service
  →トピック:本章①で作成したトピックを選択します。
  →フォーマットされたメッセージの送信
  →通知の繰り返し?(アラームが起動し続ける場合):チェックをつけない
  →通知の抑制:チェックをつけない


⑯作成をクリックします。

⑰監視及び管理>モニタリング>メトリック・エクスプローラと画面遷移後、「問合せ1」で以下の通り設定し、「チャートの更新」をクリックします。       

 ・メトリック・ネームスペース:osprocesswin
 ・メトリック名:processwin
 ・ディメンション名:serverid
 ・ディメンション値:testsrvwin

⑱OCIコンソール上で対象プロセスが監視できることを確認してください。

⑲指定したプロセスを停止させ、メール通知が来ることを確認したら完了です。

7章最後に

 いかがだったでしょうか。今回はO&Mの機能を使ってWindowsインスタンスのCPUなどの基本的な部分から、プロセスという深い部分まで監視し、通知できるようにしてみました。インスタンスに任意のソフトをインストールし、ソフトが起動しているかOCIコンソールで監視できるのでぜひ活用していただけたら嬉しいです。


<免責事項>
 情報の掲載には注意を払っておりますが、掲載された情報の内容の正確性については一切保証しません。また、当サイトに掲載された情報を利用・使用(閲覧、投稿、外部での再利用など全てを含む)するなどの行為に関連して生じたあらゆる損害等につきましても、理由の如何に関わらず自己責任で行う必要があります。