Fluentd meetup in Japan #2に行ってきた

Fluentd meetup in Japan #2 に行った時のメモ

補足、訂正等があれば@ka_nipanまでご連絡ください。

あと、発表者さんのスライドのURLご存じでしたら教えていただけると嬉しいです。

 

http://www.zusaar.com/event/355006

http://togetter.com/li/360096

 

■Fluentdの現在と未来

http://www.slideshare.net/treasure-data/fluentd-meetup-2

なぜロギングするか

 エラー検知

 user segmentで分析したい

 ファンネル分析

 ヒートマップ分析

 マーケット予測

 

ロギングでなぜfluentか

 いろんな解析、エラー検知等々をしたい

 ログのソースもさまざま(DB,apache、アプリログ。。。。)

 ログを出す人と回収して解析する人が違う

→解析がしにくい

 fluentdならfluentにログを集めてさまざまなところに吐ける

必ずtime,tag,中身が入る

 pluginで拡張可能

 inputが必ずjsonなのですぐ解析できる

 インストールが簡単rpm,debパッケージ

だれがfluentdを使ってるのか

 slideshare,NHNJapan,NAVER,cookpad.....etc

 

filterプラグインをリリース予定

 同じ設定ファイルを使っていても、サーバの種類に応じた処理が可能

 詳しくはスライドの設定を見た方がわかりやすい 

 

messagepack4開発中

 シリアライズの速度がかなり上がるようだ

 

新しいプロセスのモデル

 現状、プロセスを分けたとしても中央のエンジンを通る

 再起動時にプロセスを残したまま新しいプロセスを起動

 ログを落とさずに、td-agentを止めずに再起動できる

 

質疑応答

Q.時刻の精度はミリまでいけないか? A.互換性の問題がある。議論をして考えたい

Cool.ioが消えて、threadになる予定

弊社の@mazgiがfluentのドキュメントを日本語化するって宣言してました。

 

■Logging Infrastructure in PaaS by Fluentd

Cloud Foundry を使って Platform as a Service を作る方法を説明しつつ,fluentd をどのように活用したのか

Cloud Foundry

 vm wareが作ってるPaaSのオープンソース

 デプロイが簡単

 ノードがダイナミックに変わるので、システム上ログがどっかに行ってしまう

 デプロイされるたびにfluentdを軌道している

 これである程度問題解決している

 

Cloud fundry fluent

 アプリからfluentd agentを使ってlog strageにログをためる

 

 ログの流量

  cloud foundry自体まだまだ普及していないので全然

  

https:/github.com/rakutentech/

 

luaプラグインありませんか?の声に、「会場でリリースされました」

http://lab.motionbeat.com/blog/archives/112

 

■Fluentdを優しく見守る監視事例

http://www.slideshare.net/GedowFather/fluentd-meetup-2-fluentd

不幸だったエンジニア@mazgiさん....

次の発表者待ちの間の質疑応答

・テストフレームワークは次バージョンからはRspecにする予定

 

・agent-collector間でのメッセージ通信量で一番重要になるのは

リクエストとの回数

ロックが一番CPUを食う

flash-intervalを減らすとCPU使用率が下がるかも

 

・windowsサーバ対応

発生源がwindowsだけなら td-agent liteだけwindows対応するという方向で行くかも

 

・設定ファイルをDSL化しないのか

DSL化するとrubist以外がつらくなる

設定ファイルにコードを入れると負けだと思う

DSL化は先延ばしになりそう

設定ファイルの中にホスト名を入れたいときは、いくつか実現できるプラグインがある

 

■Fluentd & Treasure Data でこっそり始めるログ集計

http://d.hatena.ne.jp/mikeda/20120826/1345972294

fluentほとんど使ったことない人向け

fluentd→データストリームを統合管理する基盤だと思っている

 

アクセスログ

アプリのエラーログ

メールログ

 

傾向分析と詳細分析が簡単にできるように

 

アプリケーション系の会社だとログ系は優先度が低くなりがち

 

人員

 自分一人だけ

工数

 導入、展開は超簡単

 

 

費用

最初は1台 2億/dayのアクセスログ

冗長化

実質1台でも捌けてる

 

トラフィック

in

out

 

パッケージの依存関係

 ほぼなし

 

ある程度の規模なら

超簡単にできる

 

プラグイン

exec_fileter

目的 

 UIDカラムを作る

 クエリストリング抜出

 携帯端末ID等のカラムを統合 等

 

かゆいところに手が届く便利ツールとして使っている

 

管理画面

 ruby + sinatra

 ジョブの一覧がみれる

 

tresuredata集計例

 tresuredataは500Gまでは無料

 SQLチックに簡単に集計クエリをかける

 UIDごとにリクエストURLごとにレスポンスタイムを計測

 

自作プラグインは/etc/td-agent/plugin/に置くだけで動く

 

とりあえずmogoDBにつっこんでいる

 

 

質疑応答

in_tailは利用者が拡張できるように書いている

 

td-agentの次以降のバージョン

 

TCPで接続が成功したらハートビート成功と判定するかもしれない

 

次のバージョンでマルチプロセス化するらしい

現状1プロセスしか使えないので、並列化しようとすると別ポートで複数プロセスを起動する必要がある

 
 
懇親会にて、2/200の確率でHBase(火山)本が当たりました。
感想は読んでから書きます....
 

f:id:muramat:20120823133028j:plain

 
 

Pythonでenvelope-fromを指定する

python envelope-fromでぐぐったら、ピンポイントで見つからなかったので残しておく。

 

>||

 import email,smtplib

 

msg = email.message_from_string('\n'.join([

    'To: hoge@fuga.jp',

    'From: kanipan@river.jp', #メールに表示される差出人

    'Subject: test email',

    '',

    'test'

]))

smtp = smtplib.SMTP()

smtp.connect()

smtp.sendmail('envelope-from@fuga.jp', 'to_address@fuga.jp', msg.as_string())

||<

 

こうすると、メールが届かなかったときに「envelope-from@fuga.jp」にエラーメールが飛んでくる

Hadoop ソースコードリーディング第11回に行ってきたよ

Hadoopソースコードリーディング 第11回のメモを共有しよう #hadoopreading

http://d.hatena.ne.jp/garage-kid/20120730/hadoopreading11

メモ共有です。

上記エントリを参考に補ったり、補わせてもらったりしました。

 

■CDH4に入った新機能 NameNode HA の実力を試してみました (NTTデータ 山下 真一 氏)

CDH3の場合

 ・hearbeat + DRBD

 ・facebookが提供しているAvoterNode

 

課題

 切り替わった瞬間にmapreduceが中断

 切り替わった後に、もう一回実行しなおさなければならない

 mapred.jobtracker.restart.recoverがあるがCDH3では動かない

 namenode立ち上げ後、元のように使うには時間がかかる(ブロック数が多ければ多いほど)

 

そこで、namenode HA(CDH4から提供)

 NFSでeditsファイルを共有

 zkfc(ZooKeeper FailoverController)がフェンシング

 

 name nodeが落ちた場合

  active側が落ちる

  active側のzkfcが検知

  新しいのname nodeを選ばせる

  落ちた方のname nodeの疎通確認

  フェンシング

  新しいname nodeをactiveに

  新しいname nodeの情報通知

  

  ホットスタンバイ形式で動いている

  秒単位のオーダーで動く

  

 active側のzkfcが壊れた場合

  zkfcでロックが消失

  スタンバイ側のnamenodeに切り替え

  zkの状態を更新

  

 mapreduce実行中に故障→問題なし

 HDFS操作中に故障→問題なし

  

 NFS

  NFS故障では待機系のサーバ切り替えは不可能

  どっちのname nodeもプロセス停止

 

 namenode HAのポイント

  2種類フェンシング方法がある

   ・sshfence

    sshでログイン→コマンドでプロセス停止

    fuser -v -k -n tcp <NN RPC port>実行(デフォルトポートは8020)

   ・shellfece

    自分で作ったシェルでプロセス停止

   

    両方のフェンシングを設定しておくこと(なんらかの理由でそもそもsshログインできなかった場合に備えて)

 

  NFS

   ソフトマウントすること

    ハードマウントだとNIC異常時に応答がかえってこなくてそのまま終了になる場合がある

 

  NFS自身の対策

   HA化が必要

   複数のNFSのマウント先に記述する実装が必要

    →今のところ、仕様上できない

 

  フェデレーション

   namespace単位でHA実現は可能

 

   設定

    fs.default.name

     アクセス先のnamespaceを入れる

     dfs.namesarvive

 

  Full GC発生時の考慮

   タイムアウトの設定は意識すること

   namenode HAは現用、待機系ともにメタ、ブロック情報はヒープメモリで持ってるので、注意

   Full GCやってるときはサービス停止してるがそれ以外は停止しない

 

  namenodeのメタ領域

   1.0から少し変わっている

   fsimage

     保存世代数を設定できる

      dfs.namenode.chekcpoint.retained

     チェックポイント間隔

      dfs.namenode.checkpoint.period

 

  edits

   保存世代数 100万世代(デフォルト)

    dfs.namenode.num.extra.edits.retained

   チェックポイント間隔が短くなった

 

 namenode HAのメリット

  mapreduceが継続できる

  ダウンタイムが数秒

 

 namenode HAデメリット

  モニターする仕組みが足りてない

   webインターフェースで見れるものがない

  NFSサーバがシングルポイント

  設定するプロパティが増える

  構成や設定は十分検証が必要

 

 HAという意味ではBookKeeperを持つべき

 ほかの手段と組み合わせるという手も

  Fault Tolerance

 

■複数DCで運用するhadoop/hiveデータ解析(GMOインターネット 新里 祐教 @hirotakaster 氏)

 

http://www.slideshare.net/hirotaka/data-analytics-with-hadoop-hive-on-multiple-data-centers

 

複数拠点それぞれにnamenodeを置いている

自前の集計用スケジューラ

クライアントはそれらをマネージするシステムから実行単位等(hourly,daily...)を操作する

dailyで20TBオーバーのトラフィック

 

Hive + MySQL でデータ解析

 テーブルのカラムを変更する際には、tmpテーブルを作って対応

 

データフロー

いったん来たログを突っ込むログサーバー1200台

データをつっこむのはhiveのload dataを使ってパーティション指定(date,log_number)でつっこむ

 

定期的にhadoop arciveを使ってnamenodeがメモリオーバーしないようにしている

 

マネジメントシステム

zabbixで監視

 manage用のネットワークを立てている

 namenodeのメモリ等を監視

 

トラブルシューティング

単純に全スロットにメモリさしてもよろしくない

 パフォーマンスがすごい低下する

 

分析の再実行

 

バックアップ、リカバリー

 NFS使ってた

  ver2だとサイズ2G以上のサイズは受け渡しできない

  今はNFS+metadataのbackupをtazで保存

 

Hiveに完全依存してはいない

 mapredeceを自分で書いたりもしてる

 

150並列ほど

CPU 5,600

 

DCをまたいだ処理はしてない

 ネットワーク帯域よりもレイテンシがネックとなりすごい遅い

 

解析済みデータはアーカイブ行き

 HDFS上で管理する意味はない

Hadoop ソースコードリーディング第9回に行ってきたよ

ものすごい遅ればせながら。(自分用のメモですが)

Hadoop ソースコードリーディング9回

 

■NHN JapanにおけるHive実行環境の構築

http://www.slideshare.net/tagomoris/hive-tools-in-nhn-japan-hadoopreading

 

・Hiveの使用目的:アクセスログの集計

解析はやってない

ライブドアが提供しているサービスのUUやPVを見てる

特定のパスに対してどれだけアクセスがあったか

どの検索エンジンできたか

サーチエンジンbotどれだけいるか 等

 

・集計処理概要

fluentd→(ログ)→Hadoopクラスタ←(HTTPでHiveQLを投げる)←Shib(Hive webクライアント)←(GUIクエリ生成)←ShibUI(Query Management System)

 

ログはfluentdを使ってHadoopクラスタ

hadoopクラスタ内にHIVEサーバを立てる

THrift経由でshib(node JSで構成)、KVSはKTを使っている

ユーザはブラウザからアクセスして、ShibUIでクエリを生成、HTTP経由でHiveQLを投げる

 

・テーブルのパーティション

サービス、日付ごとに分けている

indexは使っていない、力技でなめてる

 

・map reduce を手で書くのは厳しい

 

・なんでHIVEなのか

SQLっぽい見た目だと安心して使われる傾向にある。。。

 

・プログラムっぽい形式だと、もったいないからメンテしながら使おうという心理がはたらきやすい

簡単なクエリをガンガン書いてガンガン捨てよう

 

・なぜクライアントを作ったのか

HUEを使いたくない

→なんでもできるから、なんでもさせたくない

クエリを書いてほしいけど、alterとかdropされると困る。。。。

 

・多ツールとの連携ができないとつらい

HTTPのAPIがほしい

何か機能がほしくなったときに自分の手で何とかできるものが望ましい

 

・Shib

HIVEのクライアントとして動くWEBアプリ

selectのみ発行

発行されたクエリを保存

クエリをbodyにつっこんでHTTPリクエストを送ると実行される

hadoopに入って実行しなくて済む

shibはgithubに公開している

 

・ShibUI

社内用ツール

スケジュールのクエリを流して、結果をグラフにプロット

どのクエリの結果をだれが参照したかを記録できるようになってる

 

・HRforcast

社内用ツール

グラフ作成ツール

HTTPリクエストを投げるとグラフ作成

 

・クエリビルダー

開発以外の人がクエリ核のつらい

ドロップダウン式の条件でクエリ自動生成

簡単な集計はツールで、複雑なのは別途相談する運用

 

・裏で走ってるmap reduceをころしたい

Huahin Manager

HTTP経由でjobtrackerにアクセスできるようにするつもり

 

・node 0.4だと動くが0.6だと動かない>shib

 

商品マスターとかjoinするようなものは外部で突き合わせるようにしている

 

 

■Hiveソースコードリーディング

http://www.slideshare.net/wyukawa/hive-sourcecodereading

 

・なんでソース読もうとしたのか

好奇心

最適化プロセスはどうやって採用されるのか

 

・HIVEのパフォーマンスチューニングってあんまりない。。。

あるとすればパーティションを切るくらいか

 

・どこを読んだか

オプティマイザ周り

HIVコンパイラ

 

Hive Anatomy

(http://www.slideshare.net/nzhang/hive-anatomy)

Internal Hive

(http://www.slideshare.net/recruitcojp/internal-hive)

この2つのスライドが参考になる

 

・中身が複雑。。。。

メソッドの長さが異常。。。。ディスプレイ画面に収まらない

オプティマイザのソースを読んでると気が狂うというチケットが。。

The Optimizer architecture of Hive is terrible.....

→patch welcome!!

 

explainをみてもチューニングどこをしていいかわからない

 

・optimizarのアルゴリズム

コストが最小のプランを選択する

コストとは、HiveQLを正規表現でマッチした文字列が一番短いものを選択

 

・パフォーマンスチューニング

Hiveのプロパティ

-hive.map.aggr

default true

map側で集約する inmapperconbining mapperでメモリにためて、いいタイミングでflushしてくれる

 

-hive.auto.covert.join

default false

joinに関するオプション

片方のテーブルサイズが小さい場合にうまい具合にjoinするよ

閾値 25M-30M

これより小さいとこのオプションが動く

これをやるとそこそこ高速化

 

-hive.exec.parallel

default false

自動で並列実行してくれる

1つのテーブルを参照して、3つのinsertをするときなどにパフォーマンス向上

 

パフォーマンスチューニングの選択肢はparallelとconvert.joinくらいしかない

データモデルやETLモデル、どうやって簡単にクエリを作るかを考えたほうがいい

 

■誰も得しないアンドキュメンテッドな機能の紹介

http://www.slideshare.net/tamrin69/hive-undocumented-feature

 

・HiveCLIコマンド

./hive --service cli

dfs     :Hadoop DFSコマンドが使える

list    :ADDしたjarの一覧が見れる

source  :シェルのsourceと同じ

!       :シェルの実行

show locks,msck:たたくな危険

 

・Hook機能

投げたクエリ

ユーザ

等々がとれる

基本的に単体テストに使うくらい

実際にフックしたことはない

 

・PeffLog

perfLogをオーバーライドすれば独自logger実装可能

 

・PDK

hive0.8~

UDFの追加を楽にする

PDKビルドの仕方

アノテーションの指定

@uDFTYPE

deteministic stateful

distinctLike

@Description

name

description

extended

 

自動でUDF登録できない!!

hive.aux.jars.pathに入っていればおk

HIVECLI起動時にHIVE_AUX_JARS_PATHを指定

HIVECLI起動時に自動でスクリプトを実行する方法ならある

 

・自分でHiveサーバーを作ってみた

JAVA200行程度

HTTP RESTサーバ

自動UDF登録

公開はしないとのこと....

 

・0.8で入った新機能はバグだらけなので使ってはいけない....

ドキュメント化されていないものにはそれなりの理由がある

HIVEサーバー

認証機能が認証しない等々