Stack Monitoringでプロセス監視の設定をしてみた

OCIの運用監視サービス「Stack Monitoring」でプロセス監視の機能が追加されたようなので、早速設定してみました。
ドキュメントは[こちら](https://docs.oracle.com/ja-jp/iaas/stack-monitoring/doc/expand-monitoring-capability-custom-resources.html#STMON-GUID-8F09644E-EE68-43DA-94DE-B2EE455BFF47)です。

**前提条件**
+ Stack Monitoringに監視対象のホストが登録されていること
+ ホストがStack MonitoringのEnterprise Editionで監視されていること
+ OCI CLIがインストール、構成された端末から設定すること

# 1.プロセスセットの作成
プロセス監視の登録はOCI CLIコマンドから実行する必要があるようなので、OCI CLIコマンド実行時に受け渡すJSONファイルを作成します。  
プロセスセット作成時に必要なJSONファイルのフォーマットは以下です。

```
{
    "compartmentId": "<Stack Monitoringで監視対象のホストを登録したコンパートメントのOCID>",
    "displayName": "<プロセスの表示名（任意）>",
    "specification": {
        "items": [
            {
                "processCommand": "<プロセスのコマンド>",
            }
        ]
    }
}
```
今回は試しにJavaのプロセスを監視するため、以下のように定義しました。
```ruby:java.json
{
    "compartmentId": "ocid1.compartment.oc1..xxxxxxx",
    "displayName": "java processes",
    "specification": {
        "items": [
            {
                "processCommand": "java",
            }
        ]
    }
}
```

JSONファイルを用意したら、OCI CLIコマンドでプロセスセットを作成します。
```
$oci stack-monitoring process-set create --compartment-id < Stack Monitoringで監視対象のホストを登録したコンパートメントのOCID> --from-json file://<JSONファイルのパス>

例）
$oci stack-monitoring process-set create --compartment-id ocid1.compartment.oc1..aaaaaaaaxxxxxxx --from-json file://java.json
```

プロセスセットが作成したら、以下のような実行結果が返されるので、 プロセスセットのOCIDをメモします。
```
{
  "data": {
    "compartment-id": "ocid1.compartment.oc1..aaaaaaaaxxxxxxx",
    "defined-tags": {
      "Oracle-Tags": {
        "CreatedBy": "default/xxxxxx",
        "CreatedOn": "2024-02-01T06:52:29.277Z"
      }
    },
    "display-name": "java processes",
    "freeform-tags": {},
    "id": "ocid1.stackmonitoringprocessset.oc1.iad.amaaaaaatgpiiviaqisiwro73x734bq5putyx2o5d4brqfahxa3toz7b76ja",
    "lifecycle-state": "ACTIVE",
    "revision": "1",
    "specification": {
      "items": [
        {
          "label": null,
          "process-command": "java",
          "process-line-regex-pattern": null,
          "process-user": null
        }
      ]
    },
    "system-tags": {},
    "time-created": "2024-02-01T06:52:29+00:00",
    "time-updated": "2024-02-01T06:52:29+00:00"
  },
  "etag": "0a2756eaa7c5bc4894ef7b34c9c9490a90666a6f12db033869b45c4f3d67644e"
}
```
この場合、プロセスセットのOCIDは`"id": "ocid1.stackmonitoringprocessset.oc1.iad.amaaaaaatgpiiviaqisiwro73x734bq5putyx2o5d4brqfahxa3toz7b76ja"`の部分になります。


# 2.プロセスセットとホストの紐付け

プロセスセットを作成したら、次はStack Monitoringに登録されているホストに紐付けます。  
紐付けもOCI CLIコマンドで設定するので、OCI CLIコマンドで受け渡すJSONファイルを作成します。  
プロセスセットとホストを紐付ける際に必要なJSONファイルのフォーマットは以下です。

```
{
    "discoveryType": "ADD",
    "discoveryClient": "APPMGMT",
    "compartmentId": "< Stack Monitoringで監視対象のホストを登録したコンパートメントのOCID >",
    "discoveryDetails": {
        "agentId": "<監視対象のホストを監視している管理エージェントのOCID>",
        "resourceType": "CUSTOM_RESOURCE",
        "resourceName": "<手順1で定義したプロセスの表示名>",
        "properties": {
            "propertiesMap": {
                 "host_ocid": "<Stack Monitoringに登録したホストのOCID>",
                 "process_set_id": "手順1でメモしたプロセスセットのOCID"
            }
        },
        "license": "ENTERPRISE_EDITION"
    },
    "freeformTags": {},
    "definedTags": {}
}
```
Stack Monitoringに登録したホストのOCID、監視対象のホストを監視している管理エージェントのOCIDはそれぞれStack Monitoringのホストの監視画面 -> 構成 -> 汎用OCIプロパティから確認できます。

![スクリーンショット 2024-02-01 17.59.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3424859/6a275c59-ec23-7406-b6c1-ef4fec705a6b.png)

例）
```ruby:host.json
{
    "discoveryType": "ADD",
    "discoveryClient": "APPMGMT",
    "compartmentId": "ocid1.compartment.oc1..aaaaaaaaxxxxxx",
    "discoveryDetails": {
        "agentId": "ocid1.managementagent.oc1.iad.xxxxxx",
        "resourceType": "CUSTOM_RESOURCE",
        "resourceName": "java processes",
        "properties": {
            "propertiesMap": {
                 "host_ocid": "ocid1.stackmonitoringresource.oc1.iad.amaaaaaatgpiiviaxotfnhbdaqogztnjt4kejxzqzjvnibs4ftteox2lj7pq",
                 "process_set_id": "ocid1.stackmonitoringprocessset.oc1.iad.amaaaaaatgpiiviaqisiwro73x734bq5putyx2o5d4brqfahxa3toz7b76ja"
            }
        },
        "license": "ENTERPRISE_EDITION"
    },
    "freeformTags": {},
    "definedTags": {}
}

```


JSONファイルを作成したら、OCI CLIコマンドでプロセスセットとホストを紐付けます。
```
$ oci stack-monitoring discovery-job create --compartment-id <Stack Monitoringで監視対象のホストを登録したコンパートメントのOCID> --from-json file://<手順2で作成したJSONファイルのパス>
例）
$oci stack-monitoring discovery-job create --compartment-id ocid1.compartment.oc1..aaaaaaaaxxxxxx --from-json file://host.json
```
プロセスセットとホストの紐付けに成功すると、以下のようなレスポンスが返ってきます。

```
{
  "data": {
    "compartment-id": "ocid1.compartment.oc1..aaaaaaaaxxxxxx",
    "defined-tags": {
      "Oracle-Tags": {
        "CreatedBy": "default/xxxxxx",
        "CreatedOn": "2024-02-01T06:58:53.201Z"
      }
    },
    "discovery-client": "APPMGMT",
    "discovery-details": {
      "agent-id": "ocid1.managementagent.oc1.iad.amaaaaaaxxxxx",
      "credentials": null,
      "license": "ENTERPRISE_EDITION",
      "properties": {
        "properties-map": {
          "host_ocid": "ocid1.stackmonitoringresource.oc1.iad.amaaaaaatgpiiviaxotfnhbdaqogztnjt4kejxzqzjvnibs4ftteox2lj7pq",
          "process_set_id": "ocid1.stackmonitoringprocessset.oc1.iad.amaaaaaatgpiiviaqisiwro73x734bq5putyx2o5d4brqfahxa3toz7b76ja"
        }
      },
      "resource-name": "java processes",
      "resource-type": "CUSTOM_RESOURCE",
      "tags": {
        "properties-map": {}
      }
    },
    "discovery-type": "ADD",
    "freeform-tags": {},
    "id": "ocid1.stackmonitoringdiscoveryjob.oc1.iad.amaaaaaatgpiiviaj4irjm55vyeh6cbcdxq27my5igjm5ksqfgpgpgih4jeq",
    "lifecycle-state": "CREATING",
    "status": "CREATED",
    "status-message": null,
    "system-tags": {},
    "tenant-id": "ocid1.tenancy.oc1..aaaaaaaaxxxxxq",
    "time-updated": "2024-02-01T06:58:56+00:00",
    "user-id": "ocid1.user.oc1..aaaaaaaaxxxx"
  }
}
```

実際にStack Monitoringのホストの監視画面の「関連リソース」のタブを見ると、紐付けたプロセスセットが表示されています。

![スクリーンショット 2024-02-01 18.13.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3424859/ecd78de0-9a2e-8908-1037-d0076e778c81.png)

追加したプロセスをさらにクリックすると、そのプロセスによって消費されているリソースなどのメトリックが表示されました。

![スクリーンショット 2024-02-01 18.14.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3424859/3f44d08a-6857-4d7c-ac59-e01c6d4ac40f.png)

プロセスセットの登録方法は、色々あるようなので、ぜひ[ドキュメント](https://docs.oracle.com/ja-jp/iaas/stack-monitoring/doc/expand-monitoring-capability-custom-resources.html#STMON-GUID-8F09644E-EE68-43DA-94DE-B2EE455BFF47)の方もご参照ください。