Fluentd勉強 その1
仕事でFluentdを使う機会が出てきたのでもろもろ調査してみた。
Fluentdとは
FluentdとはLinux上で動作するデータのやりとりを管理するソフトウェア。 データのやりとりとは以下の様なことを指す。
- 必要なところからデータを取り出す (input)
- そのデータを必要に応じてパースする
- データのタイムスタンプを管理する
- 必要なところにデータを届ける (output)
- そのデータを必要に応じて整形して保存する
- データを紛失しないように管理する (buffer)
- やりとりの途中でエラーが発生したらリトライする
Fluentdではこれらのやりとりに対してinput, output, bufferという仕組みを持っている。
Fluentdはプラグインが充実しており、Amazon S3、Redshift、MongoDB、Redis、PostgreSQL、MySQLなど様々な出力先を選べる。
環境構築
環境
インストール
curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent2.sh | sh
起動
sudo /etc/init.d/td-agent start
設定ファイル
設定ファイルの場所はここ
/etc/td-agent/td-agent.conf
source
sourceはfluentdの入力の設定を行う。通信方法とポートの設定がメイン。
<source> type forward port 24224 </source>
type: どのプラグインを用いて接続するか port: ポート番号
match
matchは指定した指定したタグでsorceから情報が送られてきた時何をするかを指定する。
<match debug.**> type stdout </match>
その他
次の記事で書く
golangでログを送信する
fluent-logger-golangを使用する。
fluent-logger-golangのインストール
go get github.com/fluent/fluent-logger-golang/fluent
こんな感じでコードを書くとFluentdにログが送れる。
package main import( "github.com/fluent/fluent-logger-golang/fluent" "fmt" "time" ) func main(){ logger, err := fluent.New(fluent.Config{FluentPort:24224, FluentHost:"127.0.0.1"}) if err != nil{ fmt.Println(err) } defer logger.Close() tag := "debug.test" t := time.Now() var data = map[string]string{ "foo": "bar", "hoge": "hoge", } error := logger.PostWithTime(tag, t, data) if error != nil{ panic(error) } }