4.4. fluentd を利用したロギング¶
標準状態では、ログは各 AP サーバ・デベロッパコンソールサーバ毎に個別に出力されます。
fluentd を使用すると、ログを一箇所に集約したり、出力先を MongoDB にしたりといった ことが可能になります。
4.4.1. fluentd のインストール¶
fluentd 1.0 以上 (td-agent3以上)をインストールしてください。
fluentd サイト の Installation の手順に従いインストールします。
RHEL7 の場合の手順は以下の通りです。
$ curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent3.sh | sh
$ (設定ファイルを編集)
$ sudo systemctl start td-agent.service
また、MongoDB に出力するため fluent-plugin-mongo をインストールします。
$ sudo /usr/sbin/td-agent-gem install fluent-plugin-mongo
注意
- Fluentd 起動の初期化処理では、MongoDB との接続確認が実施されるため、MongoDB を先に起動してくさい。
- OS の起動に伴うサービス(デーモン)の自動起動にも、Fluentd より、MongoDBを先に起動できるように chkconfig で起動スクリプトの起動順序を指定する必要です。 例えば、Fluentdの場合、起動スクリプト( /etc/rc.d/init.d/td-agent )に、"# chkconfig: [ランレベル] [起動順] 「終了順」"で指定し、スクリプトを再登録します。
4.4.2. fluentd の利用設定¶
BaaSサーバ側 logback の設定¶
BaaS サーバの logback.properties プロパティファイルを編集し、 logback.types に "FLUENT" を指定してください。
logback.properties ファイルの詳細は ログ設定 を参照してください。
ログの出力先はデフォルトでは localhost:24224 に設定されています。 出力先を変更した場合は、プロパティファイルに以下の値を指定してください。
- logback.fluent.host : ホスト名
- logback.fluent.port : ポート番号
fluentd の設定¶
以下は、MongoDB の Capped collection にログを格納するための fluentd 設定ファイルの例です。 fluentd 設定ファイルは /etc/td-agent/td-agent.conf に配置します。
<source>
@type forward
port 24224
</source>
# conf.d ディレクトリから設定を読み込む
@include conf.d/*.conf
# フェイルセーフ: 上記のルールにマッチしないログは標準出力に出力する
<match **>
@type stdout
</match>
注意
既存の設定ファイルに追記を行う場合、上記設定の <source>~</source> と同等の設定が 既に存在している場合があります。この場合は <source>~</source> は追加しないでください(設定が重複していると、td-agent の起動が失敗します)。
さらに、/etc/td-agent/conf.d ディレクトリを作成し、以下の内容のファイルを baas-system.conf というファイル名で格納します。本ファイルは上記 td-agent.conf から include で読み込まれます。
<match nebula.{api-server,console-server,cloudfn-server-manager,java-server}>
@type mongo
host mongodb.example.com
port 27017
database baas_log
collection nebula_systemlog
capped
capped_size 1024m
# 認証(MongoDB認証有効時のみ、以下の項目追加)
#user baas
#password Passw0rD
#auth_source admin
<buffer>
flush_interval 10s
</buffer>
</match>
- host には MongoDB サーバのホスト名/IPアドレスを指定してください。
- port には MongoDB サーバのポート番号を指定してください。
上記設定により、APIサーバ、コンソールサーバ、Cloud Functions 関連のシステムログが MongoDB に出力されます。
注意
- 必ずデータベース名は "baas_log", コレクション名は "nebula_systemlog" としてください。システムログ取得 REST API はこのコレクションからログを取得します。
- MongoDB認証有効時のみ、user、passwordとauth_sourceの項目を追記し、MongoDB認証用ユーザ、パスワードと認証データベース名を設定してください。
- 認証データベース名とは、認証を行うユーザーが登録されているデータベースの名称のことです。
- fluentd 1.0以上(td-agent3以上)の場合、MongoDB Output Plugin のインストールが事前に必要です。
fluentd および fluentd 設定ファイルの詳細は、fluentd の 公式サイトのドキュメントを参照してください。
MongoDB レプリカセットを使用する場合¶
レプリカセットを使用する場合(シャーディングなし)は、設定ファイルの書式が若干変わります。 詳細は MongoDB ReplicaSet Output Plugin を参照してください。
<match nebula.{api-server,console-server}>
# @type を以下記述に変更
@type mongo_replset
# nodes にホスト/ポート番号を記述
nodes localhost:27017,localhost:27018,localhost:27019
# pluginのv0.8以降ではreplica_setにレプリカセット名を指定
# v0.8未満の場合は不要
replica_set my_replica_set_name
# host, port は記述削除
# その他の記述は同じ
...
</match>