68b7301f1ff52958813b129e8accbf3c0350fd14
[lab.git] / Commentary / Fluentd / fluentd.#2.log
1 古橋
2         cedec awards 2012
3                 fluentdで受賞
4         
5         self-introduction
6                 treasure data
7                         hadoop, big data
8                         logを入れる仕組みを誰も作っていなかった -> fluentd
9                         
10         video
11                 概要
12                         logをjson形式で集めて蓄積する
13         
14         次のバージョンどうするか
15         アンケート
16                 ログ解析に何を使っているか
17                         7割の方がfluentd
18                 保存先?
19                         mongdb 46%くらい
20                         RDBMS 40%強
21         導入障壁
22                 検討中
23                 ドキュメントが不足
24                         英語のDocが足りない、と思っている人は? -> 12人ぐらい
25                         日本語のDoc欲しい人は? -> 4人ぐらい(ほとんど居ない)
26                 プラグインなど機能が少ない
27                 実績が…
28         なぜロギングするのか
29                 error notify
30                         new reric
31                 performance monitor
32                         資源の仕様傾向をみて、あらかじめサーバを増強など
33                 user segment analysis
34                         ユーザの使用傾向
35                 funnnel analysis
36                         TOPページに来た人 -> サインアップしてくれた人はそのうち何%?
37                 heatmap
38                         時刻と曜日の二軸グラフ化
39         なぜロギングにfluentdを?
40                 alerting / analysis / archiving で様々な使い方をする
41                 log sourceも様々な物がある
42                 log sourceと蓄積先・alalysisをどうつなげるか
43                         bash script? perl?
44                         悪魔的なスクリプトは…
45                         メンテナンスできる人がいなくなると困る
46                         スクリプト書く人と、フロントエンドを書く人が別
47                                 期待するログのフォーマットが違う
48                 logrotate
49                         最大24h待たされる
50                 fluentd をhubに使えば上記の問題は解決する!
51         Input / Output / buffering
52                 それぞれpluginになっている
53         input pluginですべてjsonにする
54                 output pluginはjsonに対応すればよい
55         logの必須3要素
56                 時刻
57                 タグ
58                 jsonレコード
59         fluentdの特徴
60                 拡張可能な plugin 形式
61                 json という統一フォーマット
62                 インストールが楽
63         
64         plugins一覧
65                 DL人気順に並んでいる
66         
67         既存システムとの比較
68                 scribe
69                         拡張可能ではない
70                         統一フォーマット無い
71                         ....
72         
73         誰がfluentdを使っているのか
74                 slide share
75                 viki
76                 context logic
77                 nhn japan
78                 cookpad
79                 quora.com にどのように使われているのか、実績が書かれている
80         
81         fluentdの次バージョンについて
82                 filter pluginの導入
83                 <source> に filterを書けるようにする予定
84                 filter pluginによるpipelineが可能になる予定
85                 <label>
86                         デフォルトではマッチしない
87                         別のサーバでラベルを付けてからforwardされてくると、マッチするようになる
88                         設定ファイルは一緒だが、サーバごとに違う挙動をさせられる
89         
90         MessagePack for Ruby v5
91         
92         td-agent-lite
93                 in_tail = out_forward in "single" binary
94         
95         new process model & live restart
96                 現在は中央のプロセスを経由している
97                 
98                 live restart
99                         ログを取りこぼさずに再起動する
100         
101         後方互換性
102                 fluentd::new
103                 fluentd::old
104                 の名前空間で対応
105         
106         Q&A
107                 時刻の単位が秒なのだが、もっと細かくならないか
108                         ミリ秒とかが欲しい
109                 互換性の問題があるので、変更は難しい
110                 
111                 jsonで構造化されているのが売りだとのことだが、
112                         テキストベースの製品もまだある。どちらが良いのか
113                 Hadoopなどでパースするときに、jsonだと難しい
114                         ただし、ログの構造を知らない人がテキストファイルをパースするのは無駄が大きい
115                         なのでjsonにあらかじめ強制しておけば混乱がない
116                 
117                 日本語Docあるとうれしいので、お手伝いしたい
118                 オフィシャルのリポジトリ以外で、どんどん翻訳するというのはむしろ歓迎する
119                         どんどん広報して、力を合わせて欲しい
120                         公式Docと乖離してしまう問題はあるが、無いよりは全然良いので是非
121                 
122                 coolioを捨てる計画はあるか
123                 pluginとしては残すが、fluentd本体としてはthreadに移ろうと計画している
124         
125 佐々木 @yssk22 with ワリ @wallyqs
126         loggin infrastructure in PasS with fluentd
127         
128         Cloud Foundry (tm)
129                 VMware の PaaS
130                 ruby
131                 main points
132                         open source
133                         separation of concerns from IaaS
134                         Scalable architecture
135                 Easy to deploy applications
136                         node.js の deploy 4行くらい
137                 mission criticalなappはまだ難しい
138                         ソースをいじりながら対応しようとしている
139         Cloud Foundry + Fluentd
140                 $ vmc target api.cloudfoundry.com
141                 $ ...
142                 $ vmc push yssk22-myapp -n
143                 $ ...
144                 $ curl http:// ...
145                 $ vmc logs yssk22-myapp
146                 アプリケーションのupdateをするとログが消えてしまう
147                         現在の仕様
148                         FileSystemが永続化されていない
149                         解析が不能
150         
151         fluentd はrubyで書かれているので、cloudfoundryのエコシステムに組み込むのは優しい
152         droplet execution agent
153         どのようにログを蓄積するか
154                 [ App -> fluentd ] -> log storage
155                         log storageを外に用意する
156                         fluentd側でファイルなどから自由にログを収集してくれるので、
157                         app側でどのファイルにはき出すかなどを心配しなくて良くなる
158                 
159                 [ appA -> fluentd ] -> [ another fluentd -> storage ]
160                                        ^
161                 [ appB -> fluentd ] ---^
162         
163         Fluentd Pros & Cons
164                 Pros
165                         Easy to include in CloudFoundry compared to other solutions
166                         Easy to extend
167                         Easy to change storage tech depending on scale
168                 Cons
169                         ....
170         NATS input plugin
171                 adding new forwarding nodes dynamiccally through NATS
172         
173         github:rakutentech/dea
174                 https://github.com/rakutentech/dea
175                 https://github.com/rakutentech/dea/commit/64d271904de1e195cc90ca1958eadf704f530d94
176         
177         nginx + lua
178                 luaのloggerがあるとうれしい
179         appをdeployするたびにfluentdが立ち上がる点がちょっと複雑
180         
181         Q&A
182                 ログの流量はどれくらい?
183                 まだまだ全然
184                         CloudFoundryの上で動くappの数に依存すると思われる
185
186 Q&A
187         fluentという名前で最初は開始したが、既に同じ名前があったので、fluentdとした
188         
189         プラグインのデバッグがとても難しい、どのようにやっているのか
190         test frameworkのできがとても良くない
191         rspecを次バージョンで入れる予定
192         input -> fluent cat or 出力に stdioを入れるなどの対応
193
194
195 外道父@GedowFather
196 Fluentdを優しく見守る監視事例
197         自己紹介
198                 ドリコム
199                 インフラエンジニア
200                 
201         動作環境について
202                 IDCがいっぱいある環境
203                         それぞれにfluent agentが入っている
204                         Global IP/暗号化
205                         vpnは使っていない
206                         HDFSに保存
207         プラグイン
208                 改造したtail コマンドでagentへ
209                 ローカルで保存ししつつforward
210                 agent -> collector -> HDFS
211         collector
212                 test / production のログ切り分けを tagによって行っている
213         Fluentd vs flume OG
214                 flume OG
215                         十分な機能(暗号化は無かったので追加した)
216                         Java
217                         agentが数百台オーダーになるとメモリ不足
218                         agentからのキュー再送が不安定
219                         -> fluentdへ
220                         flume NG -> 知識の引き継ぎが出来ない感じだった
221                 td-agentにした
222                         パッケージ管理は重要
223                         Rubyエンジニア対応できる
224         ローカル監視
225                 必要な理由
226                         プロセス操作はローカルでやるべき
227                         サーバが社外にある場合
228                                 サーバを調査したり、煩瑣な設定変更 -> ローカルに無いと面倒
229                 注意点
230                         ログの内容が正しいか・ちゃんと記録されているか
231                         td-agentがきちんと起動・動作しているのか
232                         HDFSへちゃんと送られているか
233                 監視にはmonitを使っている
234                         CPUやメモリ、プロセス、ポート・プロトコルで監視できる
235                         スクリプト実行の返値でアクション
236                                 起動スクリプト実行、メール、etc
237                 monit
238                         td-agentの基本プロセスの監視
239                                 td-agentは常に動作している必要がある
240                                         主に人災(操作ミス)対策
241                                         check process によるチェック
242                                         collectorに対しては Listen portもチェック
243                         td-agentの重複デーモン監視
244                                 fluentdはtcp/udpごとに2プロセスが必要
245                                 psコマンドによってプロセス数が2つ見つからなかったらNG
246                                 プロセス名が ver 1.1.8 から変更になった
247                                 unicornなどのほかのrubyプロセスを除外
248                                 瞬間的に出てくる特権モード [td-agent] を除外
249                                 もし重複して起動していたら
250                                         init.d/td-agent stop
251                                         pkill
252                                         td-agent start
253                                 1.1.7までのtd-agentの起動スクリプトにはバグがある
254                                         confの内容によっては、service startの数だけプロセスが重複
255                                 mazgi事件
256                                         flumeはもうオワコンなので、fluentdだ! プラグインよろしくー
257                                         作ったプラグインを確認すると18/16倍くらいに増えてる
258                                         agent分よりHDFSが多くなっていた
259                                         あれ?4プロセス動いているサーバが2台有るぞ?
260                                         mazgi先生は濡れ衣だった
261                                         結論: agentが重複するとログが増える!
262                         flowcounterで転送状態監視
263                                 アプリがログを記録している証明
264                                 fluentdがログを拾って配送していること証明
265                                 部分的な記録ミスなどは、無視
266                                 あまりやり過ぎるとアラート対象が増える
267                                 問題点
268                                         copyなので、forwardに失敗してもflowcounterのカウント記録は成功したことになっている
269                                         collectorやHDFSが落ちたときは考慮していない
270                 fluentd + monit十分な感じ
271         リモート監視
272                 アラート・グラフ作成の集約と、状態の可視化
273                 特にCollectorのキャパシティ対策
274                 nagios + nrpe-server
275                 グラフはcactiとか
276                         cacti <- snmpd
277                         CPUとtrafficは必ず入れておかないと、fluentdを将来どうスケールするか読めなくなる
278                 一行350バイト程度・毎秒500行程度
279                 traffic
280                         圧縮でagent -> collector (10秒おき)
281                                 0.7Mbpsくらい
282                         collector -> HDFS
283                                 1.5Mbpsくらい
284                 CPU
285                         25%くらい -> 秒間2000行くらいまではいけるかなぁ
286                         ただし、ログのトラフィック量が変化しても、CPU負荷はあまり変化しない
287                                 agentの数や、agentからのflush間隔でCPU負荷が変わってくる? (要調査)
288                 CollectorでAgentを把握したい
289                         Agentは様々な環境にたくさん配置される
290                         Collectorの位置でまとめてAgentの状態を確認できるとうれしい
291                         NATだと、source addressが一つになってしまって、IPで識別は出来ない
292                         hostnameのprefixでグループ化?
293         監視を設定することで安定した運用が望める
294
295         Q&A
296                 agentの数は?
297                 300-400くらい
298                 
299                 VPNを張らなかった理由は?
300                 VPNは多様性と負荷分散性に弱い
301                 増やしたときにうまく分散するようにしたかった
302                 サーバの管理が社外に出てしまうこともあったため、そうなるとVPNは難しい
303                 
304                 圧縮・暗号化はどうやったのか
305                 forwardを改造した
306                 gzip/growfish
307                 
308                 暗号化は認証が欲しいが、どのような方法の認証が良いのか悩んでいる by 古橋
309
310 Q&A
311         forwardのソースを見ると、メッセージの送り方が三つあるが?
312         tag time record
313                 一番単純
314         ?
315                 バッチで送る
316         packed forward
317                 serialize/de serializeせずにforwardしたいとき
318         
319         公称対応限界は?
320         CPUの処理能力に単純に依存している
321         6万message / 8coreくらい
322                 forwardで受けて、flowcounterして、さらにforwardしているだけのノード
323                 1coreあたり8000くらい?
324         次のバージョンでマルチプロセスで並列化出来るようにする予定
325
326         forward -> UDPでkeepalive, TCP -> data connectionとなっているが、
327         message数が増えてくると、UDPの方が落ちてくることがままあった
328         次バージョンでheatbeatの改善を入れたい
329         TCPで接続が出来たら、heatbeatと見なすようにしたい
330         
331         collectorでのCPU負荷とTrafficの量に関連性が薄かったが、どこがCPU負荷になっていると考えられるか
332         リクエストの回数にbindするはず
333         lockに処理を奪われている感じがある
334         
335         Windows対応はどんな感じか? F#実装の性能は?
336         ログの発生源がWindowsの場合は、td-agent-liteをWin対応にして、ログ集積はLinux
337         F# -> テストは通って、実験は成功したが、ログ収集先をWindowsにしようとしているので手間取っている感じ
338         
339         設定ファイルをDSL化(erb)する話はどうなった?
340         DSL化すると、Rubyist以外につらい
341         設定ファイルは設定ファイルというままにした
342                 設定ファイルにプログラムを書き始めるのは負けだと思っている
343         mixin プラグイン側で対応するかも
344         
345         設定のDSL化が欲しいパターンはあまりなさそう
346         config expander
347         
348 池田 @mikeda
349         fluentd & TeasureDataでこっそり始めるログ集計
350         
351         自己紹介
352                 450台くらい
353         
354         fluentd
355                 データストリームを構造化するインフラとして認識している
356         
357         アクセスログ
358                 2億/day くらい
359         アプリケーションエラーログ
360         メールログ(試験中)
361         
362         「ログとかそんなに頑張らなくても良いのでは?」
363                 実際どうだったか
364                 工数
365                                         ---これ以降はノートPCが電源切れたので記憶を頼りに書いている
366                         一人でやってもそうかからなかった(?)
367                         ... とs... でadmin用簡易webUIを作った
368                                 100行+100行くらい
369                                 SQLっぽいクエリで結果をtableで得られる