Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
2025-04-14 Data & Analytics 井戸端会議 Multi tenant ...
Search
kamijin_fanta
April 25, 2025
Technology
780
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
2025-04-14 Data & Analytics 井戸端会議 Multi tenant log platform with Iceberg
kamijin_fanta
April 25, 2025
More Decks by kamijin_fanta
See All by kamijin_fanta
2026-06-11 Iceberg Trinoログ基盤の 設計ポイント - Design Points for an Iceberg + Trino Log Platform
kamijin_fanta
0
8
2025-09-22 Iceberg, Trinoでのログ基盤構築と パフォーマンス最適化
kamijin_fanta
1
860
IoT向けストレージにTiKVを採用したときの話 / 2024-10-25 TiUG Meetup 3 Using TiKV as IoT storage
kamijin_fanta
0
180
TrinoとIcebergで ログ基盤の構築 / 2023-10-05 Trino Presto Meetup
kamijin_fanta
1
2.6k
Unicodeと符号化形式
kamijin_fanta
0
1.2k
Reactとフォームとスキーマバリデーション / React forms with Schema Validation
kamijin_fanta
0
2.7k
2020/05/25 さくらのクラウド向けツールを使いこなす
kamijin_fanta
3
380
2019-01-24 業務でのOSSとの関わり方
kamijin_fanta
7
5k
関数型言語で始めるネットワークプログラミング
kamijin_fanta
0
1.2k
Other Decks in Technology
See All in Technology
AI エージェント時代のデジタルアイデンティティ
fujie
3
1.4k
認知負荷をGemini で溶かす — GKE 基盤「Orbit」における AI エージェントの実践
sansantech
PRO
1
250
AIは実装を速くする。では、私たちは何を今作るべきか?-立場を越えてリリースに向き合ったチーム開発の実践 / 20260801 Hiromi Nakaya and Naoki Takahashi
shift_evolve
PRO
3
370
AIがコードを書く時代、人間は何を保証するのか———馬場さんと考える、開発者に求められる新しい責任と価値 - TECH PLAY
netmarkjp
0
1.3k
AI時代の強いチームの作り方
yuukiyo
23
15k
メルカリのグローバルアプリで挑んだ AlloyDB 運用と課題解決の実践記
hatappi
0
230
オートロックマンションなのに、各部屋は施錠なし!? 攻撃者が組織内ネットワークで大暴れする理由 / The Front Door Is Locked, but the Rooms Are Wide Open: Why Attackers Move Freely Inside Enterprise Networks
nttcom
0
1.5k
【5分でわかる】セーフィー エンジニア向け会社紹介
safie_recruit
0
53k
侵入は突然に 〜 IoTマルウェアと悪用される家庭の機器 ~ / When Intrusion Strikes: IoT Malware and the Abuse of Home Devices
nttcom
0
1.5k
ウォーターフォール開発案件のPMとしてAI活用を模索している話
hatahata021
3
310
トヨタ⽣産⽅式(TPS)⼊⾨
recruitengineers
PRO
1
400
【CEDEC2026】ゲームシナリオライターを支援するAIツール開発の実践 ― 設計とプロンプトの工夫 ―
cygames
PRO
1
710
Featured
See All Featured
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
Chasing Engaging Ingredients in Design
codingconduct
0
260
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.5k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
240
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
460
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
570
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
440
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.3k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
690
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.9k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
630
Transcript
Icebergを使った マルチテナント型のログ基盤 2025-04-14 Tadahisa Kamijo Data & Analytics 井戸端会議
自己紹介 上條 忠久 Kamijo Tadahisa • さくらインターネット株式会社 クラウド事業本部 テクノロジー室 •
ソフトウェアエンジニアとしてサービス開発・運用 ◦ Go, TypeScript, Python, Kotlin ◦ Linux, Nomad, Ansible, Prometheus, React • 今日は大阪から参加
ログ基盤概要 • 現在社内各チームで監視基盤が個別に構築運用されている ◦ Prometheus, Elastic Stack, Loki, etc… ◦
社内向けログ基盤を提供することで、運用レベルの底上げ・運用コスト削減を目的 ◦ OSS運用なども行ったが、マルチテナント提供・ライセンス体系の問題 ◦ Trino+Icebergの構成で開発を開始 • 2023年からパブリックサービス化を目指して開発開始 ◦ アプリケーション・OS・ミドルウェアから出力される、システムログの保管場所として開発 ◦ Trino, Iceberg, 社内のオブジェクトストレージ等を組み合わせてスクラッチ開発 ◦ デジタル庁のガバメントクラウドの要件に含まれ、 2025年度末までの完成を目指す
ログ基盤概要 OTLP/HTTPでのログ書き込みをサポート • OpenTelemetry Logging Protocol • HTTPでProtocolBufferバイト列をgzipで圧 縮してPOST •
fluent-bit, OtelCollector等が対応 独自WebUI • 時間選択 • 該当件数が表示されるフィルタ機能
Apache Iceberg overview • ストレージフォーマット ◦ ビッグデータ・データレイク構築 ◦ 仕様とデータを読み書きする低レイヤーライブラリ (Java,Python)の提供
◦ クエリエンジンTrino, Presto, Spark, Hive, Flink, Impala, 他から同じデータを参照 • Netflix→Apache Software Foundation • 機能 ◦ 高い信頼性: Seriallizable isolation, Snapshot, Atomic mutation ◦ 費用対効果の高いストレージ : Object Storage, Parquet ◦ パフォーマンス最適化 : Partitioning, Clustering, CoW/MoR切り替え ◦ スキーマ変更: Schema Evolution, Table, Partitioning
ログ基盤でのIceberg • テナント毎にテーブルを分ける ◦ データ削除の容易さ ◦ 性能分離・メンテナンスの容易さ ◦ 暗号化の要求 •
時間でパーティション・ソート ◦ 検索対象のファイルを減らす ◦ パーティション毎に課金メトリクスを取りたい CREATE TABLE log_tenant_1234 ( timestamp TIMESTAMP(6), insert_id VARCHAR, labels MAP(VARCHAR, VARCHAR ), level VARCHAR, -- DEBUG, INFO, WARN, ERROR message VARCHAR ) WITH ( partitioning = ARRAY[ 'day(timestamp)' ], sorted_by = ARRAY[ 'timestamp' ] ); (実際は大量のフィールドが定義されています )
ログ基盤の構成 (2023年時点 旧構成) Write Client Ingester (Kotlin) Shipper (Kotlin) Object
Storage REST Catalog (MySQL) Query Gateway (Go) Maintainer (Go) gRPC Publish Consume Write Iceberg Table Catalog Operations Issue Maintenance Command HTTP API Read Client HTTP API 性能改善を目的にKafka導入 • Icebergはコミットが衝突すると処理時間が伸びる • ファイルサイズをある程度制御したい
運用して分かってきた課題感 • 並列度を上げるのが難しい ◦ Iceberg Commitは数秒かかることも有る・可能な限り競合させたくない (単一Partitionへ) ◦ Parquetの書き込みはメモリをテーブルあたり数百 MB使うことも
◦ ログによって容量の差が激しい (数KB~数百MB) Upload Commit Upload Commit Upload Commit Upload Commit Upload Commit Upload Commit Upload Commit 時間軸 Upload Commit Upload Commit Upload Commit Upload Commit Upload Commit Upload Commit Upload Commit Upload Commit Upload Commit
Iceberg TableへのAppend処理を分解する Append処理を2つのプロセスに分割して解決 • Loader ◦ KafkaからConsume ◦ オブジェクトストレージに Parquetファイルを作成・書き込み
◦ DataFile(パス・統計情報などを含む )をKafkaにPublish • Committer ◦ KafkaからConsume ◦ Iceberg TableへData FileをCommit ▪ 必要に応じて一定時間待機し、テーブル毎に複数個のファイルを含める Loaderは競合制御無しで並行実行可能 Committerはテーブル毎に競合しないようにコミット
ログ基盤の構成 (2025年時点) Write Client Ingester (Go) Committer (Kotlin) Object Storage
REST Catalog (MySQL) Query Gateway (Go) Maintainer (Go) OTLP/H TTP Publish Consume Write Iceberg Table Catalog Operations Issue Maintenance Command HTTP API Read Client HTTP API Loader (Kotlin) Publish Consume Parquet File Data File log rows
Append処理の分割 • メリット ◦ スループット・スケーラビリティの向上 ▪ 競合ポイントを分離 ◦ コミット頻度の調整が容易に ▪
頻度を減らしたい時はコミット時に待ってバッチサイズを大きくすれば良い • デメリット ◦ コードが複雑化 ◦ Committerが止まるとデータロストの危険性 ▪ 復旧手順も非常に煩雑
Icebergテーブルのメンテナンス • Manifestから参照が切れた不要なデータが発生する ◦ データが削除された場合 ◦ コンパクションで複数ファイルを結合したファイルを作成した場合 ◦ 書き込み中にクライアントが異常終了した場合 •
不要なデータを定期的にremove_orphan_filesコマンドで削除 ◦ そこそこ負荷が高いので 1日1回くらいの頻度が多い? • remove_orphan_filesは時間指定が可能 ◦ 短い時間を指定しすぎると長い Queryが失敗する ◦ 長い時間を指定するとストレージコストが増大する
Committer停止時のデータロスト Loader Committer MQ ObjectStorage Trino Maintainer Catalog ②Parquet配置 ③ファイルパスPublish
④問題が発生して停止 ⑤古いファイルを削除 ⑥Subscribe再開 ⑦削除されたファイルを含む ManifestをCommit ①ログ投入 ⑧クエリ ⑨ファイルが無い
対策 • remove_orphan_filesのretention_thresholdを5日に設定 ◦ 書き込んで5日以上経ったファイルを削除する設定 ◦ 休日含んでも5日あったら復旧できるはず ◦ ストレージのコストは増えている •
テーブルを修復するコマンドを開発 ◦ 対象のファイルが存在しない Iceberg Tableは読み書きできなくなる ◦ Manifestからファイルのエントリを削除する等のオペレーションをコマンド化 ◦ PyIcebergライブラリを利用
まとめ • マルチテナント環境でのログ基盤の開発を行っている • テナントごとにテーブル分離する設計 • 複数テーブルへの性能向上のために、書き込みを分離 • 問題が発生した場合の対処法を準備している