Fluentd + Elastichsearch + Kibana(4)Fluentdでホスト名を追加する

Fluentdでログを転送する際、ホスト名も付加したい。そんなときは、標準のfilterプラグインを使って、以下の設定を加える。

sudo vi /etc/td-agent/td-agent.conf

<filter **>
  @type record_transformer
  <record>
    hostname ${hostname}
  </record>
</filter>

このときに、matchタグよりも上位に記述しないと動作しないので注意が必要である。

Fluentd + Elastichsearch + Kibana(3)FluentdからElasticsearchへの転送

Fluentdの設定

前回までにFluentd + Elastichsearch + Kibanaの環境設定と、ログの送信元となるMacの設定を行った。

今回は、受信したデータをElasticsearchに転送する処理を扱う。設定は以下の通り。

sudo vi /etc/td-agent/td-agent.conf

<source>
  @type forward
</source>

<match example.app>
  type elasticsearch
  host localhost
  port 9200
  type_name exampleapp
  logstash_format true
</match>

type_nameは、Elasticsearchタイプ名を指定する。識別できる文字列なら好きに指定して良いようだ。logstash_formatは、logstashフォーマットで出力するオプションで、とりあえず今回はtrueにしておく。

Fluentdの再起動

Fluentdを再起動する。

sudo systemctl restart td-agent

Kinabaにアクセス

Kibanaにアクセスすると、データの受信に伴って、インストール直後とは表示が変わっている。ログインすると受信データが確認できる。

https://XXX.XXX.XXX.XXX:5601

  • インストール直後
    Kibana
  • データ入力完了後
    Kibana

Fluentd + Elastichsearch + Kibana(2)MacでFluentdを動かそう

インストールと起動

MacにFluentdをインストールし、Macで動くアプリのログを、Elastichsearchが動くサーバへと転送する。FluentdのダウンロードページにMac用のdmgイメージがあるので、これをダウンロードし実行する。

Mac Fluentd dmg

Macのデーモンは、launchctlと呼ばれるツールで管理される。launchctlは、設定ファイル(plist)のロードによってデーモンを登録し、デーモンの開始や終了など制御する。通常は、デーモンの登録を行った上で、デーモンの開始を行うという流れとなるが、設定ファイル内で「RunAtLoad = true」が設定されている場合は、ロードと同時にデーモンが起動され、OSの起動時にも自動的にデーモンは起動する。

Fluentd(td-agent)の設定ファイルは、「RunAtLoad = true」に設定されているため、設定ファイルをロードするだけで、デーモンは起動され、自動起動に設定される。

launchctl load /Library/LaunchDaemons/td-agent.plist 

元データの設定

Fluentdは、元データの指定と転送先の指定が必要となる。元データは以下のような種類を指定できる。

ログファイルから取得する

転送ログの元データを指定する。設定するパラメータは以下の通り。

パラメータ 意味
type tail
path ログファイルのパス
pos_file 読み込んだ位置を記憶しておくファイル
tag ログの識別子
<source>
  type tail
  format apache
  path /var/log/httpd-access.log
  tag td.apache.access
</source>

httpから取得する

http通信によってデータを取得する。設定するパラメータは以下の通り。

パラメータ 意味
type http
port ポート番号

tagは、URLヘッダで指定する。

<source>
  type http
  port 8888
</source>

実行したコマンドの標準出力から取得する

コマンドの実行によってデータを取得する。設定するパラメータは以下の通り。

パラメータ 意味
type exec
command 実行するコマンド
tag ログの識別子

他のFluentdから取得する

他のFluentdから転送されたデータを受信する。設定するパラメータは以下の通り。

パラメータ 意味
type forward
<source>
  type forward
</source>

設定例

今回は、Macで動作するアプリが出力する以下の形式のログを元データに指定する。

2016-08-11 04:56:31.518 exampleApp[321:2853] <Normal> "Application is started."
2016-08-11 04:56:31.518 exampleApp[321:2853] <Normal> "Application is initialized."
2016-08-11 04:56:31.518 exampleApp[321:2853] <Normal> "Data is received: apple=3, orange=4"
2016-08-11 04:56:31.518 exampleApp[321:2853] <Normal> "Application will be terminated."

Fluentdは様々なログをJSON形式に変換した上で転送を行う。ログの変換を行うためには、どのようなフォーマットでログが記述されているかを正規表現でFluentdに教えてあげる必要があり、この設定が最も難しい。今回のログは、スペース区切りで、[日付][プロセス情報][ステータス][メッセージ]の情報が並んでいるので、正規表現で表現すると以下のようになる。

sudo vi /etc/td-agent/td-agent.conf

<source>
  type tail
  path /tmp/exampleApp.log
  pos_file /var/log/td-agent/exampleApp.log.pos
  tag example.app
  format /(?<time>[^\]]*) (?<process>.*) <(?<stat>.*)> "(?<message>.*)"/
  time_format %Y-%m-%d %H:%M:%S.%N
</source>

出力先の設定

Fluentdは、出力先も様々な方法を選択できる。

標準出力に転送

データを標準出力に転送する。設定するパラメータは以下の通り。

パラメータ 意味
type stdout
<match **>
  type stdout
</match>

ファイルに転送

データをファイルに転送する。設定するパラメータは以下の通り。

パラメータ 意味
type file
path 出力ファイルのパス
time_slice_format ファイル名のサフィックス
time_slice_wait ファイルを分割する時間単位
<match **>
  type file
  path /var/log/fluent/exampleApp.export
  time_slice_format %Y%m%d
  time_slice_wait 10m
</match>

他のFluentdに転送

データを他のFluentdに転送する。設定するパラメータは以下の通り。

パラメータ 意味
type forward
server 転送先サーバの情報

今回は、Macアプリのログを、Elasticsearchを導入した他のサーバに転送したいので、以下の設定とした。

<match **>
  type forward
  <server>
    name server_1
    host XXX.XXX.XXX.XXX
  </server>
</match>

設定ファイル

設定ファイルは以下となった。

sudo vi /etc/td-agent/td-agent.conf

<source>
  type tail
  path /tmp/exampleApp.log
  pos_file /var/log/td-agent/exampleApp.log.pos
  tag example.app
  format /(?<time>[^\]]*) (?<process>.*) <(?<stat>.*)> "(?<message>.*)"/
  time_format %Y-%m-%d %H:%M:%S.%N
</source>

<match **>
  type forward
  <server>
    name server_1
    host XXX.XXX.XXX.XXX
  </server>
</match>

Fluentdを再起動して新たな設定ファイルを読み込む。このとき、/var/log/td-agent/td-agent.logに正常なログが吐き出されていたらOK!

launchctl unload /Library/LaunchDaemons/td-agent.plist 
launchctl load /Library/LaunchDaemons/td-agent.plist 

参考になるページ

Fluentd + Elastichsearch + Kibana(1)CentOS7で環境構築する

Fluentdで収集したログをElastichsearch + Kibanaに入れて可視化する。ここを参考にしながら、まずはCentOS7に環境構築してみる。

Elastichsearch

OpenJDKのインストール

Elasticsearchは、インストールにJAVA7以降(Java8 Update 20以降、もしくはJava7 Update 55以降)のJDKを必要とする。Oracle JavaもしくはOpen JDKがサポートされているようなので、今回はOpenJDK8をインストールする。

sudo yum -y install java-1.8.0-openjdk

Elastichsearch のインストール

RPMからElastichsearchをインストールする。

sudo rpm -ivh https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/rpm/elasticsearch/2.3.5/elasticsearch-2.3.5.rpm

インストールが終わると以下のように忠告されるので、

### NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using systemd
 sudo systemctl daemon-reload
 sudo systemctl enable elasticsearch.service
### You can start elasticsearch service by executing
 sudo systemctl start elasticsearch.service

言われた通りにコマンドを実行し、Elastichsearchを起動。

sudo systemctl daemon-reload
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch

Fluentd

Fluentdをインストール

自動インストールスクリプトが用意されているので、これを実行する。現在、Fluentdは2.X系で開発が進められているので、td-agent2を指定してインストールを行う。

sudo curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh

FluentdとElastichsearchとの連携

FluentdからElastichsearchへデータを受け渡すためのプラグインをインストールする。

sudo yum -y install gcc libcurl-devel
sudo td-agent-gem install fluent-plugin-elasticsearch

Fluentdを起動

sudo systemctl enable td-agent
sudo systemctl start td-agent

Kibana

Kibanaのインストール

Elastichsearchのリポジトリを追加する。

sudo vi /etc/yum.repos.d/elastic.repo

[kibana-4.4]
name=Kibana repository for 4.4.x packages
baseurl=https://packages.elastic.co/kibana/4.4/centos
gpgcheck=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1

yumからインストールする。

sudo yum install kibana -y

Kibanaを起動

sudo systemctl enable kibana
sudo systemctl start kibana

Kibanaを起動

これでインストール作業が全て完了。
インストールしたサーバの5601ポートにアクセスするとこんなページが見れるはず。

https://XXX.XXX.XXX.XXX:5601

Kibana