0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Exastro OASE ITAメニュー連携機能を使ってみた

Last updated at Posted at 2022-05-20

はじめに

こちらの記事ではメッセージ抽出機能というものを用いていますが、現時点(2022/05/10)で最新のv1.6.0では新たにITAメニュー連携という機能が加わったようなのでそちらを用いてZabbixとの連携を行ってみます。

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

Exastro OASEとは

OASE:Operation Autonomy Support Engine
「システム運用の自律化・効率化・省力化を支援するためのOSS」

OASEコミュニティサイト
Exastro OASE を最速でインストールする
Exastro OASE クイックスタート (v1.3.0)

Exastro ITAとは

ITA:IT Automation
「システム設定をデジタル化して一元管理するためのオープンソースのフレームワーク」

ITAコミュニティサイト
Exastro IT Automationをインストールしてみた(v1.8.0)
Exastro IT Automation クイックスタート (ver1.8.0)

ITAメニュー連携機能とは

公式のマニュアルによりますと
「ITAのパラメータシートと連携して、指定したSymphonyまたはConductorに対して作業を実行できます。」
とありますが、ここです。
メッセージ抽出定義機能では、監視ツールのメッセージから値を取得していましたが、監視ツールのメッセージ内容に左右されずに、こちらの任意の値をITAと連携することができる機能のようです。

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

メリット

  • 可変の情報(変数)をITAに連携できる。
  • 監視ツールのアラートの内容ごとに、実行したい対処の値を記載し、連携することができる。

以下の課題があるとします。

課題
監視ツールの障害メッセージを受け取り、障害メッセージの内容に沿った対処を自動で行いたい。

これにITAとOASEを使用すると、下図のような連携プレーが可能になります。
image.png

役割

  • 監視ツール(Zabbixなど) :障害を検知してメッセージを発出
  • OASE :監視ツールから発出された障害メッセージをトリガーとし、ITAのパラメータシートを用いて実行したい対処に必要な任意のパラメータをITAに連携する。
  • ITA :パラメータを受け取り、対処実行

今回は以下のシナリオでこのITAメニュー連携機能(を使った連携プレー)を実行してみます。

シナリオ

こういうシナリオを設定しました。
下記は今回の構成を図に起こしたものです。
kousei.png
シナリオ
監視対象サーバではwebサービスを提供している。ある時、この監視対象サーバのwebサービスに対して大量のアクセスがあり、webサービスがダウンしてしまったため、ログを収集し、原因の特定をする必要がある。
この時、ApacheサービスとDBのサービスがダウンしていて、この監視対象サーバを監視しているZabbixには、サービスがダウンするとアラートが上がる設定になっており、今はApacheとDBのサービスがダウンしたとのアラートが上がっている。
今までの運用では、アラートの確認からログの収集までを人の手で行っていたが、今回試す構成を取ることによりこの作業が自動化でき、対応にかかる作業を減らすことができるようになる。

このシナリオが実行できるような設定を行っていき、実際に最後にサービスを落として動作確認を行っていきます。

1. 各種サービス構築

こちらの記事がわかりやすいので参考にしてください。

OASE・ITAの構築

2. Zabbixの設定

まずはZabbixまわりの設定を行っていきます。
図でいうとこちら。
image.png

※ Linux版の操作説明となります。

2-1 docker-compose版Zabbixの構築

この作業では/tmp配下で作業を行います。

次のコマンドでzabbix公式のdocker-composeの資材をDLします。

git clone https://github.com/zabbix/zabbix-docker.git -b 5.0

次にファイル名を修正し、dokcer-compose.yamlを作成します。今回は次のようにしました。

# ディレクトリを移動
cd zabbix-docker
# ファイル名を変更してコピー
cp -p docker-compose_v3_centos_pgsql_latest.yaml docker-compose.yaml

次にOASEがZabbixと通信が行えるようにするためにdocker-compose.override.yamlを先ほどのdocker-compose.yamlと同じディレクトリに作成します。内容は次の通りです。

docker-compose.override.yaml
docker-compose.override.yaml
version: '3.5'
services:

  zabbix-server:
    networks:
      - oase-monitoring

  zabbix-proxy-sqlite3:
    networks:
      - oase-monitoring

  zabbix-proxy-mysql:
    networks:
      - oase-monitoring

  zabbix-web-apache-pgsql:
    networks:
      - oase-monitoring

  zabbix-web-nginx-pgsql:
    networks:
      - oase-monitoring

  zabbix-java-gateway:
    networks:
      - oase-monitoring

networks:
  oase-monitoring:
    external: true

その次にOASEがアラートを取得できるようにnginx.confを少し書き換えます。
次のようなdiffの結果となれば成功です。

cp -pi Dockerfiles/web-nginx-pgsql/centos/conf/etc/zabbix/nginx.conf Dockerfiles/web-nginx-pgsql/centos/conf/etc/zabbix/nginx.conf.bk

vi Dockerfiles/web-nginx-pgsql/centos/conf/etc/zabbix/nginx.conf

diff Dockerfiles/web-nginx-pgsql/centos/conf/etc/zabbix/nginx.conf Dockerfiles/web-nginx-pgsql/centos/conf/etc/zabbix/nginx.conf.bk
11c11
<     set $webroot '/usr/share';
---
>     set $webroot '/usr/share/zabbix';
68,69c68
<         fastcgi_read_timeout 601;
---
>         fastcgi_read_timeout {FCGI_READ_TIMEOUT};

次に起動時に先ほど書き換えたnginx.confを読み込むようにdocker-compose.yamlに次のように追加しましょう。

docker-compose.yaml
# 中略
zabbix-web-nginx-pgsql:
  image: zabbix/zabbix-web-nginx-pgsql:centos-5.0-latest
  ports:
   - "80:8080"
   - "443:8443"
  volumes:
   - /etc/localtime:/etc/localtime:ro
   - /etc/timezone:/etc/timezone:ro
   - ./zbx_env/etc/ssl/nginx:/etc/ssl/nginx:ro
   - ./zbx_env/usr/share/zabbix/modules/:/usr/share/zabbix/modules/:ro
   # この一行を追加する
   - ./Dockerfiles/web-nginx-pgsql/centos/conf/etc/zabbix/nginx.conf:/etc/zabbix/nginx.conf:ro
#   - ./env_vars/.ZBX_DB_CA_FILE:/run/secrets/root-ca.pem:ro
#   - ./env_vars/.ZBX_DB_CERT_FILE:/run/secrets/client-cert.pem:ro
#   - ./env_vars/.ZBX_DB_KEY_FILE:/run/secrets/client-key.pem:ro
  deploy:
   resources:
    limits:
      cpus: '0.70'
      memory: 512M
    reservations:
      cpus: '0.5'
      memory: 256M
  env_file:
   - ./env_vars/.env_db_pgsql
   - ./env_vars/.env_web
  secrets:
   - POSTGRES_USER
   - POSTGRES_PASSWORD
  depends_on:
   - postgres-server
   - zabbix-server
  healthcheck:
   # ここを下記のように書き換える
   test: ["CMD", "curl", "-f", "http://localhost:8080/zabbix"]
   interval: 10s
   timeout: 5s
   retries: 3
   start_period: 30s\
# 以下略

これらの作業を終えたら実際に起動します、次のコマンドを実行してみましょう。

docker-compose --profile full up -d
docker-compose ps

NAME                                     COMMAND                  SERVICE                  STATUS                PORTS
zabbix-docker-db_data_pgsql-1            "sh"                     db_data_pgsql            exited (0)
zabbix-docker-postgres-server-1          "docker-entrypoint.s…"   postgres-server          running
zabbix-docker-zabbix-agent-1             "/usr/bin/tini -- /u…"   zabbix-agent             running
zabbix-docker-zabbix-java-gateway-1      "docker-entrypoint.s…"   zabbix-java-gateway      running               0.0.0.0:10052->10052/tcp, :::10052->10052/tcp
zabbix-docker-zabbix-server-1            "/usr/bin/tini -- /u…"   zabbix-server            running               0.0.0.0:10051->10051/tcp, :::10051->10051/tcp
zabbix-docker-zabbix-snmptraps-1         "/usr/sbin/snmptrapd…"   zabbix-snmptraps         running               0.0.0.0:162->1162/udp, :::162->1162/udp
zabbix-docker-zabbix-web-nginx-pgsql-1   "docker-entrypoint.sh"   zabbix-web-nginx-pgsql   running (healthy)   0.0.0.0:80->8080/tcp, 0.0.0.0:443->8443/tcp,:::80->8080/tcp, :::443->8443/tcp

2-2 zabbix-agentのインストール

監視対象サーバにzabbix-agentをインストールし、Zabbixが情報を取ってこれるようにします。

こちらを参考にしました。
zabbix-agentのインストール

またDBのプロセス監視を行うための設定を追加しておきます。こちらを参考に追加しました。

zabbix-agentの設定

2-3 ホスト登録

監視対象サーバを登録します。

次のURLにアクセスしてログインしましょう。
一度リダイレクトされる場合がありますので、その場合はURLの :8080 を削除してアクセスし直してみてください。

項目名
URL http://<IPアドレスまたはホスト名>/zabbix
ユーザ名 Admin
パスワード zabbix

①左メニューから 設定 > ホスト をクリック。
②画面右上の[ホストの作成]ボタンをクリック。
図10.png

③ホストの登録画面が出るので、下記の項目を入力します。それ以外はデフォルトでOKです。
image.png

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

項目 設定内容(一例)
ホスト名 oase-target01
グループ Linux servers
インターフェース タイプ エージェント
インターフェース IPアドレス 192.168.161.69
インターフェース DNS名 oase-target01
インターフェース 接続方法 IP
インターフェース ポート 10050

④上メニューから テンプレート をクリック。
下記のテンプレートにチェックを入れ、選択をクリックします。
image.png

ホストグループ テンプレート名
Templates/Applications Template App Apache by Zabbix agent
Templates/Databases Template DB MySQL by Zabbix agent

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

DBのテンプレートも同じように設定します。

これで完了!

3. ITAの設定

ITAまわりの設定を行っていきます。
図でいうとこちらの部分です。
image.png

3-1 ロール・ユーザ紐付け

ITAにはoaseアクションというロールがデフォルト登録されており、OASEとの連携で使用するメニューへのアクセス権が色々と付与されています。
図60.png
ただし、そのoaseアクションロールにユーザが紐付いていないので、oaseユーザを新規登録し、その後oaseアクションロールにoaseユーザを紐付けます。

oaseユーザの登録
管理コンソール > ユーザ管理 から
図31.png
以下の部分を入力。
図30.png

ログインID ログインPW ユーザ名
oase ******(任意) oase

[登録]ボタンをクリックして完了。

oaseユーザとoaseアクションロールの紐付け
管理コンソール > ロール・ユーザ紐付管理 から
図32.png
以下のように選択。
図33.png

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

[登録]ボタンをクリックして完了。

3-2 ホスト登録

監視対象サーバを登録します。

メニュー 基本コンソール > 機器一覧 から
図13.png

以下の部分を入力。
図14.png
※ お使いの環境に合わせて入力してください。

HW機器種別 ホスト名 IPアドレス ログインユーザID ログインパスワード > 管理 ログインパスワード > ログインパスワード Ansible利用情報 > Legacy/Role利用情報 > 認証方式
SV oase-target01 192.168.161.69 root xxxxxx パスワード認証
SV oase-log-server 192.168.161.9 root xxxxxx パスワード認証

[登録]ボタンをクリックして完了。

3-3 Conductorの作成

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

Movementとは ITAで作成できる自動作業の最小単位。ジョブ。 今回は2つ作成します。

図63.png

Conductorとは1つ以上のMovementの組み合わせから成るジョブフロー。ひとつのMovementが実行完了したら自動的に次のMovementを実行する、汎用手順書のようなものです。 今回のようにMovement1つの場合、ITA上ではConductorを作成せずにMovement単体で実行することが可能ですが、OASEと連携する場合はOASE側でITAのConductorIDを指定するため、Conductorの作成はマストとなります。

図62.png

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

図15.png
以下の部分を入力。
図16.png

Movement名 Ansible利用情報 > ホスト指定形式
ログ収集 IP
ログ送信 IP

[登録]ボタンをクリックして完了。

②Playbookの登録
以下2つのPlaybookをテキストエディタで作成します。
(変数でパスとファイルを指定し、指定されたファイルをlocal(ITAが載っているコンテナ)に収集する内容)

fetch_logfile.yml
- name: Create datetime.
  shell: date "+%Y%m%d%H%M%S"
  register: datetime
- name: Fetch the log file messages
  fetch: src="{{ item.1 }}{{ item.2 }}" dest=/tmp/{{ item.0 }}_{{ item.2 }}.{{ datetime.stdout }} flat=yes
  with_together:
    - "{{ VAR_HOST }}"
    - "{{ VAR_PATH }}"
    - "{{ VAR_FILE }}"

(上記のplaybookで取得したログをログ格納サーバに転送し、収集したログファイルを消去する内容)

send_logfile.yml
- name: Create datetime.
  shell: date "+%Y%m%d%H%M%S"
  register: datetime
- name: Old log send to Backup server
  copy: src="{{ item }}" dest=/share/oase/logs/
  with_fileglob:
    - "/tmp/*"

- name: Delete temp log file.
  file:
    path: "{{ item }}"
    state: absent
  with_fileglob:
    - "/tmp/*"
  delegate_to: localhost

メニュー Ansible-Legacy > Playbook素材集 から
図18.png
以下の部分を入力。
図17.png

Playbook素材名 Playbook素材
ログ収集 ログ収集
ログ送信 ログ送信

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

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

メニュー Ansible-Legacy > Movement-Playbook紐付 から
図19.png
以下の部分を入力。
図20.png

Movement Playbook素材 インクルード順序
ログ収集 ログ収集 1
ログ送信 ログ送信 1
インクルード順序とは 今回のシナリオでは1つのMovementに対して1つのPlaybookを紐付けましたが、1つのMovementに対して複数のPlaybookを紐付けることもできます。その場合、処理が実行される順番をインクルード順序で指定します。

図23.png

[登録]ボタンをクリックして完了。

④オペレーションの設定と作業対象ホストの設定
次のConductorクラス編集のために必要なオペレーションの設定と作業対象ホストの設定を行っていきます。

まずオペレーションの設定を行います。
メニュー 基本コンソール > オペレーション一覧 から
image.png

登録タブの登録開始を選択し、以下の部分を入力します。

image.png

オペレーション名 実施予定日
ログ送信 設定時の日時を記入

登録ボタンを押して完了です。

次に作業対象ホストの設定を行います。
メニュー Ansible-Legacy > 作業対象ホスト から
image.png

登録タブの登録開始を選択し、下記の内容を登録します。
image.png

オペレーション Movement ホスト
1:ログ送信 ログ送信 2:oase-log-server

登録ボタンを押して完了です。

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

メニュー Conductor > Conductorクラス編集 から
図21.png
右下に表示されているMovementをキャンバスにドラッグ&ドロップしし、各ノードのOUT-INをドラッグしてつなげる。
image.png

図のようにできたら登録を押して登録をします。

次にもう一つ作成しますが、先ほどのConductorを中で実行するためにCodnductorcallというものを使います。まずは下図のように作成し、

image.png

次に右下のfunctionタブからConductorCallを選択し、先に作成しておいたログ送信のConductorとログ送信のオペレーションを選択、各ノードをつなげる。
image.png

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

Conductor名称
ログ送信
ログ収集

3-4 パラメータシートの作成と代入値自動登録設定

パラメータシートを作成して、Playbookの変数{{ VAR_HOST }}、{{ VAR_PATH }}、{{ VAR_FILE }}と紐づけていきます。

①パラメータシートの作成
メニュー作成 > メニュー定義・作成 から
図24.png
以下の部分を入力します。
image.png

メニュー名 作成対象 表示順序 項目名 入力方式 最大バイト数
ログ収集 パラメータシート(ホスト/オペレーションあり) 1 host 文字列(単一行) 256
同上 パラメータシート(ホスト/オペレーションあり) 同上 dir 文字列(単一行) 256
同上 パラメータシート(ホスト/オペレーションあり) 同上 file 文字列(単一行) 256

今回は縦メニュー連携を利用するため、縦メニュー連携利用にチェックを入れます。
その後、図の上にあるリピートを選択し各要素をリピートの要素の中に入れ、青枠で囲った部分のREPEATを2に設定します。

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

[作成]ボタンをクリックして完了。

縦メニュー連携とは ITAの縦メニュー機能を利用した連携方法。 この機能を使用すると、同じような対処をする場合に一つのplaybookで同時にパラメータの異なる対処を行うことが可能となる連携方法。

作成できているか確認します。
入力用メニューグループの中に「ログ収集」メニューが作成されていて、
image.png

[登録開始]ボタンをクリックすると[host][dir][file]項目が作成されています。
image.png

これでOKです。

②代入値自動登録設定
Ansible-Legacy > 代入値自動登録設定 から
図29.png
以下の部分を入力。
図28.png

1つ目

パラメータシート(From) > メニューグループ:メニュー パラメータシート(FROM) > 項目 認証方式 IaC変数(To) > Movement IaC変数(To) > Value変数 > 変数名 IaC変数(To) > Value変数 > 代入順序
代入値自動登録用:ログ収集 パラメータ/host Value型 ログ収集 VAR_HOST 1
代入値自動登録用:ログ収集 パラメータ/dir Value型 ログ収集 VAR_PATH 1
代入値自動登録用:ログ収集 パラメータ/file Value型 ログ収集 VAR_FILE 1
代入値自動登録用:ログ収集 パラメータ/host[2] Value型 ログ収集 VAR_HOST 2
代入値自動登録用:ログ収集 パラメータ/dir[2] Value型 ログ収集 VAR_PATH 2
代入値自動登録用:ログ収集 パラメータ/file[2] Value型 ログ収集 VAR_FILE 2

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

[登録]ボタンをクリックして完了。

これでITAの設定ができました!

補足 メニューID・Conductor名称の確認

OASEがITAにデータ受け渡しする際、ITAの メニューIDとConductor名を指定する 必要があります。後ほどOASE設定の際に必要になってくるので、この時点でIDと名前をメモしておくといいです。

メニューIDの確認

管理コンソール > メニュー管理 から[フィルタ]をクリックして[一覧/更新]を表示。
[メニューID]カラムの番号を確認します。

図73.png

Conductor名称の確認

Conductor > Conductorクラス一覧から[一覧]を表示。
[Conductor名称]カラムを確認します。
image.png

4. OASEの設定

OASEまわりの設定を行っていきます。
図でいうとこちらです。

image.png

ディシジョンテーブルを作成

Zabbixアダプタの設定

ITAドライバの設定

ディシジョンテーブルにルールを登録
という流れになります。

4-1 ディシジョンテーブルの作成

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

上部メニュー ルール > ディシジョンテーブル から、右上の[新規追加]ボタンをクリックして
image.png

以下の部分を入力。
image.png

基本情報・権限

項目名 入力内容
ディシジョンテーブル名 ITAメニュー連携機能検証
権限の設定 システム管理者 すべて更新可能にする(※)

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

条件式

条件名 条件式
ホスト名 正規表現に一致する
アラート 等しい(文字列)

未知事象通知

項目名 入力内容
未知事象通知  通知しない

[保存]ボタンをクリックして完了。

4-2 Zabbixアダプタの設定

Zabbixへの接続設定です。

上部メニュー システム > 監視アダプタ から右上の[監視先の追加]ボタンをクリックして
image.png

[ZABBIX Adapter ver1]を選択し以下の部分を入力。
image.png

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

項目名 入力内容
名前 oase-monitoring
プロトコル http
ホスト/IP zabbix-web-nginx-pgsql
ポート 8080
ユーザ名 Admin(ZabbixのWeb画面のログインユーザ名)
パスワード ********(上記ユーザのパスワード)
ディシジョンテーブル名 ITAメニュー機能検証

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

条件名 Zabbix項目
ホスト名 hosts
アラート description

[保存]ボタンをクリックして完了。

4-3 ITAドライバの設定

ITAの接続設定です。

上部メニュー システム > アクション設定 から、右上の[アクション先の追加]ボタンをクリックして
image.png

「ITA Driver ver1」を選択し以下の部分を入力。
image.png

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

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

[保存]ボタンをクリックして完了。

ここでITAのパラメータ情報をOASEに取得するため、下記のコマンドを実行してITAの情報を取得するサービスを再起動しておきます。

# カレントディレクトリがdocker-compose.ymlのある場所であることを確認する。
pwd
/root/oase-container
# ディレクトリの確認、移動ができたら下記のコマンドを実行。
docker-compose restart oase-ita-collaboration

4-4 ディシジョンテーブルにルールを登録

作成したディシジョンテーブルにルールを2つ登録します。

上部メニュー ルール > デシジョンテーブル から、作成したデシジョンテーブルの左側にあるダウンロードボタンをクリック。
image.png

Excelがダウンロードされるので、以下の部分を記入。
image.png

各項目の入力内容と説明は以下の通り。
(Excelと行/列が入れ変わって少し見にくいですが…)

1行目

項目名 入力内容 説明 下記参照
ルール説明 test ルールの説明(任意の文章)
ホスト名(正規表現に一致する) .* Zabbixトリガーとマッチング ※1
アラート(完全一致) Apache: Process is not running Zabbixトリガーとマッチング ※1
ルール名(必須) rule1 一意となる名称
発生事象(任意) Apacheがダウン 発生した事象の概要を記載。不要の場合はXを記述。
対処概要(任意) ログ収集 対処の概要を記載。不要の場合はXを記述。
アクション種別(必須) ITA(ver1) 実行したいアクションを選択
アクションパラメータ情報(必須) ITA_NAME=ita1100,CONDUCTOR_NAME=ログ収集,SERVER_LIST=oase-target01,MENU=[{"ID":1,"VALUES":[{"host":"{{ VAR_ホスト名 }}","dir":"/var/log/httpd/","file":"access_log"},{"host":"{{ VAR_ホスト名 }}","dir":"/var/log/httpd/","file":"error_log"}]}] {{ VAR_ホスト名 }}は条件式の値をそのまま使うときに利用する変数。今回はZabbixから受け取ったホスト名を利用します。ITAのConductor名称とログ収集のメニューIDを記述 ※2
承認メールパラメータ情報(必須) X 不要なのでX
リトライ間隔(必須) 1 アクションのリトライ間隔(単位:秒)
リトライ回数(必須) 1 アクションのリトライ回数
抑止間隔(必須) 0 アクションの抑止間隔(単位:秒)
抑止回数(必須) 0 アクションの抑止回数
条件回数(必須) X アクションの条件回数。不要なのでX
条件期間(秒)(必須) X アクションの条件期間。不要なのでX
大グループ(必須) X グルーピングしたいルールに対してグループ名を記述。不要なのでX
優先順位(必須) X 大グループでグルーピングしたルールの優先順位を記述。不要なのでX
小グループ(必須) X 大グループからさらにグルーピングしたいルールに対してグループ名を記述。不要なのでX
優先順位(必須) X 小グループでグルーピングしたルールの優先順位を記述。不要なのでX

2行目

項目名 入力内容 説明 下記参照
ルール説明 test ルールの説明(任意の文章)
ホスト名(正規表現可一致) .* Zabbixトリガーとマッチング ※1
アラート(完全一致) MySQL: Service is down Zabbixトリガーとマッチング ※1
ルール名(必須) rule2 一意となる名称
発生事象(任意) DBがダウン 発生した事象の概要を記載。不要の場合はXを記述。
対処概要(任意) ログ収集 対処の概要を記載。不要の場合はXを記述。
アクション種別(必須) ITA(ver1) 実行したいアクションを選択
アクションパラメータ情報(必須) ITA_NAME=ita1100,CONDUCTOR_NAME=ログ収集,SERVER_LIST=oase-target01,MENU=[{"ID":1,"VALUES":[{"host":"{{ VAR_ホスト名 }}","dir":"/var/log/mariadb/","file":"mariadb.log"}]}] {{ VAR_ホスト名 }}は条件式の値をそのまま使うときに利用する変数。今回はZabbixから受け取ったホスト名を利用します。ITAのConductor名称とログ収集のメニューIDを記述 ※2
承認メールパラメータ情報(必須) X 不要なのでX
リトライ間隔(必須) 1 アクションのリトライ間隔(単位:秒)
リトライ回数(必須) 1 アクションのリトライ回数
抑止間隔(必須) 0 アクションの抑止間隔(単位:秒)
抑止回数(必須) 0 アクションの抑止回数
条件回数(必須) X アクションの条件回数。不要なのでX
条件期間(秒)(必須) X アクションの条件期間。不要なのでX
大グループ(必須) X グルーピングしたいルールに対してグループ名を記述。不要なのでX
優先順位(必須) X 大グループでグルーピングしたルールの優先順位を記述。不要なのでX
小グループ(必須) X 大グループからさらにグルーピングしたいルールに対してグループ名を記述。不要なのでX
優先順位(必須) X 小グループでグルーピングしたルールの優先順位を記述。不要なのでX

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

※2 メニューID・Conductor名称
この部分には、「3.ITAの設定」末尾の「補足」でメモしたIDと名称を記入します。
CONDUCTOR_NAME=Conductor名称
ID:メニューID

ITA_NAME=ita1100,CONDUCTOR_NAME=ログ収集,SERVER_LIST=oase-target01,MENU=[{"ID":1,"VALUES":[{"dir":"/var/log/httpd/","file":"access_log"},{"dir":"/var/log/httpd/","file":"error_log"}]}]

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

4-5 ディシジョンテーブルのテスト

ルール > ルール より、[ファイルを選択]ボタンをクリックして今作成したExcelを選択し、[アップロード]ボタンをクリック。
image.png

[テストリクエスト]ボタンをクリック。
image.png

テストでは、「Zabbixからこういうメッセージをピックアップした」という仮定でテストを行います。なので、設定画面でメッセージ内容を手入力します。
image.png

ディシジョンテーブル

ディシジョンテーブル名選択
OASEメニュー機能検証

設定

1回目

項目 入力内容
ホスト名 oase-target01
アラート Apache: Process is not running

2回目

項目 入力内容
ホスト名 oase-target01
アラート MySQL: Service is down

入力したら[実行]ボタンをクリック。
成功すると、ログにこういう画面が出ます。
image.png

「正常に処理されました」と表示され、ホスト名が指定したものになっていたらOK。変数がそのまま出てきてしまう場合は、アクションパラメータの記述を見直してみてください。

DBのアラートでもテストを行い、同じように成功することを確認しましょう。

[プロダクション適用]ボタンがアクティブになるのでクリックすると、ルール画面下段の[プロダクション適用ルール]にディシジョンテーブル名が表示されます。

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

5. 動作確認

では実際にサービスを落として動作確認をしてみましょう。
teratermから監視対象サーバ(oase-target01)にログインして次のコマンドでサービスの状態を確認します。まずはhttpdからです。

systemctl status httpd

サービスが動いていることを確認したらさっそくサービスをダウンさせてみましょう
次のコマンドを実行します。

systemctl stop httpd

もう一度statusのコマンドを実行してサービスが止まっていることを確認しましょう。

数分ほどしたら、zabbixの方でアラートが上がっていますので、ログの収集が行われるはずです。

今回はoase-log-serverというサーバに転送するように指示を書いていますので、そちらで確認してみましょう。

cd /share/oase/logs/
ls -l

-rw-r--r-- 1 nfsnobody nfsnobody    0 May  9 19:40 access_log.20220509194025
-rw-r--r-- 1 nfsnobody nfsnobody  708 May  6 13:24 error_log.20220509194025

これで成功です!!

OASEではどう表示されてるか見てみます。
ルール > アクション履歴から、表示されたアクション詳細へ。
image.png

赤枠のボタンをクリックするとログ詳細画面を表示できます。

image.png

下部のアクション情報 > 連携項目 を確認すると、ホスト名がきちんと反映され、こちらで記載した値が渡されていることがわかります。
image.png

では同じようにDBの方も確認していきましょう。

サービスが動いていることを確認し、さっそくサービスをダウンさせてみましょう
次のコマンドを実行します。

systemctl status mariadb
systemctl stop mariadb
cd /share/oase/logs/
ls -l

-rw-r--r-- 1 nfsnobody nfsnobody 1671195 May 14 17:32 mariadb.log.20220514173253

これで一連の動作確認ができました。

まとめ

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

ポイントはOASEのディシジョンデーブル内で任意の値を設定できる点かなと感じました。ITAのパラメータシートに任意の値を送ることができるため、ルールの記述などが行いやすいのではないかと思います。

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

関連リンク

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?