Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ウェブアクセラレータ(さくらのCDNサービス)のアクセスデータ収集の裏側

 ウェブアクセラレータ(さくらのCDNサービス)のアクセスデータ収集の裏側

@ 6社の開発現場ツール大公開Night

稲波 志 (Inanami Nozomi)

November 08, 2019
Tweet

More Decks by 稲波 志 (Inanami Nozomi)

Other Decks in Technology

Transcript

  1. 発表者の自己紹介 いななみ のぞみ / @nozomi_1773 さくらインターネット 2018年中途入社 仕事内容 • さくらのCDNサービス「ウェブアクセラレータ」関連

    • 開発/運用 • 主に、インフラエンジニア(物理サーバ~インフラ自動化、ミドルウェア等) • ときどき、バックエンド開発(Go、Lua) • 調査/検証 • サービスに取り入れられそうな技術やミドルウェアの調査/検証 趣味 • 読書、登山、ダイビング
  2. CDNサービスとは ウェブアクセラレータ サービスサイト より ( https://www.sakura.ad.jp/services/cdn/ ) CDN(Content Delivery Network)

    オリジンサーバ(お客様のサーバ)のデータをCDNサーバへキャッシュし、 データの配信を肩代わりするサービス
  3. CDNサービスとは ウェブアクセラレータ サービスサイト より ( https://www.sakura.ad.jp/services/cdn/ ) CDN(Content Delivery Network)

    オリジンサーバ(お客様のサーバ)のデータをCDNサーバへキャッシュし、 データの配信を肩代わりするサービス 【CDNが活躍する事例】 突発的なアクセス増が予想される(保険としても) ・ テレビやインターネットニュース、SNSで取り上げられた ・ 通販サイトのタイムセール など 大量の配信がしたい ・ 画像・動画データ ・ ゲームのデータ など
  4. ウェブアクセラレータのアクセスデータ収集 収集処理は、OSSツール × 独自デーモン の組み合わせで実装しています ( データ収集 ) ・ go-carbon

    -> 時系列DB, Graphite + Carbon の代替 (Go製) ・ carbonapi -> Graphite用のAPI, graphite-web の代替 (Go製) ・ carbonzipper -> Carbon用の透過プロキシ (Go製) ( 冗長/分散集積 ) ・ keepalived ・ glusterfs など ※ 今回こちらは省略 【この周辺の処理に利用しているOSS 】 【独自デーモン 】 ・ logcollectd -> syslog受信したnginxアクセスログをパースし、graphite形式で送信する (Go製)
  5. ウェブアクセラレータのアクセスデータ収集 プロキシ( nginx ) 多段キャッシュ キャッシュサーバ 独自 デーモン ( logcollectd

    ) ログサーバ(Backup) ログサーバ(Active) 同様 TCPクライアント UNIXドメインソケット go-carbon Data ( whisper形式) carbonzipper carbonapi APIサーバ データ参照 TCPレシーバ
  6. ウェブアクセラレータのアクセスデータ収集 プロキシ( nginx ) 多段キャッシュ キャッシュサーバ 独自 デーモン ( logcollectd

    ) ログサーバ(Backup) ログサーバ(Active) 同様 TCPクライアント UNIXドメインソケット go-carbon Data ( whisper形式) carbonzipper carbonapi APIサーバ データ参照 TCPレシーバ 【収集ステップ 1. nginxで処理】 nginx の access_log を syslog転送 独自デーモン( logcollectd )の.sock宛て 例: access_log syslog:server=unix:/~~~.sock
  7. ウェブアクセラレータのアクセスデータ収集 プロキシ( nginx ) 多段キャッシュ キャッシュサーバ 独自 デーモン ( logcollectd

    ) ログサーバ(Backup) ログサーバ(Active) 同様 TCPクライアント UNIXドメインソケット go-carbon Data ( whisper形式) carbonzipper carbonapi APIサーバ データ参照 TCPレシーバ 【収集ステップ 2. 独自デーモン logcollectdで処理】 ① 内包syslogサービスでnginxアクセスログを受信 ② ログをgraphite形式への連携形式にパース ( サイト別に分類、必要な情報の抽出 ) ③ 一定間隔で、ログサーバのgo-carbon宛てに送信
  8. ウェブアクセラレータのアクセスデータ収集 プロキシ( nginx ) 多段キャッシュ キャッシュサーバ 独自 デーモン ( logcollectd

    ) ログサーバ(Backup) ログサーバ(Active) 同様 TCPクライアント UNIXドメインソケット go-carbon Data ( whisper形式) carbonzipper carbonapi APIサーバ データ参照 TCPレシーバ 【収集ステップ 3. go-carbonで処理】 ① logcollectdより送信したデータを受信 ② 各サーバ(Active/Backup)の Data領域にwhisper形式で集積する
  9. ウェブアクセラレータのアクセスデータ収集 プロキシ( nginx ) 多段キャッシュ キャッシュサーバ 独自 デーモン ( logcollectd

    ) ログサーバ(Backup) ログサーバ(Active) 同様 TCPクライアント UNIXドメインソケット go-carbon Data ( whisper形式) carbonzipper carbonapi APIサーバ データ参照 TCPレシーバ 【閲覧はリクエスト連携】 ① carbonapi宛てにリクエスト ② carbonapi → carbonzipper リクエスト(proxy) ③ whisper ファイルの読み出し ④ carbonzipper → carbonapi 応答
  10. ウェブアクセラレータのアクセスデータ収集 プロキシ( nginx ) 多段キャッシュ キャッシュサーバ 独自 デーモン ( logcollectd

    ) ログサーバ(Backup) ログサーバ(Active) 同様 TCPクライアント UNIXドメインソケット go-carbon Data ( whisper形式) carbonzipper carbonapi APIサーバ データ参照 TCPレシーバ
  11. ウェブアクセラレータのアクセスデータ収集 プロキシ( nginx ) 多段キャッシュ キャッシュサーバ 独自 デーモン ( logcollectd

    ) ログサーバ(Backup) ログサーバ(Active) 同様 TCPクライアント UNIXドメインソケット go-carbon Data ( whisper形式) carbonzipper carbonapi APIサーバ データ参照 TCPレシーバ ※ 現時点での内容です! 今後向けに、他の仕組みも検討中!