Nagiosマン、Nagiosガールのみなさん、こんにちは。 あなたは何台のNagiosを見てますか? どうやら私の部署では両手で足りない数のNagiosを抱えているということがわかりました。
Nagiosも数が増えてくると管理が大変で、こんな有様になりがちです。
最近これをこんな状態にしてだいぶ楽になりました。
こんな素晴らしいThrukの導入方法を紹介します。
Thrukとは
公式の説明は、Thruk Introductionにあります。
(日本語訳) Thrukは多種類の監視サービスのWebインターフェースとなるものです。 現在は、Livestatus APIを通して、Naemon,Nagios,Ichinga,Shinkenをサポートしています。 『ドロップイン』であるようにデザインされて、大規模環境およびユーザビリティ向上のためにオリジナルのほとんど100%の機能をカバーし、さらに追加機能もあります。
Thruk公式サイトにあるイメージ図です。
Livestatusとは
上記のようにThrukはLivestatus APIを通して、Nagiosにアクセスします。 では、Livestatusとは何なのか?Nagiosデータへのアクセスは一般的にどうされてきたか等の説明がLivestatus:How to access Nagios status dataにあります。 興味がある方は読んでみてください。(興味ない方は、読み飛ばしても構いません。)
ざっとあらすじを書くと、Nagiosデータへのアクセス方法は以下のように進化しているということです。
- 第1世代:status.datをパースする方法
- 第2世代:NDOというデータベースを使った方法
- 第3世代:Livestatusを使った方法
以下、日本語訳。
Nagiosステータスデータへのアクセス方法
今日のデータへのアクセス
ホストとサービスの現在のステータスにアクセスするための従来の方法は、Nagiosが作成するstatus.datファイルを読み込みパースすることでした。更新間隔はnagios.cfgファイル内のstatus_update_intervalで設定されます。典型的には10秒間隔です。もしあなたの環境が大規模になれば、CPU使用率とDiskIO使用率を減らすために間隔を長くする必要があるかもしれません。NagiosのWebインターフェースはstatus.datを表示のために使用します。
status.datをパースすることはAddOn開発者たちの間では一般的ではありません。多くの開発者はNDOというもう一つの方法を取ります。これはNEBモジュールであり、直接Nagiosプロセスに読み込まれ、UNIX socket経由で全てのステータス更新をヘルパープロセスに送信します。ヘルパープロセスはSQL文を作成し、MySQL、またはPostgreSQLデータベースを更新します。この方法にはstatus.datと比べていくつかの利点があります。
- データは10秒毎や20秒毎でなく、すぐに更新されます。
- アプリケーションはSQLを使って簡単にデータにアクセスできます。status.datをパースする必要はありません。
- 大規模環境においてはAddOnを使ったデータへのアクセスは、status.datを読み込む方法よりも高速です。
しかし、残念なことにNDOにはいくつかの欠点があります。
- 設定が複雑。
- 高速に増大するデータベースの管理が必要。
- データベースを最新に保つために多くのCPUリソースを食う。
- 定期的なデータベースの整頓のために数分、または1時間の間、Nagiosの停止が発生することがある。
未来
バージョン1.1.0からCheck_MKはステータスと過去のデータにアクセスするための完全に新しい方法を提供しています。それがLivestatusです。まるでNDOのようにLivestatusはNagios Event Broker APIを使用し、バイナリ・モジュールをNagiosプロセスに読み込ませます。しかし、LivestatusはNDOと違い、データを頻繁に書き込みにいきません。その代わりにsocketを開放し、データ取得のためにはオンデマンドにsocketに取りに行きます。
socketはホスト、サービス、または他のデータへのリクエストを受け付け、すぐに応答します。データはNagios内部のデータ構造から直接読み込まれます。Livestatusはデータのコピーを作成しません。バージョン1.1.2からLivestatusでNagiosのログファイルから過去のデータも取得できるようになりました。
この方法は素晴らしくシンプルというだけでなく、とても高速です。下記のようにいくつかの利点があります。
- NDOと異なり、Livestatusを使うことは、CPUにほとんど負荷をかけません。クエリーを処理するときだけ、わずかながらCPUが必要になりますが、それはNagiosの動作を止めてしまうものではありません。
- Livestatusでは、ステータスデータへのクエリー時にまったくDiskIOが発生しません。
- データへのアクセスがstatus.datのパースやSQLデータベースへのクエリーよりも、かなり高速です。
- 設定が不要で、データベースも不要です。管理が不要です。
- Livestatusは50000サーバ以上の大規模環境へスケールします。
- Livestatusを使って、あなたはNagios特有のデータへアクセスできます。たとえば、あるホストが現在notification状態にあるかどうか等です。
同時にLivestatusは自身のクエリ言語を提供します。それはシンプルで理解しやすく、SQLのような柔軟性などを持ちます。プロトコルは高速で、軽く、バイナリのクライアントは不要です。あなたはShell上で他のソフトを利用せずにアクセスできます。
現在
Livestatusはまだ若いテクノロジーです。しかし、既に多くのAddOnはLivestatusをデータソースとしてサポートしていたり、標準でそのように動作します。以下はLivestatusをサポートするAddOnのリストです。(不完全ですが)
- NagVis - www.nagvis.org
- NagiosBP - bp-addon.monitoringexchange.org
- Thruk - www.thruk.org
- CoffeeSaint - vanheusden.com/java/CoffeeSaint/
- RealOpInsight - realopinsight.com
- and of course: Check_MK Multisite!
もしあなたが、このリストが不完全だと思ったら、メールをください。
構築例
理屈はともかく、実際の構築方法です。
今回のサーバ環境
Thrukサーバ
Nagiosサーバ
- 台数:10台以上
- OS:AmazonLinuxおよび、CentOS6
- Nagiosバージョン:3系
Thrukサーバの構築手順
インスタンス作成
AWS EC2で構築したのですが、最新のAMIではPerl関係でエラーが発生し、上手くいきませんでした。 そこで古いAMIを使うことで対応しました。
RHEL6/CentOS6向けにパッケージされたものを使います。そのため、1つ前のバージョンですが、RHEL6/CentOS6と親和性の高いAmazon Linux AMI 2013.09を利用します。 参考ページ:【OTRS】Amazon Linux 2013.09にRPMで簡単インストール(mod_perl有効編) インスタンス作成時にAMIamzn-ami-hvm-2013.09.2.x86_64-ebs (ami-eb0c6fea)を選択し、User dataに以下を入力します。
#cloud-config repo_releasever: 2013.09 repo_upgrade: security
Thruk自体とは関係ないのですが、今回の構築で一番手こずったのは、ここでした。
Thrukのインストール
$ sudo wget http://download.thruk.org/pkg/v1.86-4/rhel6/x86_64/thruk-1.86-4.rhel6.x86_64.rpm $ sudo yum install thruk-1.86-4.rhel6.x86_64.rpm
/etc/thruk/thruk_local.conf
thrukの設定ファイルです。下記の1行を追記してください。 (なお、後程GUIで設定すると、いろいろと追加されますが、それはそのままで)
use_service_description = 1
デフォルトでは、Nagiosのservice定義(define service)内のdisplay_nameがThrukの画面で表示されます。 display_nameが設定されていない場合は、template名が表示されるようです。 「use_service_description = 1」が入っていると、service_descriptionで表示されるようになります。
他に何か上手くいかないことがあれば、こちらのマニュアルを見ると良さそうです。 http://www.thruk.org/documentation/configuration.html
サービス起動
$ sudo service httpd restart $ sudo chkconfig httpd on
Nagiosサーバ側の設定
ThrukからNagiosデータにアクセスできるようにLivestatusを組み込んでいきます。
livestatusモジュールのインストール
Setting up and using Livestatusを参考に下記の流れでインストールしました。
$ sudo yum install -y gcc-c++ make $ wget 'http://mathias-kettner.de/download/mk-livestatus-1.2.6.tar.gz' $ tar xzf mk-livestatus-1.2.6.tar.gz $ cd mk-livestatus-1.2.6 $ ./configure $ make $ sudo make install
/etc/nagios/nagios.cfg
1行だけ追記します。
broker_module=/usr/local/lib/mk-livestatus/livestatus.o /tmp/live.sock
Nagiosの再起動
$ sudo service nagios restart
/etc/xinetd.d/livestatus
Thrukから、TCP/6557でアクセスしてきます。 xinetdで待ち受けるので、ファイルを作成します。
service livestatus { type = UNLISTED port = 6557 socket_type = stream protocol = tcp wait = no # limit to 100 connections per second. Disable 3 secs if above. cps = 100 3 # set the number of maximum allowed parallel instances of unixcat. # Please make sure that this values is at least as high as # the number of threads defined with num_client_threads in # etc/mk-livestatus/nagios.cfg instances = 500 # limit the maximum number of simultaneous connections from # one source IP address per_source = 250 # Disable TCP delay, makes connection more responsive flags = NODELAY user = nagios server = /usr/local/bin/unixcat server_args = /tmp/live.sock # configure the IP address(es) of your Nagios server here: only_from = Your Thruk Server IPaddr disable = no
xinetdのインストールと再起動
$ sudo yum install xinetd $ sudo service xinetd start
なお、/etc/hosts.allowでアクセス制限をかけている場合は、以下のような感じで許可してください。
unixcat :Your Thruk Server IPaddr
これで完了です。
Thrukにログイン
ブラウザでThrukにログインできるはずです。
- URL: http://Your Thruk Server IPaddr/thruk/
- デフォルトアカウント/パスワード: thrukadmin/thrukadmin
ログイン後の画面左下の方のメニューから、以下の設定をしましょう。
Config Tool -> User settings
ここでユーザの追加・削除・変更・権限設定ができます。
Config Tool ->Backends / Sites
ここでNagiosサーバを登録していきます。
- Name: 適当な名前
- Type: livestatus
- Connection: Your Thruk Server IPaddr:6557
- Hidden: No
- Section: 空白のまま
たくさんのNagiosを登録しましょう!
HostsやServicesなどをクリックすると、各Nagiosに登録されているものが全部見えているはずです。 あとはほとんどNagiosと同じ見た目なので、なんとなくわかると思います。
Enjoy Thruk! Enjoy Nagios!