Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Las aplicaciones creadas a partir de Apache Kafka tienen necesidades de monitorización especializadas
nota
Esta solución no admite la supervisión de las aplicaciones Amazon Managed Streaming for Apache Kafka. Para obtener información sobre la supervisión de las aplicaciones de Amazon MSK, consulte Supervisar un clúster de Amazon MSK en la Guía para desarrolladores de Amazon Managed Streaming for Apache Kafka.
Esta solución configura:
-
Su espacio de trabajo de Amazon Managed Service for Prometheus para almacenar métricas de Kafka y Java Virtual Machine (JVM) de su clúster de Amazon EKS.
-
Recopile métricas específicas de Kafka y JVM mediante el CloudWatch agente, así como un complemento de agente. CloudWatch Las métricas están configuradas para enviarse al espacio de trabajo de Amazon Managed Service for Prometheus.
-
Su espacio de trabajo de Grafana gestionado por Amazon para obtener esas métricas y crear paneles que le ayuden a supervisar su clúster.
nota
Esta solución proporciona métricas de JVM y Kafka para la aplicación que se ejecuta en Amazon EKS, pero no incluye las métricas de Amazon EKS. Puede utilizar la solución Observability para monitorizar Amazon EKS y ver las métricas y alertas de su clúster de Amazon EKS.
Acerca de esta solución
Esta solución configura un espacio de trabajo de Grafana gestionado por Amazon para proporcionar métricas para su aplicación Apache Kafka. Las métricas se utilizan para generar paneles que le ayudan a operar su aplicación de manera más eficaz al proporcionar información sobre el rendimiento y la carga de trabajo de la aplicación Kafka.
La siguiente imagen muestra una muestra de uno de los paneles creados por esta solución.

Las métricas se recopilan con un intervalo de extracción de 1 minuto. Los paneles muestran las métricas agregadas en 1 minuto, 5 minutos o más, en función de la métrica específica.
Para obtener una lista de las métricas rastreadas por esta solución, consulte Lista de métricas rastreadas.
Costos
Esta solución crea y utiliza recursos en su espacio de trabajo. Se le cobrará por el uso estándar de los recursos creados, que incluyen:
-
Acceso de los usuarios al espacio de trabajo de Amazon Managed Grafana. Para obtener más información acerca de los precios, consulte Precios de Amazon Managed Grafana
. -
Amazon Managed Service para la ingesta y el almacenamiento de métricas de Prometheus y el análisis de métricas (procesamiento de muestras de consultas). La cantidad de métricas que utiliza esta solución depende de la configuración y el uso de la aplicación.
Puedes ver las métricas de ingesta y almacenamiento en Amazon Managed Service for Prometheus CloudWatch utilizando Para obtener más información, consulta las CloudWatchmétricas en la Guía del usuario de Amazon Managed Service for Prometheus.
Puede calcular el costo utilizando la calculadora de precios de la página Precios de Amazon Managed Service para Prometheus
. El número de métricas dependerá del número de nodos del clúster y de las métricas que generen las aplicaciones. -
Costos de red. Puede incurrir en cargos de AWS red estándar por tráfico cruzado de zonas de disponibilidad, región u otro tipo de tráfico.
Las calculadoras de precios, disponibles en la página de precios de cada producto, pueden ayudarlo a comprender los posibles costos de su solución. La siguiente información puede ayudar a obtener un costo base de la solución que se ejecuta en la misma zona de disponibilidad que el clúster de Amazon EKS.
Producto | Métrica de la calculadora | Valor |
---|---|---|
Servicio administrado por Amazon para Prometheus |
Serie activa |
95 (por cápsula de Kafka) |
Intervalo promedio de recopilación |
60 (segundos) |
|
Amazon Managed Grafana |
Número de editores o administradores activos |
1 (o más, en función de sus usuarios) |
Estos números son los números base de una solución que ejecuta Kafka en Amazon EKS. Esto le proporcionará una estimación de los costos base. A medida que añada los pods de Kafka a su aplicación, los costos aumentarán, como se muestra. Estos costos excluyen los costos de uso de la red, que variarán en función de si el espacio de trabajo de Grafana gestionado por Amazon, el espacio de trabajo de Amazon Managed Service for Prometheus y el clúster de Amazon EKS se encuentran en la misma zona de disponibilidad y la misma VPN. Región de AWS
Requisitos previos
Esta solución requiere que haya hecho lo siguiente antes de utilizarla.
-
Debe tener o crear un clúster de Amazon Elastic Kubernetes Service que desee supervisar y el clúster debe tener al menos un nodo. El clúster debe tener configurado el acceso al punto de conexión del servidor de API para incluir el acceso privado (también puede permitir el acceso público).
El modo de autenticación debe incluir el acceso a la API (se puede configurar en
API
oAPI_AND_CONFIG_MAP
). Esto permite que la implementación de la solución utilice entradas de acceso.Se debe instalar lo siguiente en el clúster (es cierto de forma predeterminada al crear el clúster a través de la consola, pero se debe añadir si se crea el clúster mediante la AWS API o AWS CLI): Amazon EKS Pod Identity Agent, AWS CNI, CoreDNS, Kube-proxy y controlador CSI de Amazon EBS AddOns (el controlador CSI de Amazon EBS no es técnicamente necesario para la solución, pero sí para la mayoría de las aplicaciones de Kafka). AddOn
Guarde el nombre del clúster para especificarlo más adelante. Puede consultarlo en los detalles del clúster en la consola de Amazon EKS.
nota
Para obtener más información sobre cómo crear un clúster de Amazon EKS, consulte Introducción a Amazon EKS.
-
Debe ejecutar una aplicación Apache Kafka en máquinas virtuales Java de su clúster de Amazon EKS.
-
Debe crear un espacio de trabajo de Amazon Managed Service for Prometheus en el mismo lugar que su clúster Cuenta de AWS de Amazon EKS. Para obtener más información, consulte Create a workspace en la Guía del usuario de Amazon Managed Service para Prometheus.
Guarde el ARN del espacio de trabajo de Amazon Managed Service para Prometheus para especificarlo más adelante.
-
Debe crear un espacio de trabajo de Grafana gestionado por Amazon con Grafana versión 9 o posterior, al igual que Región de AWS su clúster de Amazon EKS. Para obtener más información sobre la creación de un nuevo espacio de trabajo, consulte Creación de un espacio de trabajo de Amazon Managed Grafana.
El rol de espacio de trabajo debe tener permisos para acceder a Amazon Managed Service para Prometheus y Amazon. CloudWatch APIs La forma más sencilla de hacerlo es utilizar los permisos gestionados por el servicio y seleccionar Amazon Managed Service for Prometheus y. CloudWatch También puedes añadir manualmente las AmazonGrafanaCloudWatchAccesspolíticas AmazonPrometheusQueryAccessy a la función de IAM de tu espacio de trabajo.
Guarde el ID y el punto de conexión del espacio de trabajo de Amazon Managed Grafana para especificarlos más adelante. El ID tiene el formato
g-123example
. El ID y el punto de conexión se encuentran en la consola de Amazon Managed Grafana. El punto de conexión es la URL del espacio de trabajo e incluye el ID. Por ejemplo,https://g-123example.grafana-workspace.<region>.amazonaws.com/
.
nota
Si bien no es estrictamente obligatorio configurar la solución, debe configurar la autenticación de usuario en su espacio de trabajo de Amazon Managed Grafana antes de que los usuarios puedan acceder a los paneles creados. Para obtener más información, consulte Autenticación de usuarios en los espacios de trabajo de Amazon Managed Grafana.
Uso de esta solución
Esta solución configura la AWS infraestructura para admitir las métricas de informes y monitoreo de una aplicación de Kafka que se ejecuta en un clúster de Amazon EKS. Puede instalarla usando. AWS Cloud Development Kit (AWS CDK)
nota
En estos pasos se presupone que tiene un entorno con AWS CLI, y AWS CDK, y tanto Node.jsmake
y brew
para simplificar la compilación y otras acciones comunes.
Para usar esta solución para monitorear un clúster de Amazon EKS con AWS CDK
-
Asegúrese de que completar todos los pasos previos.
-
Descargue todos los archivos de la solución desde Amazon S3. Los archivos se encuentran en
s3://aws-observability-solutions/Kafka_EKS/OSS/CDK/v1.0.0/iac
y puede descargarlos con el siguiente comando de Amazon S3. Ejecute este comando desde una carpeta de su entorno de línea de comandos.aws s3 sync s3://aws-observability-solutions/Kafka_EKS/OSS/CDK/v1.0.0/iac/ .
No es necesario modificar estos archivos.
-
En su entorno de línea de comandos (desde la carpeta en la que descargó los archivos de la solución), ejecute los siguientes comandos.
Establezca las variables de entorno necesarias. Sustituya
REGION
AMG_ENDPOINT
EKS_CLUSTER
, yAMP_ARN
por su punto final de espacio de trabajo de Amazon Managed Grafana (en el formulariohttp://g-123example.grafana-workspace.us-east-1.amazonaws.com
) Región de AWS, el nombre del clúster de Amazon EKS y el ARN del espacio de trabajo de Amazon Managed Service for Prometheus.export AWS_REGION=
REGION
export AMG_ENDPOINT=AMG_ENDPOINT
export EKS_CLUSTER_NAME=EKS_CLUSTER
export AMP_WS_ARN=AMP_ARN
-
Debe crear anotaciones que la implementación pueda utilizar. Puede optar por anotar directamente un espacio de nombres, una implementación, un statefulset, un daemonset o sus pods. La solución de Kafka requiere cinco anotaciones. Utilizará
kubectl
para anotar sus recursos con los siguientes comandos:kubectl annotate
<resource-type>
<resource-value>
instrumentation.opentelemetry.io/inject-java=true kubectl annotate<resource-type>
<resource-value>
cloudwatch.aws.amazon.com/inject-jmx-jvm=true kubectl annotate<resource-type>
<resource-value>
cloudwatch.aws.amazon.com/inject-jmx-kafka=true kubectl annotate<resource-type>
<resource-value>
cloudwatch.aws.amazon.com/inject-jmx-kafka-producer=true kubectl annotate<resource-type>
<resource-value>
cloudwatch.aws.amazon.com/inject-jmx-kafka-consumer=trueSustituya
<resource-type>
y<resource-value>
por los valores correctos para su sistema. Por ejemplo, para anotar elfoo
despliegue, el primer comando sería:kubectl annotate deployment foo instrumentation.opentelemetry.io/inject-java=true
-
Cree un token de cuenta de servicio con acceso ADMIN para llamar a Grafana HTTP. APIs Para obtener más información, consulte Utilice cuentas de servicio para autenticarse con el HTTP de Grafana APIs. Puedes usarlo AWS CLI con los siguientes comandos para crear el token. Deberás sustituirlo por el
GRAFANA_ID
ID de tu espacio de trabajo de Grafana (aparecerá en el formulariog-123example
). Esta clave caducará después de 7200 segundos o 2 horas. Si es necesario, puede cambiar la hora (seconds-to-live
). La implementación tarda menos de una hora.# creates a new service account (optional: you can use an existing account) GRAFANA_SA_ID=$(aws grafana create-workspace-service-account \ --workspace-id
GRAFANA_ID
\ --grafana-role ADMIN \ --name grafana-operator-key \ --query 'id' \ --output text) # creates a new token for calling APIs export AMG_API_KEY=$(aws grafana create-workspace-service-account-token \ --workspace-id $managed_grafana_workspace_id \ --name "grafana-operator-key-$(date +%s)" \ --seconds-to-live 7200 \ --service-account-id $GRAFANA_SA_ID \ --query 'serviceAccountToken.key' \ --output text)Haz que la clave de API esté disponible para el AWS CDK agregándola AWS Systems Manager con el siguiente comando.
AWS_REGION
Sustitúyala por la región en la que se ejecutará la solución (en el formularious-east-1
).aws ssm put-parameter --name "/observability-aws-solution-kafka-eks/grafana-api-key" \ --type "SecureString" \ --value $AMG_API_KEY \ --region
AWS_REGION
\ --overwrite -
Ejecute el siguiente comando
make
, que instalará cualquier otra dependencia del proyecto.make deps
-
Por último, ejecute el AWS CDK proyecto:
make build && make pattern aws-observability-solution-kafka-eks-$EKS_CLUSTER_NAME deploy
-
[Opcional] Una vez finalizada la creación de la pila, puede utilizar el mismo entorno para crear más instancias de la pila para otras aplicaciones de Kafka que se ejecuten en clústeres de Amazon EKS de la misma región, siempre que cumpla los demás requisitos previos para cada una de ellas (incluidos los espacios de trabajo independientes de Amazon Managed Grafana y Amazon Managed Service for Prometheus). Deberá redefinir los comandos
export
con los nuevos parámetros.
Cuando se complete la creación de la pila, su espacio de trabajo de Grafana gestionado por Amazon se completará con un panel con las métricas de su aplicación y del clúster de Amazon EKS. Las métricas tardarán unos minutos en mostrarse, a medida que se recopilen.
Lista de métricas rastreadas
Esta solución recopila métricas de su aplicación Kafka basada en JVM. Estas métricas se almacenan en Amazon Managed Service para Prometheus y, después, se muestran en los paneles de Amazon Managed Grafana.
Con esta solución, se realiza un seguimiento de las siguientes métricas.
jvm.classes.loaded
jvm.gc.collections.count
jvm.gc.collections.ha transcurrido
jvm.memory.heap.init
jvm.memory.heap.max
jvm.memory.heap.used
jvm.memory.heap.committed
jvm.memory.nonheap.init
jvm.memory.nonheap.max
jvm.memory.nonheap.used
jvm.memory.nonheap.committed
jvm.memory.pool.init
jvm.memory.pool.max
jvm.memory.pool.used
jvm.memory.pool.committed
jvm.threads.count
kafka.message.count
kafka.request.count
kafka.request.failed
kafka.request.time.total
kafka.request.time.50p
kafka.request.time.99p
kafka.request.time.avg
kafka.network.io
kafka.purgatory.size
kafka.partition.count
kafka.partition.offline
kafka.partition.under_replicated
kafka.isr.operation.count
kafka.max.lag
kafka.controller.active.count
kafka.leader.election.rate
kafka.unclean.election.rate
kafka.request.queue
kafka.logs.flush.time.count
kafka.logs.flush.time.median
kafka.logs.flush.time.99p
kafka.consumer.fetch-rate
kafka.consumer. records-lag-max
kafka.consumer.total. bytes-consumed-rate
kafka.consumer.total. fetch-size-avg
kafka.consumer.total. records-consumed-rate
kafka.consumer. bytes-consumed-rate
kafka.consumer. fetch-size-avg
kafka.consumer. records-consumed-rate
kafka.productor. io-wait-time-ns-promedio
kafka.productor. outgoing-byte-rate
kafka.productor. request-latency-avg
kafka.producer.request rate
kafka.producer.ratio de respuesta
kafka.producer.byte-rate
kafka.producer.tasa de compresión
kafka.producer. record-error-rate
kafka.productor. record-retry-rate
kafka.productor. record-send-rate
Solución de problemas
Hay algunas cosas que pueden provocar un error en la configuración del proyecto. Asegúrese de revisar lo siguiente.
-
Debe cumplir todos los requisitos previos antes de instalar la solución.
-
El clúster debe tener al menos un nodo antes de intentar crear la solución o acceder a las métricas.
-
Su clúster de Amazon EKS debe tener instalados los complementos
AWS CNI
,CoreDNS
ykube-proxy
. Si no están instalados, la solución no funcionará correctamente. Se instalan de forma predeterminada al crear el clúster a través de la consola. Es posible que tengas que instalarlos si el clúster se creó mediante un AWS SDK. -
Se agotó el tiempo de espera para la instalación de los pods de Amazon EKS. Esto puede ocurrir si no hay suficiente capacidad de nodos disponible. Estos problemas se deben a varias causas, entre las que se incluyen las siguientes:
-
El clúster Amazon EKS se inicializó con Fargate en lugar de Amazon. EC2 Este proyecto requiere Amazon EC2.
-
Los nodos tienen taints y, por lo tanto, no están disponibles.
Puede utilizar
kubectl describe node
para comprobar las taints. Luego,NODENAME
| grep Taintskubectl taint node
para eliminar las taints. Asegúrese de incluirNODENAME
TAINT_NAME
--
después del nombre de la taint. -
Los nodos han alcanzado el límite de capacidad. En este caso, puede crear un nodo nuevo o aumentar la capacidad.
-
-
No ve ningún panel en Grafana: está utilizando un ID de espacio de trabajo de Grafana incorrecto.
Ejecute el siguiente comando para obtener información acerca de Grafana:
kubectl describe grafanas external-grafana -n grafana-operator
Puede comprobar los resultados para ver la URL del espacio de trabajo correcta. Si no es la que esperaba, vuelva a implementarla con el ID de espacio de trabajo correcto.
Spec: External: API Key: Key: GF_SECURITY_ADMIN_APIKEY Name: grafana-admin-credentials URL: https://
g-123example
.grafana-workspace.aws-region
.amazonaws.com Status: Admin URL: https://g-123example
.grafana-workspace.aws-region
.amazonaws.com Dashboards: ... -
No ve ningún panel en Grafana: está utilizando una clave de API caducada.
Para detectar esto, tendrá que usar el operador grafana y comprobar si hay errores en los registros. Obtenga el nombre del operador de Grafana con este comando:
kubectl get pods -n grafana-operator
Esto devolverá el nombre del operador, por ejemplo:
NAME READY STATUS RESTARTS AGE
grafana-operator-1234abcd5678ef90
1/1 Running 0 1h2mUtilice el nombre del operador en el siguiente comando:
kubectl logs
grafana-operator-1234abcd5678ef90
-n grafana-operatorLos mensajes de error como los siguientes indican que la clave de API ha caducado:
ERROR error reconciling datasource {"controller": "grafanadatasource", "controllerGroup": "grafana.integreatly.org", "controllerKind": "GrafanaDatasource", "GrafanaDatasource": {"name":"grafanadatasource-sample-amp","namespace":"grafana-operator"}, "namespace": "grafana-operator", "name": "grafanadatasource-sample-amp", "reconcileID": "72cfd60c-a255-44a1-bfbd-88b0cbc4f90c", "datasource": "grafanadatasource-sample-amp", "grafana": "external-grafana", "error": "status: 401, body: {\"message\":\"Expired API key\"}\n"} github.com/grafana-operator/grafana-operator/controllers.(*GrafanaDatasourceReconciler).Reconcile
En este caso, cree una nueva clave de API y vuelva a implementar la solución. Si el problema persiste, puede forzar la sincronización mediante el siguiente comando antes de volver a implementarlo:
kubectl delete externalsecret/external-secrets-sm -n grafana-operator
-
Falta el parámetro SSM. Si ve un error similar al siguiente, ejecute
cdk bootstrap
y vuelva a intentarlo.Deployment failed: Error: aws-observability-solution-kafka-eks-
$EKS_CLUSTER_NAME
: SSM parameter /cdk-bootstrap/xxxxxxx
/version not found. Has the environment been bootstrapped? Please run 'cdk bootstrap' (see https://docs.aws.amazon.com/cdk/latest/ guide/bootstrapping.html)