Azure monitoring | Cómo enviar métricas customizadas de un recurso Azure a Azure Monitor usando una REST API

En el mundo actual, las métricas desempeñan un papel clave para ayudarnos a comprender el rendimiento de nuestras aplicaciones, servicios y la infraestructura en la que se ejecutan. Pueden ayudarnos a detectar, investigar y diagnosticar problemas incluso antes de que surjan. Azure Monitor permite supervisar el comportamiento de nuestros recursos disponibles. Sin embargo, muchos de nosotros necesitamos recopilar métricas adicionales.

Con Azure Monitor no solo podemos monitorizar las métricas que llegan procedentes de los diferentes recursos administrados. También es posible enviar nuestras propias métricas a medida desde nuestras aplicaciones a Azure Monitor usando su REST API. 

Para verlo más claro en este artículo vamos a dibujar un sencillo ejemplo. Una vez que las métricas están ya en Azure Monitor, podemos hacer todas las cosas con ellas que solemos hacer con las métricas estándar. Como por ejemplo, la creación de gráficos, alertas y el enrutamiento a otras herramientas externas.

Prerrequisitos

En los siguientes enlaces encontrarás muy buena y detallada información en relación a las Custom Metrics y cómo podemos interactuar con Azure Monitor mediante su API Rest:

También para este ejemplo necesitamos crear un nuevo recurso. Por ejemplo, yo he creado una nueva instancia de WordPress, que será más que suficiente para nuestro propósito:

  1. Accede a Azure portal.
  2. Una vez allí, selecciona Create a resource.
  3. Busca por WordPress y procede a crear un nuevo recurso siguiendo las siguientes capturas de pantalla. 

Instrucciones

En este ejemplo, crearemos y registramos una aplicación con Azure AD y crearemos un servicio:

  1. Accederemos a Azure portal.
  2. Una vez allí buscaremos y accederemos a Azure Active Directory.
  3. En el panel de Azure Active Directory haremos scroll down hasta la sección Manage, haremos click sobre App registrations, y click sobre New registration

Necesitaremos tomar nota de los valores de ID de aplicación y de inquilino (tenant) para iniciar sesión. Una vez hecho esto, en la hoja de registros de la aplicación de Azure, seleccionaremos nuestra aplicación y tomaremos nota de los valores que aparecen a continuación. Posteriormente, necesitamos los datos relacionados con la identificación del inquilino y la identificación del cliente.

En la misma sección, nos desplazamos hacia abajo hasta la sección Manage, hacemos clic en Certificates & secrets y hacemos clic en "New Client Secret" de la siguiente manera.

Hay que tener en cuenta que una vez que se genera la clave secreta del cliente, debemos tomar nota del valor y la Secret ID de inmediato. La razón de esto es porque solo tenemos esa oportunidad de tomar nota de estos valores. 

El siguiente paso consiste en asignar un rol a nuestra aplicación. Esto es importante porque de este modo asignaremos los permisos necesarios.

Una vez aquí, haremos de nuevo scroll down y en la sección Overview haremos click en Access control (IAM), y click en Add role assignment.

Una vez salvemos los cambios ya podemos continuar con los siguientes pasos. 

Ahora necesitamos obtener el token de autorización. Una forma para obtenerlo es abrir el Azure cloud shell y abrir una sesión en bash.

Tomando el siguiente comando como ejemplo generamos un ID de token de autorización para permitir la comunicación en nuestra aplicación con Azure.

curl -X POST https://login.microsoftonline.com/<yourtenantid>/oauth2/token -F "grant_type=client_credentials" -F "client_id=<insert clientId from earlier step>" -F "client_secret=<insert client secret from earlier step>" -F "resource=https://monitoring.azure.com/"

Por ejemplo, de los pasos anteriores ya disponemos de los siguientes datos:

  • Display name:testapp
  • Application (client) ID: fb31425b-10e7-xxxx-xxxxxxxxxxxxxxxxxxx
  • Object ID: aeb68629-6f1a-4b63-a95f-xxxxxxxxxxxxxxxxxxxx
  • Directory (tenant) ID: 5cf0dbcf-c2cd-463d-9346-xxxxxxxxxxxxxx
  • Supported account types: My organization only
  • Value: J43mY0FUXu5Tb_96q~zB_Hcz9.iR-.d3Bb
  • Secret ID: ff7e7555-7970-491d-b2ea-5d8ce31fd604
curl -X POST https://login.microsoftonline.com/5cf0dbcf-c2cd-463d-9346-xxxxxxxxxxxxxx/oauth2/token -F "grant_type=client_credentials" -F "client_id=fb31425b-10e7-xxxx-xxxxxxxxxxxxxxxxxxx" -F "client_secret=J43mY0FUXu5Tb_96q~zB_Hcz9.iR-.d3Bb" -F "resource=https://monitoring.azure.com/"

Emitiendo Métricas a través de la API REST

Ahora que lo tenemos todo listo, el siguiente paso pasa por poner todas las piezas en su lugar y verificar que todo funciona. Para ello, copia el siguiente código Json en tu bloc de notas y editamos la marca de tiempo “time” y lo guardaremos como custommetric.json

{
"time": "2021-06-04T10:12:20",
"data": {
"baseData": {
"metric": "QueueDepth",
"namespace": "QueueProcessing",
"dimNames": [
"QueueName",
"MessageType"
],
"series": [
{
"dimValues": [
"ImagesToProcess",
"JPEG"
],
"min": 3,
"max": 20,
"sum": 28,
"count": 3
}
]
}
}
}

Desde la Shell, subiremos el fichero. Podemos editarlo más tarde usando el editor pico o resubiendo el json de nuevo con los cambios que hubiéramos hecho.

En la ventana del símbolo del sistema, publique los datos de la métrica:

  • azureRegion. Debe coincidir con la región de implementación del recurso para el que está emitiendo métricas.
  • resourceID. Id del recurso del recurso de Azure con el que realiza el seguimiento de la métrica.
  • AccessToken. Pegue el token que adquirió anteriormente. 

Emitiremos nuestra la métrica customizada siguiendo el ejemplo a continuación:

curl -X POST https://<azureRegion>.monitoring.azure.com/<resourceId>/metrics -H "Content-Type: application/json" -H "Authorization: Bearer <AccessToken>" -d @custommetric.json

Completamos los campos requeridos antes de ejecutar el comando en bash. En este ejemplo:

azureRegion. westeurope

resourceID. 92c88879-6a81-4196-a088-1f369fa0ffbf/resourceGroups/webapptest/providers/Microsoft.Web/serverfarms/wordpressapp986

curl -X POST https://westeurope.monitoring.azure.com/subscriptions/92c88879-6a81-4196-a088-1f369fa0ffbf/resourceGroups/webapptest/providers/Microsoft.Web/serverfarms/wordpressapp986/metrics -H "Content-Type: application/json" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Im5PbzNaRHJPRFhFSzFqS1doWHNsSFJfS1hFZyIsImtpZCI6Im5PbzNaRHJPRFhFSzFqS1doWHNsSFJfS1hFZyJ9.eyJhdWQiOiJodHRwczovL21vbml0b3JpbmcuYXp1cmUuY29tLyIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzVjZjBkYmNmLWMyY2QtNDYzZC05MzQ2LWQ3NWNhNDY3NzZjNy8iLCJpYXQiOjE2MjI4MTM0MzksIm5iZiI6MTYyMjgxMzQzOSwiZXhwIjoxNjIyODE3MzM5LCJhaW8iOiJFMlpnWUpoVGJaM0ZyL09wZk1LQzVHL0haancyQndBPSIsImFwcGlkIjoiZmIzMTQyNWItMTBlNy00OWI3LTlhODktODQxZGZhMThkNzk2IiwiYXBwaWRhY3IiOiIxIiwiaWRwIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvNWNmMGRiY2YtYzJjZC00NjNkLTkzNDYtZDc1Y2E0Njc3NmM3LyIsIm9pZCI6ImI3ZjcyOGJmLWQyMjAtNDI4MS1iZWZhLTA5MWJhM2U5NjQ0NyIsInJoIjoiMC5BWUlBejl2d1hNM0NQVWFUUnRkY3BHZDJ4MXRDTWZ2bkVMZEptb21FSGZvWTE1YUNBQUEuIiwic3ViIjoiYjdmNzI4YmYtZDIyMC00MjgxLWJlZmEtMDkxYmEzZTk2NDQ3IiwidGlkIjoiNWNmMGRiY2YtYzJjZC00NjNkLTkzNDYtZDc1Y2E0Njc3NmM3IiwidXRpIjoia1BYQUE5NFJCa2F3UFpDeXpjWDVBZyIsInZlciI6IjEuMCJ9.kOWOgL2-YPeBfAshM743wkNmKHE7OJifFXlkn1_kMrlDQWK5OfAh0cpOqGmxnCf42WgWFZ5XiowOPPruXQ3_4iYvEH3OiRLDNvuPfXcAD6-hVL9cu-48Oe1grxqOAdR_OK967aqBtpYjXEXWiP8B2BdJkE5l-emNswdPKaQSt9W8TTqrLsLXpoX-C3A0yGzU80CiFC7DVcEtLb11njYWVPpLktJi40U5nfC86AjUA5zyhF3C34ONHWM3V4UkSXK-1w7WuCYQ3MEDmPezAva1DYo2MBjTEDuEreOXj6cIv2_ZSdZ5VJHKtzyFVv-fvJLPKJki9R-D3YazAFKkGk4iAQ" -d @custommetric.json

Ahora cambiamos la marca de tiempo y los valores en el archivo JSON. Repetiremos los dos pasos anteriores unas cuantas veces, de modo que tengamos datos durante varios minutos.

Ver nuestras métricas

Si todo ha ido bien, ahora toca el momento de verificar que las métricas han sido correctamente introducidas y añadidas a Azure Monitoring.

  1. Accede al Azure portal.
  2. En el menú lateral izquierdo selecciona Monitor.
  3. Una vez allí selecciona nuestro recurso en Metrics.
  4. Y cambiamos el periodo de agregación a 30 minutos.
  5. En el menú desplegable de recursos, seleccione el recurso contra el que emitió la métrica.
  6. En el menú desplegable de espacios de nombres, seleccione QueueProcessing.
  7. En el menú desplegable de métricas, seleccione QueueDepth.

Solución de problemas

Si recibimos un mensaje de error en alguna parte del proceso, debemos considerar los siguientes puntos:

  1. No puedes emitir métricas para una suscripción o un grupo de recursos como recurso de Azure.
  2. No puedes poner una métrica en la tienda que tenga más de 20 minutos. El almacén de métricas está optimizado para alertas y gráficos en tiempo real.
  3. El número de nombres de dimensión debe coincidir con los valores y viceversa. Verifique los valores.
  4. Es posible que estés emitiendo métricas en una región que no admite métricas personalizadas. Para más información consulta supported regions.