現在位置: ホーム / ビッグデータ ブログ / Let's GO, fluentd on Windows!

Let's GO, fluentd on Windows!

fluentd forwardarのGo版が先月リリースされたので、今回はWindowsでfluentd fowarderを動かしてみます。この記事は、Qiita Fluentd Advent Calendar 18日目の記事です。

1. はじめに

こんにちは、高橋です。

2014年11月4日に、Goで書かれたfluentd-forwarderのアナウンスが行われました。
http://www.fluentd.org/blog/fluentd-goes-gopher

これまで、fluentdではWindowsでは動作しないという課題がありました。
(Windows版の開発もGithubのブランチで有志により行われています。) 

しかし、Goではクロスコンパイルがサポートされており、今回のGo版fluent-forwardarではWindows上でも動作させることが可能になりました。

そこで、今回はfluentd-forwarderをWindows Server上で動作させ、データをTreasureDataにインポートするまでを行ってみます。

2. Go言語について

Go言語は、Googleが開発しているプログラミング言語で〜、と色々書いてもしょうがないので、飛ばします。今回、fluentdで一番嬉しいのは、クロスコンパイルをサポートしておりWindowsやLinuxなどやそれぞれのCPUアーキテクチャに様々対応してくれているところが最高です。

詳細はhttp://golang.org/をご参照ください!

ちなみにマスコットキャラは、Go gopherくんです。かわいいですね。

2014-12-15_GoGopher

3. fluentd-forwarderについて

Go版fluentd-forwarder(https://github.com/fluent/fluentd-forwarder)は、現在下記3つの機能があります。 

  • TCP Input: 任意のPort(default: 127.0.0.1:24224)でTCPのインプットを受信
  • TCP Output: 任意のPort(default: 127.0.0.1:24225)に対してTCP Inputで受け取ったデータを送信
  • TreasureData Output: TCP Inputで受け取ったデータをTreasureDataに送信

現在は入力としてはTCP、出力としてはTCPとTreasureDataにのみ行うことができます。そのため、Windowsで動くアプリケーションからローカルのfluentd-forwarderに対してデータを送信し、TreasureDataにデータを送ったり、アグリゲータとなるlinuxのfluentdサーバに送る構成になります。

C#やnxlogとの連携を簡単に行えると、ファイルベースのログの出力も簡単になるので、今後Windowsユーザにどれだけ受け入れられるかが発展の鍵になりそうですね。

 

4. 環境の準備

それでは、Goをインストールするところから始めていきましょう。
今回の実行環境は下記となります。

  • Windows Server 2008 R2 64bit
  • Go 1.4
  • TreasureDataのAPIKEY

4.1. Goのインストール

Goでは実行環境のインストールを行う必要があります。
下記のリンクからgo1.4.windows-amd64.msiをダウンロードし、インストールを行います。
http://golang.org/dl/
デフォルトのインストール先は、

C:\Go>

となっています。環境変数が正しく設定されていることを確認しましょう。

2014-12-15_system

4.2. fluentd-forwarderの準備

fluentd-forwarderでは、exe形式での配布を行っていないため、ビルドを行う必要が有ります。まずは、下記コマンドにてGithubからビルド用のスクリプトをダウンロードします。

C:\Go> go get github.com/fluent/fluentd-forwarder/entrypoints/build_fluentd_forwarder

上記コマンドにより、C:\go\data以下に保存されます.

次にビルドを行います。

C:\Go\data> bin\build_fluentd_forwarder fluentd_forwarder

ビルドが終了すると、C:\Go\data\bin以下にfluentd_forwarder.exeがデプロイされていることが分かります.

4.3. クライアントの準備

fluentd-forwarderにTCPでデータを送信するためのクライアントを準備します。せっかくなので、Goで準備してみます。

参考:http://www.fisproject.jp/2014/08/%E3%80%90fluentd%E3%80%91td-agent%E3%81%AB-golang%E3%81%A7%E3%83%AD%E3%82%B0%E9%80%81%E4%BF%A1%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B%E3%80%90ubuntu%E3%80%91/

fluent-logger-golangをインストールします。

C:\Go> go get -u github.com/t-k/fluent-logger-golang/fluent

つぎに、下記のコードをtest.goというファイル名で保存します。

package main

import (
"fmt"
"github.com/t-k/fluent-logger-golang/fluent"
"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()
data := map[string]string{"message": "hello"}
logger.PostWithTime(tag, t, data)
}

5. fluentd-forwarderの実行

それでは,TreasureDataにデータを送信するための起動を行いましょう。

C:\Go\data> bin\fluentd_forwarder -log-level DEBUG -to td+https://<url encodeされたAPIKEY>@/<db>/<table>

その他のオプションはhttps://github.com/fluent/fluentd-forwarder#command-line-optionsを参照ください。

上記起動後、別Windowを立ち上げ、下記コマンドにて先ほどのスクリプトを実行します。

C:\Go> go run demo.go

すると、下記の赤字のログようなログが出力されます。

[fluentd-forwarder] 2014/12/24 22:28:57.591774 Version 0.0.1 starting...
[fluentd-forwarder] 2014/12/24 22:28:57.591774 Unexpected file under the designated directory space (.) - bin
[fluentd-forwarder] 2014/12/24 22:28:57.591774 Unexpected file under the designated directory space (.) - pkg
[fluentd-forwarder] 2014/12/24 22:28:57.591774 Unexpected file under the designated directory space (.) - src
[fluentd-forwarder] 2014/12/24 22:28:57.592774 Path * is designated to Worker output
[fluentd-forwarder] 2014/12/24 22:28:57.592774 Spawning acceptor
[fluentd-forwarder] 2014/12/24 22:28:57.593774 Spawning daemon
[fluentd-forwarder] 2014/12/24 22:28:57.593774 Spawning temporary file collector
[fluentd-forwarder] 2014/12/24 22:28:57.593774 Spawning emitter
[fluentd-forwarder] 2014/12/24 22:28:57.593774 Spawning spooler daemon
[fluentd-forwarder] 2014/12/24 22:28:57.593774 Acceptor started
[fluentd-forwarder] 2014/12/24 22:28:57.593774 Daemon started
[fluentd-forwarder] 2014/12/24 22:28:57.593774 Emitter started
[fluentd-forwarder] 2014/12/24 22:28:57.593774 Spooler daemon started
[fluentd-forwarder] 2014/12/24 22:28:57.594774 Journal output ignored
[fluentd-forwarder] 2014/12/24 22:28:57.594774 Spawning spooler <db>.<table>
[fluentd-forwarder] 2014/12/24 22:28:57.594774 Spooler started
[fluentd-forwarder] 2014/12/24 22:29:02.595060 Flushing...
[fluentd-forwarder] 2014/12/24 22:29:02.596060 chunks to flush: 1
[fluentd-forwarder] 2014/12/24 22:29:02.596060 Flushing chunk <db>.<table>.q50af641fa80abb71
[fluentd-forwarder] 2014/12/24 22:29:03.613118 Deleting C:\Users\ADMINI~1\AppData\Local\Temp\096856519...
[fluentd-forwarder] 2014/12/24 22:29:03.995140 Completed flushing chunk <db>.<table>.q50af641fa80abb71
[fluentd-forwarder] 2014/12/24 22:29:03.996140 errors=0, chunks=0
[fluentd-forwarder] 2014/12/24 22:29:07.595346 Flushing...
[fluentd-forwarder] 2014/12/24 22:29:07.596346 chunks to flush: 1
[fluentd-forwarder] 2014/12/24 22:29:07.596346 Flushing chunk <db>.<table>.q50af64661b7f4527
[fluentd-forwarder] 2014/12/24 22:29:07.596346 errors=0, chunks=0
[fluentd-forwarder] 2014/12/24 22:29:12.595632 Flushing...
[fluentd-forwarder] 2014/12/24 22:29:12.609633 chunks to flush: 1
[fluentd-forwarder] 2014/12/24 22:29:12.609633 Flushing chunk <db>.<table>.q50af646ae0452662

上記のログ出力後、下図にてTreasureDataにレコードが格納されていることがわかります。

 2014-12-15_console

5. おわりに

fluentd-forwarderができたことにより、将来的にプラガブルな機構になっていけば、ますます色々な環境への対応が非常に簡単になってくると思うので、今後の反響に期待ですね。

タグ: