本文へジャンプ

Fluentd 出力プラグインガイド

Revision: 1.6.0-10082-768e556f

1 概要

Fluentd用GridDBプラグイン(fluent-plugin-griddb) はHTTP/HTTPメソッドを使ってGridDBにデータを挿入します。

2 インストール

2.1 システム要件

本ブラグインのビルドと実行は以下の環境で検査済みです。

  • OS: CentOS 7.6 (x64)
  • Rubyのバージョン 2.4以上
  • Fluentdのバージョン 1.12.0以上

2.2 Rubyのインストール

Rubyのセットアップとインストールについては https://www.techoism.com/install-ruby-2-3-3-centosrhel-rvm/ を参照してください。

rvm install ${RUBY_VER}

2.3 Fluentdのインストール

Fluentのセットアップとインストールについては https://docs.fluentd.org/installation/install-by-gem を参照。簡易インストールの場合、次を実行します。

$ gem install fluentd --no-doc

: 'Proxy Authentication'の問題が発生する場合、次を試してください。

$ gem install fluentd --no-doc --http-proxy http://host:port
or
$ gem install fluentd --no-doc --http-proxy http://username:password@host:port

2.4 ローカルソースコードからプラグインをインストール

ステップ 1: fluent-plugin-griddbのソースコードをダウンロードします。

ステップ 2: 次のコマンドを実行します。

# cd fluent-plugin-griddb
# gem build fluent-plugin-griddb.gemspec
# gem install --force --local fluent-plugin-griddb-1.0.2.gem

3 使用方法

3.1 クイックスタート

次のコマンドを実行し、構成ファイルのサンプルを作成します。

$ fluentd --setup ./fluent

./fluent/fluent.confを要件に合わせて構成します。詳細は https://docs.fluentd.org/installation/install-by-gem の対応箇所を参照。

デーモンとして実行する場合、以下のコマンドを実行します。

$ fluentd -c ./fluent/fluent.conf --v & 

停止するには次のコマンドを実行します。

$ pkill -f fluentd 

フォアグラウンドプロセスとして実行するには、以下のコマンドを実行します。

$ fluentd -c ./fluent/fluent.conf

次のコマンドを使うとdebug.testのようなタグ付きのJSONメッセージを送信できます。

$ echo '{"json":"message"}' | fluent-cat debug.test 

3.2 入力プラグインの構成

入力プラグインはこのガイドラインの対象外です。詳細は https://docs.fluentd.org/input を参照。

実際に使える例を以下にいくつか示します。

3.2.1 Apacheログ

パラメータ

パラメータ
@type tail (必須)
path 読み込むログファイルのパス (必須)
pos_file Fluentdはこのファイルから前回読み込んだ場所を記録します。
tag イベントのタグ (必須)
parse ログの形式 (必須)

./fluent/fluent.confの構成

  • Apacheがすでにシステムにインストールされている場合、次の入力を使います。
<source>
  @type tail
  path /var/log/httpd-access.log
  pos_file /var/log/td-agent/httpd-access.log.pos
  tag griddb
  <parse>
    @type apache2
  </parse>
</source>
  • Apacheがシステムにインストールされていない場合、以下の2ファイルを作成します。

    • 次のような形式のコンテンツを持ったfile1.log
    192.168.0.1 - - [28/Feb/2013:12:00:00 +0900] "GET / HTTP/1.1" 200 777 "-" "Opera/12.0"
    192.168.0.1 - - [28/Feb/2013:12:00:00 +0900] "POST / HTTP/1.1" 200 777 "-" "Opera/12.0"
    192.168.0.1 - - [28/Feb/2013:12:00:00 +0900] "PUT / HTTP/1.1" 200 777 "-" "Opera/12.0"
    192.168.0.1 - - [28/Feb/2013:12:00:00 +0900] "DELETE / HTTP/1.1" 200 777 "-" "Opera/12.0"
    
    • 空ファイルであるfile2.log.pos
<source>
  @type tail
  path your_folder/file1.log
  pos_file your_folder/file2.log.pos
  tag griddb
  <parse>
    @type apache2
  </parse>
</source>

3.2.2 Tail

注:詳細は https://docs.fluentd.org/input/tail を参照。Apacheログはtail_inputの特殊なケースです。

パラメータ

パラメータ
@type tail (必須)
path 読み込むログファイルのパス (必須)
pos_file Fluentdはこのファイルから前回読み込んだ場所を記録します。
tag イベントのタグ (必須)
parse ログの形式 (必須)

  • パーサープラグインのタイプがcsvの場合
CSV format in file1.log:
2013/02/28 12:00:00,192.168.0.1,111,text
<source>
  @type tail
  path your_folder/file1.log
  pos_file your_folder/file2.log.pos
  <parse>
    @type csv
    keys time,host,req_id,user
    time_key time
  </parse>
  tag griddb
</source>
  • パーサープラグインのタイプがnoneの場合
NONE format in file1.log:
Hello world. I am a line of log!
<source>
  @type tail
  path your_folder/file1.log
  pos_file your_folder/file2.log.pos
  <parse>
    @type none
  </parse>
  tag griddb
</source>
  • パーサープラグインのタイプがjsonの場合
JSON format in file1.log:
{"field1":"type", "field2":"type", "field3":"type:option", "field4":"type:option"}
<source>
  @type tail
  path your_folder/file1.log
  pos_file your_folder/file2.log.pos
  <parse>
    @type json
  </parse>
  tag griddb
</source>
  • パーサープラグインのタイプがregexpの場合
REGEXP format in file1.log:
[2013-02-28 12:00:00 +0900] name engineer 1
<source>
  @type tail
  path your_folder/file1.log
  pos_file your_folder/file2.log.pos
  <parse>
    @type regexp
    expression /^\[(?<logtime>[^\]]*)\] (?<name>[^ ]*) (?<title>[^ ]*) (?<id>\d*)$/
    time_key logtime
    time_format %Y-%m-%d %H:%M:%S %z
    types id:integer
  </parse>
  tag griddb
</source>
  • パーサープラグインのタイプがapache_errorの場合
APACHE_ERROR format in file1.log:
[Wed Oct 11 14:32:52 2000] [error] [client 127.0.0.1] client denied by server configuration
<source>
  @type tail
  path your_folder/file1.log
  pos_file your_folder/file2.log.pos
  <parse>
    @type apache_error
    expression /^\[[^ ]* (?<time>[^\]]*)\] \[(?<level>[^\]]*)\](?: \[pid (?<pid>[^\]]*)\])? \[client (?<client>[^\]]*)\] (?<message>.*)$/
  </parse>
  tag griddb
</source>
  • パーサープラグインのタイプがnginxの場合
NGINX format in file1.log:
127.0.0.1 192.168.0.1 - [28/Feb/2013:12:00:00 +0900] "GET / HTTP/1.1" 200 777 "-" "Opera/12.0" -
<source>
  @type tail
  path your_folder/file1.log
  pos_file your_folder/file2.log.pos
  <parse>
    @type nginx
  </parse>
  tag griddb
</source>

3.2.3 システムログ

注: 詳細は https://docs.fluentd.org/input/syslog を参照。

パラメータ

パラメータ
@type syslog (必須)
port リッスンするポート
bind リッスンするバインドアドレス
parse ログの形式 (必須)
tag タグのプレフィックス

rsyslogdの設定

/etc/rsyslogd.conf を開き以下の行を付加します。

*.* @127.0.0.1:5140

rsyslogdを使用している場合、以下の2行を/etc/rsyslog.confに追加します。

# Send log messages to Fluentd
*.* @127.0.0.1:5140

その上でrsyslogdサービスを再起動します。

$ sudo systemctl restart rsyslog

上記により、ログを5140ポートに転送するよう‘rsyslogd‘に伝えます。Fluentdはこのポートにリッスンします。

./fluent/fluent.confの構成

<source>
  @type syslog
  port 5140
  bind 0.0.0.0
  <parse>
    @type syslog
  </parse>
  tag griddb
</source>

3.3 フィルタプラグインの構成(任意)

<filter></filter>

注: 詳細は https://docs.fluentd.org/filter を参照。

例1: filter_grep フィルタプラグイン

 <filter griddb.**>
   @type grep
   <regexp>
    key ident
    pattern /^sudo$/
  </regexp>
  <regexp>
    key message
    pattern /COMMAND/
  </regexp>
 </filter>

例2: filter_stdoutフィルタプラグイン

<filter >
  @type stdout
</filter>

例3: filter_record_transformerフィルタプラグイン

<filter>
  @type record_transformer
  <record>
    hostname "#{Socket.gethostname}"
    tag ${tag}
  </record>
</filter>

3.4 出力プラグインの構成

3.4.1 パラメータ

パラメータ value
@type griddb (必須)
host GridDB Web APIのURL(必須)
注: このURLにはWeb APIコンテクストパスを含めないでください。
例 有効なURL: http://192.168.0.11:8081
無効のURL: http://192.168.0.11:8081/griddb/v2
cluster クラスタ名 (必須)
database 値がnullまたは空の場合、"public"がデフォルトになります。
container コンテナ名 (必須)
insert_mode appendまたはreplace。値がnullまたは空の場合、"append"がデフォルトになります。
username GridDBユーザ名(必須)
password GridDBユーザのパスワード (必須)
p_addr プロキシアドレス(マシンがプロキシサーバの背後に配置されている場合、必須)
p_port プロキシポート(マシンがプロキシサーバの背後に配置されている場合、必須)
p_user プロキシのユーザ名(マシンがプロキシサーバの背後に配置されている場合、必須)
p_pass プロキシのパスワード(マシンがプロキシサーバの背後に配置されている場合、必須)

3.4.2

fluent-plugin-griddbを使ったいくつかの詳細な例を以下に示します。

例1: ホストにhttpを使用し、insert_modeをappendに指定。

<match griddb>
   @type griddb
   host http://localhost:8080/
   cluster defaultCluster
   database public
   container container_1
   insert_mode append
   username admin
   password admin
</match>

データの挿入にappendモードを使用し、コンテナが存在しない場合、新しいコンテナを作成し、データを挿入します。コンテナがすでに存在している場合、現在のコンテナを保持してデータを挿入します。

例2: ホストにhttpsを使用し、insert_modeをreplaceに指定。

<match griddb.**>
   @type griddb
   host https://{please_specify_full_uri}
   cluster defaultCluster
   database public
   container container_2
   insert_mode replace
   username admin
   password admin
   p_addr proxyAddress
   p_port proxyPort
</match>

データの挿入にreplaceモードを使用し、コンテナが存在しない場合、新しいコンテナを作成し、データを挿入します。コンテナがすでに存在している場合、現在のコンテナを削除の上、新しいコンテナを作成し、データを挿入します。

3.5 完全な構成の例

例1: http、Apacheログファイルを使い、プロキシを使わない完全な構成

<source>
  @type tail
  path /var/log/httpd-access.log
  pos_file /var/log/td-agent/httpd-access.log.pos
  tag griddb
  <parse>
    @type apache2
  </parse>
</source>

<match griddb>
  @type griddb
  host http://{please_specify_full_uri}
  cluster clusterName
  database defaultDB/databaseName
  container containerName
  insert_mode mode
  username username
  password password
</match>
<match>
  @type stdout
</match>

例2: https、システムログ、認証なしのプロキシを使った完全な構成

<source>
  @type syslog
  port 5140
  tag griddb
</source>

<filter griddb.**>
  @type grep
  <regexp>
    key ident
    pattern /^sudo$/
  </regexp>
  <regexp>
    key message
    pattern /COMMAND/
  </regexp>
  <exclude>
     key message
     pattern /COMMAND/
  </exclude>
</filter>

<filter griddb.**>
  @type parser
  key_name message
  <parse>
    @type regexp
    expression /USER=(?<sudoer>[^ ]+) ; COMMAND=(?<command>.*)$/
  </parse>
</filter>

<match griddb>
  @type griddb
  host https://{please_specify_full_uri}
  cluster clusterName
  database defaultDB/databaseName
  container containerName
  insert_mode mode
  username username
  password password
  p_addr proxyAddress
  p_port proxyPort
</match>

<match>
  @type stdout
</match>

例: プロキシ認証を使った完全な構成

<source>
  @type tail
  path /var/log/httpd-access.log
  pos_file /var/log/td-agent/httpd-access.log.pos
  tag griddb
  <parse>
    @type apache2
  </parse>
</source>

<match griddb>
 @type griddb
 host https://{please_specify_full_uri}
 cluster clusterName
 database defaultDB/databaseName
 container containerName
 insert_mode mode
 username username
 password password
 p_addr proxy-address
 p_port proxy-port
 p_user proxy-username
 p_pass proxy-password
</match>

<match>
  @type stdout
</match>