今回行うこと
ZabbixでWebのURL監視を行い、障害の発生を検知したときにAppKeeperでWebサービスの復旧を行うシステムの構築方法を記載します。
具体的には、まずZabbix側のWebのURL監視で異常を検知します。そしてZabbixのWebhook機能よりAppKeeperのサービス復旧APIを呼び出し、Webサービスを復旧します。
今回は、Webサーバーにnginxを使用します。
※GUI上でのZabbixの設定手順はこちらを参照ください。
事前に用意するもの
- Zabbix
- 推奨version: 5.0以降
- (Zabbix 5.0で動作確認済)
- nginxサービスを起動しているEC2インスタンス
- nginxサービスが起動しているEC2インスタンスを監視するAppKeeperのテナント
- 外部連携用トークン
※トークンはAppKeeperの「アカウント情報」の画面より、「外部連携トークンの取得」ボタンをクリックすると表示されます(詳細は外部連携機能のページを参照)。
AppKeeper側の設定
AppKeeper側では、該当AWSアカウントを監視中にし、回復設定を「APIのみ」とします
Zabbixの設定手順
Step 1. 外形監視の設定(Hostの設定)を行う
1. Hostの作成
この項目では外形監視の基盤となる"Host"を作成し、設定を進めていきます。
i) zbx_host_nginx.jsonをダウンロードし、外形監視したいWeb URLを書き換えて下さい。書き換える箇所は「zabbix_export > hosts > httptests > steps > url」です。
また「zabbix_export > hosts > triggers> priority」で今回の障害の重大度を設定できます(リンク先のテンプレート内ではHIGHとなっております)。
...(略)...
"httptests": [
{
"name": "AppKeeperNginxScenario",
"steps": [
{
"name": "AppKeeperNginxScenarioStep1",
# ↓以下に監視したいWeb URLを記入する
"url": "http://xxxxx.com",
"follow_redirects": "NO"
}
]
...(略)...
"triggers": [
{
"expression": "{AppKeeperNginxHost:web.test.fail[AppKeeperNginxScenario].last()}<>0",
"recovery_mode": "RECOVERY_EXPRESSION",
"recovery_expression": "{AppKeeperNginxHost:web.test.fail[AppKeeperNginxScenario].last()}=0",
"name": "AppKeeperNginxTrigger",
# ↓ここにpriorityを指定する
# priorityの値は以下の6つの中から選ぶ
#「Not classified」「Information」「Warning」「Average」「High」「Disaster」
"priority": "HIGH"
}
]
...(略)...
なおgroup名やhost名などは適宜変更しても構いません。
ii) 左メニューの「Configuration」の「Templates」を選択します。
iii) 右上の「Import」ボタンをクリックします。
iv) Import fileとしてi)で書き換えたjsonファイルを指定します。「Groups」「Hosts」「Triggers」「Web scenarios」の4つの項目の「Create new」のチェックを入れて下さい。それ以外の項目は今回のインポートに影響しないので任意の値で構いません。最後に「Import」ボタンをクリックして下さい。これでHostの設定は完了です。
2.Webhookの設定を行う(Media typeの作成)
i) zbx_mediatype.jsonをダウンロードし、Parameterを書き換えます。書き換える箇所は「zabbix_export > media_types > parameters」内の、"token", "acountId", "instanceId"の3項目の「value」です。以下jsonファイルの抜粋です。
...(略)...
"media_types": [
{
"name": "AppKeeperWebHook",
"type": "WEBHOOK",
"parameters": [
{
"name": "token",
# ↓事前に用意した外部連携トークンを記入する
"value": "eyJXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
},
{
"name": "accountId",
# ↓監視インスタンスを所有しているAWSアカウントIDを記入する
"value": "XXXXXXXXXXXX"
},
{
"name": "instanceId",
# ↓監視するインスタンスIDを記入する
"value": "i-XXXXXXXX"
}
],
...(略)...
ii) 左メニューの「Configuration」の「Templates」を選択します。
iii) 右上の「Import」ボタンをクリックします。
iv) Import fileとしてi)で書き換えたjsonファイルを指定します。「Media types」の「Create new」のチェックを入れて下さい。それ以外の項目は今回のインポートに影響しないので任意の値で構いません。最後に「Import」ボタンをクリックして下さい。これでMedia typesの設定は完了です。
Step 2. ユーザーにWebhookの設定を紐づける
1. ユーザーグループにHostのアクセス権限を与える
i) 左メニューの「Administration」の「User groups」を選択し、ユーザーグループの設定画面を開きます(ここではユーザー名が「AppKeeperUserGroup」と仮定します)。
ii) 「Premissions」タブを選択し、「Select」ボタンをクリックしてPermissionの作成モーダルを表示させます。
iii) Step1. 1.で生成されたHostGroupを選択して「Select」ボタンをクリックします。
iv) アクセス権限に「Read-write」を設定して「Add」リンクをクリックします。
v) 最後に「Update」ボタンをクリックしてユーザーグループにStep1 .1で作成したホストのアクセス権限を付与します。
2. ZabbixユーザーにAppKeeperのMedia typeを紐づける
i) 左メニューの「Administration」の「User」を選択し、ユーザーの設定画面を開きます(ここではユーザー名が「AppKeeperUser」と仮定します)。
ii) 「Media」タブに移動し、「Add」のリンクをクリックしてMediaの作成モーダルを表示させます。
iii) 「Type」にStep 1. 2.で生成されたMedia typesを設定します。「Send to」はお客様のメールアドレスを指定します。「Use if servirty」では Step 1. 1. i)で指定したインポート設定ファイル内記載のSeverityを選択します。最後に「Add」をクリックします(Webhookの設定なので、ここで指定したメールアドレスは特に使われることはないとは思われますが、必須項目であるため指定する必要があります)。
iv) (オプション)「Type」がEmailのMediaを新しく作成します。メールアドレスを「Send to」に指定します(この設定をすることにより、Webサーバー障害時のメッセージが指定先のメールに送信されます)。
Step 3. Webhookと外形監視の関連付けを行う
この項目ではWebhookと(Step1. 1で設定した)外形監視の関連付けを行います。
- 左メニューの「Configuration」の「Actions」を選択します。
- 右上の「Create action」ボタンをクリックします。
- 「Name」にAction名を指定します。
- 「Condition」のAddをクリックしてモーダルを表示させます。「Type」をTrigger、「Operation」をequals、「Trigger」にはStep 1. 1.で生成されたTriggerを設定します。最後にAddをクリックしてConditionを登録します。
- 「Operations」タグに移ります。「Default operation step duration」項目にWebhookの実行間隔を指定します。ここでは1分毎にWebhookを実行するため"1m"と指定します。
- 「Operations」の「Add」をクリックします。
- 「Operation type」にSend messageを、「Send to users」にWebhook設定を行ったユーザーを指定します。「Steps」には"1-0"と指定します。最後に「Add」を押して設定完了です。
※ここではStepsに"1-0"と2つの値を指定しましたが、1つ目の設定値は障害を検知してWebhookの実行を開始するStep数を意味します。2つ目の設定値は最初の障害検知を起点として何度目の障害までWebhookを実行するか(0は無限回)を意味します。
設定値が"1-0"であれば「障害を検知したら即座にWebhookを実行し、サービスが復旧するまでWebhookを実行し続ける」という意味になります。
設定値が"2-4"であれば、2度目の障害検知時にWebhookを実行し、サービスが復旧するまで2, 3, 4度目と最大で3回Webhookを実行します。 - 障害回復時のメール設定を行う
a. Recovery operationsのAddリンクをクリックします。
b. 「Send to user groups」により、障害復旧時に送信されるメールアドレスを指定します。このとき、障害発生時に無駄なWebhookを起動させないため、「Send only to」をEmailにする必要があります。
動作確認
- テストとして、インスタンスにログインした後に「systemctl stop nginx」等のコマンドでnginxサービスを落とします。
- Dashboardで対象のHostで障害が起きていることを確認します。
- しばらく経過した後、nginxが無事に復旧したことを確認できれば、zabbixとの連携は完了です。
コメント
0件のコメント
サインインしてコメントを残してください。