【Hinemos】アプリケーションログをfluentdで転送する

この記事は8年以上前に書かれたものです。 情報が古い可能性があります。

去る4月22日、Hinemos ver4.0.2がめでたくリリースされました。ver4.0.1から数多くの改善や不具合解消が行われていますので、できるだけバージョンアップしたいところです。

さて、Hinemos ver4.0では、アプリケーションログの監視方法がver3.2から変わっています。具体的には、

* ver3.2…監視対象ノード上のログ転送エージェントが、ログ増分をsyslogプロトコルで転送し、マネージャ側でマッチング
* ver4.0…監視対象ノード上のエージェントがログ増分のマッチングを行い、マッチしたものだけをマネージャへ伝達

という処理になっています。これにより、マネージャの負荷を軽減しているわけですが、「監視と同時にマネージャサーバへログを転送し、マネージャサーバ上でログを保存したい」という場合には、このver4.0の方式では不都合が生じてきます。

この状況に対応するために、今回はfluentdを使用して、アプリケーションログをマネージャへ転送するよう設定してみます。

1. fluentdのインストールと動作確認

fluentdはオープンソースのログ収集基盤ミドルウェアで、ログをJSONストリームとして転送、受信するという大きな特徴があります。またログの入出力や加工は、目的にあったプラグインを使用して行います。プラグインは標準でいくつか用意されているほか、公式サイトのプラグインディレクトリに多数公開されており、簡単に機能を追加することができます。

今回は、Hinemos ver4.0.2のエージェントサーバ上で監視しているアプリケーションログを、fluentdを使用してマネージャサーバへ転送し、マネージャサーバ上で保存するよう設定してみたいと思います。

まず、マネージャ、エージェントの両サーバ上で、fluentdインストール前の環境設定を行います。詳細は、fluendt公式サイトのBefore Installing Fluentdというドキュメントに記載されていますので、これに従って実施します。

次に、fluentdをインストールします。Red Hat Enterprise Linux 6.xの場合、Treasure Data社のサイトで公開されているシェルスクリプトをcurlでダウンロードしてシェルへ渡すだけで、そのままインストールすることができます(とても簡単です)。

インストールが完了したら、とりあえず両サーバとも起動してみます。サービス名はtd-agentです。

1

簡単に動作確認してみます。fluentdのデフォルトの設定では、HTTP(8888)でログメッセージを待ち受けして、受信した内容を自身のログファイル(/var/log/td-agent/td-agent.log)へ出力するようになっています。上記のドキュメントに従って、以下のコマンドを実行します。

早速、ログファイルを確認してみます。

期待どおり、ログが出力されていることが確認できました。

2. Hinemosによる、アプリケーションログの監視設定

ここでは、あらかじめエージェントサーバ上にインストールしたhttpdのエラーログ(/var/log/httpd/error_log)を、Hinemosで監視するよう設定します。便宜上、httpdがシャットダウンしたことを示すログ(caught SIGTERM, shutting down)が出力された場合に、危険のイベントを通知するようにしています。

設定できたら、httpdを再起動して、ログが検知されることを確認します。

期待どおり、エラーログがHinemosで監視されていることが確認できました。

3. fluentdでアプリケーションログを転送する

次は、ログ転送元、転送先両サーバでfluentdの設定変更を行います。
設定内容は次のとおりです。

設定ファイルを編集した後は、両サーバともtd-agentを再起動すれば設定が反映されますが、その前に転送元サーバ(エージェントサーバ)において、td-agentが転送対象のログファイルを読み取ることができるよう、権限を設定しておく必要があります。

これで、準備は完了です。転送元サーバのhttpdを再起動し、Hinemosでログが検知されるとともに、ログが転送先サーバへ転送されるかどうかを確認します。

まず、Hinemosで検知されたことを確認します。

通常どおり、Hinemosで検知されました。次に、転送先サーバへログが転送されたかどうかを確認します。

httpd_error.log.*というファイルが作成されています。これが、受信したログを出力したファイルだと思われます。中身を確認してみます。

フォーマットが多少異なりますが、確かにhttpd再起動時のログのようです。できれば、出力形式をオリジナルと同様にしたいところですが、今回、それを実現するための方法を見つけることができませんでした。どうやら、デフォルトのout_fileやその他のプラグインでは、そのための設定方法が用意されていないようですfluent-agent-lite、もしくはfile-alternativeプラグインを使用することで、未加工のログのまま転送できるようです。おって検証したいと思いますただ、また、プラグインはRubyで簡単に記述することができるようですので、そのようなプラグインを自作することで対処できるかもしれません。機会があれば、その方法も検討してみたいと思います。

以上、中途半端な内容になってしまいましたが、fluentdに関する話題を簡単にご紹介しました。


ご意見やお問い合わせについて

この記事へのご意見やお問い合わせについては、こちら(お問い合わせフォーム)もしくは
Hinemos営業担当【hsd-sales@atomitech.jp】までご連絡ください。

※お問い合わせフォームからご連絡の場合には、お問い合わせ内容で「Hinemosについて」を選択し、
 本文の冒頭に「Hinemos研究日記_【タイトル名】」とご記載ください。
※メールアドレスへご連絡の場合には、件名を「Hinemos研究日記_【タイトル名】」でご連絡ください。