35
47

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Zabbix構築・運用ガイド

Last updated at Posted at 2016-08-23

Zabbix構築・運用ガイド

1.概要

1-1. 説明すること

Zabbixの構築・設定・運用について記載する。

  • 構築について
    単一サーバ上にWebサーバ(Apache httpd)・APLサーバ(Zabbix Server)・DBサーバ(MySQL)を全乗せする構成で構築する。
  • 設定について
    Zabbixの設定は、設定箇所をなるべく局所化/ルール化しないとカオスになるため、可能な限り設定作業を自動化するよう、Zabbixの機能を活用する。
  • 運用について
    実運用で遭遇したトラブルシュートや経験談も都度追記していく。

1-2. 今回の構築環境

OS:CentOS 6.8
Version:Zabbix 2.4

1-2. 参考にしたサイト

2. Zabbix構築

2-1. Zabbixインストール

  1. Zabbixリポジトリ登録

yum install http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-1.el6.noarch.rpm
  1. パッケージインストール

yum install zabbix-server-mysql zabbix-web-mysql zabbix-agent zabbix_get
yum install httpd mysql-server
yum install php-mysql php-gd php-xml php-bcmath 
  1. 設定ファイルのバックアップ

cp -pi /etc/my.cnf /etc/my.cnf.org
cp -pi /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.org
cp -pi /etc/zabbix/zabbix_server.conf /etc/zabbix/zabbix_server.conf.org
  1. MySQL設定
  2. my.cnf

vi /etc/my.cnf
utfを有効にする
character-set-server=utf8 を追加
  1. サービス起動

service mysqld start
  1. chkconfig設定

chkconfig mysqld on
  1. mysql_secure_install設定

mysql_secure_installation
  1. DB作成

mysql -u root -p
mysql> create database zabbix; 
  1. 権限付与/パスワード設定
    ここでは例としてパスワードを'password'とした。

mysql> grant all privileges on zabbix.* to zabbix@'localhost' identified by 'password'; 
mysql> grant all privileges on zabbix.* to zabbix@'%' identified by 'password'; 
mysql> flush privileges; 
mysql> \q
  1. httpd設定
  2. php.ini設定
  
vi /etc/php.ini
timezoneを"Asia/Tokyo"にする
vi zabbix_server.conf
  1. サービス起動

service httpd start
  1. chkconfig設定

chkconfig httpd on
  1. Zabbixサーバ設定
  2. 初期設定をする
    DBのパスワードは先ほど設定したものと合わせる。

vi /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBPassword=password
  1. データをインポートする

cd /usr/share/doc/zabbix-server-mysql-2.4.8/create/
mysql -u root -p zabbix < schema.sql 
mysql -u root -p zabbix < images.sql 
mysql -u root -p zabbix < data.sql 
  1. Zabbixサーバを起動する

service zabbix-server start
  1. iptablesの許可設定
    コマンドは環境にあわせて変更する。直接 /etc/sysconfig/iptables を修正してもよい。
    今回はiptablesの5行目にルールを追加する。

iptables -I INPUT 5 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
service iptables save
  1. WebブラウザからZabbixサーバにアクセス

http://IPアドレス/zabbix
初期ID: Admin
初期パスワード: zabbix

2-2. 任意の導入

  1. フォント設定(グラフ描画で日本語が表示されない場合)
  2. IPAゴシックのパッケージをインストール

yum install ipa-pgothic-fonts
  1. IPAゴシックのフォントの優先度を高くする

alternatives --install /usr/share/zabbix/fonts/graphfont.ttf zabbix-web-font /usr/share/fonts/ipa-pgothic/ipagp.ttf 1000
  1. 設定反映

alternatives --display zabbix-web-font
  1. メールの外部配送設定(通知メールを外部配送する場合)
  2. パッケージをインストール

yum install postfix cyrus-sasl-plain mailx
  1. main.cfに設定を追加

vi /etc/postfix/main.cf
relayhost = [smtp.nifty.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_mechanism_filter = plain
smtp_sasl_password_maps = hash:/etc/postfix/nifty_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_use_tls = yes
  1. パスワードファイルを作成

touch /etc/postfix/nifty_passwd
  1. パスワードファイルに各種情報を記載

vi /etc/postfix/nifty_passwd
[smtp.nifty.com]:587 xxxxx@nifty.com:パスワード
  1. パスワードファイルを Berkeley DB形式に変換

postmap /etc/postfix/nifty_passwd
  1. 返還後のファイル形式を確認

file /etc/postfix/nifty_passwd.db 
nifty_passwd.db: Berkeley DB (Hash, version 9, native byte-order)
  1. ファイルの中身を確認

db_dump -p /etc/postfix/nifty_passwd.db 
VERSION=3
format=print
type=hash
h_nelem=4097
db_pagesize=4096
HEADER=END
\[smtp.nifty.com]:587\00
xxxxx@nifty.com:パスワード\00
DATA=END
  1. postfixを再起動

service postfix restart
  1. テストメールを送信

echo "This mail is test" | mail -s "test mail" -r メールアカウント名@nifty.com メールアカウント名@nifty.com
  1. SNMPトラップ受信設定(SNTPのトラップ監視を用いる場合)
  2. パッケージをインストールする

yum install net-snmp net-snmp-perl net-snmp-utils snmptt
  1. 設定ファイルをバックアップする

cp -pi /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.org
cp -pi /etc/snmp/snmptrapd.conf /etc/snmp/snmptrapd.conf.org
cp -pi /etc/snmp/snmptt.ini /etc/snmp/snmptt.ini.org
  1. snmptrapd.confの設定
    ここでは例としてコミュニティ名は'public'とした。

vi /etc/snmp/snmptrapd.conf
authCommunity   log,execute,net public
traphandle default /usr/sbin/snmptthandler
  1. snmptrapdの設定

vi /etc/sysconfig/snmptrapd
OPTIONS="-On -Lsd -p /var/run/snmptrapd.pid"

vi /etc/init.d/snmptrapd
OPTIONS="-On -Lsd -p /var/run/snmptrapd.pid"
  1. snmptt.iniの設定

vi /etc/snmp/snmptt.ini
date_time_format = %Y/%m%d %H:%M:%S
  1. snmptt.confの設定

vi /etc/snmp/snmptt.conf
EVENT general .* "General event" Normal
FORMAT ZBXTRAP $aA $*
  1. サービス起動

service snmptt start
service snmptrapd start
  1. chkconfig設定

chkconfig snmptt on
chkconfig snmptrapd on
  1. Zabbixサーバ再起動

service zabbix-server restart
  1. iptablesの許可設定

iptables -I INPUT 5 -p udp -m state --state NEW -m udp --dport 162 -j ACCEPT 
service iptables save
  1. 自ホストへsnmptrapを送信

snmptrap -v 2c -c public localhost '' .1.3.6.1.4.1.8072.9999 .1.3.6.1.4.1.8072.9999 s 'TEST'
  1. snmptt.logにトラップログの出力確認

cat /var/log/snmptt/snmptt.log
2016/08/25 23:05:35 .1.3.6.1.4.1.8072.9999 Normal "General event" localhost - ZBXTRAP 127.0.0.1 TEST

3.Zabbix設定

3-1. 設定する順番

以下の順で設定を行っていく

  1. メディアタイプ作成
  2. ユーザグループ作成
  3. ユーザ作成
  4. ホストグループ作成
  5. ディスカバリルール作成
  6. テンプレート作成
  7. アプリケーション作成
  8. アイテム作成
  9. アクション(トリガー)作成
  10. グラフ作成
  11. アクション(ディスカバリ)作成

3-2. 設定の流れについて

まず、メディアタイプ・ユーザグループ・ユーザの設定を行う。
これらの情報は監視対象のホスト情報と切り離されているため変更しやすい。

次に、監視対象のホスト・ネットワーク機器の登録設定から、監視内容、通知条件、グラフの作成を行う。
前述したが、これらは可能な限り自動登録、変更箇所を局所化しないと運用してから泣くことになる。

流れとしては、IPアドレスベースにディスカバリルールを作成、ICMP Pingで発見後、あらかじめ作成した定義をもとに監視対象(物理サーバ、ネットワーク機器、VMなど)の自動登録、監視項目(アイテム)の設定、障害時の通知設定、グラフの作成まで自動で行うようにすることで、あとから監視対象が追加になったときもIPアドレスを追加することで自動設定されるようになる。

一方、Zabbixエージェントレスでの監視の場合、どうしても手動で設定しなければいけない箇所があるため、そこは諦めて手動でポチポチする。

3-3. Zabbix設定手順

  1. メディアタイプ作成
    Zabbixサーバからメールを送信するため、SMTPサーバとSMTP heloをlocalhost.localdomainとする。
    今回メディアタイプの名前は Email としているが、宛先が複数になる場合は、
    メールアドレスを名前に設定することが望ましい。

[管理]->[メディアタイプ]->[メディアタイプの作成]からメディアタイプを作成する

例)外部メールサーバを中継しない場合(Zabbixサーバから直接送信する場合)


名前:Email
タイプ:メール
SMTPサーバ:localhost.localdomain
SMTP helo:localhost.localdomain
送信元メールアドレス:zabbix@example.com

例)外部メールサーバを中継する場合
@niftyのメールアカウントを用いて、@niftyのメールアドレスへ送信する。
外部メールサーバを中継する場合、Zabbixサーバ上のメールサーバの設定が必要(後述)。


名前:Email
タイプ:メール
SMTPサーバ:localhost.localdomain
SMTP helo:localhost.localdomain
送信元メールアドレス:xxxxx@nifty.com
  1. ユーザグループ作成

[管理]->[ユーザ]->[ユーザグループ]からユーザグループを作成する

例)管理者権限


グループ名:Administrator
Webインタフェースへのアクセス:システムデフォルト
有効:チェック

例)ユーザ権限


グループ名:Users
Webインタフェースへのアクセス:システムデフォルト
有効:チェック
  1. ユーザ作成
  2. ユーザタブ

[管理]->[ユーザ]->[ユーザ]からユーザを作成する

例)鈴木一郎
今回は以下のユーザの追加を例とする


名前:Ichiro
名字:Suzuki
メールアドレス:ichiro-suzuki@example.com
権限:管理者

エイリアスはメールのアドレス部分(ここではichiro-suzuki)としておき、初期パスワードと同一としておくと初期パスワードの設定に悩まなくて済む。初期パスワードは速やかに変更してもらう。


エイリアス:ichiro-suzuki
名前:Ichiro
名字:Suzuki
グループ:Administrator
パスワード:ichiro-suzuki
言語:日本語(ja_JP)
  1. メディアタブ

[追加]から新規メディアを追加する

例)新規メディアの追加


タイプ:Email
送信先:ichiro-suzuki@example.com
ステータス:有効
  1. 権限タブ

ユーザの種類:Zabbix特権管理者
  1. ホストグループ作成
    ホストグループ

ホストグループ:sample hosts
  1. ディスカバリルール作成
    ネットワーク機器や稼働中のサーバなど、Zabbixエージェントがインストールできない監視対象に対してはディスカバリで シンプルチェック(ICMP Ping・ポートチェック・SNMPポーリングなど)で監視対象を発見し、監視対象に組み込む。
    Zabbixエージェントがインストールされている監視対象に対しては、Zabbixエージェントを選択する。
    作成するルールは、以下のルールごとに作成するとよい。
  • チェック方法ごと(シンプルチェック or Zabbixエージェントチェック)
  • サーバやネットワーク機器ごと(Cisco Router, Cisco Catalyst, Fujitsu primergy)
  • OSごと(Linux, Windows)
    例)シンプルチェックでのルール設定

ディスカバリ名:Home network appliance
IPアドレスの範囲:192.168.1.1,192.168.1.24-64
チェック:ICMP ping

例)Zabbixエージェントでのルール設定


ディスカバリ名:Fujitsu primergy
IPアドレスの範囲:192.168.1.65-128
チェック:Zabbixエージェント
キー:Linux
デバイスの固有性を特定する基準:Zabbixエージェント "Linux"
  1. テンプレート作成
    監視項目ごとにテンプレートを作成する
    監視項目の例(死活監視、サービス監視、インタフェース監視)
  2. 死活監視
    デフォルトでICMP用のテンプレートが用意されているので複製して使用する
    デフォルトのテンプレートは今後使用することを考えてそのまま残しておき、使用する場合は複製して使用する
    作成したテンプレートをグループ(今回は sample hosts)に紐付けることで、使用するテンプレートをわかりやすくしている

テンプレート名:ICMP Ping(Template ICMP Pingを複製して作成)
所属グループ:sample hosts
  1. サービス監視

テンプレート名:HTTP Service(Template App HTTP Serviceを複製して作成)
所属グループ:sample hosts
  1. インタフェース監視
    Template SNMP Devicesのテンプレートを元にテンプレートを作成する。
    Template SNMP Devicesは、Template SNMP GenericとTemplate SNMP Interfacesに紐付いているため、同様にそれぞれ元のテンプレートから複製して作成する。
    作成後は、SNMP Devicesのテンプレートに2つのテンプレートを紐付けする。

テンプレート名:SNMP Device(Template SNMP Deviceを複製して作成)
テンプレート名:SNMP Generic(Template SNMP Genericを複製して作成)
テンプレート名:SNMP Interfaces(Template SNMP Interfacesを複製して作成)
  1. アプリケーション作成
    アプリケーションはテンプレートと同一名でユニークにする。
    SNMPはポーリングとトラップによる監視があるため、ポーリング用をSNMP poling、
    トラップ用をSNMP trapとする。
    例)死活監視

アプリケーション:ICMP Ping

例)サービス監視


アプリケーション:HTTP Service

例)インタフェース監視(SNMP polig)


アプリケーション:SNMP poling

例)インタフェース監視(SNMP trap)


アプリケーション:SNMP trap
  1. アイテム作成
    アイテムは監視方法ごとに増やす
    例)HTTP Service

名前:HTTP service is running
タイプ:シンプルチェック
キー:net.tcp.service[,,80]
アプリケーション:HTTP Service
  1. アクション(トリガー)作成
    トリガーはテンプレートの作成ルールと同様に、監視方法ごとに作成する
    例)死活監視通知

名前:死活監視通知
アクションの実行条件:メンテナンスの状態 期間外 メンテナンス、テンプレート = ICMP Ping
アクションの実行内容:ユーザグループ or ユーザ (または両方)に送信
  1. グラフ作成

テンプレートに対してグラフを作成する
  1. アクション(ディスカバリ)
    例)BBルータ

ディスカバリ名:Auto discovery.PR-500KI.
アクションの実行条件:ディスカバリチェック = PR-500KI: ICMP ping
アクションの実行内容:ホストグループに追加:sample hosts、テンプレートとリンク: ICMP Ping

例)自宅サーバ


ディスカバリ名:Auto discovery.FUJITSU PRIMERGY.
アクションの実行条件:ディスカバリチェック = FUJITSU PRIMERGY: Zabbixエージェント "Linux"
アクションの実行内容:ホストグループに追加:sample hosts、テンプレートとリンク: ICMP Ping, OS Linux

3-4. Zabbix通知テスト

監視対象のホストやプロセスを直接落下させても確認できるが、
まずはZabbixサーバ上で通知確認を行うとよい。
死活監視(ICMP Ping)とサービス監視(TCPポート)は、
Zabbixサーバ上のiptablesでパケットを落とすことでテストできる。
ターミナルを最低2つ開き、1つはiptablesのパケットカウンタモニタリング用、
もう1つはiptables定義操作用として作業を行う。

  1. パケットカウンタをリセットする

iptables -Z
  1. リアルタイムにiptablesのパケットカウンタを確認する

while :; do iptables -nvxL --line-numbers; sleep 1; clear; done
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num      pkts      bytes target     prot opt in     out     source               destination         
1         485    64109 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
2           0        0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
3          12      720 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
4           0        0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
5          34     2176 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:80 
6           0        0 ACCEPT     udp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW udp dpt:162 
7           0        0 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:10050 
8          20     3320 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 
  1. パケットドロップのルールを追加する
  2. 死活監視の場合
    監視テストを行うホスト(ここでは 192.168.1.62)からの icmp pingをドロップする

iptables -I INPUT 1 -p icmp --src 192.168.1.62 -j DROP

先ほどのドロップするルールが1行目に追加された


while :; do iptables -nvxL --line-numbers; sleep 1; clear; done
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num      pkts      bytes target     prot opt in     out     source               destination         
1           0        0 DROP       icmp --  *      *       192.168.1.62         0.0.0.0/0           

カウンタが増えており、パケットがドロップされたことがわかる


Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num      pkts      bytes target     prot opt in     out     source               destination         
1           3      288 DROP       icmp --  *      *       192.168.1.62         0.0.0.0/0           

監視テスト後はルールを削除する
削除する行を誤ると通信できなくなる可能性があるため注意する


iptables -D INPUT 1
  1. サービス監視の場合
    サービス監視の場合も先ほどの死活監視と同様の手順で行う
    ここでは監視テストを行うホスト(ここでは 192.168.1.60)のhttp(80/tcp)に対しての
    パケットドロップのみ説明する

iptables -I INPUT 1 -p tcp -m tcp --dst 192.168.1.60 --dport 80 -j DROP

4.運用

4-1. Webサーバ(Apache httpd)

  • 障害時に一斉にZabbixでグラフやスクリーンを閲覧しようとしてhttpdが落ちた
  • httpdがボトルネックとなる場合は、フロント(Webサーバ)を複数に分け、バック(DBサーバ)を分離するなど対策を取る(httpdのチューニング前提)

4-2. DBサーバ(MySQL)

  • 気がついたらDBが肥大化してしまった
  • DBがある程度肥大化したら、DBからデータをダンプし、DBを再構築する
    ※ MySQLのエンジンをinnodbで運用を開始し、データストア(ibdata1)が肥大化してしまった経験あり。
    ※ bdata1が12GBのときにmysqldumpでダンプを取ったら実データは1.5GB程度だった。 DBに詳しく筆者はZabbixのhousekeeper(古いデータを自動削除する機能)でディスク容量自体が減ると思っていたが、一度肥大化したDBはdelete文で削除してもディスク容量が減らないことを知った。(実際、housekeeperは内部でdelete文を実行し、データを消している)

4-3. APLサーバ(Zabbix)

35
47
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
35
47

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?