BigQueryでつくるメルカリのログ分析基盤〜nginxエンジニアではなくプログラマと呼ばれたい@cubicdaiyaです。今回はメルカリのログ分析基盤のお話です。メルカリにおけるログデータ分析メルカリでは初期の頃からログデータの分析をサービスの成長にとって重要なタスクとして位置づけ、そのための基盤作りに取り組んできました。ログの種類はいくつかありますが、中でも代表的なのがアプリケーションサーバで出力されるアクセスログやアプリケーション固有のログです。これらのログはサイズが大きいので効率良くログデータを転送するための工夫が必要になります。そこで活躍するのがFluentdです。Dataといったクラウドサービスに転送されます。(上記の図は非常に簡単に済ませていますが、実際にはログの中継やフィルタリングをするためのFluentd、NorikraやKibanaといったコンポーネントもあってもう少し複雑です。)ログデータ分析のためのインフラの運用はインフラチームが担当し、実際のデータ分析は主にディレクターやデータサイエンティストのチームが行います。不具合等の調査のために開発者が利用することもよくあります。メルカリにはこれ以外にも色々なログデータの集計、可視化、レポーティングの仕組みが用意されています。UIによる統計ダッシュボード外部の分析ツール利用といった具合です。Pascal〜独自のログ分析基盤の構築〜メルカリではこれまで上記で挙げた複数のログデータ分析の仕組みを構築・運用してきましたが、次のような課題が出てきました。各種KPIや分析に必要な元データが分散アクセスログは生データなので元々分析に利用するのには向いてなくて使いづらい(コツがいる)外部の分析ツールだと手軽に集計・可視化ができる一方、細かい部分を詳しく調べたり他のデータやツールと組み合わせるのが難しいそこで分析に適したログを一から設計・集計して分析ツールと組み合わせて使えるようにしよう、ということで新しいログ分析基盤を構築することになりました。この分析基盤は社内ではPascalと呼ばれているもので既に今年の夏から稼働を開始しており、タップや画面遷移といったアプリ内イベント、A/Bテストのためのログデータ分析基盤といった形で適用する領域を徐々に広げています。Pascalは以下のコンポーネントで構成されています。(ngx_luaベースのアプリケーションフレームワーク)FluentdBigQuery以下はPascalの処理の流れを図示したものです。PureePureeはクックパッド社がOSSで公開しているスマートフォンアプリ向けのログコレクタです。端末の通信状況やバッテリ、データ使用量といったスマートフォンアプリならではの技術的課題を考慮して設計されているのが特徴です。Androidでほぼ同じ条件でログデータを取得することができること、取得したいログデータのカスタマイズが容易なことから採用されました。(参考:モバイルアプリのログ収集ライブラリ「Puree」をリリースしました)OpenRestyOpenRestyはngx_luaをベースにしたアプリケーションフレームワークです。ngx_lua向けの便利なモジュールやLuaとLuaJIT、nginxのサードパーティモジュールがバンドルされているnginxのスーパーセットとも言えるフレームワークです。非常に高速でなおかつノンブロッキングアーキテクチャでスケーラビリティの高いnginxの強みを享受できる優れものです。PascalではPureeからJSONで送られてくるイベント列を分解してイベントの種類(チャンネルと呼んでいます)毎にログを出力する役割を担っています。Pascalの処理の流れPascalではアプリ内のイベントデータがある程度溜まるとPureeによってフラッシュされ、OpenRestyで構築されたエンドポイントに転送されます。各エンドポイントではJSONとして送られてきたイベントデータを分解してチャンネル毎にFluentdでタグ付けして最終的にBigQueryに格納します。BigQueryに格納する際、流量の多いログデータは一旦ファイルに書き出して定期的にバッチで投入し、流量が少なめのログデータはfluent-plugin-bigqueryで投入することでコストと利便性のバランスを取っています。さいごにメルカリではこれらのログ分析基盤の改善・強化に取り組むエンジニア、新たなデータ分析の仕組みの考案やログ分析基盤を通じてサービスの潜在的な課題やニーズを見出し、解決案を提案・施行するデータサイエンティストを募集しています。Reliabilityまた、これらの分野に限らずメルカリでは常に優秀なエンジニアを募集しています。興味を持たれた方はぜひご応募ください。BigQueryでつくるメルカリのログ分析基盤〜Tweet関連記事2018-12-03GCPでStreamなデータパイプライン始めましたこんにちは、はじめまして。Rel...2016-05-253つのnginxをうまく使い分けよう〜nginx、OpenResty、Tengine〜SREチームの@cubicdaiyaです。HTTP/2SREチームの@cubicdaiyaです。Engineering)チームの@cubicdaiyaです。採用情報メルカリは常に優秀なソフトウェアエンジニアを募集しています。ご興味を持たれた方はぜひご応募ください。skills月別アーカイブスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。