Personalización de Métricas de Istio
Esta tarea muestra cómo personalizar las métricas que genera Istio.
Istio genera telemetría que varios dashboards consumen para ayudarle a visualizar su malla. Por ejemplo, los dashboards que soportan Istio incluyen:
Por defecto, Istio define y genera un conjunto de métricas estándar (por ejemplo,
requests_total
), pero también puede personalizarlas y crear nuevas métricas
utilizando la API de Telemetría.
Antes de empezar
Instale Istio en su cluster y despliegue una application. Alternativamente, puede configurar estadísticas personalizadas como parte de la instalación de Istio.
La application de ejemplo Bookinfo se utiliza como application de ejemplo a lo largo de esta tarea. Para obtener instrucciones de instalación, consulte desplegar la application Bookinfo.
Habilitar métricas personalizadas
Para personalizar las métricas de telemetría, por ejemplo, para agregar las dimensiones request_host
y destination_port
a la métrica requests_total
emitida tanto por los
gateways como por los sidecars en la dirección de entrada y salida, use lo siguiente:
$ cat <<EOF > ./custom_metrics.yaml
apiVersion: telemetry.istio.io/v1
kind: Telemetry
metadata:
name: namespace-metrics
spec:
metrics:
- providers:
- name: prometheus
overrides:
- match:
metric: REQUEST_COUNT
tagOverrides:
destination_port:
value: "string(destination.port)"
request_host:
value: "request.host"
EOF
$ kubectl apply -f custom_metrics.yaml
Verificar los resultados
Envíe tráfico a la malla. Para la muestra de Bookinfo, visite http://$GATEWAY_URL/productpage
en su navegador web
o emita el siguiente comando:
$ curl "http://$GATEWAY_URL/productpage"
Use el siguiente comando para verificar que Istio genera los datos para sus nuevas o modificadas dimensiones:
$ kubectl exec "$(kubectl get pod -l app=productpage -o jsonpath='{.items[0].metadata.name}')" -c istio-proxy -- curl -sS 'localhost:15000/stats/prometheus' | grep istio_requests_total
Por ejemplo, en la salida, localice la métrica istio_requests_total
y
verifique que contiene su nueva dimensión.
Usar expresiones para valores
Los valores en la configuración de métricas son expresiones comunes, lo que significa que
debe entrecomillar las cadenas en JSON, por ejemplo, “‘string value’”. A diferencia del lenguaje de expresiones de Mixer,
no hay soporte para el operador pipe (|
), pero puede emularlo con el operador has
o in
, por ejemplo:
has(request.host) ? request.host : "unknown"
Para obtener más información, consulte Common Expression Language.
Istio expone todos los atributos estándar de Envoy.
Los metadatos de los peers están disponibles como atributos upstream_peer
para salida y downstream_peer
para entrada con los siguientes campos:
Campo | Tipo | Valor |
---|---|---|
app | string | Nombre de la application. |
version | string | Versión de la application. |
service | string | Instancia del service. |
revision | string | Versión del service. |
name | string | Nombre del pod. |
namespace | string | Namespace en el que se ejecuta el pod. |
type | string | Tipo de workload. |
workload | string | Nombre del workload. |
cluster | string | Identificador del cluster al que pertenece este workload. |
Por ejemplo, la expresión para la etiqueta app
del peer que se utilizará en una configuración de salida es
filter_state.downstream_peer.app
o filter_state.upstream_peer.app
.
Limpieza
Para eliminar la application de ejemplo Bookinfo
y su configuración, consulte
limpieza de Bookinfo
.