3行まとめ
- Cloud Monitoringにメトリックを投稿するのは案外面倒
- コマンドラインからさっとメトリックを投稿するのに便利なツールを作った
- jqでさっと加工して、がっとメトリックを投稿したいときにどうぞ
背景
- Cloud MonitoringはGCP上で監視を行ないたい場合、便利なサービス
- 仕事でも趣味でも使っている
- 事前に用意されている指標や自分で作ったカスタムメトリックを投稿できる
- しかし、メトリックを投稿するのは案外面倒
- ref: カスタム指標の作成 | Cloud Monitoring | Google Cloud
- 別に難しいことはないのだが、「JSONで返ってくるAPIのレスポンスをjqで適当に加工して、Cloud Monitoringに投稿して〜」をやろうとすると、多少スクリプトを書く必要がある
- コマンドラインにも優しい、Unix的な考え方のツールが欲しい
類似ツール: mkr
- メトリックをコマンドラインからよしなに扱うと言えば、(前職の)Macerelのコマンドラインツールであるmkrがよくできていた
- メトリックをコマンドラインからJSONで取得したり、TSV形式の入力からメトリックを投稿したり
- Cloud Monitoringでこれができればいいんじゃね...?
cat <<EOF | mkr throw --host <hostId> <name> <value> <time> <name> <value> <time> EOF
cloud_monitoring_metrics_throwを作った
mkr throw
の部分をCloud Monitoring向けにしたcloud_monitoring_metrics_throw
を作りました。
Cloud Monitoringはメトリックに対してラベルを付与でき、tsvだと表現しにくいところがあるため、jsonlを入力とすることにしました。こんな感じ。
{"labels": {"sample_key": "xxx"}, "value": 10.1} {"labels": {"sample_key": "yyy"}, "value": 20.2} {"labels": {"sample_key": "zzz"}, "value": 30.3}
こいつを入力として、さっとメトリックを投稿できます。こんな感じ。
cat ./sample.json | cloud_monitoring_metrics_throw --project my-project --metricName sample_metric
metric descriptorの定義は事前にやっておく必要があります、こいつをやっておくと後で可視化や監視するときに設定しやすいので。Terraformとかを使っているなら、こんな感じで定義してください。
resource "google_monitoring_metric_descriptor" "sample_metric_descriptor" { description = "Sample metric" display_name = "sample_metric" type = "custom.googleapis.com/sample_metric" metric_kind = "GAUGE" value_type = "INT64" labels { key = "sample_key" value_type = "STRING" description = "Sample label key" } }
パイプで使い回しのいいツールができたので、これを使ってArgo Workflowのバッチ処理の状況可視化をCloud Monitoringでやってみようかなとか考えてます。Happy monitoring life!