API 검색OpenTelemetry 콜렉터 구성

OpenTelemetry 콜렉터를 API 검색 기능에 추가하는 방법입니다. 수집기는 Istio 또는 NGINX 데이터 소스를 기반으로 할 수 있습니다.

시작하기 전에

API 감지 OpenTelemetry 콜렉터를 구성하려면 다음 전제조건이 필요합니다.
소스를 관리하려면 다음 제공자 조직 역할 중 하나가 필요합니다.
  • 조직 관리자
  • 소유자
  • Settings: Manage 권한이 있는 사용자 정의 역할입니다.

이 태스크에 대한 정보

API 검색은 API 개발 프로세스에 API를 검색하고 추가하는 데 사용할 수 있는 IBM® API Connect 의 추가 기능입니다. API를 감지하기 전에 하나 이상의 데이터 소스 콜렉터를 구성해야 합니다. 그러면 수집기가 공급자 조직에 첫 번째 OpenAPI 문서를 보낼 때 이러한 수집기가 API 관리자 UI의 소스 탭에 자동으로 추가됩니다.

API 탐색 ( OpenTelemetry ) 수집기를 구성하려면 Istio 또는 NGINX 데이터 소스를 설정한 다음, Helm 차트를 사용하여 수집기를 배포해야 합니다. 컬렉터가 배포된 후에는, Envoy 를 통해 API 트래픽이 전송되는 모든 파드가 이 데이터를 로 전송합니다 API Connect. 그런 다음 필요에 따라 ‘ OpenAPI ’ 문서를 초안 API로 복사하여 API Manager에서 전체 라이프사이클 관리를 수행할 수 있습니다.

프로시저

OpenTelemetry 콜렉터를 구성하려면 다음 단계를 완료하십시오.
  1. 수집기를 지원하도록 Istio 또는 NGINX 데이터 소스를 구성하십시오.
    Istio 데이터 소스 구성
    다음 명령을 실행하고 검색 공급자를 MeshConfig 추가하여 Istio 에 수집기를 등록하십시오.
    kubectl edit configmap istio -n istio-system
    여기서는 클러스터에 istio-systemIstio 가 배포된 네임스페이스를 의미합니다. 기본 네임스페이스는 istio-system입니다.
    다음 정보로 extensionProviders 섹션을 업데이트하십시오.
        extensionProviders:
          - name: "discoveryOtelCollector"
            opentelemetry:
              service: "management-api-discovery-otel-collector.istio-system.svc.cluster.local"
              port: 5555
    제공자에 대한 자세한 내용은 https://istio.io/latest/docs/tasks/observability/telemetry/#provider-selection 에 있는 ‘ Istio ’ 문서의 ‘제공자 선택(Provider Selection)’ 섹션을 참조하십시오.

    Istio 를 를 사용하여 IstioOperator배포한 경우, 를 사용하여 정보를 MeshConfig구성할 수 있습니다. 자세한 내용은 https://istio.io/v1.10/docs/reference/config/istio.mesh.v1alpha1/#MeshConfig 에서 ‘ Istio ’ 문서를 참조하십시오.

    NGINX 데이터 소스 구성
    NGINX 데이터 소스를 구성하여 OpenTelemetry 수집기를 지원하도록 설정하는 방법은 여러 가지가 있지만, 다음 정보에서는 네 가지 주요 옵션을 설명합니다. 구성에 대한 자세한 내용은 NGINX 의 readme 파일을 github.com 참조하십시오.
    1. NGINX otel-webserver-module
      모듈이 webserver OpenTelemetry 수집기로 트레이스를 전송하도록 구성하려면, NGINX 배포를 업데이트하여 해당 수집기를 사용하도록 OTEL_EXPORTER_OTLP_ENDPOINT설정할 수 있습니다. 예를 들어,
      env:
      - name: OTEL_EXPORTER_OTLP_ENDPOINT
        value: management-api-discovery-otel-collector.namespace.svc:5555
      또는, NGINX 서버의 OpenTelemetry 구성에서 해당 NginxModuleOtelExporterEndpoint 설정을 업데이트할 수 있습니다.
    2. NGINXinstrumentation 모듈

      모듈과 webserver 마찬가지로, NGINX 배포를 업데이트하여 를 사용하도록 OTEL_EXPORTER_OTLP_ENDPOINT설정하거나, 에서 엔드포인트를 otel-nginx.toml구성할 수 있습니다.

      이 모듈을 사용하면 API 발견 서비스에 전송할 수 있는 추적을 사용자 정의하기 위해 nginx.conf 에서 다른 변수를 사용할 수 있습니다.

    3. Ingress-Nginx 제어기
      Ingress-Nginx 제어기instrumentation 모듈을 사용하므로 동일한 구성 옵션이 적용됩니다. 백엔드 서비스에서 추적을 수집하려면 최소한 Kubernetes Ingress-Nginx Controller ConfigMap 를 다음 세부사항으로 구성해야 합니다.
      enable-opentelemetry: "true"
      otlp-collector-host: "management-api-discovery-otel-collector.namespace.svc:5555"
    4. NGINX OpenTelemetry 모듈

      NGINX 구성에서 otel_exporter 를 설정하여 이 모듈이 OpenTelemetry 수집기로 트레이스를 전송하도록 구성할 수 있습니다.

      이 모듈을 사용하면 API 발견 서비스에 전송할 수 있는 추적을 사용자 정의하기 위해 nginx.conf 에서 다른 변수를 사용할 수 있습니다.

  2. Helm 디렉토리에서 콜렉터 구성에 필요한 다음 매개변수 값으로 values.yaml 파일을 업데이트하십시오.
    • discovery.datasource_type - 데이터 소스 유형(선택 사항). 유효한 값은 istio, nginx, 또는 비워 둡니다. 이 경우 istio, 필요한 Istio 텔레메트리 CR이 설치되어 있습니다. 그렇지 않으면 Helm 는 텔레메트리 생성을 무시합니다.
    • discovery.datasource_name - 수집기가 검색한 모든 API의 데이터 소스 이름(선택 사항). 데이터 소스 이름이 비어 있는 경우 수집된 API의 네임스페이스가 사용됩니다.
    • discovery.apic_host_domain -감지된 API가 전송되는 API Connect 인스턴스의 도메인 이름입니다. 예: us-east-a.apiconnect.automation.ibm.com.
    • discovery.provider_org - API Manager에 있는 제공자 조직의 이름입니다.
    • discovery.api_key -API 파일을 API Manager에 푸시하는 데 필요한 신임 정보입니다. API 게시를 위해 API 관리자 에 대한 액세스 권한이 있는 사용자로부터 API키를 가져올 수 있습니다. API 키를 발급받는 방법에 대한 자세한 내용은 ‘플랫폼 REST API 키 관리’를 참조하세요. api_key 는 배치의 일부로 Kubernetes 시크릿에 추가된 후 콜렉터 배치 팟 (Pod) 에 마운트됩니다.
    • discovery.processors -프로세서를 사용하거나 사용하지 않도록 설정하는 플래그입니다. 으로 설정할 수 있습니다.enabled 또는disabled . 로 설정한 경우enabled ,ConfigMap 기존 배치 및 메모리 제한 프로세서를 활성화하며 다른 경우에는 프로세서를 제공하지 않습니다. 한 번에 11000개가 넘는 범위의 추적을 전송하려고 시도하면 콜렉터가 페이로드를 거부하므로 일괄처리 프로세서를 켜야 합니다. 사용 가능한 일괄처리 및 메모리 리미터 프로세서는 기본 시스템 요구사항에 따라 구성 가능합니다. 그만큼limit_mib 수집기 배포의 리소스 제한을 업데이트하면 메모리 제한 프로세서의 용량이 늘어날 수 있습니다. 수집기의 성능을 향상시키는 내장 프로세서가 있으므로 프로세서를 활성화할 때 attributes/ibm-apiconnect, redaction/ibm-apiconnect, filter/ibm-apiconnect, transform/ibm-apiconnect, resource/ibm-apiconnect 프로세서를 service.pipelines.traces.processors의 동일한 순서로 유지해야 합니다. 이러한 프로세서를 포함하지 않으면 수집된 트래픽의 품질은 물론 수집기의 성능도 저하됩니다. 자세한 내용은 예제 프로세서인 ` ConfigMap ` 템플릿, ` OpenTelemetry ` 배치 프로세서에 대한 정보, 그리고 ` OpenTelemetry ` 메모리 제한 프로세서에 대한 정보를 참조하십시오.
    • namespace - 클러스터에 Istio 또는 NGINX 이 배포된 네임스페이스. Istio 텔레메트리 통합 요구 사항에 따라, 수집기 포드도 이곳에 배포될 예정입니다.
    • images.api_discovery_collector -새 버전이 릴리스될 때 콜렉터 배치의 업그레이드를 사용으로 설정합니다. 콜렉터는 나중에 감지 서비스와 호환 가능한 상태를 유지하기 위해 업데이트가 필요합니다. 업데이트에 대한 자세한 내용은 https://github.com/ibm-apiconnect/api-discovery-otel-collector 저장소에서 확인할 수 있습니다.
    • logging.log_level -로그 레벨. 기본 레벨은 info입니다. 필요한 경우 디버그 목적으로 레벨을 debug 로 늘릴 수 있습니다.
    • logging.debugexporter_verbosity -디버그 로그의 상세 레벨입니다. 기본값은 basic입니다. 익스포터에 대한 자세한 정보를 보려면 상세 레벨을 detailed로 늘릴 수 있습니다. 그러나 이를 통해 많은 양의 트래픽이 플로우되는 콜렉터의 경우 상세 정보를 basic 로 유지하는 것이 좋습니다.
    다음 값들은 Istio 데이터 소스에만 적용됩니다:
    • telemetry_namespace - Istio 텔레메트리 CR이 배포될 네임스페이스(선택 사항). 기본적으로 값 파일은 이 네임스페이스를 루트 구성 네임스페이스로 istio-system로 설정하여 메시 레벨 콜렉션 구성을 제공합니다. 그러나 이 설정은 감지하려는 배치된 애플리케이션에 대한 콜렉션 요구사항을 기반으로 사용자 정의할 수 있습니다. 자세한 내용은 https://istio.io/latest/docs/reference/config/telemetry/ 에서 텔레메트리 정보를 참조하십시오.
    다음 예제는 ‘ Istio ’ 데이터 소스의 몇 가지 매개변수 값을 보여줍니다:
    ---
    discovery:
      # platform_api_prefix is not required to change for API Connect on Cloud
      datasource_type: istio
      # supported values are istio, nginx
      datasource_name: my-data-source
      platform_api_prefix: platform-api
      apic_host_domain: us-east-a.apiconnect.automation.ibm.com
      provider_org: myOrgName
      api_key: xxxxxx
      namespace: istio-system
      telemetry_namespace: istio-system
      # Enable the processor and edit the processor-configmap to choose values for batch and memory_limiter
      # supported values are enabled and disabled
      processors: disabled
    logging:
      log_level: info
      # supported values are json and console
      log_encoder: json
      # supported values are basic and detailed
      debugexporter_verbosity: basic
    
    images:
      api_discovery_collector: ghcr.io/ibm-apiconnect/api-discovery-otel-collector:20240612-173911

    컬렉터 OpenTelemetry 구성에 대해 더 자세히 알아보려면 의 OpenTelemetry API 검색용 수집기 readme를 github.com 참조하십시오. 이러한 API Connect 자원에는 테스트 저장소에 대한 작업 예제가 포함되어 있습니다.

  3. 다음 명령을 실행하여 콜렉터를 배치하십시오.
    helm template . | kubectl apply -f -
    다음 예제는 Istio 데이터 소스에 대해 표시되는 응답을 보여주며, 필요한 Kubernetes 리소스가 배포되었음을 확인해 줍니다:
    helm template . | kubectl apply -f -
    secret/api-discovery-secret created
    service/management-api-discovery-otel-collector created
    deployment.apps/management-api-discovery-otel-collector created
    telemetry.telemetry.istio.io/api-discovery-otel created
    컬렉터가 배포되면, Envoy 를 통해 트래픽이 전송되는 모든 데이터 소스 인스트루먼트 포드가 탐지되기 시작하며, 해당 트래픽은 디스커버리 API Connect 기능으로 전송됩니다.
  4. 콜렉터 보기 및 수신 중인 트래픽은 API Manager UI에서 제공자 조직에 로그인하십시오.
  5. 탐색 창에서 ‘Discover’ 아이콘을 클릭한 발견 아이콘은 검은색 배경에 흰색으로 표시된 쌍안경의 아웃라인입니다. 다음, ‘Sources’ 탭을 클릭하여 ‘ OpenTelemetry ’ 수집기를 확인하세요.
    소스의 상태는 다음과 같습니다.
    • 사용 가능 -소스가 사용 가능하며 해당 구성에 따라 콜렉터와 동기화됩니다.
    • 사용 안함 -소스가 사용 안함으로 설정되고 API Connect 가 콜렉터의 파일을 허용하지 않습니다. 이 상태는 감지 조작이 실패하는 경우 감지 서비스에 의해 설정됩니다.
    • 비정상 -소스 콜렉터를 사용할 수 없습니다.
    • 일시정지됨 -소스가 일시정지되고 API Connect 가 콜렉터의 파일을 승인하지 않습니다.
  6. 선택 사항: 소스 옆에 있는 옵션 옵션 아이콘은 흰색 배경에 세 개의 세로 검은색 점으로 된 세트입니다. 아이콘을 클릭하여 상태를 변경할 수 있습니다.
    • 콜렉터 일시정지 -소스를 일시정지합니다.
    • 콜렉터 삭제 - API Manager UI에서 소스를 삭제합니다. 외부 소스 파일은 삭제되지 않습니다.
    • 콜렉터 재개 -일시정지되었거나 사용 불가능한 소스를 다시 시작합니다.
  7. 선택 사항: 표 머리글에 있는 ‘열 열 관리 아이콘은 흰색 배경에 검은색으로 표시되는 휠의 아웃라인입니다. 관리’ 아이콘을 클릭하여 열의 순서와 표시 방식을 변경할 수 있습니다.

결과

이제 OpenTelemetry 데이터 소스 콜렉터가 API 트래픽을 검색할 준비가 되었습니다. 콜렉터가 첫 번째 OpenAPI 문서를 제공자 조직으로 전송하면 콜렉터가 API Manager발견 섹션에 있는 소스 탭에 나열됩니다.

다음에 수행할 작업

API Manager UI의 검색 섹션에서 API 탭을 클릭하고 API 트래픽을 검토할 수 있습니다. 자세한 내용은 ‘검출된 API 검토’를 참조하세요.

필요한 경우 다음 명령을 실행하여 Helm 에서 콜렉터를 설치 제거할 수 있습니다.
helm template . | kubectl delete -f -