Service Mesh (ASM) ofrece opciones de configuración de observability para registros, métricas y trazabilidad. Desde la consola de ASM es posible personalizar estas opciones de forma global, por namespace o para una carga de trabajo específica. Por ejemplo, se puede definir el formato de salida de los registros, agregar dimensiones a las métricas, habilitar o deshabilitar métricas específicas y establecer el porcentaje de muestreo de la trazabilidad. En este tema se describe cómo usar Observability Settings.
Requisitos previos
Se requiere una instancia de ASM versión 1.17.2.35 o posterior. Para obtener más información, consulte Create an ASM instance o Upgrade an ASM instance.
Ámbitos
|
Tipo |
Descripción |
|
Global |
Una configuración global admite ajustes de registros, métricas y trazabilidad. Solo existe una configuración global y no se puede eliminar. Los ajustes de trazabilidad solo son compatibles con el ámbito global. |
|
Namespace |
Permite crear una configuración de observability dedicada para un namespace. Cada namespace solo puede tener una configuración de observability a nivel de namespace. |
|
Custom |
Una configuración personalizada utiliza un selector de etiquetas para definir su ámbito. Cada carga de trabajo puede seleccionarse mediante una sola configuración personalizada como máximo. |
Procedimiento
Global
Inicie sesión en la consola de ASM. En el panel de navegación izquierdo, elija .
En la página Mesh Management, haga clic en el nombre de la instancia de ASM. En el panel de navegación izquierdo, elija .
-
En la página Observability Settings, haga clic en la pestaña Global. Configure los registros, las métricas y la trazabilidad según sus necesidades y, a continuación, haga clic en Submission.
Haga clic en los enlaces de la siguiente tabla para consultar las descripciones detalladas de las configuraciones.
Sección de configuración
Descripción
Namespace
Inicie sesión en la consola de ASM. En el panel de navegación izquierdo, elija .
En la página Mesh Management, haga clic en el nombre de la instancia de ASM. En el panel de navegación izquierdo, elija .
-
En la página Observability Settings, haga clic en la pestaña Namespace y luego en Create. Seleccione el Namespace de destino, configure los registros y las métricas según sus necesidades y, a continuación, haga clic en Create.
Haga clic en los enlaces de la siguiente tabla para consultar las descripciones detalladas de las configuraciones.
Sección de configuración
Descripción
Custom
Inicie sesión en la consola de ASM. En el panel de navegación izquierdo, elija .
En la página Mesh Management, haga clic en el nombre de la instancia de ASM. En el panel de navegación izquierdo, elija .
-
En la página Observability Settings, haga clic en la pestaña Custom, seleccione el Namespace de destino y haga clic en Create. Introduzca un Name y un Label selector, configure los registros y las métricas según sus necesidades y, a continuación, haga clic en Create.
Haga clic en los enlaces de la siguiente tabla para consultar las descripciones detalladas de las configuraciones.
Sección de configuración
Descripción
Configuración de registros
La configuración de registros incluye habilitar o deshabilitar la salida del registro de acceso, establecer el formato de salida, personalizar dicho formato y filtrar los registros.
Salida del registro de acceso
-
En la sección Log Settings, active o desactive el interruptor Enable Log Output según sus necesidades.
Si habilita esta opción, los sidecars o gateways del plano de datos envían los registros de acceso a la salida estándar (stdout) del contenedor.
Si deshabilita esta opción, los sidecars o gateways del plano de datos dejan de enviar registros al stdout del contenedor.
-
Consulte los registros en el stdout del contenedor sidecar del plano de datos.
A continuación se muestra cómo consultar los registros de acceso mediante kubectl.
-
Ejecute el siguiente comando para consultar los registros del sidecar:
kubectl logs httpbin-5c5944c58c-w**** -c istio-proxy --tail 1 -
Ejecute el siguiente comando para consultar los registros del gateway de entrada:
kubectl -n istio-system logs istio-ingressgateway-6cff9b6b58-r**** --tail 1
-
-
(Opcional) Consulte los registros de acceso en la consola de Container Service for Kubernetes.
Si utiliza un clúster de Alibaba Cloud Container Service for Kubernetes (ACK), también puede consultar los registros de acceso en la consola de ACK.
Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.
En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en .
En la página Pods, haga clic en el nombre del pod de destino y, a continuación, haga clic en la pestaña Logs en la parte inferior de la página para consultar los registros de acceso.
Formato de salida de los registros
Esta función requiere una instancia de ASM versión 1.20.6.36 o posterior. Para obtener más información sobre cómo actualizar una instancia, consulte Upgrade an ASM instance.
En la sección Log Settings, establezca Log Output Format en JSON o TEXT según sus necesidades.
Si selecciona JSON, los registros de acceso se envían al stdout del contenedor como cadenas JSON.
Si selecciona TEXT, los registros de acceso se envían al stdout del contenedor como cadenas de texto sin formato.
Formato de registro personalizado
-
En la sección Log Settings, seleccione campos, modifique la información de los campos personalizados o haga clic en el icono
en la parte inferior de la lista de campos de registro para agregar un nuevo campo.El formato de registro solo se puede personalizar cuando el interruptor Enable Log Output está activado. En la sección Log Format, los campos de registro seleccionados de forma predeterminada son obligatorios y no se pueden deseleccionar. Los valores de los campos de registro se pueden obtener de los encabezados de solicitud, de los encabezados de respuesta o de los valores integrados de Envoy.
Por ejemplo, para registrar el encabezado de solicitud
accept-encoding, establezca accessLogFormat key en accept-encoding, Type en Request Properties y accessLogFormat value en Accept-Encoding. La plantilla de formato para un encabezado de solicitud es%REQ(HEADER_NAME)%(por ejemplo,%REQ(:AUTHORITY)%), para un encabezado de respuesta es%RESP(HEADER_NAME)%(por ejemplo,%RESP(X-ENVOY-UPSTREAM-SERVICE-TIME)%) y para un atributo integrado de Envoy es%ATTRIBUTE_NAME%(por ejemplo,%REQUEST_DURATION%). -
Ejecute el siguiente comando para consultar los registros de los componentes del plano de datos en la service mesh.
kubectl logs httpbin-5c5944c58c-w**** -c istio-proxy --tail 1|grep accept-encoding --color=autoAhora el registro de acceso muestra el valor del encabezado Accept-Encoding que agregó en step 1.
Filtrado de registros
En la sección Log Settings, seleccione Enable Log Filter para activar el filtrado de registros y, a continuación, introduzca una expresión de filtrado en el cuadro de texto. Los registros de acceso solo se generan para las solicitudes que coinciden con la expresión.
Por ejemplo, para registrar únicamente las solicitudes que cumplen la condición Response Http Status >= 400, utilice la expresión response.code >= 400. Para obtener más información, consulte CEL expressions and common fields.
Expresiones CEL y campos comunes
Las expresiones de filtrado de registros son expresiones estándar de Common Expression Language (CEL). En la siguiente tabla se enumeran los campos comunes para las expresiones CEL. Para obtener más información, consulte la documentación oficial de CEL y Envoy.
|
Atributo |
Tipo |
Descripción |
|
request.path |
string |
La ruta de la solicitud. |
|
request.url_path |
string |
La ruta de la solicitud sin la cadena de consulta. |
|
request.host |
string |
La parte del host de la URL. |
|
request.method |
string |
El método de la solicitud. |
|
request.headers |
map<string, string> |
Todos los encabezados de solicitud, indexados por sus nombres en minúsculas. |
|
request.useragent |
string |
El valor del encabezado User-Agent. |
|
request.time |
timestamp |
La hora en la que se recibe el primer byte de la solicitud. |
|
request.id |
string |
El identificador de la solicitud. |
|
request.protocol |
string |
El protocolo de la solicitud. Valores válidos: |
|
request.query |
string |
La cadena de consulta de la URL de la solicitud. |
|
response.code |
int |
El código de estado HTTP de la respuesta. |
|
response.code_details |
string |
Detalles sobre el código de respuesta. |
|
response.grpc_status |
int |
El código de estado gRPC en la respuesta. |
|
response.headers |
map<string, string> |
Todos los encabezados de respuesta, indexados por sus nombres en minúsculas. |
|
response.size |
int |
El tamaño del cuerpo de la respuesta en bytes. |
|
response.total_size |
int |
El tamaño total del mensaje de respuesta en bytes, incluidos el cuerpo y los encabezados. |
Configuración de métricas
La configuración de métricas incluye habilitar o deshabilitar la generación de métricas y configurar sus dimensiones.
Generación de métricas
Las métricas se clasifican en métricas del lado del cliente y métricas del lado del servidor.
Métricas del lado del cliente: métricas generadas cuando un sidecar actúa como cliente para iniciar solicitudes. Las métricas de gateway también se clasifican como métricas del lado del cliente.
Métricas del lado del servidor: métricas generadas cuando un sidecar actúa como servidor para recibir solicitudes.
-
En la sección Metric Settings, dentro de la columna Client-Side Metrics o Server-Side Metrics, seleccione o desmarque la casilla Enabled de una métrica según sus necesidades.
Si una métrica está habilitada, el sidecar o gateway del plano de datos expone dicha métrica a través de la ruta
/stats/prometheusen el puerto 15020.Si una métrica está deshabilitada, no se expone en el puerto ni en la ruta especificados.
-
Ejecute el siguiente comando para consultar las métricas que expone un sidecar o gateway.
Con kubectl puede ejecutar un comando curl dentro del contenedor del sidecar o gateway para acceder a la ruta
/stats/prometheusen el puerto local 15020 y consultar las métricas exportadas.kubectl exec httpbin-5c5944c58c-w**** -c istio-proxy -- curl 127.0.0.1:15020/stats/prometheus|head -n 10Ejemplo de salida:
# TYPE istio_agent_cert_expiry_seconds gauge istio_agent_cert_expiry_seconds{resource_name="default"} 46725.287654548 # HELP istio_agent_endpoint_no_pod Endpoints without an associated pod. # TYPE istio_agent_endpoint_no_pod gauge istio_agent_endpoint_no_pod 0 # HELP istio_agent_go_gc_duration_seconds A summary of the pause duration of garbage collection cycles. # TYPE istio_agent_go_gc_duration_seconds summary istio_agent_go_gc_duration_seconds{quantile="0"} 5.0149e-05 istio_agent_go_gc_duration_seconds{quantile="0.25"} 9.8807e-05 ......
Dimensiones de métricas
Las dimensiones de métricas proporcionan información contextual detallada. Estas dimensiones permiten filtrar las métricas de destino en Prometheus. Por ejemplo, la dimensión source_app sirve para filtrar las métricas de las solicitudes provenientes de una aplicación cliente específica.
Editar las dimensiones predeterminadas
Siga estos pasos para editar las dimensiones predeterminadas:
En la sección Metric Settings, dentro de la columna Client-Side Metrics o Server-Side Metrics, haga clic en Edit dimension para una métrica habilitada.
En el cuadro de diálogo Customize CLIENT dimension configuration o Customize SERVER dimension configuration, seleccione o desmarque las casillas de las dimensiones que desea exportar y, a continuación, haga clic en Confirm.
Por ejemplo, si no hay dimensiones deshabilitadas, ejecute un comando curl dentro del contenedor del sidecar o gateway para acceder a la ruta /stats/prometheus en el puerto local 15020 y consultar las métricas exportadas.
kubectl exec httpbin-5c5944c58c-w**** -c istio-proxy -- curl 127.0.0.1:15020/stats/prometheus
Si tomamos como ejemplo la métrica istio_request_bytes_sum (que corresponde a la métrica REQUEST_SIZE en la consola), se observa que incluye todas las dimensiones de forma predeterminada.
istio_request_bytes_sum{reporter="destination",source_workload="istio-ingressgateway",source_canonical_service="unknown",source_canonical_revision="latest",source_workload_namespace="istio-system",source_principal="spiffe://cluster.local/ns/istio-system/sa/istio-ingressgateway",source_app="istio-ingressgateway",source_version="unknown",source_cluster="c479fc4abd2734bfaaa54e9e36fb26c01",destination_workload="httpbin",destination_workload_namespace="default",destination_principal="spiffe://cluster.local/ns/default/sa/httpbin",destination_app="httpbin",destination_version="v1",destination_service="httpbin.default.svc.cluster.local",destination_canonical_service="httpbin",destination_canonical_revision="v1",destination_service_name="httpbin",destination_service_namespace="default",destination_cluster="c479fc4abd2734bfaaa54e9e36fb26c01",request_protocol="http",response_code="200",grpc_response_status="",response_flags="-",connection_security_policy="mutual_tls"} 18000
Si modifica la métrica REQUEST_SIZE del lado del servidor predeterminada para conservar únicamente la dimensión response_code y luego accede a la ruta /stats/prometheus, verá que la métrica ahora incluye solo la dimensión response_code.
istio_request_bytes_sum{response_code="200"} 16550
Agregar dimensiones personalizadas
Siga estos pasos para agregar dimensiones personalizadas:
En la sección Metric Settings, dentro de la columna Client-Side Metrics o Server-Side Metrics, haga clic en Edit dimension para una métrica habilitada.
En el cuadro de diálogo Customize CLIENT dimension configuration o Customize SERVER dimension configuration, en la opción Custom Dimensions, edite el nombre y el valor de la dimensión y, a continuación, haga clic en Confirm.
Por ejemplo, si edita la métrica REQUEST_SIZE del lado del servidor y agrega una dimensión personalizada con el nombre request_path y el valor request.path, la métrica exportada incluirá la dimensión personalizada request_path cuando acceda a la ruta /stats/prometheus.
istio_request_bytes_sum{response_code="200",request_path="/spec.json"} 5800
El consumo de memoria de Envoy y Prometheus se reduce al eliminar las dimensiones predeterminadas innecesarias. Sin embargo, dado que la mayoría de las dimensiones suelen ser útiles, la sección Metric Settings solo muestra las dimensiones que eliminó de forma explícita.
Configuración de trazabilidad
La configuración de trazabilidad incluye el porcentaje de muestreo y las etiquetas personalizadas. Para construir cadenas de llamadas completas, la trazabilidad requiere configuraciones de reporte consistentes en todos los servicios. Los endpoints de reporte o las tasas de muestreo inconsistentes pueden generar trazas incompletas. Por este motivo, las versiones de ASM anteriores a la 1.24.6.83 no permiten configuraciones de trazabilidad a nivel de namespace o de carga de trabajo. A partir de la versión 1.24.6.83, ASM permite modificar recursos Telemetry mediante la API de Kubernetes para habilitar configuraciones de trazabilidad a nivel de namespace y de carga de trabajo. Para obtener más información sobre cómo configurar recursos Telemetry, consulte Telemetry CRD.
Porcentaje de muestreo
Es posible personalizar el porcentaje de muestreo de la trazabilidad, el cual determina el porcentaje de solicitudes para las que se generan trazas. Un valor de 0 deshabilita la trazabilidad.
Etiquetas personalizadas
Las etiquetas adjuntas a los spans de trazabilidad reportados se pueden personalizar. En la sección Tracing Analysis Settings, haga clic en Add Custom Tags y, a continuación, configure Name, Type y Value.
Los tipos válidos incluyen Fixed Value, Request Header y Environment Variable. En la siguiente tabla se describe cada tipo y se proporcionan ejemplos.
|
Tipo |
Descripción |
Configuración de ejemplo |
|
Fixed Value |
El valor de la etiqueta se fija en la cadena que especifique. |
|
|
Request Header |
La etiqueta utiliza el valor de un encabezado de solicitud específico. Si el encabezado no existe en la solicitud, se usa el valor predeterminado. Por ejemplo, el valor de la etiqueta se puede obtener del encabezado |
|
|
Environment Variable |
La etiqueta utiliza el valor de una variable de entorno específica de la carga de trabajo. Si la variable de entorno no existe en la carga de trabajo, se usa el valor predeterminado. Por ejemplo, el valor de la etiqueta se puede obtener de la variable de entorno |
|