ども、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 プラグインが視覚的に把握出来たり…
プラグインのインストールや設定の確認や修正、そして、個人的に最も嬉しかった機能として組み込みのログフォーマットであればログを自動的に認識して色分けを行ってくれたり、さらに独自のフォーマットを書く際に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 番ポートにアクセスします。
初期のユーザー名は admin でパスワードは changeme となっていますので、それを入力してログインしましょう。
初回セットアップ
初回起動時には以下のような画面となり、fluentd.conf や PID ファイルのパス等を指定します。
上記のようにデフォルトで起動しているユーザーのホームディレクトリ以下に .fluentd-ui
というディレクトリを作成して fluentd.conf や PID ファイルが置かれるようです。
fluentd の起動
セットアップが終わるとダッシュボードに移動して以下のような画面になります。
ダッシュボードにログが出力され、fluentd が起動していることがわかります。
機能
ソースと出力先の追加
fluentd を介した各種データの入出力設定を一つの画面で行うことが出来ます。(この画面が fluentd を介してデータがストリーム処理しているイメージが掴みやすくて、個人的にはこの画面が一番好きです。)
fluentd-ui 起動直後はインプットは forward や http が有効になっており、アウトプットは stdout のみが設定されています。
例えば、出力先を追加したい場合には…
- 標準出力
- Treasure Data
- AWS S3
- MongoDB
- Elasticsearch
- 転送
から選択することが出来ますが、プラグインがインストールされていない場合には先にプラグインをインストールしておく必要があります。
また、各プラグイン毎の設定の編集をこの画面から行うことも出来ます。
尚、ファイルの読み込みに関しても、対象のファイルを選択後に下記のようにフォーマットの指定の際には色分けしてくれます。
次へをクリックしてウィザードを進めると下図のように syslog を tail プラグインで読み込む設定が作成されました。
設定ファイルの編集
fluentd-ui の画面から設定ファイル(fluentd.conf)の設定を行うことが出来ます。
尚、この機能について Twitter でも@repeatedlyさんが以下のように言及されています。
fluentd-ui 0.3.11,設定の履歴管理が出来るようになっているようです
— Mr. Fiber (@repeatedly) 2014, 12月 19
この機能があれば、開発環境等でトライアンドエラーをしながら設定ファイルを作成することが出来ますし、運用で問題が発生した場合でも遡って検証を行うことが出来そうです。
プラグインの管理
fluentd-ui を使えばプラグインのインストールも Web 画面から行うことが出来ます。
早速、fluent-plugin-s3 をインストールしてみたいと思います。
上図の「インストール」ボタンをクリックするだけでインストールが開始されます。
暫くするとインストール完了です!
インストールと同様にアンインストールも fluentd-ui から行うことが可能で、上記の画面にて「アンインストール」をクリックすることでアンインストール可能です。
画面にはリアルタイムに表示されませんが、コマンドラインには以下のように表示されました。
Successfully uninstalled fluent-plugin-s3-0.5.1
また、プラグイン一覧のページをリロードすることで一覧から消えていることも確認出来ます。
その他
ログファイルの閲覧やダウンロードもサポートされているようですし、システム情報では下記のようにインストール済みの fluentd のバージョンやインストール済みの Ruby のバージョンが表示されており、さらにダウンロードが可能です。
syslog を S3 に保存するまでを fluentd-ui だけでやってみる
ということで…
せっかくなので syslog を Amazon S3 に保存するまでを fluentd-ui で行ってみたいと思います。
尚、事前に以下の設定は行っている前提です。
- S3 の操作が可能は IAM ユーザーの作成とアクセスキー、シークレットアクセスキーの取得
- バケット準備
プラグインのインストール
「おすすめプラグイン」メニューから fluent-plugin-s3 をインストールします。
「おすすめプラグイン」ページをリロードすると以下のように fluent-plugin-s3 がインストール済みとなります。
syslog の読み込み設定
「ソースと出力先の追加」から入力の「ファイル」を選択しましょう。
最後に次のページで「完了」をクリックし、fluentd を再起動して syslog の読み込み設定は完了です。もちろん、再起動も fluentd-ui から行います。
S3 への書き出し設定
ソースと出力先の追加」から出力の「AWS S3」を選択してあらかじめ用意したバケットの情報やクレデンシャルな情報を設定します。
「設定」クリックすると以下のように設定ファイルが作成されました。
<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 を再起動したところ以下のようにエラーが出力されました。
おおっ。
改めて再起動
先ほどのエラーを修正して改めて fluentd を再起動します。
そして、logger コマンドでひたすら syslog にログを吐かせます。
while :;do logger -t fluentd-ui-test foo ; done &
改行が解釈されていないご様子ですが syslog の内容が保存されています!
ここまで AWS のダッシュボード以外は fluentd-ui でしか操作しないで S3 へのログ転送を行うことができました!
最後に
駆け足で fluentd-ui を改めて触ってみましたが、プラグイン設定(おそらく対象のプラグインは限られている?)や管理、設定ファイルの修正、ダッシュボードからの再起動等、単体の fluentd ノードを管理する上ではコマンドラインとの違和感なく利用できました。fluentd 利用の敷居を下げるという目的を十分に達成出来ているのではないかと思います。
また、設定ファイルの履歴管理機能は今回のようにブログ記事を書く際等はもちろん、設定ファイルのリファクタリングや検証等で便利に利用出来るのではないかと思います。また、以前に触れましたが、読み込みのフォーマットを色分けしてくれるので、それだけの為だけに fluentd-ui を使ってもいいかもしれないなあと思っています!
元記事はこちらです。
「fluentd-ui を改めて使ってみる」