NetXMSお試し(1)

 article  Comments Off on NetXMSお試し(1)
Jan 062014
 

NetXMSという監視ツールを見つけまして試しに入れてみました。
スクリーンショットを見る限り洗練されていそうなのと、監視サーバーをWindowsで稼働させらるのも魅力的です。
OpenNMSもWindowsで稼働させることができますが、あちらはSNMPベースの監視が基本でエージェント監視方式ではありません。

タイトルに(1)と謳っていますが続編を書くかは未定です。

Debian用にはバイナリーパッケージが提供されていますので、そちらを利用します。
エージェントおよびサーバーは1台にまとめて稼働させます。

パッケージインストール

aptでインストールできるようsources.listを用意します。

# cat /etc/apt/sources.list.d/netxms.list
# NetXMS
deb http://www.netxms.org/apt squeeze main

エージェント用パッケージ、サーバー用パッケージを一式インストールします。

# apt-get update
# apt-get install netxms-base netxms-server netxms-agent

設定

エージェント用設定ファイルを用意します。

# cat /etc/nxagentd.conf
Servers = 127.0.0.1
ControlServers = 127.0.0.1
MasterServers = 127.0.0.1
LogFile = /var/log/netxms/nxagentd.log
FileStore = /var/lib/netxms/nxagentd

サーバー用設定ファイルを用意します。

# cat /etc/netxmsd.conf
DBDriver = sqlite.ddr
DBName   = /var/lib/netxms/sqlite.db
LogFile  = /var/log/netxms/netxmsd.log

ディレクトリおよびデータベース作成

ディレクトリを作成します。

# mkdir -p /var/log/netxms
# mkdir -p /var/lib/netxms/nxagentd

DBをSQLiteで作成します。

# nxdbmgr init /usr/share/netxms/sql/dbinit_sqlite.sql
# nxdbmgr check

起動

エージェントを起動します。

# systemctl start nxagentd.service

サーバーを起動します。

# systemctl start netxmsd.service

監視コンソールの起動

監視コンソールはWebアプリケーションで稼働するものとEclipseベースで稼働するものの2種類あります。
今回は手早くEclipseベースものをダウンロードページから入手して起動させます。Windows版の場合、圧縮ファイルを展開するとnxmc.exeというバイナリーがありますのでそちらを実行します。
起動するとサーバー名や認証方式を聞かれますので、
Server: netxmsdが起動しているサーバー(4701/tcpを使用します)
Login: admin
Authentication: Password
Password: netxms
を指定するとNetXMSサーバーに接続されます。

開始直後は監視項目はほとんど設定されていません。
Zabbixのように監視テンプレートが予め提供されているわけでもないようですので、ここから個々の監視項目を設定する必要がありそうです(テンプレート化は可能)。

Zabbixでディスク容量監視を1項目に限定するとしたら

 article  Comments Off on Zabbixでディスク容量監視を1項目に限定するとしたら
Dec 192010
 

Zabbixのディスク容量監視で取得できるキーにはtotal, used, free, pused, pfreeの5項目あります。
totalは別にして、容量不足だけを監視したいのならどれか1項目でもなんとかなるはずです。
最低限取得するとしたら、Zabbixの負荷的にどれが一番効率がいいのか、ソースを見てみました。

zabbix-1.8.3/src/libs/zbxsysinfo/linux/diskspace.c

        if (free)
                *free = (zbx_uint64_t)s.f_bavail * s.ZBX_BSIZE;
        if (used)
                *used = (zbx_uint64_t)(s.f_blocks - s.f_bfree) * s.ZBX_BSIZE;
        if (pfree)
        {
                if (0 != s.f_blocks - s.f_bfree + s.f_bavail)
                        *pfree = (double)(100.0 * s.f_bavail) /
                                        (s.f_blocks - s.f_bfree + s.f_bavail);
                else
                        *pfree = 0;
        }
        if (pused)
        {
                if (0 != s.f_blocks - s.f_bfree + s.f_bavail)
                        *pused = 100.0 - (double)(100.0 * s.f_bavail) /
                                        (s.f_blocks - s.f_bfree + s.f_bavail);
                else
                        *pused = 0;
        }

ちなみにs構造体に入ってくる値はstatvfs()かstatfs()でまとめて取得するようになっています。

計算の少なさでfreeの勝ち。次点はusedでした。
ただ閾値設定をファイルシステム毎にサイズ指定することになってしまうので、pfreeかpusedで値を取得、パーセンテージで監視するのが一番かもしれません。pfreeかpusedどちらかを取るならpfreeのほうが若干計算少ないです。

コードの単純さだけを比較すれば、サイズとパーセンテージではサイズが有利、freeかusedではfreeが有利ということになります。

Muninのpsプラグインでプロセス数を正確にカウント

 article  Comments Off on Muninのpsプラグインでプロセス数を正確にカウント
Jul 072010
 

Muninにはプロセス数をカウントしてくれるpsプラグインが用意されている。
これを使ってhttpdプロセス数をカウントする場合、手っ取り早くは以下のようにシンボリックリンクを用意してやればよい(CentOS 5.5上でRPMForgeからMuninパッケージをインストールしている場合)。

[root@localhost ~]# ln -s /usr/share/munin/plugins/ps_ /etc/munin/plugins/ps_httpd

この結果発行されるプロセス数確認コマンドは以下のようになる。

pgrep -f -l "httpd" | grep "httpd" | wc -l

しかしこれだけでは、vi httpd.confなどのプロセス分もカウントされてしまうため都合がよくない。
厳密にフルパス(/usr/sbin/httpd)でカウントするためには以下のようにnameパラメータで指定する。

[root@localhost ~]# cat /etc/munin/plugin-conf.d/ps
[ps_httpd]
env.name /usr/sbin/httpd

nameはpgrepでリストする際の引数になるので、厳密なフルパスでのプロセス数がカウントされるはず。

[root@localhost ~]# pgrep -f -l "/usr/sbin/httpd" | grep "/usr/sbin/httpd"
6545 /usr/sbin/httpd
6547 /usr/sbin/httpd
6552 /usr/sbin/httpd
6555 /usr/sbin/httpd
6561 /usr/sbin/httpd
6563 /usr/sbin/httpd
19819 grep /usr/sbin/httpd

おや?これでは途中のgrepコマンド分までカウントされてしまい都合がよくない。さらにregexパラメータで対象を絞り込むことにする。

[root@localhost ~]# cat /etc/munin/plugin-conf.d/ps
[ps_httpd]
env.name /usr/sbin/httpd
env.regex \w\W/usr/sbin/httpd

\w\W部分が先頭のプロセス番号とそのあとの空白にマッチするので、以下のような出力になる。

[root@localhost ~]# pgrep -f -l "/usr/sbin/httpd" | grep "\w\W/usr/sbin/httpd"
6545 /usr/sbin/httpd
6547 /usr/sbin/httpd
6552 /usr/sbin/httpd
6555 /usr/sbin/httpd
6561 /usr/sbin/httpd
6563 /usr/sbin/httpd

これで/usr/sbin/httpdのプロセス数を正確にカウントできるようになる(見落としがあったらゴメンなさい)。

■2010-07-18追記
RPMForgeで提供されているMunin 1.2系列では、以下のチケットで修正が入っている。
#73 (Bug i ps_ plugin on systems using pgrep) – Munin – Trac

そもそも最初のpgrepコマンドで後続のgrep分が出てくるのがおかしいのかとも思うが、パイプ先のファイルハンドルオープンを先におこなっている(=先に起動している)と考えればおかしいとも言い切れない。

ちなみにFedora 13ではpgrep出力に後続grepが含まれなくなっていた。

[root@localhost ~]# pgrep -f -l "/usr/sbin/httpd" | grep "\w\W/usr/sbin/httpd"
7861 grep /w/W/usr/sbin/httpd
[root@localhost ~]# pgrep -f -l "/usr/sbin/httpd"
1540 /usr/sbin/httpd
1664 /usr/sbin/httpd
1665 /usr/sbin/httpd
1666 /usr/sbin/httpd
1667 /usr/sbin/httpd
1668 /usr/sbin/httpd
1669 /usr/sbin/httpd
1670 /usr/sbin/httpd
1671 /usr/sbin/httpd

Fedora 13の場合、Muninがプラグインの修正が入っていることと、pgrepの出力もそもそも違うということで、env.regex指定しなくても正しいプロセス数がカウントできる。

ZABBIXのデータ収集間隔を最小300秒に一括変更

 article  Comments Off on ZABBIXのデータ収集間隔を最小300秒に一括変更
Nov 252009
 

ZABBIXでのデータ収集間隔はデフォルト5秒といったアイテムもあり、そのまま多数のノード監視に適用するとサーバー負荷が高くなりやすい。
面倒なのでitemsテーブルのdelay値を一括変更した。

# psql zabbix zabbix
Password for user zabbix: ********
psql (8.4.1)
Type "help" for help.

zabbix=> update items set delay=300 where delay<300;
UPDATE 4003
zabbix=> 

これで300秒未満に設定されているデータ収集間隔は全て300秒に変更される。

Debian sidのzabbixでlocalhostがモニタできない

 article  Comments Off on Debian sidのzabbixでlocalhostがモニタできない
Jan 162009
 

Debian sidにzabbixを一式入れて動かそうと思ったらlocalhostのモニタが開始できない。
Web画面上はConfiguration -> Hostsで以下のErrorが表示されている。

Got empty string from [localhost] IP [127.0.0.1] Parameter [agent.ping]

/etc/zabbix/zabbix_agentd.confをDebugLevel=5に変更してみたところ、/var/log/zabbix-agent/zabbix-agentd.logに以下のエラーメッセージが記録されていた。

Listener error: Connection from [::ffff:127.0.0.1] rejected. Allowed server is [127.0.0.1]

あー、そういうことか。解決策は以下のいずれか。

  • 接続許可のIPアドレスを追加する。
    /etc/zabbix/zabbix_agentd.confで

    Server=127.0.0.1,::ffff:127.0.0.1
    

    のように接続元サーバのIPアドレスを追加する。

  • ListenするIPアドレスをIPv4アドレスに限定する。
    /etc/zabbix/zabbix_agentd.confで

    ListenIP=127.0.0.1
    

    に設定する。

  • IPv6自体を無効化する。

今回は接続許可IPを追加して解決。

CentOS 5.2にmunin-nodeをインストール

 article  Comments Off on CentOS 5.2にmunin-nodeをインストール
Jan 102009
 

CentOS 5.2にmunin-nodeをインストールした際の記録。Muninのサーバー自体は別マシン(Debian)で動作している。
CentOS 5(RHEL5)用のRPMパッケージはRPMforgeで提供されているので、そちらを使う。

OS標準パッケージで導入

前提パッケージのうち、CentOS標準で提供されているものをインストール。

# yum install perl.x86_64 perl-libwww-perl perl-Digest-SHA1 perl-Socket6

RPMforgeからmuni-nodeをインストール

RPMforgeのリポジトリを追加する。

# wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm
# rpm -Uvh rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm

デフォルトでは使われないように無効化しておく(enabled = 0)。

# vi /etc/yum.repo.d/rpmforge.repo

munin-nodeパッケージをインストールする。

# yum --enablerepo=rpmforge install munin-node

munin-nodeの設定

munin-node.confにMuninが動作するサーバーのIPアドレスを追加(同一ホストで動かす場合は不要)。

# vi /etc/munin/munin-node.conf

サービス有効化、起動。

# chkconfig munin-node on
# service munin-node start
Starting Munin Node:                                       [  OK  ]

CentOS 5.2にOpenNMSをインストール

 article  Comments Off on CentOS 5.2にOpenNMSをインストール
Jan 042009
 

OpenNMSはJavaで書かれたウェブベースの監視ツール。pingやコネクションベースの死活監視やSNMPノードであれば性能監視もおこなえる。
ApacheのStatusモジュールで得られる情報や、JMXを使ってTomcat等のサーブレットコンテナの情報が収集できるところが特徴的。
データはRRDtoolと同様の方式で累積されるようだ(RRDtoolをJavaで実装してるっぽい)。
OpenNMS自体はJetty同梱版での単独動作させるか、もしくはTomcat等にデプロイして動かす。

今回はJetty同梱版をインストール。こちらのページに従えばおおよそ大丈夫。
Installation:Yum – OpenNMS

ソフトウェアのインストール

  • OpenNMS本体
    # rpm -Uvh http://yum.opennms.org/repofiles/opennms-repo-stable-rhel5.noarch.rpm
    # yum -y install opennms
    
  • PostgreSQL
    # yum -y install postgresql-server
    
  • iplike
    # yum -y install iplike.x86_64
    

    x86_64環境にi386版も導入すると、後述のinstall_iplike.shスクリプトが正しく動作しないので注意(libdirが/usr/lib64ではなく/usr/libになってしまうため)。

PostgreSQLの設定

  • ローカルアカウントでのアクセスを信頼するようにpg_hba.conf修正
     local   all         all                               trust
     host    all         all         127.0.0.1/32          trust
     host    all         all         ::1/128               trust
    

    とりあえずOpenNMSのインストールドキュメントにしたがってやっているが、実際にはもう少し制限したほうがいいと思う(opennmsデータベースだけtrustにするとか)。

  • データベース作成
    # service postgres start
    # su - postgres
    $ createdb -U postgres -E UNICODE opennms
    $ exit
    
  • iplike functionのインストール
    # su - postgres
    $ install_iplike.sh
    $ exit
    
  • Javaのパス設定
    # /opt/opennms/bin/runjava -S /usr/java/jdk1.5.0_15/bin/java
    
  • データベースの中身を作成
    # su - postgres
    $ /opt/opennms/bin/install -dis -l /usr/lib64
    $ exit
    

OpenNMSサービスを開始

# service opennms start
# chkconfig opennms on

管理画面(http://localhost:8980/opennms/)には、user=admin、password=adminでログインできる。