Exastro OASE でマッチポンプした話(活用編)

# 前回のあらすじ

忙しくも充実した日々を送る花輪だったが、ひょんなことから低スペ環境の運用を ~~押し付け~~ 任されることとなる。
吹けば倒れる貧弱サーバの運用を自動化し、平和な日々を取り戻すことができるのかっ！！

[第1回][OASEインストール] では、Exastro OASE をインストールしました。
[第2回][OASE下準備編] では、Exastro OASE の検証を行うために、監視対象となる Web サーバ(貧弱サーバ)と Zabbix 監視サーバを構築しました。また、ITAサーバでアクション部分となる ___Conductor___ を設定しました。

<details><summary>Exastro OASEについて読む</summary><div>

## 1. Exastro OASE って何よ？

![システム連携](https://exastro-suite.github.io/oase-docs/asset/img/oase_overview_ja.png?v=2)

___「[Exastro OASE][公式ページ] はシステム運用の自立化・効率化・省力化を支援するためのOSSです。」___
とのことで、平たくいえば、システムの運用を楽チンにしてくれるOSSってことみたいです。
OASE の読み方は「オアゼ」です。

## 2. Exastro OASE って誰得なの？

障害発生時には、以下のような対応フローが多いと思います。

1. 監視システムによるアラート検知
2. インシデント・イベント起票
3. 一次切り分け
4. 暫定復旧作業
5. SEによる調査
6. 恒久対応
7. クローズ

問題が起こったときに、いかに迅速かつ確実に復旧できるかがポイントとなります。
OASE でできるのは、この「__3. 一次切り分け__」と「__4. 暫定復旧作業__」といった初期対応の部分です。
「__3. 一次切り分け__」と「__4. 暫定復旧作業__」を OASE により自動化することで、サービス復旧までの時間を短縮できます。
また、未知のインシデントが発生した場合は1次切り分けルールと暫定復旧のアクションを増やしていくことで、次第に運用者の対応が減っていくので運用コストを抑える効果も期待できます。

## 3. Exastro OASE の機能をざっくり見てみよう

もう少し OASE の機能について見てみます。

### 外部連携機能

![システム連携](https://exastro-suite.github.io/oase-docs/asset/img/oase_chain_image.png?v=2)

OASE は単体では機能しません。
監視機能を持ちませんし、障害発生時のアクションを実行する機能も持っていません。
代わりに、OASE は他のシステムと連携することで監視からアクションまでの一連の処理を実施します。

OASE の構成としては、主に

- 監視システムからのアラートを受け取る__監視アダプタ__
- 受け取ったアラートをルールに従って推論する__ディシジョンテーブル__
- 推論の結果を元にアクションをキックするための__ドライバ__

によって構成されています。

Ver. 1.2 までは監視ソフトウェアには ZABBIX、アクション部分の処理には Exastro IT Automation (ITA) と連携できたようですが、Ver. 1.3 からは Prometheus と連携できるようになったようです。今後この辺の連携機能も更に拡充されていくようです。

### テスト実行

![テスト実行](https://exastro-suite.github.io/oase-docs/asset/img/staging_confirmation.png?v=2)

障害が発生する度にルールを追加すると記載しましたが、本番環境にテストもせずにアクションを導入することは通常ありえません。
必ず検証環境などで事前にテストを行ってから導入すると思います。
OASE では、検証環境を内部に持っており、アラート検知からアクション実行までのテストを本番に影響を与えることなく実施可能です。
これにより、安心して継続的なルールの管理を行うことが可能となります。

</div></details>

## ざっくりまとめる

##### ___As-Is___: 現状の問題と対応方法

|項目|内容|
|----|----|
|サービス内容|一般公開型のメディアサイト|
|問題点|アクセスが多い場合に OS がハングアップ|
|暫定対策|OSの再起動|
|根本原因|リソース不足|
|恒久対策|リソース増強|

##### ___To-Be___: OASE を使った自動化の方針(ディシジョンテーブル)

||条件1|条件2|アクション|
|----|:----:|:----:|:----:|
|Rules|アクセス数が多い場合|アクセス数が低い場合||
|Rule1|N|N|何もしない|
|Rule2|Y|N|___Sorry ページ___ に切り替える|
|Rule3|N|Y|元のページに切り替える|
|Rule4|Y|Y|___Sorry ページ___ に切り替える|

# 検証環境の構成(再掲)

## システム構成

![OASE_component.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/feae1a73-51cf-b636-b9b1-ffe14e198091.png)

## サーバ一覧

|サーバ|ホスト名|説明|
|----|----|----|
|Webサーバ|target-web|メディアサイトを公開するサーバ|
|監視サーバ|zabbix| Web サーバの監視を行う|
|OASEサーバ|exastro-oase|今回の主役。運用を自動化|
|ITAサーバ|exastro-ita|OASE からの API コールをトリガーにオペレーションを実行|

# 作業の流れ

1. <font color="lightgray">周辺環境構築</font> <font color="limegreen">___&#10004; Completed___</font>
   1. <font color="lightgray">監視対象の Web サーバ構築</font> <font color="limegreen">___&#10004; Completed___</font>
   2. <font color="lightgray">Zabbix 環境構築</font> <font color="limegreen">___&#10004; Completed___</font>
   3. <font color="lightgray">Exastro IT Automation (ITA) 環境を構築</font> <font color="limegreen">___&#10004; Completed___</font>
2. ディシジョンテーブルの作成
3. Zabbix 監視アダプタの設定
4. Exastro IT Automation (ITA) ドライバの設定
5. ディシジョンテーブルのルール登録
6. 動作確認

# Exastro OASE をさわってみよう

今回の最終的な目標となるディシジョンテーブルは下記のとおりです。

||条件1|条件2|アクション|
|----|:----:|:----:|:----:|
|Rules|アクセス数が多い場合|アクセス数が低い場合||
|Rule1|N|N|何もしない|
|Rule2|Y|N|___Sorry ページ___ に切り替える|
|Rule3|N|Y|元のページに切り替える|
|Rule4|Y|Y|___Sorry ページ___ に切り替える|

おおまかな作業の流れは、

1. 大枠となるディシジョンテーブルを定義
2. ディシジョンテーブルの __条件式__ と __Zabbix の監視アラート__ を紐付ける
3. ディシジョンテーブルの __アクション__ と __ITA ドライバの Conductor__ を紐付ける
4. ディシジョンテーブルの __ルール__ を登録する

といった感じです。

前置きが長くなりましたが、ようやく OASE に触ります。

## 2. ディシジョンテーブルの作成

まずは、ディシジョンテーブルを作成をしましょう。
OASE にログインし、上メニューから ___ルール___ > ___ディシジョンテーブル___ を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/8b117ddb-c4d1-5042-d116-292e0fc7a20d.png)


ディシジョンテーブルの画面を開いたら、右上にある ___新規追加___ ボタンを押下します。

![2021-05-18-01-44-12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/1b2deace-f9cc-5779-2e8b-17842e90c8ea.png)

### 2.1. 基本情報・権限

<font color="red">※注意: 何かしらのグループに対して<b>「更新可能」にチェックを入れる</b>必要があります。チェックがない場合、GUIから操作できなくなってしまいます。</font>

|大項目|項目名|入力値|
|----|----|----|
|基本情報|ディシジョンテーブル名|メディアサイト運用|
||概要|(任意)|
|権限の設定|システム管理者|<font color="red"><b>すべて「更新可能」にチェック</b></font>|

![2021-05-20-23-43-57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/8a42e943-30a5-5c54-23ce-66b1567c93a2.png)

### 2.2. 条件式

<font color="red">※注意: 一度登録した条件式は変更できません。</font>

|条件名|条件式|
|----|----|
|このトリガーIDを含む|含む|
|このトリガーIDを含まない|含まない|
|このホストを含む|含む|
|このホストを含まない|含まない|

![2021-05-20-23-45-24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/dfaae880-b460-9f4f-db2f-552e6927401b.png)

条件には __必ず対になる否定形を含める__ ようにしましょう。
理由は、否定系がないと表現できないルールが発生してしまうからです。
今回の目標となるディシジョンテーブルでは、___Rule3___ がそれに該当します。

||条件1|条件2|アクション|
|----|:----:|:----:|:----:|
|Rules|アクセス数が多い場合|アクセス数が少ない場合||
|Rule1|N|N|何もしない|
|Rule2|Y|N|___Sorry ページ___ に切り替える|
|Rule3|N|Y|元のページに切り替える|
|Rule4|Y|Y|___Sorry ページ___ に切り替える|

___Rule1___ はそもそもアクションがないので、登録の必要はありません。
___Rule2___ と ___Rule4___ は、「___アクセス数が多いトリガーID___ を ___含む___」とすればいいです。

では、___Rule3___ はどうでしょうか。この場合、「___アクセス数が少ないトリガーID___ を ___含む___」 とだけ設定すると、___Rule4___ も含んでしまい、___Rule4___ のアクションとバッティングしてしまいます。
以上の理由から、「___アクセス数が少ないトリガーID___ を ___含む___」、かつ、「___アクセス数が多いトリガーID___ を ___含まない___」とすれば、___Rule3___ だけにマッチするルールを作成できます。
(使わなければ、何も入力しなければいいだけの話ですしおすし。後から追加のほうが苦労します)

以上のことから、条件には __必ず対となる否定形を含める__ ようにしましょう。

### 2.3. 未知事象通知

ルールにマッチしないリクエストを検知した場合に、メールを送ることができます。
今回は、メールサーバの用意はしていないので、メール機能は使わないです。

|未知事象通知|
|----|
|通知しない|

すべて入力が完了したら、___保存___ ボタンを押し、確認ダイアログの ___OK___ を押下します。

![2021-05-21-00-18-23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/68bc9683-e9af-9568-36f0-9604ceea6774.png)

## 3. Zabbix 監視アダプタの設定

Zabbix 監視アダプタの設定を行います。

上メニューから ___システム___ > ___監視アダプタ___ を選択します。
次に、右上の ___監視先の追加___ ボタンを押下します。

![2021-05-18-02-27-24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/30b83993-2d37-6233-709b-728efe7efa9e.png)

監視先の設定の項目から、___ZABBIX Adapter ver1___ を選択します。

![2021-05-18-02-30-55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/bd8e032f-032d-d404-861a-0baa03e8ea43.png)

Zabbix 監視アダプタの設定項目は下記のようにしました。

トリガーから取得可能な項目のうち、よく使いそうなものは、_triggerid_ と _description_、 _hosts_ といったところでしょうか。
_triggerid_ は、そのままの意味で各トリガーに割り当てられるユニークな数値となります。
_description_ は、トリガーを作成する際にユーザが任意に設定可能な名前のことです。
_hosts_ は、トリガーが引かれた対象のホスト名です。
他にもいくつか項目がありますが、このあたりを利用すれば大体なんとかなると思います。

トリガーの各項目の意味については、[Zabbix公式ドキュメントのココ][zabbixトリガーオブジェクト]に記載があるので、こちらを参照するといいです。

|項目|設定値|
|----|----|
|名前|Webサーバ監視 (任意)|
|プロトコル|http|
|ホスト/IP|ZabbixサーバのIPアドレス|
|ポート|Zabbixの公開ポート|
|ユーザ名|Zabbixのユーザ名|
|パスワード|Zabbixのパスワード|
|ディシジョンテーブル名選択|メディアサイト検証|
|突合情報 - このトリガーIDを含む|triggerid|
|突合情報 - このトリガーIDを含まない|triggerid|
|突合情報 - このホストを含む|hosts|
|突合情報 - このホストを含まない|hosts|

![2021-05-21-00-23-27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/931c8fc1-5a23-d20a-523b-0272538dc091.png)

すべて入力が完了したら、___保存___ ボタンを押し、確認ダイアログの ___OK___ を押下します。

## 4. Exastro IT Automation (ITA) ドライバの設定

上メニューから ___システム___ > ___アクション設定___ を選択します。
次に、右上の ___アクション先の追加___ ボタンを押下します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/f0105e1c-f064-13f8-9a1a-62f450da096d.png)

アクション先の設定の項目から、___ITA Driver ver1___ を選択します。

![2021-05-18-20-50-16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/b7d8b73b-2b23-a746-7102-05dc348e29a5.png)

ITA ドライバの設定項目は下記のようにしました。

<font color="red">※注意: 何かしらのグループに対して<b>「更新可能」にチェックを入れる</b>必要があります。チェックがない場合、GUIから操作できなくなってしまいます。</font>

|項目|設定値|
|----|----|
|名前|exastro-ita(任意)|
|バージョン|1.7.0(1.7.1)※|
|プロトコル|http|
|ホスト/IP|(ITA サーバの IP アドレス)|
|ポート|(ITAの公開ポート)|
|ユーザ名|(ITAのユーザ名)|
|パスワード|(ITAのパスワード)|
|権限の設定 - 新規作成|<font color="red"><b>「更新可能」にチェック</b></font>|

※バージョンは本来、1.7.1 を使用すべきですが、2021/05 現在 OASE v1.3.0 では未リリースのため互換性がありそう 1.7.0 を利用します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/6d27b41a-7b5d-f2b5-3710-f4081a56f3c6.png)

すべて入力が完了したら、___保存___ ボタンを押し、確認ダイアログの ___OK___ を押下します。

## 5. ディシジョンテーブルのルール登録

### 5.1. トリガー情報の取得

[第2回で作成したトリガー][OASE下準備編_閾値トリガー]の情報を取得してみましょう。
今回は Zabbix で提供される REST API を使って、目的のトリガー情報を取得していきます。

```sh
# JSON 整形用のコマンドをインストール
yum -y install jq

# Zabbix サーバの IP を変数に格納する
ZABBIX_IP=XXX.XXX.XXX.XXX

# Zabbix に API ログインするためのトークンを取得する
# user: Zabbix 画面のログインユーザ名
# password: Zabbix 画面のパスワード
ZABBIX_TOKEN=`curl -s -X GET -H "Content-Type:application/json-rpc" -d '{"jsonrpc":"2.0","method":"user.login","params":{"user":"Admin","password":"zabbix"},"id":1,"auth":null}' http://${ZABBIX_IP}/zabbix/api_jsonrpc.php | jq -r .result`

# コネクション数閾値超えのトリガー情報
curl -X GET -H "Content-Type:application/json-rpc" \
-d '{"jsonrpc":"2.0","method":"trigger.get","params":{"filter":{"description":"More than 20 connections"},"selectHosts":["hostid","host"]},"auth":"'${ZABBIX_TOKEN}'","id":1}' \
http://${ZABBIX_IP}/zabbix/api_jsonrpc.php | \
jq -r ".result[]|{"triggerid": .triggerid, "description": .description}"

{
  "triggerid": "18467",
  "description": "More than 20 connections"
}

# コネクション数閾値下回りのトリガー情報
curl -X GET -H "Content-Type:application/json-rpc" \
-d '{"jsonrpc":"2.0","method":"trigger.get","params":{"filter":{"description":"Less than 11 connections"},"selectHosts":["hostid","host"]},"auth":"'${ZABBIX_TOKEN}'","id":1}' \
http://${ZABBIX_IP}/zabbix/api_jsonrpc.php | \
jq -r ".result[]|{"triggerid": .triggerid, "description": .description}"

{
  "triggerid": "18468",
  "description": "Less than 11 connections"
}

```

上記の結果から、[前回][OASE下準備編_閾値トリガー]設定したトリガーの ID が取得できました。

|トリガー名(description)|トリガーID(triggerid)|
|----|----|
|More than 20 connections|___18467___|
|Less than 11 connections|___18468___|

### 5.2. オペレーション情報の取得

ITA にログインし、___メインメニュー___ を開き、___メニューグループ___ 画面から ___基本コンソール___ を選択します。
左メニューの ___オペレーション一覧___ をクリックします。
下記の画像のように、___オペレーション ID___ を確認します。

![2021-05-18-21-15-56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/276fb8a3-be6e-346b-6e16-089654ccdd60.png)

上記の画面から、オペレーションの情報が確認できました。

|オペレーションID|オペレーション名|
|----|----|
|1|Sorryページ切り替え|
|2|Sorryページ戻し|

### 5.3. Conductor 情報の取得

___メインメニュー___ を開き、___メニューグループ___ 画面から ___Conductor___ を選択します。
左メニューの ___Conductorクラス一覧___ をクリックします。
下記の画像のように、___Conductor クラスID___ を確認します。

![2021-05-18-21-03-55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/0aaaef41-a8ad-1c19-7972-7a23a8b6a060.png)

上記の画面から、Conductor の情報が確認できました。

|ConductorクラスID|Conductor名称|
|----|----|
|1|Webサーバ高負荷対応|
|2|Webサーバ高負荷戻し対応|

### 5.4. Conductor紐付Node一覧メニューの復活

デフォルトの状態の ITA では、OASE からドライバによる呼び出し時に処理に失敗してしまいます。
なので、必ず ___Conductor紐付Node一覧メニュー___ を復活させましょう。

___メインメニュー___ を開き、___メニューグループ___ 画面から ___管理コンソール___ を選択します。
左メニューの ___ロール・メニュー紐付管理___ をクリックします。
下記の画像のように、___表示フィルタ___ の ___メニューグループ___ の ___名称___ から ___Conductor___ を選択します。
表示された一覧の中から、___2,100,180,007___ の ___Conductor紐付Node一覧___ の ___復活___ ボタンを押下します。

![2021-05-21-00-44-23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/b187b026-1188-0fce-d803-7e181cdaf53b.png)

___メインメニュー___ を開き、___メニューグループ___ 画面から ___Conductor___ を選択します。
左メニューの中に、 ___Conductor紐付Node一覧___ メニューが表示されていることを確認します。

![2021-05-21-00-50-49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/525bd51d-458d-dbde-8931-fd91d8566992.png)

### 5.5. トークン払い出し
<font color="red">※注意: <b>「権限あり」にチェックを入れる</b>必要があります。チェックがない場合、GUIから操作できなくなってしまいます。</font>

OASE にログインし、___ルール___ > ___トークン払い出し___ を選択します。
次に、右上の ___新規トークン払い出し___ ボタンを押下します。

下記の設定値を入力し、___トークン払い出し___ ボタンを押下します。

|項目|設定値|
|----|----|
|トークン名|oase_survey|
|有効期限|(未入力)|
|グループ別権限 - システム管理者|制限あり|

![2021-05-18-21-33-15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/c8292932-cd97-6090-fb96-db0bb3b72852.png)

トークン内容を確認します。※記録は不要です。

![2021-05-18-21-33-32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/469ec537-dfa7-9bd4-e0c3-ece2fc58bf4b.png)

トークンが一覧に追加されたことを確認します。

![2021-05-18-21-33-44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/fef41ce5-9668-0d30-8893-56447f71de2f.png)

### 5.6. ディシジョンテーブルの記述

#### 5.6.1. ディシジョンテーブルファイルのダウンロード

OASE の画面の上メニューから ___ルール___ > ___ディシジョンテーブル___ を選択します。
次に、___メディアサイト検証___ のディシジョンテーブルのダウンロードアイコンをクリックする。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/5d469d2d-cece-4988-89cb-3f0efcd9963c.png)

#### 5.6.2. 事前情報

まずは事前確認しておいた情報をまとめます。
これらの情報を元に、ディシジョンテーブルファイルのパラメータを埋めていきます。

▼Zabbix

|トリガー名(description)|トリガーID(triggerid)|ホスト|
|----|----|----|
|More than 20 connections|18467|target-web|
|Less than 11 connections|18468|target-web|

▼ITA

|作業|オペレーションID|オペレーション名|ConductorクラスID|Conductor名称|
|----|----|----|----|----|
|Sorryページ切り替え作業|1|Sorryページ切り替え|1|Webサーバ高負荷対応|
|Sorryページ戻し作業|2|Sorryページ戻し|2|Webサーバ高負荷戻し対応|

#### 5.6.3. ルールテーブルの記載

先程ダウンロードしたファイル ___id00000000001.xlsx___ のパラメータを埋めて行きましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/47c37efb-1c28-be95-fb92-067ed7d48872.png)

ご覧の通りシートの中身が横に長いので、下記は Excel ファイルに記載している内容を分割して下に表示しています。

▼条件

条件は、[ここ](#22条件式)でも記載した通り、

- 「___アクセス数が多いトリガーID(18467)___ を ___含む___」場合、___Sorry ページ に切り替える___
- 「___アクセス数が少ないトリガーID(18468)___ を ___含む___」、かつ、「___アクセス数が多いトリガーID(18467)___ を ___含まない___」場合、___元のページに切り替える___

となりますので、これを元にパラメータを埋めていきます。
特に値を入れない場合は、何も記載しないとその条件自体が存在しないものとして処理されます。

|Rule description|このトリガーIDを含む(含む)|このトリガーIDを含まない(含まない)|このホストを含む|このホストを含まない|
|----|----|----|----|----|
|__Sorryページ切り替え__|18467||target-web||
|__Sorryページ戻し__|18468|18467|target-web||

▼アクションの定義

条件に対応するアクションを設定します。
__Rule name__ は、何でもいいですが、後述のテストリクエストの結果で表示されるため、ルールの内容ができるだけわかりやすい内容にするのがいいと思います。

|Rule description|Rule name|Action type|Action parameter information|Pre-execution action parameter information|
|----|----|----|----|----|
|__Sorryページ切り替え__|ToLitePage|ITA(ver1)|ITA_NAME=exastro-ita,CONDUCTOR_CLASS_ID=1,OPERATION_ID=1|X|
|__Sorryページ戻し__|ToOriginalPage|ITA(ver1)|ITA_NAME=exastro-ita,CONDUCTOR_CLASS_ID=2,OPERATION_ID=2|X|

▼アクションの実行条件

|Rule description|Action retry interval|Number of Action retries|Action deterrent interval|Number of deterrent actions|Number of action conditions|Action condition period(Seconds)|
|----|----|----|----|----|----|----|
|__Sorryページ切り替え__|1|1|0|0|X|X|
|__Sorryページ戻し__|1|1|0|0|X|X|

▼ルールの優先度

今回は特に優先度は設定しません。

|Rule description|Big group|Big group priority|Small group（Required）|Small group priority|
|----|----|----|----|----|
|__Sorryページ切り替え__|X|X|X|X|
|__Sorryページ戻し__|X|X|X|X|

▼ルールの有効期間

今回は特に有効期限は設定しません。

|Rule description|Date Effective|Expiration date|
|----|----|----|
|__Sorryページ切り替え__|||
|__Sorryページ戻し__|||

#### 5.6.4. ルールファイルのアップロード

上メニューから ___ルール___ > ___ルール___ を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/b4f0e6e8-af83-682f-ff33-3ba19d9a1d67.png)

次に、右上の ___ファイルを選択___ ボタンを押下し、ダイアログから ___id00000000001.xlsx___ を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/f2b3aac0-3a39-6cae-5201-ac1cb22b3636.png)

右上の ___アップロード___ ボタンを押下します。

![2021-05-18-21-24-16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/08409ae9-ea90-fe3b-c459-0d9ef4fa39d0.png)

一覧画面に、アップロードしたファイルとそれに対応するディシジョンテーブルが表示されます。
___作業ステータス___ が、___ステージング適用完了___ となるまで待ちます。
※ルールファイルのアップロードに失敗した場合は、結果ファイルをダウンロードすると、失敗時のログを確認することが可能です。

![2021-05-21-01-13-24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/8850bef8-1e02-6cf1-d866-97f1792d9b08.png)

#### 5.6.5. ディシジョンテーブルのテスト

___テストリクエスト___ ボタンを押下します。

![2021-05-21-01-13-24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/8850bef8-1e02-6cf1-d866-97f1792d9b08.png)

___ディシジョンテーブル名選択___ の項目に、今回作成したディシジョンテーブル ___メディアサイト運用___ を選択します。

![2021-05-21-01-14-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/40458e52-2c63-c46f-ce7d-e7cdc3a4af75.png)

今回は、網羅的にテストを行いたいので、___単発テスト___ ではなく、___一括テスト___ によってテストリクエストを実行します。
___一括テスト用Excelファイルのダウンロード___  ボタンをクリックし、___id00000000001\_testrequest.xlsx___ ファイルをダウンロードします。

![2021-05-21-01-14-52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/4853b6f9-57e6-8424-ef1d-21cf94a97e22.png)

網羅的なにテストを行うにあたり、要素としては下記の3つがあります。

- アクセス数が多いトリガー
- アクセス数が少ないトリガー
- target-web

この3つの「あり」or「なし」でテストパターンを作成します。
今回は、有効期限を設定していないので、_Event start date/time_ は適当です。

▼一括テスト用Excelファイルのパラメータ記載

___id00000000001\_testrequest.xlsx___ ファイルに下記のパラメータを設定します。

![2021-05-22-14-35-08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/c79c913c-e1f9-f0d3-14cd-b086e1473abc.png)

| Request name                                 | Event start date/time | このトリガーIDを含む       | このトリガーIDを含まない     | このホストを含む       | このホストを含まない     |
|----------------------------------------------|-----------------------|-------------------|-------------------|----------------|----------------|
| NoAlert on not-target                        | 2021-05-21 1:16:10    | [""]              | [""]              | ["not-target"] | ["not-target"] |
| NoAlert on target-web                        | 2021-05-21 1:16:10    | [""]              | [""]              | ["target-web"] | ["target-web"] |
| ManyAccess on not-target                     | 2021-05-21 1:16:10    | ["18467"]         | ["18467"]         | ["not-target"] | ["not-target"] |
| ManyAccess on target-web                     | 2021-05-21 1:16:10    | ["18467"]         | ["18467"]         | ["target-web"] | ["target-web"] |
| LessAccess on not-target                     | 2021-05-21 1:16:10    | ["18468"]         | ["18468"]         | ["not-target"] | ["not-target"] |
| LessAccess on target-web                     | 2021-05-21 1:16:10    | ["18468"]         | ["18468"]         | ["target-web"] | ["target-web"] |
| both ManyAccess and LessAccess on not-target | 2021-05-21 1:16:10    | ["18467","18468"] | ["18467","18468"] | ["not-target"] | ["not-target"] |
| both ManyAccess and LessAccess on target-web | 2021-05-21 1:16:10    | ["18467","18468"] | ["18467","18468"] | ["target-web"] | ["target-web"] |

この時のテストの期待値としては、下記の通りです。

|行数|Request name|期待値|
|----|----|----|
|3行目| NoAlert on not-target                        |該当ルールなし|
|4行目| NoAlert on target-web                        |該当ルールなし|
|5行目| ManyAccess on not-target                     |該当ルールなし|
|6行目| ManyAccess on target-web                     |Sorry切り替え作業実施|
|7行目| LessAccess on not-target                     |該当ルールなし|
|8行目| LessAccess on target-web                     |Sorry戻し作業実施|
|9行目| both ManyAccess and LessAccess on not-target |該当ルールなし|
|10行目| both ManyAccess and LessAccess on target-web |Sorry切り替え作業実施|

___ファイルを選択する___ ボタンを押下し、___一括テスト用Excelファイル___ (___id00000000001\_testrequest.xlsx___)をアップロードします。

![2021-05-21-01-20-11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/681b7ef4-cde5-b3be-316e-57119afe81e1.png)

___実行___ ボタンを押下します。

![2021-05-21-01-20-56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/6ba9adfb-da71-9b6c-ed1b-be424d103080.png)

実行ログを確認しましょう。

![2021-05-21-15-25-20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/10478935-d19f-729d-ca38-243f7a40b5ba.png)

<details><summary>ログ全文を表示</summary><div>

```txt
ステージング実行開始
日時2021-05-21 15:23:38 
ファイル名id00000000001_testrequest.xlsx 
処理件数  8 /   8 

3行目
 ルールが検出できませんでした 

4行目
 ルールが検出できませんでした 

5行目
 ルールが検出できませんでした 

6行目 マッチング件数 :1件
1件目
   ルール名：ToLitePage
   アクション実行順：1
   アクション種別：ITA(ver1)
   アクションパラメータ情報：['ITA_NAME=exastro-ita', 'CONDUCTOR_CLASS_ID=1', 'OPERATION_ID=1']
   アクション実行前パラメータ情報：無
   アクションリトライ間隔：1
   アクションリトライ回数：1
   アクション抑止間隔：0
   アクション抑止回数：0
   アクション条件回数：X
   アクション条件期間：X
   大グループ：X
   大グループ優先順位：X
   小グループ：X
   小グループ優先順位：X

 正常に処理されました 

7行目
 ルールが検出できませんでした 

8行目 マッチング件数 :1件
1件目
   ルール名：ToOriginalPage
   アクション実行順：1
   アクション種別：ITA(ver1)
   アクションパラメータ情報：['ITA_NAME=exastro-ita', 'CONDUCTOR_CLASS_ID=2', 'OPERATION_ID=2']
   アクション実行前パラメータ情報：無
   アクションリトライ間隔：1
   アクションリトライ回数：1
   アクション抑止間隔：60
   アクション抑止回数：1
   アクション条件回数：X
   アクション条件期間：X
   大グループ：X
   大グループ優先順位：X
   小グループ：X
   小グループ優先順位：X

 正常に処理されました 

9行目
 ルールが検出できませんでした 

10行目 マッチング件数 :1件
1件目
   ルール名：ToLitePage
   アクション実行順：1
   アクション種別：ITA(ver1)
   アクションパラメータ情報：['ITA_NAME=exastro-ita', 'CONDUCTOR_CLASS_ID=1', 'OPERATION_ID=1']
   アクション実行前パラメータ情報：無
   アクションリトライ間隔：1
   アクションリトライ回数：1
   アクション抑止間隔：0
   アクション抑止回数：0
   アクション条件回数：X
   アクション条件期間：X
   大グループ：X
   大グループ優先順位：X
   小グループ：X
   小グループ優先順位：X

 正常に処理されました
```

</details></div>

では、答え合わせです。

|行数|Request name|期待値|結果|
|----|----|----|----|
|3行目| NoAlert on not-target                        |該当ルールなし|該当ルールなし|
|4行目| NoAlert on target-web                        |該当ルールなし|該当ルールなし|
|5行目| ManyAccess on not-target                     |該当ルールなし|該当ルールなし|
|6行目| ManyAccess on target-web                     |Sorry切り替え作業実施|Sorry切り替え作業実施|
|7行目| LessAccess on not-target                     |該当ルールなし|該当ルールなし|
|8行目| LessAccess on target-web                     |Sorry戻し作業実施|Sorry戻し作業実施|
|9行目| both ManyAccess and LessAccess on not-target |該当ルールなし|該当ルールなし|
|10行目| both ManyAccess and LessAccess on target-web |Sorry切り替え作業実施|Sorry切り替え作業実施|

期待値とテストの実行結果が一致しています。
期待値と異なる場合は、テスト内容や条件式の設定に誤りがないかを確認して、再度テストを実施しましょう。

最後に、___閉じる___ ボタンを押してテストリクエストの実行を終了します。
検証完了のステータスに変更するかのダイアログが出ますので、___OK___ ボタンを押下します。

![2021-05-21-15-39-58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/7e762272-546c-4f4c-3ab9-5ce6f6873491.png)

___運用ステータス___ が、___検証完了___ に変わり、___操作___ 項目のチェックボタン(✓)がアクティブになっているはずです。

![2021-05-21-15-42-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/020e5b1e-d213-0043-7320-1388b1cc5add.png)

#### 5.6.6. プロダクション定期用ルールに反映

___操作___ 項目のチェックボタン(✓)を押下します。

![2021-05-21-15-44-25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/eef7bc2a-3fda-4799-e73a-715ebeab525c.png)

___プロダクション適用ルール___ に、___メディアサイト運用___ が追加されます。

![2021-05-21-15-44-52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/af1f9b1d-fec2-d664-e0ca-39699c465eed.png)

これで、すべての準備が整いました。
トテモナガカッタヨ。。。

## 6. 動作確認

### 6.1. 想定している挙動

#### 6.1.1. 高アクセス発生時

##### ▼状況

エンドユーザからの Web サーバへのアクセスが21回を超えた

##### ▼アクション

1. Zabbix で___アクセス数が多い場合のトリガー___ が引かれる
2. OASE は、トリガーが引かれたことを確認する
3. OASE は、ディシジョンテーブルのルールにマッチするかを評価
4. OASE は、検知したトリガーがルールにマッチするため ITA の _Conductor_ を実行
5. ITA は、Web サーバに対し、コンテンツを ___Sorry ページ___ に切り替える

#### 6.1.2. 高アクセス収束時

##### ▼状況

エンドユーザからの Web サーバへのアクセスが11回を下回った

##### ▼アクション

1. Zabbix で___アクセス数が少ない場合のトリガー___ が引かれる
2. OASE は、トリガーが引かれたことを確認する
3. OASE は、ディシジョンテーブルのルールにマッチするかを評価
4. OASE は、検知したトリガーがルールにマッチするため ITA の _Conductor_ を実行
5. ITA は、Web サーバに対し、コンテンツを ___元のページ___ に切り替える

### 6.2. 実際にやってみよう

#### 6.2.1. 高アクセス発生時の動作検証

まずは、監視対象の Web サーバにアクセスします。
完全にページが表示されるまで待ちましょう。(コレをやらないと F5 連打がうまく行かないです)
ページが表示されたら _F5 キー_ を連打しましょう。
今回は、_time=120_ と長めに設定してますが、ぱぱっとやるなら30秒くらいでもいいんじゃないでしょうか。

![2021-05-21-17-21-47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/98ea79ab-55d0-6b3f-9730-d01725fe7630.png)

Zabbix 上でグラフを確認します。
___17:22:07___ に ___アクセス数が多い場合のトリガー___ が引かれたようです。

![2021-05-21-17-24-51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/cd1f1182-fbdb-040b-1b91-635d5d3758d6.png)

次に、OASE の画面から、リクエスト履歴とアクション履歴を確認してみましょう。

![2021-05-21-17-23-14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/6f90791b-bcf6-0795-42b4-30872bfc090d.png)

![2021-05-21-17-23-32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/5f652f0d-d0f3-727e-b7c3-0ebd0e6355bc.png)

想定通り、リクエストを受け取り、Sorry ページへの切り替えアクションが実行されたようです。
___17:22:24___ に ITA ドライバでアクションを実行し、
___17:22:45___ にアクションが完了しています。

![ログ1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/81eb1e8e-bb6c-10eb-bce2-6d5b24352ff4.png)

![2021-05-21-17-35-51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/0cc9c627-7208-22eb-642f-f31db33ae609.png)

再度、監視対象の Web サーバにアクセスします。
___イェースッ！___ 想定通り、「___Sorry. Please try again leter.___」にコンテンツが切り替わっています。

![2021-05-21-17-23-47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/771f83e7-6b5e-5cf0-e46d-f237aac8ec30.png)

#### 6.2.2. 高アクセス収束時の動作検証

再び、Zabbix 上でグラフを確認します。
2分経過したので、コネクション数が徐々に低下してきます。
___17:24:11___ に ___アクセス数が少ない場合のトリガー___ が引かれました。

![2021-05-21-17-25-11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/968b30d3-3b18-2e82-ed4a-2c27554aaf7f.png)

先程と同じように、OASE の画面から、リクエスト履歴とアクション履歴を確認してみましょう。

![2021-05-21-17-25-36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/966e5219-5ce6-5ac9-b211-670b60b7d060.png)

![2021-05-21-17-25-50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/25c38564-bb12-aa86-a63a-0eb8e1be70e0.png)

想定通り、リクエストを受け取り、Sorry ページへの切り替えアクションが実行されたようです。
___17:24:26___ に ITA ドライバでアクションを実行し、
___17:24:47___ にアクションが完了しています。

![ログ2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/1db1784e-dfea-5a1f-8a9b-360bf806524f.png)
![2021-05-21-17-38-30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/b66f6038-5e6f-9973-66a3-d1f8c3ce47a4.png)

最後にもう一度、監視対象の Web サーバにアクセスします。
コンテンツが元のページに戻っています。

![2021-05-21-17-21-47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1378538/e45de7b4-a384-7579-009c-279b15de873b.png)

コレ面白いヨ～

# まとめ

Exastro OASE を使って、監視サーバと Exastro IT Automation を連携させました。
周辺環境の準備に苦労しましたが、OASE の画面操作自体は非常にシンプルで、

1. ディシジョンテーブルの作成
2. Zabbix 監視アダプタの設定
3. Exastro IT Automation (ITA) ドライバの設定
4. ディシジョンテーブルのルール登録

の操作で特に迷うところはありませんでした。

ただ、自分の思い描いた挙動を OASE にさせるために、ディシジョンテーブルのルールをどう書くかを考えるところが少し頭を使いました。
また、本項では触れなかったですが、オプションも色々取り揃えられているので、この辺も使いこなしていきたいと思います。

ルールのテスト機能はかなりいい機能ですね。
網羅的にテストパターンを作成して OASE に食べさせるだけで、ディシジョンテーブルのルールの動きを見ることができるので、安心して本番環境にもルールを適用できますね。

登録したルールに従い、監視サーバ → OASE → ITA → Webサーバと処理が流れていくのを見ているのが、ピタ○ラスイッチみたいで面白かったです。ガハハハっ

[この辺][ITAマルチクラウド]の仕組み使ってマルチクラウドのオートスケールとかやると面白いかも。
至極個人的な用途だと、死んだらハードディスクのデータを消去するとかね。笑
自分(人間)の死活監視をどうするかとか考え出すと結構面白いな。

でもそれはまた別のお話。
じゃぁの！ヽ(*・ω・)ノ

# 参考

- [第1回: Exastro OASE を最速でインストールする][OASEインストール]
- [第2回: Exastro OASE でマッチポンプした話(下準備編)][OASE下準備編]
- [第3回: Exastro OASE でマッチポンプした話(活用編)][OASE活用編]
- [Zabbix Document 5.2 > Trigger object][zabbixトリガーオブジェクト]
- [Exastro IT Automationをインストールしてみた][ITAインストール]
- [Download and install Zabbix][Zabbixインストール]
- [マルチクラウドプロビジョニング(AWS＋Azure)を「Exastro×Terraform×Ansible」で実施してみた][ITAマルチクラウド]

[Zabbixインストール]:https://www.zabbix.com/download?zabbix=5.2&os_distribution=centos&os_version=8&db=mysql&ws=apache
[zabbixトリガーオブジェクト]:https://www.zabbix.com/documentation/5.2/manual/api/reference/trigger/object
[ITAインストール]:https://qiita.com/standsetx/items/54ff0786db151d980026
[OASEインストール]:https://qiita.com/wreath-vine/items/46b3838ce845bba9ae4e
[OASE下準備編]:https://qiita.com/wreath-vine/items/d916764885ea8169cdda
[OASE下準備編_閾値トリガー]:https://qiita.com/wreath-vine/items/d916764885ea8169cdda#閾値トリガーの設定
[OASE活用編]:https://qiita.com/wreath-vine/items/003bb12e7096ec9070cb
[ITAマルチクラウド]:https://qiita.com/standsetx/items/5e20e9c30bb5efa9b12f