GO TechTalk #29 タクシーアプリ『GO』のログ解析の民主化を促進するStreamlitの活用

2024年9月17日に「GO TechTalk #29 タクシーアプリ『GO』のログ解析の民主化を促進するStreamlitの活用」(connpass)を開催しました。

本記事では当日の内容を簡単に紹介します。

GO TechTalkとは?

GO TechTalkは、GO株式会社のエンジニアたちが、タクシーアプリ『GO』をはじめとしたサービスやプロダクトを開発する中で得た技術的ナレッジを共有するイベントです。

タクシーアプリ『GO』では、ログ解析やデータ分析を通じてサービスの改善や品質向上を図っています。しかし、マイクロサービス構成や多様なログフォーマットが、分析のハードルを高めていました。

29回目となる今回は、Streamlitを用いたログ解析環境の構築や、その運用・改善について、得られた知見を具体的な事例を交えつつ紹介しました。

登壇者紹介

今回はこちらのメンバーが登壇しました。

  • データアナリスト:老木 智章
  • データエンジニア:伊田 正寿
  • ソフトウェアエンジニア:按田 勝彦
  • 広報:高堂 和芽

Streamlit で結合テスト工数の削減に成功した話

タクシーアプリ『GO』は、マイクロサービスが連携してタクシー配車を実現しています。 そのため、テスト失敗時には原因の特定が難しく、担当エンジニアでも調査が大変な状況でした。しかし、テストはエンジニアだけでなく品質管理チームが実施するケースもあり、エラー発生時の調査をエンジニアに頼らざるを得ないケースが増加していました。

このパートでは、各マイクロサービスごとにログ閲覧ツールを作成することでエラー調査の対応コストを減少させた取り組みと、そのログ閲覧ツールの製作にStreamlitを採用した背景を紹介しました。

どのようなことを意識してツールを製作したかだけでなく、ツールを使ってもらうための普及活動として工夫したことや、自分以外にもツールを作る人を増やす取り組みも紹介しているので、詳しくはぜひ動画もご覧ください。

Q&A

Q. BigQuery以外のデータベースのログはStreamlitで可視化していないのでしょうか?

BigQuery以外にあるログも可視化しています。ただBigQueryの機能を使ってデータに接続しているので、BigQuery経由で可視化を行なっている状況です。

Q. 普及活動(勉強会・プレゼン)は定期的に開催しているのでしょうか?

現状は不定期です。始めた頃に一気に実施したのですが、そろそろ知らないという人も増えてきた印象なのでまた実施したいと思います。

Q. Streamlitはログ分析以外にも使っていますか?

ダッシュボードやデータ分析の結果を周囲に共有する目的で使うことのほうがメインで、今回のTechTalkを通じて紹介したログ分析に使うほうがむしろレアな用途です。

Q. Streamlitを使っていて辛いことや予想外だったなどがあれば教えてください

当初、マルチページという仕組みを使って多くのツールを作成していましたが、ツールの階層化や分類ができず、メニューにすべてがフラットに並んでしまうため、ユーザビリティ上の課題がありました。しかし、最近のアップデートで階層化が可能になり、その課題は解決しました。他にも課題が発生することはありますが、それらもアップデートで解決されることが多いです。

Streamlit ホスティング基盤をどのように作ったか

ひとつ前のパートでStreamlitを用いてログ閲覧ツールを製作した事例を紹介しましたが、こちらのパートではツールのホスティング環境について紹介しました。

ホスティング環境の要件は大きく2つありました。

  • クラウド上で開発が完結する
    • 本番データをローカルにダウンロードするのを禁止しているので、クラウド上で開発を完結させる必要がある
  • 開発者専用(ツールを作るアナリスト)の Streamlit をホスティングする
    • 好きなライブラリを自由に導入できたり、開発中に他のホストに影響を与えないよう利便性向上を図る

これらの要件をクリアしつつ、生産性を高めるためにGitHub Copilotによる支援を受けられるようにするなど、改善の経緯なども詳しく紹介しているので、ぜひスライドや動画もご覧ください。

Q&A

Q. ファイルの変更から新しいツールのデプロイまでにどの程度のラグが発生するのでしょうか?

プレビュー環境であれば数秒、社内公開環境であれば数分程度で反映されます。

Streamlit ホスティング基盤をスケールさせる

ここまでStreamlitを用いたログ解析ツールと、それをホスティングする基盤について紹介してきました。基盤も段階的にアーキテクチャを改善していくことで、今では全社員の2割ほどが利用するに至っています。

ただ利用者が拡大していく中で以下の課題が顕在化しました。

  • 開発者ごとの環境を払い出す際に人手が介在しており、手順が煩雑だった
  • 監査上の理由で、誰がどの環境にいつアクセスしたかを確実にログとして残す必要があった
    • 開発者にロギングの実装を強制するのは困難であるため、基盤側での対応が必要だった

このパートでは、これらの課題を解決したプロセスを紹介しました。

CI/CDパイプラインの共通化や、Kubernetesマニフェストのテンプレート化、Argo CDを導入してのGitOpsなどを実現することで、環境払出しにおける課題を解決。また、メタプログラミングを用いて、CI時にアプリケーションコードを動的に書き換えることで、アクセスログを確実にロギングする仕組みを構築した事例など、そういった手段を選んだ背景なども紹介しているので、スライドや動画もぜひご覧ください。

Q&A

Q. マルチテナントにして、複数のアプリが同じノードで動作することがあるのでしょうか?また、パフォーマンス問題は生じましたでしょうか?

社内ツールということもあり、コスト上の理由でデータプレーンは一つのインスタンスを共用しています。そのためノイジーネイバー問題は発生し得ます。もし恒常的に問題が発生する場合には対象アプリケーションに対して占有インスタンスを割り当てるなどの対策を考えています。

Q. 全体を通じてGCPを採用した理由を教えてください

弊社のデータ基盤がBigQueryを軸に展開していることから、同じGCP上にインフラを構築した方が、さまざまな点で都合が良かったというのが理由です。

アーカイブ動画

開催履歴・開催予定

GO TechTalk は不定期開催しています。過去の開催レポートは こちら にもありますので、ぜひご覧ください!

GO株式会社の最新技術情報は公式アカウント @goinc_techtalkで随時発信していきますので、ぜひフォローして続報をお待ちください!