1
/
5

【TECH BLOG】OSS「Coppe」の公開 〜 BigQuery基盤のデータ監視ツールによるデータ品質担保

はじめに

こんにちは、データシステム部データ基盤ブロックの纐纈です。9月から22卒内定者として、チームにジョインしました。

本記事では、弊社のデータ基盤チームが抱えていた課題と、その解決のために公開したOSSツール「Coppe」を紹介します。Coppeは、以下のような方にお勧めできるツールです。

  • BigQueryを使用したデータ基盤の監視に興味がある
  • BigQueryの監視ツールとしてRedashを採用しているが、運用が面倒に感じている
  • インフラの設定なしにBigQueryの監視を行えるツールが欲しい

なお、本OSSはMonotaRO Tech Blogの記事「SQLを使った監視でデータ基盤の品質を向上させる」で紹介されていた仕組みを参考にし、より柔軟に監視項目を設定できるように新規開発しています。

OSSとして公開しているため、本記事と併せてご覧ください。

開発の経緯

現在、ZOZOはデータ基盤としてBigQueryを採用しています。そこには、オンプレやAWS、アプリケーションのログなど、あらゆるデータを集めており、タイミングも日次収集のものや、リアルタイム収集のものが存在します。その収集時に、遅延やオペレーションミス、意図しないデータの肥大化により、データ品質が下がってしまうことがあります。

その結果、データ基盤を利用した関連サービスに最新の正しい情報を反映できなくなってしまいます。そうなってしまうと、ZOZOが提供するサービスを利用するユーザーに、直接的な影響を与えてしまう可能性もあります。そのため、データの品質劣化には、いち早く気づき、対応する必要があります。

その対応策として、現在はRedashを使用しています。Redashは、SQLの分析結果をダッシュボードに可視化するOSSのBIツールです。これを利用し、BigQueryに定期的な監視クエリを実行し、その結果が期待値から外れる場合には、Slack通知で検知できるようにしています。一見すると、Redashで事足りているように見えますが、監視ツールとしては物足りない部分もあります。

1点目の課題は、Redash自体をホスティングするためにWebサーバーやデータベース、Redisなどを自前で用意する必要がある点です。これは導入時に手間がかかるだけでなく、用意した環境の1つに障害が起きた際には、データ品質の監視ができなくなるという欠点があります。加えて、障害が発生したサーバーやサービスを立ち上げ直すのに手間と時間を要する点も懸念点です。

また、いつ誰によってどんな目的でその監視項目を追加したのかといったことが不明瞭になったり、他チームからの監視項目の追加の要請をRedashを管理する弊チーム以外ができなかったりという課題点もあります。

そこで、Redashよりも気軽に運用が可能で、監視項目の管理をGitHub上で行える監視ツールを開発することにしました。

Coppeの機能

監視ツールCoppe(以下、Coppe)は、BigQueryへの定期的な監視を実施します。また、非機能要件として、以下の点を目的にしています。

  • 障害発生時に、可能な限り自動再生できるインフラ構成
  • 導入時のセットアップや監視項目の追加を気軽に行える仕様

なお、「Coppe」という名前は蜘蛛から着想を得ています。監視項目を「蜘蛛の巣」と見立て、エラーを検知したらすぐに検知して動き出すイメージで名付けました。「Coppe」は英語で昔使われていた蜘蛛を意味する単語です。私は虫が苦手なため、「Spider」のような蜘蛛を直接連想しやすい名前ではないので、この名前を気に入っています。

Coppeは、監視項目をYAMLとSQLで指定することで、指定されたスケジュールに沿ってBigQueryへの定期的なチェックを実行し、データ品質の監視を行います。監視項目が検知された場合には、Slackにアラートメッセージを通知します。アラートメッセージは、監視項目ごとにクエリの実行結果などを設定可能です。また、監視項目の追加は、YAMLとSQLで記述してGitHubにプッシュすると、GitHub ActionsによってGCPに自動デプロイされます。インフラのセットアップも、GitHub ActionsからTerraformを利用して、必要な環境を自動的にセットアップします。詳しいインフラ構成は後述します。

次に、Coppeの監視項目をサンプルを用いて説明します。

監視項目の追加は、以下のようなフォーマットでYAMLファイルに記述します。

- schedule: "*/5 * * * *"
sql: SELECT COUNT(*) AS error_log_cnt FROM `project.schema.table` WHERE ...
expect:
row_count: 0
description: 直近5分の間にエラーログを検知しました。

上記の例で示したパターン以外にも、様々なオプションを用意しています。基本となる設定項目は以下の4つです。

続きはこちら

株式会社ZOZO(エンジニア・デザイナー部門)'s job postings
1 Likes
1 Likes

Weekly ranking

Show other rankings
If this story triggered your interest, go ahead and visit them to learn more