【Linux】【Zabbix】 Zabbix 3.0 トラブルとその対策【SW】

基本方針
Zabbix の動作不良の原因は多岐に渡るため、解決方法は1つでは無いため、FAQ 形式にすることができない。
解決するためには、Zabbix のログや通信状況を見て原因の切り分けをする必要がある。
 

 

切り分け方法

Zabbix Agent 側の確認項目

 

ログを確認する
種別 デフォルトログ ログファイルの定義箇所
サーバログ /var/log/zabbix-server/zabbix_server.log /etc/zabbix/zabbix_server.conf の LogFile= で定義している

 

zabbix-agent サービスの稼動確認をする

Systemd システムでは、systemctl コマンドを使って zabbix-agent.service の稼働状況を確認する。

% systemctl list-units |grep -i agent
zabbix-agent.service                                      loaded active running   Zabbix Agent 

 

zabbix_agentd の動作確認をする

Agent が動作するかを zabbix_agentd コマンドを使って確認する。

% zabbix_agentd -t "system.cpu.load[all,avg1]"
system.cpu.load[all,avg1]                     [d|0.920000]

 

/etc/zabbix/zabbix_agentd.conf の基本項目の設定漏れが無いかを確認する

現段階で設定間違いを見つけることは難しいが、最低限の設定項目は把握しておく。

% sed -e '/^$/d' -e '/^#/d' /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix-agent/zabbix_agentd.log
LogFileSize=0
Server=127.0.0.1
ListenIP=0.0.0.0
ServerActive=127.0.0.1
Hostname=localhost
Include=/etc/zabbix/zabbix_agentd.conf.d/*.conf

 

zabbix_agentd の再起動をする

エージェントの設定を変更したら再起動する。

% sudo systemctl restart zabbix-agent

 
 
 


Zabbix Server 側の確認項目

 

ログを確認する
種別 デフォルトログ ログファイルの定義箇所
エージェントログ /var/log/zabbix-agent/zabbix_agentd.log /etc/zabbix/zabbix_agentd.conf の LogFile= で定義している

 

zabbix-server サービスの稼動確認をする

Systemd システムでは、systemctl コマンドを使って zabbix-server.service の稼働状況を確認する。

% systemctl list-units |grep -i server | grep -i zabbix
zabbix-server.service                                     loaded active running   Zabbix Server (MySQL/MariaDB)   

 

zabbix_get を使ってエージェントに対して通信ができていることを確認する
sudo zabbix_get -s 127.0.0.1 -k agent.version
3.0.12

zabbix_server.conf の設定誤りによる不通時は次のようなログが出たことがあった。

zabbix_get [3958]: Check access restrictions in Zabbix agent configuration

 

/etc/zabbix/zabbix_server.conf の基本項目の設定漏れが無いかを確認する

現段階で設定間違いを見つけることは難しいが、最低限の設定項目は把握しておく。

% sed -e '/^$/d' -e '/^#/d' /etc/zabbix/zabbix_server.conf 
LogFile=/var/log/zabbix-server/zabbix_server.log
PidFile=/var/run/zabbix/zabbix_server.pid
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
Timeout=4
AlertScriptsPath=/etc/zabbix/alert.d/
FpingLocation=/usr/bin/fping
LogSlowQueries=3000
Include=/etc/zabbix/zabbix_server.conf.d/*.conf

 

zabbix-server の再起動をする
sudo systemctl restart zabbix-server

 
 
 

トラブル例

サーバとエージェントが同一マシンだが、「エージェントの状態」を見ると赤色でエラーになっている

現象としては以下であった。

  • サーバを 127.0.0.1 にするとエージェントが正常動作する
  • サーバを 192.168.10.72 にするとエージェントがエラーになる

 
また、エージェント側のログには次のようなエラーメッセージが出ていた。

  7157:20181111:121811.800 failed to accept an incoming connection: connection from "192.168.10.72" rejected, allowed hosts: "127.0.0.1"

 
原因はエージェント側の /etc/zabbix/zabbix_agentd.conf でサーバの IP アドレス定義が 127.0.0.1 になっていたためであった。
次のように変更することで サーバを 192.168.10.72 として指定しても動作するように切り替えができた。

/etc/zabbix/zabbix_agentd.confl

#Server=127.0.0.1
Server=192.168.10.72

 
 

シナリオを作成しようとすると SQL のエラーが出てしまい失敗した

エラー内容は以下である

詳細
作成: "A_Template_WEB_Check"のアプリケーション"Web_checks"。
Error in query [INSERT INTO auditlog (userid,clock,ip,action,resourcetype,details,auditid) VALUES ('1','1541908896','::1','0','12','アプリケーション [Web_checks] [470]','33')] [Incorrect string value: '\xE3\x82\xA2\xE3\x83\x97...' for column 'details' at row 1]

 
mysqlで文字コードをutf8にセットする - Qiita を参考に直す。
 

% sudo mysql -uroot -pmysql
mysql> show variables like "chara%";

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.04 sec)

 

/etc/my.cnf は存在しないものの、以下にテンプレートらしきものが存在していた。
ただ、 my.cnf を編集し、色々と配置をしてみたが、文字コードが切り替わらなかったため、直接 etc/mysql/mysql.conf.d/mysqld.cnf に次のように定義した。
/etc/mysql/mysql.conf.d/mysqld.cnf

@@ -103,3 +103,8 @@
 # ssl-ca=/etc/mysql/cacert.pem
 # ssl-cert=/etc/mysql/server-cert.pem
 # ssl-key=/etc/mysql/server-key.pem
+character-set-server=utf8
+
+[client]
+default-character-set=utf8

 

% sudo systemctl restart mysql

 
 

レポートのグラフ表示時に日本語の文字化け (いわゆる「豆腐」状態になる) してしまう

 
グラフ表示した画面では日本語文字が □□ という表示 (いわゆる豆腐状態)になっている。
解消のためには以下のように実行する。(以下の対応後は Zabbix の再起動は不要である)

ipa フォントをインストールする

% sudo apt-get install -y fonts-ipafont-gothic

 
ipa フォントを graphfont として配置する

% sudo ln -s /usr/share/fonts/opentype/ipafont-gothic/ipag.ttf /usr/share/zabbix/fonts/graphfont.ttf

 
Zabbix のグラフ表示時のフォントを graphfont に変更する

% sudo vim /usr/share/zabbix/include/defines.inc.php
@@ -42,7 +42,7 @@
 define('ZBX_WIDGET_ROWS', 20);
 
 define('ZBX_FONTPATH',				realpath('fonts')); // where to search for font (GD > 2.0.18)
-define('ZBX_GRAPH_FONT_NAME',		'DejaVuSans'); // font file name
+define('ZBX_GRAPH_FONT_NAME',		'graphfont'); // font file name
 define('ZBX_GRAPH_LEGEND_HEIGHT',	120); // when graph height is less then this value, some legend will not show up
 
 define('ZBX_SCRIPT_TIMEOUT',		60); // in seconds
[Zabbix] グラフの文字化けを修正する | R-Y-O の備忘録 Ver.2.0

 
 

「最新データ」表示時に更新されてしまい絞り込みが解除されてしまう問題

 
[プロフィール] より、更新間隔を 30秒から任意の値に変更すれば良い。
 
f:id:dnkrnka:20181111205410p:plain:w700