Lubuntu 16.04 で fluentd ( td-agent ) を利用する 1 – fluent-cat による単体動作確認

概要

様々なデータを JSON 形式で利用しやすく加工してデータ収集するための軽量なデータ収集ソフトウェア。
Fluentd の安定版配布パッケージを td-agent と呼ぶ。Fluentd 自体は ruby gem として利用可能だが、init スクリプトなどが含まれていない。td-agent には init スクリプトの他、デフォルトでよく利用されるプラグインが含まれている。td は Treasure Data の略と思われる。

利用可能な td-agent の一覧を確認すると Ubuntu 16.04 用の td-agent が利用できることがわかる。今回はこれを利用するが、文中での表記は Fluentd で統一する。Fluentd はスタンドアロンインストールした状態でも動作し1台でも動作確認ができ、クライアントにもサーバにもなることが可能なアーキテクチャになっている。Fluentd サーバは通常 2 台で冗長化する。

プラグインには入力用と出力用があり、入力用プラグインはログファイル ( in_tail ) をはじめ TCP/IP経由 ( in_forward )、syslog ( in_syslog )などがある。出力用プラグインは、fluentd サーバへのログ転送 ( out_forward )、標準出力 ( out_stdout )、ログファイル ( out_file )、MongoDB ( out_mongo )、Amazon S3 ( out_s3 )などがある。

デフォルトで利用するポートは、[in|out]_forward プラグインで tcp/24224 、in_http プラグインで tcp/8888 ポートを LISTEN する。また、debug_agent プラグインがデフォルトの設定に含まれておりローカルポートとして、tcp/24230 を利用する。

インストール

以下のコマンドを実行すると、td-agent パッケージがインストールされ、UNIX ユーザ td-agent と td-gent グループが追加作成されます。デフォルトの設定ファイルも /etc/td-agent/td-agent.conf に作成されます。バージョンは 0.12.29 となっています。オプションなしで実行すると導入済みプラグインの一覧とバージョン情報などが標準出力されます。


$ curl -L https://toolbelt.treasuredata.com/sh/install-ubuntu-xenial-td-agent2.sh | sh
$ td-agent --version
td-agent 0.12.29
$ /etc/init.d/td-agent status
● td-agent.service - LSB: data collector for Treasure Data
   Loaded: loaded (/etc/init.d/td-agent; bad; vendor preset: enabled)
   Active: active (running) since 月 2016-10-17 23:35:47 JST; 2 days ago
     Docs: man:systemd-sysv-generator(8)
  Process: 10381 ExecStart=/etc/init.d/td-agent start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/td-agent.service
           ├─10405 /opt/td-agent/embedded/bin/ruby /usr/sbin/td-agent --log /var/log/td-agent/td-agent.log --daemo...
           └─10408 /opt/td-agent/embedded/bin/ruby /usr/sbin/td-agent --log /var/log/td-agent/td-agent.log --daemo...

10月 17 23:35:44 tk-tam-op1 systemd[1]: Starting LSB: data collector for Treasure Data...
10月 17 23:35:47 tk-tam-op1 td-agent[10381]: Starting td-agent:  * td-agent
10月 17 23:35:47 tk-tam-op1 systemd[1]: Started LSB: data collector for Treasure Data.
$ td-agent
2016-10-20 22:31:50 +0900 [info]: reading config file path="/etc/td-agent/td-agent.conf"
2016-10-20 22:31:50 +0900 [info]: starting fluentd-0.12.29
2016-10-20 22:31:50 +0900 [info]: gem 'fluent-mixin-config-placeholders' version '0.4.0'
2016-10-20 22:31:50 +0900 [info]: gem 'fluent-mixin-plaintextformatter' version '0.2.6'
2016-10-20 22:31:50 +0900 [info]: gem 'fluent-plugin-kafka' version '0.3.1'
2016-10-20 22:31:50 +0900 [info]: gem 'fluent-plugin-mongo' version '0.7.15'
2016-10-20 22:31:50 +0900 [info]: gem 'fluent-plugin-rewrite-tag-filter' version '1.5.5'
2016-10-20 22:31:50 +0900 [info]: gem 'fluent-plugin-s3' version '0.7.1'
2016-10-20 22:31:50 +0900 [info]: gem 'fluent-plugin-scribe' version '0.10.14'
2016-10-20 22:31:50 +0900 [info]: gem 'fluent-plugin-td' version '0.10.29'
2016-10-20 22:31:50 +0900 [info]: gem 'fluent-plugin-td-monitoring' version '0.2.2'
2016-10-20 22:31:50 +0900 [info]: gem 'fluent-plugin-webhdfs' version '0.4.2'
2016-10-20 22:31:50 +0900 [info]: gem 'fluentd' version '0.12.29'
2016-10-20 22:31:50 +0900 [info]: adding match pattern="td.*.*" type="tdlog"
2016-10-20 22:31:50 +0900 [error]: config error file="/etc/td-agent/td-agent.conf" error="out_file: `/var/log/td-agent/failed_records.20161020_0.log` is not writable"
2016-10-20 22:31:50 +0900 [info]: process finished code=256
2016-10-20 22:31:50 +0900 [warn]: process died within 1 second. exit.

設定

<source> と <match> ディレクティブがあり、type でプラグインを指定します。

デフォルトの設定内容


####
## Output descriptions:
##

# Treasure Data (http://www.treasure-data.com/) provides cloud based data
# analytics platform, which easily stores and processes data from td-agent.
# FREE plan is also provided.
# @see http://docs.fluentd.org/articles/http-to-td
#
# This section matches events whose tag is td.DATABASE.TABLE

  @type tdlog
  apikey YOUR_API_KEY

  auto_create_table
  buffer_type file
  buffer_path /var/log/td-agent/buffer/td

  
    @type file
    path /var/log/td-agent/failed_records
  


## match tag=debug.** and dump to console

  @type stdout


####
## Source descriptions:
##

## built-in TCP input
## @see http://docs.fluentd.org/articles/in_forward

  @type forward


## built-in UNIX socket input
#
#  @type unix
#

# HTTP input
# POST http://localhost:8888/?json=
# POST http://localhost:8888/td.myapp.login?json={"user"%3A"me"}
# @see http://docs.fluentd.org/articles/in_http

  @type http
  port 8888


## live debugging agent

  @type debug_agent
  bind 127.0.0.1
  port 24230


####
## Examples:
##

## File input
## read apache logs continuously and tags td.apache.access
#
#  @type tail
#  format apache
#  path /var/log/httpd-access.log
#  tag td.apache.access
#

## File output
## match tag=local.** and write to file
#
#  @type file
#  path /var/log/td-agent/access
#

## Forwarding
## match tag=system.** and forward to another td-agent server
#
#  @type forward
#  host 192.168.0.11
#  # secondary host is optional
#  
#    host 192.168.0.12
#  
#

## Multiple output
## match tag=td.*.* and output to Treasure Data AND file
#
#  @type copy
#  
#    @type tdlog
#    apikey API_KEY
#    auto_create_table
#    buffer_type file
#    buffer_path /var/log/td-agent/buffer/td
#  
#  
#    @type file
#    path /var/log/td-agent/td-%Y-%m-%d/%H.log
#  
#

動作確認

ひとまず1台で動作確認。既に、%lt;source> ディレクティブで type forward 、<match> ディレクティブで stdout が設定済みのため、fluent-cat というプログラムに直接ログを渡すことですぐにテストができます。fluent-cat は、/opt/td-agent/embedded/bin/fluent-cat に存在しており、引数なしで実行すると利用方法が確認できます。また、デフォルトの出力先は /var/log/td-agent/td-agent.log です。


$ /opt/td-agent/embedded/bin/fluent-cat
Usage: fluent-cat [options] 
    -p, --port PORT                  fluent tcp port (default: 24224)
    -h, --host HOST                  fluent host (default: 127.0.0.1)
    -u, --unix                       use unix socket instead of tcp
    -s, --socket PATH                unix socket path (default: /var/run/fluent/fluent.sock)
    -f, --format FORMAT              input format (default: json)
        --json                       same as: -f json
        --msgpack                    same as: -f msgpack
        --none                       same as: -f none
        --message-key KEY            key field for none format (default: message)

では、JSON 形式で fluent-cat にテスト用のデータを渡してみます。


$ echo '{"key": "sample"}' | /opt/td-agent/embedded/bin/fluent-cat debug.hoge
$ sudo tail -f /var/log/td-agent/td-agent.log
2016-10-20 22:47:09 +0900 debug.hoge: {"key":"sample"}

いかがでしたか?次回はログ監視をやってみたいと思います。

スポンサーリンク