Azure Databricks e Grafana

Ricardo Baltazar
Juntos Somos Mais
Published in
3 min readDec 13, 2022
Foto de Sigmund en Unsplash

Vamos configurar um monitoramento do Databricks com Grafana.

Estou partindo do princípio que você já tem um Azure Databricks Service rodando.

Vamos criar primeiro um novo resource group chamado "grafana-databricks" para que tudo que seja criado fique dentro do mesmo resource grupo, isso vai facilitar para você deletar tudo ou controlar custos.

Agora você vai precisar do Docker e de dois CLIs funcionando localmente:

Para o monitoramento vamos usar essa library: spark-monitoring

Enviando logs para o Log Analytics workspace

Crie um novo Log Analytics workspace e lembre de usar o resource group que criamos anteriormente.

az monitor log-analytics workspace create --resource-group <myGroup> \
--workspace-name <myWorkspace>

Uma vez ele criado, vá até o menu Agents management e guarde o Workspace ID e a Primary key, vamos utilizar isso depois.

Faça o clone do projeto https://github.com/mspnp/spark-monitoring e no root do projeto rode um dos seguintes comandos, vai depender do seu SO: https://github.com/mspnp/spark-monitoring#option-1-docker

Enquanto ele executa, vá até o arquivo src/spark-listeners/scripts/spark-monitoring.sh e configure o log workspace:

export LOG_ANALYTICS_WORKSPACE_ID=
export LOG_ANALYTICS_WORKSPACE_KEY=

Mude também os seguintes valores, você consegue achar isso facilmente no seu cloud.

export AZ_SUBSCRIPTION_ID=11111111-5c17-4032-ae54-fc33d56047c2
export AZ_RSRC_GRP_NAME=myAzResourceGroup
export AZ_RSRC_PROV_NAMESPACE=Microsoft.Databricks
export AZ_RSRC_TYPE=workspaces
export AZ_RSRC_NAME=myDatabricks

Espere o docker terminar de executar, ele vai criar dois arquivos JAR na pasta src/target. Depois de executar vamos subir os arquivos para o Databricks:

Primeiro vamos subir o sh que acabamos de editar usando o Databricks CLI:

dbfs cp src/spark-listeners/scripts/spark-monitoring.sh dbfs:/databricks/spark-monitoring/spark-monitoring.sh

Agora vamos subir os arquivos gerados na pasta src/target :

dbfs cp --overwrite --recursive src/target/ dbfs:/databricks/spark-monitoring/

Habilitando a Lib no Cluster

Dentro do seu Databricks, vá até o menu Computer, escolha o cluster que você quer monitorar.

Mande editar o Cluster

Vá até Advanced Options

Vá até Init Scripts

Escolha DBFS e coloque o seguinte valor: dbfs:/databricks/spark-monitoring/spark-monitoring.sh

Mande salvar, ele vai reiniciar o Cluster.

Conferindo se funcionou

Vá até a parte de querys do seu Log Analytics workspace e usa uma query como essa:

let results=SparkListenerEvent_CL
| where TimeGenerated > ago(7d)
| where Event_s == "SparkListenerJobStart"
| extend metricsns=column_ifexists("Properties_spark_metrics_namespace_s",Properties_spark_app_id_s)
| extend apptag=iif(isnotempty(metricsns),metricsns,Properties_spark_app_id_s)
| project Job_ID_d,apptag,Properties_spark_databricks_clusterUsageTags_clusterName_s,TimeGenerated
| order by TimeGenerated asc nulls last
| join kind= inner (
SparkListenerEvent_CL
| where Event_s == "SparkListenerJobEnd"
| where Job_Result_Result_s == "JobSucceeded"
| project Event_s,Job_ID_d,TimeGenerated
) on Job_ID_d;
results
| extend slice=strcat("#JobsCompleted ",Properties_spark_databricks_clusterUsageTags_clusterName_s,"-",apptag)
| summarize count() by bin(TimeGenerated, 1h),slice
| order by TimeGenerated asc nulls last

Você já verá algumas linhas de retorno.

Vamos criar um Grafana.

Primeiro aceite os termos do Grafana:

az vm image terms accept --publisher bitnami --offer grafana --plan default

Agora crie uma maquina virtual já usando um template pronto:

export DATA_SOURCE="https://raw.githubusercontent.com/mspnp/spark-monitoring/master/perftools/deployment/grafana/AzureDataSource.sh"
az deployment group create \
--resource-group <resource-group-name> \
--template-file grafanaDeploy.json \
--parameters adminPass='<vm password>' dataSource=$DATA_SOURCE

Agora você precisa pegar a senha do admin que foi escrita no log do deploy. Vá até a VM que foi criada, procure o menu Boot diagnostics, vá em Serial Log, procure por Definindo a senha do aplicativo Bitnami como e aí você verá sua senha, guarde-a até o quanto você achar que faz sentido altera-la.

Criando um Dash do Grafana

Pegue o IP da VM criada e acesse o seguinte endereço http://<IP address>:3000 use admin e a senha que você anotou.

Volte ao repositório que você clonou localmente até o diretório perftools/dashboards/grafana , coloque o seu Azure Log Analytics workspace ID na variável WORKSPACE e execute o DashGen.sh :

export WORKSPACE=<your Azure Log Analytics workspace ID>
export LOGTYPE=SparkListenerEvent_CL

sh DashGen.sh

Ele vai criar o arquivo SparkMonitoringDash.json .

Volte no Grafana, mande adicionar, importar e selecione o json criado localmente.

Tudo pronto, você já tem o seu dash com os dados do seu cluster.

Minha sugestão é você fechar o acesso a essa máquina com o FW dela para somente um IP de uma VPN da sua empresa ou alguma coisa assim.

--

--