1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

zabbix serverでCPU/MEM/DISK/PROC/PORT/LOG/死活監視する

Last updated at Posted at 2025-07-26

こんにちは。
株式会社クラスアクト インフラストラクチャ事業部の大塚です。

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[&quot;172.18.251.161&quot;,,,,]</key>
                    <triggers>
                        <trigger>
                            <uuid>0fd223cffd4f4e90abd1a7fab41d3f6c</uuid>
                            <expression>last(/kensyo-template/icmpping[&quot;172.18.251.161&quot;,,,,])=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])) &gt; 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]) &gt; 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])&lt;=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])&gt;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

ホスト登録

データ収集 > ホスト から右上のホスト作成を押下。
image.png

ホスト名は監視対象のhostnameと同じにする。
(つまり、監視対象のhostnameと監視対象のzabbix_agent2.confのHostname、ここの3つを併せないといけない。)
IPアドレスは監視対象のIPアドレス。
image.png

テンプレートを指定していないので、エージェントの状態がグレーから変化しないと思うが
それでいったんOK
image.png

テンプレート作成

データ収集 > テンプレートを押下する
image.png

画面右上のテンプレートの作成を押下します。
image.png

image.png

作成出来たことを確認する。
image.png

アイテム作成

CPU監視

作成したテンプレートのアイテムを押下します。
画面右上のアイテムの作成を押下します。
image.png

system.cpu.util[all,user,avg1]
image.png

DISK監視

vfs.fs.size[/,pused]
image.png

MEMORY監視

vm.memory.size[used]
image.png

PORT監視

net.tcp.service[tcp,,80]
image.png

PROCESS監視

proc.num[amazon-cloudwatch-agent]
image.png

死活監視

icmpping["監視対象サーバのIPアドレス",,,,]
image.png

※icmpping["監視対象サーバのIPアドレス",,,,]ですが、icmpping[{HOST.IP}]の方が汎用性高くていいですね。こちらなら、テンプレートに紐づいたIPアドレスを勝手に当てはめてくれます💦
image.png

LOG監視

log[/var/log/test.log,HELLO WORLD,,100,skip]
ここでServerActiveの設定を使うので注意。間違っていたらこれの監視が上手くいかない可能性がある
image.png

全てのアイテムを登録した結果
image.png

トリガー作成

テンプレートからトリガーを押下。
各アイテムの「・・・」からトリガーの作成を押下
image.png

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を超えているかどうかを評価。

image.png

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%以下であるかどうかを評価。

image.png

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を超えているかどうかを評価。

image.png

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(サービスがダウンしている)であるかどうかを評価。
    image.png

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(プロセスが実行されていない)であるかどうかを評価。
    image.png

死活監視

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がタイムアウトまたは対象に到達できない)であるかどうかを評価。
    image.png

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より大きい(つまり、指定した文字列がログに存在する)かどうかを評価。

image.png

全てのアイテムにトリガーが紐づけられていることがわかる。
image.png

トリガータブを開くことでも確認が出来る。
image.png

ホストにテンプレートを紐づける

作成したzabbix-agentを押下する。
image.png

テンプレートの欄で、上記で作成したkensyo-templateを選択する
image.png

テンプレートの欄に、適用したテンプレートの名前が表示されることを確認する
image.png

エージェントが緑色に変化することを確認する。
image.png

監視試験

監視データからホストを選択する
監視したいホスト名を押下する。
image.png

障害を押下する。
image.png

簡単に発報するようにしているので、連携したタイミングでいくつかなっている。
image.png

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

すぐに出てくると思われる。
image.png
image.png

stressを解消すると、解決済みとなる。
image.png

MEMORY,DISK

簡単になるようにしているで、テンプレートが適用された瞬間に出力される。
image.png
image.png

PROCESS

AWSのCloudwatch Agentのプロセスが走っていないので、なっている。
image.png

疑似的にプロセスを走らせてみる

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

疑似プロセスを検知して、解決済みステータスに変更となった。
image.png

image.png

PORT

監視対象サーバ上で80ポートでリッスンしているアプリケーションが無いので、なっている
image.png

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.

apacheでリッスンさせると、解決済みとなる。
image.png

image.png

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

ログに特定の文字列を入力したことで発報した
image.png
image.png

死活監視

agentが動いているサーバを停止する

root@zabbix-agent:~# shutdown -h now

発報した
image.png
image.png

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?