SlideShare a Scribd company logo
1 of 67
Flumeを活用したAmebaにおける
大規模ログ収集システム
-Hadoop Conference Japan 2013 Winter-




 株式会社サイバーエージェント
 アメーバ事業本部 Ameba Technology Laboratory
 Juhani Connolly (Apache Flume PMC/Committer)
 飯島 賢志
株式会社サイバーエージェント
                                             2




            自己紹介
    いいじま   さと
    し
・    飯島 賢志

・    R&D Engineer

・    Ameba Technology Lab

・   Hadoopログ解析基盤
    HBaseを使ったgraphDB
    各サービスでFlume導入中
株式会社サイバーエージェント
                                               3




        本日の内容
・ Ameba サービスと
  Ameba Technology Lab について


・ Flume について


・ Flume の導入事例
株式会社サイバーエージェント
                                               4




・ Ameba サービスと
  Ameba Technology Lab について


・ Flume について


・ Flume の導入事例
スマートフォンサービス   株式会社サイバーエージェント
                               5
株式会社サイバーエージェント
                                         6




Ameba Technology Laboratory
・ 2011/4 秋葉原に開設

・ 約20名 ( 2013年1月 )
株式会社サイバーエージェント
                                                              7




                      技術領域             スマホ
     ニュース ブログ                          ゲーム
                                 ピグ          その他多数
profile          なう
                       Ameba全般

          検索                      データマイニング


                       大規模
                      分散処理
          ピグ                           メッセージ
   ブログ         グルっぽ   (ログ解析基盤)   ブログ         グルっぽ



          推薦                      フィルタリング
株式会社サイバーエージェント
                                               8




・ Ameba サービスと
  Ameba Technology Lab について


・ Flume について


・ Flume の導入事例
株式会社サイバーエージェント
                                             9




               自己紹介
    コノリー・ユハニ

・    Juhani Connolly

・    R&D Engineer

・    Ameba Technology Lab

・   Flume開発・対応
    機械学習
    必要に応じてHadoop周り
株式会社サイバーエージェント
                                                             10




Apache Flume(以下Flume)とは?
“Flume is a distributed, reliable, and available
system for efficiently collecting, aggregating, and
moving large amounts of log data from many
different sources to a centralized data store.”


つまり、高信頼性かつ冗長化可能な大量の
データの収集・統合・転送を行うシステム。
株式会社サイバーエージェント
                                           11




どこから来た?
・元々はClouderaのプロジェクトからスタートする
・オープンソースでApache Incubatorに移動。
・FlumeNGの開発で完全再構築。
・2012年の夏にApacheのTLPになる、1.2がリリース
(CDH4に現在入ってるバーション)
・最新リリースは1月にリリースされたばかりの1.3.1
 ・ちなみサイバーエージェントで導入されてるバーションは1.4
のトランクに近い物。
株式会社サイバーエージェント
                                            12




開発に関わってる会社
現在のコミッターは以下の会社から
・Apple
・Cloudera(ここ多い!)
・Cyberagent
・Intuit
・Odiago
・TrendMicro
・無所属

Apacheのプロジェクトなので、コントリビューションの実績があ
れば誰でもなれます。
株式会社サイバーエージェント
                                   13




Apache Flumeの概要
株式会社サイバーエージェント
                           14




概要



 こんな感じ?
株式会社サイバーエージェント
                                     15




構造を簡単な図にすると

「Source」データの源。
・Avro/Scribe
・Netcat
・Exec(実行プログラムに出力)
・など
・必要であれば、カスタムは簡単
に作れる。
株式会社サイバーエージェント
                                       16




構造を簡単な図にすると

「Channel」データの一時的な溜
まり場。
・File
・Memory
・JDBC(遅いため、Fileを推奨)
・同じくカスタム可能。ただしト
ランザクションの実装とかもいる
ので複雑。
株式会社サイバーエージェント
                                     17




構造を簡単な図にすると

「Sink」データを送る先・もしく
は保存するメディア
・File/HDFS
・Avro
・HBase
・IRC、Null、Logなど
・またカスタムプラグインも可能
株式会社サイバーエージェント
                                                18




エージェントに関して
・最低限でSource・Channel・Sink三つのコ
ンポーネントがそろえば、一つのエージェン
トとなります
 ・コンポーネントは一つずつとは限りませ
ん。複数のフローを同じエージェント内で管
理してもいいです。
 ・また、複数のエージェントを使う事で複
数のサーバーのデータをつなげて複雑なフ
ローを簡単に構築出来ます。
株式会社サイバーエージェント
                       19




つまり
株式会社サイバーエージェント
                                                  20




ノードの繋ぎ型
・複数のノードをつなぐには一般的にAvro SinkとAvro Sourceを使
います。
 ・そうすれば最初のエージェントから流れるデータはAvroプロ
トコルで二つ目のシンクに現れます
 ・転送が失敗したらトランザクションがロールバックされ、元
のチャンネルのデータ取得がキャンセルされます。
                                 Avro




         Avro
株式会社サイバーエージェント
                                        21




統合
・複数のエージェントの
AvroSinkを一つのエージェ
ントのAvroSourceに送り、
複数のサーバーからのデー
タをまとめて処理する事が
出来ます。
・例えば複数のログを
HDFSに上げたい時に一つ
のサーバーで収集して、
HDFSシンクに流す。


                    HDFS?
株式会社サイバーエージェント
                                                       22




概要まとめ
・このまま色んなセットアップを紹介出来ますが、ドキュメント
にちゃんと説明されていますし、新しいのはケースによっても考
えられます。
・エージェントをソース・チャンネル・シンクで作りそれらをつ
なげる事で複雑なフローが実行可能。
・コンフィグレーションのやり方やすべてのコンポーネントのド
キュメンテーションがしっかり書いてある。
 ・http://flume.apache.org/FlumeUserGuide.html
 ・オープンソースにしてはドキュメンテーションがよい(個人
的な偏見?)
・すべての主なコンポーネントはプラグインでリプレイス出来ま
すし、開発は簡単。
株式会社サイバーエージェント
                                                 23



                             Event
その他の機能:イベントとその使い道
                         Header map:
・データはイベントに分かれている。例
えばログの一行                  ABC => xyz
 ・イベントにはヘッダーのマップとボ        Foo => bar
ディーがついています。
 ・ヘッダーを使ってフローのコント
ロールが出来ます。Channelの時点でイベ
ントによるマルチプレクシングでフロー           Body:
を分ける事が可能。                Lorem ipsum
 ・ヘッダーはバケティングなどでも使       dolor sit amet,
えます。                      consectetur
 ・イベント作成の時についていますが、
次に出るインターセプターでも編集可能。
株式会社サイバーエージェント
                                           24




その他機能:インターセプター
          ・ソースとチャンネルの間に入れられる部分で
          イベントの編集やフィルタリングを可能にする。
           ・例えばログからタイムスタンプを読み込ん
          で、ヘッダーに正しいのを書き出す(事例で出
          ます)
  Data
           ・フィルターとしても使えるし、一つのイベ
          ントを複数のイベントに分ける事も。
           ・簡単に作れる、プラグインで入れられる。


  Data+
株式会社サイバーエージェント
                                           25




その他の機能:冗長化など
・シンクのグループが管理可能でシンクプロセッサーでデータを
グループのどこに送るかコントロール出来ます。
 ・Failover
 ・LoadBalancing

・マルチプレクシング以外にも、同じイベントをレプリケーショ
ンして、複数のチャンネルに送れる。
 ・同じログで二つの事をやりたい時に使える。例えばHDFSに保
存して、簡単なメトリックスを計算する。
株式会社サイバーエージェント
                                        26




    オープンソースなので、
必要な機能がなければ作ればいいです!
コントリビューションは勿論歓迎していま
         す。



    ※作れないならMLに聞くのもあり
株式会社サイバーエージェント
                                 27




Flumeの送信保証と注意
株式会社サイバーエージェント
                              28




データロスがない!※




※条件付き
株式会社サイバーエージェント
                                     29




データロスを防止するには何が必要?

フローにあるすべてのチャンネルは状態を
保存できる物でなければならない。
・FileChannelが基本推奨される物。
・MemoryChannelが落ちたら、入ってる
データがすべて消えます。
株式会社サイバーエージェント
                                         30




データロスを防止するには何が必要?

各ステップの転送方法は逆戻り可能な物で
なければならない。
・主な例としてAvroSource・AvroSinkの組
み合わせ。
・他の転送方法を使うともし次のステップ
での保存が失敗したら、前のステップに知
らされてないので、元に戻せない。
株式会社サイバーエージェント
                                      31




注意1:データの順番変更


・Flumeでは届いたデータの順番が
送られた物と同じ順番で届く事を保
証していない。

・簡単なフローでは順番は守られま
すが、ロードバランシングやフェイ
ルオーバーを使って複数のパスでた
どり着けるとそうなってしまう。
株式会社サイバーエージェント
                                           32




注意2:ロスがないが、二重保存がある
・HDFSなどへの効率的な書き込みをする時に一気に複数のイベン
トを保存します。
 ・但し一部の保存が失敗するとトランザクションがロールバッ
クされ、後で同じイベントのバッチの書き込みが再度行われる。
 ・そのため一部のデータが最終書き込み先で重複する事があり
ます。
株式会社サイバーエージェント
                                      33




二重書き込みも順番変更は問題ではない

・セットアップがちゃんとしていれば、重複の割
合が非常に低い。
 ・但し逆に言うとHDFSなどが定期的にリクエ
ストの途中でタイムアウト投げてるなら、重複が
増えます。

・問題視されていない:なぜかと言うと、簡単な
MRタスクで解決可能だから。
株式会社サイバーエージェント
                                            34




他に便利
Gangliaメトリックがサポートされていて、フローの最適化や問題
解決に非常に役立ちます。
株式会社サイバーエージェント
                                               35




・ Ameba サービスと
  Ameba Technology Lab について


・ Flume について


・ Flume の導入事例
株式会社サイバーエージェント
                                      36




    Flume の導入事例
・ 大量ログを冗長化構成でリアルタイムに
  HDFSへ保存


・ Hadoopログをリアルタイムに集約管理


・ アクセスログのリアルタイム可視化
株式会社サイバーエージェント
                                      37




    Flume の導入事例
・ 大量ログを冗長化構成でリアルタイムに
  HDFSへ保存


・ Hadoopログをリアルタイムに集約管理


・ アクセスログのリアルタイム可視化
株式会社サイバーエージェント
                                                 38




          導入前の状況
                             - 冗長化構成でHDFSに保存 -




・ ログはHourlyやDailyでscpとHDFSへのputで保存
・ 大量ログの転送後の解析開始時間を早めたい
・ ネットワーク負荷の平準化、今後のリアルタイムな
  解析のためログをリアルタイムに転送したい
株式会社サイバーエージェント
                                                                                 39




                       システム構成
                                                             - 冗長化構成でHDFSに保存 -




・ Webサーバからアグリゲータに転送しHDFSへ保存
    Webサーバ
                              ログ転送
                Interceptor

  ブログ                                                             ログ解析
                                               ログ保存
                Interceptor




  検索
                                                      HDFS
                Interceptor




        ・
        ・                              Flume
        ・                            アグリゲータ
   Flume コレクタ
                                       冗長化                     Flume
株式会社サイバーエージェント
                                               40



        Flumeの設定ファイル
                           - 冗長化構成でHDFSに保存 -




・ 設定ファイルは3つ


 /etc/flume/conf
      ├ flume.conf
      ├ flume-env.sh
      └ log4j.properties
株式会社サイバーエージェント
                                                                                                        41

                  flume.confの構成                                               - 冗長化構成でHDFSに保存 -

                      ## Name the components on this agent
【agent】               agent.sources = scribe

 各コンポーネント名を指定
                      agent.channels = ch1
                      agent.sinks = avro


                      ## source
【source】              agent.sources.scribe.type = org.apache.flume.source.scribe.ScribeSource
                      agent.sources.scribe.channels = ch1
 ログ読み込み方法や            agent.sources.scribe.port = 1463

 Interceptorを指定       agent.sources.scribe.interceptors = ts
                      agent.sources.scribe.interceptors.ts.type = org.apache.flume.interceptor
                                                         .XXXInterceptor$InterceptorBuilder


【channel】             ## channel
                      agent.channels.ch1.type = file
 eventを転送するまでの        agent.channels.ch1.checkpointDir = /tmp/flume-check

 一時的な保存方法を指定          agent.channels.ch1.dataDirs = /tmp/flume-data


                      ## sink

【sink】                agent.sinks.avro.type = avro
                      agent.sinks.avro.channel = ch1
 転送/保存の方法を指定          agent.sinks.avro.hostname = xxx.xxx.xxx.xxx
                      agent.sinks.avro.port = 41415
株式会社サイバーエージェント
                                                                                                 42

                                 flume.confの例                                - 冗長化構成でHDFSに保存 -

【コレクタ側のsource】
 ● scribeソース:ログを読込みThriftプロトコルで流し込む機能を使用
             ※以前Scribe利用時に自社開発。ファイル名の正規表現マッチ、
              eventヘッダ追加、再送機能などあり
 ● Interceptor     :元のログに何か処理を加えたいとき
   ## source - scribe
   agent.sources.scribe.type = org.apache.flume.source.scribe.ScribeSource
   agent.sources.scribe.port = 1463
   agent.sources.scribe.channels = ch1
   agent.sources.scribe.interceptors = ts
   agent.sources.scribe.interceptors.ts.type =
   org.apache.flume.interceptor.TimeInterceptor$InterceptorBuilder
【参考】シンプルにファイルを読込みたいなら
   ## source – Spooling Directory
   agent.sources.spool.type = spooldir
   agent.sources.spool.spoolDir =/var/log/secure
   agent.sources.spool.channels = ch1
株式会社サイバーエージェント
                                                                              43

                             flume.confの例                 - 冗長化構成でHDFSに保存 -


【アグリゲータ側のsource】
 ● avroソース:コレクタから送られたものをavroとして読み取る
                     ポートは送信元に合わせる
 ● bind          :自身のIPアドレス

  ## source - avro
  agent.sources.avro1.type = avro
  agent.sources.avro1.port = 41414
  agent.sources.avro1.channels = ch1
  agent.sources.avro1.bind = xxx.xxx.xxx.xxx



                                          avro



                         コレクタ                    アグリゲータ
株式会社サイバーエージェント
                                                                                 44


                                   冗長化の設定例                   - 冗長化構成でHDFSに保存 -


・ 冗長化はコレクタ側のsinkで設定。簡単にスケール可能。
  ● 転送先のgroupを定義
 【コレクタのflume.conf 抜粋】
  ## sink - avro
  agent.sinks.avro1.type = avro
  agent.sinks.avro1.channel = ch1
  agent.sinks.avro1.hostname = xxx.xxx.xxx.xxx
  agent.sinks.avro1.port = 41414


  agent.sinks.avro2.type = avro
  agent.sinks.avro2.channel = ch1
  agent.sinks.avro2.hostname = xxx.xxx.xxx.xxx
  agent.sinks.avro2.port = 41414


  agent.sinkgroups = group1
  agent.sinkgroups.group1.sinks = avro1 avro2
  agent.sinkgroups.group1.processor.type = load_balance
  agent.sinkgroups.group1.processor.selector = round_robin
株式会社サイバーエージェント
                                                                                                                45

                                flume-env.shの例                                          - 冗長化構成でHDFSに保存 -


・ コレクタの設定例。アグリゲータには適宜もっと大きなヒープを設定。
 ● ヒープサイズ
 ● 監視するためのJMX設定
 ● Gangliaでメトリクスを収集する設定

【flume-env.sh】

 JAVA_HOME=/usr/local/java


 JAVA_OPTS="-server -XX:MaxPermSize=24m -XX:PermSize=24m -XX:SurvivorRatio=8 -Xmn96m -Xmx128m -Xms128m "


 JAVA_OPTS="${JAVA_OPTS} -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345"


 JAVA_OPTS="${JAVA_OPTS} -Dcom.sun.management.jmxremote.ssl=false -


 Dcom.sun.management.jmxremote.authenticate=false"


 JAVA_OPTS="${JAVA_OPTS} -Djava.rmi.server.hostname=xxx.xxx.xxx.xxx"

 JAVA_OPTS="${JAVA_OPTS} -Dflume.monitoring.type=GANGLIA -Dflume.monitoring.hosts=[host_name]:8649"
株式会社サイバーエージェント
                                                                                                                        46

                               log4j.propertiesの例                                               - 冗長化構成でHDFSに保存 -


一般的な設定になります
【log4j.properties】
 flume.root.logger=INFO,LOGFILE
 flume.log.dir=/var/log/flume/
 flume.log.file=flume.log

 log4j.logger.org.apache.flume.lifecycle = INFO
 log4j.logger.org.jboss = WARN
 log4j.logger.org.mortbay = INFO
 log4j.logger.org.apache.avro.ipc.NettyTransceiver = WARN
 log4j.logger.org.apache.hadoop = INFO

 log4j.rootLogger=${flume.root.logger}

 # Rolling file appender
 log4j.appender.LOGFILE=org.apache.log4j.rolling.RollingFileAppender
 log4j.appender.LOGFILE.rollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy
 log4j.appender.LOGFILE.rollingPolicy.FileNamePattern=${flume.log.dir}/${flume.log.file}.%d{yyyy-MM-dd}.gz
 log4j.appender.LOGFILE.Append=true
 log4j.appender.LOGFILE.File=${flume.log.dir}/${flume.log.file}
 log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
 log4j.appender.LOGFILE.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss,SSS} %-5p [%t] (%C.%M:%L) %x -
  %m%n

 # console
 log4j.appender.console=org.apache.log4j.ConsoleAppender
 log4j.appender.console.target=System.err
 log4j.appender.console.layout=org.apache.log4j.PatternLayout
 log4j.appender.console.layout.ConversionPattern=%d (%t) [%p - %l] %m%n
株式会社サイバーエージェント
                                               47


         自作のInterceptor    - 冗長化構成でHDFSに保存 -




・ 元からあるTimestampInterceptorでは、
  ログ転送時のtimeがeventヘッダに反映される
・ それだと日付変更の直前や障害時には正しく反映
  されないことがある
・ そこで、ログの中身のtimeを読込み、ヘッダに
  反映させる自作のInterceptorで運用中
株式会社サイバーエージェント
                                                                                                        48


               自作のInterceptorのソース                                                   - 冗長化構成でHDFSに保存 -



● ログから日付を取ってきてeventヘッダに設定
【org.apache.flume.interceptor.TimeInterceptor.java】
   public Event intercept(Event event) {
            Map<String, String> headers = event.getHeaders();


            String[] parts = new String(event.getBody()).split(“[t ]”);
            String[] date = parts[dateField].split(“-”);


            myCal.setTimeZone(TimeZone.getTimeZone(timeZoneCode));
            myCal.set(GregorianCalendar.YEAR, Integer.parseInt(date[0]));
            myCal.set(GregorianCalendar.MONTH, Integer.parseInt(date[1]) - 1);
            myCal.set(GregorianCalendar.DAY_OF_MONTH, Integer.parseInt(date[2]));


            timestamp = myCal.getTimeInMillis();
            headers.put(”timestamp”, timestamp.toString());
            return event;
   }

 ※エラー処理などは割愛
株式会社サイバーエージェント
                                      49




    Flume の導入事例
・ 大量ログを冗長化構成でリアルタイムに
  HDFSへ保存


・ Hadoopログをリアルタイムに集約管理


・ アクセスログのリアルタイム可視化
株式会社サイバーエージェント
                                         50




              導入前の状況
                       - Hadoopログ集約管理 -




・ 何十台もHadoopスレーブがあるとログをみたいとき
  に手間がかかる
・ ログが1箇所に集まってたら便利
・ HDFSでなくローカルだったらコマンドも色々使える
  grep / tail / etc…
株式会社サイバーエージェント
                                                                        51




                           システム構成
                                                       - Hadoopログ集約管理 -



・ Hadoopログをリアルタイムに1台のサーバに保存
・ TimeInterceptorを通してログ転送
     Hadoopスレーブ
                           ログ転送
             Interceptor

                                        ローカルに保存


                                            ログ閲覧
             Interceptor




                                    Flume
             Interceptor




                                  アグリゲータ
        ・
        ・
        ・
     Flume コレクタ                                Flume
株式会社サイバーエージェント
                                                                 52




       ローカルへのSink方
                                                - Hadoopログ集約管理 -




                法
・ 実用的な形にするには工夫が必要
・ File Roll Sinkだと、eventのtimestampヘッダで自動バケッティングできない

 【保存先】 /var/log/flume/hadoop/yyyy-mm-dd/….log




                      機能なし
株式会社サイバーエージェント
                                                 53




            ローカルへのSink方
                                - Hadoopログ集約管理 -




                    法
・ HDFS Sinkなら日付の自動バケッティングができる
株式会社サイバーエージェント
                                                                                        54




           ローカルへのSink方
                                                                       - Hadoopログ集約管理 -




                    法
● HDFS Sinkでローカルに保存するように指定
● eventのtimestampヘッダで日付のバケッティング
● 日付の他にもヘッダを利用してパラメータ指定できる
 【flume.confの抜粋】
  ## sink
  agent.sinks.file.type = hdfs
  agent.sinks.file.channel = ch1
  agent.sinks.file.hdfs.path = file:///var/log/flume/hadoop/%Y-%m-%d
  agent.sinks.file.hdfs.filePrefix = %{category}.log
  agent.sinks.file.hdfs.fileType = DataStream
  agent.sinks.file.hdfs.writeFormat = text
                                                   ←つい先週追加された機能
  agent.sinks.file.hdfs.useRawLocalFileSystem = true
                                                         ※JIRAのFLUME-1844
株式会社サイバーエージェント
                                      55




    Flume の導入事例
・ 大量ログを冗長化構成でリアルタイムに
  HDFSへ保存


・ Hadoopログをリアルタイムに集約管理


・ アクセスログのリアルタイム可視化
株式会社サイバーエージェント
                                                56




          導入前の状況
                            - ログのリアルタイム可視化 -




・ 監視ツールではアクセス数やレイテンシはグラフ化
  できていない
・ アクセスログにはServiceやMethod毎にレイテンシを
  書き出している
・ そこで、FlumeとGrowthForecastを連携させて
  アクセス状況をグラフ化したい
株式会社サイバーエージェント
                                                 57




     GrowthForecast とは
                             - ログのリアルタイム可視化 -




WebAPIに値をリクエストするだけで簡単にグラフ化できるWebツール
株式会社サイバーエージェント
                                                                             58




                         システム構成
                                                         - ログのリアルタイム可視化 -



・Flumeでアプリケーションログをサマリして必要なデータだけを転送
・アグリゲータで集計してGrowthForecastのAPIにリクエスト

    Webサーバ
                         サマリしたデータ
                           だけ転送
                                    GFにリクエスト
           Interceptor




                                          GF閲覧
           Interceptor
           Interceptor




                                  Flume
                                アグリゲータ
      ・
      ・ ログ
      ・2.5万行/秒
                                                 Flume
   Flume コレクタ
株式会社サイバーエージェント
                                                                                  59



                  自作のInterceptor
                                                             - ログのリアルタイム可視化 -



【コレクタ側】
・ 大量のログを送ってアグリゲータ側で計算すると負荷が高いので、
・ コレクタ側でアクセスログ1行毎からservice・method単位で
  アクセス数は1ずつ、レイテンシは取得した値でインクリメント

※ログの例
2013-01-21 14:00:00 … service=AAA … method=BBB … latency=XXX …



・ 15秒に1回、service・method単位のアクセス数とレイテンシの
  合計をサマリとしてアグリゲータに転送
株式会社サイバーエージェント
                                                       60



           自作のInterceptor
                                   - ログのリアルタイム可視化 -



【アグリゲータ側】
・ コレクタの各サーバから転送されたデータを元に
  全サーバのservice・method単位の以下を計算

   アクセス数:秒間のアクセス数
   レイテンシ:1アクセス当たりの平均レイテンシ

・ 1分間に1回GrowthForecastのAPIにリクエスト
株式会社サイバーエージェント
                                          61




          できあがったグラフ
                      - ログのリアルタイム可視化 -




リアルタイムにグラフ化できた!
【アクセス数】




【レイテンシ】
株式会社サイバーエージェント
                                                               62



                     監視
                                           - ログのリアルタイム可視化 -


                                【Ganglia
● Ganglia                           】


  JMXのメトリクスをグラフ化


● アラート監視
  ・ ステータスのチェック
  ・ JMXのメトリクス
      ・ channelやavroのStopTime
      ・ ChannelFillPercentage
        ⇒ログ量に応じてwarnとcriticalで値を分けて管理
株式会社サイバーエージェント
                                            63



       今まで運用してきて
・ 今のところパフォーマンスに問題なし
・ Flume再起動時にCheckPointのIndex再構築で
  OutOfMemoryになるときは最大ヒープサイズを調整
・ Interceptorなどプラグインを修正・開発すれば
  やりたいことを実現できる
・ 問題が発見されてもオープンソースコミュニティで
  素早く修正されている
株式会社サイバーエージェント
                                               64



       今後のやりたいこと
・ 適用範囲の拡大
・ ログをフィルタリングして転送
・ 特定のログを検知してアラート
・ 転送したログをDB(MySQL, MongoDB等)に入れる
・ MySQLのBinlogからHBaseにインポート
株式会社サイバーエージェント
                                           65



           まとめ
・ 大量ログを冗長化構成でリアルタイムにHDFSへ保存
  ⇒バケッティングもできてロスなくログ転送できた
・ Hadoopログをリアルタイムに集約管理
  ⇒1サーバで全台のログを検索/閲覧できるようになった
・ アクセスログのリアルタイム可視化
  ⇒アクセス数やレイテンシをリアルタイムに把握可能に
・ Flumeはプラグインのようなコンポーネント単位の
  開発がしやすく柔軟性が高い
株式会社サイバーエージェント
                                                      66



                     最後に
・ サイバーエージェントでは優秀なエンジニアを
  募集しています!


・ Flumeはコントリビューションを歓迎しています
  http://flume.apache.org/


・ Flumeの質問はこちら
  user@flume.apache.org
  もし英語が苦手な方は
  juhani_connolly@cyberagent.co.jp
株式会社サイバーエージェント
                               67




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

More Related Content

What's hot

Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)NTT DATA Technology & Innovation
 
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...NTT DATA Technology & Innovation
 
Fluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターンFluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターンKentaro Yoshida
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)NTT DATA Technology & Innovation
 
AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudyネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudyYahoo!デベロッパーネットワーク
 
分散システムの限界について知ろう
分散システムの限界について知ろう分散システムの限界について知ろう
分散システムの限界について知ろうShingo Omura
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~Daisuke Morishita
 
爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話Kentaro Yoshida
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話Kumazaki Hiroki
 
ログ+メトリック+トレースの組み合わせで構築する一元的なオブザーバビリティ
ログ+メトリック+トレースの組み合わせで構築する一元的なオブザーバビリティログ+メトリック+トレースの組み合わせで構築する一元的なオブザーバビリティ
ログ+メトリック+トレースの組み合わせで構築する一元的なオブザーバビリティElasticsearch
 
Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦Preferred Networks
 
Keycloak拡張入門
Keycloak拡張入門Keycloak拡張入門
Keycloak拡張入門Hiroyuki Wada
 
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮Hibino Hisashi
 
MQTTとAMQPと.NET
MQTTとAMQPと.NETMQTTとAMQPと.NET
MQTTとAMQPと.NETterurou
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線Motonori Shindo
 
さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)Takanori Sejima
 

What's hot (20)

Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
Grafana LokiではじめるKubernetesロギングハンズオン(NTT Tech Conference #4 ハンズオン資料)
 
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
 
Fluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターンFluentdのお勧めシステム構成パターン
Fluentdのお勧めシステム構成パターン
 
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
Kubernetesでの性能解析 ~なんとなく遅いからの脱却~(Kubernetes Meetup Tokyo #33 発表資料)
 
AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudyネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
 
分散システムの限界について知ろう
分散システムの限界について知ろう分散システムの限界について知ろう
分散システムの限界について知ろう
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
エンジニアのためのOSSライセンス管理~OSS管理ツールの池の水全部抜く~
 
爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
ログ+メトリック+トレースの組み合わせで構築する一元的なオブザーバビリティ
ログ+メトリック+トレースの組み合わせで構築する一元的なオブザーバビリティログ+メトリック+トレースの組み合わせで構築する一元的なオブザーバビリティ
ログ+メトリック+トレースの組み合わせで構築する一元的なオブザーバビリティ
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦
 
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
 
Keycloak拡張入門
Keycloak拡張入門Keycloak拡張入門
Keycloak拡張入門
 
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
【第26回Elasticsearch勉強会】Logstashとともに振り返る、やっちまった事例ごった煮
 
MQTTとAMQPと.NET
MQTTとAMQPと.NETMQTTとAMQPと.NET
MQTTとAMQPと.NET
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
 
さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)さいきんの InnoDB Adaptive Flushing (仮)
さいきんの InnoDB Adaptive Flushing (仮)
 

Similar to Flumeを活用したAmebaにおける大規模ログ収集システム

20120303 _JAWS-UG_SUMMIT2012_エキスパートセッションEMR編
20120303 _JAWS-UG_SUMMIT2012_エキスパートセッションEMR編20120303 _JAWS-UG_SUMMIT2012_エキスパートセッションEMR編
20120303 _JAWS-UG_SUMMIT2012_エキスパートセッションEMR編Kotaro Tsukui
 
Apache Flume 1.5を活⽤したAmebaにおけるログのシステム連携
Apache  Flume 1.5を活⽤したAmebaにおけるログのシステム連携Apache  Flume 1.5を活⽤したAmebaにおけるログのシステム連携
Apache Flume 1.5を活⽤したAmebaにおけるログのシステム連携cyberagent
 
クラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれクラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれMasataka MIZUNO
 
Plone + AWS at Plone Symposium tokyo 2015
Plone + AWS at Plone Symposium tokyo 2015Plone + AWS at Plone Symposium tokyo 2015
Plone + AWS at Plone Symposium tokyo 2015Manabu Terada
 
Fluentdでログを集めてGlusterFSに保存してMapReduceで集計
Fluentdでログを集めてGlusterFSに保存してMapReduceで集計Fluentdでログを集めてGlusterFSに保存してMapReduceで集計
Fluentdでログを集めてGlusterFSに保存してMapReduceで集計maebashi
 
オープンソースNW監視ツールのご紹介
オープンソースNW監視ツールのご紹介オープンソースNW監視ツールのご紹介
オープンソースNW監視ツールのご紹介OSSラボ株式会社
 
データ活用を効率化するHadoop WebUIと権限管理改善事例
データ活用を効率化するHadoop WebUIと権限管理改善事例データ活用を効率化するHadoop WebUIと権限管理改善事例
データ活用を効率化するHadoop WebUIと権限管理改善事例Masahiro Kiura
 
Rubyによるお手軽分散処理
Rubyによるお手軽分散処理Rubyによるお手軽分散処理
Rubyによるお手軽分散処理maebashi
 
[DB tech showcase Tokyo 2015] B37 :オンプレミスからAWS上のSAP HANAまで高信頼DBシステム構築にHAクラスタリ...
[DB tech showcase Tokyo 2015] B37 :オンプレミスからAWS上のSAP HANAまで高信頼DBシステム構築にHAクラスタリ...[DB tech showcase Tokyo 2015] B37 :オンプレミスからAWS上のSAP HANAまで高信頼DBシステム構築にHAクラスタリ...
[DB tech showcase Tokyo 2015] B37 :オンプレミスからAWS上のSAP HANAまで高信頼DBシステム構築にHAクラスタリ...Funada Yasunobu
 
[DB tech showcase Tokyo 2015] B37 :オンプレミスからAWS上のSAP HANAまで高信頼DBシステム構築にHAクラス...
[DB tech showcase Tokyo 2015] B37 :オンプレミスからAWS上のSAP HANAまで高信頼DBシステム構築にHAクラス...[DB tech showcase Tokyo 2015] B37 :オンプレミスからAWS上のSAP HANAまで高信頼DBシステム構築にHAクラス...
[DB tech showcase Tokyo 2015] B37 :オンプレミスからAWS上のSAP HANAまで高信頼DBシステム構築にHAクラス...Funada Yasunobu
 
Serfが面白いと俺の中で話題にwwwwww 【改訂版】
Serfが面白いと俺の中で話題にwwwwww 【改訂版】Serfが面白いと俺の中で話題にwwwwww 【改訂版】
Serfが面白いと俺の中で話題にwwwwww 【改訂版】Masahito Zembutsu
 
20130313 OSCA Hadoopセミナー
20130313 OSCA Hadoopセミナー20130313 OSCA Hadoopセミナー
20130313 OSCA HadoopセミナーIchiro Fukuda
 
20140826 it pro_expo_rev2
20140826 it pro_expo_rev220140826 it pro_expo_rev2
20140826 it pro_expo_rev2Takano Masaru
 
分散処理基盤ApacheHadoop入門とHadoopエコシステムの最新技術動向(OSC2015 Kansai発表資料)
分散処理基盤ApacheHadoop入門とHadoopエコシステムの最新技術動向(OSC2015 Kansai発表資料)分散処理基盤ApacheHadoop入門とHadoopエコシステムの最新技術動向(OSC2015 Kansai発表資料)
分散処理基盤ApacheHadoop入門とHadoopエコシステムの最新技術動向(OSC2015 Kansai発表資料)NTT DATA OSS Professional Services
 
[db tech showcase Tokyo 2014] B11: [In-Memory DB: SAP HANA] OLTP/OLAPをシングルデータ...
[db tech showcase Tokyo 2014] B11: [In-Memory DB: SAP HANA] OLTP/OLAPをシングルデータ...[db tech showcase Tokyo 2014] B11: [In-Memory DB: SAP HANA] OLTP/OLAPをシングルデータ...
[db tech showcase Tokyo 2014] B11: [In-Memory DB: SAP HANA] OLTP/OLAPをシングルデータ...Insight Technology, Inc.
 
[Osaka]AMIMOTO(HHVM) hands-on #cmsdou
[Osaka]AMIMOTO(HHVM) hands-on #cmsdou [Osaka]AMIMOTO(HHVM) hands-on #cmsdou
[Osaka]AMIMOTO(HHVM) hands-on #cmsdou Hiromichi Koga
 
Oracle Cloudで始める、DBエンジニアのためのHadoop超入門(db tech showcase 2016 Oracle セッション資料)
Oracle Cloudで始める、DBエンジニアのためのHadoop超入門(db tech showcase 2016 Oracle セッション資料)Oracle Cloudで始める、DBエンジニアのためのHadoop超入門(db tech showcase 2016 Oracle セッション資料)
Oracle Cloudで始める、DBエンジニアのためのHadoop超入門(db tech showcase 2016 Oracle セッション資料)オラクルエンジニア通信
 
Yifeng hadoop-present-public
Yifeng hadoop-present-publicYifeng hadoop-present-public
Yifeng hadoop-present-publicYifeng Jiang
 

Similar to Flumeを活用したAmebaにおける大規模ログ収集システム (20)

20120303 _JAWS-UG_SUMMIT2012_エキスパートセッションEMR編
20120303 _JAWS-UG_SUMMIT2012_エキスパートセッションEMR編20120303 _JAWS-UG_SUMMIT2012_エキスパートセッションEMR編
20120303 _JAWS-UG_SUMMIT2012_エキスパートセッションEMR編
 
Apache Flume 1.5を活⽤したAmebaにおけるログのシステム連携
Apache  Flume 1.5を活⽤したAmebaにおけるログのシステム連携Apache  Flume 1.5を活⽤したAmebaにおけるログのシステム連携
Apache Flume 1.5を活⽤したAmebaにおけるログのシステム連携
 
クラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれクラウド開発に役立つ OSS あれこれ
クラウド開発に役立つ OSS あれこれ
 
Plone + AWS at Plone Symposium tokyo 2015
Plone + AWS at Plone Symposium tokyo 2015Plone + AWS at Plone Symposium tokyo 2015
Plone + AWS at Plone Symposium tokyo 2015
 
Fluentdでログを集めてGlusterFSに保存してMapReduceで集計
Fluentdでログを集めてGlusterFSに保存してMapReduceで集計Fluentdでログを集めてGlusterFSに保存してMapReduceで集計
Fluentdでログを集めてGlusterFSに保存してMapReduceで集計
 
オープンソースNW監視ツールのご紹介
オープンソースNW監視ツールのご紹介オープンソースNW監視ツールのご紹介
オープンソースNW監視ツールのご紹介
 
データ活用を効率化するHadoop WebUIと権限管理改善事例
データ活用を効率化するHadoop WebUIと権限管理改善事例データ活用を効率化するHadoop WebUIと権限管理改善事例
データ活用を効率化するHadoop WebUIと権限管理改善事例
 
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
Java Clientで入門する Apache Kafka #jjug_ccc #ccc_e2
 
Rubyによるお手軽分散処理
Rubyによるお手軽分散処理Rubyによるお手軽分散処理
Rubyによるお手軽分散処理
 
[DB tech showcase Tokyo 2015] B37 :オンプレミスからAWS上のSAP HANAまで高信頼DBシステム構築にHAクラスタリ...
[DB tech showcase Tokyo 2015] B37 :オンプレミスからAWS上のSAP HANAまで高信頼DBシステム構築にHAクラスタリ...[DB tech showcase Tokyo 2015] B37 :オンプレミスからAWS上のSAP HANAまで高信頼DBシステム構築にHAクラスタリ...
[DB tech showcase Tokyo 2015] B37 :オンプレミスからAWS上のSAP HANAまで高信頼DBシステム構築にHAクラスタリ...
 
[DB tech showcase Tokyo 2015] B37 :オンプレミスからAWS上のSAP HANAまで高信頼DBシステム構築にHAクラス...
[DB tech showcase Tokyo 2015] B37 :オンプレミスからAWS上のSAP HANAまで高信頼DBシステム構築にHAクラス...[DB tech showcase Tokyo 2015] B37 :オンプレミスからAWS上のSAP HANAまで高信頼DBシステム構築にHAクラス...
[DB tech showcase Tokyo 2015] B37 :オンプレミスからAWS上のSAP HANAまで高信頼DBシステム構築にHAクラス...
 
Serfが面白いと俺の中で話題にwwwwww 【改訂版】
Serfが面白いと俺の中で話題にwwwwww 【改訂版】Serfが面白いと俺の中で話題にwwwwww 【改訂版】
Serfが面白いと俺の中で話題にwwwwww 【改訂版】
 
20130313 OSCA Hadoopセミナー
20130313 OSCA Hadoopセミナー20130313 OSCA Hadoopセミナー
20130313 OSCA Hadoopセミナー
 
20140826 it pro_expo_rev2
20140826 it pro_expo_rev220140826 it pro_expo_rev2
20140826 it pro_expo_rev2
 
分散処理基盤ApacheHadoop入門とHadoopエコシステムの最新技術動向(OSC2015 Kansai発表資料)
分散処理基盤ApacheHadoop入門とHadoopエコシステムの最新技術動向(OSC2015 Kansai発表資料)分散処理基盤ApacheHadoop入門とHadoopエコシステムの最新技術動向(OSC2015 Kansai発表資料)
分散処理基盤ApacheHadoop入門とHadoopエコシステムの最新技術動向(OSC2015 Kansai発表資料)
 
[db tech showcase Tokyo 2014] B11: [In-Memory DB: SAP HANA] OLTP/OLAPをシングルデータ...
[db tech showcase Tokyo 2014] B11: [In-Memory DB: SAP HANA] OLTP/OLAPをシングルデータ...[db tech showcase Tokyo 2014] B11: [In-Memory DB: SAP HANA] OLTP/OLAPをシングルデータ...
[db tech showcase Tokyo 2014] B11: [In-Memory DB: SAP HANA] OLTP/OLAPをシングルデータ...
 
[Osaka]AMIMOTO(HHVM) hands-on #cmsdou
[Osaka]AMIMOTO(HHVM) hands-on #cmsdou [Osaka]AMIMOTO(HHVM) hands-on #cmsdou
[Osaka]AMIMOTO(HHVM) hands-on #cmsdou
 
Oracle Cloudで始める、DBエンジニアのためのHadoop超入門(db tech showcase 2016 Oracle セッション資料)
Oracle Cloudで始める、DBエンジニアのためのHadoop超入門(db tech showcase 2016 Oracle セッション資料)Oracle Cloudで始める、DBエンジニアのためのHadoop超入門(db tech showcase 2016 Oracle セッション資料)
Oracle Cloudで始める、DBエンジニアのためのHadoop超入門(db tech showcase 2016 Oracle セッション資料)
 
Yifeng hadoop-present-public
Yifeng hadoop-present-publicYifeng hadoop-present-public
Yifeng hadoop-present-public
 
Flume
FlumeFlume
Flume
 

Recently uploaded

新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...Toru Tamaki
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルCRI Japan, Inc.
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video UnderstandingToru Tamaki
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Hiroshi Tomioka
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。iPride Co., Ltd.
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Gamesatsushi061452
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイスCRI Japan, Inc.
 

Recently uploaded (11)

新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 

Flumeを活用したAmebaにおける大規模ログ収集システム

  • 1. Flumeを活用したAmebaにおける 大規模ログ収集システム -Hadoop Conference Japan 2013 Winter- 株式会社サイバーエージェント アメーバ事業本部 Ameba Technology Laboratory Juhani Connolly (Apache Flume PMC/Committer) 飯島 賢志
  • 2. 株式会社サイバーエージェント 2 自己紹介 いいじま さと し ・ 飯島 賢志 ・ R&D Engineer ・ Ameba Technology Lab ・ Hadoopログ解析基盤 HBaseを使ったgraphDB 各サービスでFlume導入中
  • 3. 株式会社サイバーエージェント 3 本日の内容 ・ Ameba サービスと Ameba Technology Lab について ・ Flume について ・ Flume の導入事例
  • 4. 株式会社サイバーエージェント 4 ・ Ameba サービスと Ameba Technology Lab について ・ Flume について ・ Flume の導入事例
  • 5. スマートフォンサービス 株式会社サイバーエージェント 5
  • 6. 株式会社サイバーエージェント 6 Ameba Technology Laboratory ・ 2011/4 秋葉原に開設 ・ 約20名 ( 2013年1月 )
  • 7. 株式会社サイバーエージェント 7 技術領域 スマホ ニュース ブログ ゲーム ピグ その他多数 profile なう Ameba全般 検索 データマイニング 大規模 分散処理 ピグ メッセージ ブログ グルっぽ (ログ解析基盤) ブログ グルっぽ 推薦 フィルタリング
  • 8. 株式会社サイバーエージェント 8 ・ Ameba サービスと Ameba Technology Lab について ・ Flume について ・ Flume の導入事例
  • 9. 株式会社サイバーエージェント 9 自己紹介 コノリー・ユハニ ・ Juhani Connolly ・ R&D Engineer ・ Ameba Technology Lab ・ Flume開発・対応 機械学習 必要に応じてHadoop周り
  • 10. 株式会社サイバーエージェント 10 Apache Flume(以下Flume)とは? “Flume is a distributed, reliable, and available system for efficiently collecting, aggregating, and moving large amounts of log data from many different sources to a centralized data store.” つまり、高信頼性かつ冗長化可能な大量の データの収集・統合・転送を行うシステム。
  • 11. 株式会社サイバーエージェント 11 どこから来た? ・元々はClouderaのプロジェクトからスタートする ・オープンソースでApache Incubatorに移動。 ・FlumeNGの開発で完全再構築。 ・2012年の夏にApacheのTLPになる、1.2がリリース (CDH4に現在入ってるバーション) ・最新リリースは1月にリリースされたばかりの1.3.1 ・ちなみサイバーエージェントで導入されてるバーションは1.4 のトランクに近い物。
  • 12. 株式会社サイバーエージェント 12 開発に関わってる会社 現在のコミッターは以下の会社から ・Apple ・Cloudera(ここ多い!) ・Cyberagent ・Intuit ・Odiago ・TrendMicro ・無所属 Apacheのプロジェクトなので、コントリビューションの実績があ れば誰でもなれます。
  • 13. 株式会社サイバーエージェント 13 Apache Flumeの概要
  • 14. 株式会社サイバーエージェント 14 概要 こんな感じ?
  • 15. 株式会社サイバーエージェント 15 構造を簡単な図にすると 「Source」データの源。 ・Avro/Scribe ・Netcat ・Exec(実行プログラムに出力) ・など ・必要であれば、カスタムは簡単 に作れる。
  • 16. 株式会社サイバーエージェント 16 構造を簡単な図にすると 「Channel」データの一時的な溜 まり場。 ・File ・Memory ・JDBC(遅いため、Fileを推奨) ・同じくカスタム可能。ただしト ランザクションの実装とかもいる ので複雑。
  • 17. 株式会社サイバーエージェント 17 構造を簡単な図にすると 「Sink」データを送る先・もしく は保存するメディア ・File/HDFS ・Avro ・HBase ・IRC、Null、Logなど ・またカスタムプラグインも可能
  • 18. 株式会社サイバーエージェント 18 エージェントに関して ・最低限でSource・Channel・Sink三つのコ ンポーネントがそろえば、一つのエージェン トとなります ・コンポーネントは一つずつとは限りませ ん。複数のフローを同じエージェント内で管 理してもいいです。 ・また、複数のエージェントを使う事で複 数のサーバーのデータをつなげて複雑なフ ローを簡単に構築出来ます。
  • 20. 株式会社サイバーエージェント 20 ノードの繋ぎ型 ・複数のノードをつなぐには一般的にAvro SinkとAvro Sourceを使 います。 ・そうすれば最初のエージェントから流れるデータはAvroプロ トコルで二つ目のシンクに現れます ・転送が失敗したらトランザクションがロールバックされ、元 のチャンネルのデータ取得がキャンセルされます。 Avro Avro
  • 21. 株式会社サイバーエージェント 21 統合 ・複数のエージェントの AvroSinkを一つのエージェ ントのAvroSourceに送り、 複数のサーバーからのデー タをまとめて処理する事が 出来ます。 ・例えば複数のログを HDFSに上げたい時に一つ のサーバーで収集して、 HDFSシンクに流す。 HDFS?
  • 22. 株式会社サイバーエージェント 22 概要まとめ ・このまま色んなセットアップを紹介出来ますが、ドキュメント にちゃんと説明されていますし、新しいのはケースによっても考 えられます。 ・エージェントをソース・チャンネル・シンクで作りそれらをつ なげる事で複雑なフローが実行可能。 ・コンフィグレーションのやり方やすべてのコンポーネントのド キュメンテーションがしっかり書いてある。 ・http://flume.apache.org/FlumeUserGuide.html ・オープンソースにしてはドキュメンテーションがよい(個人 的な偏見?) ・すべての主なコンポーネントはプラグインでリプレイス出来ま すし、開発は簡単。
  • 23. 株式会社サイバーエージェント 23 Event その他の機能:イベントとその使い道 Header map: ・データはイベントに分かれている。例 えばログの一行 ABC => xyz ・イベントにはヘッダーのマップとボ Foo => bar ディーがついています。 ・ヘッダーを使ってフローのコント ロールが出来ます。Channelの時点でイベ ントによるマルチプレクシングでフロー Body: を分ける事が可能。 Lorem ipsum ・ヘッダーはバケティングなどでも使 dolor sit amet, えます。 consectetur ・イベント作成の時についていますが、 次に出るインターセプターでも編集可能。
  • 24. 株式会社サイバーエージェント 24 その他機能:インターセプター ・ソースとチャンネルの間に入れられる部分で イベントの編集やフィルタリングを可能にする。 ・例えばログからタイムスタンプを読み込ん で、ヘッダーに正しいのを書き出す(事例で出 ます) Data ・フィルターとしても使えるし、一つのイベ ントを複数のイベントに分ける事も。 ・簡単に作れる、プラグインで入れられる。 Data+
  • 25. 株式会社サイバーエージェント 25 その他の機能:冗長化など ・シンクのグループが管理可能でシンクプロセッサーでデータを グループのどこに送るかコントロール出来ます。 ・Failover ・LoadBalancing ・マルチプレクシング以外にも、同じイベントをレプリケーショ ンして、複数のチャンネルに送れる。 ・同じログで二つの事をやりたい時に使える。例えばHDFSに保 存して、簡単なメトリックスを計算する。
  • 26. 株式会社サイバーエージェント 26 オープンソースなので、 必要な機能がなければ作ればいいです! コントリビューションは勿論歓迎していま す。 ※作れないならMLに聞くのもあり
  • 27. 株式会社サイバーエージェント 27 Flumeの送信保証と注意
  • 28. 株式会社サイバーエージェント 28 データロスがない!※ ※条件付き
  • 29. 株式会社サイバーエージェント 29 データロスを防止するには何が必要? フローにあるすべてのチャンネルは状態を 保存できる物でなければならない。 ・FileChannelが基本推奨される物。 ・MemoryChannelが落ちたら、入ってる データがすべて消えます。
  • 30. 株式会社サイバーエージェント 30 データロスを防止するには何が必要? 各ステップの転送方法は逆戻り可能な物で なければならない。 ・主な例としてAvroSource・AvroSinkの組 み合わせ。 ・他の転送方法を使うともし次のステップ での保存が失敗したら、前のステップに知 らされてないので、元に戻せない。
  • 31. 株式会社サイバーエージェント 31 注意1:データの順番変更 ・Flumeでは届いたデータの順番が 送られた物と同じ順番で届く事を保 証していない。 ・簡単なフローでは順番は守られま すが、ロードバランシングやフェイ ルオーバーを使って複数のパスでた どり着けるとそうなってしまう。
  • 32. 株式会社サイバーエージェント 32 注意2:ロスがないが、二重保存がある ・HDFSなどへの効率的な書き込みをする時に一気に複数のイベン トを保存します。 ・但し一部の保存が失敗するとトランザクションがロールバッ クされ、後で同じイベントのバッチの書き込みが再度行われる。 ・そのため一部のデータが最終書き込み先で重複する事があり ます。
  • 33. 株式会社サイバーエージェント 33 二重書き込みも順番変更は問題ではない ・セットアップがちゃんとしていれば、重複の割 合が非常に低い。 ・但し逆に言うとHDFSなどが定期的にリクエ ストの途中でタイムアウト投げてるなら、重複が 増えます。 ・問題視されていない:なぜかと言うと、簡単な MRタスクで解決可能だから。
  • 34. 株式会社サイバーエージェント 34 他に便利 Gangliaメトリックがサポートされていて、フローの最適化や問題 解決に非常に役立ちます。
  • 35. 株式会社サイバーエージェント 35 ・ Ameba サービスと Ameba Technology Lab について ・ Flume について ・ Flume の導入事例
  • 36. 株式会社サイバーエージェント 36 Flume の導入事例 ・ 大量ログを冗長化構成でリアルタイムに HDFSへ保存 ・ Hadoopログをリアルタイムに集約管理 ・ アクセスログのリアルタイム可視化
  • 37. 株式会社サイバーエージェント 37 Flume の導入事例 ・ 大量ログを冗長化構成でリアルタイムに HDFSへ保存 ・ Hadoopログをリアルタイムに集約管理 ・ アクセスログのリアルタイム可視化
  • 38. 株式会社サイバーエージェント 38 導入前の状況 - 冗長化構成でHDFSに保存 - ・ ログはHourlyやDailyでscpとHDFSへのputで保存 ・ 大量ログの転送後の解析開始時間を早めたい ・ ネットワーク負荷の平準化、今後のリアルタイムな 解析のためログをリアルタイムに転送したい
  • 39. 株式会社サイバーエージェント 39 システム構成 - 冗長化構成でHDFSに保存 - ・ Webサーバからアグリゲータに転送しHDFSへ保存 Webサーバ ログ転送 Interceptor ブログ ログ解析 ログ保存 Interceptor 検索 HDFS Interceptor ・ ・ Flume ・ アグリゲータ Flume コレクタ 冗長化 Flume
  • 40. 株式会社サイバーエージェント 40 Flumeの設定ファイル - 冗長化構成でHDFSに保存 - ・ 設定ファイルは3つ /etc/flume/conf ├ flume.conf ├ flume-env.sh └ log4j.properties
  • 41. 株式会社サイバーエージェント 41 flume.confの構成 - 冗長化構成でHDFSに保存 - ## Name the components on this agent 【agent】 agent.sources = scribe 各コンポーネント名を指定 agent.channels = ch1 agent.sinks = avro ## source 【source】 agent.sources.scribe.type = org.apache.flume.source.scribe.ScribeSource agent.sources.scribe.channels = ch1 ログ読み込み方法や agent.sources.scribe.port = 1463 Interceptorを指定 agent.sources.scribe.interceptors = ts agent.sources.scribe.interceptors.ts.type = org.apache.flume.interceptor .XXXInterceptor$InterceptorBuilder 【channel】 ## channel agent.channels.ch1.type = file eventを転送するまでの agent.channels.ch1.checkpointDir = /tmp/flume-check 一時的な保存方法を指定 agent.channels.ch1.dataDirs = /tmp/flume-data ## sink 【sink】 agent.sinks.avro.type = avro agent.sinks.avro.channel = ch1 転送/保存の方法を指定 agent.sinks.avro.hostname = xxx.xxx.xxx.xxx agent.sinks.avro.port = 41415
  • 42. 株式会社サイバーエージェント 42 flume.confの例 - 冗長化構成でHDFSに保存 - 【コレクタ側のsource】 ● scribeソース:ログを読込みThriftプロトコルで流し込む機能を使用 ※以前Scribe利用時に自社開発。ファイル名の正規表現マッチ、 eventヘッダ追加、再送機能などあり ● Interceptor :元のログに何か処理を加えたいとき ## source - scribe agent.sources.scribe.type = org.apache.flume.source.scribe.ScribeSource agent.sources.scribe.port = 1463 agent.sources.scribe.channels = ch1 agent.sources.scribe.interceptors = ts agent.sources.scribe.interceptors.ts.type = org.apache.flume.interceptor.TimeInterceptor$InterceptorBuilder 【参考】シンプルにファイルを読込みたいなら ## source – Spooling Directory agent.sources.spool.type = spooldir agent.sources.spool.spoolDir =/var/log/secure agent.sources.spool.channels = ch1
  • 43. 株式会社サイバーエージェント 43 flume.confの例 - 冗長化構成でHDFSに保存 - 【アグリゲータ側のsource】 ● avroソース:コレクタから送られたものをavroとして読み取る ポートは送信元に合わせる ● bind :自身のIPアドレス ## source - avro agent.sources.avro1.type = avro agent.sources.avro1.port = 41414 agent.sources.avro1.channels = ch1 agent.sources.avro1.bind = xxx.xxx.xxx.xxx avro コレクタ アグリゲータ
  • 44. 株式会社サイバーエージェント 44 冗長化の設定例 - 冗長化構成でHDFSに保存 - ・ 冗長化はコレクタ側のsinkで設定。簡単にスケール可能。 ● 転送先のgroupを定義 【コレクタのflume.conf 抜粋】 ## sink - avro agent.sinks.avro1.type = avro agent.sinks.avro1.channel = ch1 agent.sinks.avro1.hostname = xxx.xxx.xxx.xxx agent.sinks.avro1.port = 41414 agent.sinks.avro2.type = avro agent.sinks.avro2.channel = ch1 agent.sinks.avro2.hostname = xxx.xxx.xxx.xxx agent.sinks.avro2.port = 41414 agent.sinkgroups = group1 agent.sinkgroups.group1.sinks = avro1 avro2 agent.sinkgroups.group1.processor.type = load_balance agent.sinkgroups.group1.processor.selector = round_robin
  • 45. 株式会社サイバーエージェント 45 flume-env.shの例 - 冗長化構成でHDFSに保存 - ・ コレクタの設定例。アグリゲータには適宜もっと大きなヒープを設定。 ● ヒープサイズ ● 監視するためのJMX設定 ● Gangliaでメトリクスを収集する設定 【flume-env.sh】 JAVA_HOME=/usr/local/java JAVA_OPTS="-server -XX:MaxPermSize=24m -XX:PermSize=24m -XX:SurvivorRatio=8 -Xmn96m -Xmx128m -Xms128m " JAVA_OPTS="${JAVA_OPTS} -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345" JAVA_OPTS="${JAVA_OPTS} -Dcom.sun.management.jmxremote.ssl=false - Dcom.sun.management.jmxremote.authenticate=false" JAVA_OPTS="${JAVA_OPTS} -Djava.rmi.server.hostname=xxx.xxx.xxx.xxx" JAVA_OPTS="${JAVA_OPTS} -Dflume.monitoring.type=GANGLIA -Dflume.monitoring.hosts=[host_name]:8649"
  • 46. 株式会社サイバーエージェント 46 log4j.propertiesの例 - 冗長化構成でHDFSに保存 - 一般的な設定になります 【log4j.properties】 flume.root.logger=INFO,LOGFILE flume.log.dir=/var/log/flume/ flume.log.file=flume.log log4j.logger.org.apache.flume.lifecycle = INFO log4j.logger.org.jboss = WARN log4j.logger.org.mortbay = INFO log4j.logger.org.apache.avro.ipc.NettyTransceiver = WARN log4j.logger.org.apache.hadoop = INFO log4j.rootLogger=${flume.root.logger} # Rolling file appender log4j.appender.LOGFILE=org.apache.log4j.rolling.RollingFileAppender log4j.appender.LOGFILE.rollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy log4j.appender.LOGFILE.rollingPolicy.FileNamePattern=${flume.log.dir}/${flume.log.file}.%d{yyyy-MM-dd}.gz log4j.appender.LOGFILE.Append=true log4j.appender.LOGFILE.File=${flume.log.dir}/${flume.log.file} log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout log4j.appender.LOGFILE.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss,SSS} %-5p [%t] (%C.%M:%L) %x - %m%n # console log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.target=System.err log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appender.console.layout.ConversionPattern=%d (%t) [%p - %l] %m%n
  • 47. 株式会社サイバーエージェント 47 自作のInterceptor - 冗長化構成でHDFSに保存 - ・ 元からあるTimestampInterceptorでは、 ログ転送時のtimeがeventヘッダに反映される ・ それだと日付変更の直前や障害時には正しく反映 されないことがある ・ そこで、ログの中身のtimeを読込み、ヘッダに 反映させる自作のInterceptorで運用中
  • 48. 株式会社サイバーエージェント 48 自作のInterceptorのソース - 冗長化構成でHDFSに保存 - ● ログから日付を取ってきてeventヘッダに設定 【org.apache.flume.interceptor.TimeInterceptor.java】 public Event intercept(Event event) { Map<String, String> headers = event.getHeaders(); String[] parts = new String(event.getBody()).split(“[t ]”); String[] date = parts[dateField].split(“-”); myCal.setTimeZone(TimeZone.getTimeZone(timeZoneCode)); myCal.set(GregorianCalendar.YEAR, Integer.parseInt(date[0])); myCal.set(GregorianCalendar.MONTH, Integer.parseInt(date[1]) - 1); myCal.set(GregorianCalendar.DAY_OF_MONTH, Integer.parseInt(date[2])); timestamp = myCal.getTimeInMillis(); headers.put(”timestamp”, timestamp.toString()); return event; } ※エラー処理などは割愛
  • 49. 株式会社サイバーエージェント 49 Flume の導入事例 ・ 大量ログを冗長化構成でリアルタイムに HDFSへ保存 ・ Hadoopログをリアルタイムに集約管理 ・ アクセスログのリアルタイム可視化
  • 50. 株式会社サイバーエージェント 50 導入前の状況 - Hadoopログ集約管理 - ・ 何十台もHadoopスレーブがあるとログをみたいとき に手間がかかる ・ ログが1箇所に集まってたら便利 ・ HDFSでなくローカルだったらコマンドも色々使える grep / tail / etc…
  • 51. 株式会社サイバーエージェント 51 システム構成 - Hadoopログ集約管理 - ・ Hadoopログをリアルタイムに1台のサーバに保存 ・ TimeInterceptorを通してログ転送 Hadoopスレーブ ログ転送 Interceptor ローカルに保存 ログ閲覧 Interceptor Flume Interceptor アグリゲータ ・ ・ ・ Flume コレクタ Flume
  • 52. 株式会社サイバーエージェント 52 ローカルへのSink方 - Hadoopログ集約管理 - 法 ・ 実用的な形にするには工夫が必要 ・ File Roll Sinkだと、eventのtimestampヘッダで自動バケッティングできない 【保存先】 /var/log/flume/hadoop/yyyy-mm-dd/….log 機能なし
  • 53. 株式会社サイバーエージェント 53 ローカルへのSink方 - Hadoopログ集約管理 - 法 ・ HDFS Sinkなら日付の自動バケッティングができる
  • 54. 株式会社サイバーエージェント 54 ローカルへのSink方 - Hadoopログ集約管理 - 法 ● HDFS Sinkでローカルに保存するように指定 ● eventのtimestampヘッダで日付のバケッティング ● 日付の他にもヘッダを利用してパラメータ指定できる 【flume.confの抜粋】 ## sink agent.sinks.file.type = hdfs agent.sinks.file.channel = ch1 agent.sinks.file.hdfs.path = file:///var/log/flume/hadoop/%Y-%m-%d agent.sinks.file.hdfs.filePrefix = %{category}.log agent.sinks.file.hdfs.fileType = DataStream agent.sinks.file.hdfs.writeFormat = text ←つい先週追加された機能 agent.sinks.file.hdfs.useRawLocalFileSystem = true ※JIRAのFLUME-1844
  • 55. 株式会社サイバーエージェント 55 Flume の導入事例 ・ 大量ログを冗長化構成でリアルタイムに HDFSへ保存 ・ Hadoopログをリアルタイムに集約管理 ・ アクセスログのリアルタイム可視化
  • 56. 株式会社サイバーエージェント 56 導入前の状況 - ログのリアルタイム可視化 - ・ 監視ツールではアクセス数やレイテンシはグラフ化 できていない ・ アクセスログにはServiceやMethod毎にレイテンシを 書き出している ・ そこで、FlumeとGrowthForecastを連携させて アクセス状況をグラフ化したい
  • 57. 株式会社サイバーエージェント 57 GrowthForecast とは - ログのリアルタイム可視化 - WebAPIに値をリクエストするだけで簡単にグラフ化できるWebツール
  • 58. 株式会社サイバーエージェント 58 システム構成 - ログのリアルタイム可視化 - ・Flumeでアプリケーションログをサマリして必要なデータだけを転送 ・アグリゲータで集計してGrowthForecastのAPIにリクエスト Webサーバ サマリしたデータ だけ転送 GFにリクエスト Interceptor GF閲覧 Interceptor Interceptor Flume アグリゲータ ・ ・ ログ ・2.5万行/秒 Flume Flume コレクタ
  • 59. 株式会社サイバーエージェント 59 自作のInterceptor - ログのリアルタイム可視化 - 【コレクタ側】 ・ 大量のログを送ってアグリゲータ側で計算すると負荷が高いので、 ・ コレクタ側でアクセスログ1行毎からservice・method単位で アクセス数は1ずつ、レイテンシは取得した値でインクリメント ※ログの例 2013-01-21 14:00:00 … service=AAA … method=BBB … latency=XXX … ・ 15秒に1回、service・method単位のアクセス数とレイテンシの 合計をサマリとしてアグリゲータに転送
  • 60. 株式会社サイバーエージェント 60 自作のInterceptor - ログのリアルタイム可視化 - 【アグリゲータ側】 ・ コレクタの各サーバから転送されたデータを元に 全サーバのservice・method単位の以下を計算 アクセス数:秒間のアクセス数 レイテンシ:1アクセス当たりの平均レイテンシ ・ 1分間に1回GrowthForecastのAPIにリクエスト
  • 61. 株式会社サイバーエージェント 61 できあがったグラフ - ログのリアルタイム可視化 - リアルタイムにグラフ化できた! 【アクセス数】 【レイテンシ】
  • 62. 株式会社サイバーエージェント 62 監視 - ログのリアルタイム可視化 - 【Ganglia ● Ganglia 】 JMXのメトリクスをグラフ化 ● アラート監視 ・ ステータスのチェック ・ JMXのメトリクス ・ channelやavroのStopTime ・ ChannelFillPercentage ⇒ログ量に応じてwarnとcriticalで値を分けて管理
  • 63. 株式会社サイバーエージェント 63 今まで運用してきて ・ 今のところパフォーマンスに問題なし ・ Flume再起動時にCheckPointのIndex再構築で OutOfMemoryになるときは最大ヒープサイズを調整 ・ Interceptorなどプラグインを修正・開発すれば やりたいことを実現できる ・ 問題が発見されてもオープンソースコミュニティで 素早く修正されている
  • 64. 株式会社サイバーエージェント 64 今後のやりたいこと ・ 適用範囲の拡大 ・ ログをフィルタリングして転送 ・ 特定のログを検知してアラート ・ 転送したログをDB(MySQL, MongoDB等)に入れる ・ MySQLのBinlogからHBaseにインポート
  • 65. 株式会社サイバーエージェント 65 まとめ ・ 大量ログを冗長化構成でリアルタイムにHDFSへ保存 ⇒バケッティングもできてロスなくログ転送できた ・ Hadoopログをリアルタイムに集約管理 ⇒1サーバで全台のログを検索/閲覧できるようになった ・ アクセスログのリアルタイム可視化 ⇒アクセス数やレイテンシをリアルタイムに把握可能に ・ Flumeはプラグインのようなコンポーネント単位の 開発がしやすく柔軟性が高い
  • 66. 株式会社サイバーエージェント 66 最後に ・ サイバーエージェントでは優秀なエンジニアを 募集しています! ・ Flumeはコントリビューションを歓迎しています http://flume.apache.org/ ・ Flumeの質問はこちら user@flume.apache.org もし英語が苦手な方は juhani_connolly@cyberagent.co.jp
  • 67. 株式会社サイバーエージェント 67 ご清聴ありがとうございました!