[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
SlideShare a Scribd company logo
それfuentdで!
- 社内勉強会資料 -
2014/03/04
@boheanimato
自己紹介
のりしろエンジニア。
プロジェクトで落っこちてきた、
なんか細々としたことを拾い上げてやってます。
Twitter : boheanimato
-SIer 1999/10~
-Yahoo! 2005/11~
-Indival 2007/7~
INDEX
-fluentdの紹介
– こんなことができるようになります
– アーキテクチャ簡単紹介
-こんなことをやってみました
– apacheのログを集約して、elasticsearchにいれて、kibanaでみてみる
– apacheのログをURL毎にグルーピングしてレスポンスタイムを
GrowthForecastでみてみる
-現状をこうしよう!
– apacheログの集約、集計、活用
– MySQLの更新履歴をfluentdでSolrにいれる
-可視化について
– 事前に考え抜くこと
– 目的の明確化、KGIとKPI
– 設計サンプル
INDEX
-fluentdの紹介
– こんなことができるようになります
– アーキテクチャ簡単紹介
-こんなことをやってみました
– apacheのログを集約して、elasticsearchにいれて、kibanaでみてみる
– apacheのログをURL毎にグルーピングしてレスポンスタイムを
GrowthForecastでみてみる
-現状をこうしよう!
– Apacheログの集約、集計、活用
– MYSQLの更新履歴をfluentdでSolrにいれる
– もっといろんなこと
-可視化について
– 事前に考え抜くこと
– 目的の明確化、KGIとKPI
– 設計サンプル
こんなことができるようになります
-ログを一箇所に集約!集計!格納!
MySQL、MongoDB、Solr、Redis、 elasticsearch、
Hadoopに簡単にはいります
-サーバの閾値監視、通知!
Zabbixに値を送れたりします
メールおくれます、電話もかけれます
アーキテクチャ簡単紹介
一般的にログ収集ソフトウェアは
何らかの「イベント」を検知し、
その内容を発生時刻などの情報とともに
ファイルやデータベースなどのストレージなどに出力す
る、という処理を行います。
fluentdでも同じです。
ただ、fluentdでは
イベントの受け取り(input)、
バッファに一時的に保存し(buffer)、
ストレージなどへの出力(output)
がすべてプラグインとして実装されています。
アーキテクチャ簡単紹介
柔軟なログ収集を可能にする「fluentd」入門 - さくらのナレッジ :
http://knowledge.sakura.ad.jp/tech/1336/
・テキストファイルの末尾か
らイベントを読み込む
・TCPソケットをリッスンし
て、イベントストリームを受
信する
・syslogプロトコル経由でレ
コードを取得
・ほかのfluentdのノートに
出力する
・MongoDBへとレコードを出
力する
・ファイルに書き出す
アーキテクチャ簡単紹介
プラグイン
超豊富
Fluentd plugins : http://fluentd.org/plugin/
こんなことができるようになります
「細かい単位で常にログを回収し続ける仕組み」
をいったんfluentdでつくっておくと
→ プラグイン実装
→ プラグインが豊富
なので、
回収したログをファイルに出力していたが、
elasticsearchにも格納しようとした場合、
プラグインを追加して設定するだけで、
その要求にすぐに応えられます。
INDEX
-fluentdの紹介
– こんなことができるようになります
– アーキテクチャ簡単紹介
-こんなことをやってみました
– apacheのログを集約して、elasticsearchにいれて、kibanaでみてみる
– apacheのログをURL毎にグルーピングしてレスポンスタイムを
GrowthForecastでみてみる
-現状をこうしよう!
– apacheログの集約、集計、活用
– MySQLの更新履歴をfluentdでSolrにいれる
-可視化について
– 事前に考え抜くこと
– 目的の明確化、KGIとKPI
– 設計サンプル
システム構成
APIServerWebServer
Elasticsearch
Redis
GrouthForcast
Raw File
StorageServer
WebServer
forwarder
fluent-agent-lite
Aggregator
Worker
serializer
Fluentd + plugin
watcher
Raw File
APIServerWebServer
Elasticsearch
Redis
GrouthForcast
Raw File
StorageServer
WebServer
forwarder
fluent-agent-lite
Aggregator
Worker
serializer
Fluentd + plugin
watcher
Raw File
apacheのログを集約(Forwarder)
apacheのログを集約(Forwarder)
LTSV - Labeled Tab-Separated Values
テキストのフォーマットの仕様。
タブ区切りのフィールドで、ラベルと値を持ちます。
主にログ、特に httpd のアクセスログなどに適用すると便利。
後で、ログの解析の属性指定やelasticsearchに格納する際のカ
ラム名として利用。
LTSV FAQ - LTSV って何? どういうところが良いの? - naoyaのはてなダイア
リー : http://d.hatena.ne.jp/naoya/20130209/1360381374
apacheのログを集約(Forwarder)
LTSV - Labeled Tab-Separated Values
Apacheの設定をこうしておくと、
LogFormat
"domain:%Vthost:%htserver:%Atident:%ltuser:%uttime:%{%Y/%m/%d
%H:%M:%S %z}ttmethod:%mtpath:%U%qtprotocol:%Htstatus:%>stsiz
e:%btreferer:%{Referer}itagent:%{User-Agent}itresponse_time:%D"
combined_lts
こうなります
タブ区切りで、ラベル:値で出力されます。
apacheのログを集約(Forwarder)
fluent-agent-lite
INPUTプラグイン
ログ収集専用のエージェント
正規表現をパースしないため、動作が軽く、負荷の高いアプリ
ケーションサーバに同居させてもCPUを使わない。
現状、そのままのログをシェルで集約して、それをもとにバッ
チが動いて集計しているので、
既存の仕組みをそのままで、導入できる!
#fluentd 用ログ収集専用のエージェント fluent-agent-lite 書いた -
tagomorisのメモ置き場 :
http://d.hatena.ne.jp/tagomoris/20120314/1331716214
apacheのログを集約(Forwarder)
fluent-agent-lite
インストールはプラグインを
rpmで入れるか、
Gitからcloneして./install.shするか
td-agentはインストールしません
apacheのログを集約(Forwarder)
fluent-agent-lite
Forward先のサーバ
集約したいログ
apacheのログを集約(Forwarder)
Fluentdのログ構造
-Tag
– ログの種類。
Fluentdではログの管理を「タグ」で管理します。
タグはイベントを発生させる側などで指定します。
-Time
– ログの時刻をUNIX時刻で表したもの
-Record
– ログの内容がJSONオブジェクトではいります
アプリケーション側でのパースが容易
Tag : koala.www. Time : 137084495 Record: {k1:100, k2 :value1}
apacheのログを集約(Forwarder)
fluent-agent-lite
-Tag
前述の記述の場合、
以下の3つのタグがついたレコードが流れます。
-koala.www
-koala.app
-koala.stat
-Record
そのまま、messageというattributeが付いた中に入っ
て送られます。
レコードのattributeも変更可
(デフォルトmessage)
Tag : koala.www. Time : 137084495
message : {ログが1行づつ入りま
す}
apacheのログを集約
(Aggregater/worker/serializer)
APIServerWebServer
Elasticsearch
Redis
GrouthForcast
Raw File
StorageServer
WebServer
forwarder
fluent-agent-lite
Aggregator
Worker
serializer
Fluentd + plugin
watcher
Raw File
td-agentをインストール
http://docs.fluentd.org/categories/installation
apacheのログを集約
(Aggregater/worker/serializer)
fluent-plugin-file-alternative
OUTPUTプラグイン
出力フォーマットを自由に変更できる!
(fluentd 標準のファイル出力プラグイン out_file はメッ
セージをJSONにシリアライズして出力するというものなので)
前述のプラグインとあわせると、
「そのままのログを集約して一か所で出力!」がfluentdで実現
できるわけです。
#fluentd fluent-plugin-file-alternative released! - tagomorisのメモ置
き場 : http://d.hatena.ne.jp/tagomoris/20120316/1331886385
apacheのログを集約
(Aggregater/worker/serializer)
設定ファイルの記述ポイント2つ
/etc/td-agent/td-agnet.conf
-source
イベントの受信方法を指定
-match
受信したイベントをどのように処理するかを
条件文とともに指定
条件はタグの名前
条件にマッチしたら、次のプラグインに
処理が渡されます
apacheのログを集約
(Aggregater/worker/serializer)
fluent-plugin-file-alternative
koala.www.*のタグにマッチしたイベントを処理
apacheのログを集約
(Aggregater/worker/serializer)
forward TCP/IPを使ってイベントを受け取る。
ログでました
/tmp/ koala.access.20140228_0.log.gz
apacheのログを集約
(Aggregater/worker/serializer)
さらに、このLTSVのログをパースして
elasticsearchにいれてしまいます
apacheのログを集約
(Aggregater/worker/serializer)
apacheのログを集約
(Aggregater/worker/serializer)
LTSV形式をパースして
Elasticsearchにいれてる
fluent-plugin-parser
fluent-plugin-elasticsearch
fluent-plugin-parser
最初、そのままelasticsearchにデータを流すと、messageタグの中には
いったまんまelasticsearchインデックスが作成されてしまい、うおおお
とか思っていたのですが、
@tagomorisさんから、アドバイスいただきました。
fluent-plugin-parser released! - tagomorisのメモ置き場 :
http://d.hatena.ne.jp/tagomoris/20120402/1333363444
apacheのログを集約
(Aggregater/worker/serializer)
負荷の問題がないのなら、
fluent-plugin-parser で ltsv をparse
してしまえばいいと思いますよ
-parse実行前
apacheのログを集約
(Aggregater/worker/serializer)
elasticsearch
apacheのログを集約
(Aggregater/worker/serializer)
kibana
apacheのログを集約
(Aggregater/worker/serializer)
kibana
apacheのログを集約
(Aggregater/worker/serializer)
LTSVでつけたラベル毎に検索
できる
INDEX
-fluentdの紹介
– こんなことができるようになります
– アーキテクチャ簡単紹介
-こんなことをやってみました
– apacheのログを集約して、elasticsearchにいれて、kibanaでみてみる
– apacheのログをURL毎にグルーピングしてレスポンスタイムを
GrowthForecastでみてみる
-現状をこうしよう!
– apacheログの集約、集計、活用
– MySQLの更新履歴をfluentdでSolrにいれる
-可視化について
– 事前に考え抜くこと
– 目的の明確化、KGIとKPI
– 設計サンプル
apacheのログをURL毎にグルーピング
(Aggregater/worker/serializer)
画像、JS、CSSを対象外に
200以外のステータスは捨てる
GET以外のメソッドは捨てる
fluent-plugin-rewrite
Index.phpはtopとして扱う
グルーピングする
apacheのログをURL毎にグルーピング
(Aggregater/worker/serializer)
fluent-plugin-rewrite
このプラグインを用いると、ひとつひとつのmessageについて、
指定したkeyのvalueが特定のパタンにマッチしたら、
-valueを書き換えて、再emitする
-そのmessageを無視する
-マッチした文字列をtagに追加して、再emitする
ということができる。また、それらのルールを複数指定するこ
とも可能。
fluent-plugin-rewriteというプラグインを作成した #fluentd - delirious
thoughts : http://blog.kentarok.org/entry/2012/07/01/000518
apacheのログをURL毎にグルーピング
(Aggregater/worker/serializer)
fluent-plugin-rewrite
タグ毎にグルーピングできました
apacheのログをURL毎にグルーピング
(Aggregater/worker/serializer)
fluent-plugin-numeric-monitor
fluent-plugin-forest / fluent-plugin-growthforecast
レスポンスタイムの集計
集計をgrowthforcastにくわせる
apacheのログをURL毎にグルーピング
(Aggregater/worker/serializer)
fluent-plugin-numeric-monitor
指定したフィールド(の数値)について、min/max/avg およ
び指定したパーセンタイル値を算出する。
パーセンタイル値は複数指定できるので、
たとえば 90, 95, 98, 99 パーセンタイル値をそれぞれ出
力したりできる。
fluent-plugin-numeric-monitor v0.1.0 and fluent-plugin-numeric-
counter v0.1.0 released! - tagomorisのメモ置き場 :
http://d.hatena.ne.jp/tagomoris/20120706/1341560190
apacheのログをURL毎にグルーピング
(Aggregater/worker/serializer)
Growthforcast
定期的にGrowthForecastに値をPOSTするだけで、設定なしでグ
ラフが作れます
GrowthForecast - Lightning fast Graphing / Visualization :
http://kazeburo.github.io/GrowthForecast/index.ja.html
apacheのログをURL毎にグルーピング
(Aggregater/worker/serializer)
Growthforcast
INDEX
-fluentdの紹介
– こんなことができるようになります
– アーキテクチャ簡単紹介
-こんなことをやってみました
– apacheのログを集約して、elasticsearchにいれて、kibanaでみてみる
– apacheのログをURL毎にグルーピングしてレスポンスタイムを
GrowthForecastでみてみる
-現状をこうしよう!
– apacheログの集約、集計、活用
– MySQLの更新履歴をfluentdでSolrにいれる
-可視化について
– 事前に考え抜くこと
– 目的の明確化、KGIとKPI
– 設計サンプル
現状をこうしよう!
(apacheログの集約、集計、活用)
そこfluentdで!
APIServerWebServer MySQL
StorageServer
WebServer
SCP
SCP SCP
Batch
現状をこうしよう!
(MySQLの更新履歴をSolrにいれる)
fluent-plugin-mysql-replicator
運用面メモ
Aggregator側:1プロセスでは1つのCPUコアしか使わない
ので、サーバのリソースを使い切るために、複数プロセス
を起動
→8プロセス起動させる
(プロセッサ8つ、物理CPUは1つ、コア数4の場合)
割り当てポートは、24200~24207などに
Forwarderから送信時に、ポート指定で送信するようにす
る。
INPUTで受け取る大きさを考慮してバッファは指定するな
ど、実運用で検討すべきパラメータはたくさんあります。
本番運用のまえに
各種パラメータとか流量は検討しよう!
INDEX
-fluentdの紹介
– こんなことができるようになります
– アーキテクチャ簡単紹介
-こんなことをやってみました
– apacheのログを集約して、elasticsearchにいれて、kibanaでみてみる
– apacheのログをURL毎にグルーピングしてレスポンスタイムを
GrowthForecastでみてみる
-現状をこうしよう!
– apacheログの集約、集計、活用
– MySQLの更新履歴をfluentdでSolrにいれる
-可視化について
– 事前に考え抜くこと
– 目的の明確化、KGIとKPI
– 設計サンプル
可視化について
今回はプロトタイプ作成のために、
とりあえず可視化できるよ!
というのをしたのですが、
できることが把握できた後は、
何のため?という目的を明確化して
本番の実装はすすめていこう(自戒)
可視化について
事前に考え抜くこと
「何を可視化するか」
「可視化すべきKPIを決める」
「具体的なKPIの中身を定義する」
目的から指標を決める
目的は何かを考え抜くこと
可視化について
目的の明確化、KGIとKPIを決める
目標:「売り上げ向上」
KGI(Key Goal indicator)
目標そのものを定量的に評価するもの
– 「売上」
KPI(Key Performance indicator)
KGIの構成要素を細分化したもの
KGIを達成するために何が必要かを定量的にあらわ
す指標
– 「顧客数、一人あたり単価、PV、継続率」
可視化について
項目 内容
目的 一目でサーバ情報の異常や傾向を把握できるだけでなく、気になった
ところを拡大して調査できるようにする
データ変数
⇔視覚変数
時間(間隔尺度)⇔ X座標(定量性・順序性)
各種サーバ情報(比例尺度)⇔ Y座標(定量性・順序性)
利用する
可視化手法
折れ線グラフ
推奨Web特性 アニメーション(リアルタイムでのデータ反映)
インタラクション(時間の選択範囲)
可視化について
読むといいかも(参考図書)
おわりに
ありがとうございました

More Related Content

それFluentdで! #fluentd