ELK Stackでシステム監視 collectdでNTPサーバの情報収集

システム監視にcollectdを使ってホストの様々な情報を収集するなら、NTPサーバのoffsetやdelayといったタイミング情報も一緒に集めたいと思うことがあるかもしれません。タイムサーバの動作状況を把握することは、システム全体の安定性を高めるために重要な要素です。

今回は普段使い慣れているFreeBSDではなく、Debian系Linuxのホストにcollectdをインストールしてみます。Linux系のシステムはFreeBSDと設定が少し異なるので、これを機に手順を確認しました。

collectdのインストール

# apt-get update    ← パッケージ関係の情報更新
# apt-cache search collectd       ←collectdパッケージを検索
collectd - statistics collection and monitoring daemon   ←これを入れたい
collectd-core - statistics collection and monitoring daemon (core system)
collectd-dbg - statistics collection and monitoring daemon (debugging symbols)
collectd-dev - statistics collection and monitoring daemon (development files)
collectd-utils - statistics collection and monitoring daemon (utilities)
libcollectdclient-dev - client library for collectd's control interface (development files)
libcollectdclient1 - client library for collectd's control interface
fedmsg - Fedora messaging infrastructure system - general utilities
kcollectd - simple collectd graphing frontend for KDE
shinken-mod-collectd - Shinken mod-collectd module
shinken-mod-collectd-doc - Shinken mod-collectd module - Documentation
mtail - Extract monitoring data from logs for collection in a timeseries database
# apt-get install collectd    ←インストール
後略

collectdの設定

/etc/collectd/collectd.conf
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
Hostname "hoge.localnet"
LoadPlugin cpu
LoadPlugin df
LoadPlugin interface
LoadPlugin load
LoadPlugin memory
LoadPlugin network
LoadPlugin ntpd
LoadPlugin processes
LoadPlugin swap
<Plugin network>
    Server "192.168.12.1" "25826"         #ELK StackホストのIPアドレスとポート
    <Server "192.168.12.1" "25826">
    </Server>
</Plugin>
<Plugin ntpd>
        Host "127.0.0.1" 
        Port 123
        ReverseLookups false
        IncludeUnitID false
</Plugin>

collectdの再起動

# service collectd restart

collectdをインストールすると、インストール直後に自動でサービスが開始されることが多いと思われます。このため、サービスの「起動」ではなく、「再起動」を行います。コマンドラインで簡単に再起動を実行し、collectdが正しく動作していることを確認します。
ただし、パッケージによっては必ずしもインストール後に自動起動するとは限らないためプロセスを確認してサービスが起動されていない場合には「起動」を実行します。

上手くいかない場合

しかし、collectdをインストールしただけでは、ntpdの情報が収集できないことがよくあります。この場合、原因はcollectdの設定というよりも、ntpd側の設定にあることが多いです。特に最近のバージョンでは、初期設定が変更されていることがあり、そのままではcollectdが必要な情報を取得できないことがあります。

/etc/ntp.conf (追加1行)
enable mode7

ntpdを再起動します。

# service ntp restart

以下は、多くの場合は不要だと思われますが、もしcollectdのntpdモジュールが読み込まれないなら実行します。

# ldd /usr/lib/collectd/ntpd.so

設定が正しく行われていれば、/etc/ld.so.conf.d以下に必要な設定を書き込んでおくことで、次回以降のシステム起動時にスムーズに動作させることができます。こうすることで、再起動の度に手動で設定を行う手間が省けます。

collectdを再起動します。

# service collectd restart

動作確認

確認方法は以前の記事を参照してください。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
{
       "@timestamp" => 2018-02-09T00:28:58.786Z,
    "type_instance" => "GPS_NMEA",
           "plugin" => "ntpd",
             "host" => "ntp.localnet",
         "@version" => "1",
    "collectd_type" => "delay",
             "type" => "collectd",
            "value" => 0.00055908203125
}
{
       "@timestamp" => 2018-02-09T00:28:58.786Z,
    "type_instance" => "PPS",
           "plugin" => "ntpd",
             "host" => "ntp.localnet",
         "@version" => "1",
    "collectd_type" => "time_offset",
             "type" => "collectd",
            "value" => 0.0001209167316555977
}

最終的に、collectdの出力にntpdの情報が含まれていることを確認します。上の例では、ntpdのdelayとtime_offsetのデータを表示していますが、実際にはこれ以外にも多くの情報が収集されます。NTPソースとして参照している全てのNTPサーバがtype_instanceに表示されるため、かなりの量のデータを記録することにはご注意ください。

関連記事: