Fluentd勉強 その1

仕事でFluentdを使う機会が出てきたのでもろもろ調査してみた。

Fluentdとは

FluentdとはLinux上で動作するデータのやりとりを管理するソフトウェア。 データのやりとりとは以下の様なことを指す。

  • 必要なところからデータを取り出す (input)
    • そのデータを必要に応じてパースする
    • データのタイムスタンプを管理する
  • 必要なところにデータを届ける (output)
    • そのデータを必要に応じて整形して保存する
  • データを紛失しないように管理する (buffer)
    • やりとりの途中でエラーが発生したらリトライする

Fluentdではこれらのやりとりに対してinput, output, bufferという仕組みを持っている。

Fluentdはプラグインが充実しており、Amazon S3、Redshift、MongoDB、Redis、PostgreSQLMySQLなど様々な出力先を選べる。

環境構築

環境

Amazon Linux RPM

インストール

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)
    }
}                                                 

参考

docs.fluentd.org

tagomoris.hatenablog.com

www.fisproject.jp