LoginSignup
11
5

More than 3 years have passed since last update.

OCI Monitoringのメトリックデータをcsvにして保存する

Last updated at Posted at 2019-12-07

2019/12/07 新規作成
2019/12/08 誤字や見え方の部分修正


この記事は Oracle Cloud Infrastructure Advent Calendar 2019 の12/7の記事として書かれています。

はじめに

やりたいこと

  • Monitoringサービスのメトリックデータをcsvとして出力する

前提・検証環境

前提

  • oci cliが使える状態であること
  • jqコマンドが使えること
  • computeインスタンスは各メトリックのデータポイントがmonitoringサービスへ送られていること
    • computeインスタンスにmonitoringエージェントがインストールされていること(インスタンス作成時のデフォルト)
    • private subnet内のインスタンスについては、Service GatewayやNAT Gateway経由でmonitoringサービスへアクセスできる状態であること

環境

  • oci cli実行環境はlinux(OEL 7.7)
  • oci cliのversionは2.6.11
  • oci cliのoci_cli_rcにて、コンパートメントを指定済み

コマンド

構文

oci cliコマンドでjson形式でメトリックデータを取得した後、jqコマンドでcsv化し、ソートしてCSVファイルとして出力しています。

oci monitoring metric-data summarize-metrics-data --namespace <namepsace名> --query-text <MQL文> | jq -r '.data[] | .["aggregated-datapoints"][] | [ .timestamp ,.value] | @csv' | sort -t ',' -k 1 > XXXX.csv

サンプル

例1)ComputeインスタンスのCPU使用率

コマンド例

12/06 13:00 UTC から 12/07 00:00 UTCまでの期間で、指定したComputeインスタンスCPU使用率を、1分間隔で出力1

$ oci monitoring metric-data summarize-metrics-data --namespace oci_computeagent --start-time '2019-12-06 13:00' --end-time '2019-12-07 00:00' --query-text "CpuUtilization[1m]{resourceDisplayName = test-instance}.max()" | jq -r '.data[] | .["aggregated-datapoints"][] | [ .timestamp ,.value] | @csv' | sort -t ',' -k 1 > test-instance-CpuUtilization.csv

その他のメトリックについてはマニュアルを参照
https://docs.cloud.oracle.com/iaas/Content/Compute/References/computemetrics.htm

※ もちろん環境変数をつかってもOK

$ INSTANCE=test-instance
$ STARTTIME='2019-12-06 13:00'
$ ENDTIME='2019-12-07 00:00'
$ oci monitoring metric-data summarize-metrics-data --namespace oci_computeagent --start-time "$STARTTIME" --end-time "$ENDTIME" --query-text "CpuUtilization[1m]{resourceDisplayName = $INSTANCE}.max()" | jq -r '.data[] | .["aggregated-datapoints"][] | [ .timestamp ,.value] | @csv' | sort -t ',' -k 1 > $INSTANCE-CpuUtilization.csv

出力例

test-instance-CpuUtilization.csv
"2019-12-06T13:00:00+00:00",10.1984126984126977
"2019-12-06T13:01:00+00:00",10.44532409698169184
"2019-12-06T13:02:00+00:00",11.49529470034670453
"2019-12-06T13:03:00+00:00",11.3895781637717097
"2019-12-06T13:04:00+00:00",10.19890601690700782

例2)Blockボリュームの読み込みスループット

コマンド例

12/07 14:00 UTC から 12/07 16:00 UTCまでの期間で、指定したBlockボリュームの読み込みバイト数を、1分間隔で出力1

$ oci monitoring metric-data summarize-metrics-data --namespace oci_blockstore --start-time '2019-12-07 14:00' --end-time '2019-12-07 16:00' --query-text "VolumeReadOps[1m]{resourceId = "ocid1.volume.oc1.ap-tokyo-1.xxxxxxxxxxxxx"}.max()" | jq -r '.data[] | .["aggregated-datapoints"][] | [ .timestamp ,.value] | @csv' | sort -t ',' -k 1 > blockvolume-readIOPS.csv

その他のメトリックについてはマニュアルを参照
https://docs.cloud.oracle.com/iaas/Content/Block/References/volumemetrics.htm

出力例

blockvolume-readIOPS.csv
"2019-12-07T14:17:00+00:00",14795
"2019-12-07T14:18:00+00:00",20473
"2019-12-07T14:19:00+00:00",16656
"2019-12-07T14:20:00+00:00",16778
"2019-12-07T14:21:00+00:00",7286

例3)vNICからの送信データ量

コマンド例

12/07 14:00 UTC から 12/07 16:00 UTCまでの期間で、指定したvNICから送信されたバイト数を、1分間隔で出力1

$ oci monitoring metric-data summarize-metrics-data --namespace oci_vcn --start-time '2019-12-07 14:00' --end-time '2019-12-07 16:00' --query-text "VnicToNetworkBytes[1m]{resourceId = "ocid1.vnic.oc1.ap-tokyo-1.xxxxxxxxx"}.sum()" | jq -r '.data[] | .["aggregated-datapoints"][] | [ .timestamp ,.value] | @csv' | sort -t ',' -k 1 > vnic-toBytes.csv

その他のメトリックについてはマニュアルを参照
https://docs.cloud.oracle.com/iaas/Content/Network/Reference/vnicmetrics.htm#metrics-list

出力例

vnic-toBytes.csv
"2019-12-07T14:00:00+00:00",65337
"2019-12-07T14:01:00+00:00",65204
"2019-12-07T14:02:00+00:00",65400
"2019-12-07T14:03:00+00:00",75213
"2019-12-07T14:04:00+00:00",65666

補足

OCI CLIコマンド部分の説明

oci monitoring metric-data summarize-metrics-data --namespace oci_vcn --query-text "VnicToNetworkBytes[1m]{resourceId = "ocid1.vnic.oc1.ap-tokyo-1.xxxxxxxxx"}.sum()"

oci monitoring metric-data summarize-metrics-data

Monitoringサービスから集約データを取得するコマンド

パラメーター等の説明は以下のマニュアルを参照
https://docs.cloud.oracle.com/iaas/tools/oci-cli/latest/oci_cli_docs/cmdref/monitoring/metric-data/summarize-metrics-data.html

--namespace

メトリックnamespaceを指定

対象サービスによって異なるため、どのようなnamespaceがあるかはマニュアルを参照します。
残念ながら、一覧にはなっていないので、各サービスのMetricsという項目から確認します。
例)
computeの場合、"oci_computeagent"、"oci_blockstore"、"oci_vcn"の3つがある
databaseは"oci_autonomous_database"のみ(2019/12現在)

--start-time, --end-time

取得するメトリックデータの期間を指定

指定しなかった場合、コマンドが発行された3時間前の時点がstart timeとなります。

なお、指定するデータの取得間隔によって、どの時点までさかのぼって取得できるかが決まっています
(粒度ごとに保存期間が決まっています)
- 1分間隔:7日
- 5分間隔:30日
- 1時間間隔:90日

--query-text

メトリックと取得間隔、各種フィルタや集計方法などを指定して、生データポイントからデータを取得する方法を記述するMQLを指定

基本的な構文は以下
metric[interval]{dimensionname="dimensionvalue"}.groupingfunction.statistic

詳細は以下のマニュアルを参照
https://docs.cloud.oracle.com/iaas/Content/Monitoring/Reference/mql.htm

ただし、ウェブ管理コンソール画面の「Monitoring」>「Metrics Explorer」で、必要な項目を入力してチャートを更新すると、MQLが自動生成されるため、1から自作しなくてもOKです。
image.png
※ クエリが長くて見切れている場合は「Close query editor」をクリックすれば、全文が表示されます。

jq以降の説明

jq -r '.data[] | .["aggregated-datapoints"][] | [ .timestamp ,.value] | @csv' | sort -t ',' -k 1 > xxxx.csv

jq

jsonからデータを取り出したり整形するコマンド

-r

抽出した値をクォーテーション無しで出力させるためのオプション

.data[] | .["aggregated-datapoints"][] | [ .timestamp ,.value]

必要なデータの抜き出し

OCI CLIの出力するjsonの構造に従って、"data"に対する配列の値である"aggregated-datapoints"の、さらに対応する配列の中から、"timestamp"と"value"の値を抜き出します。

参考:oci cliが出力するjson

{
  "data": [
    {
      "aggregated-datapoints": [
        {
          "timestamp": "2019-12-07T10:12:00+00:00",
          "value": 45.91058972075785
        },        
          "timestamp": "2019-12-07T11:21:00+00:00",
          "value": 5.008442198672524
        },
        {
(中略)
        {
          "timestamp": "2019-12-07T11:25:00+00:00",
          "value": 1.0136996285751265
        }
      ],
      "compartment-id": "ocid1.compartment.oc1...xxxxxxxxxxxxxxxx",
      "dimensions": {
        "availabilityDomain": "XXXX:AP-TOKYO-1-AD-1",
        "faultDomain": "FAULT-DOMAIN-1",
        "imageId": "ocid1.image.oc1..aaaaaaaa2es7kqqgmmjyymzdaaeqmmehrprg6gdjxs4on5lpzwiv64przksa",
        "instancePoolId": "Default",
        "region": "ap-tokyo-1",
        "resourceDisplayName": "test-instance",
        "resourceId": "ocid1.instance.oc1.ap-tokyo-1.xxxxxxxx",
        "shape": "VM.Standard2.2"
      },
      "metadata": {
        "displayName": "CPU Utilization",
        "maxRange": "100",
        "minRange": "0",
        "unit": "Percent"
      },
      "name": "CpuUtilization",
      "namespace": "oci_computeagent",
      "resolution": null,
      "resource-group": null

@ csv

配列データをCSVデータにして出力

sort -t ',' -k 1

ソートコマンドで並び替え

-tで区切り文字を指定し、-kでソートのキーとなる項目(1項目目=timestamp)を指定しています。

> xxxx.csv

出力をリダイレクトしてcsvへ吐き出し

以上


  1. 正確には1分のうちの最大値(max)を出力させるコマンドですが、1分間隔でしかメトリックは収集されていないため1分間隔を指定している場合はmaxでもsumでも同じです。 

11
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
5