📊

[翻訳] OpenSearch の新しい PPL 機能でより良いオブザーバビリティとより深い洞察を

に公開

https://opensearch.org/blog/better-observability-deeper-insights-opensearchs-new-piped-processing-language-capabilities/

OpenSearch 3.3 から、Piped Processing Language (PPL) には、ログ分析とオブザーバビリティワークフローを簡素化する新しい機能と改善された機能が含まれています。これらの更新により、アプリケーションのトラブルシューティング、パフォーマンスの監視、セキュリティイベントの分析が容易になります。

本記事では、一般的なログ分析のユースケースの実用的な例を通じて、新しい PPL コマンドと関数を紹介します。これらの機能強化が、複数のデータソースの結合、非構造化ログデータの処理、時系列分析の実行にどのように役立つかを学びます。また、クエリエンジンとしての Apache Calcite の統合を含む、3.3 リリースでの大幅なパフォーマンス向上についても説明します。

新しいコマンドと関数

OpenSearch 3.3 は、9 つの新しいコマンド15 の新しい関数で PPL 機能を大幅に拡張します。さらに、既存のコマンドの構文を洗練し、使いやすくし、さまざまな分析シナリオでより直感的なエクスペリエンスを提供します。

以下のシナリオは、新しいコマンドと関数がデータの分析にどのように役立つかを示しています。

単一クエリ内でのデータセットの結合

このリリースは、より柔軟なデータの結合とフィールド操作をサポートする新しいコマンドで PPL データ操作を強化します。append コマンドは、複数のクエリの結果を単一のデータセットにマージし、異なるソースや時間範囲からのデータを簡単に結合できます。join コマンドは 2 つのデータセットを結合します。左側はインデックスまたはパイプされたコマンドの出力にでき、右側はインデックスまたは subsearch のいずれかにできます。

次の例では、join コマンドを使用して Web ログデータと地理的 IP データを結合し、最も多くのトラフィックを生成している国を特定します。

PPL> source = web_logs
  | join type=inner client_ip [source=ip_geodata]
  | stats count() as total_requests by country

CLI は次の結果を返します。

┏━━━━━━━━━━┳━━━━━━━━━━━━━━┓
┃ country  ┃total_requests┃
┡━━━━━━━━━━╇━━━━━━━━━━━━━━┩
│ USA      │ 5            │
├──────────┼──────────────┤
│ Canada   │ 3            │
├──────────┼──────────────┤
│ UK       │ 1            │
└──────────┴──────────────┘

時系列分析

PPL は、新しい timechartbineventstats コマンドで、合理化された時間的および分布分析を追加します。timechart コマンドは、柔軟なスパン制御で時間間隔にわたってデータを集約し、時系列ワークフローのギャップ埋めと結果の順序付けを自動的に処理します。時間を主軸として結果をフォーマットし、追加のフィールドによるグループ化をサポートします。bin コマンドは、数値を範囲にグループ化し、分布を分析し、データの広がりと頻度パターンを理解しやすくします。eventstats コマンドは、元のイベントを保持しながら、イベントフィールドから要約統計を生成します。

これらのコマンドにより、PPL クエリ内で直接時間的パターンとデータ分布を分析しやすくなり、追加の処理なしでトレンドと外れ値を特定できます。earliestlatest 関数は、タイムスタンプベースの値を取得し、時系列分析のためにグループ内の値の最初または最新の出現を見つけられます。

次の例では、timechart コマンドを使用して、ログデータを 1 時間間隔にグループ化し、これらの間隔内の各重大度レベルのログ数をカウントします。

PPL> source=demo-logs-otel-v1-*
    | timechart span=1h count() by severityText

OpenSearch Dashboards でこのクエリを実行すると、次の画像に示すように、視覚化は重大度レベル別の時間経過に伴うログ分布を示します。

timechart の視覚化

クエリ時の非構造化ログ処理

PPL は、regexrexspath コマンドでテキスト処理機能を追加します。これらのコマンドを使用すると、前処理なしで、クエリ内で直接非構造化テキストをフィルタリング、抽出、解析できます。regex コマンドはパターンを使用してログエントリをフィルタリングし、rex は正規表現を使用して生のテキストから構造化されたフィールドを抽出し、spath はネストされたオブジェクトと配列を含む JSON からフィールドを抽出します。これらを組み合わせることで、再インデックスなしで新しいログ形式をすぐに操作でき、以前は非構造化だったデータをすぐに分析できます。

次の例では、rex コマンドを使用して、ログメッセージから構造化された情報 (loglevelactionuseridsourceip) を抽出します。

PPL> source=app_logs
    | rex field=message '\[(?<loglevel>\w+)\] (?<action>.*) for userId=(?<userid>\d+).*IP=(?<sourceip>[\d\.]+)'
    | head 5
    | fields loglevel, action, userid, sourceip

CLI は次の結果を返します。

┏━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━━━━━┓
┃ loglevel┃ action                    ┃ userid ┃ sourceip      ┃
┡━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━━━━━┩
│ ERROR   │User authentication failed │ 12345  │ 192.168.1.100 │
├─────────┼───────────────────────────┼────────┼───────────────┤
│ ERROR   │User authentication failed │ 12346  │ 192.168.1.101 │
├─────────┼───────────────────────────┼────────┼───────────────┤
│ INFO    │ Successful login          │ 12347  │ 192.168.1.102 │
├─────────┼───────────────────────────┼────────┼───────────────┤
│ ERROR   │User authentication failed │ 12345  │ 192.168.1.100 │
├─────────┼───────────────────────────┼────────┼───────────────┤
│ INFO    │ Password reset requested  │ 12346  │ 192.168.1.101 │
└─────────┴───────────────────────────┴────────┴───────────────┘

複雑なデータ型のサポート

これらの最新の更新により、インデックス時ではなく検索時に複雑なデータ変換を実行できます。既存の PPL 関数は、文字列、数値、タイムスタンプなどのプリミティブデータ型を処理します。サポートは、listvalues などの複数値集約関数を使用して複雑なデータ型に拡張されました。これらの関数は、集約中に複数の値を構造化された配列に収集し、list は重複を保持し、values は一意の値のみを返します。mvjoin 関数は、指定された区切り文字を使用して複数値フィールドを単一の文字列に結合し、クエリ内で直接配列を操作しやすくします。

次の例では、values 関数を使用して、ページ間のユーザージャーニーを分析し、一般的なナビゲーションパターンを特定します。

PPL> source=user_activity
    | stats
        values(page_url) as navigation_path,
        max(duration) as max_duration,
        avg(duration) as avg_duration
        by session_id
    | eval path_length = array_length(navigation_path)
    | where path_length > 3
    | sort max_duration desc

CLI は次の結果を返します。

┏━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━┓
┃session_id┃ navigation_path                                           ┃max_duration┃avg_duration┃path_length┃
┡━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━┩
│sess_005  │ ["/home","/products","/product/789","/cart","/checkout"]  │ 300        │ 186        │ 5         │
├──────────┼───────────────────────────────────────────────────────────┼────────────┼────────────┼───────────┤
│sess_002  │ ["/home","/search","/product/123","/cart"]                │ 300        │ 142.5      │ 4         │
├──────────┼───────────────────────────────────────────────────────────┼────────────┼────────────┼───────────┤
│sess_001  │ ["/home","/products","/product/456","/cart","/checkout"]  │ 240        │ 156        │ 5         │
├──────────┼───────────────────────────────────────────────────────────┼────────────┼────────────┼───────────┤
│sess_003  │ ["/home","/blog","/blog/post-1","/blog/post-2","/contact"]│ 240        │ 129        │ 5         │
└──────────┴───────────────────────────────────────────────────────────┴────────────┴────────────┴───────────┘

パフォーマンスの強化

歴史的に、OpenSearch PPL はカスタムクエリオプティマイザーを使用していました。バージョン 3.0 では、Apache Calcite に基づく実験的なクエリオプティマイザーを導入しました。OpenSearch 3.3 以降、Apache Calcite がデフォルトのオプティマイザーとなり、ルールベースとコストベースの両方の最適化を含む高度な機能を提供します。

PPL のパフォーマンスを評価するために、PPL Big5 データセットを使用してベンチマークインフラストラクチャを構築しました。これらのデータセットにより、さまざまな分析シナリオとワークロードパターンにわたる標準化されたパフォーマンステストが可能になります。自動化された夜間ベンチマークにより、一貫した品質が保証され、リグレッションの検出に役立ちます。一方、公開ダッシュボードにより、ユーザーはクエリパフォーマンスを可視化できます。夜間の Big5 PPL ベンチマークは、OpenSearch Performance Benchmarks ページで確認できます。

Calcite により、PPL は以前のバージョンと比較して大幅なパフォーマンス向上を実現します。ほとんどの PPL コマンドと関数の実行は、OpenSearch クエリドメイン固有言語 (DSL) にプッシュダウンされ、重い後処理が削減されます。追加の改善には、複合集約、強化された日付ヒストグラムサポート、大きな結果セットのためのより良いメモリ管理、高カーディナリティフィールドの改善された処理が含まれます。例えば、Big5 PPL date_histogram_hourly_agg クエリは現在 160 倍高速で、2.5 秒から 15 ミリ秒に短縮されました。これらの機能強化は、ログ分析や時系列探索などの一般的なオブザーバビリティのユースケースに利益をもたらします。完全なベンチマーク結果とパフォーマンスメトリクスは、夜間のベンチマークダッシュボードで入手できます。

CLI ツールを使い始める

既存の OpenSearch ドメインをアップグレードすることなく、今日から新しい PPL 機能を探索できます。OpenSearch CLI を使用すると、古いバージョンのドメインでこれらの機能をテストでき、完全なドメインアップグレードを実行する前に機能を検証できます。

開始方法は以下のとおりです。

  1. CLI ツールの最新バージョンをインストールする。新しい PPL 機能を含む OpenSearch SQL CLI README のインストール手順に従ってください。

  2. OpenSearch クラスターに接続する (ローカルまたはリモートクラスターに接続できます)。

    opensearchsql -e https://your-cluster-endpoint:your-port -u username:password
    

    接続すると、CLI はクラスターのバージョン、SQL/PPL バージョン、デフォルト設定に関する情報を表示します。

        ____                  _____                      __
      / __ \____  ___  ____ / ___/___  ____ ___________/ /_
    / / / / __ \/ _ \/ __ \\__ \/ _ \/ __ `/ ___/ ___/ __ \
    / /_/ / /_/ /  __/ / / /__/ /  __/ /_/ / /  / /__/ / / /
    \____/ .___/\___/_/ /_/____/\___/\__,_/_/   \___/_/ /_/
        /_/
    
    OpenSearch: v3.1.0
    Endpoint: https://your-cluster-endpoint:your-port
    User: admin
    SQL: v3.3.0.0
    Language: PPL
    Format: TABLE
    
  3. 新しい PPL コマンドの探索を開始する

    PPL> source=user_activity | where duration > 200 | head 3
    

    CLI は次の結果を返します。

    Executing: source=user_activity | where duration > 200 | head 3
    Fetched 3 rows with a total of 3 hits
    ┏━━━━━━━━━━┳━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━┓
    ┃ duration ┃ page_url     ┃ session_id ┃ @timestamp          ┃ user_id ┃
    ┡━━━━━━━━━━╇━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━┩
    │ 240      │ /product/456 │ sess_001   │ 2025-10-08 10:05:00 │ user123 │
    ├──────────┼──────────────┼────────────┼─────────────────────┼─────────┤
    │ 240      │ /product/456 │ sess_001   │ 2025-10-08 10:05:00 │ user123 │
    ├──────────┼──────────────┼────────────┼─────────────────────┼─────────┤
    │ 300      │ /product/123 │ sess_002   │ 2025-10-08 10:18:00 │ user456 │
    └──────────┴──────────────┴────────────┴─────────────────────┴─────────┘
    

PPL に参加する

PPL の将来は、コミュニティの関与とフィードバックに依存しています。CLI ツールを使用して新機能を試し、OpenSearch コミュニティと経験を共有することをお勧めします。新しいユースケースを探索している場合でも、改善の余地がある領域を特定している場合でも、皆様の意見はオブザーバビリティ機能の開発を導くのに役立ちます。報告を容易にするために、バグレポートテンプレートを提供しています。

詳細については、以下のリソースを確認してください。

OpenSearch Project

Discussion