2012年08月

fluentd meetup #2 に行ってきた

Fluentd meetup in Japan #2 http://www.zusaar.com/event/355006 に行ってきたのでメモを載せます。

古橋さん(作者)による fluentd の紹介

fluentd の紹介

  • slideshare, viki, contextlogic, nhn japan, cookpad, naver が使っている

fluentd の未来

  • fliter plugin の導入。書きやすくなるよ。
  • の中に をかけるようになるよ
  • データをフックするのもめんどくさかった。filter plugin で楽になるよ
  • messagepack v5 で性能あがるよ
  • td-agent-lite も配布
  • New process model & live restart
  • ログを取りこぼさずに再起動できるようになる
  • 後方互換性あるよ

質疑応答

  • Q. JSONじゃないログ収集ツールが多いが、それはそれで利点があるのか。どう考えているか。
  • ログを吐いたりするほうでJSONなどにするとそちらに負荷があがったりするので、収集のほうでやるべき、という考え方をしていると思う。ただ、ログを書く人と収集する人が違う場合、パースが難しい(フォーマットを知らない)ので、最初からJSONにしてしまおう、というのがfluentdのスタンス。
  • Q. windowsは?
  • coolio やめて thread にする。やります。
  • Q. 秒単位でしかでないんだけど、ミリ秒ほしいなぁ
  • 下位互換がなくなるので悩ましいけど、考えてみる
  • Q. プラグインのデバッグ
  • テストフレームワークは入っているが、出来が悪いので、次バージョンでは rspec ベースにしようとおもっている。
  • fluentd-cat, stdout プラグインがちょっと確認する時にはよい

楽天 ささき(from Japan) ワリ(from Mexico)

  • PaaS Operation Team
  • CLOUD FOUNDRY by VMWare written by Ruby
  • 社内に Heroku のような PaaS を用意したかった。唯一のオープンソースだった。
  • デプロイがかなり楽
  • vmc push yak22-myapp で終わり
  • ミッションクリティカルなツールだとちょっと難しそう。だったので、ソースコードいじりながら改善している。
  • 改善の一部としてロギング
  • CLOUD FOUNDRY に新しくデプロイすると、ログが消えてしまう(ファイルシステムが永続化されていない)
  • これじゃ、ビジネスには使えねー。ということで flutned を組み込んでみた。

ワリさんの英語タイム

  • CLOUD FOUNDRY written in ruby, and fluentd is also written in ruby.
  • Attach a fluentd collector to one application instance upon dispatch.
  • fluentd を使って永続化されているログストレージにフォワードする。
  • アプリ開発者は fluentd を使っていることすら知らずに cloud foundry を使う事になる。
  • パッチ公開してます。git@github.com:rakutentech/dea
  • これを cloud foundry の本体にいれたいと思っている
  • 困ってる事. nginx のアクセスログをとれない
  • nginx のなかに lua. lua のロガーとりたい => 会場から、今リリースする、との声
  • flume のチームと仲良くやりたいと思っている
  • Fluentd を優しく見守る監視事例 外道父@GedowFather DRECOM
  • インフラエンジニア。Hadoop. データセンターの選定など
  • データセンターが一杯。世界中に。それらすべてのサーバに agent をインストールしておき、一箇所に collector. 圧縮、暗号化、VPN. HBaseに保存
  • collector で復号化、解答している。
  • 本番の collector にテストのログが入る事故が以前あった。
  • forest, webhdfs でデータを書き込んでいる。
  • Fluentd の前は Flume で動かしていた。Flume について。
  • 十分な機能(圧縮はなかった(
  • 信頼のCDH付属
  • エージェント数百台規模で master が不安定
  • Agent のキューからの再送が不安定(タンス貯金現象)
  • Java だからいじるのも面倒。ビルドいるし。
  • td-agent にした。社内に rubyエンジニアいっぱい。機能不足はプラグインはなんとかなるだろう。
  • 全機能満たせた
  • インストールも簡単だった。

監視の話

ローカル監視

  • アラートメール
  • グラフ作成 => プライベートネットワークでやる
  • プロセス操作(デーモン再スタート)=> ローカル監視必要
  • サーバが社外管理の場合。サーバ調査。頻繁な設定変更。fluentd と一緒にローカルにぶちこむしかない。

監視内容

  • ログを記録しているか
  • ログの内容が正しいか
  • td-agentが正しく起動しているか
  • collectorに送っているか
  • td-agentが正しく起動しているか
  • hdfsに送っているか
  • ローカル監視には monit 使ってます
  • プロセスの監視やリソース監視
  • HTTPリクエストのステータス条件
  • スクリプト実行の帰り値条件
  • 条件判定によるアクション実行
    • スクリプト実行
    • アラートメール

monit でやってる監視内容

1. td-agent 基本プロセス監視

  • 常に起動しているように
  • agent は check process によるチェック (run//pid ファイルのIDとプロセス
  • collector は LISTEN ポート番号で

2. td-agent 重複デーモン対策

  • UDP/TCPの2プロセスたちあがる。
  • ps コマンドで2行あればOK。瞬間的に [td-agent] というプロセスが動くので除外している。
  • 重複きどうしていたら kill して起動している
  • v1.1.7 までの起動スクリプトにはバグがあり。start 2回やると2個立ち上がった。v1.1.8 では直ってる。
  • 重複してしまうと、1つのサーバから2倍、3倍でログが送られる。重複チェック必須!

3. flowcounterで転送状態監視

  • アプリがログを記録しているのか
  • fluentdがログを拾って配送しているのか
  • flowcounter 1時間に1回。1月に1ファイル。flowcount ログ
  • 2時間分のログに、1つでも10以上のカウントがあればOK

おちた場合

  • スクリプト内で原因をエラー出力してアラートを飛ばすように

問題点

  • copyなので forward に失敗しても、flow counter のカウント記録は失敗する。
  • collector が全部おちたり hdfs が落ちると flow counter どころじゃない

リモート監視

  • アラート・グラフ作成の集約
  • 状態の可視化
  • 特に collector のキャパシティ管理
  • agent にキャパシティの心配はほぼないが、collectorはagentが増えるにつれて対策する必要がある
  • グラフは cacti とか snmpd (agent, collector サーバにいれる)

collectorの仕事

  • in_forward 復号化/解凍
  • flowcounter
  • webhdfs
  • 圧縮まえと、解凍後だと2倍ぐらい。10sでflushしているがもっと間隔ひろげればいける?
  • 今CPU25%。何が最もCPU利用率に影響するのか?CPUとトラフィックの波形が一致しない。なんだろう?

こんなこといいな

  • collectorでagentを把握したい
  • 様々な環境に散らばった大量のagent
  • なんのagentがどこにいてどうなっていると正常なのか => agent から hostname / private address を送っておくと、どの agent が生きていたか監視できたりしていいかもなぁ、と。

質疑・応答

  • Q. 圧縮(暗号化)、解凍(復号)はどうやっているのか
  • プラグインをgzip compress level 6, blowflishするように改造して使っている。
  • pull request をもらっているので、そこから使える。outforward_compress なんかのようなプラグインを作ってもらえるとうれしい by 古橋さん
  • Q. どのぐらい処理できる? cyberagent の人
  • CPUのHzに依存する。右から左に渡すだけ。8千メッセージ/CPU (え、何Hzで?) by tagomoris さん
  • 今は1プロセスでしか動かないが、次のバージョンからマルチプロセス化いれようとしている。
  • Q. UDPのheartbeatが失敗する現象にあっている。対策しようとしている? by cyberagentの人
  • heartbeatをTCPにするか、tcpの接続があったらheartbeatの1カウントにするか
  • Q. collector の cpu 使用率はなにに依存している?
  • in_forward / out_forward はほとんどCPUをくわないようにしている
  • リクエストの数で(ロックで)CPUをくる。
  • もう少し詳しくみてみないとわからない。
  • Q. windows対応?発生源がwindows
  • td-agent-lite だけ windows でも動くようにしようと思っている
  • Q. F#実装 agent どれぐらいパフォーマンス出る. windowsから出る
  • まだ何個かの転送はできたなー、ぐらいの出来
  • Q. 設定ファイルをDSLにするという話があったが、v1.1から消えたようだが、どうなの?
  • 設定ファイルの中にrubyコード書いたら負けだな
  • plugin にサポートしてもらって(mix-in)、${hostname} で展開されるようにしようかと思っている。
  • config-expander, mix-in など

Fluentd & TreasureData でこっそり始めるログ集計 @mikeda

fluentd -> データストリームを統合管理する基盤

人と工数

  • 人 -> 自分だけ
  • 工数 -> そんなに必要ないかも。案外簡単だった。設定もぐぐって tagomoris さんのブログからコピればいける
  • サーバ -> 集約サーバ1台
  • トラフィック -> 気にするほどじゃない
  • 既存サーバへの負荷増加も無視できるレベル
  • パッケージの依存関係ほぼなし (td-agent が専用 ruby, gem同梱)
  • いれてもバレない!

既存アプリを絶対にいじらない方針でこっそりいれた

  • exec_filter 外部プログラムでフィルタを作れるプラグイン
  • au, softbank, docomo の UID をまとめちゃうフィルタ

簡単な管理画面を ruby & sinatora で作成

  • 100行いかないぐらい
  • HiveSQL で select した表を作ってみせてる。

Maillog は複数行で1単位。パースがつらい

  • in_tail を継承して拡張したプラグインを作った
  • 自作プラグインは /etc/td-agent/plugin/ に置くだけで動く
  • in_tailは拡張を前提としたプラグインになっている

LLdecade に行ってきた

Lightweight Languages の祭典、LLDecade http://ll.jus.or.jp/2012/ に行ってきましたので、メモを晒します。

基調講演 @miyagawa

#画像ベースの発表スライド。このメモは話していた言葉のメモ

  • decadeということで10年前を振り返ると、前田さんの本を読んでperl勉強してた
  • 最近プロゲーマやっている。。。さんと一緒に本書いた
  • Shibuya perl monger を takesako さんに渡していった話
  • yml についてはこの〜〜〜〜に文句言って
  • polygot == いろんな言語をやるひと
  • linked.inに載せているとスカウトがバンバンくる。写真の紫色の何?と聞かれたりする
  • 最近rubyやってる
  • perlプログラムはCPANかきたがる、rubyプログラマはDSLでテストフレームワークかきたがる、pythonプログラマはPEP使ってドキュメント書きたがる
  • python の志向は perl と逆でやり方は1つしかない。最初とっかかりしやすい。だんだんイライラしてくる
  • すでにあるものをがーと同じ仕様のまま別言語に移植している。アイデアだけ持ってくる人多いけど、丸っとコピッたほうが絶対らく。
  • python > perl wsgi
  • ruby rack > perl wsgi
  • php plack 作った > inspired by perl ….
  • rvm, brew, phpbrew, virtualenv とかぱくりぱくられ
  • wwwmechanize, mechanize とか
  • perl module 名前長過ぎ。説明的。
  • ruby 名前からわからず。キラキラネーム?
  • Sapporo ruby kaigi で同じような話をまたやります。COOKPAD
  • rubygems にもあげはじめている。
  • Keep cross-language conferences

質疑応答

  • Q. 最近rubyばりばりだということで、perlのライブラリはもう増えなくなっちゃうのでしょうか?
  • A. plack時代からもう結構書いてなかった。
  • Q. この言語にこれが足りない、というのはある?
  • A. php.sadness.com。rubyはけっこう綺麗な言語、オブジェクト指向言語。pythonはメタプロやろうとするときつい。perlも。
  • Q. エディター vim vs emacs. 最近若い人がどんどん vim 使っている
  • A. 会場 6:4。普通のエディタと vim あきらかに違う。なんでみんな vim 使うの?個人的には気になっている。
  • Q. 最近なきながらphpを書いている。無名関数をそのまま使えないphpのような言語を使え、と言われたらどうしますか?
  • A. 転職の時にphpをやっている会社を選択にいれない。
  • A. 道具は2番目。perlじゃないと嫌だ、とかは思っていない。転職してお金もらいながら新しい言語をやるのもいい。
  • Q. Facebookにリクリーティングされても入らない?
  • A. リクルートはなんどもされているけど、入っていない。でもfacebookはphpはDSLとしてしか使ってない。C言語にコンパイルするみたいな使い方
  • Q. javascriptについては?
  • A. jqueryを作った人はperlの人。サーバサイドに興味があるのであまりないかも。node.js はおっかけるかもしれない。
  • Q. 日本->アメリカ->日本とか移って、なにか違いなどの印象
  • A. あんまり違いない
  • Q. 逆に haskell とか erlang とか関数型言語についてはどう考えているのか
  • A. あまりやったことないので答えられない。でも盗める部分はもしかしたらあるのかな、とは思っている。

Language Update Decade

perl @dankogai

エンコーディング

2002 2012
perl 5.8 5.16
encoding ASCII UTF-8
use 5.X version check version互換

user strict; warnings;

  • use v5.8; だと今まで通り
  • use v5.16; だと use strict などデフォルト

__SUB__ 記法

  • 無名なんだけど再起呼び出ししたい場合

互換性

  • python 2 vs 3?
  • ruby 1.8 vs 1.9?
  • 対して perl 5.8 vs 5.16 は互換性OK

まとめ

  • Javascript の語彙は perl からもってきたものが多い。use strict が加わった。

php Rui Hirokawa

  • 日本語拡張、マニュアル翻訳、などをやっている
  • ここ10年のPHPの歩み PHP5の歩み
  • PHP5.0 SimpleXML, SOAP
  • PHP5.1,5.2 4割ぐらい速度アップ
  • 2008/08 PHP4.x EOL宣言
  • PHP.net新機能投票制に
  • PHP6.0 Unicode化 キャンセル
  • PHP5.3 PHP6.0のつもりだったが・・・ 名前空間、クロージャ、遅延静的束縛など他の言語にないものをやっと取り入れた
  • PHP 6.0 リリースキャンセル
  • PHPバイト列しかなかった。馬鹿にされていた。文字導入した。
  • ブランチ5.3にどんどん新機能が実装された。6.0が無視された。Rasmusさんが6.0リリースキャンセス決定 => こういうゴタゴタ感がPHPだめってやつか。
  • phpは歯ブラシのようなものだ。道具以上のものではない

python 柴田あつし

10年前 python ってどんなの?

  • 珍獣扱い。使っている人を見た事ない。秘密兵器
  • 2003年世界の python。期待のルーキー。標準ライブラリが充実。perlは相変わらずCPANないと何もできない。windowsを含めたマルチぷらっとフォーム。TkベースのGUIでさえも。

2002年

  • Googleが使い始める。Zope を使っていた。
  • Zope サーバ内蔵ウェブアプリケーションフレームワーク。
  • Linuxインストーラ anaconda もpyothon. apt/yum
  • NumPy 科学計算ライブラリが人気。LLは普通、多次元配列計算が苦手だが、pythonは得意
  • iPython インタラクティブシェル

pythonの10年

  • あんまり変わってない?
  • pyothon 2.3 - 2.7
  • python 3.0 - 3.3 モラトリアム期。もう成熟しているから変えたくないよ by widow
  • 慎重すぎるpython。widowが皆の意見をひろって、皆で納得できるように利点、欠点をまとめて公開している。時間はかかるが良い点

pythonはウェブだけじゃない

  • FORTRANやMathematicaの代替としてpythonが選ばれ始めている
  • バイオインフォマティクス、自然言語処理、CG、気象科学(日本の気象庁でも利用)、GIS、金融工学
  • 例) Lucasfilm と Twisted
  • 2004年から利用、分散レンダリングに利用

シンプルなのはいいこと。

  • シンプルさがもたらす恩恵
  • 複数の実装系 Jython, PyPy
  • Python inspired な言語。coffescript

pythonのサービス

  • instagram, dropbox, youtube

マイクロフレームワーク

  • python の denied が発祥 # そんなことないでしょ。
  • 単一ふぁいるでWeb app が作れるというエイプリルフールのネタ

そろそろpython3

  • みんなの python 第三版でます

ruby @matz

  • 2003年8月 1.8.0が出た!という話をした。
  • 2007年 1.9がでた。でもまだ皆つかってない。ユーザを甘やかしすぎた。php見習うべき。
  • Bettery includes主義。rubyいれただけで標準ライブラリがたくさん。1.8で見習ったが失敗 => php見習うのはまずかった。メンテナいなくなっちゃった。
  • 1.9の失敗。非互換のイメージ。でも、もう10年。そろそろ次に。
  • 2004年。rails。web の世界を変えた。2003年はウェブ開発に使っている人はいなかった。

コミュニティ

  • なぜ Ruby はこんなに Conference がある? C Conf なんてないぞ。
  • php の作者みたいに歯ブラシだ、なんて言わない。rubyを愛しているとか、言う。
  • なぜこんなに表にでてくるのか。Ruby をシンボルとするコミュニティ。
  • 開発をはじめてから来年で20年。20周年記念 => 2.0 => 2013/2月リリース予定。互換性には配慮する予定。

perl6 Update @takesako

プログラミング言語処理系を自作してわかったこと

next Perl5プログラミング言語Tora @tokuhirom

  • perl6の開発が宣言されてから、いまだ実用的な実装が出ていない
  • 待つのに疲れたので、俺が考えるperl5のシンカケイを作った
  • forkは世界をよくする。こともある。
  • toraが影響を与えてperl[56]がよくなってくれればよい
  • perl5の嫌な所。学習コスト。ソースコード読みづらい。
  • perl5 - 複雑さ+ perl6のいいところ = tora.

消したこと

  • context
  • @ary, %hash => $ だけにした
  • ; => 省略

足した事

  • autoboxing
  • ハックしやすいVM
  • Moose 的な組み込み

残したこと

  • $
  • my

tora

  • C++ impl

nana

  • translator for perl5

続きはYAPCで。

世界で最もECMAScript仕様に忠実なエンジン lv5 @Constellation

  • 早くするため独自仕様にするのではなく、遅かったら仕様を直しにいきましょう。
  • 仕様バグを直しにいったりもしている。
  • Register VM - Lua, JSCに影響を受けた設計
  • 高速化。アセンブラレベル。
  • railgun
  • breaker: JIT Compiler

JSX @kazuho

  • Javascript VM2回目。元サイボウズラボ。Q4Mとか
  • Javascript の問題。遅い。デバッグに時間がかかる。読みにくい。

JAX特徴

  • 静的型言語
  • 式と分は Javascript + 型指定。最終的にJavascriptに変換するのでオーバヘッドを下げるため

なぜ新言語なのか?

  • ActionScript3
    • ブラウザで動かない
    • 型がオプショナル
  • Dart
    • Javascript へ変換するオーバーヘッドが発生
  • Coffeescript
    • 静的型でなく、大規模向けじゃない
  • 冗長かもしれないが、言語だけよりも開発環境トータルでみることが大事。
  • エディタの補完機能なども提供している。冗長だから補完機能を実装しやすい。

質疑

  • Q. Hexe との比較はやらなかった?
  • A.いろんな言語に変換できるマクロ言語。ちょっと異なると思っている。
  • Q. 今の段階ではそんなに速度そんなに変わらない?
  • A. インライン展開などはJSXにしか入っていない

mruby作ってみた @matz

組み込み用

  • 生産性を求めて高級言語をつかいたい、と最近いわれている
  • Lua! => 高級感が足りない。perl5と同じにおいがする。

組み込み向け特徴

  • 組み込みAPI
  • 必要なデータは構造体に。デバイスにぽーんと渡して結果を受け取りたい。
  • rubyの外の世界を壊さない

移植性

  • ハードウェアのバラエティが広い。特定のOSに依存しない。C99。OSなしの環境でも動かしたい
  • プラットフォーム依存部分はコアに含めない。ファイルI/Oもない。

節約

  • 必要以上にメモリを消費しない
  • 不要な機能をはずせる。バイトコンパイラをはずせる。必須でない物はコンパイルオプションで外せる

ソフトリアルタイム

  • ハードリアルタイムは無理
  • GC. 1秒とかかると問題なので、インクリメンタルGC

  • apacheモジュール
  • レゴ・マインドストーム
  • rubyは仕様が複雑で別実装は出て来ないと言われていた。でもJRuby, Rubiniumなどいろいろでてきた。仕様より熱意が大事なのかな。

質疑

  • Q. いっそのことGCをオプションにしようという選択はないんでしょうか?
  • A. オブジェクト作りまくり言語。一時的に止める事はできるが、言語として止める事は難しい。
  • Q. ハードウェア専用のAPIなどはある?
  • A. 直接ハードウェアを叩く場合は、Cでモジュールかいてもらって、rubyから叩く形になる
  • A. libfffi が、ruby からcのライブラリを直接叩くことができるようにもなっている。@masuidrive
  • Q. 最適化、生成されるバイトコードはcrubyと違うのか
  • A. まったく違う。解析期は1.9のものを使っているが、そこから先は違う

継続的hogehogeははじまったばかりだ

pythonプロフェッショナルプログラミングを執筆する上でのCI的ななにか(仮) @cactusman

  • BeProud, python
  • 常時、ビルドした原稿を読みたい。早くレビューワにチェックしてもらいたかった。sphinx

Jenkinsでやったこと

  • sphinxのビルド
  • リポジトリのポーリング
  • ToDoのスキャン。Jenkins のプラグイン
  • ビルドした原稿をあれでもダウンロードできるように

難しかったこと

  • でもデザインは出版社。なので、しゃっパン社のフォーマットで提出。=> コピペミスが多かった。
  • 会社が違っている部分とかやりづらかった。=>働きかけても、何がいいのか理解してもらわないといけない。難しい。

Jenkinsの本を4人で書いている 太田さん

  • Jenkinsで本を書いている
  • Jenkinsの最も分かりやすい導入効果であるコンパイルの自動実行がLLではない
  • 自動テストを導入したいわけだが、自動テストがない、場合、じゃあ何で使う?
  • 静的検証。メトリックス。

Railsのテスト改善 高倉さん from スピリッツ

  • DB高速か。オンメモリのtmpfsを使って20%向上
  • Rcov
  • CI:Reporter (JUnit互換なのでそっちなれている人にはよい)
  • Jenkinsでテーブル定義書を自動生成している。コメントつけたいので、create_table などに :comment => を追加拡張している。
  • IRC。最近Skypeに移行しているので、ちょっとものたりない
  • CI導入して良かったこと => テストコード書かないメンバが激減した!

質疑

  • Q. 他の関係の薄い部署へのサポートはやっているんですか?
  • A. 共有redmineに情報まとめたり、権限与えて自分たちでできるようにしている。

JSでCIで椅子をなげられない方法 @kyo_ago

JSテスト事情アップデート

  • Javascript テストといえば。2ndさんのshibuya.jsの記事。

2つの問題

  • Ajaxや生成されるHTMLなどデータを伴うテストが難しい
  • テスト環境(IE, Firefox, Safari, Chrome, Opera) + Selenium

どうなった?

  • 非同期、setTimeout, Ajax系はSinonJSで簡単に
  • DOMのテストも容易に
  • 環境構築も楽になった

ツール

  • PhantomJS GUIがないブラウザ
  • クロスブラウザのテストは Swarm 系 (BusterJS) のツールで簡単になった
  • Javascript の UnitTest も進化している

UnitTest

  • JsTestDrvicer がおすすめ. Swarm系ツール。SeleniumをUnitTest向けにしたようなツール。Javaでかかれている。
  • JsTestDriver にリクエストを送ると、各ブラウザにそれを配信して結果を返してくれる。
  • スマホでも使える。Andorid2系
  • クライアントを常時JsTestDriver Server につなげている。

PHPでCIやるためのたった一つのやり方

ドワンゴ所属。Scalaやってる。型推論のある言語が好き

  • php標準関数のうごきが勝手に変わったり
  • 自分の身は自分で守るしかない。
  • レガシーのコードだらけ。テストコードもなかった。

CI始めました

  • これが普通なんだと思わせるために、なんでテスト書かないの?当たり前でしょ?とペアプロ
  • CIは勝手にやって後で怒られよう。後で成果みせて共有しよう。
  • テストのない四万行コード。諦める。手を入れない部分にはテスト書かない。
  • テストしやすい基盤コード
  • バッチをphpでかいたら、ないわー言われた。

php系ツール、プラグインの話

  • phpcd コピぺチェック
  • phpmd コードのきな臭さをチェック
  • php codesniffer コード規約

まとめ

  • php jenkinsで検索すれば出てくるよ!
A Ruby and Fluentd committer working at DeNA. 記事本文および記事中のコード片は引用および特記あるものを除いてすべて修正BSDライセンスとします。 #ruby #fluentd #growthforecast #haikanko #yohoushi #specinfra #serverspec #focuslight
はてぶ人気エントリー