Sysdig Monitoring API (curl)

IBM Cloud Monitoring with Sysdigサービスは、管理者、DevOpsチーム、開発者向けの、フル管理のエンタープライズ・グレードのモニタリング・サービスです。コンテナの深い可視性、サービス指向のビュー、包括的なメトリックが得られます。 

Sysdig UI の Dashboard や Panel を利用して Metric 情報を確認することが一般的ですが、Monitoring API を使用することで、JSON Format で Metric Data を取得することが可能です。
Panel の Export 機能でも Metric Data を取得することができますが、Monitoring API は、より詳細な設定が可能です。

Monitoring API は、curl または python で利用することができます。

__Extracting metrics from a Monitoring instance by using the Monitoring API__
https://cloud.ibm.com/docs/monitoring?topic=monitoring-metrics_api
__Extracting metrics from an instance by using the Monitoring Python client__
https://cloud.ibm.com/docs/monitoring?topic=monitoring-metrics_python

ここでは、curl による Sysdig Monitoring API の利用方法をご紹介します。
#### curl syntax
基本的な curl の syntax は以下の通りです。
```shell
curl -X POST <SYSDIG_REST_API_ENDPOINT>/data -H "Authorization: $AUTH_TOKEN" -H "IBMInstanceID: $GUID" -H "SysdigTeamID: $TEAM_ID" -H "content-type: application/json" -d DATA
```

#### SYSDIG_REST_API_ENDPOINT
Sysdig の Endpoint を指定します。Endpoint は以下から確認できます。
__REST API endpoints__
https://cloud.ibm.com/docs/monitoring?topic=monitoring-endpoints#endpoints_rest_api

ここでは、以下の Endpoint を使用します。
```shell
export SYSDIG_REST_API_ENDPOINT="https://jp-tok.monitoring.cloud.ibm.com/api"
```

#### AUTH_TOKEN
Sysdig Instance へのアクセスに必要な認証トークンを指定します。これは、Sysdig UI から確認できます。
![sysdig1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128125/5b314b15-1c17-9ff3-7941-0ba8e4301e84.png)
```shell
export AUTH_TOKEN="Bearer <Sysdig UI から確認した認証トークン>"
```

#### GUID
Sysdig Instance の GUID を指定します。GUID は以下から確認できます。
```shell
$ ibmcloud monitoring service-instances --all-resource-groups
Listing service instances for jp-tok region and for all resource groups...
OK
Name           Region   State    Service Name     Platform Metrics
my-sysdig-01   jp-tok   active   sysdig-monitor   Enabled

$ ibmcloud resource service-instance my-sysdig-01 --output json | jq -r '.[].guid'
****-****-****-****-****
```
```shell
export GUID="****-****-****-****-****"
```

#### TEAM_ID
TEAM_ID の指定は必須ではありませんので、ここでは割愛します。
> SysdigTeamID is optional. When you specify this header, you limit the request to the data and resources available for the team specified.

#### DATA
取得する Metirc 情報を指定します。例として、IBM Cloud Databases for Redis (Redis) の CPU 使用率を取得するために、以下のような JSON ファイルを作成してみます。
__Monitoring Integration__
https://cloud.ibm.com/docs/databases-for-redis?topic=databases-for-redis-monitoring

```shell
$ cat REDIS_CPU.json
{
  "metrics": [
    {
      "id": "ibm_resource"
    },
    {
      "id": "ibm_databases_for_redis_cpu_used_percent",
      "aggregations": {"time": "max"}
    }
  ],
  "filter": "ibm_location = \"jp-tok\"",
  "start": "1685199600",
  "end": "1685285999",
  "sampling": "3600"
}
```

#### curl による Metric の取得
以下のように curl を実行すると、Metirc が取得できます。
```shell
$ curl -X POST "$SYSDIG_REST_API_ENDPOINT"/data -H "Authorization: $AUTH_TOKEN" -H "IBMInstanceID: $GUID" -H "content-type: application/json" -d @REDIS_CPU.json -o CPU_METRIC.json

$ jq -r . CPU_METRIC.json | head -n 30
{
  "data": [
    {
      "t": 1685203200,
      "d": [
        "my-redis-01",
        0.055926
      ]
    },
    {
      "t": 1685203200,
      "d": [
        "my-redis-02",
        0.035095
      ]
    },
    {
      "t": 1685206800,
      "d": [
        "my-redis-01",
        0.025385
      ]
    },
    {
      "t": 1685206800,
      "d": [
        "my-redis-02",
        0.001892
      ]
    },
```

#### sampling が適切でない例
Sysdig では、Data Retention によって過去日の Metric 情報が更新されます。
__Data Retention__
https://docs.sysdig.com/en/docs/administration/data-retention/

前述の例は `1 hr: 3 months` に該当するため、`"sampling": "3600"` と指定しました。
適切でない `sampling` を指定すると、以下のように Metric 情報が取得されないため、注意が必要です。
```shell
$ cat 600SEC_REDIS_CPU.json
{
  "metrics": [
    {
      "id": "ibm_resource"
    },
    {
      "id": "ibm_databases_for_redis_cpu_used_percent",
      "aggregations": {"time": "max"}
    }
  ],
  "filter": "ibm_location = \"jp-tok\"",
  "start": "1685199600",
  "end": "1685285999",
  "sampling": "600"
}
```
```shell
$ curl -X POST "$SYSDIG_REST_API_ENDPOINT"/data -H "Authorization: $AUTH_TOKEN" -H "IBMInstanceID: $GUID" -H "content-type: application/json" -d @600SEC_REDIS_CPU.json -o 600SEC_CPU_METRIC.json

$ jq -r . 600SEC_CPU_METRIC.json
{
  "data": [],
  "start": 1685199600,
  "end": 1685285400
}
```