OCI Monitoringのメトリックデータをcsvにして保存する
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にて、コンパートメントを指定済み
コマンド
構文
- computeインスタンスにmonitoringエージェントがインストールされていること(インスタンス作成時のデフォルト)
- private subnet内のインスタンスについては、Service GatewayやNAT Gateway経由でmonitoringサービスへアクセスできる状態であること
構文
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
出力例
"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
出力例
"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
出力例
"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です。
※ クエリが長くて見切れている場合は「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分のうちの最大値(max)を出力させるコマンドですが、1分間隔でしかメトリックは収集されていないため1分間隔を指定している場合はmaxでもsumでも同じです。 ↩
Author And Source
この問題について(OCI Monitoringのメトリックデータをcsvにして保存する), 我々は、より多くの情報をここで見つけました https://qiita.com/feifo/items/c1fd828872f393124131著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .