課題感
- GKE上のバッチ処理の成否は監視している
- しかし、バッチ処理時間の伸びは監視できていない
- データ数と共に線形に処理時間が伸びているようだったら、何かしら対応を考えたい
- いわゆるバッチの突き抜け対策
- 具体的にはこういうことをしたい
- しかし、仕事では今はMackerelではなくCloud Monitoringを使っている
- 素朴に真似をするのであれば、Cloud Monitoringに実行時間を投稿するhorenso用のreporterを書けばよいが...
解決策
- reporterを書こうと思ったが、もしかして...と思ってCloud Monitoringの組み込みのメトリックを見にいった
- そうすると案の定実行時間相当のメトリックが取れた
- containerのuptime
- バッチ処理でないやつに関しては適当にフィルタを書く
- namespace毎にgroupingして、maxを取れば所望のグラフが取れる
- バッチ処理毎にhorensoを差し込まなくてよいので気が楽
- 必要であれば、namespace毎にCloud Monitoringのアラートを仕込むのも簡単
設定がコピペできるようにjsonも残しておきます。
{ "dataSets": [ { "timeSeriesFilter": { "filter": "metric.type=\"kubernetes.io/container/uptime\" resource.type=\"k8s_container\" resource.label.\"namespace_name\"!=\"argo\" resource.label.\"namespace_name\"!=\"dbt-runner-ns\" resource.label.\"namespace_name\"!=\"kube-system\" resource.label.\"namespace_name\"!=\"ml-news-admin-web-console-ns\"", "minAlignmentPeriod": "43200s", "aggregations": [ { "perSeriesAligner": "ALIGN_MEAN", "crossSeriesReducer": "REDUCE_MAX", "groupByFields": [ "resource.label.\"namespace_name\"" ] }, { "crossSeriesReducer": "REDUCE_NONE", "groupByFields": [] } ] }, "targetAxis": "Y1", "plotType": "LINE" } ], "options": { "mode": "COLOR" }, "constantLines": [], "timeshiftDuration": "0s", "y1Axis": { "label": "y1Axis", "scale": "LINEAR" } }
感想
GKEでk8sを動かしていると、勝手にメトリックやらログを使いやすくしてくれてて便利ですね。どんどん使っていきたい。