FANCOMI Ad-Tech Blog

株式会社ファンコミュニケーションズ nend・新規事業のエンジニア・技術ブログ

たくさんのNagiosを抱えるあなたのためのThruk

Nagiosマン、Nagiosガールのみなさん、こんにちは。 あなたは何台のNagiosを見てますか? どうやら私の部署では両手で足りない数のNagiosを抱えているということがわかりました。

Nagiosも数が増えてくると管理が大変で、こんな有様になりがちです。

before_thruk

最近これをこんな状態にしてだいぶ楽になりました。

after_thruk

こんな素晴らしいThrukの導入方法を紹介します。

Thrukとは

公式の説明は、Thruk Introductionにあります。

(日本語訳) Thrukは多種類の監視サービスのWebインターフェースとなるものです。 現在は、Livestatus APIを通して、Naemon,Nagios,Ichinga,Shinkenをサポートしています。 『ドロップイン』であるようにデザインされて、大規模環境およびユーザビリティ向上のためにオリジナルのほとんど100%の機能をカバーし、さらに追加機能もあります。

Thruk公式サイトにあるイメージ図です。

arch_preview

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のリストです。(不完全ですが)

もしあなたが、このリストが不完全だと思ったら、メールをください。

構築例

理屈はともかく、実際の構築方法です。

今回のサーバ環境

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!