アンチウイルスソフトを入れた それだけではサイバー攻撃は ...アンチウイルスソフトを入れた それだけではサイバー攻撃は防げません
それFluentdで! #fluentd
-
Upload
bohe-animato -
Category
Technology
-
view
4.865 -
download
0
description
Transcript of それFluentdで! #fluentd
それ 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
ElasticsearchRedisGrouthForcastRaw File
StorageServer
WebServer
forwarderfluent-agent-lite
AggregatorWorkerserializer
Fluentd + plugin
watcher
Raw File
APIServerWebServer
ElasticsearchRedisGrouthForcastRaw File
StorageServer
WebServer
forwarderfluent-agent-lite
AggregatorWorkerserializer
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:%V\thost:%h\tserver:%A\tident:%l\tuser:%u\ttime:%{%Y/%m/%d %H:%M:%S %z}t\tmethod:%m\tpath:%U%q\tprotocol:%H\tstatus:%>s\tsize:%b\treferer:%{Referer}i\tagent:%{User-Agent}i\tresponse_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 : 137084495Record: {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 : 137084495message : { ログが 1 行づつ入
ります }
apache のログを集約( Aggregater/worker/serializer )
APIServerWebServer
ElasticsearchRedisGrouthForcastRaw File
StorageServer
WebServer
forwarderfluent-agent-lite
AggregatorWorkerserializer
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-parserfluent-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-monitorfluent-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
StorageServerWebServer
SCP
SCP SCPBatch
現状をこうしよう!(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 特性 アニメーション(リアルタイムでのデータ反映)インタラクション(時間の選択範囲)
可視化について
読むといいかも(参考図書)
おわりに
ありがとうございました