zabbixをansibleで設定する(2) - mail発報する -
- zabbixを使った監視でmail発報させるまでの手順をまとめます。
- 設定はansibleで実装します。
- zabbixはインストール直後、初期設定はすませているものとします。
設定の段取り
- 設定としては、以下のような感じになります。
- 監視内容を決定します。今回はpingによる生死監視とします。
- 監視の内容を
item
として定義します。
- 発報の条件を
triger
として定義します。
item
とtriger
の内容でtemplate
を定義します。
template
をansibleでzabbixに適用します。
host_group
を登録します。
- 監視対象を
host
として、ansibleでzabbixに適用します。この時、事前に設定したhost_group
に所属させます。
Media types
をansibleでzabbixに適用します。この時、送信メールアドレスのSMTPサーバー等を設定します。
- 監視時に発報する
Users
をansibleで適用します。この時、メール発報するMedia types
を指定します。
triger
で検知した際に発報するユーザーをTrigger actions
で登録します。
監視の内容をitem
として、発報の条件をtriger
として定義
- 以下のように定義します。
- 手作業でjsonファイルを記述するのは大変なので、WEBインターフェースで定義したものをエクスポートし、雛形とすると楽です。
"items": [
{
"uuid": "49d5b82ce05446439dda6a1319b9f357",
"name": "ping",
"type": "SIMPLE",
"key": "icmpping",
"delay": "3s",
"triggers": [
{
"uuid": "c57b2a8f635b41439a0fa3669a803a75",
"expression": "last(/testtest/icmpping,#1)=0",
"name": "pingcheck",
"priority": "HIGH"
}
]
}
]
item
とtriger
の内容でtemplate
を定義
{
"zabbix_export": {
"version": "6.0",
"date": "2024-01-07T02:05:29Z",
"groups": [
{
"uuid": "846977d1dfed4968bc5f8bdb363285bc",
"name": "Templates/Operating systems"
}
],
"templates": [
{
"uuid": "f8f7908280354f2abeed07dc788c3747",
"template": "testtest",
"name": "test",
"description": "Official Linux template. Requires agent of Zabbix 6.0 or newer.\n \nYou can discuss this template or leave feedback on our forum https://www.zabbix.com/forum/zabbix-suggestions-and-feedback/387225-discussion-thread-for-official-zabbix-template-for-linux\n\nGenerated by official Zabbix template tool \"Templator\"",
"groups": [
{
"name": "Templates/Operating systems"
}
],
"items": [
{
"uuid": "49d5b82ce05446439dda6a1319b9f357",
"name": "ping",
"type": "SIMPLE",
"key": "icmpping",
"delay": "3s",
"triggers": [
{
"uuid": "c57b2a8f635b41439a0fa3669a803a75",
"expression": "last(/testtest/icmpping,#1)=0",
"name": "pingcheck",
"priority": "HIGH"
}
]
}
]
}
]
}
}
- これをansibleで適用するには以下のようにtaskを構成して適用します。
community.zabbix.zabbix_template
モジュールを使います。lookup
を使用してjsonファイルを探します。
- name: Import templates from JSON
community.zabbix.zabbix_template:
template_json: "{{ lookup('file', 'template.json') }}"
state: present
---
- hosts: all
gather_facts: no
roles:
- zabbix_setting
(zabbix_setting) ttmp@ttmp-virtual-machine:~/dev/zabbix_setting$ ansible-playbook -i hosts pb.yml --limit kanshi2 -K
BECOME password:
PLAY [all] **************************************************************************************************************************
TASK [zabbix_setting : Import templates from JSON] **********************************************************************************
changed: [kanshi2]
PLAY RECAP **************************************************************************************************************************
kanshi2 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
(zabbix_setting) ttmp@ttmp-virtual-machine:~/dev/zabbix_setting$
- 適用されました。
host_group
の登録
host_group
はcommunity.zabbix.zabbix_group
を使います。
- 以下にコードを記載します。
- name: add_hostgroup
community.zabbix.zabbix_group:
state: present
host_groups: "testgrp"
(zabbix_setting) ttmp@ttmp-virtual-machine:~/dev/zabbix_setting$ ansible-playbook -i hosts pb.yml --limit kanshi2 -K
BECOME password:
PLAY [all] **************************************************************************************************************************
TASK [zabbix_setting : Import templates from JSON] **********************************************************************************
changed: [kanshi2]
TASK [zabbix_setting : add_hostgroup] ***********************************************************************************************
changed: [kanshi2]
PLAY RECAP **************************************************************************************************************************
kanshi2 : ok=2 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
(zabbix_setting) ttmp@ttmp-virtual-machine:~/dev/zabbix_setting$
- 適用されました。
監視対象をhost
を登録
- 事前に設定した
host_group
に所属させます。
- また事前に作成したtenmplateをリンクさせます。
- name: Create a new host or rewrite an existing host's info
community.zabbix.zabbix_host:
host_name: ExampleHost
visible_name: ExampleName
description: My ExampleHost Description
host_groups:
- "testgrp"
link_templates:
- "testtest"
status: enabled
state: present
interfaces:
- type: 1
main: 1
useip: 1
ip: 192.168.11.47
dns: ""
port: "10050"
(zabbix_setting) ttmp@ttmp-virtual-machine:~/dev/zabbix_setting$ ansible-playbook -i hosts pb.yml --limit kanshi2 -K
BECOME password:
PLAY [all] **************************************************************************************************************************
TASK [zabbix_setting : Import templates from JSON] **********************************************************************************
changed: [kanshi2]
TASK [zabbix_setting : add_hostgroup] ***********************************************************************************************
ok: [kanshi2]
TASK [zabbix_setting : Create a new host or rewrite an existing host's info] ********************************************************
changed: [kanshi2]
PLAY RECAP **************************************************************************************************************************
kanshi2 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
(zabbix_setting) ttmp@ttmp-virtual-machine:~/dev/zabbix_setting$
- 登録されました。
- 送信メールアドレスのSMTPサーバー等を設定します。
- name: "Create an email mediatype with SMTP authentication"
# set task level variables as we change ansible_connection plugin here
community.zabbix.zabbix_mediatype:
name: "Ops email"
type: "email"
smtp_server: "example.com"
smtp_server_port: 2000
smtp_email: "ops@example.com"
smtp_authentication: true
smtp_security: STARTTLS
username: "smtp_user"
password: "smtp_pass"
- 上記は適当な値を入れていますが、実際にはメール送信可能な情報を記述します。また、パスワードなどの情報はvaultに保存すべきです。
- 実行します。
(zabbix_setting) ttmp@ttmp-virtual-machine:~/dev/zabbix_setting$ ansible-playbook -i hosts pb.yml --limit kanshi2 -K
BECOME password:
PLAY [all] **************************************************************************************************************************
TASK [zabbix_setting : Import templates from JSON] **********************************************************************************
changed: [kanshi2]
TASK [zabbix_setting : add_hostgroup] ***********************************************************************************************
ok: [kanshi2]
TASK [zabbix_setting : Create a new host or rewrite an existing host's info] ********************************************************
ok: [kanshi2]
TASK [zabbix_setting : Create an email mediatype with SMTP authentication] **********************************************************
changed: [kanshi2]
PLAY RECAP **************************************************************************************************************************
kanshi2 : ok=4 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
(zabbix_setting) ttmp@ttmp-virtual-machine:~/dev/zabbix_setting$
- 適用されました。
- テストしてみると良いでしょう。メール送信の単体確認ができます。
監視時に発報するUsers
を適用
- メール発報する
Media types
を指定します。
community.zabbix.zabbix_user
を使用します。
- name: create a new zabbix user.
community.zabbix.zabbix_user:
username: Admin2
name: Zabbix2
surname: Administrator2
usrgrps:
- Zabbix administrators
passwd: zabbixzabbix
lang: default
theme: default
autologin: "1"
autologout: "0"
refresh: "30s"
rows_per_page: "200"
user_medias:
- mediatype: Ops email
sendto:
- example@example.com
- example1@example.com
period: 1-7,00:00-24:00
severity:
not_classified: no
information: yes
warning: yes
average: yes
high: yes
disaster: yes
active: yes
state: present
(zabbix_setting) ttmp@ttmp-virtual-machine:~/dev/zabbix_setting$ ansible-playbook -i hosts pb.yml --limit kanshi2 -K
BECOME password:
PLAY [all] **************************************************************************************************************************
TASK [zabbix_setting : Import templates from JSON] **********************************************************************************
changed: [kanshi2]
TASK [zabbix_setting : add_hostgroup] ***********************************************************************************************
ok: [kanshi2]
TASK [zabbix_setting : Create a new host or rewrite an existing host's info] ********************************************************
ok: [kanshi2]
TASK [zabbix_setting : Create an email mediatype with SMTP authentication] **********************************************************
ok: [kanshi2]
TASK [zabbix_setting : create a new zabbix user.] ***********************************************************************************
changed: [kanshi2]
PLAY RECAP **************************************************************************************************************************
kanshi2 : ok=5 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
(zabbix_setting) ttmp@ttmp-virtual-machine:~/dev/zabbix_setting$
- 適用されました。
- media typeも設定されました。
triger
で検知した際に発報するユーザーをTrigger actions
で登録
- 以下のように
trigger_severity
がhigh
の時に発砲するようにしてみます。
- name: Deploy trigger action
community.zabbix.zabbix_action:
name: "Send alerts to Admin"
event_source: "trigger"
state: present
status: enabled
esc_period: 60
conditions:
- type: "trigger_severity"
operator: "equals"
value: "high"
operations:
- type: send_message
subject: "Something bad is happening"
op_message: "Come on, guys do something"
media_type: "Ops email"
send_to_users:
- "Admin2"
(zabbix_setting) ttmp@ttmp-virtual-machine:~/dev/zabbix_setting$ ansible-playbook -i hosts pb.yml --limit kanshi2 -K
BECOME password:
PLAY [all] **************************************************************************************************************************
TASK [zabbix_setting : Import templates from JSON] **********************************************************************************
changed: [kanshi2]
TASK [zabbix_setting : add_hostgroup] ***********************************************************************************************
ok: [kanshi2]
TASK [zabbix_setting : Create a new host or rewrite an existing host's info] ********************************************************
ok: [kanshi2]
TASK [zabbix_setting : Create an email mediatype with SMTP authentication] **********************************************************
ok: [kanshi2]
TASK [zabbix_setting : create a new zabbix user.] ***********************************************************************************
ok: [kanshi2]
TASK [zabbix_setting : Deploy trigger action] ***************************************************************************************
changed: [kanshi2]
PLAY RECAP **************************************************************************************************************************
kanshi2 : ok=6 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
(zabbix_setting) ttmp@ttmp-virtual-machine:~/dev/zabbix_setting$
- 適用されました。
- 発報してみます。
- actionが起動しました。
- メールも送信されました。