Exastro OASE メッセージ抽出機能を使ってみた

##はじめに
Zabbixなどの監視ツールで障害発生アラートが出た際に、前もってExastro OASE・Exastro ITAと連携しておくと「メッセージ抽出機能」によってアラートのピックアップから対処実行までを自動で行ってくれるそうです。
サーバの運用などで同じケースの障害が頻発する場合、人手をかけず・手間をかけずに行える策になりそうなので、ためしにやってみました。

<details><summary>Exastro OASEとは</summary>
OASE：Operation Autonomy Support Engine
「システム運用の自律化・効率化・省力化を支援するためのOSS」
[OASEコミュニティサイト](https://exastro-suite.github.io/oase-docs/index_ja.html)
[Exastro OASE を最速でインストールする](https://qiita.com/wreath-vine/items/46b3838ce845bba9ae4e)
[Exastro OASE クイックスタート (v1.3.0)](https://qiita.com/tak_paddy/items/733b3c411b5ec6ecf0dd)
</details>

<details><summary>Exastro ITAとは</summary>
ITA：IT Automation
「システム設定をデジタル化して一元管理するためのオープンソースのフレームワーク」
[ITAコミュニティサイト](https://exastro-suite.github.io/it-automation-docs/index_ja.html)
[Exastro IT Automationをインストールしてみた（v1.8.0）](https://qiita.com/standsetx/items/53553a0f78edc3097812)
[Exastro IT Automation クイックスタート (ver1.8.0)](https://qiita.com/y-masaya3210/items/68920237c03e5d4f4776)
</details>

##メッセージ抽出機能とは
以下の課題があるとします。

**課題**
監視ツールの障害メッセージを受け取り、当該ホストへの対処実行までを自動で行いたい。

これにITAとOASEを使用すると、下図のような連携プレーが可能になります。
![図69.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/7038ea7a-4f24-0be4-d1a6-e1dc637da866.png)
**役割**

- **監視ツール（Zabbixなど）** ：障害を検知してメッセージを発出
- **OASE** ：監視ツールから障害メッセージをピックアップし、ITAが対処実行できる形に「メッセージ抽出」してITAに必要データを渡す
- **ITA** ：対処実行

ここで「メッセージ抽出」が出てきます。
役割からすると、**監視ツール（Zabbixなど）で発出された障害メッセージからITAが対処実行するために必要なデータを抽出するOASEの機能**ということですね。

抽出するデータとはつまり具体値なので、**変数に代入する具体値を連携できる機能**と思えば良さそうです。

これを使うメリットとしては、以下が挙げられます。

**メリット**

- 可変の情報（変数）をITAに連携できる。
- 特にホストが何台もある場合は、設定する量が飛躍的に減ったり自由度が増したりする。例えばサーバが5台あったとしたら、通常は5台分の登録がOASEとITAに必要だが、メッセージ抽出でホスト名を連携出来れば登録は1台分で済む、など。

今回は以下のシナリオでこのメッセージ抽出機能（を使った連携プレー）を実行してみます。

##シナリオ
こういうシナリオを設定しました。
下図は前出の図を詳細にしたものです。
![図48_r3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/1a23dfc9-05da-9a02-e3dc-04865216e43d.png)

**シナリオ**
監視対象サーバ1のデータファイル［datafile.txt］はデータ集計用に定期追記作成されているが、あるときデータが貯まって容量が肥大化してしまい、サーバのDisk使用率を圧迫するようになってしまった**(1)**。そのサーバを監視しているZabbixにはDisk使用率80%を超えると障害メッセージが発出される設定がされており、今はその障害メッセージが発出されている**(2)**。

Zabbixに連携しているOASEは障害メッセージをピックアップして**(3)**、ディシジョンテーブル（ルールリスト）にかける**(4)**。登録済みの既知事象だったのでメッセージ抽出が行われ**(5)**、データをITAに渡す**(6)**。ITAはあらかじめ登録されていたファイル圧縮用Conductorを実行し**(7)**、対象サーバに接続して［datafile.txt］をzip圧縮しサーバのDisk使用率を下げる。

**条件**
・監視対象サーバは2台用意し、障害が起きた方にのみITAが作業実行するように設定する。

このシナリオが実行できるような設定を行っていき、実際に最後に容量の大きい［datafile.txt］を作成して動作確認してみます。



##1.　各種インストール
こちらの記事がわかりやすいので参考にしてください。

<details><summary>OASEのインストール</summary>
[Exastro OASE を最速でインストールする](https://qiita.com/wreath-vine/items/46b3838ce845bba9ae4e)</details>

<details><summary>ITAのインストール</summary>
[Exastro IT Automationをインストールしてみた（v1.8.0）](https://qiita.com/standsetx/items/53553a0f78edc3097812)</details>

<details><summary>Zabbixのインストール</summary>
[Exastro OASE でマッチポンプした話(Web+Zabbix構築編)](https://qiita.com/wreath-vine/items/d916764885ea8169cdda#12-zabbix-%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89)
「1.2. Zabbix 環境構築」に記載</details>



##2.　Zabbixの設定
まずはZabbixまわりの設定を行っていきます。図で言うとこちら。
※ Linux版の操作説明となります。
![図49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/dba0fc78-07af-2a30-8c0d-a4dfb112b218.png)

###2-1　ホスト登録
監視対象サーバ×２台を登録します。

①左メニューから **設定 ＞ ホスト** をクリック。
②画面右上の［ホストの作成］ボタンをクリック。
![図10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/97144cac-f002-cdc1-26e7-07d25bd17931.png)

③ホストの登録画面が出るので、下記の項目を入力します。それ以外はデフォルトでOKです。
![図11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/b98d7756-70d2-79b0-d6fd-0cadffc0e545.png)

※ お使いの環境に応じて入力してください。

|項目|1台目|2台目|
|:-----------|:-----------|:-----------|
|**ホスト名**|oase-learn-target-1|oase-learn-target-2|
|**グループ**|Linux servers|Linux servers|
|**インターフェース　タイプ**|エージェント|エージェント|
|**インターフェース　IPアドレス**|192.0.2.1| 192.0.2.2|
|**インターフェース　DNS名**|oase-learn-target-1|oase-learn-target-2|
|**インターフェース　接続方法**|IP|IP|
|**インターフェース　ポート**|10050|10050|

④上メニューから **テンプレート** をクリック。
下記のテンプレートにチェックを入れます。
![図12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/1744c426-02df-25e1-4311-a7a246a93459.png)


|ホストグループ|テンプレート名|
|:-----------|:-----------|
|**Templates/Operating systems**|Linux by Zabbix agent|

⑤画面下の［追加］ボタンをクリックしてホスト登録完了。

###2-2　トリガー登録
Disk監視設定のしきい値80%をトリガーとしてアラートが発出されるよう設定します。
またトリガーはOASEが拾える形に少しカスタムします。

①左メニュー **設定 ＞ ホスト**からホスト名をクリック。
![図2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/7f3b05ed-2516-5053-39ac-cc5a6103686b.png)

②上部メニュー **トリガー** をクリック。
![図3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/0951e184-3337-5858-1db7-e84d6a914f07.png)

③Disk使用率のトリガーである**/: Disk space is low (used > {$VFS.FS.PUSED.MAX.WARN:"/"}%)**があるのでクリック。
![図4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/a28dc2a7-72a8-5200-f9e4-33ac13b3a5a4.png)

④［複製］ボタンをクリック。
![図54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/91a3d9c5-f25f-05ef-2593-8cd1b73f14f0.png)

⑤複製したトリガーは、［名前］［条件式］［説明］［依存関係］を変更します。
![図79.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/39fb4af3-3ee4-605c-a792-c01d06f42c90.png)

|名前|条件式（※）|説明|
|:-----------|:-----------|:-----------|
|Disk space is low|last(/oase-learn-target-1/vfs.fs.size[/,pused])> 80|/work/data/datafile.txt|

※ 複製元の条件式ではマクロでDisk容量が指定されていますが、今回は80%で直打ちにします。

<table><tr><td>
:paperclip:**TIPS　メッセージ抽出のポイント**
下図は各ツールのメッセージ抽出に関わる設定を示しています（赤矢印が連携項目、オレンジ枠は本記事の章番号）。
今やっているのは右側の「トリガー」のところで、［名前］［説明］はトリガーを引いた［ホスト名］とともに以下のように連携されます。
今回は［説明］に圧縮対象ファイルのパスを記入しました。この値は最終的にITAのパラメータシートに登録され、ITAの作業実行が行われます。
![図75.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/9051d1cf-148d-de32-e627-d0b92e64d8c3.png)
</td></tr><table>

［依存関係］タブへ移り、［Disk space is critically low (used > {$VFS.FS.PUSED.MAX.CRIT:"/"}%)］トリガーを削除。
（削除しないでおくと、アラート発出時にここに表示されたトリガーが優先表示され、複製したトリガーが表示されなくなってしまうため）
![図80.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/707711ea-de43-dba1-f036-dd91507925e9.png)
下部の［追加］ボタンをクリックして完了。

⑥トリガーの一覧画面に戻ると、複製したトリガーが表示されています。
![図52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/2794828e-1e8e-937c-3a6f-6e65a652231e.png)
これで完了！今回は同じ手順でサーバ2台分登録しました。


##3.　ITAの設定
ITAまわりの設定を行っていきます。図で言うとこちら。
![図50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/4c8bb338-3f90-e5cb-6932-5646ab868848.png)

###3-1　ホスト登録
監視対象サーバ×2台を登録します。

メニュー **基本コンソール ＞ 機器一覧** から
![図13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/c086789c-c4cc-65f3-4de2-cd5e3d11823a.png)

以下の部分を入力。
![図14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/89427163-9414-04b0-a5c2-1c903cfaebde.png)
※ お使いの環境に合わせて入力してください。

| HW機器種別 | ホスト名 | IPアドレス | ログインユーザID | ログインパスワード ＞ 管理 | ログインパスワード ＞ ログインパスワード | Ansible利用情報 ＞ Legacy/Role利用情報 ＞ 認証方式 |
|:-----------|:-----------|:-----------|:------|:------|:------|:------|
| SV | oase-learn-target-1| 192.0.2.1|root |●|xxxxxx|パスワード認証|
| SV | oase-learn-target-2| 192.0.2.2|root|●|xxxxxx|パスワード認証|

［登録］ボタンをクリックして完了。


###3-2　Conductorの作成
MovementにPlaybookを紐付けて、そのMovementを内包するConductorを作成します。

<details><summary>Movementとは</summary>ITAで作成できる自動作業の最小単位。ジョブ。
今回は1つだけ作成します。
![図63.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/08a7da75-6665-96ef-a5ef-d937c0a7f620.png)</details>

<details><summary>Conductorとは</summary>1つ以上のMovementの組み合わせから成るジョブフロー。ひとつのMovementが実行完了したら自動的に次のMovementを実行する、汎用手順書のようなものです。
今回のようにMovement1つの場合、ITA上ではConductorを作成せずにMovement単体で実行することが可能ですが、OASEと連携する場合はOASE側でITAのConductorIDを指定するため、Conductorの作成はマストとなります。
![図62.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/03c2e1e6-d859-ea16-622a-04c6dd40572a.png)</details>

①Movementの登録
メニュー **Ansible-Legacy ＞ Movement一覧** から


![図15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/8e2db15a-60f9-c677-b767-4ccd9713867b.png)
以下の部分を入力。
![図16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/4d279970-a925-081e-8a3e-d1bf048150d9.png)

| Movement名 | Ansible利用情報 ＞ ホスト指定形式 |
|:-----------|:-----------|
| file_compression | IP |

［登録］ボタンをクリックして完了。


②Playbookの登録
以下Playbookをテキストエディタで作成します。
（変数でパスを指定されたファイルのzipを作成し、その後元ファイルを削除するという内容）

```ruby:compress.yml
- name: Compress regular file and remove it
  archive:
    path: "{{ VAR_path }}"
    format: zip
    remove: yes
```

メニュー **Ansible-Legacy ＞ Playbook素材集** から
![図18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/a05b4572-d827-aefa-c118-cb428d9eeec3.png)
以下の部分を入力。
![図17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/aafbac16-b13e-a288-3d84-3163532c55bb.png)

|Playbook素材名 | Playbook素材 |
|:-----------|:-----------|
| file_compression | compress.yml |

Playbook素材の［事前アップロード］ボタンをクリックしてから［登録］ボタンをクリックして完了。

③MovementとPlaybookの紐付け
①②で登録したMovementとPlaybookを紐付けます。

メニュー **Ansible-Legacy ＞ Movement-Playbook紐付** から
![図19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/6259d607-159e-f05c-819a-8b44ee7011b5.png)
以下の部分を入力。
![図20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/1d5be1fc-07f6-7750-d748-68a83472a232.png)

|Movement | Playbook素材 | インクルード順序 |
|:-----------|:-----------|:-----------|
| file_compression | compress.yml | 1 |

<details><summary>インクルード順序とは</summary>今回のシナリオでは１つのMovementに対して1つのPlaybookを紐付けましたが、１つのMovementに対して複数のPlaybookを紐付けることもできます。その場合、処理が実行される順番をインクルード順序で指定します。
![図23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/255f1cda-cb50-c2c4-cbc1-bc877c9bdc75.png)</details>

［登録］ボタンをクリックして完了。

④Conductorクラス編集
Movementを実行するConductorを作成します。

メニュー **Conductor ＞ Conductorクラス編集** から
![図21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/4fe611a6-bdb8-bede-c14b-03f9e41eb1bc.png)
右下に表示されているMovementをキャンバスにドラッグ＆ドロップしし、各ノードのOUT－INをドラッグしてつなげる。
![図22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/21500a8a-2608-ada5-fb92-77c914c832ef.png)

Conductor名称を入力して［登録］ボタンをクリックして完了。

|Conductor名称|
|:-----------|
| file_compression |

###3-3　パラメータシートの作成と代入値自動登録設定
パラメータシートを作成して、Movementの変数{{ VAR_path }}と紐づけていきます。

<table><tr><td>
:paperclip:**TIPS　メッセージ抽出のポイント**
今は上部の「パラメータシート」のところです。
![図75.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/9051d1cf-148d-de32-e627-d0b92e64d8c3.png)
拡大してみるとこんな感じで、
![図77.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/e78c0c94-39cd-598a-a41b-9b406fc878fb.png)
具体的には［path］カラムと変数が紐づいています。
いざZabbixのトリガーが引かれた時、値［work/data/datafile.txt］がOASEから渡され、［path］カラムに格納されます。その［path］カラムは変数{{ VAR_path }}と紐づいているので、Conductorの準備が整い作業実行が可能になる、というわけです。
</td></tr><table>

それではやっていきます。

①パラメータシートの作成
**メニュー作成 ＞ メニュー定義・作成** から
![図24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/9de689d6-aee3-e6b1-916d-3b586aacde9c.png)
以下の部分を入力します。
![図25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/7096860e-4ade-46ec-17f8-de43e3e3a58f.png)

|メニュー名|作成対象|表示順序|項目名|入力方式|最大バイト数|
|:-----------|:-----------|:-----------|:-----------|:-----------|:-----------|
|ディレクトリ名|パラメータシート（ホスト/オペレーションあり）|1|path|文字列（単一行）|256|

※ 他はデフォルトのままでOKです。

［作成］ボタンをクリックして完了。

作成できているか確認します。
入力用メニューグループの中に「ディレクトリ名」メニューが作成されていて、
![図26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/f7357b7d-5be4-97f7-9c12-7e64655f5708.png)
［登録開始］ボタンをクリックすると［path］項目が作成されています。
![図27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/251d6eeb-f7fb-a99b-2fb0-eb3685cf1b1b.png)
これでOKです。

②代入値自動登録設定
**Ansible-Legacy ＞ 代入値自動登録設定** から
![図29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/91807aea-070c-963e-360e-ca621502080f.png)
以下の部分を入力。
![図28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/181f2adc-4805-2f8f-c9dd-c5d6446720f5.png)

|パラメータシート（From） ＞ メニューグループ:メニュー|パラメータシート（FROM） ＞ 項目|認証方式|IaC変数（To） ＞ Movement|IaC変数（To） ＞ Value変数 ＞ 変数名|IaC変数（To） ＞ Value変数 ＞ 代入順序|
|:-----------|:-----------|:-----------|:-----------|:-----------|:-----------|
|代入値自動登録用:ディレクトリ名|パラメータ/Path|Value型|file_compression|VAR_path|1|

上の行に書いてある**パラメータシート（From）→IaC変数（To）**を見ればわかりやすいです。どのメニューのどのカラムを → どのMovementのどの変数に代入するか　ということですね。

［登録］ボタンをクリックして完了。

###3-4　ロール・ユーザ紐付け
ITAには**oaseアクション**というロールがデフォルト登録されており、OASEとの連携で使用するメニューへのアクセス権が色々と付与されています。
![図60.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/b99a27a6-857a-28ef-eb60-6978032693ef.png)
ただし、そのoaseアクションロールにユーザが紐付いていないので、まず**oase**ユーザを新規登録し、その後oaseアクションロールにoaseユーザを紐付けます。
それから、先ほど新規で作成した**ディレクトリ名**メニューへの、oaseアクションロールのアクセス権がデフォルトでは閲覧になっているので、メンテナンス可に変更します。

①**oase**ユーザの登録
**管理コンソール ＞ ユーザ管理** から
![図31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/78bf0c07-850b-ba4b-e854-04b42436d651.png)
以下の部分を入力。
![図30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/a806a1fc-1703-6045-6a56-fbd191c6dedf.png)

|ログインID|ログインPW|ユーザ名|
|:-----------|:-----------|:-----------|
|oase|******（任意）|oase|

［登録］ボタンをクリックして完了。

②**oase**ユーザと**oaseアクション**ロールの紐付け
**管理コンソール ＞ ロール・ユーザ紐付管理** から
![図32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/9772795d-e2da-691e-7574-eb4feb0a3685.png)
以下のように選択。
![図33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/14127ba9-6ca2-95b6-7a51-eecf4da2cf04.png)

|ロール|ユーザID:ログインID|
|:-----------|:-----------|
|oase|oase|

［登録］ボタンをクリックして完了。

③**oaseアクション**ロールから**ディレクトリ名**メニューへのアクセス権変更
**管理コンソール ＞ ロール・メニュー紐付管理**から
![図57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/2964d20d-da39-255b-de6e-e13b13ce3072.png)
一覧/更新でこの行を探します**(1)**。

| ロール/名称 |メニューグループ/名称|メニュー/名称|
|:-|:--|:--|
|oaseアクション|入力用|ディレクトリ名|
|oaseアクション|代入値自動登録用|ディレクトリ名|

![図58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/f618f446-f223-b09b-7f0f-703392064449.png)

それぞれ［更新］ボタンをクリックすると**(2)**、［紐付］カラムで権限が選べるので［メンテナンス可］を選択**(3)**。

［登録］ボタンをクリックして完了。
これでITAの設定ができました！

###補足　メニューID・ConductorクラスIDの確認
OASEがITAにデータ受け渡しする際、ITAの**メニューIDとConductorクラスIDを指定する**必要があります。後ほどOASE設定の際に必要になってくるので、この時点でIDナンバーをメモしておくといいです。

<details><summary>メニューIDの確認</summary>**管理コンソール ＞ メニュー管理**から［フィルタ］をクリックして［一覧/更新］を表示。
［メニューID］カラムの番号を確認します。
![図73.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/d76d522e-a6d7-2f51-c630-daf626eb7f3c.png)</details>

<details><summary>ConductorクラスIDの確認</summary>**Conductor ＞ Conductorクラス一覧** から［一覧］を表示。
［ConductorクラスID］カラムの番号を確認します。
![図74.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/8faedb92-71d3-416c-06f4-c184c027f0bd.png)</details>


##4.　OASEの設定
OASEまわりの設定を行っていきます。図で言うとこちら。
![図82.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/8830ad15-d368-6d4b-8ead-8d13333cf617.png)
ディシジョンテーブルを作成
↓
Zabbixアダプタの設定
↓
ITAドライバの設定
↓
ディシジョンテーブルにルールを登録
という流れになります。

###4-1　ディシジョンテーブルの作成
ディシジョンテーブルを作成します。
ITAでパラメータシートを作ったときのように、まずはテーブル自体を作る作業です。

上部メニュー **ルール ＞ ディシジョンテーブル** から、右上の［新規追加］ボタンをクリックして
![図34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/c5b15292-c620-6fa6-4004-7a6fa5a652c8.png)
以下の部分を入力。
![図35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/d43fc057-7ecb-5c84-ddd4-a941f46a3ee6.png)

**基本情報・権限**

|項目名|入力内容|
|:-----------|:-----------|
|**ディシジョンテーブル名**|OASEメッセージ抽出機能検証|
|**権限の設定　システム管理者**|すべて更新可能にする（※）|

※ うっかり「権限なし」にすると、せっかく作ったディシジョンテーブルが表示されなくなるので注意。

**条件式**

|条件名|条件式|
|:-----------|:-----------|
|アラート|正規表現に一致する|
|ホスト|正規表現に一致する|
|メッセージ連携用|正規表現に一致する|

**未知事象通知**

|項目名|入力内容|
|:-----------|:-----------|
|**未知事象通知**　|通知しない|

［保存］ボタンをクリックして完了。

<table><tr><td>
:paperclip:**TIPS　メッセージ抽出のポイント**
今やっているのは左下の「ディシジョンテーブル　条件式」のところで、ルールを登録するための［アラート］［ホスト］［メッセージ連携用］カラムを作った状態です。
![図75.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/9051d1cf-148d-de32-e627-d0b92e64d8c3.png)
</td></tr><table>

###4-2　Zabbixアダプタの設定
Zabbixへの接続設定です。

上部メニュー **ルール ＞ ディシジョンテーブル** から右上の［監視先の追加］ボタンをクリックして
![図36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/8aab9bcc-c5aa-cb19-2202-6514eaa84867.png)
［ZABBIX Adapter ver1］を選択し以下の部分を入力。
![図37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/4652b4c4-ae6f-ca83-669f-86195ec941e1.png)
※ お使いの環境に応じて入力してください。

|項目名|入力内容|
|:-----------|:-----------|
|**名前**|oase-learn-monitoring|
|**プロトコル**|http|
|**ホスト/IP**|oase-learn-monitoring|
|**ポート**|80|
|**ユーザ名**|Admin（ZabbixのWeb画面のログインユーザ名）|
|**パスワード**|********（上記ユーザのパスワード）|
|**ディシジョンテーブル名**|OASEメッセージ抽出機能検証|

**突合情報**
先ほどディシジョンテーブルに登録した条件名が表示されるので、それぞれ対応するZabbixの項目名を指定します。

|条件名|Zabbix項目|
|:-----------|:-----------|
|**アラート**|description|
|**ホスト**|hosts|
|**メッセージ連携用**|comments|

<table><tr><td>
:paperclip:**TIPS　メッセージ抽出のポイント**
中央下の「ZABBIX Adapter　突合情報」で、Zabbixの［トリガー項目名］とディシジョンテーブルの［条件名］を対応させているところです。

ちなみに右側「トリガー」の表の真ん中に［Trigger objectの項目名］とありますが、OASEがAPIでZabbixのトリガーをピックアップしに行く際、この名称で引っ張ってくるようです（下記URL参照）。

そのため「ZABBIX Adapter　突合情報」の［Zabbix項目］に表示されるのはこの［Trigger objectの項目名］になります。
参考：[Zabbix documentation Trigger object](https://www.zabbix.com/documentation/5.2/manual/api/reference/trigger/object)
![図75.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/9051d1cf-148d-de32-e627-d0b92e64d8c3.png)
</td></tr><table>

［保存］ボタンをクリックして完了。


###4-3　ITAドライバの設定
ITAの接続設定です。

上部メニュー **システム ＞ アクション設定** から、右上の［アクション先の追加］ボタンをクリックして
![図38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/f8e4a76c-c7f7-e497-e82b-ce30787c4e31.png)
「ITA Driver ver1」を選択し以下の部分を入力。
![図39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/0e41dcb3-9001-9ff1-3e78-43cbc376bb28.png)
※ お使いの環境に応じて入力してください。

|項目名|入力内容|
|:-----------|:-----------|
|**名前**|oase-learn-ita|
|**バージョン**|1.8.1|
|**プロトコル**|http|
|**ホスト/IP**|oase-learn-ita|
|**ポート**|80|
|**ユーザ名**|oase（ITAに登録したユーザ）|
|**ユーザ名**|********（上記ユーザのパスワード）|
|**権限　システム管理者　新規追加**|更新可能|

［保存］ボタンをクリックして完了。


###4-4　メッセージ抽出定義の登録
同じく**システム ＞ アクション設定** から［メッセージ抽出定義］ボタンをクリック。
［メッセージ抽出定義］画面になるので［編集］ボタンをクリック。
![図76.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/779e9f8a-5e67-baf6-0152-c4d1c225db05.png)
右上の［追加］ボタンをクリックして2行追加。以下内容を入力します。

| ドライバ名 | メニューグループ：メニュー | パラメータ名 | 抽出対象条件名 | 抽出方法1 |
|:--|:--|:--|:--|:--|
|oase-learn-ita|入力用：ディレクトリ名|対象ホスト|ホスト|.*|
|oase-learn-ita|入力用：ディレクトリ名|path|メッセージ連携用|.*|

<table><tr><td>
:paperclip:**TIPS　メッセージ抽出のポイント**
左上「メッセージ抽出定義」を登録しているところです。
ディシジョンテーブルの条件式にメッセージがマッチングした場合、抽出されたメッセージがここへ送られてきます。
この表左側をTO（ITA側）、右側をFROM（OASE側）として見るとわかりやすいです。
**TO（ITAのメニューとパラメータ名）　←　FROM（OASEの条件名と抽出されたメッセージ）**

FROMの［抽出方法1］に「.*」と入れますが、ここにメッセージ抽出結果となる具体値が入ります。
![図75.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/9051d1cf-148d-de32-e627-d0b92e64d8c3.png)</td></tr><table>

右上の［保存］ボタンをクリックして完了。

###4-5　トークン払い出し
「4-6 ディシジョンテーブルのテスト」で必要となるトークンを払い出します。
![図68.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/290c7ef0-2f90-a2d0-6df3-dc403f5e9615.png)
上部メニュー **システム ＞ アクション設定** から、右上の［新規トークン払い出し］ボタンをクリック。
![図41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/5a39ef72-42eb-ee89-3eca-86f87b73847b.png)
以下のように入力。
![図42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/c729224e-dfe8-e289-56a0-326ba682539f.png)


|項目名|入力内容|
|:-----------|:-----------|
|**トークン名**|learn-token|
|**グループ別権限　システム管理者**|権限あり|

クリップボードにはコピーしなくてOKです。［閉じる］をクリックして完了。



###4-6　ディシジョンテーブルにルールを登録
作成したディシジョンテーブルにルールを登録します。

上部メニュー **ルール ＞ デシジョンテーブル** から、作成したデシジョンテーブルの左側にあるダウンロードボタンをクリック。
![図64.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/d757a86d-880e-2b51-5cf0-fb53da882432.png)
Excelがダウンロードされるので、以下の部分を記入。
![図40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/4e7c361b-efc1-adda-6f6c-655da36f9149.png)
各項目の入力内容と説明は以下の通り。
（Excelと行/列が入れ変わって少し見にくいですが…）

| 項目名 | 入力内容 |説明 |下記参照|
|:--|:--|:--|:--|
|**ルール説明**|test|ルールの説明（任意の文章）||
|**アラート（正規表現可一致）**|Markdownで表示が崩れるので下に書きました|Zabbixトリガーの［名前］を抽出|※1|
|**ホスト（正規表現可一致）**|oase-learn-target-.|Zabbixから対象ホスト名を抽出|※1|
|**メッセージ連携用（正規表現可一致）**| .* |Zabbixトリガーの［説明］を抽出|※1|
|**ルール名（必須）**|FileCompress|一意となる名称||
|**アクション種別（必須）**|ITA(ver1)|実行したいアクションを選択||
|**アクションパラメータ情報（必須）**|ITA_NAME=oase-learn-ita,CONDUCTOR_CLASS_ID=2,MENU_ID=1,CONVERT_FLG=FALSE|ITAのConductor IDと［ディレクトリ名］のメニューIDを記述|※2|
|**承認メールパラメータ情報（必須）**|X|不要なのでX||
|**リトライ間隔（必須）**|1|アクションのリトライ間隔（単位：秒）||
|**リトライ回数（必須）**|1|アクションのリトライ回数||
|**抑止間隔（必須）**|1|アクションの抑止間隔（単位：秒）||
|**抑止回数（必須）**|1|アクションの抑止回数||
|**条件回数（必須）**|X|アクションの条件回数。不要なのでX||
|**条件期間（秒）（必須）**|X|アクションの条件期間。不要なのでX||
|**大グループ（必須）**|X|グルーピングしたいルールに対してグループ名を記述。不要なのでX||
|**優先順位（必須）**|X|大グループでグルーピングしたルールの優先順位を記述。不要なのでX||
|**小グループ（必須）**|X|大グループからさらにグルーピングしたいルールに対してグループ名を記述。不要なのでX||
|**優先順位（必須）**|X|小グループでグルーピングしたルールの優先順位を記述。不要なのでX||

**アラート（正規表現可一致）**

```
^.*Disk space is.*$
```

**※1 ディシジョンテーブル［条件式］**
先ほど作成したディシジョンテーブルに条件式を登録しています。

<table><tr><td>
:paperclip:**TIPS　メッセージ抽出のポイント**
左下「ディシジョンテーブル　条件式」で、表の右側「条件式」（ルール）を登録しているところです。
![図75.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/9051d1cf-148d-de32-e627-d0b92e64d8c3.png)
</td></tr><table>

**※2 メニューID・ConductorクラスID**
この部分には、「3.ITAの設定」末尾の「補足」でメモしたIDナンバーを記入します。
CONDUCTOR_CLASS_ID=ConductorクラスID
MENU_ID=メニューID

```
ITA_NAME=oase-learn-ita,CONDUCTOR_CLASS_ID=2,MENU_ID=1,CONVERT_FLG=FALSE
```

Excelファイル名は任意です。
入力完了したら、次の章でアップロードしていきます。

###4-7　ディシジョンテーブルのテスト
**ルール ＞ ルール**　より、［ファイルを選択］ボタンをクリックして今作成したExcelを選択し、［アップロード］ボタンをクリック。
![図44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/c443835d-fed5-1fcc-8fec-6366e7778320.png)
［テストリクエスト］ボタンをクリック。
![図65.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/002b6533-2cff-5331-f8db-3948b00b44cc.png)

テストでは、「Zabbixからこういうメッセージをピックアップした」という仮定でテストを行います。なので、**設定**画面でメッセージ内容を手入力します。
![図66.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/ed27acbe-6c81-36bf-8121-e2b86192f86a.png)

**ディシジョンテーブル**

|ディシジョンテーブル名選択|
|:-|
|OASEメッセージ抽出機能検証|

**設定**

|項目|入力内容|
|:-|:-|
|**アラート**|Disk space is low|
|**ホスト**|oase-learn-target-1|
|**メッセージ連携用**|/work/data/datafile.txt|

入力したら［実行］ボタンをクリック。
成功すると、**ログ**にこういう画面が出ます。
![図67.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/ab0ee091-a67f-905e-e9e3-cae917f32023.png)
「正常に処理されました」と表示されたらOK。
［プロダクション適用］ボタンがアクティブになるのでクリッすると、ルール画面下段の［プロダクション適用ルール］にディシジョンテーブル名が表示されます。

これでOASEの設定は完了です！


##5.　動作確認
それでは実際に容量の大きい［datafile.txt］を監視対象サーバに作成してみます。

その前にファイル作成前のDisk容量を確認。
監視対象サーバ1（oase-learn-target-1）にTerratermで入って、dfコマンドを打ちます。

```
# df -h --total
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        866M     0  866M   0% /dev
tmpfs           909M     0  909M   0% /dev/shm
tmpfs           909M   17M  893M   2% /run
tmpfs           909M     0  909M   0% /sys/fs/cgroup
/dev/vda1        20G  5.2G   15G  26% /
tmpfs           182M     0  182M   0% /run/user/0
total            24G  5.2G   19G  22% -
```

/dev/vda1を見ると、26%しか使ってません。

では、ddコマンドでファイルを作成してみます。
（bs=1024k count=11000　の部分はお使いの環境に合わせて設定してください）

```
# cd /work/data
# dd if=/dev/zero of=datafile.txt bs=1024k count=13000
```

dfコマンドで再度Disk容量を確認。90%になったことが確認できました。

```
# df -h --total
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        866M     0  866M   0% /dev
tmpfs           909M     0  909M   0% /dev/shm
tmpfs           909M   17M  893M   2% /run
tmpfs           909M     0  909M   0% /sys/fs/cgroup
/dev/vda1        20G   18G  2.2G  90% /
tmpfs           182M     0  182M   0% /run/user/0
total            24G   18G  5.9G  76% -
```

これでZabbixのトリガーが引かれてITAの実行まで自動で行われるはずなので、少し待機。
しばらく経って（私の場合は1～2分ほどかかりました）からlsコマンドで確認すると、zipファイルが作成＆元のtxtファイルが削除されていました。

```
# ls
datafile.txt.zip
```

これで成功です！！

OASEではどう表示されてるか見てみます。
**ルール ＞ アクション履歴**から、表示されたアクション詳細へ。
![図45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/26648b85-9b4b-bcfd-27c7-6b64cc8bd2b7.png)
ログが確認できます。
![図46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/c3636fed-d322-9de9-fdae-d04aa6cc5830.png)
下部の**アクション情報 ＞ 連携項目**　を確認すると、2台あったターゲットホストのうち、oase-learn-target-1が指定されていることがわかります。
![図81.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794820/c6d78f62-33ad-f24c-c69d-cdeb8916f866.png)
これで一連の動作確認ができました。



##まとめ
一番初めに設定することは色々とあるようですが、一度やってしまえばあとは自動ですべて対処してくれるので、実運用ではかなり重宝するのではないかと思いました。

ポイントはZabbixのトリガーがOASEのディシジョンテーブルの条件式に対応しているところかなと思います。この部分がメッセージ抽出の本丸のようでした。

下記の関連リンクでOASE関係の記事を載せてみたので、合わせて見ていただければわかりやすいと思います。


##関連リンク
[Exastro OASE Base (v1.3.1) ハンズオン](https://qiita.com/FFFJJJKKK/items/62d7e9330881920e3f85)
[Exastro OASE でマッチポンプした話(Web+Zabbix構築編)](https://qiita.com/wreath-vine/items/d916764885ea8169cdda)
[Exastro OASE でマッチポンプした話(活用編)](https://qiita.com/wreath-vine/items/003bb12e7096ec9070cb)
[Exastro コミュニティサイト　OASEドキュメント一覧](https://exastro-suite.github.io/oase-docs/documents_ja.html)
[【随時更新】Exastroの参考になる記事をまとめてみた](https://qiita.com/ooif/items/79952398fb03ca3ec7fd)