こんにちは。
株式会社クラスアクト インフラストラクチャ事業部の大塚です。
ZabbixサーバでCPU・MEMORY・DISK・PROCESS・PORT・死活・LOG監視を検証的にやっていくための手順をメモっていきます。
Zabbix Server:172.18.251.160
Zabbix Agent:172.18.251.161
です。
これの続きと思って頂ければ・・・
これらの監視テンプレートは以下になります。参考迄。
使用するのであれば、コピーして任意の名前のxmlファイルで保存。保存したものをZabbix serverにインポートしてあげればよいのかなと・・・
今回のテンプレート。
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>6.4</version>
<template_groups>
<template_group>
<uuid>7df96b18c230490a9a0a9e2307226338</uuid>
<name>Templates</name>
</template_group>
</template_groups>
<templates>
<template>
<uuid>ba04b3ec178146928d5c6a9c955edeb8</uuid>
<template>kensyo-template</template>
<name>kensyo-template</name>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<items>
<item>
<uuid>85a5d878bb5748c1865c7a4ca1887b0a</uuid>
<name>死活監視</name>
<type>SIMPLE</type>
<key>icmpping["172.18.251.161",,,,]</key>
<triggers>
<trigger>
<uuid>0fd223cffd4f4e90abd1a7fab41d3f6c</uuid>
<expression>last(/kensyo-template/icmpping["172.18.251.161",,,,])=0</expression>
<name>死活監視 Trigger</name>
<priority>HIGH</priority>
</trigger>
</triggers>
</item>
<item>
<uuid>5b703e9384574f3d955007bba86afb21</uuid>
<name>LOG</name>
<type>ZABBIX_ACTIVE</type>
<key>log[/var/log/test.log,HELLO WORLD,,100,skip]</key>
<value_type>LOG</value_type>
<trends>0</trends>
<triggers>
<trigger>
<uuid>644df4f7c6594efc92d2e89fc0f43f11</uuid>
<expression>length(last(/kensyo-template/log[/var/log/test.log,HELLO WORLD,,100,skip])) > 0</expression>
<name>LOG Trigger</name>
<priority>HIGH</priority>
</trigger>
</triggers>
</item>
<item>
<uuid>0a4f0a9778ec416c86771c21c9f67224</uuid>
<name>PORT</name>
<key>net.tcp.service[tcp,,80]</key>
<triggers>
<trigger>
<uuid>090855b1056f4d0d8f279d08c541bf49</uuid>
<expression>last(/kensyo-template/net.tcp.service[tcp,,80])=0</expression>
<name>PORT Trigger</name>
<priority>HIGH</priority>
</trigger>
</triggers>
</item>
<item>
<uuid>b23256b120a046f59c6001d2fa7a195b</uuid>
<name>PROCESS</name>
<key>proc.num[amazon-cloudwatch-agent]</key>
<triggers>
<trigger>
<uuid>ab3614d679b04685a66e8435f9d454ef</uuid>
<expression>last(/kensyo-template/proc.num[amazon-cloudwatch-agent])=0</expression>
<name>PROCESS Trigger</name>
<priority>HIGH</priority>
</trigger>
</triggers>
</item>
<item>
<uuid>0f118a8fcc1a4080bc1523411733309f</uuid>
<name>CPU</name>
<key>system.cpu.util[all,user,avg1]</key>
<value_type>FLOAT</value_type>
<triggers>
<trigger>
<uuid>bdd189cb96d940468bb520a541f75537</uuid>
<expression>last(/kensyo-template/system.cpu.util[all,user,avg1]) > 10</expression>
<name>CPU Trigger</name>
<priority>HIGH</priority>
</trigger>
</triggers>
</item>
<item>
<uuid>661dc464bf74413782d1b3186799ae98</uuid>
<name>DISK</name>
<key>vfs.fs.size[/,pused]</key>
<value_type>FLOAT</value_type>
<triggers>
<trigger>
<uuid>a0d49c4a73a445ce8a0f4ee11f26b5a5</uuid>
<expression>last(/kensyo-template/vfs.fs.size[/,pused])<=99</expression>
<name>DISK Trigger</name>
<priority>HIGH</priority>
</trigger>
</triggers>
</item>
<item>
<uuid>2ba9d5d220d048abb75ec7a3eca70318</uuid>
<name>MEMORY</name>
<key>vm.memory.size[used]</key>
<triggers>
<trigger>
<uuid>1e7eb382ce624501af26c39dadf93091</uuid>
<expression>last(/kensyo-template/vm.memory.size[used])>10</expression>
<name>MEMORY Trigger</name>
<priority>HIGH</priority>
</trigger>
</triggers>
</item>
</items>
</template>
</templates>
</zabbix_export>
用語
📦 アイテム(Item)
→ 「何を監視するか」の定義。
例:
- CPUの使用率
- メモリの空き容量
- ネットワークの通信量
🚨 トリガー(Trigger)
→ 異常を検知するための「条件式」。
例:
- CPU使用率が90%を超えたらアラート!
- ディスク残量が10GB未満になったら通知!
トリガーが条件に合うと「障害(Problem)」が発生します。
🎛️ テンプレート(Template)
→ よく使う監視項目の「ひな形」。
- サーバー監視用のテンプレート
- MySQL監視用のテンプレート
- Windowsサーバー用テンプレート など
テンプレートを使えば、毎回同じ設定を手作業で作らなくてもOK。
構築開始 zabbix agent側
ServerとServerActive、Hostnameを変更します。
ServerActiveはLOG監視でアクティブにする必要がありそうで、その時に使用する設定です。
HostnameはAgentが動いているホスト(hostnameとコマンド打った時に出力されるもの)と併せてください。今回はzabbix-agentです。
root@zabbix-agent:~# cp -p /etc/zabbix/zabbix_agent2.conf /etc/zabbix/zabbix_agent2.conf.org
root@zabbix-agent:~# vi /etc/zabbix/zabbix_agent2.conf
root@zabbix-agent:~# diff /etc/zabbix/zabbix_agent2.conf /etc/zabbix/zabbix_agent2.conf.org
80c80
< Server=172.18.251.160
---
> Server=127.0.0.1
133c133
< ServerActive=172.18.251.160
---
> ServerActive=127.0.0.1
144c144
< Hostname=zabbix-agent
---
> Hostname=Zabbix server
agent起動
root@zabbix-agent:~# systemctl start zabbix-agent2
root@zabbix-agent:~# systemctl enable zabbix-agent2
Synchronizing state of zabbix-agent2.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable zabbix-agent2
構築 Server
ホスト登録
ホスト名は監視対象のhostnameと同じにする。
(つまり、監視対象のhostnameと監視対象のzabbix_agent2.confのHostname、ここの3つを併せないといけない。)
IPアドレスは監視対象のIPアドレス。
テンプレートを指定していないので、エージェントの状態がグレーから変化しないと思うが
それでいったんOK
テンプレート作成
アイテム作成
CPU監視
作成したテンプレートのアイテムを押下します。
画面右上のアイテムの作成を押下します。
system.cpu.util[all,user,avg1]
DISK監視
MEMORY監視
PORT監視
PROCESS監視
proc.num[amazon-cloudwatch-agent]
死活監視
icmpping["監視対象サーバのIPアドレス",,,,]
※icmpping["監視対象サーバのIPアドレス",,,,]ですが、icmpping[{HOST.IP}]の方が汎用性高くていいですね。こちらなら、テンプレートに紐づいたIPアドレスを勝手に当てはめてくれます💦
LOG監視
log[/var/log/test.log,HELLO WORLD,,100,skip]
ここでServerActiveの設定を使うので注意。間違っていたらこれの監視が上手くいかない可能性がある
トリガー作成
テンプレートからトリガーを押下。
各アイテムの「・・・」からトリガーの作成を押下
CPU
last(/kensyo-template/system.cpu.util[all,user,avg1]) > 10
- last(...): 指定されたアイテムの最新の値を取得する関数。
- /kensyo-template/system.cpu.util[all,user,avg1]: Zabbixのアイテムキーで、CPUの使用率に関する情報を取得するもの。kensyo-template はテンプレート名、system.cpu.util はCPU使用率を示すアイテムキー。[all,user,avg1] は、全体のCPU使用率、ユーザー領域のCPU使用率、1分間の平均を表すパラメータ。
- > 10: 条件式で、取得したCPU使用率が10を超えているかどうかを評価。
DISK
last(/kensyo-template/vfs.fs.size[/,pused])<=99
- last(...): 指定されたアイテムの最新の値を取得する関数。
- /kensyo-template/vfs.fs.size[/,pused]: Zabbixのアイテムキーで、ファイルシステムのサイズに関する情報を取得するもの。kensyo-template はテンプレート名、vfs.fs.size はファイルシステムサイズを示すアイテムキー。[/,pused] は、ルートファイルシステムの使用済みパーセンテージを表すパラメータ。
- <= 99: 条件式で、取得したファイルシステムの使用率が99%以下であるかどうかを評価。
MEMORY
last(/kensyo-template/vm.memory.size[used])>10
- last(...): 指定されたアイテムの最新の値を取得する関数。
- /kensyo-template/vm.memory.size[used]: Zabbixのアイテムキーで、仮想マシンの使用メモリに関する情報を取得するもの。kensyo-template はテンプレート名、vm.memory.size はメモリサイズを示すアイテムキー。[used] は、使用中のメモリ量を表すパラメータ。
- > 10: 条件式で、取得した使用中のメモリ量が10を超えているかどうかを評価。
PORT
last(/kensyo-template/net.tcp.service[tcp,,80])=0
- last(...): 指定されたアイテムの最新の値を取得する関数。
- /kensyo-template/net.tcp.service[tcp,,80]: Zabbixのアイテムキーで、TCPサービスの状態に関する情報を取得するもの。kensyo-template はテンプレート名、net.tcp.service はTCPサービスの監視を示すアイテムキー。[tcp,,80] は、TCPプロトコルでポート80(HTTP)を監視することを示すパラメータ。
- = 0: 条件式で、取得したTCPサービスの状態が0(サービスがダウンしている)であるかどうかを評価。
PROCESS
last(/kensyo-template/proc.num[amazon-cloudwatch-agent])=0
- last(...): 指定されたアイテムの最新の値を取得する関数。
- /kensyo-template/proc.num[amazon-cloudwatch-agent]: Zabbixのアイテムキーで、特定のプロセスの数に関する情報を取得するもの。kensyo-template はテンプレート名、proc.num はプロセスの数を示すアイテムキー。[amazon-cloudwatch-agent] は、監視対象のプロセス名を表すパラメータ。
- = 0: 条件式で、取得したプロセスの数が0(プロセスが実行されていない)であるかどうかを評価。
死活監視
last(/kensyo-template/icmpping["監視対象のIPアドレス",,,,])=0
- last(...): 指定されたアイテムの最新の値を取得する関数。
- /kensyo-template/icmpping["監視対象のIPアドレス",,,,]: Zabbixのアイテムキーで、ICMP ping(Ping応答)に関する情報を取得するもの。kensyo-template はテンプレート名、icmpping はPing監視を示すアイテムキー。["監視対象のIPアドレス",,,,] は、監視対象のIPアドレスを指定するパラメータ(他の引数はデフォルト値)。
- = 0: 条件式で、取得したPing応答が0(Pingがタイムアウトまたは対象に到達できない)であるかどうかを評価。
LOG
length(last(/kensyo-template/log[/var/log/test.log,HELLO WORLD,,100,skip])) > 0
- length(...): 指定された値の長さ(文字数)を取得する関数。
- last(...): 指定されたアイテムの最新の値を取得する関数。
- /kensyo-template/log[/var/log/test.log,HELLO WORLD,,100,skip]: Zabbixのアイテムキーで、特定のログファイルからのエントリに関する情報を取得するもの。kensyo-template はテンプレート名、log はログ監視を示すアイテムキー。[/var/log/test.log, HELLO WORLD, ,, 100, skip] は、監視対象のログファイルパス、検索する文字列、その他のパラメータ(デフォルト値)を示す。
-
/var/log/test.log
: 監視対象のログファイルのパス。 -
HELLO WORLD
: 検索する文字列。 -
,,
: その他のオプション(デフォルト値を使用)。 -
100
: 検索する行数の上限。 -
skip
: スキップオプション(特定の条件に基づいて行をスキップする)。
-
- > 0: 条件式で、取得したログエントリの長さが0より大きい(つまり、指定した文字列がログに存在する)かどうかを評価。
ホストにテンプレートを紐づける
テンプレートの欄で、上記で作成したkensyo-templateを選択する
テンプレートの欄に、適用したテンプレートの名前が表示されることを確認する
監視試験
監視データからホストを選択する
監視したいホスト名を押下する。
簡単に発報するようにしているので、連携したタイミングでいくつかなっている。
CPU
stressコマンドで圧を掛けてみる
root@zabbix-agent:~# apt install -y stress
root@zabbix-agent:~# stress --cpu 4
stress: info: [2765] dispatching hogs: 4 cpu, 0 io, 0 vm, 0 hdd
MEMORY,DISK
簡単になるようにしているで、テンプレートが適用された瞬間に出力される。
PROCESS
AWSのCloudwatch Agentのプロセスが走っていないので、なっている。
疑似的にプロセスを走らせてみる
root@zabbix-agent:~# apt install -y python3-pip
root@zabbix-agent:~# pip install setproctitle
Collecting setproctitle
Downloading setproctitle-1.3.6-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (30 kB)
Installing collected packages: setproctitle
Successfully installed setproctitle-1.3.6
root@zabbix-agent:~# vi proc.py
root@zabbix-agent:~# cat proc.py
import time
from setproctitle import setproctitle
setproctitle('amazon-cloudwatch-agent')
while True:
time.sleep(60)
root@zabbix-agent:~# python3 proc.py
PORT
監視対象サーバ上で80ポートでリッスンしているアプリケーションが無いので、なっている
apache2をインストールして、起動
80ポートでリッスンさせる
root@zabbix-agent:~# apt install -y apache2
root@zabbix-agent:~# systemctl start apache2
root@zabbix-agent:~# systemctl status apache2
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2025-07-26 05:07:44 UTC; 19s ago
Docs: https://httpd.apache.org/docs/2.4/
Main PID: 3590 (apache2)
Tasks: 55 (limit: 9388)
Memory: 5.2M
CPU: 47ms
CGroup: /system.slice/apache2.service
tq3590 /usr/sbin/apache2 -k start
tq3591 /usr/sbin/apache2 -k start
mq3592 /usr/sbin/apache2 -k start
Jul 26 05:07:44 zabbix-agent systemd[1]: Starting The Apache HTTP Server...
Jul 26 05:07:44 zabbix-agent apachectl[3586]: AH00558: apache2: Could not reliably determine the server's fully qual>
Jul 26 05:07:44 zabbix-agent systemd[1]: Started The Apache HTTP Server.
LOG
以下のコマンドを実行して、トリガーを起動させる。
root@zabbix-agent:~# touch /var/log/test.log
root@zabbix-agent:~# chmod 644 /var/log/test.log
root@zabbix-agent:~# echo "HELLO WORLD" >> /var/log/test.log
root@zabbix-agent:~# echo "HELLO WORLD" >> /var/log/test.log
root@zabbix-agent:~# echo "HELLO WORLD" >> /var/log/test.log
root@zabbix-agent:~# cat /var/log/test.log
HELLO WORLD
HELLO WORLD
HELLO WORLD
死活監視
agentが動いているサーバを停止する
root@zabbix-agent:~# shutdown -h now