muninとZabbixで大規模サーバー群を監視

muninとは

muninはサーバーリソース管理ツールです。とにかく、ひたすらグラフ化、可視化、見える化するツールです。名前の由来は、北欧神話の神オーディンに世界中の情報を収集して伝達するワタリガラスです。RRDtoolとPerlで作られています。

こんなグラフを生成してサーバーのリソースをほぼリアルタイム(約5分おき)に伝えてくれます。

memory-month

私のサーバーのMuninは以下のアドレスで閲覧できます(自宅サーバーなので大規模ではないですが)。

自宅サーバー   http://www.testvps.info/munin/saito/geek.saito/index.html
さくらVPS(1GB  SSDプラン)  http://www.testvps.info/munin/saito/testvps.saito/index.html

Muninで監視できること

Muninは以下のようなものをグラフ化してくれます(代表的なものだけ列挙します)

  • メモリ使用状況
  • HTTPレスポンスタイム
  • Apache&Nginxリクエスト数(1秒間平均)
  • Apache&Nginx読み込み・書き込みコネクション数
  • ディスクI/O数   ディスクI/O遅延時間
  • ディスク使用量
  • ファイルシステムのinode使用率
  • MySQLクエリ数(秒間。select,update,delete,insert,cache_hit)
  • MySQLスロークエリ数
  • MySQLスループット
  • NICのネットワークトラフィック
  • パケットエラー
  • プロセス数・プロセスの種類
  • メールサーバースループット
  • メールキューの滞留状況
  • CPU使用率
  • メモリ使用率
  • ロードアベレージ
  • KVSメモリ使用状況
  • CPU温度・ファン回転数  etc…

muninサーバーのインストール

CentOS6の64ビットの場合

wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
sudo rpm -ivh epel-release-6-8.noarch.rpm
sudo yum install -y munin

openSUSEの場合

YaSTまたはzypperで、コミュニティレポジトリのPackmanレポジトリを追加してからインストール

sudo zypper install munin

muninサーバーの設定

/etc/munin/munin.confを編集

dbdir   /var/lib/munin
htmldir /var/www/html/munin
logdir /var/log/munin
rundir  /var/run/munin

htmldir以外はデフォルトで大丈夫です。。htmlディレクトリはドキュメントルートに合わせてください。外部公開サーバーでサーバーリソースを隠したい場合、BASIC認証またはDIGEST認証を掛けた場所を指定すると良いです。他に監視したいサーバーを追加します。

[testvps.saito]
address 127.0.0.1
use_node_name yes
[geek.saito]
address 180.131.119.243
use_node_name yes

以上で設定は完了です。Deamonの起動は特にいりません。 標準状態で/etc/cron.d/muninというファイルができているので、cronから起動する形になります。ちなみにファイルの中身はこんな感じです。

MAILTO=root
*/5 * * * *     munin test -x /usr/bin/munin-cron && /usr/bin/munin-cron

munin-nodeのインストール(クライアント側)

CentOS6の64ビットの場合

クライアントサーバーには同じくepelレポジトリを設定して、munin-nodeをインストールします。

wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
sudo rpm -ivh epel-release-6-8.noarch.rpm
sudo yum install -y munin-node

openSUSEの場合

YaSTまたはzypperで、コミュニティレポジトリのPackmanレポジトリを追加してからインストール

zypper install munin-node

munin-nodeの設定

/etc/munin/munin-node.confを編集して、許可サーバーにmuninサーバーのIPアドレスを設定します。

allow ^133.242.176.20$

munin-nodeを起動します。

sudo /etc/init.d/munin-node start

pluginの追加(クライアント側)

/etc/munin/pluginsの中に、muninのプラグインが書かれてあるファイルにシンボリックリンクを貼ります。
有効なプラグインを探すのが面倒な方は、munin-node-configureというコマンドで自動的に有効なプラグインを登録してくれます。

CentOSの例

apache_accesses -> /usr/share/munin/plugins/apache_accesses
apache_processes -> /usr/share/munin/plugins/apache_processes
apache_volume -> /usr/share/munin/plugins/apache_volume
cpu -> /usr/share/munin/plugins/cpu
cpuspeed -> /usr/share/munin/plugins/cpuspeed
df -> /usr/share/munin/plugins/df
df_inode -> /usr/share/munin/plugins/df_inode
diskstats -> /usr/share/munin/plugins/diskstats
entropy -> /usr/share/munin/plugins/entropy
forks -> /usr/share/munin/plugins/forks
fw_packets -> /usr/share/munin/plugins/fw_packets
http_loadtime -> /usr/share/munin/plugins/http_loadtime
if_err_eth0 -> /usr/share/munin/plugins/if_err_
if_eth0 -> /usr/share/munin/plugins/if_
interrupts -> /usr/share/munin/plugins/interrupts
irqstats -> /usr/share/munin/plugins/irqstats
load -> /usr/share/munin/plugins/load
memory -> /usr/share/munin/plugins/memory
mysql_ -> /usr/share/munin/plugins/mysql_
mysql_bytes -> /usr/share/munin/plugins/mysql_bytes
mysql_queries -> /usr/share/munin/plugins/mysql_queries
mysql_slowqueries -> /usr/share/munin/plugins/mysql_slowqueries
netstat -> /usr/share/munin/plugins/netstat
ntp_kernel_err -> /usr/share/munin/plugins/ntp_kernel_err
ntp_kernel_pll_freq -> /usr/share/munin/plugins/ntp_kernel_pll_freq
ntp_kernel_pll_off -> /usr/share/munin/plugins/ntp_kernel_pll_off
ntp_offset -> /usr/share/munin/plugins/ntp_offset
open_files -> /usr/share/munin/plugins/open_files
open_inodes -> /usr/share/munin/plugins/open_inodes
postfix_mailqueue -> /usr/share/munin/plugins/postfix_mailqueue
postfix_mailvolume -> /usr/share/munin/plugins/postfix_mailvolume
proc_pri -> /usr/share/munin/plugins/proc_pri
processes -> /usr/share/munin/plugins/processes
swap -> /usr/share/munin/plugins/swap
threads -> /usr/share/munin/plugins/threads
uptime -> /usr/share/munin/plugins/uptime
users -> /usr/share/munin/plugins/users
vmstat -> /usr/share/munin/plugins/vmstat

openSUSEの例

cpu -> /usr/lib/munin/plugins/cpu
cpuspeed -> /usr/lib/munin/plugins/cpuspeed
df -> /usr/lib/munin/plugins/df
df_abs -> /usr/lib/munin/plugins/df_abs
df_inode -> /usr/lib/munin/plugins/df_inode
diskstat_ -> /usr/lib/munin/plugins/diskstat_
diskstats -> /usr/lib/munin/plugins/diskstats
entropy -> /usr/lib/munin/plugins/entropy
hddtemp -> /usr/lib/munin/plugins/hddtemp
hddtemp2 -> /usr/lib/munin/plugins/hddtemp2
hddtemp_smartctl -> /usr/lib/munin/plugins/hddtemp_smartctl
hddtempd -> /usr/lib/munin/plugins/hddtempd
http_loadtime -> /usr/lib/munin/plugins/http_loadtime
if_ -> /usr/lib/munin/plugins/if_
if_err_eth1 -> /usr/lib/munin/plugins/if_err_
if_eth1 -> /usr/lib/munin/plugins/if_
iostat -> /usr/lib/munin/plugins/iostat
iostat_ios -> /usr/lib/munin/plugins/iostat_ios
memory -> /usr/lib/munin/plugins/memory
mysql_ -> /usr/lib/munin/plugins/mysql_
mysql_bytes -> /usr/lib/munin/plugins/mysql_bytes
mysql_queries -> /usr/lib/munin/plugins/mysql_queries
mysql_slowqueries -> /usr/lib/munin/plugins/mysql_slowqueries
mysql_threads -> /usr/lib/munin/plugins/mysql_threads
netstat -> /usr/lib/munin/plugins/netstat
nginx_request -> /usr/lib/munin/plugins/nginx_request
nginx_status -> /usr/lib/munin/plugins/nginx_status
open_files -> /usr/lib/munin/plugins/open_files
postfix_mailqueue -> /usr/lib/munin/plugins/postfix_mailqueue
postfix_mailstats -> /usr/lib/munin/plugins/postfix_mailstats
postfix_mailvolume -> /usr/lib/munin/plugins/postfix_mailvolume
processes -> /usr/lib/munin/plugins/processes
redis-speed -> /usr/lib/munin/plugins/redis-speed
redis_ -> /usr/lib/munin/plugins/redis_
redis_changes_since_last_save_ -> /usr/lib/munin/plugins/redis_changes_since_last_save_
redis_commands_ -> /usr/lib/munin/plugins/redis_commands_
redis_connections_ -> /usr/lib/munin/plugins/redis_connections_
redis_databases_ -> /usr/lib/munin/plugins/redis_databases_
redis_memory_ -> /usr/lib/munin/plugins/redis_memory_
redis_users_ -> /usr/lib/munin/plugins/redis_users_
samba -> /usr/lib/munin/plugins/samba
sensors_ -> /usr/lib/munin/plugins/sensors_
sensors_fan -> /usr/lib/munin/plugins/sensors_
sensors_temp -> /usr/lib/munin/plugins/sensors_
sensors_volt -> /usr/lib/munin/plugins/sensors_
smart_ -> /usr/lib/munin/plugins/smart_
swap -> /usr/lib/munin/plugins/swap
vmstat -> /usr/lib/munin/plugins/vmstat

muninサーバーからmunin-nodeクライアントへの通信はデフォルトで4949ポートを使用します。iptablesなどファイアウォールで4949ポートが塞がっている場合は解放してください(ファイアウォールを解放してもmunin-node.confでAllow IPを設定しているので、それ以外のIPからの接続は遮断されますのでご安心ください)。

/etc/sysconfig/iptables設定例

-A INPUT -p tcp -m state --state NEW -m tcp --dport 4949 -j ACCEPT

iptablesを設定した場合は、iptablesを再起動してください。

以上でmuninの設定は完了です。次はZabbixの説明に移ります。

Zabbixとは

Zabbixとはサーバー、ネットワーク、アプリケーションを監視するためのソフトウェアです(Zabbix-JP Zabbixとは)。

  • サーバやネットワークに接続されたデバイスを監視する監視機能
  • 収集したデータをもとにグラフ化、ネットワークマップの作成を行うグラフィカル表示機能
  • 収集したデータに閾値を設定し、障害/復旧時に管理者に通知を行う障害検知/通知機能

上記の監視・通知をすべてWEB上で管理することができ、Nagiosなどの他のサーバー監視アプリケーションと比べて、インストールの容易性、標準状態での設定項目の豊富さと設定追加の簡易さが特徴です。

(↓Zabbixダッシュボードの画面)

dash

Zabbixサーバーのインストール

Zabbix 1.8の場合

Zabbix-JPでYUMレポジトリを公開しているので、Zabbix1.8系はこのレポジトリを追加(CentOSの場合は/etc/yum.repos.d/に追加)することで、YUMインストールが可能です。

wget http://repo.zabbix.jp/relatedpkgs/rhel6/x86_64/zabbix-jp-release-6-6.noarch.rpm
sudo rpm -ivh zabbix-jp-release-6-6.noarch.rpm
sudo yum install zabbix zabbix-agent zabbix-server zabbix-server-mysql zabbix-web zabbix-web-mysql

Zabbix 2.0の場合

現状の最新版は2.0ですが、こちらはZABBIX SIA社の公開ディレクトリSIAのnon supportedディレクトリからダウンロードできます。まず、non supportedディレクトリから以下のパッケージをインストールします。

sudo rpm -ivh fping-2.4b2-16.el6.x86_64.rpm  iksemel-1.4-2.el6.x86_64.rpm  libssh2-1.4.2-2.el6.x86_64.rpm

次にZabbix2.0のYUMレポジトリ追加RPMをインストールし、YUMインストールでZabbix2.0のパッケージをインストールします。

wget http://repo.zabbix.com/zabbix/2.0/rhel/6/x86_64/zabbix-release-2.0-1.el6.noarch.rpm
sudo rpm -ivh zabbix-release-2.0-1.el6.noarch.rpm
sudo yum install zabbix-server-mysql zabbix-web-mysql zabbix-agent

#zabbix-agentはzabbix-serverのlocalhostを監視する場合に入れます

openSUSEの場合

openSUSEの場合は対応RPMが公開されていないので、ソースからコンパイルしてインストールになります。

./configure --enable-server --enable-agent --enable-java --with-mysql=/usr/bin/mysql_config --with-net-snmp
make
sudo make install

ZabbixのDB作成

/etc/my.cnfに以下の設定を追加します

default-character-set=utf8
skip-character-set-client-handshake

MySQLを起動して、zabbixという名前のデータベースを作成し、Zabbix専用のユーザーを作成します(DBやユーザー名やパスワードは任意のものでもかまいません)。

[mysql] create database zabbix;
grant all privileges on zabbix.* to zabbix@localhost identified by ‘********’;
flush privileges;
[/mysql]

Zabbixの初期データベースのインポート

Zabbixの初期DBスキーマとデータをインポートします。以下、2.0の場合です。

mysql -u zabbix zabbix -p  > /usr/share/doc/zabbix-server-mysql-2.0.5/create/schema.sql
mysql -u zabbix zabbix  -p > /usr/share/doc/zabbix-server-mysql-2.0.5/create/data.sql
mysql -u zabbix zabbix  -p > /usr/share/doc/zabbix-server-mysql-2.0.5/create/images.sql

Zabbixサーバーの起動

/etc/zabbix/zabbix-server.confにDB接続情報を入力します。

DBName=zabbix
DBUser=zabbix
DBPassword=*********

あとはzabbix-serverとhttpdをスタートさせると/zabbix でZabbixの管理画面にアクセスできます。

sudo /etc/init.d/zabbix-server start
sudo /etc/init.d/zabbixa-gent start   # localhostを監視する場合
sudo /etc/init.d/httpd start

ソースからインストールした場合は、zabbix-serverコマンドとzabbix-agentコマンドで起動します。

Zabbix管理画面ログイン

zabbix-20-installer

途中でDB接続情報などを入力します。その後、ログイン画面になりますが、初期設定ではユーザ名は「Admin」、パスワードは「zabbix」でログインできます。

Zabbixサーバーは標準で10051ポートを使用します。ダッシュボードまで到着できたら、Zabbixサーバーのインストールは完了です。

zabbix-agentのインストール(クライアント)

クライアントはzabbix-agentのインストールのみ必要となります。

wget http://repo.zabbix.jp/relatedpkgs/rhel6/x86_64/zabbix-jp-release-6-6.noarch.rpm
sudo rpm -ivh zabbix-jp-release-6-6.noarch.rpm
sudo yum install -y zabbix-agent

Zabbix2.0の場合は以下です。

wget http://repo.zabbix.com/zabbix/2.0/rhel/6/x86_64/zabbix-release-2.0-1.el6.noarch.rpm
sudo rpm -ivh zabbix-release-2.0-1.el6.noarch.rpm
sudo yum install zabbix-agent

ソースインストールの場合は以下のコマンドになります

./configure --enable-agent --with-mysql --with-net-snmp --with-jabber --with-libcurl
make
sudo make install

zabbix-agentの設定(クライアント側)

/etc/zabbix/zabbix_agentd.conf(ソースインストールの場合は/usr/local/etc/zabbix/zabbix_agentd.conf)を編集して、Zabbixサーバーのアドレスを許可します。

Server=133.232.176.20
ServerActive=133.242.176.20

ZabbixサーバーからZabbixエージェントへの通信には10050ポートが使われます。ファイアウォールを設定している場合は、10050ポートを許可します。

/etc/sysconfig/iptablesの設定

-A INPUT -p tcp -m state --state NEW -m tcp --dport 10050 -j ACCEPT

これでzabbix-serverとzabbix-agentが疎通できるようになります。zabbix-agentを起動させます。

/etc/init.d/zabbix-agent start

ソースインストールの場合はzabbix-agentdコマンドで立ち上がります。

Zabbixの監視設定

Zabbixの監視設定はWEBインターフェースになるため今回は省略しますが、基本的には、テンプレートをインポートして、ホストを作成して、ホストにテンプレートを割り当て、トリガーを設定する形になります。詳しくはまた今度、詳述いたします。

(↓トリガーの設定画面)

trigger

 

今度は、このZabbixの詳細設定について採り上げていきたいと思います。

追記

当初、Zabbix2.0のYUMレポジトリはないという書き方をしていましたが、@atanaka7さんからご指摘を頂き、訂正しました。ご指摘ありがとうございます!