OpenTelemetry (Otel) メトリクスからのメトリクス収集

  • リリースバージョン: Australia
  • 更新日 2026年06月17日
  • 所要時間:11分
  • MID Web サービスメトリクスコレクターを使用すると、OpenTelemetry (Otel) から送信された JSON および protobuf 形式のメトリクスを収集できます。

    始める前に

    ServiceNow AI Platform インスタンスに イベント管理 コネクタ (sn_em_connector) プラグインがインストールされており、ServiceNow バージョンが Australia 以降であることを確認してください。

    必ず以下を実行してください。
    • MID サーバー を展開して起動します。「 MID サーバー構成」を参照してください。
    • MID Web サーバーを設定して起動します。詳しくは、 MID Web サーバー拡張の設定を参照してください。
    • メトリクスの収集を有効にするには、メトリクスを取得する MID サーバーがメトリックインテリジェンス拡張で構成され、拡張が開始モードになっていることを確認してください。メトリック インテリジェンス拡張の手動構成を参照してください。
    • REST リスナーを有効にします。
    必要なロール:evt_mgmt_admin

    このタスクについて

    Protobuf および JSON 形式のメトリクスは、Opentelemetry から送信されます。MID サーバーは、次の場所にある TransformMetrics_MidOpenTelemetry スクリプトインクルードを使用して解析することにより、収集されたメトリクスを変換します。 イベント管理 > 統合 > PushConnector. [プッシュコネクタ] ページで、[ OpenTelemetry] を選択します。

    イベントメッセージを GCP から MID サーバーにプッシュするための URL のデフォルト形式は、 http://{MID_Server_IP}:{MID_Web_Server_Port}/api/mid/sa/inbound_metrics?transform=TransformMetrics_MidOpenTelemetry です。

    表 : 1. デフォルト URL の変数
    変数 説明
    MID_Server_IP MID Web サーバー拡張の IP アドレス。
    MID_Web_Server_Port MID Web サーバー拡張のリスニングポート。
    MID_Web_Server_User MID Web サーバー拡張のユーザー名。
    MID_Web_Server_Password MID Web サーバーのユーザーパスワード。

    手順

    1. 受信者の構成:ホストメトリクス受信者 - システムメトリクス収集
      システムメトリクスを収集するには、次のホストメトリクスレシーバーを [レシーバー:] セクションに追加します。
      receivers:
        hostmetrics:
          collection_interval: 10s
          scrapers:
            cpu:
            memory:
            disk:
            filesystem:
            network:
            processes:
            paging:
      
      注:
      • メトリクスCollection_interval頻繁に更新する場合は 10 秒に設定されます。
      • 監視要件に基づいて間隔を調整します (値が大きいほどオーバーヘッドが削減されます)。
      • リソース使用量を最小限に抑えるために必要なスクレイパーのみを有効にします。
    2. プロセッサを構成
      変換プロセッサ:不要なフィールドを削除
      1. ペイロードから不要なフィールドを削除するには、次の変換プロセッサを「プロセッサー:」セクションに追加します。
        transform:
          metric_statements:
            - context: scope
              statements:
                - set(name, "")
                - set(version, "")
        
      2. メモリリミッタープロセッサ - メモリの問題を防ぐ
        メモリ不足エラーを防ぐために、次のmemory_limiterプロセッサーを "processors:" セクションに追加します。
        memory_limiter:
          limit_mib: 5
          spike_limit_mib: 1
        
        注:
        • limit_mibメモリ使用量が 5 MB に設定されている
        • spike_limit_mib一時的なスパイクを処理するために 1 MB に調整されました
        • システムの利用可能なメモリに基づいて、これらの値を調整します
      3. フィルタープロセッサ:特定のメトリクスを選択
        選択したメトリクスのみを含めるには、次のフィルタープロセッサを [プロセッサ:] セクションに追加します。
        filter/minimal:
          metrics:
            include:
              match_type: strict
              metric_names:
                # CPU Metrics
                - system.cpu.time
                - system.cpu.load_average.1m
                - system.cpu.load_average.5m
                - system.cpu.load_average.15m
                # Memory Metrics
                - system.memory.usage
                - system.paging.usage
                # Disk Metrics
                - system.filesystem.usage
                - system.disk.io
                - system.disk.io_time
                # Process Metrics
                - system.processes.count
                - system.processes.created
                # Paging Metrics
                - system.paging.operations
                # Network Metrics
                - system.network.io
                - system.network.packets
                - system.network.errors
                - system.network.dropped
                - system.network.connections
                # MySQL Metrics
                - mysql.operations
                - mysql.locks
                - mysql.uptime
                - mysql.threads
                # HTTP Check Metrics
                - httpcheck.duration
                - httpcheck.status
                - httpcheck.error
                # Prometheus node_exporter Metrics
                - node_cpu_seconds_total
                - node_memory_MemTotal_bytes
                - node_memory_MemAvailable_bytes
                - node_disk_read_bytes_total
                - node_disk_written_bytes_total
                - node_disk_io_time_seconds_total
                - node_network_receive_bytes_total
                - node_network_transmit_bytes_total
        
        注:
        ヒストグラムメトリクスは、ServiceNow MID サーバーではサポートされていません。

        ヒストグラムメトリクスが MID サーバーに送信された場合でも、ServiceNow 変換スクリプトは自動的にそれらを無視します。ただし、ベストプラクティスとして、コレクターレベルでヒストグラムメトリックを除外して、ネットワーク帯域幅を最適化し、不要なデータ転送を減らすことをお勧めします。

        ヒストグラムメトリクスを除外するには、次のフィルターを追加します。
        filter/drop_histograms:
            metrics:
              metric:
                - 'type == METRIC_DATA_TYPE_HISTOGRAM'
    3. エクスポーターの構成
      要件に基づいて、次のいずれかの認証方法を選択します。
      1. オプション A:API キー認証
        [エクスポーター:] セクションに次のエクスポーターを追加します:
        otlphttp/opentelemetry:
          metrics_endpoint: "http://{mid_server_ip}:{port}/api/mid/sa/inbound_metrics?transform=TransformMetrics_MidOpenTelemetry"
          headers:
            Authorization: "Key {api_key}"
          timeout: 30s
          compression: none
          tls:
            insecure: true
          sending_queue:
            enabled: true
            num_consumers: 4
            queue_size: 100
          retry_on_failure:
            enabled: true
            initial_interval: 5s
            max_interval: 30s
        
        注:
        Compression:gzip はサポートされていません。{mid_server_ip}、{port}、および {api_key} を実際の値に置き換えます。
      2. オプション B:ベーシック認証
        ベーシック認証では、拡張とエクスポーターの両方を設定する必要があります。
        1. 基本認証拡張機能の構成
          [extensions:] セクションに以下を追加します。
          extensions:
            basicauth/mid:
              client_auth:
                username: "otel"
                password: "Otel@123"
          
          注:
          ユーザー名とパスワードを実際の認証情報に置き換えます。
        2. 基本認証エクスポーターの構成
          「エクスポーター:」セクションに以下を追加します。
          otlphttp/opentelemetryBasic:
            metrics_endpoint: "http://{mid_server_ip}:{port}/api/mid/sa/inbound_metrics?transform=TransformMetrics_MidOpenTelemetry"
            auth:
              authenticator: basicauth/mid
            timeout: 30s
            compression: none
            tls:
              insecure: true
            sending_queue:
              enabled: true
              num_consumers: 4
              queue_size: 100
            retry_on_failure:
              enabled: true
              initial_interval: 5s
              max_interval: 30s
          
          注:
          Compression:gzip はサポートされていません。{mid_server_ip} と {port} を実際の値に置き換えます。
    4. サービスパイプラインの構成
      構成済みのプロセッサーとエクスポーターを、[サービス:] セクションのメトリクスパイプラインに追加します。
      service:
        pipelines:
          metrics:
            receivers: [<your_configured_receivers>]
            processors: [memory_limiter, transform, filter/minimal]
            exporters: [otlphttp/opentelemetry, otlphttp/opentelemetryBasic]
      
      注:
      • <your_configured_receivers>を実際の受信者名 (hostmetrics など) に置き換えます。
      • 構成したエクスポーター (API キーまたは基本認証、またはその両方) のみを含めます。
      • プロセッサの順序は重要です。最初にmemory_limiterし、その後に変換とフィルターを配置する必要があります。
      • プロセッサー名がステップ 2 で定義したものと一致することを確認します。
      • ヒストグラムフィルタリングを使用する場合は、filter/minimal の後に filter/drop_histogramsを追加します。
    5. その他の構成オプション
      デフォルトでは、OpenTelemetry はプロトコルバッファ (protobuf) 形式でデータを送信します。
      代わりに JSON 形式でデータを送信するには、次のヘッダーをエクスポーター構成に追加します。
      headers:
        Content-Type: "application/json"
      

      完全な構成例。

      以下は、すべてのコンポーネントを組み合わせた完全な構成ファイルの例です。
      receivers:
        hostmetrics:
          collection_interval: 10s
          scrapers:
            cpu:
            memory:
            disk:
            filesystem:
            network:
            processes:
            paging:
       
      processors:
        memory_limiter:
          limit_mib: 5
          spike_limit_mib: 1
        
        transform:
          metric_statements:
            - context: scope
              statements:
                - set(name, "")
                - set(version, "")
        
        filter/minimal:
          metrics:
            include:
              match_type: strict
              metric_names:
                - system.cpu.time
                - system.cpu.load_average.1m
                - system.memory.usage
                - system.network.io
        
        filter/drop_histograms:
          metrics:
            include:
              metric:
                - 'type != METRIC_DATA_TYPE_HISTOGRAM'
       
      extensions:
        basicauth/mid:
          client_auth:
            username: "otel"
            password: "Otel@123"
       
      exporters:
        otlphttp/opentelemetry:
          metrics_endpoint: "https://10.0.0.100:8443/api/mid/sa/inbound_metrics?transform=TransformMetrics_MidOpenTelemetry"
          headers:
            Authorization: "Key your_api_key_here"
          timeout: 30s
          compression: none
          tls:
            insecure: false
          sending_queue:
            enabled: true
            num_consumers: 4
            queue_size: 100
          retry_on_failure:
            enabled: true
            initial_interval: 5s
            max_interval: 30s
       
      service:
        extensions: [basicauth/mid]
        pipelines:
          metrics:
            receivers: [hostmetrics]
            processors: [memory_limiter, transform, filter/minimal, filter/drop_histograms]
            exporters: [otlphttp/opentelemetry]