zabbix
統合監視システム。やろうと思えば、ログとかも収集出来る。
基本は公式のwikiがあるのでそれを見ればわかる。以下参考資料(wiki)
zabbix Manual
zabbix RPM
0. 前提条件
以下を前提でメモしてある。
各IPアドレスは、 ・zabbix-server = 192.168.1.10 ・zabbix-proxy = 192.168.1.20 ・zabbix-agentd = 192.168.1.10,192.168.11.11 とする。
1. 前準備
予め、必須なミドルウェアを入れておく。
Apache
MySQL
PHP
ミドルウェアを入れた後にzabbix用ユーザ、グループを作成。
# groupadd zabbix # useradd -g zabbix -d /var/zabbix -s /sbin/nologin zabbix
その後、zabbixで監視する物に対応するライブラリ(snmp-develとか)を突っ込む。
ライブラリ関係までmakeするのだと、切りが無いのでサクッとapt-getなりyumなりするのを推奨。
2-1. zabbix-serverのビルド
公式wikiの通りにソースを調理していく。
zabbix-serverを入れる時は殆どの場合でzabbix-agentdも入れる筈なので一緒に入れておく。
zabbix-agentdのみインストールする場合は下記参照。
# tar zxvf zabbix-2.2.1rc1.tar.gz # cd zabbix-2.2.1rc1 # ./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --with-mysql --with-net-snmp --with-libcurl --with-libxml2 # make # make install
2-2. zabbix-serverの設定
./configureを打つ時にzabbix-serverの設定ファイル保存先を、sysconfdirで指定しても良いのだが、
折角prefix指定をやっているのでシンボリックリンクで対処する。
# cd /etc # ln -s /usr/local/zabbix/etc ./zabbix # cd zabbix # vi zabbix_server.conf
最低限、以下の項目を設定しておく。
※設定例(例として、パスワードはzabbix_passにしてある)
LogFile=/var/log/zabbix/zabbix_server.log LogFileSize=16 DBHost=127.0.0.1 DBName=zabbix DBUser=zabbix DBPassword=zabbix_pass DBSocket=/tmp/mysql.sock <- MySQLのsock設定と同じにする DBPort=3306 <- MySQLのポート設定と同じにする ListenIP=192.168.1.10 Include=/usr/local/zabbix/etc/zabbix_server.conf.d/
2-3. MySQLの準備
zabbix用のDBを作成する前にMySQLのコンフィグをチューニングする。
zabbixはInnoDB方式で書き込んでいく為、普段の設定とは少し違う項目が増える。
あと、zabbixはデータ量が凄く多いのでチューニングをしないとDB容量がすぐGB単位になる。
※アイテム数150を毎分取得していくと、一日で20Mバイトは使う。
詳細はオフィシャルのwikiを見る事。
一例としてこんな感じにする。
# vi /etc/my.cnf --- #DBファイルをテーブル毎に管理する。 innodb_file_per_table #実メモリ容量の50%~70%程度がいいらしい。 innodb_buffer_pool_size = 1024M #HDDの容量に応じて変化させる。32M,64M,128M程度が無難。それ以上だとあまり意味がなくなる。 innodb_log_file_size = 32M
zabbix用にMySQLのユーザとデータベースを作成する。
ユーザのパスワードは、zabbix_server.confに書いた物と同じにする。
もし、MySQLの設定でデータベースのデフォルト文字コードがUTF8になっていないのなら、
データベースを作成する時に文字コードをUTF8指定にして作成する。
# mysql -u root -p Enter password: {rootのパスワード} > create database zabbix default character set utf8 collate utf8_bin; > grant all on zabbix.* to zabbix identified by 'zabbix_pass'; > flush privileges; > exit;
データベースを作ったら、zabbixのソースに付いているSQLテンプレートを流し込んでデフォルトデータを作る。
※流し込む順番は以下で固定。毎回パスワード聞かれるけど、頑張って打ち込んでいく。
# mysql -u root -p zabbix < {zabbixのソースコード}/database/mysql/schema.sql # mysql -u root -p zabbix < {zabbixのソースコード}/database/mysql/images.sql # mysql -u root -p zabbix < {zabbixのソースコード}/database/mysql/data.sql
2-4. 起動準備
zabbix-server起動スクリプトのコピーとかを行う。
※今回はfedora/CentOS用スクリプトを使用。他のディストリビューションならそれに合わせる。
# cp {zabbixのソースコード}/misc/init.d/fedora/core5/zabbix_server /etc/init.d/ # chmod 755 /etc/init.d/zabbix_server # chkconfig --add zabbix_server # chkconfig zabbix_server on ----- ※起動スクリプトを修正する。 ZABBIX_BIN="/usr/local/zabbix/sbin/zabbix_server" ZABBIX_PID="/var/run/zabbix" if [ ! -e ${ZABBIX_PID} ] ; then mkdir ${ZABBIX_PID} chown zabbix.zabbix ${ZABBIX_PID} chmod 750 ${ZABBIX_PID} fi
2-5. Apacheの設定
zabbix用にApacheのディレクトリを作成し、extraコンフィグも書く。
説明の為、apacheのDocumentRootを"/var/apache/html"とする。
※セキュリティとかを考慮していないので、WANに公開している鯖でzabbix-serverを構築する時は注意。
# vi /usr/local/apache/conf/extra/httpd-zabbix.conf //Apache2.4での書き方 Alias /zabbix/ "/var/apache/zabbix/" <Directory "/var/apache/zabbix"> Options FollowSymLinks MultiViews ExecCGI AllowOverride All Require all granted </Directory> //Apache2.2での書き方 Alias /zabbix/ "/var/apache/zabbix/" <Directory "/var/apache/zabbix"> Options FollowSymLinks MultiViews ExecCGI AllowOverride All Order Allow,Deny Allow from all </Directory>
設定を書き換えたらzabbixのPHPを移動させ、apacheの再起動をする。
# cp {zabbixのソースコード}/frontends/php /var/apache/zabbix # chown -R root.www /var/apache/zabbix # chmod -R 750 /var/apache/zabbix # find /var/apache/zabbix -type f -print | xargs chmod 640 # /etc/init.d/apache restart
2-6. Webインストール
Webブラウザを起動して、"http://[zabbix-serverのIPアドレス]/zabbix/"にアクセスをして、画面の指示に従いつつインストールを完了させる。
途中で、
・PHPのモジュールが足りない -> PHPをリビルド ・PHPの必要要件(メモリ容量等)が足りない -> /etc/php.iniを書き換え、apache再起動 ・MySQLに接続出来ない -> MySQLとzabbix-serverの設定を見直す ・zabbix.conf.phpを設置出来ない -> 一時的にパーミッションを書き換えるか、手動配置
等を行う必要が出てくる。その時はその都度対応していく。
3-1. zabbix-proxyのビルド
負荷分散目的でzabbixを多段構成とする場合は、zabbix-proxyを間に入れる必要がある。
zabbix-proxyはzabbix-serverと同じくMySQLを利用するので事前にインストールしておく。
また、zabbix-proxyのソースコードはzabbix-serverと同じものを利用する。
# tar zxvf zabbix-3.2.0.tar.gz # cd zabbix-3.2.0 # ./configure --prefix=/usr/local/zabbix-3.2.0 --enable-proxy --with-mysql --with-net-snmp --with-libcurl --with-libxml2 # make # make install # cd /usr/local # ln -s /usr/local/zabbix-3.2.0 zabbix
3-2. zabbix-proxyの設定
zabbix-serverと同じく、シンボリックリンクを張って対処する。
# cd /etc # ln -s /usr/local/zabbix/etc zabbix # cd zabbix # vi zabbix_proxy.conf
zabbix-proxyのセキュリティを担保する為にパッシブモード[ProxyMode=1]を推奨。
[ProxyOfflineBuffer]が短すぎると、ログがロストする場合がある為、
1週間=168時間程度まで長くしておくのが良い。
ProxyMode=1 <- パッシブモードで動作 Server=192.168.1.10 <- zabbix-serverのIPアドレス Hostname=zabbix-proxy <- zabbixに登録するzabbix-proxy名 ListenPort=10051 LogFile=/var/log/zabbix/zabbix_proxy.log LogFileSize=16 DBHost=127.0.0.1 DBName=zabbix-proxy DBUser=zabbix-proxy_user DBPassword=zabbix-proxy_pass DBSocket=/tmp/mysql.sock <- MySQLのsock設定と同じにする DBPort=3306 <- MySQLのポート番号と同じにする ProxyLocalBuffer=24 ProxyOfflineBuffer=168 ListenIP=192.168.1.20 Include=/usr/local/zabbix/etc/zabbix_proxy.conf.d/*.conf
3-3. MySQL
zabbix-proxy用のInnoDB設定は、zabbix-serverと同じなので割愛。
zabbix-proxyのDBに流し込むSQLテンプレートはschema.sqlだけ流し込む。
serverと同じく、images/dataも流し込むとエラーが出力され、proxyが起動出来なくなる。
# mysql -u root -p Enter password: {rootのパスワード} > create database zabbix-proxy default character set utf8 collate utf8_bin; > grant all on zabbix-proxy.* to zabbix-proxy_user identified by 'zabbix-proxy_pass'; > flush privileges; > exit; --- # mysql -u root -p zabbix-proxy < {zabbixのソースコード}/database/mysql/schema.sql
3-4. 起動準備
zabbix-proxyの起動スクリプトは存在しないので、zabbix-serverの起動スクリプトを再利用する。
# cd /etc/init.d # cat zabbix_server | sed -e 's/_server/_proxy/g' -e 's/Server/Proxy/g' > zabbix_proxy # chmod 755 /etc/init.d/zabbix_proxy # chkconfig --add zabbix_proxy # chkconfig zabbix_proxy on # /etc/init.d/zabbix_proxy start
4-1. zabbix-agentdのビルド
ソースコードはzabbix-serverと同じ。
# tar zxvf zabbix-2.2.1rc1.tar.gz # cd zabbix-2.2.1rc1 # ./configure --prefix=/usr/local/zabbix --enable-agent # make # make install
4-2. zabbix-agentdの設定
事前に、zabbix-serverをインストールしていて、シンボリックリンクを張ってあった場合は再度張らないでOK
# cd /etc # ln -s /usr/local/zabbix/etc ./zabbix # cd zabbix # vi zabbix_agentd.conf
最低限、以下の項目を設定しておく。
※設定例 //IPアドレスが"192.168.1.10"のマシンを想定 LogFile=/var/log/zabbix/zabbix_agentd.log ListenIP=192.168.1.10 Server=192.168.1.10 ServerActive=192.168.1.10 Hostname={ホストネームを英語で書く} Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/ //IPアドレスが"192.168.1.11"のマシンを想定 LogFile=/var/log/zabbix/zabbix_agentd.log ListenIP=192.168.1.11 Server=192.168.1.10 ServerActive=192.168.1.10 Hostname={ホストネームを英語で書く。他と被らない事} Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/
4-3. 起動準備
zabbix-agentd起動スクリプトのコピーを行う。
※今回はfedora/CentOS用スクリプトを使用。他のディストリビューションならそれに合わせる。
# cp {zabbixのソースコード}/misc/init.d/fedora/core5/zabbix_agentd /etc/init.d/ # chmod 755 /etc/init.d/zabbix_agentd # chkconfig --add zabbix_agentd # chkconfig zabbix_agentd on ----- ※起動スクリプトの中身を修正する。以下は一例。 ZABBIX_BIN="/usr/local/zabbix/sbin/zabbix_agentd" ZABBIX_PID="/var/run/zabbix" if [ ! -e ${ZABBIX_PID} ] ; then mkdir ${ZABBIX_PID} chown zabbix.zabbix ${ZABBIX_PID} chmod 750 ${ZABBIX_PID} fi
後は、zabbix-server,zabbix-agentdの再起動テストや、
マシンごとリブートした時に正常稼働するかのチェックを行っていく。
負荷が結構高いので、いらないテンプレートは無効にした方が良い
5-1. ログローテート
zabbix用のログローテートを行わないと、ログが肥大化していくので注意。
Linuxの場合はlogrotateを使うと簡単に設定出来る。
# vi /etc/logrotate.d/zabbix -- /var/log/zabbix/*.log { missingok notifempty sharedscripts create 0664 zabbix zabbix }
Windowsに導入したZabbixエージェントのログローテートをする場合、
ローテート用にバッチファイルを作成してタスクスケジューラから実行する。
> notepad "C:\Program Files\Zabbix Agent\logrotate.bat" -- @echo off setlocal set LOGFILE=agent.log set ROTATE=7 set LOGDIR=C:\Program Files\Zabbix Agent\log set LOGDAY=%date:~0,4%%date:~5,2%%date:~8,2% ren "%LOGDIR%\%LOGFILE%" "%LOGFILE%-%LOGDAY%" forfiles /S /P "%LOGDIR%" /M "*.log-*" /D -%ROTATE% /C "cmd /c del @path" exit /B 0
5-2. zabbixのグラフ文字化け対策
インストール直後だとグラフ表示用のフォントが入っていないので、
OSにインストール済みのフォントへリンクして読み込む様にする。
フォントに2バイト文字データが入っていればグラフで2バイト文字の表示をするがPゴシックが無難。
# cd /var/apache/zabbix/assets/fonts # ln -s /usr/share/fonts/ipa-pgothic/ipagp.ttf ./ipagp.ttf # vi ../include/defines.inc.php --- #以下の項目に書き換える define('ZBX_GRAPH_FONT_NAME', 'ipagp'); //font file name ... define('ZBX_FONT_NAME', 'ipagp');
5-3. zabbixのグラフ標準表示時間の設定
標準だと、zabbixのグラフは最大2年間・最小とデフォルトが1時間を表示する設定になっている。
この状態だと都合によっては見づらくなるので、PHPを書き換えて表示時間の調整を行う。
設定する単位は秒になる(1時間=3600・1日=86400)。
# vi /var/apache/zabbix/include/defines.inc.php --- #最小時間 define('ZBX_MIN_PERIOD', 3600); // 1 hour #最大表示時間 define('ZBX_MAX_PERIOD', 63072000); // the maximum period for the time bar control, ~2 years (2 * 365 * 86400) #デフォルトの表示時間 define('ZBX_PERIOD_DEFAULT', 3600); // 1 hour
zabbix-4.0以降はグラフのタイムバーが廃止となった為、指定方法が「FROM-TO」の決め打ちとなる。
1日(24時間)の表示をデフォルトにしたい場合、defines.inc.phpを下記の通り書き換える。
define('ZBX_PERIOD_DEFAULT_FROM', 'now-24h'); define('ZBX_PERIOD_DEFAULT_TO', 'now');
zabbix-5.2移行はデフォルト時刻の設定が管理コンソール上で出来る様になった。
その為、実質変更するのは最小時刻設定のみとなる。
#最小時間 define('ZBX_MIN_PERIOD', 3600); // 1 hour
5-4. DB領域の圧縮
監視する端末が増えると、zabbixがMySQLに書き込むデータ量も増えていき、
結果としてディスクI/O不足による高負荷状態になる事がある。
I/O待ちを防ぐには、テーブルを圧縮しディスクI/O負荷をCPU負荷に転換すれば対処出来る。
・MySQLの準備 ※innodbの値は環境に合わせて変更する # mysqldump -u root -p -x --all-databases > mysql_dump.sql # /etc/init.d/mysql stop # rm ${MySQL_datadir}/ib_logfile* ${MySQL_datadir}/ibdata* # vi /etc/my.cnf --- innodb_file_format = Barracuda innodb_buffer_pool_size = 2048M innodb_log_files_in_group = 2 innodb_log_file_size = 64M innodb_log_buffer_size = 64M --- # /etc/init.d/mysql start
・テーブル形式の確認 $ mysql -u root -p mysql> use information_schema; mysql> select table_name, engine from tables where table_schema = "zabbix"; +-----------------------+--------+ | table_name | engine | +-----------------------+--------+ | acknowledges | InnoDB | | actions | InnoDB | | alerts | InnoDB | | | | | ... | ... | | | | | users_groups | InnoDB | | usrgrp | InnoDB | | valuemaps | InnoDB | +-----------------------+--------+
・テーブル圧縮(InnoDBの場合) mysql> use zabbix; mysql> alter table acknowledges ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8; mysql> alter table actions ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8; mysql> alter table alerts ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8; mysql> ... mysql> alter table users_groups ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8; mysql> alter table usrgrp ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8; mysql> alter table valuemaps ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=8; mysql> alter table acknowledges engine InnoDB; mysql> alter table actions engine InnoDB; mysql> alter table alerts engine InnoDB; mysql> ... mysql> alter table users_groups engine InnoDB; mysql> alter table usrgrp engine InnoDB; mysql> alter table valuemaps engine InnoDB;
・テーブル圧縮(MyISAMの場合) mysql> use zabbix; mysql> alter table acknowledges engine MyISAM; mysql> alter table actions engine MyISAM; mysql> alter table alerts engine MyISAM; mysql> ... mysql> alter table users_groups engine MyISAM; mysql> alter table usrgrp engine MyISAM; mysql> alter table valuemaps engine MyISAM;
5-5. windowsのトラフィック計測
・windows機のNIC名を取得 cmd> typeperf -qx -> '#'が'_'になったり、'()'が'[]'になったりして出力される ----- ・zabbixテンプレート タイプ:Zabbixエージェント キー:perf_counter[\Network Interface({$ETH_NIC})\Bytes Received/sec] -> "${ETH_NIC}"やホストマクロにNIC名を入れる
・例 Windows:[ネットワークとインターネット] -> [ネットワーク接続] -> [イーサネットのプロパティ] ->"Microsoft Hyper-V ネットワーク アダプター #2" zabbix :[設定] -> [テンプレート] -> [アイテム] -> [作成したトラフィック計測アイテム] ->"perf_counter[\Network Interface({$ETH_NIC})\Bytes Received/sec]" :[設定] -> [ホスト] -> [トラフィック計測するホスト] -> [マクロ] ->"Microsoft Hyper-V ネットワーク アダプター _2"
5-6. zabbixの通信暗号化
zabbix 3.0から、コンポーネント間の通信を暗号化出来るようになった。
暗号化を行う場合、事前共有鍵(Pre-Shared Key)とSSL証明書(Cert)のどちらかを利用出来る。
PSKでzabbix間を暗号化する場合は下記の通りとなる。
PSKを利用する場合、zabbix-agentに設定するPSKアイデンティティ(TLSPSKIdentity)は暗号化せずに送信されるので注意する。
特にこだわりが無ければ監視対象ホスト名のハッシュ値を設定すると良い。
PSKアイデンティティはzabbix-server内で全ホスト名に対して一意である必要がある。
ダブり登録がある場合、SSL通信の重複エラーが出たり、監視データを正常に受信出来なくなる。
# openssl rand -hex 128 > /usr/local/zabbix/etc/zabbix_agentd.psk # hostname | sha1sum --- 11ec2c2536cca57562de5d432bbd472d2a9a33e5 # vi zabbix_agentd.conf --- TLSConnect=psk TLSAccept=psk TLSPSKIdentity=11ec2c2536cca57562de5d4325bd472d2a9a33e5 TLSPSKFile=/usr/local/zabbix/etc/zabbix_agentd.psk