連載
» 2014年04月03日 18時00分 公開

fluentdの効果的な活用例と安定運用のポイント今さら聞けないfluentd〜クラウド時代のログ管理入門(3)(3/3 ページ)

[池田大輔(TIS株式会社),@IT]
前のページへ 1|2|3       

fluentdの安定運用に向けて

 実際にfluentdを使う場合には、ここまで紹介してきたようなfluentdの内部仕様を正しく理解した上で、ログをロストせず、確実にログ管理ができるよう運用していかなければなりません。そのためには、fluentdの稼働状況を把握することが非常に重要です。

 「fluentdのプロセスが正常に稼働しているか」「fluentd自体のログにエラーログが出力されていないか」といった基本的な状態監視に加え、fluentdの内部状態を把握することも有効です。

 fluentdには「in_monitor_agent」というfluentdの内部状態を監視するための標準組み込みインプットプラグインがあります。この章ではin_monitor_agentプラグインを使ってfluentdの内部状態を監視する方法について紹介します。

 in_monitor_agentを使うには、設定ファイルに以下の設定を加えます。

・設定例

<source>
  type monitor_agent
  bind 0.0.0.0
  port 24220
</source>

 この設定を記述することで、指定したIPアドレスとポートでWebサーバーが稼働し、fluentdの内部情報を参照できるようになります。後は以下のURLにアクセスすることで内部情報が取得できます。

フォーマット URL
テキストフォーマット http://fluentd稼働サーバーのIP:24220/api/plugins
JSONフォーマット http://fluentd稼働サーバーのIP:24220/api/plugins.json

 また、URLのGETパラメーターとして「tag」や「type」を指定し、必要な情報だけを取得することも可能です。具体的には以下のような情報を得ることができます。

{
    "plugins": [
        {
            "config": {
                "port": "24220", 
                "type": "monitor_agent"
            }, 
            "output_plugin": false, 
            "plugin_id": "object:3fad2a73a00c", 
            "type": "monitor_agent"
        }, 
        {
            "config": {
                "format": "apache", 
                "path": "/var/log/httpd/access_log", 
                "pos_file": "/var/log/td-agent/tmp/access.log.pos", 
                "tag": "apache.access", 
                "type": "tail"
            }, 
            "output_plugin": false, 
            "plugin_id": "object:3fad2c7e35ec", 
            "type": "tail"
        }, 
        {
            "buffer_queue_length": 3, 
            "buffer_total_queued_size": 12059, 
            "config": {
                "buffer_chunk_limit": "1m", 
                "buffer_path": "/tmp/fluent.*.buffer", 
                "buffer_queue_limit": "3", 
                "retry_limit": "5", 
                "retry_wait": "30s", 
                "type": "forward"
            }, 
            "output_plugin": true, 
            "plugin_id": "object:3fad2c7e24a8", 
            "retry_count": 4, 
            "type": "forward"
        }
    ]
}

 この例の場合、fluentdは2つのインプットプラグインと1つのアウトプットプラグインと共に稼働していて、バッファーにログデータが蓄積されていることが分かります。

 バッファーの状況については、以下の表の3つの値が取得できます。ログをロストしないよう、バッファプラグインの設定に合わせてそれぞれチェックが必要です。

メトリクス 概要 チェックすべき項目
buffer_queue_length バッファーに蓄積されているキューの数 buffer_queue_limitで設定した値を超えるとログデータがロストするので注意
buffer_total_queued_size バッファーに蓄積されている合計サイズ buffer_queue_limit×buffer_chunk_limitの値を超えるとログデータがロストするので注意
retry_count 再送を試みた回数 retry_limitで設定した回数を超えるとバッファーがリセットされるので注意
in_monitor_agentで監視できるバッファーに関するメトリクス

 以下は、OSSの監視ツールである「Zabbix」でバッファーの内部情報を監視した例です。

図1 fluentdの内部情報を、OSSの監視ツール「Zabbix」で視覚化

 この例では、Zabbixによって以下のRubyスクリプトを定期実行し、fluentdの内部情報をそれぞれ取得しています。

#!/bin/env ruby
require 'net/http'
require 'rubygems'
require 'json'
host, port, type, tag, metric = ARGV
response = Net::HTTP.start(host, port) do |http|
  http.get("/api/plugins.json?tag=#{tag}&type=#{type}")
end
body = JSON.parse(response.body)
body['plugins'].each do |plugin|
  if plugin['output_plugin']
    p plugin[metric]
    break
  end
end

 これにより、「ログの転送が不安定で、送信できなかったログデータがバッファーに蓄積されてしまっている」などの傾向を監視することができます。

まとめ

 ここまで3回に渡って、fluentdの基本から活用例まで紹介してきました。その柔軟さ故に、システムの安定稼働を実現するために便利に活用できることがお分かりいただけたでしょうか。

 fluentdでは、さまざまな用途向けのプラグインが多数公開され、その組み合わせにより幅広い環境で適用できます。逆にいうと、fluentdを有効に使うには、ログ管理の要件に応じてどのようにプラグインを活用するかの設計が重要ポイントとなります。

 柔軟性に富んでいるだけでなく、fluentdのコアでは、ログデータをロストすることなく安定して管理するための仕組みも充実しています。こういった側面からも利用できるシーンが多いのではないかと思います。

 ご存じの通り、「ログ」には非常に重要な情報が数多く含まれています。その管理をこれまでのように人力で頑張る代わりに、fluentdを用いてプログラム化し、高機能な管理を実現してみてはいかがでしょうか。

著者プロフィール

池田大輔

Twitter : @ike_dai

TIS株式会社戦略技術センター所属。社内向けシステムの保守運用業務を経験後、クラウド時代の効率的な統合運用管理をテーマに活動中。特に、OSSを駆使した運用のエコシステム実現を目指し、fluentdなどの導入や検証に取り組む。TIS戦略技術センターでは、技術検証成果などを技術ブログ『Tech-Sketch』にて発信中。著書:『Zabbix統合監視徹底活用 - 複雑化・大規模化するインフラの一元管理


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。