Configurazione di un OpenTelemetry collector for API discovery

Come aggiungere un collector OpenTelemetry alla tua funzionalità di rilevamento API . Il collettore può basarsi su una fonte di dati Istio o NGINX.

Prima di iniziare

Prima di poter configurare un rilevamento API OpenTelemetry collector, sono necessari i seguenti requisiti:
Uno dei seguenti ruoli dell'organizzazione provider è richiesto per poter gestire le origini:
  • Amministratore dell'organizzazione
  • Proprietario
  • Ruolo personalizzato con l'autorizzazione Settings: Manage .

Informazioni su questa attività

API discovery è un componente aggiuntivo di IBM® API Connect che può essere utilizzato per scoprire e aggiungere API al processo di sviluppo delle API. Prima di poter rilevare le API, è necessario configurare uno o più raccoglitori di origini dati. Questi raccoglitori vengono aggiunti automaticamente alla scheda Sorgenti dell'interfaccia utente di API Manager quando il raccoglitore invia i primi documenti OpenAPI all'organizzazione di provider.

Per configurare un collettore API Discovery OpenTelemetry, è necessario configurare l'origine dati Istio o NGINX, quindi distribuire il collettore utilizzando un grafico Helm. Una volta implementato il collector, tutti i pod il cui traffico API passa attraverso Envoy inviano questi dati a API Connect. I documenti dell' OpenAPI e possono quindi essere copiati nelle API in bozza secondo necessità, per consentire la gestione completa del ciclo di vita in API Manager.

Procedura

Per configurare un collector OpenTelemetry , completare la seguente procedura.
  1. Configura la tua origine dati Istio o NGINX per supportare il collector.
    Configurazione di una fonte dati di tipo « Istio »
    Registra il collector nel tuo IstioMeshConfig eseguendo il seguente comando e aggiungendo un provider di rilevamento.
    kubectl edit configmap istio -n istio-system
    Dove istio-system si trova lo spazio dei nomi in cui è distribuito Istio sul tuo cluster. Lo spazio dei nomi predefinito è istio-system.
    Aggiornare la sezione extensionProviders con le seguenti informazioni:
        extensionProviders:
          - name: "discoveryOtelCollector"
            opentelemetry:
              service: "management-api-discovery-otel-collector.istio-system.svc.cluster.local"
              port: 5555
    Per ulteriori informazioni sui provider, consultare la sezione "Selezione dei provider" nella documentazione di " Istio " all'indirizzo https://istio.io/latest/docs/tasks/observability/telemetry/#provider-selection.

    Se hai installato Istio utilizzando il IstioOperator, puoi configurare le impostazioni utilizzando il MeshConfig. Per ulteriori informazioni, consultare la documentazione di Istio all'indirizzo https://istio.io/v1.10/docs/reference/config/istio.mesh.v1alpha1/#MeshConfig.

    Configurazione di una fonte dati NGINX
    Esistono diversi modi per configurare l'origine dati di NGINX in modo che supporti il collettore OpenTelemetry, ma le informazioni riportate di seguito illustrano le quattro opzioni principali. Per informazioni più dettagliate sulla configurazione, consultare il file README di NGINX all'indirizzo github.com.
    1. NGINX otel-webserver-module
      Per configurare il webserver modulo in modo che invii le tracce al collettore OpenTelemetry, è possibile aggiornare l'installazione di NGINX in modo che utilizzi il OTEL_EXPORTER_OTLP_ENDPOINT. Ad esempio:
      env:
      - name: OTEL_EXPORTER_OTLP_ENDPOINT
        value: management-api-discovery-otel-collector.namespace.svc:5555
      In alternativa, puoi aggiornare il file NginxModuleOtelExporterEndpoint nella configurazione di OpenTelemetry sul tuo server NGINX.
    2. NGINXinstrumentation modulo

      Analogamente al webserver modulo, è possibile aggiornare l'installazione di NGINX per utilizzare il OTEL_EXPORTER_OTLP_ENDPOINT, oppure configurare l'endpoint nel otel-nginx.toml.

      Questo modulo consente di utilizzare variabili diverse in nginx.conf per personalizzare le tracce che possono essere inviate al servizio Rilevamento API .

    3. Ingress - ControllerNginx
      Il controller Ingress -Nginx usa il modulo instrumentation , quindi si applicano le stesse opzioni di configurazione. Come minimo, il Kubernetes Ingresso - ControllerNginx ConfigMap deve essere configurato con i seguenti dettagli per raccogliere le tracce dal servizio di back - end:
      enable-opentelemetry: "true"
      otlp-collector-host: "management-api-discovery-otel-collector.namespace.svc:5555"
    4. NGINX OpenTelemetry modulo

      È possibile configurare questo modulo per inviare le tracce al collettore OpenTelemetry impostando il parametro otel_exporter nel file di configurazione NGINX.

      Questo modulo consente di utilizzare diverse variabili in nginx.conf per personalizzare le tracce che possono essere inviate al servizio di rilevamento API.

  2. Nella directory Helm , aggiornare il file values.yaml con i seguenti valori di parametro, come richiesto per la configurazione del raccoglitore.
    • discovery.datasource_type - il tipo di fonte di dati (opzionale). I valori validi sono istio, nginx, o lasciato vuoto. Se istio, il CR di telemetria Istio richiesto è installato. In caso contrario, Helm ignora la creazione dei dati di telemetria.
    • discovery.datasource_name - il nome della fonte di dati per tutte le API scoperte dal raccoglitore (opzionale). Se il nome dell'origine dati è vuoto, viene utilizzato lo spazio dei nomi dell'API raccolta.
    • discovery.apic_host_domain - il nome del dominio dell'istanza API Connect a cui vengono inviate le API rilevate. Ad esempio, us-east-a.apiconnect.automation.ibm.com.
    • discovery.provider_org - il nome dell'organizzazione provider in API Manager.
    • discovery.api_key - le credenziali richieste per eseguire il push dei file API a API Manager. Puoi ottenere la chiave API dall'utente che ha accesso a API Manager per pubblicare le API. Per informazioni su come ottenere una chiave API, consulta la sezione Gestione delle chiavi API REST della piattaforma. Il api_key viene aggiunto a un segreto Kubernetes come parte della distribuzione e montato sul pod di distribuzione del raccoglitore.
    • discovery.processors - l'indicatore per abilitare o disabilitare i processori. Può essere impostato suenabled Odisabled . Se impostato suenabled , ILConfigMap abilita il processore batch e limitatore di memoria esistente e non fornirà alcun processore in altri casi. Se si tenta di inviare una traccia con più di 11000 spans alla volta, il programma di raccolta rifiuterà il payload e verrà richiesto di attivare il processore batch. I processori batch e limitatori di memoria disponibili sono configurabili in base ai requisiti di sistema di base. ILlimit_mib nel processore del limitatore di memoria può essere aumentato se si aggiornano i limiti delle risorse della distribuzione del raccoglitore. È necessario mantenere i processori attributes/ibm-apiconnect, redaction/ibm-apiconnect, filter/ibm-apiconnect, transform/ibm-apiconnect e resource/ibm-apiconnect in service.pipelines.traces.processors nello stesso ordine quando si abilitano i processori, poiché ci sono processori integrati che migliorano le prestazioni del collettore. Se non si includono questi processori, la qualità del traffico raccolto si degrada, così come le prestazioni del raccoglitore. Per ulteriori informazioni, consultare un modello di processore di esempio ConfigMap, le informazioni sul processore batch OpenTelemetry e quelle sul processore di limitazione della memoria OpenTelemetry.
    • namespace - lo spazio dei nomi in cui Istio o NGINX è distribuito sul tuo cluster. Come previsto dall'integrazione della telemetria di Istio, anche il pod di raccolta verrà implementato qui.
    • images.api_discovery_collector - abilita l'aggiornamento della distribuzione del programma di raccolta quando vengono rilasciate nuove versioni. Si noti che i raccoglitori richiederanno aggiornamenti in futuro per garantire che restino compatibili con il servizio di rilevamento. I dettagli relativi agli aggiornamenti sono disponibili nel repository https://github.com/ibm-apiconnect/api-discovery-otel-collector.
    • logging.log_level - il livello di log; il livello predefinito è info. Per scopi di debug, il livello può essere aumentato a debug , se necessario.
    • logging.debugexporter_verbosity - il livello di dettaglio del log di debug; il valore predefinito è basic. Per informazioni dettagliate sull'esportatore, il livello di dettaglio può essere aumentato a detailed. Tuttavia, si consiglia di mantenere la verbosità come basic per un raccoglitore con una grande quantità di traffico che scorre attraverso di esso.
    I seguenti valori sono specifici delle origini dati di Istio :
    • telemetry_namespace - lo spazio dei nomi in cui verrà distribuito il CR di telemetria di Istio (facoltativo). Per impostazione predefinita, il file dei valori imposta questo namespace su istio-system, come namespace di configurazione root per fornire la configurazione di raccolta a livello di mesh. Tuttavia, questa impostazione può essere personalizzata in base ai requisiti di raccolta per le applicazioni distribuite che si desidera vengano rilevate. Per ulteriori informazioni, consultare le informazioni sulla telemetria all'indirizzo https://istio.io/latest/docs/reference/config/telemetry/.
    L'esempio seguente mostra alcuni valori di parametro di esempio per un'origine dati di tipo « 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

    Per ulteriori informazioni sulla configurazione del collettore " OpenTelemetry ", consultare il file README relativo al collettore " OpenTelemetry " per il rilevamento delle API su github.com. Queste risorse API Connect includono esempi di lavoro con un repository di test.

  3. Eseguire il seguente comando per distribuire l'utilità di raccolta:
    helm template . | kubectl apply -f -
    L'esempio seguente mostra la risposta visualizzata per una fonte di dati Istio, a conferma che le risorse Kubernetes richieste sono state implementate:
    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
    Una volta implementato il collector, tutti i pod degli strumenti delle origini dati il cui traffico passa attraverso l' Envoy e inizieranno a essere rilevati e il traffico verrà inviato alla funzionalità API Connect di rilevamento.
  4. La vista del raccoglitore e tutto il traffico ricevuto, accede alla tua organizzazione provider nella IU API Manager .
  5. Nel riquadro di navigazione, fai clic Scopri sull'icona L'icona discover è il contorno di un paio di binocoli in bianco su sfondo nero., quindi fai clic sulla Fonti scheda per visualizzare il tuo OpenTelemetry collettore.
    Le origini possono avere il seguente stato:
    • Abilitato - l'origine è abilitata e si sincronizza con il programma di raccolta in base alla relativa configurazione.
    • Disabilitato - l'origine è disabilitata e API Connect non accetterà alcun file dal programma di raccolta. Questo stato viene impostato dal servizio di rilevamento se un'operazione di rilevamento non riesce.
    • Non integro - il raccoglitore di origine non è disponibile.
    • In pausa - l'origine è in pausa e API Connect non accetterà alcun file dal programma di raccolta.
  6. Facoltativo: è possibile fare clic sull'icona Opzioni L'icona delle opzioni è una serie di tre punti neri verticali su sfondo bianco. accanto a una fonte per modificarne lo stato.
    • Sospendi programma di raccolta - per sospendere l'origine.
    • Elimina programma di raccolta - per eliminare l'origine dalla IU di API Manager . I file di origine esterni non vengono eliminati.
    • Riprendi programma di raccolta - per riavviare un'origine in pausa o disabilitata.
  7. Facoltativo: puoi cliccare sull'icona "Gestisci colonne " L'icona Gestisci colonne è un contorno di una ruota in nero su uno sfondo bianco. nell'intestazione della tabella per modificare l'ordine e la visualizzazione delle colonne.

Risultati

Il tuo raccoglitore di origini dati OpenTelemetry è ora pronto per rilevare il traffico API. Quando il collector invia i primi documenti OpenAPI alla tua organizzazione provider, il collector viene elencato nella scheda Sources nella sezione Discover di API Manager.

Cosa fare successivamente

Puoi fare clic sulla scheda API nella sezione Rileva della IU API Manager ed esaminare il traffico API. Per ulteriori informazioni, consulta la sezione "Verifica delle API individuate".

Se necessario, puoi disinstallare il programma di raccolta da Helm immettendo il seguente comando:
helm template . | kubectl delete -f -