クラウドネイティブの可観測性プラットフォームである OpenObserve の初体験

クラウドネイティブの可観測性プラットフォームである OpenObserve の初体験

OpenObserve は、Rust で開発されたオープンソースの高性能クラウドネイティブ観測プラットフォーム (ログ、メトリック、トレース) です。 Elasticsearch と比較して、ストレージコストを約 140 倍節約できます。 OpenObserve は PB レベルのデータを処理できます。ログ、メトリック、トレースの観測ツールを探しているなら、OpenObserve を試してみる価値があります。 OpenObserve は現在アルファ段階ですが、実際には広範囲にテストされています。

OpenObserveとElasticsearchの比較

Elasticsearch は、アプリケーション検索やログ検索に使用できる汎用検索エンジンです。 OpenObserve はログ検索専用に構築されています。 Elasticsearch の軽量な代替品を探している場合は、ZincSearch を検討してください。ログ検索エンジンだけが必要な場合は、OpenObserve が非常に良い選択です。

OpenObserve はデータのインデックス作成に依存せず、インデックス作成されていないデータを圧縮形式でローカル ディスクに保存するか、オブジェクト ストレージに parquet 列形式で保存します。その結果、データ取り込み時の計算要件が大幅に低減し、圧縮率が非常に高くなり、ストレージ コストが約 140 分の 1 に削減されます。データがインデックス化されていないと、フルスキャン検索は Elasticsearch よりも遅くなる可能性がありますが、パーティション分割やキャッシュなどのさまざまな他の技術により、それでも高速になるはずです。 Uber は、本番環境のクエリの 80% が集計クエリであること、また OpenObserve の列指向データ ストレージにより、集計クエリが Elasticsearch よりもはるかに高速になることがわかったのです。

以下は、Fluentbit を使用して Kubernetes クラスターから Elasticsearch および OpenObserve に実際のログ データを送信した結果です。これはストレージにのみ関連しています。 EBS ボリュームの料金は 8 セント/GB/月 (GP3)、S3 の料金は 2.3 セント/GB/月です。 Elasticsearch の HA モードでは、通常、マスター ノードが 1 つとレプリカが 2 つあります。 AWS は Amazon S3 リージョン内の少なくとも 3 つのアベイラビリティーゾーン (AZ) にある複数のデバイスにオブジェクトを冗長的に保存するため、データの耐久性/可用性のために S3 を複製する必要はありません。

OpenObserve と Elasticsearch

上記のシナリオでは、OpenObserve は Elasticsearch よりも 140 倍低いストレージ コストという大きな利点があります。これは、ディスク領域が不足しないようにプロビジョニングする必要がある追加の未使用の EBS ボリューム容量や、ディスクがいっぱいにならないようにディスクの使用状況を継続的に監視するために必要な作業を考慮してもいません。

ステートレス ノード アーキテクチャにより、OpenObserve はデータの重複や破損を心配することなく水平方向に拡張できます。通常、OpenObserve クラスターの管理にかかる運用上の労力とコストは、Elasticsearch を使用する場合よりもはるかに低くなります。

OpenObserve に組み込まれたグラフィカル ユーザー インターフェイスにより、Kibana などの他のコンポーネントが不要になり、Rust の利点により、JVM によってもたらされる問題に直面することなく優れたパフォーマンスが得られます。

Elasticsearch と比較すると、Elasticsearch は観察ツールとしても機能する一般的な検索エンジンです。 OpenObserve は、優れた観測性を提供することに重点を置いてゼロから構築された観測ツールです。

建築

OpenObserve は、単一ノードまたは HA モードのクラスターで実行できます。

シングルノードモード

シングルノード モードも、主にデータ保存方法の違いによって、いくつかのアーキテクチャに分かれており、主に次のようになります。

スレッドとローカルディスクモード

単純な使用とテストのみが必要な場合、または高可用性を必要としない場合は、このモードを使用できます。もちろん、1 台のマシンで 1 日あたり 2 TB を超えるデータを処理することもできます。私たちのテストでは、デフォルト構成を使用して、Mac M2 は約 31 MB/秒、つまり 1 分あたり 1.8 GB、1 日あたり 2.6 TB を処理しました。このモードは、OpenObserve を実行するためのデフォルト モードでもあります。

スレッドローカルモード

スレッドとオブジェクト ストレージ パターン

このモードは基本的に OpenObserve のデフォルト モードと同じですが、データがオブジェクト ストレージに保存される点が異なり、データが失われないため、高可用性をより適切にサポートできます。

スレッドオブジェクトストレージモード

Etcd とオブジェクト ストレージ パターン

このモードでは、メタデータを保存するために Etcd が使用され、データは引き続きオブジェクト ストレージに保存されます。

Etcd オブジェクト ストレージ モード

HAモード

HA モードではローカル ディスク ストレージはサポートされません。クラスター モードでは、OpenObserve は複数のノードを実行し、各ノードはステートレスになります。データはオブジェクト ストレージに保存され、メタデータは Etcd に保存されます。これにより、データが失われることがないため、高可用性をより適切にサポートできます。

Etcd オブジェクトストレージ

このモードでは、OpenObserve には主に Router、Querier、Ingester、Compactor の 4 つのコンポーネントが含まれており、これらはすべて水平に拡張できます。 Etcd は、ユーザー、関数、アラーム ルール、クラスター ノード情報などのメタデータを保存するために使用されます。オブジェクト ストレージ (s3、minio、gcs など) には、parquet ファイルとファイル リスト インデックスのすべてのデータが保存されます。

  • ルーター: ルーターは、リクエストをインジェスターまたはクエリーに配布し、ブラウザーを通じて UI インターフェイスも提供します。ルーターは、実際には、データ取り込みプログラムとクエリ プログラムの間で適切な要求と応答を送信するために使用される非常に単純なプロキシです。
  • インジェスター: インジェスターは、取り込みリクエストを受信し、データを parquet 形式に変換してオブジェクト ストレージに保存するために使用されます。データをオブジェクト ストレージに転送する前に、一時的に WAL に保存します。
  • Querier: Querier はデータを照会するために使用されます。クエリノードは完全にステートレスです。
  • Compactor: Compactor は小さなファイルを大きなファイルに結合し、検索をより効率的にします。 Compactor は、データ保持ポリシー、完全なストリームの削除、ファイル リスト インデックスの更新も処理します。

インストール

OpenObserve のインストールは非常に簡単です。バイナリ ファイルをダウンロードするだけで済みます。 Linux、Windows、MacOSをサポートし、Dockerイメージもサポートします。もちろん、ここではKubernetes クラスターにインストールします。簡単にするために、デフォルトの Sled とローカル ディスク モードを直接使用します。

まず名前空間を作成します。

 $ kubectl create ns openobserve

次に、次のようなリソース マニフェスト ファイルを作成します。

 # openobserve.yaml apiVersion: v1 kind: Service metadata: name: openobserve namespace: openobserve spec: clusterIP: None selector: app: openobserve ports: - name: http port: 5080 targetPort: 5080 --- # create statefulset apiVersion: apps/v1 kind: StatefulSet metadata: name: openobserve namespace: openobserve labels: app: openobserve spec: serviceName: openobserve replicas: 1 selector: matchLabels: app: openobserve template: metadata: labels: app: openobserve spec: securityContext: fsGroup: 2000 runAsUser: 10000 runAsGroup: 3000 runAsNonRoot: true containers: - name: openobserve image: public.ecr.aws/zinclabs/openobserve:latest env: - name: ZO_ROOT_USER_EMAIL # 指定管理员邮箱value: [email protected] - name: ZO_ROOT_USER_PASSWORD # 指定管理员密码value: root321 - name: ZO_DATA_DIR value: /data imagePullPolicy: Always resources: limits: cpu: 4096m memory: 2048Mi requests: cpu: 256m memory: 50Mi ports: - containerPort: 5080 name: http volumeMounts: - name: data mountPath: /data volumeClaimTemplates: - metadata: name: data spec: accessModes: - ReadWriteOnce storageClassName: cfsauto # 指定一个可用的存储类resources: requests: storage: 10Gi

上記のリソース リストでは、StatefulSet を使用して OpenObserver を作成します。管理者の電子メール アドレスとパスワードを指定するには、2 つの環境変数 ZO_ROOT_USER_EMAIL と ZO_ROOT_USER_PASSWORD を設定する必要があることに注意してください。次に、データの永続的な保存のために、PVC テンプレートで使用可能な StorageClass を指定します。

次に、上記のリソース マニフェスト ファイルを適用します。

 $ kubectl apply -f openobserve.yaml $ kubectl get pods -n openobserve NAME READY STATUS RESTARTS AGE openobserve-0 1/1 Running 0 2m31s $ kubectl get svc -n openobserve NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE openobserve ClusterIP None <none> 5080/TCP 2m52s

クイック使用

作成後、OpenObserve ログをチェックして、正常に起動されたかどうかを確認できます。

 $ kubectl logs -f openobserve-0 -n openobserve [2023-08-04T10:18:06Z INFO openobserve] Starting OpenObserve v0.5.1 [2023-08-04T10:18:06Z INFO openobserve::service::db::user] get; org_id=Some("default") name="[email protected]" [2023-08-04T10:18:06Z INFO tracing::span] set; [2023-08-04T10:18:06Z INFO openobserve::service::db::user] Users Cached # ...... [2023-08-04T10:18:06Z INFO openobserve::common::meta::telemetry] sending event OpenObserve - Starting server [2023-08-04T10:18:07Z INFO actix_server::builder] starting 4 workers [2023-08-04T10:18:07Z INFO actix_server::server] Tokio runtime found; starting in existing Tokio runtime [2023-08-04T10:18:07Z INFO openobserve] starting HTTP server at: 0.0.0.0:5080, thread_id: 0 [2023-08-04T10:18:07Z INFO openobserve] starting HTTP server at: 0.0.0.0:5080, thread_id: 0 [2023-08-04T10:18:07Z INFO openobserve] starting HTTP server at: 0.0.0.0:5080, thread_id: 0

起動後、kubectl port-forward コマンドを使用して OpenObserve のポート 5080 をローカル マシンにマッピングし、ブラウザーで http://localhost:5080 にアクセスして OpenObserve UI インターフェースを表示できます。

 $ kubectl port-forward svc/openobserve 5080:5080 -n openobserve Forwarding from 127.0.0.1:5080 -> 5080 Forwarding from [::1]:5080 -> 5080

OpenObserve ログイン

上記で指定した管理者のメール アドレスとパスワードを使用してログインすると、OpenObserve のメイン インターフェイスが表示されます。

オープンオブザーブウェブ

まだデータがないため、ページにコンテンツはありません。取り込みページでは、ログ、メトリック、トレースのデータのさまざまな取り込み方法が提供されます。

摂取

ここでは、まず JSON API を使用してサンプル ログ データを読み込み、OpenObserve の使用方法を理解します。まず、次のコマンドを使用してサンプル ログ データをダウンロードします。

 $ curl -L https://zinc-public-data.s3.us-west-2.amazonaws.com/zinc-enl/sample-k8s-logs/k8slog_json.json.zip -o k8slog_json.json.zip $ unzip k8slog_json.json.zip

次に、次のコマンドを使用してサンプル ログ データを OpenObserve にインポートします。

 $ curl http://localhost:5080/api/default/default/_json -i -u "[email protected]:root321" -d "@k8slog_json.json" HTTP/1.1 100 Continue HTTP/1.1 200 OK content-length: 71 vary: Origin, Access-Control-Request-Method, Access-Control-Request-Headers content-type: application/json date: Fri, 04 Aug 2023 10:46:46 GMT {"code":200,"status":[{"name":"default","successful":3846,"failed":0}]}%

領収書が正常にインポートされたら、ページを更新してデータを確認します。

オープンオブザーブウェブ

ストリーム ページでは、インポートしたデータのメタデータを確認できます。

ストリーム

次に、ログ ページに切り替えてログ データを確認します。

OpenObserve ログ

これで、直接的なニーズに応じてログをクエリできるようになりました。よく使用されるクエリ構文をいくつか以下に示します。

  • 値 error の全文検索を行うには、クエリ エディターで match_all('error') を使用します。
  • 値エラーの大文字と小文字を区別しない全文検索には、match_all_ignore_case('error')を使用します。
  • 値 error の列検索には、 str_match(fieldname, 'error') を使用します。これは、単一のフィールド内で検索するため、 match_all よりも効率的です。
  • コード列の値200を検索するには、code=200を使用します。
  • ストリーム列の値がstderrであるかどうかを検索するには、stream='stderr'を使用します。
  • ログ列でクエリ関数 extract_ip を検索して使用するには、extract_ip(log) | を使用します。コード=200

もちろん、ログに加えて、OpenObserve はインジケーターと追跡データもサポートしていますが、ここでは説明しません。ご興味がございましたら、ぜひご自身でお試しください。

ここでは、OpenObserve のログの使用方法を簡単に説明しました。その後、Fluentbit や Vector などのツールを使用して、Kubernetes クラスター内のログ データを OpenObserve に送信できます。乞うご期待!

参照ドキュメント: https://openobserve.ai/docs

<<:  ハイブリッド クラウド環境で K8S の可観測性を実装するための 6 つの戦略

>>:  Linode ライブマイグレーションの説明

推薦する

justcloud 新しい無料クラウドストレージ

Justcloud は 2010 年に設立されたクラウド ストレージ ビジネスで、無制限のクラウド ...

ユーザーエクスペリエンスの向上におけるウェブサイトインタラクションの役割についての簡単な分析

現在、ウェブサイトのユーザー エクスペリエンスの向上は、多くのウェブマスターの注目の的となっています...

目標に応じてキーワードを選択する

ウェブサイトの最適化の詳細は非常に重要です。コンテンツと外部リンクに加えて、ウェブサイトのアーキテク...

IT インフラストラクチャを仮想化していますか? VMware vSphere の概要

[[281438]] X86 コンピュータ ハードウェアは、単一のオペレーティング システムと単一の...

Webmaster.com の毎日のレポート: 旅行ウェブサイト Weibo マーケティングの Douban 内部テストで違法な資金調達の疑い

1. 微博マーケティングは違法な資金調達の疑いがあり、中国石油天然気集団のプロジェクトが関与している...

クラウド コンピューティングから価値を引き出すために CEO が実行できる 3 つのアクション

企業の CEO として、あなたは、この流行が終わった後にクラウド コンピューティング テクノロジーが...

ウェブサイトの構造は最適化の結果に影響しますか?

現在、主流のウェブサイトフレームワーク構造は DIV + CSS であり、これは最も標準的で W3C...

自動車会社はどのようにして1兆ドル規模のスマートトラベル市場に参入できるのでしょうか?

周知のとおり、自動車産業はここ数年、100年ぶりの大変革を迎え、2つの分野で徹底的な「進化」を遂げて...

杭州市頭脳濱江プラットフォームが正式に始動、清華紫光集団が「デジタル濱江」の構築を支援

[[332284]] 7月2日、杭州ハイテクパーク(浜江)第5地区委員会第9回全体会議(拡大)が浜江...

友情リンク詐欺の高度なテクニックを暴露する第2部

フレンドリーリンクの交換は、ウェブサイトのランキングを向上させ、ウェブサイトの重みを増やすための最も...

サイトのコンバージョン率を改善できない主な理由について説明します。

ウェブサイトの成功は、安定した高いトラフィックと切り離せません。eコマースウェブサイトの場合、コンバ...

クラウドコスト管理テクノロジーがパンデミック中のクラウド支出管理にどのように役立つか

調査会社ガートナーの調査レポートによると、クラウド コンピューティング インフラストラクチャ サービ...

VULTRはどうですか?カナダのクラウドサーバー(AMDプラットフォーム)の簡単なレビュー

Vultr は米国だけでなくカナダにも複数のデータセンターを持ち、カナダのトロントのデータセンターで...

ベッドの暖かさを捨てて、ただこれだけのために丨鴻蒙システムで動くアプリケーションYunku丨パート1

[[379371]]詳細については、以下をご覧ください。 51CTOとHuaweiが共同で構築したH...