統合監視ソフト Zabbix †
zabbix_senderで一括送信 †
通常は監視の値1つに対して、1回実行が発生する。
1回の実行で複数の値が取れる場合、「-T」で一括送信ができる。外部チェックは負荷が高いので、負荷を下げる事ができるかも。
- zabbix-serverに対して値を送信(zabbix-senderパッケージが必要)
server/proxy/agent間通信の暗号化 †
HostMetadata, HostMetadataItem を使ってホストの自動登録を区別する †
- HostMetadataItem
- zabbix-agentが実行できるItem keyを指定できる。
HostMetadataItem=system.uname
- zabbix_agentdで値の取得をテスト
zabbix_agentd -t 'system.uname'
system.uname [s|Linux example.localdomain 3.10.0-693.11.6.el7.x86_64 #1 SMP Thu Jan 4 01:06:37 UTC 2018 x86_64]
zabbix_agentd -t 'system.sw.os[]'
system.sw.os[] [s|Linux version 3.10.0-693.11.6.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-16) (GCC) ) #1 SMP Thu Jan 4 01:06:37 UTC 2018]
hostnameでのtrigger分岐 †
- 例:hostnameが「web01.example.com」「db01.example.com」「cache01.example.com」の場合で、「web|cache」を含む時だけtriggerを発生させたい
- 「Template OS Linux」にItem「Host name」があり、Key「system.hostname」を使っている。他のテンプレートから同名のkeyは使用、参照できない。
- 「Example template」テンプレートで、以下を定義する
- Item: my_hostname
- key: system.run[hostname -f]
- trigger: hostnameに「web|cache」を含み、td-agentのプロセスが0個が3回連続するならアラート
({Example template:system.run[hostname -f].iregexp(web|cache)}=1)
and
({Example template:proc.num[ruby,,,td-agent].count(#3,1,lt)}>2)
TCP/UDP コネクション数の取得 †
ホスト単位でざっくりな数を知りたい場合。
- alloc: allocated(netstat -an | ESTABLISHED相当) inuseとは異なる値になる時がある
- inuse: コネクション数
- timewait: TIME_WAIT数
- /etc/zabbix/zabbix_agentd.d/userparameter_sockstat.conf
# パラメータ化して、zabbix template側で調整する場合。IPv6もパラメータで対応可能
# sockstat[</proc/net/sockstat>,<field name>,<field no>]
UserParameter=sockstat[*],grep "$2" "$1" | cut -d' ' -f "$3"
# べた書きの場合
UserParameter=sockstat.sockets,grep sockets: /proc/net/sockstat | cut -d' ' -f 3
UserParameter=sockstat.tcp.inuse,grep TCP: /proc/net/sockstat | cut -d' ' -f 3
UserParameter=sockstat.tcp.orphan,grep TCP: /proc/net/sockstat | cut -d' ' -f 5
UserParameter=sockstat.tcp.timewait,grep TCP: /proc/net/sockstat | cut -d' ' -f 7
UserParameter=sockstat.tcp.allocated,grep TCP: /proc/net/sockstat | cut -d' ' -f 9
UserParameter=sockstat.tcp.mem,grep TCP /proc/net/sockstat | cut -d' ' -f 11
UserParameter=sockstat.udp.inuse,grep UDP: /proc/net/sockstat | cut -d' ' -f 3
UserParameter=sockstat.udp.mem,grep UDP: /proc/net/sockstat | cut -d' ' -f 5
- test
# IPv4
# sockstat tcp inuse
zabbix_agentd -t 'sockstat[/proc/net/sockstat,TCP:,3]'
# sockstat tcp timewait
zabbix_agentd -t 'sockstat[/proc/net/sockstat,TCP:,7]'
# sockstat tcp alloc
zabbix_agentd -t 'sockstat[/proc/net/sockstat,TCP:,9]'
# sockstat udp inuse
zabbix_agentd -t 'sockstat[/proc/net/sockstat,UDP:,3]'
# IPv6
# sockstat6 tcp6 inuse
zabbix_agentd -t 'sockstat[/proc/net/sockstat6,TCP6:,3]'
# sockstat6 udp6 inuse
zabbix_agentd -t 'sockstat[/proc/net/sockstat6,UDP6:,3]'
冗長構成 †
ネットワークのLatency測定 †
Zabbix Server/Proxyから実行される。
予測関数(time_shift, forecast) †
Active Checkが失敗する場合 †
正規表現 †
PostgreSQLの監視 †
SSL証明書の有効期限の監視 †
ansibleでzabbixの設定を行う †
チャットに通知 †
zabbix-slack-notify.zip 通知スクリプト。CentOS 5/6対応。
- スクリプトを /etc/zabbix/alertscripts/ に配置
sudo chmod 755 /etc/zabbix/alertscripts/*.sh
- 管理 > メディアタイプ > 作成
- 設定 > ユーザ > ユーザ名 > メディアでslackを追加
- 設定 > アクション > アクション名 > アクションの実行内容タブ > 次のメディアのみ使用: slackに設定
- CentOS5.x: curl 7.15.5 --data-urlencode 非対応
payload="{
...
"
curl -d "$payload" ...
- CentOS6.x: curl 7.19.7
payload="payload={
...
"
curl --data-urlencode "$payload" ...
ネットワーク疎通確認 †
CLI tools †
zabbix-agentのuserparameterスクリプトでsudoを使えるようにする †
CentOS 5.x にEPEL版zabbix2.0.13をインストール †
※新規インストールする場合は、EPELではなく、Zabbix Official Repository を使った方が3.0へのバージョンアップもできて良い。
いつの頃からかCentOS5.x用のzabbix20のパッケージがEPELから消えてしまった。
しかし、時間の都合でパッチだけ当てたい。検索したところ、fedoraのbuildシステム上にはrpmがあったのでこれをインストールしてみる。
不具合は当然あるものとして自己責任
- zabbix20-2.0.13-1.el5 | Build Info | koji
- CentOS 5.10 64bit
wget https://kojipkgs.fedoraproject.org//packages/zabbix20/2.0.13/1.el5/x86_64/zabbix20-2.0.13-1.el5.x86_64.rpm \
https://kojipkgs.fedoraproject.org//packages/zabbix20/2.0.13/1.el5/x86_64/zabbix20-agent-2.0.13-1.el5.x86_64.rpm \
https://kojipkgs.fedoraproject.org//packages/zabbix20/2.0.13/1.el5/x86_64/zabbix20-debuginfo-2.0.13-1.el5.x86_64.rpm \
https://kojipkgs.fedoraproject.org//packages/zabbix20/2.0.13/1.el5/x86_64/zabbix20-proxy-2.0.13-1.el5.x86_64.rpm \
https://kojipkgs.fedoraproject.org//packages/zabbix20/2.0.13/1.el5/x86_64/zabbix20-proxy-mysql-2.0.13-1.el5.x86_64.rpm \
https://kojipkgs.fedoraproject.org//packages/zabbix20/2.0.13/1.el5/x86_64/zabbix20-proxy-pgsql-2.0.13-1.el5.x86_64.rpm \
https://kojipkgs.fedoraproject.org//packages/zabbix20/2.0.13/1.el5/x86_64/zabbix20-proxy-sqlite3-2.0.13-1.el5.x86_64.rpm \
https://kojipkgs.fedoraproject.org//packages/zabbix20/2.0.13/1.el5/x86_64/zabbix20-server-2.0.13-1.el5.x86_64.rpm \
https://kojipkgs.fedoraproject.org//packages/zabbix20/2.0.13/1.el5/x86_64/zabbix20-server-mysql-2.0.13-1.el5.x86_64.rpm \
https://kojipkgs.fedoraproject.org//packages/zabbix20/2.0.13/1.el5/x86_64/zabbix20-server-pgsql-2.0.13-1.el5.x86_64.rpm \
https://kojipkgs.fedoraproject.org//packages/zabbix20/2.0.13/1.el5/x86_64/zabbix20-web-2.0.13-1.el5.x86_64.rpm \
https://kojipkgs.fedoraproject.org//packages/zabbix20/2.0.13/1.el5/x86_64/zabbix20-web-mysql-2.0.13-1.el5.x86_64.rpm \
https://kojipkgs.fedoraproject.org//packages/zabbix20/2.0.13/1.el5/x86_64/zabbix20-web-pgsql-2.0.13-1.el5.x86_64.rpm
- zabbix serverを更新
sudo yum localinstall --nogpgcheck \
zabbix20-2.0.13-1.el5.x86_64.rpm \
zabbix20-agent-2.0.13-1.el5.x86_64.rpm \
zabbix20-server-2.0.13-1.el5.x86_64.rpm \
zabbix20-server-mysql-2.0.13-1.el5.x86_64.rpm \
zabbix20-web-2.0.13-1.el5.x86_64.rpm \
zabbix20-web-mysql-2.0.13-1.el5.x86_64.rpm \
zabbix20-web-pgsql-2.0.13-1.el5.x86_64.rpm
sudo service httpd restart
Zabbix2.0.xでLBでSSLアクセラレーションをしている場合にページャーが動作しない †
DBのクリーンアップ †
長期間使用しているとDBサイズが肥大化してくる。
特にmysqlのインデックスファイルが大きくなりがち。
- 対策
- アイテムの監視間隔を長くする
- アイテムの保存期間を短くする
- テーブル分割(パーティショニング)する
- mysqlテーブルをALTER TABLEする。MySQL 5.6未満はALTER TABLE中はロックがかかるためアクセスができない(housekeeperはdeleteするだけで実際のファイルサイズは小さくならない)
- ALTER TABLEする時に「ROW_FORMAT=Compressed」を付ける。圧縮され、半分程度のサイズになる。(/etc/my.cnfでinnodb_file_format=Barracuda の場合)
- mysqlのダンプ > 再インポート
zabbix_cleanup
- ALTER TABLEするシェルスクリプト
- ログは /var/log/messages に出る
- ALTER TABLE前
ll -lh /var/lib/mysql/zabbix/ | grep -P 'M|G'
合計 433M
-rw-rw---- 1 mysql mysql 64M 1月 15 16:59 history.ibd
-rw-rw---- 1 mysql mysql 168M 1月 15 16:59 history_uint.ibd
-rw-rw---- 1 mysql mysql 44M 1月 15 16:44 trends.ibd
-rw-rw---- 1 mysql mysql 92M 1月 15 16:45 trends_uint.ibd
- ALTER TABLE後
less /var/log/messages
zabbix_cleanup: [INFO] ALTER TABLE completed. Table: trends, 33 seconds.
zabbix_cleanup: [INFO] ALTER TABLE completed. Table: trends_uint, 72 seconds.
zabbix_cleanup: [INFO] ALTER TABLE completed. Table: history, 18 seconds.
zabbix_cleanup: [INFO] ALTER TABLE completed. Table: history_uint, 47 seconds.
ll -lh /var/lib/mysql/zabbix/ | grep -P 'M|G'
合計 361M
-rw-rw---- 1 mysql mysql 56M 1月 15 17:07 history.ibd
-rw-rw---- 1 mysql mysql 124M 1月 15 17:07 history_uint.ibd
-rw-rw---- 1 mysql mysql 40M 1月 15 17:02 trends.ibd
-rw-rw---- 1 mysql mysql 76M 1月 15 17:03 trends_uint.ibd
- ALTER TABLE ROW_FORMAT=Compressed KEY_BLOCK_SIZE=8 後
less /var/log/messages
Jan 15 17:11:43 mistel zabbix_cleanup: [INFO] ALTER TABLE completed. Table: trends, 17 seconds.
Jan 15 17:12:14 mistel zabbix_cleanup: [INFO] ALTER TABLE completed. Table: trends_uint, 31 seconds.
Jan 15 17:13:17 mistel zabbix_cleanup: [INFO] ALTER TABLE completed. Table: history, 63 seconds.
Jan 15 17:16:38 mistel zabbix_cleanup: [INFO] ALTER TABLE completed. Table: history_uint, 201 seconds.
ll -lh /var/lib/mysql/zabbix/ | grep -P 'M|G'
合計 220M
-rw-rw---- 1 mysql mysql 31M 1月 15 17:19 history.ibd
-rw-rw---- 1 mysql mysql 64M 1月 15 17:19 history_uint.ibd
-rw-rw---- 1 mysql mysql 20M 1月 15 17:11 trends.ibd
-rw-rw---- 1 mysql mysql 40M 1月 15 17:12 trends_uint.ibd
fluentd(td-agent)からメトリクスを登録 †
API †
グラフの時刻を変更する †
管理画面のパスワードをリセットする †
- 管理方法がユーザ、パスワード認証の場合
- Adminユーザのパスワードをリセット
# 空のパスワードを作成
echo -n "" | md5sum
d41d8cd98f00b204e9800998ecf8427e
# DBName, DBUser, DBPassword, DBHost を確認
sudo less /etc/zabbix/zabbix_server.conf
# mysqlに接続
mysql -u zabbix -p -h 127.0.0.1 zabbix
# ユーザの確認
mysql> select alias from users;
# Adminユーザのパスワードを変更
mysql> update users set passwd = 'd41d8cd98f00b204e9800998ecf8427e' where alias = 'Admin';
memcachedの監視 †
windows上でpowershellを実行する場合 †
windowsのコマンドプロンプトで以下のようにpowershellを許可しても、zabbix_getからだとエラーが出る
powershell Set-ExecutionPolicy RemoteSigned
タイムアウト秒数変更 †
デフォルト3秒なので、実行に時間のかかるアイテムだとタイムアウトする。
server, agentそれぞれに設定がある。ログに出るのでチェック
- zabbix server:/var/log/zabbix/zabbix_server.log
5011:20140816:164601.847 Zabbix agent item [hdd.smart.discovery] on host [win.example.com] failed: first network error, wait for 15 seconds
5014:20140816:164619.180 Zabbix agent item [hdd.smart.discovery] on host [win.example.com] failed: another network error, wait for 15 seconds
- zabbix agent:/var/log/zabbix/zabbix_agentd.log
ユーザグループと権限 †
- 権限はユーザグループに割り当てる
- 1ユーザに複数のユーザグループを割り当て出来るが、read/writeのユーザグループとreadのユーザグループが重複した場合、readが優先される。そのため、read/writeのグループだけをユーザに割り当てる必要がある。
ローレベルディスカバリ LLD(low level discovery) †
HDDやNIC等、1台のPCに同じ種類だが複数台搭載してある機器を自動で取得し、監視に追加できる。
- テンプレートに新規ディスカバリを作成。例:SMART discovery
- 機器の変更ペースに会わせて、期間は長め3600秒程度が良いだろう
- UserParameter.confに台数を取得し、JSONフォーマットで出力するスクリプトを追加
- linuxならawkやperl等のワンライナーで書ける。
- windowsはPowerShellが楽。awk, perlはインストールの手間がちょっと面倒かも。
- UserParameter.confに詳細情報を取得するスクリプトを追加
- エージェント側で値が取得できるかテスト。
zabbix_agentd -t 'hdd.smart.discovery'
zabbix_agentd -t 'hdd.smart[/dev/sda,Power_On_Hours]'
- テンプレートにディスカバリ用アイテム、トリガー、グラフ等を作成
- 名前の最後に「on {#DEVICENAME}」等識別できる情報を追加すると良い
- しばらく待って情報が取得できれば成功
異常時にアラート音を出す †
zabbix-java-gateway: javaプロセスのJMXメトリクス監視 †
- zabbix 3.0: 1ホスト内で複数javaプロセスをjmxで監視する場合の問題
- 同じホストに同一キーは使えない(jmx[])
- テンプレートにポートやインタフェースを定義できない
- ホストに直接アイテムを追加すればインタフェースを変更できるが、同一キーの制限にひっかかる
- そのため、N台のホストに、M個のJMX監視対象があると、N*M個のホストに分割するしかない。
- 複数プロセスのJMX監視について | ZABBIX-JP
log型アイテムのグラフ化 †
log[]やlogrt[]は直接グラフ化できない。
そのため、ログ型アイテムの値を元に、計算型のアイテムを追加する
zabbix-proxy †
- 4 Zabbix プロキシ [Zabbix]
- zabbix-serverの負荷軽減。分散監視。zabbix-serverとホストの距離が離れている場合、同じ場所にzabbix-proxyを構築する事で安定する。
- zabbix-proxyがzabbix-agentのデータを保持しているため、zabbix-severのアップグレード時のデータ欠損を最小にできる。
- 必要プロトコル/ポート
- zabbix-server: TCP/10051 zabbix-proxy/zabbix-agentからの待ち受け。
- zabbix-proxy: TCP/10051 zabbix-agentからの待ち受け。アクティブチェックで使用。
- zabbix-agent: TCP/10050 zabbix-server/zabbix-proxyからの待ち受け。
- /etc/zabbix/zabbix_proxy.conf
Server=<zabbix server ip>
Hostname=zabbix30-proxy # zabbix-serverから名前で引けるようにDNSやhostsに設定する必要あり
ConfigFrequency=300 # zabbix-serverと同期する間隔。デフォルトの1時間は長すぎる
Timeout=3 # デフォルト3秒
DBPassword=********
- Zabbix Proxyホスト上のZabbix Agentの設定
- /etc/zabbix/zabbix_proxy.conf
Server=192.168.1.10 # zabbix-proxyのprivate IP
ListenIP=192.168.1.10 # zabbix-proxyのprivate IP。0.0.0.0としないのは、ホストの自動登録時にIPアドレスが必要なため。
ServerActive=192.168.1.10 # zabbix-proxyのprivate IP
- 管理 > 分散管理 > プロキシの作成
- プロキシ名: (/etc/zabbix/zabbix_proxy.confのHostnameの値) IPではうまくいかなかった。Zabbix Proxyとこの名前で疎通できる必要がある。
- プロキシモード: アクティブ
- ログ
- /var/log/zabbix/zabbix_proxy.log
リモートコマンドでSupport for SSH scripts was not compiled on †
コンパイル時に以下のオプションが必要
--with-libssh2
アラートメールの破棄 †
- ZabbixはDBにアラートメールの送信ステータスを持っているため、postfixを止めても送信される。DBを直接更新する必要があるようだ
- zabbix serverが使用してるメールサーバを停止する
service postfix stop
- zabbix DBのアラート送信ステータスを"送信済み"に変更する。また、alertsテーブルに登録する処理は時間がかかるケースもあるため、しばらく放置して処理が終わるのを待った方が良い。
echo "update alerts set status=1 where status=0;" | mysql -u zabbix -p zabbix
- メールサーバ再開
service postfix start
Zabbix SererのMySQLパスワードの変更 †
以下手順で復帰後もアラートメールは送信されることは無かった
- zabbixサーバを対象にメンテナンス期間を作成
- 各サービス停止
service httpd stop
service zabbix-server stop
service postfix stop
- MySQLパスワード変更
mkpasswd -l 16 > .mysql-root
mkpasswd -l 16 > .mysql-zabbix
mysqladmin -u root -p password $(cat ~/.mysql-root)
echo "SET PASSWORD FOR 'zabbix'@'localhost' = PASSWORD('$(cat ~/.mysql-zabbix)');" | mysql -u root -p$(cat ~/.mysql-root) mysql
- zabbix設定変更
vim /etc/zabbix/zabbix_server.conf
----
DBPassword=****
----
vim /etc/zabbix/web/zabbix.conf.php
----
$DB['PASSWORD'] = '****';
----
- 各サービス再開
service zabbix-server start
service httpd start
service postfix start
グラフ †
Zabbix2.0のデフォルトテンプレートには無いMemoryグラフを追加 †
- 設定 > テンプレート > Template OS Linux > グラフ
- 右上からグラフの作成
- 名前: Memory
- 幅: 600
- 高さ: 340
- グラフのタイプ: ノーマル
- 凡例を表示: チェック
- トリガーを表示: チェック
- Y軸の最大: Total memory
- アイテム
- Template OS Linux: Total memory, 平均, グラフ形式:面, 左, C80000
- Template OS Linux: Available memory, 平均, グラフ形式:面, 左, 00C800
nginxのモニタリング †
パフォーマンスチューニング †
SNMPで監視 †
- Zabbix 2.0.x のテンプレートは複数あるが、以下だけ使えば良い。他はリンクされている
- Template SNMP OS Linux : Linuxだと分かる場合
- Template SNMP OS Windows : Windowsだとわかる場合
- Template SNMP Device : その他SNMP搭載ハードウェア
- デフォルトテンプレート「Template SNMP Device」等を使った場合、1時間経過しないと更新されない
- SNMPデフォルトコミュニティ名: public
- 管理 > 一般設定 > 右上の選択ボックスからマクロ > {$SNMP_COMMUNITY} : public
- 設定 > ホスト > 対象ホストを選択
- マクロタブを選択
- {$SNMP_COMMUNITY} : public
- 保存
TCP/UDP †
Windows †
- Windows Server 2008, Windows7
- SNMP
- Win7 Pro 64bitでSNMP監視を入れると各アプリケーションが数十秒応答なしになる場合があった(うちの場合だけかもしれないが)
- Windows Server 2003 R2
- [HOWTO] Windows Server 2003 で簡易ネットワーク管理プロトコル (SNMP) サービスを構成する方法
- コントロール パネル > 管理ツール > コンピュータの管理
- サービスとアプリケーション > サービス
- 右ウィンドウのSNMP Service
- 全般タブ: スタートアップの種類:自動、サービスの状態が開始になっていない場合は開始
- トラップタブ: コミュニティ名: public > 一覧に追加
- セキュリティタブ: checked: 認証トラップを送信する、受け付けるコミュニティ名: public, 読み取りのみ
- セキュリティタブ: これらのホストからSNMPパケットを受け付ける: 192.168.1.100
Cisco †
NETGEAR †
- NETGEAR ReadyNAS 1xxx 例: 本体: 192.168.1.10, SNMPホスト: 192.168.1.100
BUFFALO †
- BS-xxxxx 法人向けスイッチ 例: 本体: 192.168.1.10, SNMPホスト: 192.168.1.100
- http://192.168.1.10/ > 基本設定 > SNMP設定
- SNMPコミュニティテーブル: Public, GET, SET, TRAP
- SNMPホストテーブル:
- ホスト認証: 有効
- earth, 192.168.1.100, public
- SNMPトラップイベント: Community認証: 有効
YAMAHA †
- RTX1x00(ルーター) 例: 本体: 192.168.1.1, SNMPホスト: 192.168.1.100
SNMPツール †
- 各ベンダのprivate MIBファイルを指定
- 個別指定オプション '-m'
mkdir ~/.snmp
echo -e "mibdirs /usr/share/snmp/mibs\nmibs all" > ~/.snmp/snmp.conf
# 例yamahaルーターのprivate MIB
wget http://www.rtpro.yamaha.co.jp/RT/docs/mib/yamaha-private-mib.tar.gz
tar xvfz yamaha-private-mib.tar.gz
sudo mv yamaha-*.txt /usr/share/snmp/mibs/
# OID to Name
snmptranslate .1.3.6.1.4.1.1182.2.1.6.0
YAMAHA-RT-HARDWARE::yrhCpuUtil1min.0
# private MIBツリー
snmptranslate -Tp YAMAHA-SMI::yamahaRT
+--yamahaRT(2)
|
+--yamahaRTHardware(1)
| |
| +--yamahaRTHardware#(0)
| | |
| | +--yrhMemoryUtilTrap(1)
| | |
| | +--yrhCpuUtilTrap(2)
| | |
| | +--yrhSystemAlarmTrap(3)
| |
| +-- -R-- EnumVal yrhCpuType(1)
| | Values: i386(1), i486(2), pentium(3), sh3(4), msp2000(5), ixp1200(6), ad6846(7), msp2100(8), powerQuick3(9), ixp422(10), cn5010(12), c1000(13), qorIQP2(14)
...
# 特定の値だけ取得 例: yrhCpuType
snmpwalk -v 2c -c public 192.168.1.1 YAMAHA-SMI::yamahaRT.yamahaRTHardware.yrhCpuType
YAMAHA-RT-HARDWARE::yrhCpuType.0 = INTEGER: cn5010(12)
HTTP,HTTPSのWebモニタリング †
Zabbix標準機能として用意されているので簡単。トップページから認証画面を通じるシナリオも作れる。
- アイテムとして取得可能なもの
- 応答時間
- ダウンロード速度(1秒あたり)
- 応答コード
- 失敗したステップ(0:正常)
- 設定 > ウェブ : グループとホストを選択 > シナリオの作成
- ステップタブ > 追加
ステップタブ > 追加 Zabbix3.0ではURL変わったため不要
- アイテムを追加すると、モニタリング > 最新データで値が見える
- トリガーを作成する場合
- ログインページにハッシュ等の文字列が入っており、1回でログインできない場合、2ステップに分ける。
- ログインページ取得
- ユーザID、パスワードを入力
Zabbix2.0で「zabbixサーバが動作していません」 †
ダッシュボードで「zabbixサーバが動作していません」が出続け、「Zabbixサーバーの起動: いいえ」の場合。
認証方法を変えてログインできなくなった時、元に戻す †
ログ中に指定文字列を含む監視設定 †
- zabbix 2.0.6
- 監視したいログファイルに zabbix ユーザで読み取り可能な権限がある事
- ステータスが変化する時にメールが送信される。nodata()=0 条件を加え、指定時間経過後にステータスを変化させる
- 正規表現(例:error|warning)とした場合、nodata(10m)=0としても、"error","warning"が記録された時点でnodata()の条件に一致するため、10分待たずにトリガーが正常に戻る
- 例: /var/log/messages を1分間隔で監視。"error","warning" が発生したらトリガーとする。その後10分間データがなければ解除
- zabbix agent側
sudo gpasswd -a zabbix wheel
sudo chown :wheel /var/log/messages
sudo chmod 640 /var/log/messages
sudo service zabbix-agent restart
- zabbix server アイテム設定
タイプ: Zabbixエージェント(アクティブ)
キー: log[/var/log/messages,error|warning]
データ型: ログ
更新間隔(秒): 60
- zabbix server トリガー設定
条件式: ({host1:log[/var/log/messages,error|warning].iregexp(error|warning)}=1)
&({host1:log[/var/log/messages,error|warning].nodata(600)}=0)
障害イベントを継続して生成: 未チェック
深刻度: 警告 (適切に)
- テスト
logger error
logger warning
- 指定文字列を除外する場合。例:"test","debug"が入ってる場合は除外する
条件式: ({host1:log[/var/log/messages,error|warning].iregexp(error|warning)}=1)
&({host1:log[/var/log/messages,error|warning].iregexp(test|debug)}=0)
&({host1:log[/var/log/messages,error|warning].nodata(600)}=0)
- 発生回数を考慮する場合: 1時間に5回以上errorが出た時
条件式: ({host1:log[/var/log/messages,error|warning].count(1h,"error","like")}>4)
&({host1:log[/var/log/messages,error].nodata(600)}=0)
discoveryグラフが表示されない場合 †
1.8から2.0へアップグレードした場合、discoveryグラフが表示されないので調べた。
- 管理 > 一般設定 > 正規表現 に以下が設定されているか? 1.8 から2.0へのアップグレードだと手動設定の必要があった
- 名前 File systems for discovery
- 名前 Network interfaces for discovery
- 名前 Storage devices for SNMP discovery
- ホストのテンプレートチェック
- Template OS Linuxがリンクされ、ディスカバリに"Mounted filesystem discovery"が設定されており、有効になっているか?無効ならクリックして有効に変える
- zabbix サーバログにエラーが出ていないかチェック
- /var/log/zabbix/zabbix_server.log
日本語環境でグラフの文字化けを修正 †
zabbix 2.0.6 で プロファイルから言語を日本語(ja_JP)にしているとグラフの文字化けが起きるので修正。

- 環境
- CentOS 5.8 x86_64 / CentOS 6.3 x86_64
- PHP 5.4.17 / php 5.3.3
- Zabbix 2.0.6 (yumでインストール)
- IPAフォント
yum -y install ipa-pgothic-fonts.noarch
ls -lh /usr/share/fonts/ipa-pgothic/
total 6.0M
-rw-r--r-- 1 root root 6.0M Nov 11 2009 ipagp.ttf
- CentOS 6.xの場合、defines.inc.php中のZBX_FONTPATHを変更するとグラフ横軸の時刻が表示されなくなるため、シンボリックリンクで対応
ln -s /usr/share/fonts/ipa-pgothic/ipagp.ttf /usr/share/fonts/dejavu/ipagp.ttf

- zabbix側の設定変更
vim /usr/share/zabbix/include/defines.inc.php
----
// CentOS6.x
define('ZBX_FONTPATH', '/usr/share/fonts/dejavu');
define('ZBX_GRAPH_FONT_NAME', 'ipagp'); // default: DejaVuSans
// CentOS5.x
define('ZBX_FONTPATH', '/usr/share/fonts/ipa-pgothic'); // default: /usr/share/fonts/dejavu
define('ZBX_GRAPH_FONT_NAME', 'ipagp'); // default: DejaVuSans
----

userparameter:ユーザパラメータで任意の項目を監視 †
zabbix agent側の設定ファイルに追加する事で、任意のコマンドを実行して値を取得できる。
- ファイルの存在を初めにチェックした方が良い。ファイルが存在しない場合はアイテムが「取得不可」になり、DBの使用量やモニタリング対象のアイテムが減る。特に監視間隔が短いアイテムだと影響が大きい
# log.count[<file path>,<last lines>,<include>]
UserParameter=log.count[*],[ -f "$1" ] && tail -n "$2" "$1" | grep "$3" -c
- 一度取得不可になったアイテムも、zabbix_serverが数分後にポーリングするようで、その時に取得可能になれば復活する。よって失敗の場合は空白("")、成功の場合は値を返せば良さそうだ。
- デフォルトではzabbix ユーザで実行されるため、permissionがあるものに限られる。もしくはzabbixユーザをグループに追加したり、sudoを使えるように設定する
- agent自体をrootユーザで実行したい場合
vim /etc/zabbix/zabbix_agentd.conf
----
AllowRoot=1
----
- コマンド1行で指定出来るものは単体で実行可能
vim /etc/zabbix/zabbix_agentd.d/userparameter_example_monitor.conf
----
UserParameter=key,command
----
# テスト
sudo -u zabbix zabbix_agentd -t "key"
- パラメータ"*"を指定できる。それぞれ$1, $2として取得可能
UserParameter=wc[*],cat $1 | wc -l
# テスト
sudo -u zabbix zabbix_agentd -t "wc[/tmp/test]"
- 複数行になるような複雑なコマンドは別スクリプトに書いて、指定
- awk等コマンド内で'$'を使う場合は、エスケープ('$$' または '$ 1')が必要。ただし、パラメータを受け取る必要が無い(UserParameter=command)場合は不要
UserParameter=sum[*],cat $1 | awk '{sum+=$$1} END {print sum}'
# テスト
sudo -u zabbix zabbix_agentd -t "sum[/tmp/test]"
- awk等コマンド内で任意のパラメータ番号を指定する場合は '$$$1' のように書く
echo "100 200 300" > /tmp/test
UserParameter=test[*],cat /tmp/test | awk '{print $$$1}'
# テスト
sudo -u zabbix zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf -t 'test[2]'
...
[t|200]
NTPのoffset/delay等を取得 †
- 時刻のずれを検出するのに fuzzytime()関数もあり、Template OS Linux にトリガーを追加するだけで利用できる。
- 名前: Local time is not in sync on {HOST.NAME}
- 条件式: {Template OS Linux:system.localtime.fuzzytime(300)}=0
- 深刻度: 重度の障害
- ntpqを使う
- 同期済みサーバ(*)マークのついたntp行から取得する
- 実行例
ntpq -pn 127.0.0.1
remote refid st t when poll reach delay offset jitter
==============================================================================
*133.243.238.164 .NICT. 1 u 178 1024 377 4.835 29.296 6.560
+210.173.160.57 172.29.1.50 2 u 191 1024 377 2.600 28.339 6.392
133.243.237.36 .INIT. 16 u - 1024 0 0.000 0.000 0.000
# delay取得
zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf -t 'ntp[127.0.0.1,8]'
ntp[ntpq -pn 127.0.0.1 | grep -P '^\*' | awk '{print $8}'] [t|4.835]
# offset取得
zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf -t 'ntp[127.0.0.1,9]'
ntp[ntpq -pn 127.0.0.1 | grep -P '^\*' | awk '{print $9}'] [t|29.296]
HDDのS.M.A.R.T.情報を取得 †
- smartctlを監視対象のHDDのホストにインストール
- /etc/zabbix/zabbix_agentd.d/userparameter_app_smart.conf
# SMART HDD Monitoring discovery. Parameter: hdd.smart.discovery
UserParameter=hdd.smart.discovery,sudo smartctl --scan | awk 'BEGIN {f=1;print "{\"data\":["} {if(!f){print ","};f=0;gsub(/\//,"\\/",$1);print "{ \"{#DEVICENAME}\":\""$1"\",\"{#DEVICETYPE}\":\""$3"\" }"} END {print "]}"}'
# SMART HDD Monitoring. Parameter: hdd.smart[<device name>,<smartctl attribute name>]
UserParameter=hdd.smart[*],sudo smartctl -A $1 | awk '{if($$2 == "$2") print $$10;}'
- zabbix template
- SMART情報取得スクリプト
- S.M.A.R.T. Monitoring Tools から smartmontools-6.2-1.win32-setup.exe をダウンロードしてインストール
- 試しに手動で実行して、情報を取得できるかテスト
"C:\Program Files\smartmontools\bin\smartctl" --scan
/dev/sda -d ata # /dev/sda, ATA device
/dev/sdb -d ata # /dev/sdb, ATA device
"C:\Program Files\smartmontools\bin\smartctl.exe" -A /dev/sda
- PowerShellが実行できるようにコマンドプロンプト(cmd.exe)から許可する
powershell Set-ExecutionPolicy RemoteSigned
- C:\zabbix\smart-win.ps1 を配置
- 取得(特に--scan)に時間がかかるのでzabbix agentdのタイムアウトを延長
- C:\zabbix\zabbix_agentd.conf
Timeout=10
Include=c:\zabbix\zabbix_agentd.userparams.conf
- C:\zabbix\zabbix_agentd.userparams.conf
# SMART HDD Monitoring discovery. Parameter: hdd.smart.discovery
UserParameter=hdd.smart.discovery,powershell -ExecutionPolicy ByPass C:\zabbix\smart-win.ps1 discovery
# SMART HDD Monitoring. Parameter: hdd.smart[<device name>,<smartctl attribute name>]
UserParameter=hdd.smart[*],powershell -ExecutionPolicy ByPass C:\zabbix\smart-win.ps1 get $1 $2
- zabbix agentd再起動
zabbix_agentd.exe --config C:\zabbix\zabbix_agentd.conf --stop
zabbix_agentd.exe --config C:\zabbix\zabbix_agentd.conf --start
プロセスの経過時間を取得 †
- 同じ条件に複数プロセスがある場合、初めの1つめの値を取得する。よって、一つに絞り込むように条件を指定する
- プロセス名は15文字までを指定する。
- プロセス名、ユーザ名だけで絞りきれない場合、<cmdline>にコマンド実行時の引数等を指定して絞り込む
- /etc/zabbix/zabbix_agentd.d/userparameter_e .mysql-zabbix
mysqladmin -u root -p password $(cat ~/.mysql-root)
echo xample.conf
# elapsed time by process. Parameter: process.etime[<process name>,<user>,<cmdline>]
UserParameter=process.etime[*],ps -eo comm,user:32,etime,args h | grep -P "^$1\s+$2" | grep -P "$3" | head -n 1 | perl -ane '@t=reverse split(/[:-]/,$F[2]); $s=$t[0]+$t[1]*60+$t[2]*3600+$t[3]*86400; print $s;'
- 例: hogeユーザでcronで動作する「example.sh param1 param2」の実行時間を取得
- zabbixアイテム
- 名前: Elapsed time by process
- タイプ: Zabbixエージェント
- キー: process.etime[example.sh,hoge,param1]
- データ形式: 10進数
- 単位: s
nginxのアクセスログから指定HTTP Status Codeの件数 †
- /etc/zabbix/zabbix_agentd.d/userparameter_example.conf
# nginx.log.status.count[<file path>,<last lines>,<http status code>,<include>,<exclude>]
UserParameter=nginx.log.status.count[*],[ -f "$1" ] && tail -n "$2" "$1" | grep -v "$5" | grep "$4" | grep "$(LANG=C date '+%d/%b/%Y:%H:%M' -d '1 min ago')" | awk -F' ' '{print $$9}' | grep -P "$3\d+" | wc -l
- Zabbix Item: 更新間隔(秒): 60
- 1分間の総件数: nginx.log.status.count[/var/log/nginx/access.log,10000,,,DUMMY]
- 1分間のHTTP Status 5XX、/index.htmlを含む、testを除外した件数: nginx.log.status.count[/var/log/nginx/access.log,10000,5,/index.html,test]
プロセス毎のRSS(物理メモリ使用量) †
# Real memory(KB) by process. Parameter: process.rss[<process name>,<user>]
UserParameter=process.rss[*],ps -eo comm,user,rss h | grep -P "$1\s+$2\s+" | awk 'BEGIN {sum=0} {sum+=$$3} END {print sum}'
# テスト
sudo -u zabbix zabbix_agentd -t "process.rss[httpd,apache]"
プロセス毎の%CPU †
- topを使う。topで長いユーザ名だと省略されるのでtop -uオプションで指定している。
# %CPU by process. Parameter: process.pcpu[<process name>,<user>]
UserParameter=process.pcpu[*],top -b -d1 -n1 -u "$2" 2>/dev/null | perl -ne 'BEGIN { $sum=0; } if($. > 7) { $_ =~ s/^\s+//g; @l=split(/\s+/, $_); if($l[11] =~ m#$1#){ $sum+=$l[8]; } } END { print $sum; }'
# テスト
sudo -u zabbix zabbix_agentd -t "process.pcpu[httpd,apache]"
- psを使う。※デュアルコア以上だと値が異常
# %CPU by process. Parameter: process.pcpu[<process name>,<user>]
UserParameter=process.pcpu[*],ps -eo comm,user,pcpu h | grep -P "$1\s+$2" | awk '{sum+=$$3} END {print sum}'
パスワードの初期化 †
LDAP認証 †
sudo yum install php-ldap openldap-clients
- Zabbix 2.0 > 管理 > 認証
- デフォルトの認証: LDAP
- LDAPホスト: ldaps://ldap.example.com:636
- ポート: 0
- Base DN: ou=users,dc=example,dc=com
- 検索の属性: uid
- Bind DN: cn=connector,ou=administration,dc=example,dc=com
- Bind Password: ****
- LDAP認証に失敗する場合のチェックポイント
- ldapコマンドで接続できるか確認
ldapsearch -x -b 'dc=my-domain,dc=com' '(uid=hoge)' \
-H ldaps://localhost:636 \
-D "cn=Manager,dc=my-domain,dc=com" \
-W
- phpでldap, ldapsをサポートしているか確認
php -i | grep -i ldap
- Zabbix 2.0.13で「ldap_bind(): Unable to bind to server: Can't contact LDAP server...」
- 標準ポートではない時は、ホスト側にポートを指定(ldaps://ldap.example.com:636)し、ポート(0)にすると接続できた。
日本語入力の文字化けの解消 †
障害対応のコメント等で日本語を入力すると"?"に化けてしまう場合、インストール時にDBの文字コードの設定が"latin1"になっているので"utf8"に変更する
- MySQL 5.1のデフォルト文字コードを変更
vim /etc/my.cnf
----
[mysqld]
skip-character-set-client-handshake
character-set-server=utf8
# init-connect="SET NAMES utf8"
default-table-type=InnoDB
[mysql]
default-character-set=utf8
[client]
default-character-set=utf8
[mysqldump]
default-character-set=utf8
----
service mysqld restart
- zabbix mysqlの文字コードをutf8に変更
cat > zabbix-modify-mysql-charset-utf8.sql << EOS
alter database zabbix default character set utf8;
alter table zabbix.acknowledges charset=utf8;
alter table zabbix.actions charset=utf8;
alter table zabbix.alerts charset=utf8;
alter table zabbix.applications charset=utf8;
alter table zabbix.auditlog charset=utf8;
alter table zabbix.auditlog_details charset=utf8;
alter table zabbix.autoreg_host charset=utf8;
alter table zabbix.conditions charset=utf8;
alter table zabbix.config charset=utf8;
alter table zabbix.dchecks charset=utf8;
alter table zabbix.dhosts charset=utf8;
alter table zabbix.drules charset=utf8;
alter table zabbix.dservices charset=utf8;
alter table zabbix.escalations charset=utf8;
alter table zabbix.events charset=utf8;
alter table zabbix.expressions charset=utf8;
alter table zabbix.functions charset=utf8;
alter table zabbix.globalmacro charset=utf8;
alter table zabbix.graph_theme charset=utf8;
alter table zabbix.graphs charset=utf8;
alter table zabbix.graphs_items charset=utf8;
alter table zabbix.groups charset=utf8;
alter table zabbix.help_items charset=utf8;
alter table zabbix.history charset=utf8;
alter table zabbix.history_log charset=utf8;
alter table zabbix.history_str charset=utf8;
alter table zabbix.history_str_sync charset=utf8;
alter table zabbix.history_sync charset=utf8;
alter table zabbix.history_text charset=utf8;
alter table zabbix.history_uint charset=utf8;
alter table zabbix.history_uint_sync charset=utf8;
alter table zabbix.hostmacro charset=utf8;
alter table zabbix.hosts charset=utf8;
alter table zabbix.hosts_groups charset=utf8;
alter table zabbix.hosts_profiles charset=utf8;
alter table zabbix.hosts_profiles_ext charset=utf8;
alter table zabbix.hosts_templates charset=utf8;
alter table zabbix.housekeeper charset=utf8;
alter table zabbix.httpstep charset=utf8;
alter table zabbix.httpstepitem charset=utf8;
alter table zabbix.httptest charset=utf8;
alter table zabbix.httptestitem charset=utf8;
alter table zabbix.ids charset=utf8;
alter table zabbix.images charset=utf8;
alter table zabbix.items charset=utf8;
alter table zabbix.items_applications charset=utf8;
alter table zabbix.maintenances charset=utf8;
alter table zabbix.maintenances_groups charset=utf8;
alter table zabbix.maintenances_hosts charset=utf8;
alter table zabbix.maintenances_windows charset=utf8;
alter table zabbix.mappings charset=utf8;
alter table zabbix.media charset=utf8;
alter table zabbix.media_type charset=utf8;
alter table zabbix.node_cksum charset=utf8;
alter table zabbix.nodes charset=utf8;
alter table zabbix.opconditions charset=utf8;
alter table zabbix.operations charset=utf8;
alter table zabbix.opmediatypes charset=utf8;
alter table zabbix.profiles charset=utf8;
alter table zabbix.proxy_autoreg_host charset=utf8;
alter table zabbix.proxy_dhistory charset=utf8;
alter table zabbix.proxy_history charset=utf8;
alter table zabbix.regexps charset=utf8;
alter table zabbix.rights charset=utf8;
alter table zabbix.screens charset=utf8;
alter table zabbix.screens_items charset=utf8;
alter table zabbix.scripts charset=utf8;
alter table zabbix.service_alarms charset=utf8;
alter table zabbix.services charset=utf8;
alter table zabbix.services_links charset=utf8;
alter table zabbix.services_times charset=utf8;
alter table zabbix.sessions charset=utf8;
alter table zabbix.slides charset=utf8;
alter table zabbix.slideshows charset=utf8;
alter table zabbix.sysmaps charset=utf8;
alter table zabbix.sysmaps_elements charset=utf8;
alter table zabbix.sysmaps_link_triggers charset=utf8;
alter table zabbix.sysmaps_links charset=utf8;
alter table zabbix.timeperiods charset=utf8;
alter table zabbix.trends charset=utf8;
alter table zabbix.trends_uint charset=utf8;
alter table zabbix.trigger_depends charset=utf8;
alter table zabbix.triggers charset=utf8;
alter table zabbix.user_history charset=utf8;
alter table zabbix.users charset=utf8;
alter table zabbix.users_groups charset=utf8;
alter table zabbix.usrgrp charset=utf8;
alter table zabbix.valuemaps charset=utf8;
EOS
cat zabbix-modify-mysql-charset-utf8.sql | mysql -u root zabbix
# 確認
echo "show variables like 'character_set_%';" | mysql -u root zabbix
Variable_name Value
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server utf8
character_set_system utf8
echo "show create table zabbix.valuemaps;" | mysql -u root zabbix
Table Create Table
valuemaps CREATE TABLE `valuemaps` (\n `valuemapid` bigint(20) unsigned NOT NULL DEFAULT '0',\n `name` varchar(64) CHARACTER SET latin1 NOT NULL DEFAULT '',\n PRIMARY KEY (`valuemapid`),\n KEY `valuemaps_1` (`name`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8
マクロ †
使える箇所と使えない箇所がある。またバージョンによっても異なる
アイテム †
監視対象を設定する
- 例:java tomcatプロセスのメモリ使用量(VSZ:仮想メモリ)。javaはプロセス名が同じで、ユーザやパラメータが異なるのでそれを指定する。
proc.mem[java,user1]
- 例:httpdプロセスのメモリ使用量(VSZ:仮想メモリ), RSS:物理メモリ はv1.8のアイテムでは取れないようだ
proc.mem[httpd]
- 例:httpdプロセスの数
proc.num[httpd]
- 例:rubyで動いているtd-agent(fluentd), puppet
zabbix_agentd -t 'proc.num[ruby,,,td-agent]'
proc.num[ruby,,,td-agent] [u|2]
# td-agentが停止している場合に0を返して欲しい時、以下はNOT_SUPPORTEDになり値が取れない。
zabbix_agentd -t 'proc.num[ruby,td-agent]'
テンプレートを変更した場合 †
- キーがテンプレート変更前と同じなら、テンプレートを変更しても、データは引き継がれる。同一ホストに同じキーが存在するとエラーになる。
- 例:"Template test1"をホストから削除、"Template test2"を追加した場合、データは引き継がれる
- Template test1
- Template test2
ゾンビ/スリーププロセスの数 †
DenyHostsの件数を監視 †
- DenyHosts はssh等で指定した回数ログインに失敗したIPを /etc/hosts.deny に記録する。これを監視に入れたい。
vm.memory.size †
ログ監視 †
ホストの登録でDNS名が64文字までしか使えない †
AWS RDSのDNSを入力しようとして発覚
- Zabbix 1.8.13, 2.0.13, 3.0.6 で確認
- Configuration > Hosts > Crete Host > DNS nameに64文字しか登録できない。それ以上入力しても、後ろの文字が切断される
- 対処:DNSで64文字以下のCNAMEを付ける
External checks/外部チェック †
Zabbix server/proxy上で外部スクリプトを実行して結果をZabbixに取り込める
用語 †
- ITサービス
- 監視項目単位でグループを作成し、稼働率(SLA)を算出できる。apache+mysqlで可動してるサービスを登録し、サービス全体としての稼働率を計算してくれる。
- ディスカバリ
- 指定したIPアドレス範囲(192.168.1.1〜255)を一定時間毎に探索し、自動的に監視対象に追加したり、その他アクションをとる事ができる
- ホストの自動登録
- zabbix-agentのアクティブチェックを利用して、一定条件を満たすzabbix-agentから受信した場合にzabbix-serverに自動登録できる
- アクション
- 障害発生時や復旧時に実行する動作設定。トリガーステータスが変化しイベントが生成された時に、管理者へ通知、自動復旧、特定スクリプトの実行等できる
- WEB監視
- HTTP/HTTPSを使ってWebページが正常に表示できるかチェックできる。basic認証、POST変数、ステータスコード等を指定可能。ログイン可能かをチェックもできる。
- IPMI
- Intelligent Platform Management Interface。SNMPやDMI等のサーバー管理ソフトウェアが、特定のハードウェアシステムやOSに依存することなく、サーバーハードウェアをモニタ可能にするための標準インターフェイス仕様
- Discovered hosts
- 検出されたホスト
- アイテム
- 監視項目
- アプリケーション
- アイテムをグループ化する機能
- ヒストリ
- 収集した生データが保存されている期間。デフォルト90日
- トレンド
- 収集したデータのうち、グラフ表示用に30分の最小/平均/最大/個数を保存する期間。デフォルト365日
- 監視タイプ
- Zabbixエージェント
- zabbix-serverからzabbix-agentにリクエストを投げて、データを取得する。デフォルト
- Zabbixエージェント(アクティブ)
- zabbix-agentからzabbix-serverにリクエストを投げる。スタンドアロンのみで、xinetd経由では利用できない。
- シンプルチェック
- zabbix-agentなしで監視可能。ping, ポートチェック
- SNMP v1/v2/v3エージェント
- zabbix-serverからSNMP機器へリクエストが投げられる
- Zabbixトラッパー
- zabbix-agentに付属するzabbix_senderを用いてzabbix-serverへ送信する。手動やスクリプトに組み込んで実行する。
- Zabbixインターナル
- zabbix-server内部のアイテムやトリガー数、監視キュー等の監視
- Zabbixアグリゲート
- 同じホストグループに属するホストの同じキーを持つアイテムを集計し、平均/最大を計算できる。zabbix-serverのDBのみを参照するためagentと通信しない
- 外部チェック
- zabbix-server上に置いたスクリプトを実行し、結果を取得する。
vi /etc/zabbix/zabbix_server.conf
----
ExternalScripts=/usr/lib/zabbix/externalscripts
----
- データベースモニタ
- zabbix-serverからunixODBC,iODBCを利用してDBサーバにSQLクエリを発行し、結果を取得する
- IPMIエージェント
- zabbix-serverからIPMIを利用してハードウェアのステータスを取得する
- SSHエージェント
- zabbix-serverからSSHサーバへログインしてコマンドを実行し、結果を取得。公開鍵認証の場合は公開鍵/秘密鍵のパスをzabbix_server.confに記載。
vi /etc/zabbix/zabbix_server.conf
----
SSHKeyLocation=/etc/zabbix/sshkeys
----
- TELNETエージェント
- zabbix-serverからtelnetサーバへログインしてコマンドを実行し、結果を取得。
ホストの自動登録 †
例としてLinuxサーバをzabbix-serverに自動登録する。
zabbix-agentのHostnameに"agent"が含まれる場合に、1.ホスト追加, 2."Linux servers"グループに追加, 3. "Template OS Linux"テンプレートを追加
- zabbix-agent側
- アクティブチェックを有効にしておく
- zabbix_agentd.conf で Hostname を"linux agent 02"等に変えておく
- zabbix-server側
- 10051/tcpポートを開放
- 設定 > アクション > 右上のイベントソース:自動登録 > アクションの作成
- アクションタブ:
- 名前:Linuxサーバの自動登録
- デフォルト件名:デフォルト
- デフォルトのメッセージ:デフォルト
- アクションの実行条件タブ:
- "ホスト名" + "含まれる" + "agent" > 追加
- アクションの実行内容
- ホストを追加
- ホストグループに追加: Linux servers
- テンプレートとリンク: Template OS Linux
- 保存
バックアップ/リストア †
- DBが更新されないようにサービス停止
sudo service zabbix-server stop
sudo service httpd stop
- 設定ファイル。/etc/zabbix以下がsymlinkの事もある(EPEL版)のため、hオプションを付けてバックアップ
tar cfzh zabbix.conf.$(date +%Y%m%d).tar.gz /etc/zabbix/
- mysqlバックアップ
mysqldump -u root --opt --single-transaction --default-character-set=utf8 --database zabbix | gzip > zabbix.mysql.`date +%Y%m%d`.gz
メンテナンス †
- ホストやホストグループのメンテナンスのため、一時的にアラートメール等を止める
- メンテナンス(左上)
- 名前: 適当
- メンテナンスタイプ: データ収集あり
- 開始日時: この設定が有効な期間
- 終了日時: この設定が有効な期間
- メンテナンス期間(左下) ※これを設定しないと機能しない
- 期間のタイプ:一度限り
- 日付: メンテナンス開始日時
- メンテナンス期間: メンテナンスに費やす日時
- zabbiz-server自体のwebインタフェースをメンテナンスモードにする
メンテナンス時にアラートメールを送信しないようにするには †
デフォルトではメンテナンス期間を作成してもアラートメールが送信される。
- 設定 > アクション > アクションを選択
- and条件の時には、コンディションに 「メンテナンスの状態」「期間外」を追加する
トラブル対応 †
- アクションが実行されない時
- 対象ホストにアクセスできる権限(読み取り専用以上)が管理 > ユーザ > ユーザグループに付与されている必要がある。ユーザがグループに入る必要がある。
- zabbix_getで値が0になり, zabbix_agentdでは値が取得できる場合。Permission deniedになっていないかzabbixユーザでzabbix_agentdを実行して確かめる。
- zabbix_get, zabbix_agentd実行時に"ZBX_NOTSUPPORTED"が発生する場合
- アクセスするファイルへのパーミッションが無い。zabbixユーザがアクセスできるファイルに限られる。もしくは zabbix_agentd.conf で "AllowRoot=1" にする
- zabbix_get -k の値と zabbix_agentd.d/userparameter_*.confで指定されたキー名が一致しない
- [zabbix1.8?] zabbix_agentd.d/userparameter_*.conf 中でパイプ"|"を使っているコマンドの前後にスペースが入っている
- zabbix-agentから取得できるか確認。rootユーザとzabbixユーザで結果が異なるので注意。
sudo -u zabbix zabbix_agentd -t "キー"
例:loadを取得
sudo -u zabbix zabbix_agentd -t "system.cpu.load[,avg1]"
見積もり †
- linux
# OS,アーキテクチャ
uname -a
# ディストリビューションの確認
# RedHat, CentOS
cat /etc/redhat-release
# Debian
cat /etc/debian_version
# Ubuntu
cat /etc/lsb-release
# CPU
cat /proc/cpuinfo
# ネットワーク
ifconfig -a
# メモリ
free -m
# ディスク
df -h
# プロセス
ps -ef
# プロセスツリー
pstree -p
# ネットワークポート
netstat -anp | grep LISTEN | grep tcp
管理 > メディアタイプ > スクリプト †
トリガー発生時にメールを飛ばすように、zabbix-server上のスクリプトを実行できる
日本語アラートスクリプト †
アクション †
リモートコマンド †
ワンライナーで取得できる値を簡単に取り込める
- zabbix-server
- 設定 > アクション > アクションの実行内容 > 実行内容のタイプ:リモードコマンド
トリガー †
- トリガーステータス
- 障害:条件式が真
- 正常:条件式が偽
- 不明:ホストが"不明"や、アイテムが"取得不可"、トリガー条件式が評価できない場合
- WEB 80/tcpポート開放チェック
{host1:http.last(0)}=0
- ログに特定の文字列が含まれていたら検知。例:/var/log/messageに"error"が含まれていた場合。正規表現はregexp()
指定時間対のトリガーを無効にする †
- Zabbix2.4の場合は、「|」「&」の代わりに「or」「and」を使う
- 例: 04:00-05:00の「Processor load is too high on {HOST.NAME}」を無効にする
({Template OS Linux:system.cpu.load[percpu,avg1].last(0)}>5) & (({Template OS Linux:system.cpu.load[percpu,avg1].time(0)}<040000) | ({Template OS Linux:system.cpu.load[percpu,avg1].time(0)}>050000))
単位記号 †
アイテムキーやトリガー内で、桁が大きい数値を「K, M, G, T」を使って分かりやすく記述できる
トリガーでホスト名を条件にいれる †
- やりたい事
- 複数ホストに同一テンプレートを指定するが、トリガーでホスト名を条件にいれたい。
- できなかった事
- 複数のテンプレートを跨いだトリガーの作成。(ホストに直接トリガーを設定すれば可能だが、保守性が悪い)
- {HOST.NAME}をトリガーの条件式で使う
- {Template OS Linux:system.hostname.iregexp(web01)}=1 を Template OS Linux 以外のテンプレートで使う
- 例:「batch01.result nodata >= 25h」のトリガーの条件に Hostname:web01を含む条件をいれる
- Hosts: web01, web02, db01, db02がある
- Template: Template My Linux
- Item: my.hostname
- タイプ: Zabbixエージェント
- キー: system.hostname[host]
(system.hostnameは Template OS Linuxと重複するため別名を使う。[type]はWindows以外は無視される)
- 更新間隔(秒): 3600
- ヒストリの保存期間: 1
- Item: batch01.result
- タイプ: Zabbixトラッパー
- キー: batch01.result
- ヒストリの保存期間: 7
- Trigger: batch01.result nodata >= 25h
ユーザの追加 †
- Zabbix2.x
- ユーザの種類「Zabbix特権管理者」のみ「管理タブ」が表示される
- 管理 > ユーザ
- 右上のセレクトボックスで「ユーザ」に切り替え
- エイリアス「Admin」がデフォルトユーザなのでパスワードを変更しておく
- 右上の「ユーザの追加」で追加可能
- 「権限」タブで「ユーザ」「管理者」「特権管理者」と選択ができる
- 保存
通知用のメール設定 †
- 管理 > メディアタイプ > Email
- SMTPサーバ: localhost
- SMTP helo: localhost
- 送信元メールアドレス: zabbix@localhost
- 有効:チェック
- 保存
- 設定 > アクション > Report problems to Zabbix administrators
|
|