Visualizar las métricas de Microsoft Azure en Grafana

Ya te habrás dado cuenta de que llevo varios días jugando con herramientas de terceros para monitorizar Microsoft Azure 🙂 Hoy te quiero mostrar cómo desplegar Grafana en App Service y cómo acceder a las métricas de Microsoft Azure desde él.

El script

Si bien es cierto que Grafana tiene una imagen en el marketplace de Azure, yo he preferido utilizar App Service y tener que evitarme así la gestión de una máquina virtual. Para que sea más sencillo, he creado un script donde se incluyen todos los pasos que necesitas para desplegar Grafana y asignarle los permisos necesarios para leer los logs de Azure:

#Variables
SUBSCRIPTION_NAME="<YOUR SUBSCRIPTION NAME>"
RESOURCE_GROUP="Grafana"
LOCATION="North Europe"
STORAGE_ACCOUNT="grafanadat"
APP_SERVICE_PLAN="GrafanaPlan"
WEB_APP_NAME="grafana-returngis"

#Login 
az login

#Select Azure Subscription
az account set --subscription "$SUBSCRIPTION_NAME"

#Create a resource group
az group create --name $RESOURCE_GROUP --location "$LOCATION"

#Create storage account
az storage account create --name $STORAGE_ACCOUNT \
    --resource-group $RESOURCE_GROUP \
    --location "$LOCATION" \
    --sku Standard_LRS

#Get storage account key
storage_key=$(az storage account keys list --account-name $STORAGE_ACCOUNT --resource-group $RESOURCE_GROUP --query '[0].value' --output tsv)

#Create a container inside of the storage account
az storage container create --name grafana --account-name $STORAGE_ACCOUNT

#Create an App Service Plan
az appservice plan create --name $APP_SERVICE_PLAN \
    --resource-group $RESOURCE_GROUP \
    --sku B1 --is-linux 

#Create a web app
az webapp create --name $WEB_APP_NAME \
    --resource-group $RESOURCE_GROUP \
    --plan $APP_SERVICE_PLAN \
    --deployment-container-image-name grafana/grafana

#Create mount storage account
az webapp config storage-account add \
    --name $WEB_APP_NAME \
    --resource-group $RESOURCE_GROUP \
    --custom-id GrafanaData \
    --storage-type AzureBlob \
    --share-name grafana \
    --account-name $STORAGE_ACCOUNT \
    --access-key $storage_key \
    --mount-path /var/lib/grafana/

#Configure environment variables for the docker image
az webapp config appsettings set \
    --resource-group $RESOURCE_GROUP \
    --name $WEB_APP_NAME \
    --settings GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource,grafana-azure-monitor-datasource,briangann-gauge-panel

#Assign Log Analytics Reader role to Grafana Azure AD App
az ad sp create-for-rbac -n $WEB_APP_NAME --role "Log Analytics Reader" 

Lo primero que hago es iniciar sesión y seleccionar la suscripción donde quiero desplegar el visualizador. Acto seguido creo un grupo de recursos y dentro de él una cuenta de almacenamiento, que mapearé con el contenedor de Grafana que generaré después. También creo un contenedor dentro de la cuenta y recupero la clave de acceso, que me servirá para que el contenedor pueda acceder a la unidad mapeada. Doy de alta un nuevo App Service Plan del tipo Linux y una web, donde utilizo –deployment-container-image-name grafana/grafana para desplegar la imagen oficial de Grafana. Una vez creado el sitio ya puedo configurar la cuenta de almacenamiento para poder persistir los datos fuera del contenedor. Configuro además en el apartado App Settings la variable de entorno GF_INSTALL_PLUGINS, donde puedo decidir qué plugins quiero instalar. Por último debo crear un service principal con el rol Log Analytics Reader, para que Grafana puede acceder a las métricas cuando configure el data source. Si todo ha ido bien, el resultado debe ser parecido a este:

Resultado del script

Configuración del plugin Azure Monitor en Grafana

Ahora que ya tienes tu nuevo sitio web creado, puedes acceder a él a través de la URL que puedes encontrar en el apartado Overview.

URL de tu sitio de Grafana

Es posible que la primera vez tarde un poco en ejecutarse, debido a la creación del contenedor. El usuario por defecto es admin/admin (no te preocupes 🙂 te pedirá cambiar la contraseña).
Si la instalación se ha hecho correctamente, podrás ver los plugins instalados:

Plugins instalados a través de App Settings

Lo último que te falta es configurar el data source para Azure Monitor. En el apartado Configuration > Data Sources haz clic en Add Data Source y selecciona Azure Monitor de la lista.

Azure Monitor como Data Source de Grafana

Ahora debes configurarlo con los datos de salida que te aparecieron cuando finalizó el script: El Directory (tenant) ID es el tenant, Application (client) ID
es appId, Client Secret es password y luego simplemente haz clic en el botón Load Subscriptions y selecciona tu suscripción por defecto.

Configuración del Data Source Azure Monitor en Grafana

Si tienes workspaces de Log Analytics también se cargarán y podrás elegir cuál quieres que sea el por defecto. Del mismo modo, si quieres asociar una cuenta de Application Insights puedes hacerlo en el último apartado, Application Insights Details.

Probar Azure Monitor en Grafana

Ya tienes una fuente de datos conectada a tu suscripción de Microsoft Azure. Ahora solo queda probarla y para ello he buscado un Dashboard dentro de la página oficial de Grafana que utilice Azure Monitor. Si tus permisos son correctos podrás ver gráficas parecidas a estas:

Dashboard de métricas de máquinas virtuales en Grafana

¡Saludos!