SlideShare uma empresa Scribd logo
1 de 29
Baixar para ler offline
fluentd Casual Talks
自己紹介

             id:oranie
              @oranie

• サイバーエージェント グループ子会社で、グループ内でも余り知ら
  れていないシステムでなんか色々やる簡単なお仕事しています。

• 緑色のみんながよく知っているサービスの裏側とかは全く知らない
  です!聞かないで下さい!

• カジュアル枠として参戦でございます。優しくしてね!
今回のテーマ




「fluentdはじめました」
言いたいこと


fluentdを使ってみているという話が中心です。

      詳細な話は結構割愛。


今日発売のSofftwareDesignが
  スピーカー殺しすぎる。
なんでこんな事をやる?



●apacheログからレスポンスタイム、ステータスコードの可視
 化とかやっている人いる?

●アプリが出している情報の可視化とかも。
fluentd+ fluent-plugin-datacounter+Cactiを
                      使って
Webサーバのレスポンスタイムを可視化したり
他に

Webサーバのレスポンスステータスの状況とか
更にアプリログで

なんのかは説明できないけど、
サービス的に意味のある統計情報がリアルタイムで見れる。
今まで日次+Excel手作業だった。
担当者(僕)がサボるともっと時間掛かっていたけど!
なんでこんな事やるの?

●apacheログからの状況可視化→運用面でのメリット
●appログからのサービス状況可視化→ビジネス的な解析
●システム運用面でのメリット+ビジネス的な解析も運用側だけ
 で出来そう。

●サービス用DB参照するのとかは色々とね。
●MySQLならレプリすぐ作れるけど、Oracleなのでサーバ作る
 のに・・・・。
旧構成(と言っても今も動いている)

                          Webサーバ




日次処理によるログ退避


                              集約サーバ
                                                       DBサーバ


   各Webサーバの生Apacheログをパー
    ス、追加情報を付与して整形する                                 各log_data{yyyymm}テーブルを元に
                                      日次、月次での各テー   解析用のテーブルとか分割したテーブ
                                                                 ル作る
                                      ブル作成、及び集計処
                                         理を実行
                                                   必要な元ネタテーブルが作成完了した
        DBにINSERTする
                                                   ら、各集計用スクリプトを実行し、それぞ
                                                      れのテーブルを更新して行く
この方式の欠点

・ログが大量だと全部DBに入れるのに糞重い

・ログが大量だと日次処理、月次処理が糞重い

・基本処理が日次なので、昨日の状況を見たい時でもDBに格
 納されてからバッチ実行を待って、それからデータをCSVで
 落としてExcelでグラフ・・・・ヽ(`Д´)ノムキー

・「ログは日次で退避させる」という仕様は変えられない。
そこに!
なぜfluentdか?


rsyslog

syslog-ng

cron(rsync、scp、ftp)で取得との違い
思いつくままに

●設定が面倒くさい。
● syslog-ngはオワコンくさい。
  (2年前くらいから経路機器のログ集約で使ってますよ。ちくしょう!)
●デフォだから逆に使いたくない。
  (設定問題でkernelが出すmessageログとかに支障を出したくない)
●今の仕組み変えなきゃいけない。
● cronのタイムラグ。サイズが大きくなると差分だけ欲しい。
差分と言えばrsync?
●今の需要なら受信した側も差分だけで良いパターンがほと
 んどだけど、そこまで考慮したプログラム組むの面倒くさ
 い・・・。
これらの問題を踏まえてfluentdの良い所
●設定が柔軟
●プラグインが豊富
 (out系は主要なデータストア向けがほぼ出揃った。)
●既存のログシステムに影響を与えずに新たなログ収集・解析が出来る
 (主にin_tailを使えばね)
●大規模で使われている安心感(cookpadさん,NHNさん)
●開発が活発(本体&プラグイン共に)
● 運用サーバはRHEL系がメインなのでtd-agent使うと構築も捗る
●必要なプラグインを作るのが容易らしい(僕はまだ作っていないですが・・・・)
設定例


もしローカル上のログを読んで、別ディレクトリに吐き出す場合。



LogFormat "%{X-Forwarded-For}i %h %l %u %t ¥"%r¥" %>s %b
  ¥"%{Referer}i¥" ¥"%{User-Agent}i¥" %D" combined


のapacheログを読んで、それをfluentdで構造化して別のディ
 レクトリに吐いてみる。
設定例
#読み込む設定
<source>
 type tail
 format /^(?<XFF-host>[^ ]*) (?<host>[^ ]*) [^ ]* (?<user>[^ ]*) ¥[(?<TIME>[^¥]]*)¥] "(?<method>¥S+)(?:
    +(?<path>[^ ]*) +¥S*)?" (?<status>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^¥"]*)" "(?<agent>[^¥"]*)"
    (?<response_time>[^ ]*))?$/

 path /var/log/httpd/access_log
 tag apache.access
 pos_file /var/log/td-agent/tmp/access.log.pos
</source>

#書き込む設定
<match *.**>
 type file
 time_slice_format %Y_%m_%d
 compress gzip
 path /var/log/td-agent/access_log
</match>
今使っている話。
fluentdを導入した今の構成
補足

収集サーバ+中間サーバ+集計サーバ

なんでこの構成?

中間サーバの必要性

収集サーバ側fluentdプロセスのイレギュラー状況を避ける為に中間で
 「必ず」受信出来る構成を取る為

中間サーバでの負荷分散

集計サーバが一個で良い理由は今そのレベルだから。
ざっくり今の内部概要
導入・運用していて困った事とか。

●不具合はあった。
 シンボリックリンク読むと永久ループとかUS-ASCII以外の文字列入る
 とエラーになるとか、prelink のせいでrubyが壊れる為の回避設定に一
 部環境で抜けがあったとか。(全部直ってますよ)
●公式ドキュメント古い!!!!!!&日本語版無い!
●プラグインの情報が散在している。
●性能について
 in_forwardで安定して受信出来るのは1プロセス大体
 10,000message/secが限界だった。(Xeon E5607 2.27GHz)
●プロセス単体では受信性能がCPUコア分スケールしないので、手動マ
 ルチプロセスしている。今は3プロセス起動でとりあえず凌いでいる。
細かいtips的なもの
●Web/App側のconfigは動的生成して管理している。(詳細はこのあと)

●in_tailプラグインを使って読む時に、対象のログ構造を正規表現で記述するので、
  fluentdで設定する前にperl5.10以降だと名前付き後方参照が出来るので、それ
  でテストしています。

●in_tailは今の所readするログファイルの名前の指定をしないといけない。
  rotatelogsとかで/access_log.%Y-%m-%dな名前でプロセスが初めからログファ
  イルを作成する場合は、cronでシンボリックリンクを再作成する事で回避。

●forwardで投げる場合、互いの死活監視にudpパケットも投げるので、tcpとudpを
  許可しないと繋がらない。

●細かい内容をブログに書いて、そのURLをTwitterで「#fluentd」を付けてつぶやく
 と結構幸せになれた。
config管理について
各サーバ用のconfig配布方法
Configを動的生成する理由

●各ホスト毎に個別の値を持つ設定を付与する為、 configをPSGIで
  動的生成している。
(ex
ミドルウェア名.ミドルウェア内のタグ.サービス名.IPアドレス
tag: apache.access.web_A.192.168.220.101


●負荷分散で受信する側のプロセスを複数起動しているので、サーバ
 毎にメインで送信する先のportを分けている。

●例の様な値を設定したい時とかに、いちいちサーバ毎のconfig書き
 たくないし、chefとか(大人の事情で)入れられないのでいちいちscp
 で配布とかしか出来ない環境なので嫌だ。
なので

●チロッと書くには楽だったのでplack使っている。fluentdが
 rubyだからsinatraとかも良いかもね。

●configの内容はblogとかに書いているので、適当に読んで
 貰えれば。

●include rbとかでruby実行して動的生成されたconfig読み込
 みが今後出来ると更に捗るかも。
個人的な展望

●fluentd-plugin-mongoを利用して、datacounterだけでは計
 測出来ない細かい解析をしていきたい。

●もっと詳細なログ情報を集約・視覚化する事でシステム運用
 に役立てたいというか楽したい。

●もっとビジネス的に意味のある数値をリアルタイムに可視化
 したい。

●グラフの数を増やす時にCactiだと死ねるので、新しいグラフ
 ツールの導入(GrowthForecast とか)。
まとめ


fluentdはとてもいい!!


とりあえず影響が出ない様に小規模な所からサラッとやってみる。

細かい設定とかは直接質問して貰えれば。

ご清聴ありがとうございました。

Mais conteúdo relacionado

Mais procurados

MySQL Casual Talks in Fukuoka vol.2
MySQL Casual Talks in Fukuoka vol.2MySQL Casual Talks in Fukuoka vol.2
MySQL Casual Talks in Fukuoka vol.2
学 松崎
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1
Ryosuke IWANAGA
 

Mais procurados (20)

MySQLを割と一人で300台管理する技術
MySQLを割と一人で300台管理する技術MySQLを割と一人で300台管理する技術
MySQLを割と一人で300台管理する技術
 
Postgres Toolkitのご紹介
Postgres Toolkitのご紹介Postgres Toolkitのご紹介
Postgres Toolkitのご紹介
 
MySQL Casual Talks in Fukuoka vol.2
MySQL Casual Talks in Fukuoka vol.2MySQL Casual Talks in Fukuoka vol.2
MySQL Casual Talks in Fukuoka vol.2
 
MySQLからPostgreSQLへのマイグレーションのハマリ所
MySQLからPostgreSQLへのマイグレーションのハマリ所MySQLからPostgreSQLへのマイグレーションのハマリ所
MySQLからPostgreSQLへのマイグレーションのハマリ所
 
SourceReading 20101020
SourceReading 20101020SourceReading 20101020
SourceReading 20101020
 
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
OSS-DB Gold技術解説セミナー@db tech showcase 東京 2014
 
20171106 ntt-tx-postgre sql-10
20171106 ntt-tx-postgre sql-1020171106 ntt-tx-postgre sql-10
20171106 ntt-tx-postgre sql-10
 
PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima
PostgreSQLではじめるOSS開発@OSC 2014 HiroshimaPostgreSQLではじめるOSS開発@OSC 2014 Hiroshima
PostgreSQLではじめるOSS開発@OSC 2014 Hiroshima
 
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
 
Kof2016 postgresql-9.6
Kof2016 postgresql-9.6Kof2016 postgresql-9.6
Kof2016 postgresql-9.6
 
20171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-1020171028 osc-nagaoka-postgre sql-10
20171028 osc-nagaoka-postgre sql-10
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1
 
20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsql20171103 pg con-jp-lt-plpgsql
20171103 pg con-jp-lt-plpgsql
 
Migr8.rb チュートリアル
Migr8.rb チュートリアルMigr8.rb チュートリアル
Migr8.rb チュートリアル
 
とあるDBAの黒い画面(ターミナル)
とあるDBAの黒い画面(ターミナル)とあるDBAの黒い画面(ターミナル)
とあるDBAの黒い画面(ターミナル)
 
MySQL 初めてのチューニング
MySQL 初めてのチューニングMySQL 初めてのチューニング
MySQL 初めてのチューニング
 
Ansible入門
Ansible入門Ansible入門
Ansible入門
 
今よりも少し(?)昔、 Windowsを作ろうとした話
今よりも少し(?)昔、 Windowsを作ろうとした話今よりも少し(?)昔、 Windowsを作ろうとした話
今よりも少し(?)昔、 Windowsを作ろうとした話
 
PostgreSQL安定運用のコツ2009 @hbstudy#5
PostgreSQL安定運用のコツ2009 @hbstudy#5PostgreSQL安定運用のコツ2009 @hbstudy#5
PostgreSQL安定運用のコツ2009 @hbstudy#5
 
OSC2015kyoto
OSC2015kyotoOSC2015kyoto
OSC2015kyoto
 

Semelhante a Fluentd casual

20120405 setsunaセミナー
20120405 setsunaセミナー20120405 setsunaセミナー
20120405 setsunaセミナー
Takahiro Iwase
 
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
Takahiro Inoue
 
SQL Server 2014 In Memory OLTP Overview
SQL Server 2014 In Memory OLTP OverviewSQL Server 2014 In Memory OLTP Overview
SQL Server 2014 In Memory OLTP Overview
Masayuki Ozawa
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
Akihiro Kuwano
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
Naoyuki Yamada
 
20110517 okuyama ソーシャルメディアが育てた技術勉強会
20110517 okuyama ソーシャルメディアが育てた技術勉強会20110517 okuyama ソーシャルメディアが育てた技術勉強会
20110517 okuyama ソーシャルメディアが育てた技術勉強会
Takahiro Iwase
 

Semelhante a Fluentd casual (20)

プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
プロとしてのOracleアーキテクチャ入門 ~番外編~ @ Developers Summit 2009
 
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
 
20120405 setsunaセミナー
20120405 setsunaセミナー20120405 setsunaセミナー
20120405 setsunaセミナー
 
[db tech showcase Tokyo 2017] A15: レプリケーションを使用したデータ分析基盤構築のキモ(事例)by 株式会社インサイトテ...
[db tech showcase Tokyo 2017] A15: レプリケーションを使用したデータ分析基盤構築のキモ(事例)by 株式会社インサイトテ...[db tech showcase Tokyo 2017] A15: レプリケーションを使用したデータ分析基盤構築のキモ(事例)by 株式会社インサイトテ...
[db tech showcase Tokyo 2017] A15: レプリケーションを使用したデータ分析基盤構築のキモ(事例)by 株式会社インサイトテ...
 
Redmine Ansible
Redmine AnsibleRedmine Ansible
Redmine Ansible
 
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
MongoDBを用いたソーシャルアプリのログ解析 〜解析基盤構築からフロントUIまで、MongoDBを最大限に活用する〜
 
SQL Server 2014 In Memory OLTP Overview
SQL Server 2014 In Memory OLTP OverviewSQL Server 2014 In Memory OLTP Overview
SQL Server 2014 In Memory OLTP Overview
 
Sql server 運用 101
Sql server 運用 101Sql server 運用 101
Sql server 運用 101
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
 
オープンソースでシステム監視!Zabbix 1.8の機能と簡単インストール手順の紹介
オープンソースでシステム監視!Zabbix 1.8の機能と簡単インストール手順の紹介オープンソースでシステム監視!Zabbix 1.8の機能と簡単インストール手順の紹介
オープンソースでシステム監視!Zabbix 1.8の機能と簡単インストール手順の紹介
 
データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回データマイニング+WEB勉強会資料第6回
データマイニング+WEB勉強会資料第6回
 
マイニング探検会#10
マイニング探検会#10マイニング探検会#10
マイニング探検会#10
 
Fluentd meetup #2
Fluentd meetup #2Fluentd meetup #2
Fluentd meetup #2
 
PostgreSQL10徹底解説
PostgreSQL10徹底解説PostgreSQL10徹底解説
PostgreSQL10徹底解説
 
20110517 okuyama ソーシャルメディアが育てた技術勉強会
20110517 okuyama ソーシャルメディアが育てた技術勉強会20110517 okuyama ソーシャルメディアが育てた技術勉強会
20110517 okuyama ソーシャルメディアが育てた技術勉強会
 
Developers.IO 2019 Effective Datalake
Developers.IO 2019 Effective DatalakeDevelopers.IO 2019 Effective Datalake
Developers.IO 2019 Effective Datalake
 
Hadoop事始め
Hadoop事始めHadoop事始め
Hadoop事始め
 
TFSを支える技術
TFSを支える技術TFSを支える技術
TFSを支える技術
 
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
PostgreSQLアーキテクチャ入門(PostgreSQL Conference 2012)
 
Windows エンジニア向け sql server on linux のためのスキルアップデート
Windows エンジニア向け sql server on linux のためのスキルアップデートWindows エンジニア向け sql server on linux のためのスキルアップデート
Windows エンジニア向け sql server on linux のためのスキルアップデート
 

Mais de oranie Narut (10)

Devsumi2019 dynamodb
Devsumi2019 dynamodbDevsumi2019 dynamodb
Devsumi2019 dynamodb
 
Jvm operation casual talks
Jvm operation casual talksJvm operation casual talks
Jvm operation casual talks
 
cassandra 100 node cluster admin operation
cassandra 100 node cluster admin operationcassandra 100 node cluster admin operation
cassandra 100 node cluster admin operation
 
Webサーバ勉強会#4
Webサーバ勉強会#4Webサーバ勉強会#4
Webサーバ勉強会#4
 
MySQL Casual LT : MySQL Upgrade 5.0 to 5.5
MySQL Casual LT  : MySQL Upgrade  5.0 to 5.5 MySQL Casual LT  : MySQL Upgrade  5.0 to 5.5
MySQL Casual LT : MySQL Upgrade 5.0 to 5.5
 
Webサーバ勉強会03
Webサーバ勉強会03Webサーバ勉強会03
Webサーバ勉強会03
 
財務分析勉強会挨拶
財務分析勉強会挨拶財務分析勉強会挨拶
財務分析勉強会挨拶
 
Webサーバ勉強会02
Webサーバ勉強会02 Webサーバ勉強会02
Webサーバ勉強会02
 
Webサーバ勉強会 発表資料
Webサーバ勉強会 発表資料Webサーバ勉強会 発表資料
Webサーバ勉強会 発表資料
 
It勉強会の勉強会
It勉強会の勉強会It勉強会の勉強会
It勉強会の勉強会
 

Fluentd casual