ども、Fluentd Advent Calendar 2014 21 日目担当、初心者枠の cloudpackかっぱ (@inokara) です。

はじめに

Fluentd をブラウザで操作出来る fluentd-ui を以前に少しだけ触ったことがありましたが、しばらく間を開けている間にバージョンアップが行われているようですので、以前に書いた記事を見ながら改めて触ってみたいと思います。私自身、それほど Fluentd や td-agent をそれほど使い込んでいるわけではありませんので、そのレベルのユーザーが触ってみたレベルの内容になってしまっていることをお詫び申し上げます。

fluentd-ui とは(参考)

GitHub にて公開されております。

ざっくり、以下のような機能を提供しています。

  • fluentd / td-agent の導入
  • Web UI による fluentd.conf や td-agent.conf の設定
  • プラグイン管理(導入、アンインストール、アップデート)
  • 稼働ログの確認

尚、生い立ちについては@repeatedlyさんが書かれていた以下の記事を御覧ください。

Fluentd というと UI コマンドラインでしか使ったことがなく、当初は GUI って必要なのかなと思っていましたが、実際に触ってみると以下の図のように Fluentd を挟んで Input プラグインと Output プラグインが視覚的に把握出来たり…
fluent-ui: 画面キャプチャ

プラグインのインストールや設定の確認や修正、そして、個人的に最も嬉しかった機能として組み込みのログフォーマットであればログを自動的に認識して色分けを行ってくれたり、さらに独自のフォーマットを書く際にFluentularのように苦手な正規表現をサポートしてくれる機能がありました。

ということで、以前に触ったのが 8 月位でバージョンは 0.1.3 位だったかと思いますが、今日現在で 0.3.1 となっていて新しい機能も追加になっているようですので、今回は最新版の 0.3.1 で記事を書き進めたいと思います。


セットアップ

環境

README でもUbuntu 14.04向けに書かれていますので、Vagrant で Ubuntu 14.04 を用意しました。

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.1 LTS"

尚、素の状態の Vagrant であげた Ubuntu 14.04 の場合、プラグインインストールで Nokogiri をインストールしようと際に以下のようなメモリ割り当てエラーが出てしまったので仮想マシンの割り当てメモリについてそれなりに割り当てておく必要があるかと思います。

Fetching: mini_portile-0.6.1.gem (100%)
Successfully installed mini_portile-0.6.1
Fetching: nokogiri-1.6.5.gem (100%)
Building native extensions.  This could take a while...
ERROR:  Error installing fluent-plugin-s3:
ERROR: Failed to build gem native extension.

/usr/bin/ruby2.1 extconf.rb
Cannot allocate memory - /usr/bin/ruby2.1 extconf.rb 2>&1

Gem files will remain installed in /var/lib/gems/2.1.0/gems/nokogiri-1.6.5 for inspection.
Results logged to /var/lib/gems/2.1.0/extensions/x86_64-linux/2.1.0/nokogiri-1.6.5/gem_make.out

尚、Ruby の環境については下記の通りです。

ruby 2.1.5p273 (2014-11-13 revision 48405) [x86_64-linux-gnu]

インストールとログイン

すでに Ruby はインストールされている状態で進めたいと思いますので、引き続き、以下のパッケージをインストールしましょう。

sudo apt-get -y install build-essential libssl-dev

ruby-dev に関しては ruby2.1-dev をインストール済みなので割愛します。

次に fluentd-ui を gem でインストールします。

sudo gem install fluentd-ui --no-ri --no-rdoc -V

fluentd 自体も一緒にインストールされるので、インストール後はすぐに fluentd-ui を試すことが出来るかと思います。
インストールが終わったらコマンドラインから以下のように fluentd-ui を起動します。

fluentd-ui start

すると以下のように表示されて fluentd-ui が起動します(※バックエンドで起動したい場合には & 付けて起動しましょう

Puma 2.10.2 starting...
* Min threads: 0, max threads: 16
* Environment: production
* Listening on tcp://0.0.0.0:9292

早速、ブラウザにて fluentd-ui が起動しているホストの 9292 番ポートにアクセスします。
fluentd-ui: インストール後の動作確認

初期のユーザー名は admin でパスワードは changeme となっていますので、それを入力してログインしましょう。

初回セットアップ

初回起動時には以下のような画面となり、fluentd.conf や PID ファイルのパス等を指定します。
fluentd-ui: 初回セットアップ(1)

とりあえず今回は fluentd で進めたいと思います。
fluentd-ui: 初回セットアップ(2)

上記のようにデフォルトで起動しているユーザーのホームディレクトリ以下に .fluentd-ui というディレクトリを作成して fluentd.conf や PID ファイルが置かれるようです。

fluentd の起動

セットアップが終わるとダッシュボードに移動して以下のような画面になります。
fluentd-ui: fluentdの起動(1)

「開始」をクリックすると fluentd が起動します。
fluentd-ui: fluentdの起動(2)

ダッシュボードにログが出力され、fluentd が起動していることがわかります。


機能

ソースと出力先の追加

fluentd を介した各種データの入出力設定を一つの画面で行うことが出来ます。(この画面が fluentd を介してデータがストリーム処理しているイメージが掴みやすくて、個人的にはこの画面が一番好きです。)
fluentd-ui: ソースと出力先の追加(1)

fluentd-ui 起動直後はインプットは forward や http が有効になっており、アウトプットは stdout のみが設定されています。

例えば、出力先を追加したい場合には…

  • 標準出力
  • Treasure Data
  • AWS S3
  • MongoDB
  • Elasticsearch
  • 転送

から選択することが出来ますが、プラグインがインストールされていない場合には先にプラグインをインストールしておく必要があります。
fluentd-ui: ソースと出力先の追加(2)

また、各プラグイン毎の設定の編集をこの画面から行うことも出来ます。
fluentd-ui: ソースと出力先の追加(3)

尚、ファイルの読み込みに関しても、対象のファイルを選択後に下記のようにフォーマットの指定の際には色分けしてくれます。
fluentd-ui: ソースと出力先の追加(4)

次へをクリックしてウィザードを進めると下図のように syslog を tail プラグインで読み込む設定が作成されました。
fluentd-ui: ソースと出力先の追加(5)

設定ファイルの編集

fluentd-ui の画面から設定ファイル(fluentd.conf)の設定を行うことが出来ます。
fluentd-ui: 設定ファイルの編集(1)

また、設定の履歴管理(自動バックアップ)が行われています。
fluentd-ui: 設定ファイルの編集(2)

この履歴から設定を指定して再利用することも可能です。
fluentd-ui: 設定ファイルの編集(3)

尚、この機能について Twitter でも@repeatedlyさんが以下のように言及されています。

この機能があれば、開発環境等でトライアンドエラーをしながら設定ファイルを作成することが出来ますし、運用で問題が発生した場合でも遡って検証を行うことが出来そうです。

プラグインの管理

fluentd-ui を使えばプラグインのインストールも Web 画面から行うことが出来ます。
fluentd-ui: プラグインの管理(1)

早速、fluent-plugin-s3 をインストールしてみたいと思います。
上図の「インストール」ボタンをクリックするだけでインストールが開始されます。
fluentd-ui: プラグインの管理(2)
暫くするとインストール完了です!

インストールと同様にアンインストールも fluentd-ui から行うことが可能で、上記の画面にて「アンインストール」をクリックすることでアンインストール可能です。
画面にはリアルタイムに表示されませんが、コマンドラインには以下のように表示されました。

Successfully uninstalled fluent-plugin-s3-0.5.1

また、プラグイン一覧のページをリロードすることで一覧から消えていることも確認出来ます。

その他

ログファイルの閲覧やダウンロードもサポートされているようですし、システム情報では下記のようにインストール済みの fluentd のバージョンやインストール済みの Ruby のバージョンが表示されており、さらにダウンロードが可能です。
fluentd-ui: その他の機能

syslog を S3 に保存するまでを fluentd-ui だけでやってみる

ということで…

せっかくなので syslog を Amazon S3 に保存するまでを fluentd-ui で行ってみたいと思います。
尚、事前に以下の設定は行っている前提です。

  • S3 の操作が可能は IAM ユーザーの作成とアクセスキー、シークレットアクセスキーの取得
  • バケット準備

プラグインのインストール

「おすすめプラグイン」メニューから fluent-plugin-s3 をインストールします。
syslogをS3へ格納するフローをfluent-uiで行う: プラグインのインストール(1)

「おすすめプラグイン」ページをリロードすると以下のように fluent-plugin-s3 がインストール済みとなります。
syslogをS3へ格納するフローをfluent-uiで行う: プラグインのインストール(2)

syslog の読み込み設定

「ソースと出力先の追加」から入力の「ファイル」を選択しましょう。
syslogをS3へ格納するフローをfluent-uiで行う: syslogの読み込み設定(1)

次に読み込み対象となるファイルを選択します。
syslogをS3へ格納するフローをfluent-uiで行う: syslogの読み込み設定(2)

次にフォーマット設定です。
syslogをS3へ格納するフローをfluent-uiで行う: syslogの読み込み設定(3)

最後にタグを指定します。
syslogをS3へ格納するフローをfluent-uiで行う: syslogの読み込み設定(4)

最後に次のページで「完了」をクリックし、fluentd を再起動して syslog の読み込み設定は完了です。もちろん、再起動も fluentd-ui から行います。

S3 への書き出し設定

ソースと出力先の追加」から出力の「AWS S3」を選択してあらかじめ用意したバケットの情報やクレデンシャルな情報を設定します。
syslogをS3へ格納するフローをfluent-uiで行う: S3への書き出し設定(1)

「設定」クリックすると以下のように設定ファイルが作成されました。

<source>
  type forward
  port 24224
</source>

<source>
  # http://docs.fluentd.org/articles/in_http
  type http
  port 9880
</source>

<source>
  type monitor_agent
  port 24220
</source>
<source>
  type debug_agent
  port 24230
</source>

<match debug.*>
  # http://docs.fluentd.org/articles/out_stdout
  type stdout
</match>

<source>
  type tail
  path /var/log/syslog
  tag fluentd-ui_test
  format syslog
  time_format %b %d %H:%M:%S
  pos_file /tmp/fluentd--1419068921.pos
</source>

<match fluentd-ui_test>
  type s3
  aws_key_id xxxxxxxxxxxxxxxxxxxxxxx
  aws_sec_key xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
  s3_bucket fluentd-ui-test
  s3_endpoint s3-ap-northeast-1.amazonaws.com
  path syslog
  format out_file
  include_time_key false
  add_newline false
  output_tag true
  output_time true
  store_as gzip
  use_ssl true
  buffer_type memory
</match>

※後ほど flush_interval 60s も追加しています。

ちょっとトラブル

ダッシュボードに戻り fluentd を再起動したところ以下のようにエラーが出力されました。
syslogをS3へ格納するフローをfluent-uiで行う: ちょっとトラブル

おおっ。

改めて再起動

先ほどのエラーを修正して改めて fluentd を再起動します。
syslogをS3へ格納するフローをfluent-uiで行う: 改めて起動

そして、logger コマンドでひたすら syslog にログを吐かせます。

while :;do logger -t fluentd-ui-test foo ; done &

暫くすると…
syslogをS3へ格納するフローをfluent-uiで行う: 動作確認(1)

おお、キタキター。
ダウンロードしてメモ帳で開いてみます。
syslogをS3へ格納するフローをfluent-uiで行う: 動作確認(2)

改行が解釈されていないご様子ですが syslog の内容が保存されています!
ここまで AWS のダッシュボード以外は fluentd-ui でしか操作しないで S3 へのログ転送を行うことができました!

最後に

駆け足で fluentd-ui を改めて触ってみましたが、プラグイン設定(おそらく対象のプラグインは限られている?)や管理、設定ファイルの修正、ダッシュボードからの再起動等、単体の fluentd ノードを管理する上ではコマンドラインとの違和感なく利用できました。fluentd 利用の敷居を下げるという目的を十分に達成出来ているのではないかと思います。

また、設定ファイルの履歴管理機能は今回のようにブログ記事を書く際等はもちろん、設定ファイルのリファクタリングや検証等で便利に利用出来るのではないかと思います。また、以前に触れましたが、読み込みのフォーマットを色分けしてくれるので、それだけの為だけに fluentd-ui を使ってもいいかもしれないなあと思っています!

元記事はこちらです。
fluentd-ui を改めて使ってみる