GKE上のバッチ処理の実行時間の推移を可視化する

課題感

  • GKE上のバッチ処理の成否は監視している
  • しかし、バッチ処理時間の伸びは監視できていない
    • データ数と共に線形に処理時間が伸びているようだったら、何かしら対応を考えたい
    • いわゆるバッチの突き抜け対策
  • 具体的にはこういうことをしたい

  • しかし、仕事では今はMackerelではなくCloud Monitoringを使っている
    • 素朴に真似をするのであれば、Cloud Monitoringに実行時間を投稿するhorenso用のreporterを書けばよいが...

解決策

  • reporterを書こうと思ったが、もしかして...と思ってCloud Monitoringの組み込みのメトリックを見にいった
  • そうすると案の定実行時間相当のメトリックが取れた
    • containerのuptime
    • バッチ処理でないやつに関しては適当にフィルタを書く
  • namespace毎にgroupingして、maxを取れば所望のグラフが取れる
    • バッチ処理毎にhorensoを差し込まなくてよいので気が楽
    • 必要であれば、namespace毎にCloud Monitoringのアラートを仕込むのも簡単

f:id:syou6162:20210919211120p:plain
設定例
f:id:syou6162:20210919211124p:plain
グラフの例

設定がコピペできるように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を動かしていると、勝手にメトリックやらログを使いやすくしてくれてて便利ですね。どんどん使っていきたい。