概要
Gitlab のアラート機能を使ってみました
簡単に言うと Gitlab 側でインシデントを管理できる機能です
Generics と Prometheus 連携できるアラートがあるのでどちらも試してみました
環境
- GitLab Enterprise Edition 13.2.2-ee
- Prometheus 2.20.0
- AlertManager 0.21.0
- node_exporter 1.0.1
アラートを有効にする
まずは Gitlab 側でアラート管理機能を有効にする必要があります
アラート管理機能は各プロジェクトごとに有効にする必要があります
左メニューの「Settings」->「Operations」と進みます
そして「Alerts」の項目を Expand すると「Active」というトグルスイッチがあるのでこれをオンにします
そして下にある「Save Changes」を選択します
すると Webhook URL と Authorization key が発行されるのでこれを使ってインシデントを情報を Gitlab に送信することができるようになります
テスト送信してみる
試してに仮想インシデント情報として適当なペイロードを送信してみます
「Alert test payload」に適当な JSON を入力し「Test alert payload」を選択します
これで Webhook URL に対してペイロードが送信され Gitlab 上にインシデント情報が貯まっていきます
curl でテスト送信してみる
先程 UI で行ったことを curl でも行ってみます
リクエストは単純な Webhook リクエストなので POST で送信すれば OK です
curl -XPOST 'https://your.gitlab.url/root/test/alerts/notify.json' \
-H "Authorization: Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d @- << EOF
{
"key": "value from curl"
}
EOF
これで同様に curl からのインシデント情報も Gitlab に登録されました
プロジェクトに届いたアラートを確認する
プロジェクトに貯まったアラート情報を確認するには左メニューから「Operations」->「Alerts」と進みます
すると以下のようにテストで送信された 2 つのアラート情報が登録されているのが確認できると思います
UI と curl で送信したカスタムペイロードは各アラートをクリックすると詳細を確認できます
Prometheus からアラート情報を飛ばしてみる
先程は UI と curl からアラート情報を飛ばしましたが今度は Prometheus から飛ばしてみたいと思います
Prometheus には Webhook を飛ばせる機能がすでにあるのでそれを使って Gitlab 上にアラート情報を飛ばします
External Prometheus を有効にする
次にアラート管理機能の External Prometheus を有効にします
Active をオンにして Save Changes しましょう
API URL がブランクだと怒られるので Prometheus を構築した URL を入れましょう
ただローカル IP だと登録できないので適当な URL を指定したら OK だったので今回は適当な URL を指定しました
Authorization key が発行されない場合は「Reset key」を選択して再発行しましょう
Prometheus 側の設定と構築
Prometheus の構築はこちらを御覧ください
今回はローカルの Mac 上に Prometheus を構築しました
ポイントは alertmanager.yml
でここに Gitlab で払い出された Webhook URL と Authorization key を指定します
prometheus.yml と alerts.rule は Prometheus サーバを起動するマシンに配置しましょう
alertmanager.yml は AlertManager を起動するマシンに配置しましょう
vim prometheus.yml
global:
scrape_interval: 15s
evaluation_interval: 15s
alerting:
alertmanagers:
- static_configs:
- targets:
- '192.168.100.1:9093'
rule_files:
- 'alerts.rule'
scrape_configs:
- job_name: 'worker'
static_configs:
- targets: ['192.168.100.10:9100']
vim alerts.rule
groups:
- name: 'Check active memory bytes'
rules:
- alert: 'Worker memory usage alert'
expr: node_memory_Active_bytes{instance="192.168.100.10:9100",job="worker"} > 800000000
for: 5s
annotations:
summary: 'Worker memory usage is over 800MB'
vim alertmanager.yml
route:
receiver: 'default_receiver'
receivers:
- name: 'default_receiver'
webhook_configs:
- http_config:
bearer_token: xxxxxxxxxxxxxxxxxxxxxxxxxxx
send_resolved: true
url: https://your.gitlab.url/root/test/alerts/notify.json
監視対象の exporter の起動します (192.168.100.10)
docker run -d --net="host" --pid="host" quay.io/prometheus/node-exporter
アラートマネージャを起動します (192.168.100.10)
docker run -d -p 9093:9093 --name alertmanager -v $(pwd):/alertmanager prom/alertmanager --config.file=/alertmanager/alertmanager.yml
最後に Prometheus を起動します (192.168.100.1)
docker run -d -p 9090:9090 -v $(pwd):/prometheus-data prom/prometheus --config.file=/prometheus-data/prometheus.yml
動作確認
今回の条件はメモリの使用量を 800MB にすれば alertmanager が検知し Webhook を送信してくれる想定です
stress --vm 1 --vm-keep
--vm-keep
を入れておかないとすぐにアラートが解消してしまい AlertManager が検知しないので --vm-keep
を設定します
しばらくすると AlertManager 側にアラートが上がるのが確認できると思います (192.168.100.10:9093)
そして Gitlab 側のアラートの一覧を見るとちゃんと Webhook が送信されて一覧に登録されているのが確認できると思います
最後に
Gitlab のアラート管理機能を使ってみました
ユースケースとしてはプロジェクトのソースコードがデプロイされている環境で何かあったら Webhook を飛ばしてリソースのアラート管理やエラーのトレースなどを行う感じかなと思います
使いようによっては Google の StackDriver や iOS の Crashlytics のように使うこともできるかなと思います
0 件のコメント:
コメントを投稿