Sentry モニタリング - Snuba データ ミドル プラットフォーム アーキテクチャ (Kafka+Clickhouse) の紹介

Sentry モニタリング - Snuba データ ミドル プラットフォーム アーキテクチャ (Kafka+Clickhouse) の紹介

[[427651]]

この記事はWeChatの公開アカウント「Hacker Afternoon Tea」から転載したもので、著者はShaoです。この記事を転載する場合は、Hacker Afternoon Tea公式アカウントまでご連絡ください。

Snuba は、Clickhouse 上に豊富なデータ モデルと、高速な取り込みコンシューマー (Kafka から直接データを取得) およびクエリ オプティマイザーを提供するサービスです。

Snuba はもともと、Postgres と Redis の組み合わせを置き換えて、Sentry エラーに関する集計データを検索および提供するために開発されました。それ以来、現在の形に進化し、複数のデータセットで時系列関連の Sentry 機能のほとんどをサポートするようになりました。

関数

  • ClickHouse 分散データ ストレージ用のデータベース アクセス レイヤーを提供します。
  • SQL のような機能を提供する SnQL 言語を通じてクライアントがクエリを実行できるグラフィカルな論理データ モデルを提供します。
  • 1 回のインストールで複数の個別のデータセットをサポートします。
  • ルールベースのクエリ オプティマイザーを提供します。
  • 単一ノードおよび分散環境で ClickHouse に DDL 変更を適用するための移行システムを提供します。
  • Kafkaから直接データを取り込む
  • ポイントインタイムクエリとストリーミングクエリをサポートします。

Sentry の使用例:

  • イベント データセットは、問題ページなどの機能のサポートを提供します。ここでの検索機能とすべての集約機能は Snuba によって提供されています。
  • 検出データセットは、パフォーマンス監視に関連するすべての機能をサポートします。
  • セッション データセットは、リリース機能のサポートを提供します。具体的には、データセットは大量のデータ ポイントを取り込み、事前に集計されたデータを保存して、大量のデータの高速クエリを可能にします。
  • 結果データセットは統計ページを強化します。

Snubaを使い始める

これは、Sentry 開発環境で Snuba をすばやく起動するためのガイドです。

必要条件

Snuba は次のことを前提としています。

  1. CLICKHOUSE_HOST (デフォルトのローカルホスト) にある Clickhouse サーバー エンドポイント。
  2. REDIS_HOST (デフォルトは localhost) で実行されている redis インスタンス。ポート6379。

これらのサービスを実行する簡単な方法は、sentry をセットアップして、以下を使用することです。

  1. セントリー開発サービスアップ--exclude=snuba  

Snuba ではすべてが UTC 時間で実行されていると想定していることに注意してください。そうしないと、タイムゾーンの不一致の問題が発生する可能性があります。

セントリー + スヌーバ

~/.sentry/sentry.conf.py に次の行を追加/変更します。

  1. SENTRY_SEARCH = 'sentry.search.snuba.EventsDatasetSnubaSearchBackend'  
  2. SENTRY_TSDB = 'sentry.tsdb.redissnuba.RedisSnubaTSDB'  
  3. SENTRY_EVENTSTREAM = 'sentry.eventstream.snuba.SnubaEventStream'  

走る:

  1. セントリー開発サービスアップ

オリジナルの Clickhouse クライアント (psql に類似) にアクセスします。

  1. docker exec -it sentry_clickhouse クリックハウスクライアント

データはsentry_localテーブルに書き込まれます: select count() from sentry_local;

設定

設定はsettings.pyで確認できます。

  • クラスター: クラスターのリストと、各クラスターで実行する必要があるホスト名、ポート、およびストレージ セットを指定します。各クラスターには、ローカル設定と分散設定もあります。
  • REDIS_HOST: ここで redis が実行されています。

Snuba アーキテクチャの概要

Snuba は、Clickhouse を利用した時系列データ ストレージ サービスです。これは、Snuba が提供するクエリの種類に適した列指向の分散データベースです。

  • https://clickhouse.tech/

データは Clickhouse テーブルとマテリアライズド ビューに完全に保存され、入力ストリーム (現在は Kafka トピックのみ) を介して取り込まれ、ポイントインタイム クエリまたはストリーミング クエリ (サブスクリプション) を介してクエリできます。

ストレージ

Clickhouse がバッキング ストアとして選択されたのは、Snuba に必要なリアルタイム パフォーマンス、分散および複製された性質、ストレージ エンジンに関する柔軟性、および一貫性の保証の間で適切なバランスが取れているためです。

Snuba データは Clickhouse テーブルと Clickhouse マテリアライズド ビューに保存されます。テーブルのターゲットに応じて複数の ClickHouse ストレージ エンジンを使用します。

  • https://clickhouse.tech/docs/en/engines/table-engines/

Snuba データは、データ モデルの独立したパーティションを表す複数のデータセットに編成されます。詳細については、Snuba データ モデルのセクションを参照してください。

摂取

Snuba は、行を挿入するための API エンドポイントを提供しません (デバッグ モードで実行している場合を除く)。データは複数の入力ストリームからロードされ、一連のコンシューマーによって処理され、Clickhouse テーブルに書き込まれます。

コンシューマーは 1 つ以上のトピックからデータを消費し、1 つ以上のテーブルに書き込みます。これまでのところ、複数のコンシューマーがテーブルに書き込んでいることはありません。これにより、以下で説明する一貫性の保証の一部が可能になります。

データの取り込みはバッチ処理で最も効果的に機能します (Kafka の場合、特に Clickhouse の場合)。私たちのコンシューマーはバッチ処理をサポートしており、Kafka から取得されたイベントのバッチが ClickHouse に少なくとも 1 回は配信されることを保証します。 Clickhouse テーブル エンジンを適切に選択して行の重複を排除することで、最終的な一貫性を受け入れる場合に、正確に 1 回のセマンティクスを実現できます。

クエリ

最も単純なクエリ システムは時間ポイントです。クエリは SnQL 言語 (SnQL クエリ言語) で表現され、HTTP ポスト呼び出しとして送信されます。クエリ エンジンはクエリ (Snuba クエリ処理で説明されているプロセス) を処理し、それを ClickHouse クエリに変換します。

ストリーミング クエリ (サブスクリプション エンジンを介して実行) を使用すると、クライアントはクエリ結果をプッシュ方式で受信できます。この場合、HTTP エンドポイントにより、クライアントはストリーム クエリを登録できます。次に、コンシューマーはトピックにサブスクライブされ、更新のために関連する Clickhouse テーブルにデータを入力し、クエリ エンジンを通じて定期的にクエリを実行し、サブスクライブされた Kafka トピックで結果を生成します。

データの一貫性

Snuba では、さまざまな保証を提供するために、さまざまな一貫性モデルが共存しています。

デフォルトでは、Snuba は最終的に一貫性を持ちます。クエリを実行する場合、デフォルトでは単調な読み取りは保証されません。これは、ClickHouse がマルチリーダーであり、クエリが任意のレプリカにヒットする可能性があり、レプリカが最新であるという保証がないためです。さらに、デフォルトでは、ClickHouse が単独で一貫した状態に到達するという保証はありません。

クエリを実行する前に ClickHouse に一貫性を強制的に達成させ (FINAL キーワード)、コンシューマーが書き込む特定のレプリカにクエリがヒットするように強制することで、特定のクエリで強力な一貫性を実現できます。これは基本的に、ClickHouse を単一のリーダー システムのように使用し、連続的な一貫性を実現します。

スヌーバのセントリー配備

このセクションでは、主なデータ フローを示しながら、Sentry 展開で Snuba が果たす役割について説明します。 Snuba を単独で展開した場合、これは役に立ちません。

エラーとトランザクションのデータフロー

図の上部にあるメインセクションは、イベントおよびトランザクション エンティティの取り込みプロセスを示しています。これら 2 つのエンティティは、Sentry およびパフォーマンス製品全体の問題/エラー関連の機能の大部分を提供します。

このパイプラインの情報を提供する、エラーとトランザクション間で共有される Kafka トピック (イベント) は 1 つだけです。このトピックには、エラー メッセージとトランザクション メッセージが含まれています。

エラー コンシューマーは、イベント トピックを使用して、ClickHouse エラー テーブルにメッセージを書き込みます。コミット後、snuba-commit-log トピックにもレコードが生成されます。

エラー アラートは、エラー サブスクリプション コンシューマーによって生成されます。これは、メイン イベント トピックと snuba-commit-log トピックの両方を消費する同期コンシューマーであるため、メイン コンシューマーと同期して続行できます。

同期されたコンシューマーは、Clickhouse にクエリを実行し、結果トピックで結果を生成することでアラートを生成します。

トランザクションは同じですが独立したパイプラインに存在します。

エラー パイプラインには、置換トピックへの書き込みという追加のステップがあります。 Sentry は、イベント トピックでエラー ミューテーション (マージ/アンマージ/再処理など) を生成します。次に、エラー コンシューマーはそれらを置換トピックに転送し、置換コンシューマーによって実行されます。

プロジェクト内のイベントを順番に処理できるようにするには、イベント トピックを Sentry プロジェクト ID によって意味的に分割する必要があります。これまでのところ、これはアラートと交換の要件です。

セッションと成果

セッションと成果は非常によく似ており、よりシンプルな方法で動作します。特に、セッションはリリースの健全性機能を強化し、成果は主に Sentry 統計ページにデータを提供します。

どちらのパイプラインにも独自の Kafka トピック、Kafka コンシューマーがあり、Clickhouse の独自のテーブルに書き込みます。

変更データキャプチャパイプライン

パイプラインはまだ建設中です。 cdc トピックを使用し、Clickhouse に 2 つの別々のテーブルを作成します。

<<:  クラウド ネイティブはどこにでもあります。デジタル変革で道に迷うことを避けるにはどうすればよいでしょうか?

>>:  ついに誰かがDevOpsをわかりやすく説明してくれた

推薦する

開設から2年近く経ったサイトの詳細な分析

昨日、浙江省のウェブマスターグループに参加する栄誉に恵まれました。そこで、あるウェブマスターが、自分...

webhostingbuzz - ブラックフライデーで全品85%オフ

webhostingbuzz は、ブラック フライデー ホスティング製品プロモーションを事前に発表し...

Nutanixのレポートによると、ハイブリッドクラウドはパンデミック中のビジネスニーズを満たす上で強みを発揮している

Nutanix は本日、企業のプライベート、ハイブリッド、パブリック クラウド導入の進捗状況を評価す...

フォーチュン500企業のSEOプロジェクト運営における混乱

今朝、私のパートナーから、フォーチュン 500 企業が SEO に興味を持っていると聞きました。両者...

テンセントがWeChat開発者を絶望的な状況に追い込んだとき、どうやって抜け出すのでしょうか?

鉄歌のこれまでの記事は、完全に彼自身の観察に基づいている。程小勇同志は足の指で誰が書いたかを推測でき...

ion: シンガポールCN2クラウドサーバー期間限定特別プロモーション、2倍の帯域幅(最大50Mbps)、単一トラフィック、Alipay

クリプトデータセンターのクラウドサーバーブランド「ion」は現在、シンガポールデータセンターのシンガ...

身の回りの小さなことからキーワードの推進と応用について語る

近年、中国のみならず世界中でインターネットが急速に発展していることは周知の事実です。大手企業がインタ...

WeChatがMomentsを再編しています。Momentsでどのようにマーケティングを実施すればよいでしょうか?

今回ついにWeChatが行動を起こしました!そして今回はその激しさがさらに増しています!これまでWe...

2023 年のクラウド コンピューティング インフラストラクチャのトレンド

オンプレミス インフラストラクチャがパブリック クラウドに取って代わられて消滅するという報告は、大き...

私たちはウェブサイトの自然な最適化ランキングを提唱しています

インターネット企業を経営している方なら、Baidu、Google、Yahoo などの検索エンジンでウ...

中国電信天一クラウドとDAMOが戦略的に協力し、安全なクラウドエコシステムを構築

4月26日、湖北省工業製品生産・販売マッチング会議において、中国電信株式会社クラウドコンピューティン...

オンラインで列車のチケットを購入するウェブサイトは数多くあり、区別が難しい。ネットユーザーは独自のチケット購入ガイドを作成している

オンラインで列車のチケットを購入するウェブサイトは数多くあり、区別が難しい。ネットユーザーは独自のチ...