はじめに
こんにちは!そしてこんばんは。
クラウドインテグレーション事業部の 大嵩です。
今回は、業務の中で、1つの Alert Conditionで複数のリソースに対して監視を行っている場合に
リソース名を指定してアラートを抑止する作業が発生した時の対応方法をご紹介します。
検証したこと
今回はALBとそれに関連付けるターゲットグループを2つ(以降TG)とEC2インスタンスを作成。
両方のTGのヘルスチェックをUnhealthy状態にさせてアラートを発報させるが、片方のTGについては発泡されないようにする検証を実施しました。
さらっとEC2を構築
今回はあくまで検証ですので、EC2にApacheをインストールして、サービスを起動。アクセスをできる状態にだけしておきます。
インスタンス作成時に下記のユーザーデータを流し込んでおきます。
#!/bin/bash dnf -y install httpd systemctl start httpd systemctl status httpd if [[ $? -eq 0 ]]; then echo "Apacheが正常に起動しました。" else echo "Apacheの起動に失敗しました。" fi
ALBとTGを作成
EC2インスタンスができたら、TG(x2)とALBを作成します。
こちらもとりあえず HTTP で受けるリスナーで作成します。
タグは下記を追加します
キー | 値 |
---|---|
cloudpack_newrelic | enabled |
Owner | otake-hiroki |
TGを2つ作成
どちらもヘルスチェックをUnhealthyの状態にしておきます。
ALBを作成
いざ、NewRelicと格闘!
今回は、TG「otake-NR-mute-test2」を指定してアラートを抑止したいと思います。
はじめに、MuteRuleを作成する
MuteRuleの設定画面を見ていると、「Build violation filter」のAttributeに「nrqlQuery」があったので
こちらを指定して、下記のNRQLを入力してみました。
SELECT * FROM LoadBalancerSample WHERE label.cloudpack_newrelic = 'enabled' AND label.Owner = 'otake-hiroki' AND provider.targetGroupName = 'otake-NR-mute-test2'
抑止されておらず。。。
NRQLを使用できると思いましたが、調べたところ、Conditionに設定しているNRQLをベースに評価するもののようでした。
そのため、指定の仕方が間違っているようでした。
https://docs.newrelic.com/jp/docs/alerts/get-notified/muting-rules-suppress-notifications/#create
以下スクリーンショットのように、どちらのTGも発報されていました。
抑止できた方法
NRQLの指定として、前述のWHERE以降を記入すれば、期待した動作をすると思われますが、
さらに単純な方法で指定できないかということで、attributeの中にある「tags.」を使用することにしました!
下記ドキュメント内にもあるように、Condition側のNRQL上でFACET句を使用していれば、インシデントイベントにタグが付与されるため、そこからTG名を取得し、指定するものになります。
https://docs.newrelic.com/jp/docs/alerts/get-notified/muting-rules-suppress-notifications/#facet-muting
実際に設定してみる
Condition側に設定しているNRQLは以下です。
SELECT latest(provider.unHealthyHostCount.Average) FROM LoadBalancerSample FACET awsAccountId, awsRegion, provider.targetGroupName WHERE label.cloudpack_newrelic = 'enabled' AND label.Owner = 'otake-hiroki'
そのため、FACET句によって指定できるのは下記になります。
- awsAccountId(AWSアカウントID)
- awsRegion(AWSリージョン)
- provider.targetGroupName(TG名)
この中から、「provider.targetGroupName」を使います!
MuteRule設定
まずは、attributeに tags.< NAME >という項目がありますので、こちらを選択します。
指定するタグに合わせて、下記のように修正します
tags.provider.targetGroupName
そして、Operator を equals へ。また、Valueを抑止したいTGである「otake-NR-mute-test2」に指定します。
(条件としてConditionのIDも一緒に指定します。)
ついに抑止成功!
次の閾値評価時間まで待機していたところ、無事にTG名が「otake-NR-mute-test2」のアラートがMuteされていました!(Muteマークがついている)
もちろん、片方のUnhealthyアラートは発報されている状態です。
注意!
無事にアラートを抑止できたわけですが、1つだけ注意点があります。
ずばり、MuteRule設定項目の「3. Select muting rule end behavior」です。
こちらの項目は、MuteRuleの適用期間が終わってから対象のアラートを発報し直すか、そのままMuteしたままとするかの項目になります。
前者の場合、「Notify」後者の場合「Suppress notification」になります。
そのため、私のようにNotificationに設定している場合、適用期間終了後に発報されてしまうのでご注意ください!
https://docs.newrelic.com/jp/docs/alerts/get-notified/muting-rules-suppress-notifications/#notify
この記事がどなたかの役に立ちますと幸いです。