6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Datadogのアラート時の対応をRundeckで自動化する

Posted at

やりたかったこと

datadogのMonitorsで閾値超過時にアラートをslackに通知しているが、対応方法が決まっているものがある。
そういうものはトイルになるので、自動化したかった。

構成

全体の構成としては、下図のようなものになる。
DatadogでGKEをモニタリングしており、Monitorによるアラート発報時にwebhookにてRUNDECKのJOBを実行する。
なお、RUNDECKはCloudArmorにてSourceIPを制限している。

Datadogのアラート時の対応をRundeckで自動化する (1).png

しくみを作る

CloudArmorにDatadog webhookのSourceIPを許可する

公式ドキュメント通り、datadogの各サービスのsource ipは取得できる。

curl -X GET "https://ip-ranges.datadoghq.com/" \
-H "Content-Type: application/json"

今回は以下のようにwebhooksのみを取得し、CloudArmorに追加しておく

curl -X GET "https://ip-ranges.datadoghq.com/" \
-H "Content-Type: application/json" \
| jq '.webhooks'

rundeck側で実施するjobを作成する

取り敢えず、適当にjobを追加しておく
スクリーンショット 2021-03-20 20.35.47.png

追加したjobの Workflowには 引数に ${option.raw}を追加する。このrawにdatadogのアラートの詳細情報(Payload)が乗ってくる。

スクリーンショット 2021-03-21 9.25.59.png

rundeck側でwebhookの設定をする

以下からwebhookを追加する

Rundeck 2021-03-20 20-31-43.png

webhookの詳細を追加する。
先程追加したjobを指定し、
datadogのドキュメントにも記載されているが、-raw ${raw} -event_type ${data.event_type} をoptionに追加しておく。
このrawにdatadogのアラートの詳細情報(Payload)が乗ってくる。

スクリーンショット 2021-03-20 20.38.14.png

webhookを保存すると、Post URLが発行される。

Rundeck 2021-03-20 20-42-35.png

datadog側でwebhookの設定をする

Integrations -> webhook で検索

スクリーンショット 2021-03-20 21.12.00.png

Webhooks Integration の Webhooks から + New

スクリーンショット 2021-03-21 8.58.11.png

適当にNameを入れて、 URL には rundeck 側で発行された Post URL 記載する。
このPayloadに記載されたものが rundeck側で設定した raw に乗ってくる。
デフォルトでは "alert_scope": "$ALERT_SCOPE"が無いが、アラートの条件がほしかったので追加しておく。
その他、追加できるものは公式ドキュメントに記載されている。

スクリーンショット 2021-03-21 10.09.42.png

datadogのアラート設定

Monitors にてアラートを設定する
以下はKubernetesのPVCのディスク使用率が80%になったらアラートとしている。

スクリーンショット 2021-03-21 10.02.24.png

アラート時にwebhookを呼び出したいので、以下を入れておく

{{#is_alert}}
@webhook-test-webhook 
{{/is_alert}}

アラートの確認

Test NotificationでNotificationをテストする
Monitors | Datadog 2021-03-21 10-12-22.png

rundeck側でjobが実行されている。

✅ [OK] Rundeck - test-job : Execution at 1:10 AM by admin 2021-03-21 10-14-13.png

ユースケースに応じて、このPayloadからイジイジしてシェルスクリプトを作る
alert_scopeを付加しておくと以下の感じでいじるときに便利だったから追加しておいた

echo $1 | jq 

TARGET=`echo $1 | jq '.alert_scope' | sed 's/"//g'`
echo debugging target alert_scope is ${TARGET}

# Namespaceとかpod名がどの順番で来てもいいようにしておく
NAMESPACE="hoge"
POD_NAME="fuga"
for i in $(echo $TARGET | sed "s/,/ /g")  # カンマ区切りを先ずバラす
  do 
    echo debugging for_statement index is "$i"
    if [ `echo $i | grep 'namespace:'` ] ; then # namespace名を取得する
      NAMESPACE=$(echo $i | cut -d ":" -f2)
    elif [ `echo $i | grep 'pod_name:'` ] ; then # pod名を取得する
      POD_NAME=$(echo $i | cut -d ":" -f2)
    fi

 done

echo The target namespace is $NAMESPACE
echo The target pod_name is $POD_NAME 

sudo gcloud container clusters get-credentials クラスタ名 --zone asia-northeast1-a --project プロジェクト名
sleep 2
sudo kubectl exec pod -n $NAMESPACE $POD_NAME -- やりたい処理

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?