AlertmanagerのWebhookをトリガーに自動化ワークフローを実行する amgate
Contents
今週は週一コードリーディングはお休みです。 代わりに、amgateというツールを作っていたので、それを紹介します。
https://github.com/Drumato/amgate
1 amgateとは
シンプルには、Alertmanagerのwebhookを受け取るシンプルなサーバです。 ただし、ConfigMapに書き込んだ設定を元に、 「Webhook eventに含まれるアラートに対しアクションをdispatchし、そのアクションを実行する」という仕組みが内包されています。
amgate自体をout-of-the-boxで使うこともできますが、 用途に合わせてre-buildして使えるように、フレームワーク的に実装されています。
2 設定
設定のイメージはこんな感じです。
apiVersion: v1
kind: ConfigMap
metadata:
name: amgate-config
data:
server: |
host: "" # all interfaces
port: 8080
actions: |
- name: k8s-rollout # build-in action
matchers:
- key: name
op: "="
value: "alert1"
- labels:
matchers:
- key: severity
op: "=~" # regex match by Go's regexp
value: "warning|critical"
attrs:
kind: Deployment
namespace: apps
name: myapp
dry_run: false
3 今後の機能
- built-in actionを追加する
- HTTP Requestを、さらに外部に投げる(これにより任意のAPIが起動できるようにする)
- gRPCやJSON RPCもサポートする
- replicasをスケールアウト/インしたり、resource requestsをインプレースに変更する
- ArgoCD管理されていることを前提に、更新したオブジェクトをリモートにpushする
- メトリクスやログの追加
- (action失敗時の)Slack通知機能
- デモ環境の用意
4 おわりに
あまりにもシンプルな記事になってしまいましたが、 これからも継続して開発していくため、「これからproduction readyにしていく」という意味で開発日記として残しておきます。