コンテンツにスキップ

APISIX

インストール設定

前提条件

  • APISIX をインストール
  • DataKit をインストール

APISIX の設定

APISIX の設定ファイルは config.yaml です。datakit_host を実際のアドレスに変更してください。ホスト環境では IP を指定し、Kubernetes 環境では datakit-service.datakit.svc に変更します。

メトリクス

APISIX は Prometheus プロトコルでメトリクスを公開できます。APISIX の設定ファイルに次の設定を追加してください。

apisix:
  prometheus:
    enabled: true
    path: /apisix/prometheus/metrics
    metricPrefix: apisix_
    containerPort: 9091
  plugins:
    - prometheus

あわせて、APISIX のグローバルプラグインで prometheus プラグインを有効化してください。

ログ

APISIX は複数の方法でログを送信できます。ここでは主に http-logger プラグインで送信します。

apisix:
  plugins:
    - http-logger

あわせて、APISIX のルートに http-logger の送信先アドレスを設定してください。内容は次のとおりです。

{
  "batch_max_size": 1,
  "uri": "http://<datakit_host>:9529/v1/write/logstreaming?source=apisix_logstreaming"
}

トレース

APISIX は Opentelemetry プロトコルでトレース情報を送信できます。opentelemetry プラグインを有効にして送信します。

apisix:
  plugins:
    - opentelemetry
  pluginAttrs:
    opentelemetry:
      resource:
        service.name: APISIX
        tenant.id: business_id
      collector:
        address: <datakit_host>:9529/otel
        request_timeout: 3

DataKit

ホスト

DataKit をホスト上で実行している場合は、ホスト方式でデータを収集できます。DataKit のインストールディレクトリに入って設定します。

  • メトリクス

prometheus 収集器を有効にして APISIX のメトリクスを収集します。DataKit インストールディレクトリ 配下の conf.d/samples に移動し、次のコマンドを実行します。

cp prom.conf.sample apisix.conf

apisix.conf の内容を調整します。主に urls を変更します。次のとおりです。

[[inputs.prom]]
  ## Exporter URLs.
  urls = ["http://localhost:9091/apisix/prometheus/metrics"]
  • ログ

logstreaming 収集器を有効にして APISIX のログを収集します。DataKit インストールディレクトリ 配下の conf.d/log に移動し、次のコマンドを実行します。

cp logstreaming.conf.sample logstreaming.conf

内容の調整は不要です。

  • トレース

opentelemetry 収集器を有効にして APISIX のトレースデータを収集します。DataKit インストールディレクトリ 配下の conf.d/opentelemetry に移動し、次のコマンドを実行します。

cp opentelemetry.conf.sample opentelemetry.conf

内容の調整は不要です。

  • 再起動

調整が完了したら、Datakit を再起動します。

Kubernetes

DataKit を Kubernetes 上で実行している場合は、次の方法で設定できます。

  • メトリクス

KubernetesPrometheus 収集器で Prometheus のメトリクス情報を収集できます。

datakit.yaml を編集し、ConfigMap に apisix.conf セクションを追加します。

apiVersion: v1
kind: ConfigMap
metadata:
  name: datakit-conf
  namespace: datakit
data:
    apisix.conf: |-  
      [inputs.kubernetesprometheus]        
        node_local      = true
        scrape_interval = "30s"
        keep_exist_metric_name = false   
        [[inputs.kubernetesprometheus.instances]]
          role       = "pod"
          namespaces = ["apisix"]
          selector   = "app.kubernetes.io/name=apisix"      
          scrape   = "true"
          scheme   = "http"
          port     = "9091"
          path     = "/apisix/prometheus/metrics"
          interval = "30s"

         [inputs.kubernetesprometheus.instances.custom]
           measurement        = "apisix"
           job_as_measurement = false
         [inputs.kubernetesprometheus.instances.custom.tags]
           node_name        = "__kubernetes_pod_node_name"
           namespace        = "__kubernetes_pod_namespace"
           pod_name         = "__kubernetes_pod_name"
           instance         = "__kubernetes_mate_instance"
           host             = "__kubernetes_mate_host"

続いて、apisix.conf を DataKit の /usr/local/datakit/conf.d/kubernetesprometheus/ ディレクトリにマウントします。

    - mountPath: /usr/local/datakit/conf.d/kubernetesprometheus/apisix.conf
        name: datakit-conf
        subPath: apisix.conf
  • ログ

datakit.yaml を編集し、ENV_DEFAULT_ENABLED_INPUTS 環境変数の値に logstreaming を追加します。次のとおりです。

        - name: ENV_DEFAULT_ENABLED_INPUTS
          value: dk,cpu,disk,diskio,mem,swap,system,hostobject,net,host_processes,container,statsd,logstreaming
  • トレース

datakit.yaml を編集し、ENV_DEFAULT_ENABLED_INPUTS 環境変数の値に opentelemetry を追加します。同時に、OTEL と DDTrace のデータ互換を有効にするため ENV_INPUT_DDTRACE_COMPATIBLE_OTEL を有効化します。

        - name: ENV_DEFAULT_ENABLED_INPUTS
          value: dk,cpu,disk,diskio,mem,swap,system,hostobject,net,host_processes,container,statsd,logstreaming,opentelemetry
        - name: ENV_INPUT_DDTRACE_COMPATIBLE_OTEL
          value: 'true'
  • 再起動

調整が完了したら、Datakit を再起動します。

メトリクス

メトリクス 説明
bandwidth APISIX のトラフィック(ingress/egress) int
etcd_modify_indexes etcd のインデックス記録数 int
etcd_reachable etcd の到達可否。1 は到達可能、0 は到達不可 int
http_latency_bucket サービスのリクエスト遅延時間 int
http_latency_count サービスのリクエスト遅延件数 int
http_latency_sum サービスのリクエスト遅延合計 int
http_requests_total http リクエスト総数 int
http_status http ステータス int
nginx_http_current_connections 現在の nginx 接続数 int
nginx_metric_errors_total nginx のメトリクスエラー数 int
node_info ノード情報 int
shared_dict_capacity_bytes APISIX nginx の容量 int
shared_dict_free_space_bytes APISIX nginx の空き容量 int

ログ

Pipeline を使って APISIX ログ内の trace_id を抽出し、トレースとログを関連付けます。

jsonData=load_json(_)
requestJson = jsonData["request"]
responseJson = jsonData["response"]
add_key(http_status,responseJson["status"])
add_key(url,requestJson["url"])
add_key(client_ip,jsonData["client_ip"])
trace_id = requestJson["headers"]["traceparent"]
grok(trace_id, "%{DATA}-%{DATA:trace_id}-%{DATA}") 

ベストプラクティス

フィードバック

このページは役に立ちましたか?