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

1章 概要

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

 Oracle Cloud Observability and Management Platform(以下O&M)の紹介となります。O&MはOracle Cloud Infrastructure(以下OCI)上のリソースに対して用意されている様々な監視機能の総称になります。今回はLinuxインスタンスに対し、稼働状況を監視する死活監視、CPUやメモリなどの使用状況を監視する性能監視、イベントビューアなどログを監視するログ監視、プロセスを監視するプロセス監視について設定手順をまとめさせていただきました。
 前回のWindowsインスタンスに対しての設定手順については以下の記事をご参照ください。

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

2章 前提条件

・OCIコンソールへ接続可能であること
・OCI VCNが作成済みであること
・OCIコンパートメントが作成済みであること
・接続可能なLinuxインスタンスが作成済みであること。
・対象インスタンスの所属するサブネットから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章 性能監視

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


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

⑥対象インスタンスにログイン、下記コマンドを入力しfirewallサービスが停止しているか確認します。
systemctl status firewalld
起動していた場合下記コマンドで停止させます。
systemctl stop firewalld 

⑦OCIコンソールから監視および管理>ロギング>ログに遷移後、カスタム・ログの作成をクリックします。
⑧以下項目を入力し、作成します。
 ・カスタム・ログ名:任意
 ・コンパートメント:項番①②項番の動的グループ作成時に指定したコンパートメントを指定します。
 ・ログ・グループ:項番④⑤で作成したロググループを指定します。
⑨カスタム・ログの作成をクリックします。

⑩エージェント構成の作成で以下項目を入力し、作成します。
 ・エージェント構成の作成:「新規構成の作成」を選択します。
 ・構成名:任意
 ・説明:任意
 ・ホストグループ
  →グループ・タイプ:「動的グループ」を選択します。
  →グループ:項番①②で作成した動的グループを指定します。
 ・ログ入力の構成
  →入力タイプ:「ログ・パス」を選択します。
  →名前の入力:任意の名前を入力します。
  →イベント・チャネル:ファイル・パス項目を入力します。例 /var/log/httpd/error_log
  →ログの保存先の選択:項番④⑤で作成されたロググループが指定されていることを確認します。
⑪カスタム・ログの作成をクリックします。

⑫サービス検索バーでサービス・コネクタ・ハブを検索、管理コンソールに遷移後、サービス・コネクタの作成をクリックし、以下項目を入力します。
 ・コネクタ名:任意
 ・説明:任意
 ・リソース・コンパートメント:本章①②項番の動的グループ作成時に指定したコンパートメントを指定します。
 ・サービス・コネクタの構成
 ・ソース:「ロギング」を選択します。
 ・ターゲット:「通知」を選択します。
⑬ソース接続の構成で「拡張モードに切り替え」をクリックし、以下の通り入力します。
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 “httpd” 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=”osprocesslinux”,
                compartment_id=”[コンパートメントID],
                name=”processlinux”,
                dimensions={
                    ‘serverid’: ‘testsrvlinux’},
                datapoints=[
                    oci.monitoring.models.Datapoint(
                        timestamp=datetime.datetime.strftime(
                            dt_now,”%Y-%m-%dT%H:%M:%S.%fZ”),
                        value=existvalue)]
                )]
    )
)

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

⑬対象インスタンスにログイン、下記コマンドを実施します。
sudo su
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
exit
pip3 install –upgrade pip setuptools
pip3 install -U oci
pip3 install -U psutil

⑫下記コマンドを実行します。
sudo mkdir /home/opc/.oci

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

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

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

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

 ・メトリック・ネームスペース:osprocesslinux
 ・メトリック名:processlinux
 ・ディメンション名:serverid
 ・ディメンション値:testsrvlinux

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

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

7章最後に

 いかがだったでしょうか。今回はO&Mの機能を使ってLinuxインスタンスのCPUなどの基本的な部分から、プロセスという深い部分まで監視し、通知できるようにしてみました。インスタンスに任意のソフトをインストールし、ソフトが起動しているかOCIコンソールで監視できるのでぜひ活用していただけたら嬉しいです。
<免責事項>
 情報の掲載には注意を払っておりますが、掲載された情報の内容の正確性については一切保証しません。また、当サイトに掲載された情報を利用・使用(閲覧、投稿、外部での再利用など全てを含む)するなどの行為に関連して生じたあらゆる損害等につきましても、理由の如何に関わらず自己責任で行う必要があります。