コマンドラインからCloud Monitoringに簡単にメトリックを投稿できるツールを作った

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!