エンドポイントとしてKafkaを使用するNetScaler Observability Exporter

最終公開日 : Oct 02, 2026
NetScaler Observability Exporterは、NetScalerからメトリックとトランザクションを収集するコンテナです。また、データをKafkaでサポートされている形式(AVROなど)に変換し、エンドポイントにエクスポートします。Kafkaは、高性能なデータパイプラインとストリーミング分析のためのオープンソースの分散イベントストリーミングプラットフォームです。
注記:
NetScalerはKafka APIのv0バージョンを使用しており、Kafkaバージョン3.Xまでサポートされています。Kafkaバージョン4.Xはサポートされていません。

ネットスケーラー オブザーバビリティ エクスポーター の展開

NetScaler Observability ExporterはYAMLファイルを使用して展開できます。NetScalerの展開に基づいて、NetScaler Observability Exporterを使用してNetScalerからメトリックとトランザクションデータをエクスポートできます。NetScaler CPXは、Kubernetesクラスター内のポッドとして、またはクラスター外のNetScaler MPXまたはVPXフォームファクターとして展開できます。
次の図は、NetScalerをIngress Gatewayとして、NetScaler Observability Exporterをサイドカーとして使用する構成を示しています。これはNetScalerアプリケーションのトランザクションデータをKafkaに送信します。
ネットスケーラー オブザーバビリティ エクスポーター の展開

前提条件

  • Kubernetesクラスターでkube-dnsまたはCoreDNSアドオンが有効になっていることを確認してください。
  • Kafkaサーバーがインストールされ、構成されていることを確認してください。
  • KafkaブローカーのIPアドレスまたはFQDNアドレスが必要です。
  • Kafkaトピック HTTP を定義している必要があります。
  • データを検証するためにKafka Consumerがあることを確認してください。
注記:
この例のシナリオでは、YAMLファイルを使用してNetScaler Observability ExporterをKubernetesのdefault名前空間に展開します。default以外のプライベートKubernetes名前空間に展開する場合は、YAMLファイルを編集して名前空間を指定してください。
以下は、アプリケーション展開手順のサンプルです。
注記:
ウェブアプリケーションがすでに展開されている場合は、ステップ1と2をスキップしてください。
  1. 独自の証明書とキーを使用して、シークレットingress.crtとキーingress.keyを作成します。
    この例では、デフォルトの名前空間にingというシークレットが作成されます。
    kubectl create secret tls ing --cert=ingress.crt --key=ingress.key
  2. サンプルアプリケーションを展開するには、webserver-kafka.yamlからYAMLファイルにアクセスします。
    kubectl create -f webserver-kafka.yaml
  3. アプリケーションのYAMLファイルのingressアノテーションで、ingressのスマートアノテーションを使用して、インポートする必要がある特定のパラメーターを定義します。
    ingress.citrix.com/analyticsprofile: '{"webinsight": {"httpurl":"ENABLED", "httpuseragent":"ENABLED", "httpHost":"ENABLED","httpMethod":"ENABLED","httpContentType":"ENABLED"}}'
    注記:
    パラメーターはwebserver-kafka.yamlファイルで事前定義されています。
    アノテーションの詳細については、Ingress annotations documentationを参照してください。

NetScaler Observability Exporterサポート付きでNetScaler CPXを展開する

NetScaler Observability Exporterサポート付きでNetScaler CPXをサイドカーとして展開できます。NetScaler CPX YAMLファイルcpx-ingress-kafka.yamlを編集して、NetScaler Observability Exporterサポートに必要な構成情報を含めることができます。
NetScaler Observability Exporterサポート付きでNetScaler CPXインスタンスを展開するには、以下の手順を実行します。
  1. cpx-ingress-kafka.yamlとcic-configmap.yamlファイルをダウンロードします。
  2. 必要なキーと値のペアを持つConfigMapを作成し、デプロイします。特定のエンドポイント向けに、ディレクトリで利用可能なcic-configmap.yamlファイルを使用できます。
  3. 必要に応じて、NetScaler CPX 関連のパラメーターを変更します。
  4. cic-configmap.yaml ファイルを編集し、NS_ANALYTICS_CONFIG エンドポイント構成で NetScaler Observability Exporter の次の変数を指定します。
    server: 'coe-kafka.default.svc.cluster.local' # COE service FQDN
  5. 次のコマンドを使用して、NetScaler Observability Exporter のサポート付きで NetScaler CPX をデプロイします。
    kubectl create -f cpx-ingress-kafka.yaml
    kubectl create -f cic-configmap.yaml
注:
default 以外の名前空間を使用した場合は、coe-kafka.default.svc.cluster.local から coe-kafka.<desired-namespace>.svc.cluster.local に変更する必要があります。

YAML を使用して NetScaler Observability Exporter をデプロイする

YAML ファイルを使用して NetScaler Observability Exporter をデプロイできます。NetScaler Observability Exporter のデプロイに使用できる coe-kafka.yaml ファイルをダウンロードします。
Kubernetes YAML を使用して NetScaler Observability Exporter をデプロイするには、Kafka エンドポイントで次のコマンドを実行します。
kubectl create -f coe-kafka.yaml
必要な変更のために YAML ファイルを編集するには、次の手順を実行します。
  1. 次の YAML 定義を使用して ConfigMap を編集します。
    注:
    ブートストラップ Kafka ブローカーアドレス (コンマ区切り) と目的の Kafka トピックが指定されていることを確認してください。
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: coe-config-kafka
    data:
      lstreamd_default.conf: |
        {
            "Endpoints": {
              "KAFKA": {
                "ServerUrl": "X.X.X.X:9092,Y.Y.Y.Y:9092", #Specify the bootstrap Kafka broker addresses (separated by comma in case multiple bootstrap brokers are to be configured)
                "KafkaTopic": "HTTP", #Specify the desired kafka topic
                "RecordType": {
                    "HTTP": "all",
                    "TCP": "all",
                    "SWG": "all",
                    "VPN": "all",
                    "NGS": "all",
                    "ICA®": "all",
                    "APPFW": "none",
                    "BOT": "none",
                    "VIDEOOPT": "none",
                    "BURST_CQA": "none",
                    "SLA": "none",
                    "MONGO": "none"
                },
                "ProcessAlways": "yes",
                "FileSizeMax": "40",
                "ProcessYieldTimeOut": "500",
                "FileStorageLimit": "1000",
                "SkipAvro": "no",
                "AvroCompress": "yes"
              }
          }
        }
    注: JSON 形式でトランザクションをエクスポートするには、Kafka への JSON 形式でのトランザクションのエクスポート を参照してください。
  2. Kafka ノードのホスト名と IP または FQDN アドレスを指定します。3 ノード Kafka クラスターには、次の YAML 定義を使用します。
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: coe-kafka
      labels:
        app: coe-kafka
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: coe-kafka
      template:
        metadata:
          name: coe-kafka
          labels:
            app: coe-kafka
        spec:
          hostAliases:
            - ip: "X.X.X.X" # Here we specify kafka node1 Ipaddress
              hostnames:
                - "kafka-node1"
            - ip: "Y.Y.Y.Y" # Here we specify kafka node2 Ipaddress
              hostnames:
                - "kafka-node2"
            - ip: "Z.Z.Z.Z" # Here we specify kafka node3 Ipaddress
              hostnames:
                - "kafka-node3"
          containers:
            - name: coe-kafka
              image: "quay.io/citrix/citrix-observability-exporter:1.3.001"
              imagePullPolicy: Always
              ports:
                - containerPort: 5557
                  name: lstream
              volumeMounts:
                - name: lstreamd-config-kafka
                  mountPath: /var/logproxy/lstreamd/conf/lstreamd_default.conf
                  subPath: lstreamd_default.conf
                - name: core-data
                  mountPath: /var/crash/
          volumes:
            - name: lstreamd-config-kafka
              configMap:
                name: coe-config-kafka
            - name: core-data
              emptyDir: {}
  3. 必要に応じて、以下のYAML定義を使用して、NetScaler Observability ExporterポートをNetScalerに公開するためのサービス構成を編集します。
    Citrix-observability-exporterヘッドレスサービス:
    apiVersion: v1
    kind: Service
    metadata:
      name: coe-kafka
      labels:
        app: coe-kafka
    spec:
      clusterIP: None
      ports:
        - port: 5557
          protocol: TCP
      selector:
          app: coe-kafka
    Citrix-observability-exporter ノードポートサービス
    apiVersion: v1
    kind: Service
    metadata:
      name: coe-kafka-nodeport
      labels:
        app: coe-kafka
    spec:
      type: NodePort
      ports:
        - port: 5557
          protocol: TCP
      selector:
          app: coe-kafka

NetScaler Observability Exporterの展開を確認する

NetScaler Observability Exporterの展開を確認するには、以下を実行します。
  1. 次のコマンドを使用して展開を確認します。
    kubectl get deployment,pods,svc -o wide
    サンプル出力(/en-us/netscaler-observability-exporter/media/coe-kafka-verification-sample-output.png)
  2. ブラウザでURL: https://<kubernetes-node-IP>:<cpx-ingress-kafka nodeport>を使用してアプリケーションにアクセスします。
    For example, from step 1, access `<http://10.102.61.56:31202/>` in which, `10.102.61.56` is one of the Kubernetes node IPs.
    HTTPメソッド(/en-us/netscaler-observability-exporter/media/coe-kafka-http-methods.png)
  3. Kafka Consumerを使用してトランザクションデータを表示します。PythonKafkaConsumerからKafka Consumerにアクセスします。
    次の画像は、Kafka Consumerからのサンプルデータを示しています。
    Kafka Consumerからのデータ(/en-us/netscaler-observability-exporter/media/coe-kafka-consumer-transactions.png)

複数のNetScaler Observability ExporterインスタンスをNetScalerに手動で統合する

NetScaler Observability ExporterはNetScalerで手動で構成できます。手動構成は、MPXおよびVPXフォームファクタのNetScalerに適しています。Citrixは、前述のセクションで説明されているように、YAMLファイルを使用してNetScaler Observability Exporterを自動的に展開することを推奨しています。
NetScaler Observability Exporter (coe-kafka.yaml) およびWebアプリケーション (webserver-kafka.yaml) の展開については、前述のセクションを参照してください。
enable feature appflow
enable ns mode ULFD
add service COE_svc1 <COE IP1> LOGSTREAM <COE PORT1>
add service COE_svc2 <COE IP2> LOGSTREAM <COE PORT2>
add service COE_svc3 <COE IP3> LOGSTREAM <COE PORT3>
add lb vserver COE LOGSTREAM 0.0.0.0 0
bind lb vserver COE COE_svc1
bind lb vserver COE COE_svc2
bind lb vserver COE COE_svc3
add analytics profile web_profile -collectors COE -type webinsight -httpURL ENABLED -httpHost ENABLED -httpMethod ENABLED -httpUserAgent ENABLED -httpContentType ENABLED
add analytics profile tcp_profile -collectors COE -type tcpinsight
bind lb/cs vserver <WEB-PROXY> -analyticsProfile web_profile
bind lb/cs vserver <WEB-PROXY> -analyticsProfile tcp_profile
# To enable metrics push to prometheus
add service metrichost_SVC <IP> HTTP <PORT>
set analyticsprofile ns_analytics_time_series_profile -collectors metrichost_SVC -metrics ENABLED -outputMode prometheus
FQDNを使用してNetScaler Observability Exporterを追加する
enable feature appflow
enable ns mode ULFD
add dns nameserver <KUBE-CoreDNS>
add server COEsvr <FQDN>
add servicegroup COEsvcgrp LOGSTREAM  -autoScale DNS
bind servicegroup COEsvcgrp COEsvr <PORT>
add lb vserver COE LOGSTREAM 0.0.0.0 0
bind lb vserver COE COEsvcgrp
add analytics profile web_profile -collectors COE -type webinsight -httpURL ENABLED -httpHost ENABLED -httpMethod ENABLED -httpUserAgent ENABLED -httpContentType ENABLED
add analytics profile tcp_profile -collectors COE -type tcpinsight
bind lb vserver <WEB-VSERVER> -analyticsProfile web_profile
bind lb vserver <WEB-VSERVER> -analyticsProfile tcp_profile
 # To enable metrics push to prometheus
add service metrichost_SVC <IP> HTTP <PORT>
set analyticsprofile ns_analytics_time_series_profile -collectors metrichost_SVC -metrics ENABLED -outputMode prometheus
NetScaler Observability Exporterに関連するトラブルシューティングについては、NetScaler CPX troubleshootingを参照してください。

NetScaler Observability ExporterからKafkaへのJSON形式でのトランザクションエクスポートのサポート

NetScaler Observability ExporterからKafkaへ、AVRO形式に加えてJSON形式でトランザクションをエクスポートできるようになりました。 JSON形式でのトランザクションをサポートするために、KafkaデプロイメントのConfigMapに新しいパラメーターDataFormatが導入されました。 このパラメーターはAVROとJSONの値を指定できます。JSONベースのトランザクションを許可するには、 DataFormatの値をJSONとして、 coe-kafka.yamlファイルで設定します。デフォルト値はAVROです。
次の例は、データ形式がJSONとして構成されたYAMLファイルを示しています。
apiVersion: v1
kind: ConfigMap
metadata:
  name: coe-config-kafka
data:
  lstreamd_default.conf: |
    {
        "Endpoints": {
          "KAFKA": {
            "DataFormat": "JSON",
            "ServerUrl": "X.X.X.X:9092,Y.Y.Y.Y:9092", #Specify the bootstrap Kafka broker addresses (separated by comma in case multiple bootstrap brokers are to be configured)
            "KafkaTopic": "HTTP", #Specify the desired kafka topic
            "RecordType": {
                "HTTP": "all",
                "TCP": "all",
                "SWG": "all",
                "VPN": "all",
                "NGS": "all",
                "ICA": "all",
                "APPFW": "none",
                "BOT": "none",
                "VIDEOOPT": "none",
                "BURST_CQA": "none",
                "SLA": "none",
                "MONGO": "none"
            },
            "TimeSeries": {
                "EVENTS": "yes",
                "AUDITLOGS": "yes"
            }
          }
      }
    }