クラウドネイティブの可観測性プラットフォームである 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 ライブマイグレーションの説明

推薦する

市場調査の未来: 量子コンピューティング市場は2023年までに28億2000万ドルに成長する

海外メディアの報道によると、市場調査会社マーケット・リサーチ・フューチャーが発表したレポートでは、2...

内部ページは含まれているのに、ホームページが更新されていないのはなぜですか?

内側のページは、最近この問題に遭遇することができませんでしたコンテンツと外部リンクに関して、外部のリ...

gigavest-7 USD/シンガポール/KVM/512 MB RAM/20 GB HDD/10 TB フロー

最近、グループ内の友人から、マレーシアのVPS業者であるgigavest.comのシンガポールKVM...

DEDECMSは赤色のセキュリティアラートを発動し、セキュリティアライアンスのウェブマスタープラットフォームはアドバイスをするのに忙しかった。

最近、セキュリティ アライアンス ウェブマスター プラットフォームの「エキスパート脆弱性修復センター...

BAT31 PR: さまざまな特徴と強みが国内のインターネットを非常に活発にしている

インターネット企業は、ネットユーザーが毎日利用し、そのサービスにはより高い広報能力が求められる百度、...

Baidu の PC 検索結果が異常、モバイル検索の調整による可能性あり

6月3日午後のA5ウェブマスターネットワークニュース:今日の午後、皆さんのBaidu検索は正常だった...

最も安い VPS: 2018 年にネットユーザーによって評価された最も安い VPS のリスト (レビューと評価付き)

最も安い VPS は、誰もが常に探して購入しています。動的で最も安い VPS、米国で最も安い VPS...

TICのブロックチェーン技術、UCloudがブロックチェーンセキュリティアプリケーションの実装をリード

2018年5月15日、「中立で信頼できる、夢想家に力を与える」をテーマにしたThink in Clo...

百度の入札を垣間見る

要約: 競合他社よりも少ない費用で、競合他社よりも高いランキングを獲得し、コンバージョン率を最大化し...

クラウド ポータビリティに関する 3 つの考慮事項: イベント駆動型アーキテクチャ (EDA) とサーバーレス コンピューティング

このシリーズの記事では、アーキテクチャや設計、クラウドのポータビリティに関して考慮すべき具体的な詳細...

「WeChat電話帳」の影響力はどれほど大きいのか?

概要:11月11日、人々のコミュニケーション習慣を覆す可能性のあるアプリ「WeChat電話帳」がひっ...

#11.11# kuroit: 年間 11.11 ポンド、2G メモリ/1 コア/22G SSD/22T データ転送、英国/米国

kuroitはインド人によって設立され、9月に英国で登録されました(ここをクリック)。主な事業はホス...

SUSE OpenStack Cloud が TCS エンタープライズ クラウド プラットフォームを強化

SUSE® は本日、世界的な IT サービス、コンサルティング、ビジネス ソリューション組織である ...