はじめに
こちらの記事ではメッセージ抽出機能というものを用いていますが、現時点(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を使用すると、下図のような連携プレーが可能になります。
役割
- 監視ツール(Zabbixなど) :障害を検知してメッセージを発出
- OASE :監視ツールから発出された障害メッセージをトリガーとし、ITAのパラメータシートを用いて実行したい対処に必要な任意のパラメータをITAに連携する。
- ITA :パラメータを受け取り、対処実行
今回は以下のシナリオでこのITAメニュー連携機能(を使った連携プレー)を実行してみます。
シナリオ
こういうシナリオを設定しました。
下記は今回の構成を図に起こしたものです。
シナリオ
監視対象サーバではwebサービスを提供している。ある時、この監視対象サーバのwebサービスに対して大量のアクセスがあり、webサービスがダウンしてしまったため、ログを収集し、原因の特定をする必要がある。
この時、ApacheサービスとDBのサービスがダウンしていて、この監視対象サーバを監視しているZabbixには、サービスがダウンするとアラートが上がる設定になっており、今はApacheとDBのサービスがダウンしたとのアラートが上がっている。
今までの運用では、アラートの確認からログの収集までを人の手で行っていたが、今回試す構成を取ることによりこの作業が自動化でき、対応にかかる作業を減らすことができるようになる。
このシナリオが実行できるような設定を行っていき、実際に最後にサービスを落として動作確認を行っていきます。
1. 各種サービス構築
こちらの記事がわかりやすいので参考にしてください。
OASE・ITAの構築
2. Zabbixの設定
まずはZabbixまわりの設定を行っていきます。
図でいうとこちら。
※ 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
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に次のように追加しましょう。
# 中略
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のプロセス監視を行うための設定を追加しておきます。こちらを参考に追加しました。
2-3 ホスト登録
監視対象サーバを登録します。
次のURLにアクセスしてログインしましょう。
一度リダイレクトされる場合がありますので、その場合はURLの :8080 を削除してアクセスし直してみてください。
項目名 | 値 |
---|---|
URL | http://<IPアドレスまたはホスト名>/zabbix |
ユーザ名 | Admin |
パスワード | zabbix |
①左メニューから 設定 > ホスト をクリック。
②画面右上の[ホストの作成]ボタンをクリック。
③ホストの登録画面が出るので、下記の項目を入力します。それ以外はデフォルトでOKです。
※ お使いの環境に応じて入力してください。
項目 | 設定内容(一例) |
---|---|
ホスト名 | oase-target01 |
グループ | Linux servers |
インターフェース タイプ | エージェント |
インターフェース IPアドレス | 192.168.161.69 |
インターフェース DNS名 | oase-target01 |
インターフェース 接続方法 | IP |
インターフェース ポート | 10050 |
④上メニューから テンプレート をクリック。
下記のテンプレートにチェックを入れ、選択をクリックします。
ホストグループ | テンプレート名 |
---|---|
Templates/Applications | Template App Apache by Zabbix agent |
Templates/Databases | Template DB MySQL by Zabbix agent |
⑤画面下の[追加]ボタンをクリックしてホスト登録完了。
DBのテンプレートも同じように設定します。
これで完了!
3. ITAの設定
ITAまわりの設定を行っていきます。
図でいうとこちらの部分です。
3-1 ロール・ユーザ紐付け
ITAにはoaseアクションというロールがデフォルト登録されており、OASEとの連携で使用するメニューへのアクセス権が色々と付与されています。
ただし、そのoaseアクションロールにユーザが紐付いていないので、oaseユーザを新規登録し、その後oaseアクションロールにoaseユーザを紐付けます。
①oaseユーザの登録
管理コンソール > ユーザ管理 から
以下の部分を入力。
ログインID | ログインPW | ユーザ名 |
---|---|---|
oase | ******(任意) | oase |
[登録]ボタンをクリックして完了。
②oaseユーザとoaseアクションロールの紐付け
管理コンソール > ロール・ユーザ紐付管理 から
以下のように選択。
ロール | ユーザID:ログインID |
---|---|
oase | oase |
[登録]ボタンをクリックして完了。
3-2 ホスト登録
監視対象サーバを登録します。
以下の部分を入力。
※ お使いの環境に合わせて入力してください。
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を作成します。
Conductorとは
1つ以上のMovementの組み合わせから成るジョブフロー。ひとつのMovementが実行完了したら自動的に次のMovementを実行する、汎用手順書のようなものです。 今回のようにMovement1つの場合、ITA上ではConductorを作成せずにMovement単体で実行することが可能ですが、OASEと連携する場合はOASE側でITAのConductorIDを指定するため、Conductorの作成はマストとなります。①Movementの登録
メニュー Ansible-Legacy > Movement一覧 から
Movement名 | Ansible利用情報 > ホスト指定形式 |
---|---|
ログ収集 | IP |
ログ送信 | IP |
[登録]ボタンをクリックして完了。
②Playbookの登録
以下2つのPlaybookをテキストエディタで作成します。
(変数でパスとファイルを指定し、指定されたファイルをlocal(ITAが載っているコンテナ)に収集する内容)
- 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で取得したログをログ格納サーバに転送し、収集したログファイルを消去する内容)
- 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素材集 から
以下の部分を入力。
Playbook素材名 | Playbook素材 |
---|---|
ログ収集 | ログ収集 |
ログ送信 | ログ送信 |
Playbook素材の[事前アップロード]ボタンをクリックしてから[登録]ボタンをクリックして完了。
③MovementとPlaybookの紐付け
①②で登録したMovementとPlaybookを紐付けます。
メニュー Ansible-Legacy > Movement-Playbook紐付 から
以下の部分を入力。
Movement | Playbook素材 | インクルード順序 |
---|---|---|
ログ収集 | ログ収集 | 1 |
ログ送信 | ログ送信 | 1 |
インクルード順序とは
今回のシナリオでは1つのMovementに対して1つのPlaybookを紐付けましたが、1つのMovementに対して複数のPlaybookを紐付けることもできます。その場合、処理が実行される順番をインクルード順序で指定します。[登録]ボタンをクリックして完了。
④オペレーションの設定と作業対象ホストの設定
次のConductorクラス編集のために必要なオペレーションの設定と作業対象ホストの設定を行っていきます。
まずオペレーションの設定を行います。
メニュー 基本コンソール > オペレーション一覧 から
登録タブの登録開始を選択し、以下の部分を入力します。
オペレーション名 | 実施予定日 |
---|---|
ログ送信 | 設定時の日時を記入 |
登録ボタンを押して完了です。
次に作業対象ホストの設定を行います。
メニュー Ansible-Legacy > 作業対象ホスト から
オペレーション | Movement | ホスト |
---|---|---|
1:ログ送信 | ログ送信 | 2:oase-log-server |
登録ボタンを押して完了です。
⑤Conductorクラス編集
Movementを実行するConductorを作成します。
メニュー Conductor > Conductorクラス編集 から
右下に表示されているMovementをキャンバスにドラッグ&ドロップしし、各ノードのOUT-INをドラッグしてつなげる。
図のようにできたら登録を押して登録をします。
次にもう一つ作成しますが、先ほどのConductorを中で実行するためにCodnductorcallというものを使います。まずは下図のように作成し、
次に右下のfunctionタブからConductorCallを選択し、先に作成しておいたログ送信のConductorとログ送信のオペレーションを選択、各ノードをつなげる。
Conductor名称を入力して[登録]ボタンをクリックして完了。
Conductor名称 |
---|
ログ送信 |
ログ収集 |
3-4 パラメータシートの作成と代入値自動登録設定
パラメータシートを作成して、Playbookの変数{{ VAR_HOST }}、{{ VAR_PATH }}、{{ VAR_FILE }}と紐づけていきます。
①パラメータシートの作成
メニュー作成 > メニュー定義・作成 から
以下の部分を入力します。
メニュー名 | 作成対象 | 表示順序 | 項目名 | 入力方式 | 最大バイト数 |
---|---|---|---|---|---|
ログ収集 | パラメータシート(ホスト/オペレーションあり) | 1 | host | 文字列(単一行) | 256 |
同上 | パラメータシート(ホスト/オペレーションあり) | 同上 | dir | 文字列(単一行) | 256 |
同上 | パラメータシート(ホスト/オペレーションあり) | 同上 | file | 文字列(単一行) | 256 |
今回は縦メニュー連携を利用するため、縦メニュー連携利用にチェックを入れます。
その後、図の上にあるリピートを選択し各要素をリピートの要素の中に入れ、青枠で囲った部分のREPEATを2に設定します。
※ 他はデフォルトのままでOKです。
[作成]ボタンをクリックして完了。
縦メニュー連携とは
ITAの縦メニュー機能を利用した連携方法。 この機能を使用すると、同じような対処をする場合に一つのplaybookで同時にパラメータの異なる対処を行うことが可能となる連携方法。作成できているか確認します。
入力用メニューグループの中に「ログ収集」メニューが作成されていて、
[登録開始]ボタンをクリックすると[host][dir][file]項目が作成されています。
これでOKです。
②代入値自動登録設定
Ansible-Legacy > 代入値自動登録設定 から
以下の部分を入力。
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と名前をメモしておくといいです。
4. OASEの設定
OASEまわりの設定を行っていきます。
図でいうとこちらです。
ディシジョンテーブルを作成
↓
Zabbixアダプタの設定
↓
ITAドライバの設定
↓
ディシジョンテーブルにルールを登録
という流れになります。
4-1 ディシジョンテーブルの作成
ディシジョンテーブルを作成します。
ITAでパラメータシートを作ったときのように、まずはテーブル自体を作る作業です。
上部メニュー ルール > ディシジョンテーブル から、右上の[新規追加]ボタンをクリックして
基本情報・権限
項目名 | 入力内容 |
---|---|
ディシジョンテーブル名 | ITAメニュー連携機能検証 |
権限の設定 システム管理者 | すべて更新可能にする(※) |
※ うっかり「権限なし」にすると、せっかく作ったディシジョンテーブルが表示されなくなるので注意。
条件式
条件名 | 条件式 |
---|---|
ホスト名 | 正規表現に一致する |
アラート | 等しい(文字列) |
未知事象通知
項目名 | 入力内容 |
---|---|
未知事象通知 | 通知しない |
[保存]ボタンをクリックして完了。
4-2 Zabbixアダプタの設定
Zabbixへの接続設定です。
上部メニュー システム > 監視アダプタ から右上の[監視先の追加]ボタンをクリックして
[ZABBIX Adapter ver1]を選択し以下の部分を入力。
※ お使いの環境に応じて入力してください。
項目名 | 入力内容 |
---|---|
名前 | oase-monitoring |
プロトコル | http |
ホスト/IP | zabbix-web-nginx-pgsql |
ポート | 8080 |
ユーザ名 | Admin(ZabbixのWeb画面のログインユーザ名) |
パスワード | ********(上記ユーザのパスワード) |
ディシジョンテーブル名 | ITAメニュー機能検証 |
突合情報
先ほどディシジョンテーブルに登録した条件名が表示されるので、それぞれ対応するZabbixの項目名を指定します。
条件名 | Zabbix項目 |
---|---|
ホスト名 | hosts |
アラート | description |
[保存]ボタンをクリックして完了。
4-3 ITAドライバの設定
ITAの接続設定です。
上部メニュー システム > アクション設定 から、右上の[アクション先の追加]ボタンをクリックして
「ITA Driver ver1」を選択し以下の部分を入力。
※ お使いの環境に応じて入力してください。
項目名 | 入力内容 |
---|---|
名前 | 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つ登録します。
上部メニュー ルール > デシジョンテーブル から、作成したデシジョンテーブルの左側にあるダウンロードボタンをクリック。
各項目の入力内容と説明は以下の通り。
(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を選択し、[アップロード]ボタンをクリック。
テストでは、「Zabbixからこういうメッセージをピックアップした」という仮定でテストを行います。なので、設定画面でメッセージ内容を手入力します。
ディシジョンテーブル
ディシジョンテーブル名選択 |
---|
OASEメニュー機能検証 |
設定
1回目
項目 | 入力内容 |
---|---|
ホスト名 | oase-target01 |
アラート | Apache: Process is not running |
2回目
項目 | 入力内容 |
---|---|
ホスト名 | oase-target01 |
アラート | MySQL: Service is down |
入力したら[実行]ボタンをクリック。
成功すると、ログにこういう画面が出ます。
「正常に処理されました」と表示され、ホスト名が指定したものになっていたら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ではどう表示されてるか見てみます。
ルール > アクション履歴から、表示されたアクション詳細へ。
赤枠のボタンをクリックするとログ詳細画面を表示できます。
下部のアクション情報 > 連携項目 を確認すると、ホスト名がきちんと反映され、こちらで記載した値が渡されていることがわかります。
では同じように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関係の記事を載せてみたので、合わせて見ていただければわかりやすいと思います。