Toshiaki Baba の紹介

IT系インフラエンジニアの馬場俊彰がお送りする、主にサーバ・ネットワークにまつわるメモです。 株式会社ハートビーツでCTOをしています。 日本PostgreSQLユーザー会に協力させてもらってます。 内容や、記事を元に実施された作業とその結果については保証しかねますので、自己責任でお願いします。 突っ込みなど、コメントでいただけると嬉しいです。 この情報で、どこかの誰かが少しでも楽に・幸せになれますように。。。 ※この発言は個人の見解であり、所属する組織の公式見解でも組織を代表するものでもありません※ twitter: netmarkjp

fluentdに実データを通してみてわかったこと

個人的なメモ。

大層な話じゃないです。

あとfluentdをdissりたいわけでもないです。
使ってみてすごい使いやすかった。すばらしい。
ただちょっとだけ気をつけとかないと、という話。

遭遇した問題

  • 前提
    • fluentd-0.10.11(td-agent)
    • アクセスログ(データ不正的な感じ)を複数行まとめて投入してtailで読み込み
    • アクセスログの2行目以降にUTF-8なマルチバイトが含まれる
    • アクセスログをparseしてfileに書き出したい
  • 事象
    • 複数行投入したうち、マルチバイトを含む行以降がfileに出力されず
    • ログファイルに元データが出力されず。ログには unexpected error error="\"\\xEF\" from ASCII-8BIT to UTF-8" が出力

どういうこと?

まとめて投入した一連の途中で出力処理がエラーになっていて、以降の処理(=マルチバイトを含む行の次の行以降を出力する処理)が実行されない。

マルチバイトを含む行はエラーとして別の(システム側の)ログファイルにデータをまるっと出力しつつ、次の行以降の出力は継続してほしかった。

んで?

解析データの収集ツールとして使う分にはいいと思います。すごい使いやすいし、解析しやすい。使ってみて感動した。

ただし、現状ではログが消失する可能性があるので、ログ収集という意味合いでは使えないのです。
想定外のログ出力が消失してしまうので、不正アクセスみたいな問題があった時にトレースできなくなっちゃう。

syslogの代替に、って考えてるひとはご注意を(いないかな?)。

#infrapp2012に行ってきました

去る2012/2/10(金),11(土)に開催された インフラ&アプリエンジニア合同合宿 #infrapp2012 に参加しました。

とても楽しく、貴重な経験ができていい2日間でした。
金曜20:00に集合して、初日はいきなり23:00頃まで懇親会。
懇親会中にテーマ決め&チーム分けをして、その後はチームごとにひたすら作業。

好きな時に寝て、好きな時に起きるスタイルで翌日18:00までコツコツとがんばりました。

テーマ・チーム決め

テーマは主催さんたちが3つほど用意していましたが、それよりも思いついたやりたいものを優先ということで3チーム中2チームが自由選択でした。
懇親会でワイワイ話してる中でなんとなく気になることが形になってきて、なんとなくその場の流れでテーマごとにチームをつくるという極めてオトナな方法でテーマ・チームが決まりました。

今回は @sguaynさん、@do_akiさん、@yut148さんと4人で「Ruby on Rails or Redmineのプロファイラ作ろうか」って話でスタートしました。
命名:チームますだっく、だったんですが、チーム決めの中で@masudaKさんが移籍流出してしまい名前負けに…(ノД`)

ちなみに採用されなかったけど、「WordPressをhiphop対応させる」なんてアイデアも出てました。

紆余曲折

懇親会から帰ったらすぐに作業開始。
なんせテーマがフワフワしてるので、まずは各種言語のプロファイラを調査…してたら眠い…ということでうちのチームは1:00頃に早仕舞。
翌日がんばることにします。

翌日になってみたらみたで、さてどうしましょうという感じ。
最終的には「大事なのはデータのvisualizationだ!」ということで、ログをvisualizeするツールをつくることにしました。
もう思いっきり@kazeburoさんインスパイアって感じ。

このログがメンバー持ち込みのリアルログなもんだから、このあといくつかの問題を引き起こすことに…

ようやっとスタート

最終日の朝にテーマが決まるというスロースターターぶりを披露した我々ですが、アーキテクチャをざっくりと決めて9:30頃(うろおぼえ)には手を動かし始めました。
決めたことはざっくりこれだけ。

  • アーキテクチャ: fluentd -> mongodb -> node.js -> JavaScript側でグラフ描画
  • 担当
    • ログファイル -> fluentd @netmarkjp
    • fluentd -> mongodb @yut148
    • mongodb -> view @do_aki
    • visualize @sugyan

fluentdはTreasureDataのリポジトリからtd-agentをyumでさっくりインストール。fluent-plugin-mongoも入っててラクチン。
mongodbも10genのリポジトリからyumでさっくりインストール。
node.jsはちょっとよくわからなかったけど、nvmからインストール。 構築超簡単。

自分はfluentdもmongodbもnode.jsもちゃんと触ったことなくてどうなるかドキドキだったけど、簡単でえがった。

決まってからはさすがにみんな手が早くて、色々な問題に遭遇しつつだったけども18:00の締め切りまでになんとか形にすることができました。

↓発生してた諸問題(一部)

  • fluentdにencodeできない文字列を渡したとき、複数行まとめて入力してfileに出力していると途中で出力が途切れる(未解決)
    • リアルログならではの「想定外のデータ」が引き起こした問題でした
  • fluentd -> mongodbデータ連携してるときに、一気にでかいデータを渡すと buffer_chunk_limit を小さく設定しても Exceded maximum insert size of 16,000,000 bytes のエラーになる(@repeatedlyさんが対応してくれてる)
  • highcharts.jsで棒グラフに3分分(3〜4桁くらい)のデータを渡すとブラウザが固まる。折れ線グラフなら大丈夫。(未解決)

18:00で作業終了して、発表会。
みなさんちゃんと形にしてて、やっぱ作れる人はいいね〜と思った次第。

解散した後は有志で月島までいってもんじゃしながら打ち上げしてきました。うまかった!w

まとめ

どうにも締まらない文章で大変申し訳ないんですけど簡単にまとめると、とても充実した2日間(1.5日)でした。
普段なら組めないような人とチームを組んで開発できて、対応とか問題解決の速さに驚くことしきり。とても勉強になりました。
また機会があれば参加したい!

運営のみなさん、お疲れさまでした。ありがとうございました。

2011年のまとめ的な備忘録

年末なので、年末っぽいことを書いてみる。

今年は地震の影響で考えることが多かった。
地震がきて、いろんなことを「リアルに」感じて考えるようになった気がする。

人生観が変わったひと、変わらなかったひとがいたみたいで、人によってさまざまなのは当然。
自分に限って言うと、人生観はかなり変わったと思う。
体を動かしたり、声を出したり、人と交わったり…身体性の高いことを重視するようになったなぁ。

あと、考えることが多くなった。

考えることの一番は原発かなぁ。

声高に賛成も反対も言えてないけれど、原発怖いなと思ってる。

とても手に負えないものなんじゃなかろうか。

原発止めると経済が…って理屈で原発推進してる人もいるみたいだけど、 その理屈は、実は戦時中の

「米兵につかまるくらいなら玉砕もしくは自決すべし」

とかそういう視野狭窄と同じなんじゃなかろうかとも思っている。

でも判断材料がないんだよなぁ。

いままで自分からは遠い話だった原発のこと、 身近に感じて考えるようになってきた。

IT産業で電気をじゃぶじゃぶ使ってる身だからこそ、 いろいろ考えて行動していこう。

とりとめもないけど、何かの折に思い返すきっかけとして残しておこう。