AlertmanagerのWebhookをトリガーに自動化ワークフローを実行する amgate

今週は週一コードリーディングはお休みです。 代わりに、amgateというツールを作っていたので、それを紹介します。

https://github.com/Drumato/amgate

シンプルには、Alertmanagerのwebhookを受け取るシンプルなサーバです。 ただし、ConfigMapに書き込んだ設定を元に、 「Webhook eventに含まれるアラートに対しアクションをdispatchし、そのアクションを実行する」という仕組みが内包されています。

amgate自体をout-of-the-boxで使うこともできますが、 用途に合わせてre-buildして使えるように、フレームワーク的に実装されています。

設定のイメージはこんな感じです。

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    
  • built-in actionを追加する
    • HTTP Requestを、さらに外部に投げる(これにより任意のAPIが起動できるようにする)
    • gRPCやJSON RPCもサポートする
    • replicasをスケールアウト/インしたり、resource requestsをインプレースに変更する
    • ArgoCD管理されていることを前提に、更新したオブジェクトをリモートにpushする
  • メトリクスやログの追加
  • (action失敗時の)Slack通知機能
  • デモ環境の用意

あまりにもシンプルな記事になってしまいましたが、 これからも継続して開発していくため、「これからproduction readyにしていく」という意味で開発日記として残しておきます。