Coletar e transportar métricas

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

Importante

O IoT Edge 1.4 é a versão suportada. Se tiver uma versão anterior, consulte Atualizar IoT Edge.

Você pode monitorar remotamente sua frota do IoT Edge usando o Azure Monitor e a integração interna de métricas. Para habilitar esse recurso em seu dispositivo, adicione o módulo coletor de métricas à sua 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ê aprende 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 de 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.

Nota Descrição
1 Todos os módulos devem emitir métricas usando o modelo de dados Prometheus. Embora as métricas internas permitam 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 para aprimorar a solução de monitoramento. Saiba como instrumentar módulos personalizados usando bibliotecas de código aberto no artigo Adicionar métricas personalizadas.
2️ O módulo coletor de métricas é um módulo IoT Edge fornecido pela Microsoft que coleta métricas do módulo de carga de trabalho e as transporta para fora do dispositivo. A coleta de métricas usa um modelo pull . A frequência de coleta, os pontos de extremidade e os filtros podem ser configurados para controlar os dados enviados do módulo. Para obter mais informações, consulte 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 para o Log Analytics. 1 As métricas coletadas são ingeridas no espaço de trabalho especificado do Log Analytics usando uma tabela fixa e nativa chamada InsightsMetrics. O esquema desta tabela é compatível com o modelo de dados de métricas Prometheus.

Esta opção requer acesso ao espaço de trabalho na porta de saída 443. O ID e a chave do espaço de trabalho do Log Analytics devem ser especificados como parte da configuração do módulo. Para habilitar em redes restritas, consulte Habilitar em cenários de acesso restrito à rede mais adiante neste artigo.
4️ Cada entrada métrica contém o ResourceId que foi 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 selecionados podem recuperar métricas emitindo consultas em relação ao recurso.

Essa abordagem também permite que vários hubs IoT compartilhem com segurança um único espaço de trabalho do Log Analytics como um banco de dados de métricas.
5️ A opção 2 envia as métricas para o Hub IoT. 1 O módulo coletor pode ser configurado para enviar as métricas coletadas como mensagens JSON codificadas em UTF-8 do dispositivo para a nuvem através do edgeHub módulo. Essa opção desbloqueia o monitoramento de dispositivos IoT Edge bloqueados que têm acesso externo apenas ao ponto de extremidade do Hub IoT. Ele também permite o monitoramento de dispositivos filhos do IoT Edge em uma configuração aninhada em que os dispositivos filho só podem acessar o dispositivo pai.
6️ Quando as métricas são roteadas por meio do Hub IoT, um fluxo de trabalho de nuvem (único) precisa ser configurado. O fluxo de trabalho processa mensagens que chegam do módulo coletor de métricas e as envia para o espaço de trabalho do Log Analytics. O fluxo de trabalho permite a funcionalidade de visualizações e alertas com curadoria, mesmo para métricas que chegam por esse caminho opcional. Consulte a seção Métricas de rota por meio do Hub IoT para obter detalhes sobre como configurar esse fluxo de trabalho na nuvem.

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

Módulo 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 para o Azure Monitor. O código do módulo é de código aberto 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 Docker de vários arcos que suporta Linux X64, ARM32, ARM64 e Windows X64 (versão 1809). Está disponível publicamente em mcr.microsoft.com/azureiotedge-metrics-collector.

Também está disponível no IoT Edge Module Marketplace.

Configuração do coletor de métricas

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

Environment variable name Descrição
ResourceId ID de recurso do hub IoT com o qual o dispositivo se comunica. Para obter mais informações, consulte a seção ID do recurso.

Necessário

Valor padrão: none
UploadTarget Controla se as métricas são enviadas diretamente para o Azure Monitor por HTTPS ou para o Hub IoT como mensagens D2C. Para obter mais informações, consulte Destino de carregamento.

Pode ser AzureMonitor ou IoTMessage

Não obrigatório

Valor padrão: AzureMonitor
LogAnalyticsWorkspaceId ID do espaço de trabalho do Log Analytics.

Necessário somente se UploadTarget for AzureMonitor

Valor padrão: none
LogAnalyticsSharedKey Chave do espaço de trabalho do Log Analytics.

Necessário somente se UploadTarget for AzureMonitor

Valor padrão: none
ScrapeFrequencyInSecs Intervalo de tempo recorrente em segundos para coletar e transportar métricas.

Exemplo: 600

Não obrigatório

Valor padrão: 300
MetricsEndpointsCSV Lista de pontos de extremidade separados por vírgulas para coletar 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/metricshttp://MetricsSpewer:9417/metrics

Não obrigató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 desativar. Para obter mais informações, consulte listas de permissão e não permissão.

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

Não obrigatório

Valor padrão: vazio
BlockedMetrics Lista de métricas a serem ignoradas. Substitui AllowedMetrics, portanto, uma métrica não é relatada se estiver incluída em ambas as listas. Para obter mais informações, consulte listas de permissão e não permissão.

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

Não obrigató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: true

Não obrigatório

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

Exemplo: azure.us

Não obrigatório

Valor padrão: azure.com

ID do 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 .

O ID do recurso tem o seguinte formato:

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

Você pode 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.

Ou, você recupera o ID com o comando az resource show :

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

Destino de carregamento

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

Se você definir UploadTarget como IoTMessage, as métricas do módulo serão publicadas como mensagens IoT. Essas mensagens são emitidas como json codificado em UTF8 do ponto de extremidade /messages/modules/<metrics collector module name>/outputs/metricOutput. Por exemplo, se o módulo IoT Edge Metrics Collector for chamado IoTEdgeMetricsCollector, o ponto de extremidade será /messages/modules/IoTEdgeMetricsCollector/outputs/metricOutput. O formato é o seguinte:

[{
    "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"
    }
}]

Permitir e não permitir listas

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

Os seletores de métricas 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 métricos consistem em três partes:

Nome da métrica (metricToSelect).

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

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

  • Vários valores métricos podem ser incluídos entre parênteses. Os valores devem ser separados por vírgula.
  • Uma métrica é correspondida se pelo menos todos os rótulos no seletor estiverem presentes e também corresponderem.
  • Como PromQL, os seguintes operadores de correspondência são permitidos.
    • = Corresponder rótulos exatamente iguais à cadeia de caracteres fornecida (diferencia maiúsculas de minúsculas).
    • != Corresponder rótulos não exatamente iguais à cadeia de caracteres fornecida.
    • =~ Combine rótulos com um regex fornecido. ex: label=~CPU|Mem|[0-9]*
    • !~ Corresponda a rótulos que não se ajustam a um regex fornecido.
    • O Regex está totalmente ancorado (A ^ e são automaticamente adicionados ao início e $ ao fim de cada regex)
    • Este componente é opcional em um seletor de métricas.

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

  • O URL deve corresponder exatamente a um URL listado em MetricsEndpointsCSV.
  • Este componente é opcional em um seletor de métricas.

Uma métrica deve corresponder a todas as partes de um determinado seletor a ser selecionado. Ele deve corresponder ao nome e ter todos os mesmos rótulos com valores correspondentes e vir do ponto de extremidade dado. 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]. Vários seletores devem ser usados para criar um comportamento semelhante em vez de um comportamento semelhante.

Por exemplo, para permitir a métrica personalizada com qualquer rótulo de um módulomodule1, mas permitir apenas a mesma métrica mem de module2 com o rótuloagg=p99, o seguinte seletor pode ser adicionado aAllowedMetrics:

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

Ou, para permitir as métricas mem personalizadas e para qualquer rótulo ou cpu ponto de extremidade, adicione o seguinte a AllowedMetrics:

mem cpu

Habilitar em cenários de acesso restrito à rede

Se você estiver enviando métricas diretamente para o espaço de trabalho do Log Analytics, permita o acesso de saída aos seguintes URLs:

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

Considerações sobre proxy

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

A coleta de métricas de módulos locais usa o protocolo http. Exclua a comunicação local de passar pelo servidor proxy definindo a NO_PROXY variável de ambiente.

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

Métricas de rota

À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 filho têm acesso apenas ao hub IoT Edge de seu dispositivo pai. Outro exemplo é ao implantar um dispositivo IoT Edge com acesso de rede de saída apenas ao Hub IoT.

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

Gorjeta

Lembre-se de adicionar uma rota edgeHub para entregar mensagens de métricas do módulo coletor ao Hub IoT. É semelhante a 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.

Nota

Esteja ciente dos custos adicionais com esta opção. As mensagens métricas serão contabilizadas na 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 na nuvem.

Exemplo de fluxo de trabalho na nuvem

Um fluxo de trabalho na nuvem que fornece mensagens de métricas do Hub IoT para o Log Analytics está disponível como parte do exemplo de registro e monitoramento do IoT Edge. O exemplo pode ser implantado em recursos de nuvem existentes ou servir como uma referência de implantação de produção.

Próximos passos

Explore os tipos de visualizações selecionadas que o Azure Monitor habilita.