ELK Stackでシステム監視 collectdで監視対象ホストからデータ収集

ELK Stackのインストールの実質的な続き

監視対象ホストからELKスタックの入っている監視用サーバにデータを送る方法としてはいろいろあるけど今回はエージェントとしてcollectdを使うことにする。依存関係を満たすために余計ソフトウエアを大量にインストールされるのが嫌なのと簡単だからという理由でcollectdを採用したけど、流行りなのはbeatsとかかも。Perlをインストール済みならcollectd、Go言語をインストール済みならbeatsでどうぞ。

collectdのインストール

# cd /usr/ports/net-mgmt/collectd5
# make install clean
または
# pkg install net-mgmt/collectd5

せっかくportsでインストールするならconfigオプションで追加で欲しい機能に関係する項目にもチェックする。例えばCURLにチェックしてビルドするとApacheやNginxプラグインでアクセス状況を収集できるようになる。逆にCURLにチェックしないでビルドするとApache, Nginxプラグインは利用できない。configオプションの画面にアドバイスがあるので良く見ておく。
なので、pkgでインストールすると使えないプラグインが多々。cillectdでいろいろな情報を収集するならports推奨。

各プラグインがどのようなものかを確認するならcollectdのWikiで。

collectdのインストール

/usr/local/etc/collectd.conf
Hostname "hoge.example.com"  #collectdを入れたホストの名前等
LoadPlugin df                                     #ディスク使用量
LoadPlugin interface                         #ネットワークIF
LoadPlugin load                                 #ロードアベレージ
LoadPlugin memory                         #メモリ
LoadPlugin network                         #ELKスタックとの通信用
LoadPlugin processes                      #プロセス数
<Plugin interface>
    Interface "em0"                        #監視するネットワークIF名
    Interface "ng0"                        #複数のIFがあって監視するなら必要なだけ並べる
    IgnoreSelected false
</Plugin>
<Plugin network>
    Server "192.168.12.1" "25826"        ←ELKスタックのサーバIPアドレスとポート
    <Server "192.168.12.1" "25826">    ←ELKスタックのサーバIPアドレスとポート
    </Server>
</Plugin>

LoadPlugin hogeでhogeプラグインを有効にした場合でも<Plugin hoge>は変更の必要があるとか何か値を設定しなければならないとかがなければ書かなくて良い。

/etc/rc.conf (追加)
#collectd_enable="YES"
collectdmon_enable="YES"

collectdは結構簡単に停まってしまうのでcollectdmonに監視させ、collectdが落ちても再起動させるようにする。

2018年2月24日追記: psで起動プロセスを見る限りではcollectdmonだけを有効にしておくので良さそう。逆にcollectd_enableをyesにしているとcollectdが2重に起動しているっぽい。だからcollectd_enableをコメントにしたが、それが正しいかは不明。

ファイアウォールでガチガチならELKスタックのサーバ宛のUDPのポート25826の通信を許可する。(ELKスタックのサーバ側のFWも開けること)

collectdの起動

# service collectdmon start

collectdmonを起動してやればcollectdも一緒に起動する。
逆に停止させる際はcollectdmonを停止してからcollectdを停止する。でないと、collectdを停止してもcollectdmonがcollectdを再起動させてしまう。

逆にcollectdmonが起動した状態でcollectdを再起動させても起動時のメッセージが表示されない。collectdの起動時のメッセージはプラグインの利用可否やエラー情報など設定変更時には有用な情報なので、新しいプラグインを使うときや大きな変更を行った際は一時的にcollectdmonを停めて手動でcollectdの起動・停止・再起動を行う方が良いこともある。

以上を監視対象にしたいホストに入れて回る。

logstashでcollectdからのデータを受ける設定

/usr/local/etc/logstash/logstash.conf
input {
    #Collectd
    udp {
        port => 25826
        buffer_size => 65536  #←初期値 調整する
        workers => 4               #初期値 2
        queue_size => 2000  #←初期値 調整する
        codec => collectd { }
        type => "collectd"
    }
}

filter {
}

output {
    #stdout { codec => rubydebug }   #動作確認用
    elasticsearch { hosts => [ "localhost:9200" ] }
}

collectdからのデータ流入確認方法

監視対象ホストにcollectdを入れた時は求めているデータが正しく届いているか確認するべき。
そこで、logstashのテスト用の設定ファイルを1つ用意。

/usr/local/etc/logstash/test.conf
input {
    #Collectd
    udp {
        port => 25827           #25826またはその他使用中ポートでなければ可
        buffer_size => 65536  #←初期値 調整する
        workers => 4               #初期値 2
        queue_size => 2000  #←初期値 調整する
        codec => collectd { }
        type => "collectd"
    }
}

filter {
}

output {
    stdout { codec => rubydebug }   #動作確認用
}

テスト用はinput側ポートで25826以外で待ち受けるようにする。
出力は標準出力(コンソール)へ。

/usr/local/etc/collectd.conf (監視対象ホストのcollectdの設定変更)
<Plugin network>
    Server "192.168.12.1" "25827"        ←ELKスタックのサーバIPアドレスとポート
    <Server "192.168.12.1" "25827">    ←ELKスタックのサーバIPアドレスとポート
    </Server>
</Plugin>

logstashのテスト用設定の待受ポートに合わせる。設定変更したらcollectdを再起動。
テストが終わったらポート番号を戻してもう一度collectdを再起動をお忘れなく。

#  /usr/local/logstash/bin/logstash --path.data /tmp -f /usr/local/etc/logstash/test.conf

別にlogstashが動いてて、テスト用に別プロセスのlogstashを動かす場合は--path.dataで書き込み可能なテンポラリディレクトリを指定しないと動かないらしい。(logstash 5.6以降?)
コマンド入力後すぐは反応がない(筈)ので暫く待ってから)エラーが出ていなくてcollectdが集めた情報が表示されればOK.
何故待ち受けポート番号を変えるか。それはlogstashでポート25826で待ち受けていながら更にテスト用のlogstashを実行してポート25826を使おうとすると
UDP listener died {:exception=>#<SocketError: bind: name or service not known> というエラーになる筈だから。
(エラーになるのを悩んでる人が結構いるみたい)

ファイアウォールでcollectdを入れたホストからのUDP ポート25826宛を受けられるように開けておく。(必要に応じてテスト用のポートも)

logstashの再起動

# service logstash restart

これでcollectdで収集した情報がelasticsearchに流れ込む。
情報の活用は次回以降。

関連記事:


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です