今回行うこと
ZabbixでWebのURL監視を行い、障害の発生を検知したときにAppKeeperでWebサービスの復旧を行うシステムの構築方法を記載します。
具体的には、まずZabbix側のWebのURL監視で異常を検知します。そしてZabbixのWebhook機能よりAppKeeperのサービス復旧APIを呼び出し、Webサービスを復旧します。
今回は、Webサーバーにnginxを使用します。
※テンプレートファイルを使用したZabbixの設定手順はこちらを参照ください。
事前に用意するもの
- Zabbix
- 推奨version: 5.0以降
- (Zabbix 5.0で動作確認済)
- nginxサービスを起動しているEC2インスタンス
- nginxサービスが起動しているEC2インスタンスを監視するAppKeeperのテナント
- 外部連携用トークン
※トークンはAppKeeperの「アカウント情報」の画面より、「外部連携トークンの取得」ボタンをクリックすると表示されます(詳細は外部連携機能のページを参照)。
AppKeeper側の設定
AppKeeper側では、該当AWSアカウントを監視中にし、回復設定を「APIのみ」とします
Zabbixの設定手順
Step 1. 外形監視の設定(Hostの設定)を行う
1. Host Group / Hostの作成
この項目では外形監視の基盤となる"Host"を作成し、設定を進めていきます。
i) 左メニューの「Configuration」の「Host groups」を選択します。
ii) 右上の「Create Host Group」ボタンをクリックします。
iii) 「Group name」を指定しAddをクリックします。以上でHost Groupの作成は完了です。
iv) 次に左メニューの「Configuration」の「Hosts」を選択します。
v) 右上の「Create host」ボタンをクリックします。
vi) 「Host name」と「Groups」を入力して「Add」ボタンをクリックします。GroupsにはStep 1. 1. iii)で作成したHost Groupを選択します。
vii) Hostの作成が正常に完了していれば、Host一覧に今回作成したHostが表示されます。
2. 外形監視の対象とするWebサーバーの設定(Web scenariosの作成)
i) Host一覧ページよりStep 1. 1.で作成したHostを選択し、設定ページに移動します。
ii) 上部の「Web scenarios」を選択します。
iii) 右上の「Create web scenario」ボタンをクリックします。
iv) 「Name」と「Update interval」を指定します。
v) 「Steps」タグに移動し、「Add」のリンクをクリックしてモーダルを表示させます。
vi) NameにStep名、URLに外形監視したいWebサーバーのURLを入力します。入力が完了したら「Add」をクリックして対象Webサーバーの設定を登録します。
vii) 最後に「Add」をクリックしてWebScenarioの登録を完了させます。
3. 「障害状態」と「復帰した状態」の定義を行う(Triggerの設定)
i) Host一覧ページよりStep 1. 1.で作成したHostを選択し、設定ページへ移動します。
ii) 上部の「Triggers」を選択し、Trigger設定画面に移動します。
iii) Trigger設定画面に遷移すると、右上に「Create Trigger」ボタンが表示されているので、それをクリックします。
iv) 「Name」にTrigger名を指定し、「Severity」に障害の重大度を指定します(ここでは"High"に設定しました)。「Expression」に条件式を指定します(下の図は指定例)。
「Expression」には直接条件式を記述しても問題ありませんが、Expression生成フォームを使用した方がより効率的に条件式を作成できます。Expression生成フォームは「Add」ボタン(上の図の赤の枠線部)をクリックしたら表示されます。
Expression生成フォームを使用する場合、「Item」には”Failed step of scenario …”, 「Function」には”last()”, 「Result」には“<>”, “0”を指定して下さい。最後に「Insert」をクリックすると、条件式が生成されます。
v) OK event generationには”Recovery expression”を指定します。Recovery expression以下の図のようにFunctionには”last()”, Resultには“=”, “0”を指定します。
vi) 最後に「Add」をクリックしてTriggerを登録します。
vii) (オプション)この時点で外形監視が有効になっているはずなので、左メニューの「Monitoring」の「Dashboard」より現在の監視状況を確認します(※nginxが正常に動作している場合は何も表示されません。Webサーバーに異常が検知された時のみ以下のように警告が表示されます)。
Step 2. Webhookの設定を行い、AppKeeperとの連携の設定をする
1. Webhookの設定を行う(Media typeの作成)
i) 左メニューの「Administration」の「Media types」を選択します。
ii) 右上の「Create media type」ボタンをクリックします。
iii) 「Name」にMedia type名を指定、「Type」にはWebhookを指定します。「Parameter」の項目に「Name」が"token"と"accountId"と"instanceId"のものを3項目作成します。"token"の「Value」には事前に用意した外部連携用トークンを、"accountId"の「Value」には監視インスタンスを所有するAWSアカウントIDを、"instanceId"の「Value」には監視するインスタンスのIDを入力します。以下が設定項目の記入例です。
次に「Script」にコードを貼り付けます。以下が記入例です。
var req = new CurlHttpRequest();
var param = JSON.parse(value);
req.AddHeader('appkeeper-integration-token: ' + param.token);
Zabbix.Log(4, 'webhook request value='+value);
req.Post(
'https://api.appkeeper.sios.com/integration/' + param.accountId + '/actions/recover',
'{"name": "nginx", "instanceId": "' + param.instanceId + '"}'
);
Zabbix.Log(4, 'response code: '+req.Status());
return JSON.stringify({
'tags': {
'endpoint': 'webhook_test'
}
});
iv) 「Message templates」タグに移動し、「Message」が"Problem", "Problem recovery", "Problem update"のテンプレートをそれぞれ作成します("Template"の内容は初期値のままでかまいません)。
v) 最後に「Add」をクリックして今回設定したMedia typesを追加します。
vi) (オプション)障害時にメールが届くようにするために、EmailのMedia typesの設定を行います。"Email"のMedia typeは既に用意されているので、「SMTP server」と「SMTP helo」の設定だけで構いません。
2. ユーザーグループにHostのアクセス権限を与える
i) 左メニューの「Administration」の「User groups」を選択し、ユーザーグループの設定画面を開きます(ここではユーザー名が「AppKeeperUserGroup」と仮定します)。
ii) 「Premissions」タブを選択し、「Select」ボタンをクリックしてPermissionの作成モーダルを表示させます。
iii) Step1. 1.で作成したHostGroupを選択して「Select」ボタンをクリックします。
iv) アクセス権限に「Read-write」を設定して「Add」リンクをクリックします。
v) 最後に「Update」ボタンをクリックしてユーザーグループにStep1 .1で作成したホストのアクセス権限を付与します。
3. ZabbixユーザーにAppKeeperのMedia typeを紐づける
i) 左メニューの「Administration」の「User」を選択し、ユーザーの設定画面を開きます(ここではユーザー名が「AppKeeperUser」と仮定します)。
ii) 「Media」タブに移動し、「Add」のリンクをクリックしてMediaの作成モーダルを表示させます。
iii) 「Type」にStep 2. 1.で作成したMedia typesを設定します。「Send to」はお客様のメールアドレスを指定します。「Use if servirty」ではStep 1. 3. iv)で設定した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件のコメント
サインインしてコメントを残してください。