Cloud Monitoring ダッシュボードを定義ファイルから作成する
前書き
Google Cloud の Cloud Monitoring では、ダッシュボードを Web 上の GUI でグラフィカルに作成することができる。これは大変便利な機能なのだが、
- 複数環境に同一のダッシュボードを用意したい場合(例えば開発環境・本番環境に同じダッシュボードを作成したい場合)、各環境でダッシュボードを作成・更新する必要がある。
- ダッシュボードのバージョン管理が行えず、更新時のレビューの実施などがやりづらい。
など、これだけでは少々痒いところに手の届かない場面もある。
これらの欠点を補うものとして、Cloud Monitoring ではダッシュボードを扱う API が用意されており、ダッシュボードを定義ファイルから生成することができる。
ダッシュボード作成の流れ
とはいえ、JSON ファイルを一から作成するのは面倒なので、
- 一度、Web GUI (Cloud Console) を使って手作業でダッシュボードを作成
- 作成したダッシュボードから定義ファイルをエクスポート
- 定義ファイルを用いて API からダッシュボードを再作成
という流れをとるのがよいだろう。
一度ダッシュボードを API から作成した後は、定義ファイルの方を修正してダッシュボードを更新していくことになる。
前提条件
- Cloud Monitoring に対する権限があること
- Google Cloud SDK のインストールがされていること
- jqコマンドがインストールされていること
Cloud Console から手作業でダッシュボードを作成
まずは Cloud Console 上でグラフを見ながらダッシュボードを作り上げていく。
グラフの配置もグラフィカルに行えるので、最終的に必要とするダッシュボードをまずは作り上げてしまおう。
既存のダッシュボードから定義ファイルをエクスポート
ダッシュボードのリソース名を取得
ダッシュボードを作成したら、まずはそのダッシュボードの「リソース名」をgcloud
コマンドを使って取得する。
gcloud monitoring dashboards list --format="table[box](displayName,name)"
- 上記コマンド結果の
displayName
が表示名で、name
がリソース名。
コマンド実行例
$ gcloud monitoring dashboards list --format="table[box](displayName,name)"
┌────────────────────┬───────────────────────────────────────────────────────────────────────┐
│ DISPLAY_NAME │ NAME │
├────────────────────┼───────────────────────────────────────────────────────────────────────┤
│ Sample Dashboard │ projects/xx4500xxxxxx/dashboards/1dxxf15x-773x-49cx-b97x-035xxfbf6bax │
│ Sample Dashboard 2 │ projects/xx4500xxxxxx/dashboards/exxx699x-ac7x-4xx8-bxx4-xxf78xxx334d │
└────────────────────┴───────────────────────────────────────────────────────────────────────┘
ダッシュボード定義のエクスポート
次に、取得したリソース名を指定して、ダッシュボード定義をエクスポートする。
フォーマットには JSON を指定する。
gcloud monitoring dashboards describe $DASHBOARD_RESOURCE_NAME --format="json" | jq "del(.etag,.name)" > ./dashboard.json
-
$DASHBOARD_RESOURCE_NAME
には先ほど取得したダッシュボードのリソース名を指定する。 -
etag
,name
フィールドはダッシュボードの新規作成には不要なので削除してしまう。
コマンド実行例
$ gcloud monitoring dashboards describe projects/xx4500xxxxxx/dashboards/1dxxf15x-773x-49cx-b97x-035xxfbf6bax --format="json" | jq "del(.etag,.name)"
{
"displayName": "Sample Dashboard",
"mosaicLayout": {
"columns": 12,
"tiles": [
{
"height": 4,
"widget": {
"title": "Audited Log bytes",
"xyChart": {
"chartOptions": {
"mode": "COLOR"
},
"dataSets": [
{
"minAlignmentPeriod": "60s",
"plotType": "STACKED_AREA",
"timeSeriesQuery": {
"timeSeriesFilter": {
"aggregation": {
"alignmentPeriod": "60s",
"perSeriesAligner": "ALIGN_RATE"
},
"filter": "metric.type=\"logging.googleapis.com/byte_count\" resource.type=\"audited_resource\"",
"secondaryAggregation": {
"alignmentPeriod": "60s",
"perSeriesAligner": "ALIGN_MEAN"
}
}
}
}
],
"timeshiftDuration": "0s",
"yAxis": {
"label": "y1Axis",
"scale": "LINEAR"
}
}
},
"width": 5
},
{
"height": 4,
"widget": {
"title": "Log entries [MEAN]",
"xyChart": {
"chartOptions": {
"mode": "COLOR"
},
"dataSets": [
{
"minAlignmentPeriod": "60s",
"plotType": "LINE",
"timeSeriesQuery": {
"timeSeriesFilter": {
"aggregation": {
"alignmentPeriod": "60s",
"perSeriesAligner": "ALIGN_RATE"
},
"filter": "metric.type=\"logging.googleapis.com/log_entry_count\" resource.type=\"global\"",
"secondaryAggregation": {
"alignmentPeriod": "60s",
"perSeriesAligner": "ALIGN_MEAN"
}
}
}
}
],
"timeshiftDuration": "0s",
"yAxis": {
"label": "y1Axis",
"scale": "LINEAR"
}
}
},
"width": 4,
"xPos": 5
}
]
}
}
これで定義ファイルの取得完了だ。
定義ファイルからダッシュボードを作成
前手順でダッシュボードの定義ファイルがエクスポートできたので、このファイルを使って改めてダッシュボードを再作成しよう。
gcloud
gcloud
コマンドでダッシュボードの作成が可能だ。
gcloud monitoring dashboards create --config-from-file ./dashboard.json
コマンド実行例
gcloud monitoring dashboards create --config-from-file ./dashboard.json
Created [83xxc447-8x14-4x4a-90cx-0bx064dxx0c9].
--config-from-file
オプションで先ほどエクスポートした定義ファイルのパスを指定する。今回は JSON ファイルを使用したが、gcloud
コマンドの場合は YAML ファイルでも可能。
Terraform
Terraform も対応している。
resource "google_monitoring_dashboard" "dashboard" {
dashboard_json = file("./dashboard.json")
}
参考
Discussion