こんにちは
インフラの戸田です。
もうすぐ春ですね。戸田は、この冬、稀に見る補強により、球春の幕開けが楽しみで楽しみで仕方がありませんでした。
しかし、主力が肉離れを起こし、超期待されていた選手が右有鈎骨骨折していたという事実を知りませんでした。(何の話かというと、プロ野球のとあるチームの話です。
みなさんも有鈎骨骨折には気をつけてください
では、本題にいきます。
やること
弊社では一部サービスにおいて、監視サービスのMackerelを利用し監視を行っております。
今回の記事では、GitLabで mkr pull
でダウンロードする設定ファイルを管理しているプロジェクトについてのお話となります。
この運用をしていた場合、Mackerelの監視設定変更をGUIで行った場合に、GtiLabで管理されている設定ファイルと実際の設定に差分が生じます。
例として、
特定のタイミングで、一旦ミュートにし、戻し忘れ、何かあっても通知が来ない。のような場合があるかもしれません。
そんなことがないように、Mackerel上の設定に差分がないか定期的に確認します。
使うもの
- MackerelのAPIキーとmonitors.json
- Dockerfile とdocker-compose.ymlとシェル
- gitlab-ci.yml
以上になります。
設定順番
- MackerelのAPIキーを取得する
- Dockerを使って、monitors.jsonを取得する
- GitLab Container RegistryにDockerイメージをpushする
- GitLabに.gitlab-ci.ymlをpush
- スケジューラーの設定
MackerelのAPIキー取得
管理画面のトップからAPIキーを新しく取得して、記録しておきます。
Dockerを使って、monitor.jsonを取得する
Dockerfile
FROM amazonlinux:1 RUN yum install -y sudo RUN curl -fsSL https://mackerel.io/file/script/amznlinux/setup-yum.sh | sh RUN yum install -y mkr RUN mkdir /data WORKDIR /data COPY ./docker-entrypoint.sh / ENTRYPOINT ["/docker-entrypoint.sh"]
docker-compose.yml
version: "3" services: mkr: build: ./ volumes: - ./monitors.json:/data/monitors.json environment: - MACKEREL_APIKEY
docker-entrypoint.sh
#!/bin/bash set -e if [ "$1" = 'pull' ]; then mkr monitors pull fi if [ "$1" = 'push' ]; then { mkr monitors diff -e || (read -p '差分がありますが上書きしても良いですか? (y/N): ' yn; case \"$$yn\" in [yY]*) ;; *) exit 1 ; exit 0 ;; esac) } && mkr monitors push && mkr monitors pull && echo completed fi if [ "$1" = 'check' ]; then mkr monitors diff -e fi
これらを使って、monitors.jsonを取得します。
ローカルでの実行方法は
MACKEREL_APIKEY="MackerelのAPIキー" docker-compose run --rm mkr [pull|push|check]
で実行します。
GitLab Container RegistryにDockerイメージをpushする
GitLabにはDockerイメージを保管できる機能があるので、そこにDockerイメージを追加します。
Registryタブに移動すると、How to use the Container Registry
に実行方法が記載されてますので、今回は省略します。
GitLabに.gitlab-ci.ymlをpushする
.gitlab-ci.yml
--- stages: - check mkr-setting-check: stage: check image: name: "先ほどGitLabにpushしたDockerのimage名" entrypoint: [""] script: - ./docker-entrypoint.sh check only: - schedules
GitLab-CIで使う用のYAMLです。あとは、スケジューラーに登録します。
スケジューラーの設定
「毎日午前11時にmasterブランチに対して、実行してね」という設定のみで大丈夫です。(上記の画像の通りです)
あとは、「Settings」-> 「Integrations Settings」-> 「Slack notifications」にwebhook URLを記入します。
「Notify only broken pipelines」にチェックを入れるだけで、差分があったときのみ通知してくれます。
感想
内容はすごくシンプルです。Docker初心者が教えてもらいながら、初めてこのようなものを作りました。
実際に「設定をミュートにしていたことがわかった」というお声を頂いたので、 すごくうれしかったです。
まとめ
GitLabを使って、簡単にMackerelの設定を管理して、定期的な差分確認をできるというのは幸せですね。
以上となります。 最後までご覧いただきありがとうございます。