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という機能があります。同期の前や後にコンテナを動かしてスクリプトを動かすことができるものです。
まさに今回やりたいことにぴったりな機能です。今回であれば、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
--to
にUNIX秒を入れることで時間範囲を指定できます。
これを組み合わせることで、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ユーザーのみなさんは違和感を持った方もいるのではないでしょうか。気づいた人はいますぐカスタムダッシュボードのメニューバーをチェック!!!