Slide 1

Slide 1 text

複数データソースにまたがった分析環境の 改善計画 黒崎優太 / @kuro_m88

Slide 2

Slide 2 text

黒崎 優太 ● バックエンド系のエンジニア ○ インフラの改善 ○ データ基盤の改善 ● 8月から副業でお手伝いしはじめました @kuro_m88

Slide 3

Slide 3 text

はなすこと ● 株式会社estieについて ● スタートアップのデータ基盤 ● スタートアップのつらみ ● 改善への道のり

Slide 4

Slide 4 text

株式会社estieについて

Slide 5

Slide 5 text

5 estie(エスティ)は オフィス不動産を デジタル化する会社です

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

スタートアップのデータ基盤

Slide 8

Slide 8 text

データ基盤、ほしいですか? ● 󰢧 ほしいに決まってる! ● 󰢨 かっこいいデータ基盤がほしい! ○ ETLってやつがやりたい! ● 󰢧「データの民主化」がやりたい! ○ みんなが平等にデータにアクセスできる世界!

Slide 9

Slide 9 text

データ基盤、ほしいですか? ● 🤔 データ、ありますか? ○ ないものは集めようがない ● 🤯 意味のあるログですか? ○ なんとなく出力したログ、役に立たないことが多い ● 🥺 基盤づくりから始めるのは危険かも? ○ 分析したいユースケースや追いたいKPIの設計からはじめよう

Slide 10

Slide 10 text

身も蓋もない話 ● まずはGoogle Analytics入れましょう ○ webやネイティブアプリの場合 ● カスタムイベントの計測も充実しています ○ アクション, カテゴリ, ラベル, 値などを組み合わせてイベントの記録が可能 ● 生ログも分析可能 ○ GA4からBigQueryで分析できちゃいます! ● 無料ではじめられます💸

Slide 11

Slide 11 text

スタートアップ(立ち上げ初期)のデータ基盤 ● クライアントサイドで取れないがものある ○ サーバサイドでしか取れないもの、秘匿性の高いものなど ● ログ自体の信頼性を担保したい ○ アクセス解析用途ではなく証跡用途など ● 正確なレポーティングを事業として提供する ○ 高度な分析を事業価値としていきたい ● このあたりの需要が出てきたらデータ基盤の設計に乗り出しましょう ● 最初から焦らなくても大丈夫です!要件を整理するのが先!

Slide 12

Slide 12 text

余談: 法的側面 ● 󰢨アクセスログって保存しないといけないって聞きました! ○ 必ずしも義務付けられているわけではないかも…? ● 企業における情報システムのログ管理に関する実態調査 - IPA より ○ https://www.ipa.go.jp/files/000052999.pdf ● ログの開示を求められる確率は事業規模が大きくなるにつれて大きくなる 可能性があるので、どこかのタイミングで考慮する必要はあるかも

Slide 13

Slide 13 text

スタートアップのつらみ

Slide 14

Slide 14 text

スタートアップのつらみ ● 採用が軌道にのるとエンジニアが増えてくる(嬉しい) ● 開発スピードもどんどん上がっていく(嬉しい) ● ひとまず作ったものがいつのまにかみんな使っている(嬉しい) ○ ログも散らかり始める(あれ…) ○ あとからしくみを変えづらい(うっ…) ● 分析をミッションに入社したもののなんもわからん(つらい…) ● 正直そんなにお金がかけられない(だいたいそう…)

Slide 15

Slide 15 text

ほしいデータ基盤像 ● スモールスタートしたい ○ コストのことを考えても必須 ● シンプルな構成 ○ あとから入った人でもすぐわかるように ● そこそこのパフォーマンス ○ 爆速である必要もない、安定してくれる方が嬉しい ● メンテしたくない ○ そこに人的リソースを割きたくない

Slide 16

Slide 16 text

● 環境 ○ 創業期に導入したself hosting redash(EC2) ○ RDS, Athenaをdatasourceとして利用 estieの現状 RDS Athena S3 Redash (EC2)

Slide 17

Slide 17 text

estieの現状 ● 主な分析対象 ○ RDS内のestieが提供するオフィス不動産データ (ビル/募集/入居テナント等) ○ RDS内のユーザがDB内に作成したデータ (ウォッチする物件のリスト等) ○ S3に出力されたサーバのアクセスログ ● 体制 ○ ビジネス/エンジニア問わず全員がSQLを書く ○ データアナリストが依頼されて分析するような分業はしてない ○ 不動産デベロッパー出身者も週1回の勉強会でクエリを書けるように

Slide 18

Slide 18 text

つらいポイント1: 複数データソース ● RDSにあるユーザの属性とS3のログデータを組み合わせて利用状況分析 ○ RDSとS3のJOINをしたい… ● 現状のJOIN方法 ○ RDSからselectした結果とS3からselectした結果をredashに保存 ○ redashのquery results機能を使ってJOIN(内部実装はsqlite🔥) SELECT month, org_id, function, sum(action_count) FROM query_1533 as function_analysis LEFT JOIN query_1489 as active_users ON active_users.user_id=function_analysis.user_id AND active_users.org_id={{ org_id }} GROUP BY month, org_id, function_analysis.function ORDER BY month

Slide 19

Slide 19 text

つらいポイント1: 複数データソース ● RDSにあるユーザの属性とS3のログデータを組み合わせて利用状況分析 ○ RDSとS3のJOINをしたい… ● 現状のJOIN方法 ○ RDSからselectした結果とS3からselectした結果をredashに保存 ○ redashのquery results機能を使ってJOIN(内部実装はSQLite🔥) SELECT month, org_id, function, sum(action_count) FROM query_1533 as function_analysis LEFT JOIN query_1489 as active_users ON active_users.user_id=function_analysis.user_id AND active_users.org_id={{ org_id }} GROUP BY month, org_id, function_analysis.function ORDER BY month 🤔 🤔

Slide 20

Slide 20 text

つらいポイント2: 重くなる分析クエリ ● query resultsはquery parameterが利用できない ○ 参照する日付やuser_idを絞れず、スキャン量が増加 ● ダッシュボードを表示するのに1分程度かかったり🔥 ○ ログの量が増えるともっと🔥

Slide 21

Slide 21 text

つらいポイント3: クエリの見通しが悪い ● query resultsわかりづらい ○ 定義がわからない ● 似たようなクエリが何度も書かれてる ○ ログがJSONでスキーマがないのでparse処理が散在 ● SQL初心者はつらい ○ JSONのparseから入門🔥

Slide 22

Slide 22 text

改善への道のり

Slide 23

Slide 23 text

改善への道のり ● 極力シンプルに、癖のない構成をまず作りたい ● 改善案として提案中のアイデアを紹介します

Slide 24

Slide 24 text

全体像 ● 使う技術は変わらない ○ データソースとアクセス方法を改良する RDS Athena S3 Redash (EC2) S3 Athena

Slide 25

Slide 25 text

データソース ● S3にある生ログは使いづらい ○ 分析用途で直接クエリしないようにしたい ● 分析用のデータのスキーマを定義する ○ 毎度JSONのパースをしなくていいようにする ○ ログの構造変更が即座に分析用データに現れないようにする

Slide 26

Slide 26 text

フォーマット変換 ● AWS Glueを使いたいところだが、そこまでお金を掛けずに変換可能 ● Athenaでselect insertができます…! ○ S3からselectしてS3にinsert可能 ○ insert時にテーブルの定義をParquet形式にしておけば フォーマット変換が可能 ● 参考 ○ Amazon Athena がついにINSERT INTOをサポートしたので実際に試してみ ました! ■ https://dev.classmethod.jp/articles/20190920-amazon-athena-insert-i nto-support/

Slide 27

Slide 27 text

Parquetとは ● 列指向データフォーマット ○ https://parquet.apache.org/documentation/latest/ ● 必要なカラムのみスキャンができる ● ある程度のデータの塊ごとに統計情報が ○ さらにスキャン範囲を絞れる

Slide 28

Slide 28 text

複数データソースのJOIN ● AthenaにはFederated Queryという機能が! ○ ドキュメントは日本語訳がちょっと変なので英語版を読みましょう ■ https://docs.aws.amazon.com/athena/latest/ug/connect-to-a-data-so urce.html ○ AthenaがAuroraなどの外部データソースとのJOINをしてくれる

Slide 29

Slide 29 text

Redashはどうなるのか ● SQLiteを使ったJOINは発生しなくなるため、動作は圧倒的に軽くなる予定 ● スキーマのあるデータをクエリできるようになる ● Parquet化によるスキャン量減少も見込める ● これで分析がはかどるはず…!

Slide 30

Slide 30 text

再掲 ● 使う技術は変わらない ○ データソースとアクセス方法を改良する RDS Athena S3 Redash (EC2) S3 Athena

Slide 31

Slide 31 text

さいごに ● 移行までしきって改善の幅をドヤりたかったのですが、 間に合いませんでした󰢛 ● まずはベースになるデータ基盤をリニューアルするつもりなので、 今後ともご期待ください

Slide 32

Slide 32 text

No content