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.
Solución para monitorizar aplicaciones JVM con Amazon Managed Grafana
Las aplicaciones creadas con máquinas virtuales Java (JVM) tienen necesidades de supervisión especializadas. En esta página se describe una plantilla que proporciona una solución para supervisar las aplicaciones basadas en JVM que se ejecutan en su clúster de Amazon EKS. La solución se puede instalar mediante. AWS Cloud Development Kit (AWS CDK)
nota
Esta solución proporciona supervisión para una aplicación JVM. Si su aplicación JVM es específicamente una aplicación de Apache Kafka, puede optar por utilizar la solución de supervisión de Kafka, que incluye la supervisión de JVM y de Kafka.
Esta solución configura:
-
Su espacio de trabajo de Amazon Managed Service for Prometheus para almacenar métricas de máquinas virtuales Java (JVM) de su clúster de Amazon EKS.
-
Recopilación de métricas específicas de JVM mediante el CloudWatch agente y 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 para la aplicación que se ejecuta en Amazon EKS, pero no incluye las métricas de Amazon EKS. Además, 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 de máquina virtual Java (JVM). Las métricas se utilizan para generar paneles de control que le ayudan a operar su aplicación de manera más eficaz, ya que proporcionan información sobre el estado y el rendimiento de la aplicación.
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 for Prometheus: ingesta y almacenamiento de métricas y 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 |
50 (por módulo de aplicación) |
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 aplicación JVM que se ejecuta en Amazon EKS. Esto le proporcionará una estimación de los costos base. A medida que añada pods 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
APIoAPI_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 algunas aplicaciones de AddOn JVM).
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 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 máquina virtual Java (JVM) 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 y AWS CLI 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/JVM_EKS/OSS/CDK/v1.0.0/iacy 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/JVM_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
REGIONAMG_ENDPOINTEKS_CLUSTER, yAMP_ARNpor 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=REGIONexport AMG_ENDPOINT=AMG_ENDPOINTexport EKS_CLUSTER_NAME=EKS_CLUSTERexport AMP_WS_ARN=AMP_ARN -
Cree anotaciones que la solució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 JSM requiere dos anotaciones. Utilizará
kubectlpara 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=trueSustituya
<resource-type>y<resource-value>por los valores correctos para su sistema. Por ejemplo, para anotar elfoodespliegue, 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 Uso de 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_IDID 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-idGRAFANA_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_REGIONSustitú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-jvm-eks/grafana-api-key" \ --type "SecureString" \ --value $AMG_API_KEY \ --regionAWS_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-jvm-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 JVM 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
exportcon 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 las métricas de su aplicación 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
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,CoreDNSykube-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 SDK. AWS -
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 nodepara comprobar las taints. Luego,NODENAME| grep Taintskubectl taint nodepara eliminar las taints. Asegúrese de incluirNODENAMETAINT_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-operatorPuede 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-operatorEsto devolverá el nombre del operador, por ejemplo:
NAME READY STATUS RESTARTS AGEgrafana-operator-1234abcd5678ef901/1 Running 0 1h2mUtilice el nombre del operador en el siguiente comando:
kubectl logsgrafana-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).ReconcileEn 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 bootstrapy vuelva a intentarlo.Deployment failed: Error: aws-observability-solution-jvm-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)