ASMExtensionProvider est une définition de ressource personnalisée (CRD) qui configure les backends de télémétrie pour Alibaba Cloud Service Mesh (ASM). Chaque ressource ASMExtensionProvider correspond à un service backend tel que Zipkin, OpenTelemetry ou un journal d'accès Envoy basé sur des fichiers.
Pour activer un fournisseur, référencez-le par son nom dans une ressource Telemetry CRD.
Prérequis
Le champ name du fournisseur doit correspondre à un service Kubernetes accessible au sein du maillage. Pour les services externes, enregistrez-les d'abord via une ressource ServiceEntry.
Le champ service utilise le format de nom de domaine complet (FQDN) : <service-name>.<namespace>.svc.cluster.local. Pour référencer un service situé dans un autre namespace, incluez le namespace dans le FQDN.
Exemples
Envoyer les traces vers Zipkin
apiVersion: istio.alibabacloud.com/v1
kind: ASMExtensionProvider
metadata:
name: zipkin
spec:
zipkin:
port: 8090
service: zipkin.istio-system.svc.cluster.local
Personnaliser le format des journaux d'accès Envoy
Définissez un format de journal JSON personnalisé pour les journaux d'accès du proxy Envoy et envoyez la sortie vers stdout :
apiVersion: istio.alibabacloud.com/v1
kind: ASMExtensionProvider
metadata:
name: envoy
spec:
envoyFileAccessLog:
logFormat:
text: '{"bytes_received":"%BYTES_RECEIVED%","bytes_sent":"%BYTES_SENT%","downstream_local_address":"%DOWNSTREAM_LOCAL_ADDRESS%","downstream_remote_address":"%DOWNSTREAM_REMOTE_ADDRESS%","duration":"%DURATION%","istio_policy_status":"%DYNAMIC_METADATA(istio.mixer:status)%","method":"%REQ(:METHOD)%","path":"%REQ(X-ENVOY-ORIGINAL-PATH?:PATH)%","protocol":"%PROTOCOL%","request_id":"%REQ(X-REQUEST-ID)%","requested_server_name":"%REQUESTED_SERVER_NAME%","response_code":"%RESPONSE_CODE%","response_flags":"%RESPONSE_FLAGS%","route_name":"%ROUTE_NAME%","start_time":"%START_TIME%","trace_id":"%REQ(X-B3-TRACEID)%","upstream_cluster":"%UPSTREAM_CLUSTER%","upstream_host":"%UPSTREAM_HOST%","upstream_local_address":"%UPSTREAM_LOCAL_ADDRESS%","upstream_service_time":"%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%","upstream_response_time":"%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%","upstream_transport_failure_reason":"%UPSTREAM_TRANSPORT_FAILURE_REASON%","user_agent":"%REQ(USER-AGENT)%","x_forwarded_for":"%REQ(X-FORWARDED-FOR)%","authority_for":"%REQ(:AUTHORITY)%"}'
path: /dev/stdout
La chaîne de format utilise les opérateurs de commande d'Envoy, tels que %RESPONSE_CODE% et %DURATION%. N'incluez que les champs pertinents pour votre cas d'utilisation. L'exemple ci-dessus présente un modèle complet.
Router les traces vers différents backends selon le cluster
Utilisez un fournisseur agrégé pour envoyer les données de traçage de clusters spécifiques vers des backends désignés. Dans l'exemple suivant, le cluster cluster-a envoie ses traces à Zipkin, tandis que tous les autres clusters utilisent OpenTelemetry.
Important
Le fournisseur agrégé nécessite une version ASM 1.22.6.89 ou ultérieure.
Étape 1 : Définissez le fournisseur agrégé ainsi que les fournisseurs de traçage individuels.
apiVersion: istio.alibabacloud.com/v1
kind: ASMExtensionProvider
metadata:
name: aggregate-provider
spec:
aggregate:
defaultProvider:
name: opentelemetry
uniqueProviders:
- clusters:
- id: cluster-a
region: cn-hangzhou
provider:
name: zipkin
---
apiVersion: istio.alibabacloud.com/v1
kind: ASMExtensionProvider
metadata:
name: zipkin
spec:
zipkin:
port: 8090
service: zipkin.istio-system.svc.cluster.local
---
apiVersion: istio.alibabacloud.com/v1
kind: ASMExtensionProvider
metadata:
name: opentelemetry
spec:
opentelemetry:
port: 8090
service: otel.istio-system.svc.cluster.local
Étape 2 : Référencez les fournisseurs dans une ressource Telemetry CRD pour les activer.
apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
name: default
namespace: istio-system
spec:
accessLogging:
- disabled: false
providers:
- name: envoy
tracing:
- providers:
- name: zipkin
Référence des champs
ASMExtensionProvider
Chaque ressource ASMExtensionProvider contient exactement une configuration de fournisseur. Définissez le champ correspondant à votre backend cible.
ZipkinTracingProvider
| Champ |
Type |
Obligatoire |
Description |
service |
string |
Oui |
FQDN du service Zipkin. Exemple : zipkin.istio-system.svc.cluster.local. |
path |
string |
Oui |
Chemin du point de terminaison API pour le service Zipkin. |
port |
uint32 |
Non |
Port du service Zipkin. |
maxTagLength |
uint32 |
Non |
Longueur maximale en caractères par tag. Valeur par défaut : 256. |
LightstepTracingProvider
| Champ |
Type |
Obligatoire |
Description |
service |
string |
Oui |
FQDN du service Lightstep. |
port |
uint32 |
Oui |
Port du service Lightstep. |
accesstoken |
string |
Non |
Jeton d'accès pour l'authentification auprès de Lightstep. |
maxTagLength |
uint32 |
Non |
Longueur maximale en caractères par tag. Valeur par défaut : 256. |
DatadogTracingProvider
| Champ |
Type |
Obligatoire |
Description |
service |
string |
Oui |
FQDN du service de l'agent Datadog. |
port |
uint32 |
Oui |
Port du service de l'agent Datadog. |
maxTagLength |
uint32 |
Non |
Longueur maximale en caractères par tag. Valeur par défaut : 256. |
StackdriverProvider
| Champ |
Type |
Obligatoire |
Description |
maxTagLength |
uint32 |
Non |
Longueur maximale en caractères par tag. Valeur par défaut : 256. |
logging |
StackdriverProvider_Logging |
Non |
Configuration de la journalisation pour Stackdriver. Voir StackdriverProvider_Logging. |
OpenCensusAgentTracingProvider
| Champ |
Type |
Obligatoire |
Description |
service |
string |
Oui |
FQDN du service de l'agent OpenCensus. |
port |
uint32 |
Oui |
Port du service de l'agent OpenCensus. |
context |
[]string |
Non |
En-têtes de propagation du contexte de trace. Valeur par défaut : ["W3C_TRACE_CONTEXT"]. |
maxTagLength |
uint32 |
Non |
Longueur maximale en caractères par tag. Valeur par défaut : 256. |
SkywalkingTracingProvider
| Champ |
Type |
Obligatoire |
Description |
service |
string |
Oui |
FQDN du service Skywalking. |
port |
uint32 |
Oui |
Port du service Skywalking. |
OpenTelemetryProvider
| Champ |
Type |
Obligatoire |
Description |
service |
string |
Oui |
FQDN du service du collecteur OpenTelemetry. |
port |
uint32 |
Oui |
Port du service du collecteur OpenTelemetry. |
maxTagLength |
uint32 |
Non |
Longueur maximale en caractères par tag. Valeur par défaut : 256. |
grpc |
OpenTelemetryProvider_GrpcService |
Non |
Configuration du transport gRPC. Voir OpenTelemetryProvider_GrpcService. |
http |
OpenTelemetryProvider_HttpService |
Non |
Configuration du transport HTTP. Si ce champ est omis, gRPC est utilisé par défaut. Voir OpenTelemetryProvider_HttpService. |
EnvoyFileAccessLogProvider
| Champ |
Type |
Obligatoire |
Description |
path |
string |
Non |
Chemin du fichier pour la sortie des journaux. Exemple : /dev/stdout. |
logFormat |
EnvoyFileAccessLogProvider_LogFormat |
Non |
Format de sortie des journaux. Prend en charge text ou labels (JSON). Voir EnvoyFileAccessLogProvider_LogFormat. |
AggregateProvider
| Champ |
Type |
Obligatoire |
Description |
defaultProvider |
ProviderRef |
Oui |
Fournisseur utilisé pour les clusters qui ne correspondent à aucune entrée dans uniqueProviders. |
uniqueProviders |
[]UniqueProvider |
Non |
Assignations de fournisseurs par cluster. Voir UniqueProvider. |
UniqueProvider
| Champ |
Type |
Obligatoire |
Description |
provider |
ProviderRef |
Non |
Fournisseur à utiliser pour les clusters spécifiés. Voir ProviderRef. |
clusters |
[]ClusterRef |
Non |
Clusters assignés à ce fournisseur. Voir ClusterRef. |
StackdriverProvider_Logging
| Champ |
Type |
Obligatoire |
Description |
labels |
map[string]string |
Non |
Noms de libellés et expressions inclus dans les entrées de journal. Exemple : path: request.url_path. |
OpenTelemetryProvider_HttpService
| Champ |
Type |
Obligatoire |
Description |
path |
string |
Oui |
Chemin du point de terminaison API du service de collecte. |
timeout |
string |
Non |
Délai d'expiration pour les requêtes HTTP. |
headers |
[]HeaderValue |
Non |
En-têtes HTTP personnalisés ajoutés à chaque requête. Voir HeaderValue. |
OpenTelemetryProvider_GrpcService
| Champ |
Type |
Obligatoire |
Description |
timeout |
string |
Non |
Délai d'expiration pour les requêtes gRPC. |
initialMetaData |
[]HeaderValue |
Non |
En-têtes de métadonnées personnalisés ajoutés à chaque requête gRPC. Voir HeaderValue. |
HeaderValue
| Champ |
Type |
Obligatoire |
Description |
name |
string |
Oui |
Nom de l'en-tête. |
value |
string |
Oui |
Valeur de l'en-tête. |
EnvoyFileAccessLogProvider_LogFormat
Spécifiez le format du journal sous forme de texte brut ou de JSON structuré. Utilisez les opérateurs de commande d'Envoy pour référencer les attributs des requêtes et des réponses.
| Champ |
Type |
Obligatoire |
Description |
text |
string |
Non |
Format de journal en texte brut. Exemple : "%LOCAL_REPLY_BODY%:%RESPONSE_CODE%:path=%REQ(:path)%". |
labels |
map[string]string |
Non |
Format de journal structuré en JSON. Exemple : status: "%RESPONSE_CODE%", message: "%LOCAL_REPLY_BODY%". |
ProviderRef
| Champ |
Type |
Obligatoire |
Description |
name |
string |
Non |
Nom de la ressource ASMExtensionProvider à référencer. |
ClusterRef
| Champ |
Type |
Obligatoire |
Description |
id |
string |
Oui |
ID du cluster. |
name |
string |
Non |
Nom du cluster. |
region |
string |
Non |
Région où le cluster est déployé. |