Diary of a Perpetual Student

Perpetual Student: A person who remains at university far beyond the normal period

Argo CDでSyncが完了したらMackerelのグラフアノテーションに記録する(告知もあるよ!)

arthur-1 Mackerel Advent Calendar 2023ラソン21日目の記事です。しばらく1日ずつ遅れますがよろしくお願いします。

Argo CDでdeployした記録をMackerelに残したい!

Argo CDとは、KubernetesでGitOpsを実現する継続的デリバリーツールです。Gitのリモートリポジトリに更新があったら自動でKubernetesクラスタにapplyすることができます。

manifestがapplyされるということは、基本的になんらかのアプリケーションをデプロイするタイミングだと思います。このバイナリプッシュは障害を起こす主な要因の一つです。

監視サービスにおいて、いつデプロイしたかの情報を紐づけてグラフを閲覧できるというのは大事な機能です。Mackerelにはグラフアノテーションという機能があり、グラフ上に時刻と紐づけてメモを残すことができます。

今回はArgo CDでSyncが完了したら、その時刻でグラフアノテーションに書き込み、デプロイイベントとグラフを紐づけて描画できるようなものを作っていきます。

Argo CDのResource Hooksが使える

Argo CDにはResource Hooksという機能があります。同期の前や後にコンテナを動かしてスクリプトを動かすことができるものです。

argo-cd.readthedocs.io

まさに今回やりたいことにぴったりな機能です。今回であれば、HooksのうちPostSync(Syncが完了したら動く)という種類のものを使えばよさそうです。

さらに、MackerelのCLIツールであるmkrは公式で軽量なコンテナイメージを配布しています。mkr annotationsコマンドで以下のようにしてグラフアノテーションを作ることができます。

mkr annotations create --title "synced!!" -s mackerel-service-name -r mackerel-role-name --from $(date +%s) --to $(date +%s)

最低限5つのオプションがあれば動かせます。--titleでグラフアノテーションの見出しを設定できます。-s-r オプションで、グラフアノテーションを記録する先の(Mackerelの)サービスやロールを指定しましょう。また、--from --toUNIX秒を入れることで時間範囲を指定できます。

これを組み合わせることで、Sync起因でmkrを動かしグラフアノテーションを書き込むことができそうですね。では早速Resource Hooksのmanifestを書いていきましょう。

manifests/iot-monitor/mackerel-sesame/postsync.yml

apiVersion: batch/v1
kind: Job
metadata:
  generateName: mackerel-sesame-deploy-annotation-
  annotations:
    argocd.argoproj.io/hook: PostSync
    argocd.argoproj.io/hook-delete-policy: HookSucceeded
spec:
  template:
    spec:
      containers:
        - name: mkr-create-annotation
          image: docker.io/mackerel/mkr:latest
          env:
            - name: MACKEREL_APIKEY
              valueFrom:
                secretKeyRef:
                  name: mackerel-arthur-1
                  key: apikey
          command: ["sh", "-c"]
          args:
            - |
              mkr annotations create --title "synced mackerel-sesame" \
              -s iot-monitor -r mackerel-sesame \
              --from $(date +%s) --to $(date +%s)
      restartPolicy: Never

以上のようなmanifestをpushしてArgo CDでSyncすると、以下のようにSync駆動でグラフアノテーションを書き込むことができました!

デプロイ起因でシステムメトリックが少し跳ねている様子が観察できますね。グラフアノテーション機能はデプロイイベントを記録する場所として非常に便利なのでぜひ使ってみてください。

最後に

ところで、先ほどのスクリーンショットを見て既存のMackerelユーザーのみなさんは違和感を持った方もいるのではないでしょうか。気づいた人はいますぐカスタムダッシュボードのメニューバーをチェック!!!