Fluentd 出力プラグインガイド
Revision: 2.0.0-12154-62531f11
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}
注 : RVMのインストール前に、以下のコマンド実行が必要な場合があります :
echo insecure >> ~/.curlrc
2.3 Install fluentd
2.4 Fluentdのインストール
Fluentのセットアップとインストールについては https://docs.fluentd.org/installation/install-by-gem を参照。簡易インストールの場合、次を実行します。
$ gem install fluentd -v 1.12.0 --no-doc
注: Fluentdの最新バージョンはRuby 2.4以上が必要なため、2.4未満のRubyを使う場合は、1.12.0のFluentdを使うことを推奨します。
注: '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
Note: Fluentdのインストールにyajl-rubyとmsgpacが必要であれば、下記のコマンドでインストールして下さい。
$ gem install msgpack -v 1.12.0
$ gem install yajl-ruby -v 1.4.1
2.5 ローカルソースコードからプラグインをインストール
ステップ 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>