Coletar e transportar métricas

Aplica-se a:IoT Edge 1.4 checkmark IoT Edge 1.4

Importante

A versão com suporte é a IoT Edge 1.4. Se você estiver em uma versão anterior, confira Atualizar o IoT Edge.

Monitore remotamente sua frota do IoT Edge usando a integração das métricas internas e do Azure Monitor. Para habilitar essa funcionalidade no dispositivo, adicione o módulo coletor de métricas à implantação e configure-o para coletar e transportar métricas do módulo para o Azure Monitor.

Para configurar o monitoramento em seu dispositivo IoT Edge, siga o Tutorial: Monitorar dispositivos IoT Edge. Você aprenderá a adicionar o módulo coletor de métricas ao seu dispositivo. Este artigo fornece uma visão geral da arquitetura de monitoramento e explica suas opções sobre a configuração de métricas em seu dispositivo.

Integração do IoT Edge com o Azure Monitor(4:06)

Arquitetura

Screenshot of the metrics monitoring architecture with IoT Hub.

Observação Descrição
1 Todos os módulos devem emitir métricas usando o modelo de dados do Prometheus. Embora métricas internas ofereçam ampla visibilidade da carga de trabalho por padrão, os módulos personalizados também podem ser usados para emitir métricas específicas do cenário a fim de aprimorar a solução de monitoramento. Saiba como instrumentar os módulos personalizados usando as bibliotecas de software livre no artigo Adicionar métricas personalizadas.
2️ O módulo coletor de métricas é um módulo do IoT Edge fornecido pela Microsoft que coleta as métricas do módulo de carga de trabalho para transportá-las do dispositivo. A coleção de métricas usa um modelo de pull. A frequência de coleta, os pontos de extremidade e os filtros podem ser configurados para controlar os dados transmitidos pelo módulo. Para saber mais, confira a seção de configuração do coletor de métricas mais adiante neste artigo.
3️ Você tem duas opções para enviar métricas do módulo coletor de métricas para a nuvem. A opção 1 envia as métricas ao Log Analytics.1As métricas coletadas são ingeridas no workspace do Log Analytics especificado usando uma tabela nativa e fixa chamada InsightsMetrics. O esquema dessa tabela é compatível com o modelo de dados de métricas do Prometheus.

Essa opção requer acesso ao workspace na porta de saída 443. A ID e a chave do workspace do Log Analytics devem ser especificadas como parte da configuração do módulo. Para habilitação em redes restritas, veja Habilitar em cenários de acesso de rede restrita posteriormente neste artigo.
4️ Cada entrada de métrica contém o ResourceId especificado como parte da configuração do módulo. Essa associação vincula automaticamente a métrica ao recurso especificado (por exemplo, Hub IoT). Como resultado, os modelos de pasta de trabalho do IoT Edge coletados podem recuperar métricas emitindo consultas no recurso.

Essa abordagem também permite que diversos Hubs IoT compartilhem com segurança um único workspace do Log Analytics como um banco de dados de métricas.
5️ A opção 2 envia as métricas ao Hub IoT. 1 O módulo do coletor pode ser configurado para enviar as métricas coletadas como mensagens do dispositivo para a nuvem no formato JSON codificadas em UTF-8 usando o módulo edgeHub. Essa opção desbloqueia o monitoramento de dispositivos bloqueados do IoT Edge com permissão de acesso externo somente ao ponto de extremidade do Hub IoT. Ela também permite o monitoramento de dispositivos IoT Edge filhos em uma configuração aninhada em que esses dispositivos só podem acessar os respectivos dispositivos pai.
6️ Quando as métricas são roteadas por meio do Hub IoT, um fluxo de trabalho de nuvem de uso único precisa ser definido. Ele processa as mensagens que chegam do módulo coletor de métricas e as envia ao workspace do Log Analytics. Ele também permite a funcionalidade de visualizações coletadas e alertas, mesmo para métricas que chegam por esse caminho opcional. Confira a seção Rotear métricas por meio do Hub IoT para saber como configurar o fluxo de trabalho de nuvem.

1 Atualmente, é mais simples usar a opção 1 para transportar diretamente as métricas para o Log Analytics do dispositivo IoT Edge, pois esse caminho requer configuração mínima. A primeira opção é preferencial, a menos que seu cenário específico exija a abordagem da opção 2 para que o dispositivo IoT Edge se comunique somente com o Hub IoT.

Modulo do coletor de métricas

Um módulo coletor de métricas fornecido pela Microsoft pode ser adicionado a uma implantação do IoT Edge para coletar métricas do módulo e enviá-las ao Azure Monitor. O código do módulo é de software livre e está disponível no repositório GitHub do IoT Edge.

O módulo coletor de métricas é fornecido como uma imagem de contêiner do Docker de diversos arcos que fornece suporte ao Linux X64, ao ARM32, ao ARM64 e ao Windows X64 (versão 1809). Ele está disponível publicamente em mcr.microsoft.com/azureiotedge-metrics-collector.

Ele também está disponível no Marketplace de módulos do IoT Edge.

Configuração do coletor de métricas

Toda a configuração do coletor de métricas é feita usando variáveis de ambiente. Minimamente, as variáveis anotadas nesta tabela marcadas como Obrigatório precisam ser especificadas.

Nome da variável de ambiente Descrição
ResourceId ID de recurso do Hub IoT com o qual o dispositivo se comunica. Para saber mais, confira a seção ID do recurso.

Necessário

Valor padrão: nenhum
UploadTarget Controla se as métricas são enviadas diretamente ao Azure Monitor por HTTPS ou para o Hub IoT como mensagens D2C. Para saber mais, veja Upload de destino.

Pode ser AzureMonitor ou IoTMessage

Não é necessário

Valor padrão: AzureMonitor
LogAnalyticsWorkspaceId ID do workspace do Log Analytics.

Obrigatório somente se UploadTarget for AzureMonitor

Valor padrão: nenhum
LogAnalyticsSharedKey Chave do workspace do Log Analytics.

Obrigatório somente se UploadTarget for AzureMonitor

Valor padrão: nenhum
ScrapeFrequencyInSecs Intervalo de tempo recorrente em segundos no qual coletar e transportar as métricas.

Exemplo: 600

Não é necessário

Valor padrão: 300
MetricsEndpointsCSV Lista separada por vírgula de pontos de extremidade dos quais coletar as métricas do Prometheus. Todos os pontos de extremidade do módulo dos quais coletar métricas devem aparecer nesta lista.

Exemplo: http://edgeAgent:9600/metrics, http://edgeHub:9600/metrics, http://MetricsSpewer:9417/metrics

Não é necessário

Valor padrão: http://edgeHub:9600/metrics, http://edgeAgent:9600/metrics
AllowedMetrics Lista de métricas a serem coletadas, todas as outras métricas são ignoradas. Defina como uma cadeia de caracteres vazia para desabilitar. Para saber mais, veja listas de permissão e de bloqueio.

Exemplo: metricToScrape{quantile=0.99}[endpoint=http://MetricsSpewer:9417/metrics]

Não é necessário

Valor padrão: vazio
BlockedMetrics Lista de métricas que serão ignoradas. Substitui AllowedMetrics, portanto, uma métrica não é relatada se estiver incluída em ambas as listas. Para saber mais, veja listas de permissão e de bloqueio.

Exemplo: metricToIgnore{quantile=0.5}[endpoint=http://VeryNoisyModule:9001/metrics], docker_container_disk_write_bytes

Não é necessário

Valor padrão: vazio
CompressForUpload Controla se a compactação deve ser usada ao carregar métricas. Aplica-se a todos os destinos de upload.

Exemplo: verdadeiro

Não é necessário

Valor padrão: verdadeiro
AzureDomain Especifica o domínio do Azure de nível superior a ser usado ao ingerir métricas diretamente no Log Analytics.

Exemplo: azure.us

Não é necessário

Valor padrão: azure.com

ID de Recurso

O módulo coletor de métricas requer a ID do Azure Resource Manager do hub IoT ao qual o dispositivo IoT Edge pertence. Forneça essa ID como o valor da variável de ambiente ResourceID.

A ID do recurso tem o seguinte formato:

/subscriptions/<subscription id>/resourceGroups/<resource group name>/providers/Microsoft.Devices/IoTHubs/<iot hub name>

É possível encontrar a ID do recurso na página Propriedades do Hub IoT no portal do Azure.

Screenshot the shows how to retrieve your resource ID from the IoT Hub properties.

Também é possível recuperá-la com o comando az resource show:

az resource show -g <resource group> -n <hub name> --resource-type "Microsoft.Devices/IoTHubs"

Destino de upload

A opção de configuração UploadTarget controla se as métricas são enviadas diretamente ao Azure Monitor ou ao Hub IoT.

Se você definir UploadTarget como IoTMessage, as métricas do módulo serão publicadas como mensagens de IoT. Essas mensagens são emitidas pelo terminal /messages/modules/<metrics collector module name>/outputs/metricOutput como um JSON codificado em UTF-8. Por exemplo, se o módulo do IoT Edge Metrics Collector for chamado IoTEdgeMetricsCollector, o ponto de extremidade será /messages/modules/IoTEdgeMetricsCollector/outputs/metricOutput. A formato funciona da seguinte maneira:

[{
    "TimeGeneratedUtc": "<time generated>",
    "Name": "<prometheus metric name>",
    "Value": <decimal value>,
    "Label": {
        "<label name>": "<label value>"
    }
}, {
    "TimeGeneratedUtc": "2020-07-28T20:00:43.2770247Z",
    "Name": "docker_container_disk_write_bytes",
    "Value": 0.0,
    "Label": {
        "name": "AzureMonitorForIotEdgeModule"
    }
}]

Listas de permissão e bloqueio

As opções de configuração AllowedMetrics e BlockedMetrics usam listas de seletores de métricas separados por espaços ou vírgulas. Uma métrica corresponde à lista e é incluída ou excluída se corresponder a uma ou mais métricas em qualquer uma delas.

Os seletores de métrica usam um formato semelhante a um subconjunto da linguagem de consulta PromQL.

metricToSelect{quantile=0.5,otherLabel=~Re[ge]*|x}[http://VeryNoisyModule:9001/metrics]

Os seletores de métrica consistem em três partes:

Nome da métrica (metricToSelect).

  • Curingas * (qualquer caractere) e ? (qualquer caractere único) podem ser usados em nomes de métrica. Por exemplo, *CPU corresponderia a maxCPU e a minCPU, mas não a CPUMaximum. ???CPU corresponderia a maxCPU e a minCPU, mas não a maximumCPU.
  • Esse componente é necessário em um seletor de métricas.

Seletores baseados em rótulo ({quantile=0.5,otherLabel=~Re[ge]*|x}).

  • Diversos valores de métrica podem ser incluídos entre as chaves. Os valores devem ser separados por vírgulas.
  • Uma métrica é correspondida se pelo menos todos os rótulos no seletor estiverem presentes e também corresponderem.
  • Assim como no PromQL, os operadores correspondentes a seguir são permitidos.
    • = Corresponde rótulos exatamente iguais à cadeia de caracteres fornecida (diferenciar maiúsculas de minúsculas).
    • != Corresponde rótulos não exatamente iguais à cadeia de caracteres fornecida.
    • =~ Corresponde rótulos ao regex fornecido. Exemplo: label=~CPU|Mem|[0-9]*
    • !~ Corresponde rótulos que não se ajustam a um regex fornecido.
    • O Regex é totalmente ancorado (A ^ e são adicionados automaticamente ao início e $ ao fim de cada regex)
    • Esse componente é opcional em um seletor de métricas.

Seletor de ponto de extremidade ([http://VeryNoisyModule:9001/metrics]).

  • A URL deve corresponder exatamente a uma URL listada em MetricsEndpointsCSV.
  • Esse componente é opcional em um seletor de métricas.

Uma métrica deve corresponder a todas as partes de um determinado seletor selecionado. Ela deve corresponder ao nome e ter todas as mesmas etiquetas com valores correspondentes e ser proveniente do ponto de extremidade fornecido. Por exemplo, mem{quantile=0.5,otherLabel=foobar}[http://VeryNoisyModule:9001/metrics] não corresponderia ao seletor mem{quantile=0.5,otherLabel=~foo|bar}[http://VeryNoisyModule:9001/metrics]. Diversos seletores devem ser usados ​​para criar um comportamento que identifique semelhanças ou diferenças em vez de semelhanças e itens relacionados.

Por exemplo, para permitir a métrica personalizada mem com qualquer etiqueta de um módulo module1, mas permitir somente a mesma métrica de module2 com a etiqueta agg=p99, o seguinte seletor pode ser adicionado a AllowedMetrics:

mem{}[http://module1:9001/metrics] mem{agg="p99"}[http://module2:9001/metrics]

Ou, para permitir as métricas personalizadas mem e cpu para quaisquer etiquetas ou pontos de extremidade, adicione o seguinte a AllowedMetrics :

mem cpu

Habilitar em cenários de acesso de rede restrita

Ao enviar métricas diretamente para o workspace do Log Analytics, permita o acesso de saída às seguintes URLs:

  • https://<LOG_ANALYTICS_WORKSPACE_ID>.ods.opinsights.azure.com/*
  • https://<LOG_ANALYTICS_WORKSPACE_ID>.oms.opinsights.azure.com/*

Considerações sobre o proxy

O módulo coletor de métricas é escrito em .NET Core. Portanto, use a mesma orientação dos módulos do sistema para permitir a comunicação por meio de um servidor proxy.

A coleção de métricas de módulos locais usa o protocolo HTTP. Defina a variável de ambiente NO_PROXY para que a comunicação local não passe pelo servidor proxy.

Defina o valor NO_PROXY como uma lista separada por vírgula de nomes de host que devem ser excluídos. Use os nomes de módulo para os nomes de host. Por exemplo: edgeHub, edgeAgent, myCustomModule.

Rotear métricas

Às vezes, é necessário ingerir métricas por meio do Hub IoT em vez de enviá-las diretamente para o Log Analytics. Por exemplo, ao monitorar dispositivos IoT Edge em uma configuração aninhada em que os dispositivos filhos têm acesso apenas ao hub do IoT Edge do dispositivo pai. Outro exemplo é ao implantar um dispositivo IoT Edge com acesso à rede de saída somente no Hub IoT.

Para habilitar o monitoramento neste cenário, o módulo coletor de métricas pode ser configurado para enviar métricas como mensagens D2C (dispositivo para nuvem) por meio do módulo edgeHub. A funcionalidade pode ser ativada definindo a variável de ambiente UploadTarget como IoTMessage na configuração do coletor.

Dica

Lembre-se de adicionar uma rota edgeHub para entregar mensagens de métricas do módulo coletor para o Hub IoT. Ele se parece com FROM /messages/modules/replace-with-collector-module-name/* INTO $upstream.

Essa opção requer configuração extra, um fluxo de trabalho na nuvem, para entregar mensagens de métricas que chegam ao Hub IoT para o espaço de trabalho do Log Analytics. Sem essa configuração, as outras partes da integração, como visualizações selecionadas e alertas, não funcionam.

Observação

Essa opção incorre em custos adicionais. As mensagens de métricas serão contadas em relação à sua cota de mensagens do Hub IoT. Você também será cobrado pela ingestão do Log Analytics e pelos recursos de fluxo de trabalho em nuvem.

Amostra de fluxo de trabalho de nuvem

Um fluxo de trabalho em nuvem que entrega mensagens de métricas do IoT Hub para o Log Analytics está disponível como parte da amostra de monitoramento e log do IoT Edge. Ela pode ser implantada em recursos de nuvem existentes ou usada como uma referência de implantação de produção.

Próximas etapas

Conheça os tipos de visualizações coletadas habilitados pelo Azure Monitor.