Compartilhar via


Início Rápido: Adicione ativos OPC UA ao seu cluster Azure IoT Operations Preview

Importante

A Versão Prévia das Operações da Internet das Coisas do Azure – habilitadas pelo Azure Arc – está atualmente em versão prévia. Você não deve usar esse software em versão prévia em ambientes de produção.

Você precisará implantar uma nova instalação das Operações da Internet das Coisas do Azure quando uma versão em disponibilidade geral for disponibilizada. Você não poderá atualizar uma instalação de versão prévia.

Veja os Termos de Uso Complementares para Versões Prévias do Microsoft Azure para obter termos legais que se aplicam aos recursos do Azure que estão em versão beta, versão prévia ou que, de outra forma, ainda não foram lançados em disponibilidade geral.

Nesse início rápido, você adicionará manualmente os ativos OPC UA ao seu cluster do recurso Pré-visualização de Operações do Azure IoT. Esses ativos publicam mensagens no agente MQTT no seu cluster de Operações do Azure IoT. De modo geral, um usuário de OT (Tecnologia Operacional) executa essas etapas.

Um ativo é um dispositivo físico ou uma entidade lógica que representam um dispositivo, um computador, um sistema ou um processo. Por exemplo, um ativo físico pode ser uma bomba, um motor, um tanque ou uma linha de produção. Um ativo lógico que você define pode ter propriedades, transmitir telemetria ou gerar eventos.

Os servidores OPC UA são aplicativos de software que se comunicam com ativos. As tags OPC UA são pontos de dados que os servidores OPC UA expõem. As tags OPC UA podem fornecer dados históricos ou em tempo real sobre o status, o desempenho, a qualidade ou a condição dos ativos.

Neste início rápido, use a interface do usuário na Web da experiência de operações criar seus ativos. Você também pode usar a CLI do Azure para concluir algumas dessas tarefas.

Pré-requisitos

Tenha uma instância do Visualização de Operações do Azure IoT implantada em um cluster do Kubernetes. O Início Rápido: executar a Visualização de Operações IoT do Azure nos GitHub Codespaces com K3s fornece instruções simples para implantar uma instância de Operações de IoT do Azure que você poderá usar para os inícios rápidos.

Para entrar na interface do usuário da Web de experiência de operações, você precisa de uma conta do Microsoft Entra ID com pelo menos permissões de colaborador para o grupo de recursos que contém sua instância do Kubernetes – Azure Arc. Para saber mais, consulte a interface do usuário da Web da experiência de Operações.

A menos que indicado de outra forma, execute os comandos do console neste início rápido em um ambiente do Bash ou do PowerShell.

Que problema vamos resolver?

Os dados que os servidores OPC UA expõem podem ter uma estrutura complexa e ser difíceis de entender. O recurso Operações do Azure IoT fornece uma maneira de modelar ativos OPC UA na forma de tags, eventos e propriedades. Essa modelagem facilita a compreensão dos dados e o uso deles em processos de downstream, como o agente MQTT e fluxos de dados.

Implantar o simulador de PLC OPC

Este início rápido usa o simulador OPC PLC para gerar dados de exemplo. Para implantar o simulador OPC PLC, execute o seguinte comando:

kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/explore-iot-operations/main/samples/quickstarts/opc-plc-deployment.yaml

O trecho a seguir mostra o arquivo YAML que você aplicou:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: opc-plc-deployment
  namespace: azure-iot-operations
  labels:
    app.kubernetes.io/component: opcplc-000000
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/component: opcplc-000000
  template:
    metadata:
      labels:
        app.kubernetes.io/component: opcplc-000000
    spec:
      containers:
      - name: opc-plc
        image: mcr.microsoft.com/iotedge/opc-plc:latest
        args:
          - "--ph=opcplc-000000"
          - "--cdn=opcplc-000000"
          - "--ut"
          - "--trustowncert" # Can we remove?
          - "--sn=25"
          - "--sr=10"
          - "--fn=2000"
          - "--veryfastrate=1000"          
          - "--gn=5"
          - "--pn=50000"
          - "--maxsessioncount=100"
          - "--maxsubscriptioncount=100"
          - "--maxqueuedrequestcount=2000"          
          - "--ses"
          - "--alm"
          - "--at=FlatDirectory"
          - "--drurs"        
          - "--ll-debug"
        ports:
        - containerPort: 50000
        volumeMounts:
          - name: opc-plc-tls
            mountPath: /app/pki/own
          - name: opc-plc-tls
            mountPath: /app/pki/trusted # Trust own cert
      volumes:
        - name: opc-plc-tls
          secret:
            secretName: opc-plc-tls
---
apiVersion: v1
kind: Service
metadata:
  name: opcplc-000000
  namespace: azure-iot-operations
spec:
  type: ClusterIP
  selector:
    app.kubernetes.io/component: opcplc-000000
  ports:
    - port: 50000
      protocol: TCP
      targetPort: 50000
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
  name: opc-plc-certificate
  namespace: azure-iot-operations
spec:
  secretName: opc-plc-tls
  duration: 2160h # 90d
  renewBefore: 360h # 15d
  issuerRef:
    name: aio-opc-opcuabroker-default-root-ca-issuer
    kind: Issuer
  commonName: OpcPlc
  dnsNames:
    - opcplc-000000
    - opcplc-000000.azure-iot-operations.svc.cluster.local
    - opcplc-000000.azure-iot-operations
  uris:
    - urn:OpcPlc:opcplc-000000
  usages:
    - digital signature
    - key encipherment
    - data encipherment
    - server auth
    - client auth
  privateKey:
    algorithm: RSA
    size: 2048
  encodeUsagesInRequest: true
  isCA: false

Cuidado

Essa configuração não é segura. Não use essa configuração em um ambiente de produção.

Entrar na experiência de operações

Para criar ativos e pontos de extremidade de ativos e fazer uma assinatura de tags e eventos OPC UA, use o a experiência de operações.

Navegue até a experiência de operações em seu navegador e entre com suas credenciais do Microsoft Entra ID.

Selecione seu site

Um site é uma coleção de instâncias de Operações de IoT do Azure. Os sites geralmente agrupam instâncias por local físico e facilitam para os usuários de OT localizar e gerenciar ativos. Seu administrador de TI cria sites e atribui instâncias do Operações de IoT do Azure a eles. Como você está trabalhando com uma nova implantação, ainda não há sites. Você pode encontrar o cluster criado no início rápido anterior selecionando Instâncias não atribuídas. Na experiência de operações, uma instância representa um cluster onde você implantou as Operações de IoT do Azure.

Captura de tela que mostra o nó de instâncias não atribuídas na experiência de operações.

Selecione sua instância

Selecione a instância na qual você implantou as Operações de IoT do Azure no início rápido anterior:

Captura de tela da lista de instâncias de Operações IoT do Azure.

Dica

Se você não vir nenhuma instância, talvez não esteja no locatário correto do Microsoft Entra ID. Você pode alterar o locatário no menu superior direito na experiência de operações.

Adicionar um ponto de extremidade de ativo

Quando você implantou as Operações do Azure IoT no artigo anterior, incluiu um simulador OPC PLC integrado. Nessa etapa, você adicionará um ponto de extremidade de ativo que irá permitir que você se conecte ao simulador de OPC PLC.

Para adicionar um ponto de extremidade de ativo:

  1. Selecione Pontos de extremidade de ativo e, em seguida, Crie um ponto de extremidade de ativo:

    Captura de tela que mostra a página pontos de extremidade de ativo na experiência de operações.

  2. Insira as seguintes informações do ponto de extremidade:

    Campo Valor
    Nome do ponto de extremidade do ativo opc-ua-connector-0
    URL do servidor OPC UA opc.tcp://opcplc-000000:50000
    Modo de autenticação do usuário Anonymous
  3. Para salvar a definição, selecione Criar.

    Essa configuração implanta um novo ponto de extremidade de ativo chamado opc-ua-connector-0 no cluster. Você pode usar kubectl para exibir os pontos de extremidade do ativo:

    kubectl get assetendpointprofile -n azure-iot-operations
    

Gerenciar seus ativos

Depois de selecionar sua instância na experiência de operações, você verá a lista disponível de ativos na página Ativos. Se ainda não houver nenhum ativo, essa lista estará vazia:

Captura de tela da lista de ativos vazios das Operações do Azure IoT.

Criar um ativo

Para criar um ativo, selecione Criar ativo. Em seguida, insira as seguintes informações do ativo:

Campo Valor
Ponto de Extremidade do Ativo opc-ua-connector-0
Nome do ativo thermostat
Descrição A simulated thermostat asset

Remova as propriedades personalizadas existentes e adicione as propriedades personalizadas a seguir. Tenha cuidado para usar os nomes de propriedade exatos, pois o modelo do Power BI os consulta em um início rápido posterior:

Nome da propriedade Detalhes da propriedade
lote 102
cliente Contoso
usuário do 5G Boiler
isSpare true
local Seattle

Captura de tela da página de detalhes do ativo do Operações do Azure IoT.

Selecione Avançar para ir para a página Adicionar tags.

Criar tags OPC UA

Adicione duas tags OPC UA à página Adicionar tags. Para adicionar cada tag, selecione Adicionar tag ou CSV e, em seguida, selecione Adicionar tag. Insira os detalhes da tag mostrados na tabela a seguir:

ID do nó Nome da marca Modo de observabilidade
ns=3;s=FastUInt10 temperatura Nenhum
ns=3;s=FastUInt100 Tag 10 Nenhum

O Modo de observação é um dos seguintes valores: None, Gauge, Counter, Histogram ou Log.

Você pode selecionar Gerenciar configurações padrão para alterar o intervalo de amostragem padrão e o tamanho da fila para cada marca.

Captura de tela da página adicionar marca de marcas das Operações do Azure IoT.

Selecione Avançar para ir para a página Adicionar eventos e, em seguida, Avançar para ir para a página Revisão.

Revisão

Examine os detalhes do seu ativo e da tag e faça os ajustes necessários antes de selecionar Criar:

Captura de tela da página criar revisão de ativos das Operações do Azure IoT.

Essa configuração implanta um novo ativo chamado thermostat no cluster. Use kubectl para exibir os ativos:

kubectl get assets -n azure-iot-operations

Verificar se os dados estão fluindo

Verifique se os dados estão fluindo para o agente MQTT usando a ferramenta mosquitto_sub. Neste exemplo, execute a ferramenta mosquitto_sub dentro do cluster do Kubernetes:

  1. Execute o seguinte comando para implantar um pod que inclua as ferramentas mosquitto_pub e mosquitto_sub que são úteis para interagir com o agente MQTT no cluster:

    kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/explore-iot-operations/main/samples/quickstarts/mqtt-client.yaml
    

    O trecho a seguir mostra o arquivo YAML que você aplicou:

    # Important: do not use in production environments
    # Creates a pod with mosquitto-clients and mqttui utilities in your cluster
    apiVersion: v1
    kind: Pod
    metadata:
      name: mqtt-client
      # The namespace must match the IoT MQ BrokerListener's namespace
      # Otherwise use the long hostname: aio-broker.azure-iot-operations.svc.cluster.local
      namespace: azure-iot-operations
    spec:
      # Use the "mqtt-client" service account which comes with default deployment
      # Otherwise create it with `kubectl create serviceaccount mqtt-client -n azure-iot-operations`
      serviceAccountName: mqtt-client
      containers:
        # Install mosquitto and mqttui utilities on Alpine linux
      - image: alpine
        name: mqtt-client
        command: ["sh", "-c"]
        args: ["apk add mosquitto-clients mqttui && sleep infinity"]
        resources:
          limits:
            cpu: 500m
            memory: 200Mi
          requests:
            cpu: 100m
            memory: 100Mi
        volumeMounts:
        - name: broker-sat
          mountPath: /var/run/secrets/tokens
        - name: trust-bundle
          mountPath: /var/run/certs
      volumes:
      - name: broker-sat
        projected:
          sources:
          - serviceAccountToken:
              path: broker-sat
              audience: aio-internal # Must match audience in BrokerAuthentication
              expirationSeconds: 86400
      - name: trust-bundle
        configMap:
          name: azure-iot-operations-aio-ca-trust-bundle # Default root CA cert
    

    Cuidado

    Essa configuração não é segura. Não use essa configuração em um ambiente de produção.

  2. Quando o pod mqtt-client estiver em execução, execute o seguinte comando para criar um ambiente de shell no pod que você criou:

    kubectl exec --stdin --tty mqtt-client -n azure-iot-operations -- sh
    
  3. No shell do Bash no pod mqtt-client, execute o seguinte comando para se conectar ao agente MQTT usando a ferramenta mosquitto_sub inscrita no tópico data/thermostat:

    mosquitto_sub --host aio-broker --port 18883 --topic "azure-iot-operations/data/#" -v --debug --cafile /var/run/certs/ca.crt -D CONNECT authentication-method 'K8S-SAT' -D CONNECT authentication-data $(cat /var/run/secrets/tokens/broker-sat)
    

    Esse comando continua a ser executado e exibe mensagens à medida que chegam ao tópico data/thermostat até que você pressione Ctrl+C para interrompê-lo.

Para verificar se o ativo de termostato que você adicionou está publicando dados, exiba a telemetria no tópico azure-iot-operations/data:

Client $server-generated/05a22b94-c5a2-4666-9c62-837431ca6f7e received PUBLISH (d0, q0, r0, m0, 'azure-iot-operations/data/thermostat', ... (152 bytes))
{"temperature":{"SourceTimestamp":"2024-07-29T15:02:17.1858435Z","Value":4558},"Tag 10":{"SourceTimestamp":"2024-07-29T15:02:17.1858869Z","Value":4558}}
Client $server-generated/05a22b94-c5a2-4666-9c62-837431ca6f7e received PUBLISH (d0, q0, r0, m0, 'azure-iot-operations/data/thermostat', ... (152 bytes))
{"temperature":{"SourceTimestamp":"2024-07-29T15:02:18.1838125Z","Value":4559},"Tag 10":{"SourceTimestamp":"2024-07-29T15:02:18.1838523Z","Value":4559}}
Client $server-generated/05a22b94-c5a2-4666-9c62-837431ca6f7e received PUBLISH (d0, q0, r0, m0, 'azure-iot-operations/data/thermostat', ... (152 bytes))
{"temperature":{"SourceTimestamp":"2024-07-29T15:02:19.1834363Z","Value":4560},"Tag 10":{"SourceTimestamp":"2024-07-29T15:02:19.1834879Z","Value":4560}}
Client $server-generated/05a22b94-c5a2-4666-9c62-837431ca6f7e received PUBLISH (d0, q0, r0, m0, 'azure-iot-operations/data/thermostat', ... (152 bytes))
{"temperature":{"SourceTimestamp":"2024-07-29T15:02:20.1861251Z","Value":4561},"Tag 10":{"SourceTimestamp":"2024-07-29T15:02:20.1861709Z","Value":4561}}
Client $server-generated/05a22b94-c5a2-4666-9c62-837431ca6f7e received PUBLISH (d0, q0, r0, m0, 'azure-iot-operations/data/thermostat', ... (152 bytes))
{"temperature":{"SourceTimestamp":"2024-07-29T15:02:21.1856798Z","Value":4562},"Tag 10":{"SourceTimestamp":"2024-07-29T15:02:21.1857211Z","Value":4562}}

Se não houver nenhum fluxo de dados, reinicie o pod aio-opc-opc.tcp-1:

  1. Localize o nome do seu pod aio-opc-opc.tcp-1 usando o seguinte comando:

    kubectl get pods -n azure-iot-operations
    

    O nome do pod é semelhante a aio-opc-opc.tcp-1-849dd78866-vhmz6.

  2. Reinicie o pod aio-opc-opc.tcp-1 usando um comando semelhante ao exemplo a seguir. Use o nome do pod aio-opc-opc.tcp-1 da etapa anterior:

    kubectl delete pod aio-opc-opc.tcp-1-849dd78866-vhmz6 -n azure-iot-operations
    

As marcas de exemplo que você adicionou no início rápido anterior geram mensagens de seu ativo semelhantes aos seguintes exemplos:

{
    "temperature": {
        "SourceTimestamp": "2024-08-02T13:52:15.1969959Z",
        "Value": 2696
    },
    "Tag 10": {
        "SourceTimestamp": "2024-08-02T13:52:15.1970198Z",
        "Value": 2696
    }
}

Como resolvemos o problema?

Nesse início rápido, você adicionou um ponto de extremidade de ativo e definiu um ativo e tags. Os ativos e tags modelam dados do servidor OPC UA para facilitar o uso dos dados em um agente do MQTT e em outros processos downstream. Use o ativo de termostato que você definiu no próximo início rápido.

Limpar os recursos

Se você continuar no próximo início rápido, mantenha todos os seus recursos.

Caso queira remover a implantação das Operações IoT do Azure, mas manter o seu cluster, use o comando az iot ops delete:

az iot ops delete --cluster $CLUSTER_NAME --resource-group $RESOURCE_GROUP

Caso queira excluir todos os recursos criados para este início rápido, exclua o cluster do Kubernetes no qual você implantou as Operações do Azure IoT e remova o grupo de recursos do Azure que continha o cluster.

Se você usou os Codespaces para esses inícios rápidos, exclua seu Codespace do GitHub.

Próxima etapa

Início rápido: Enviar telemetria de ativos para a nuvem usando o conector do data lake para o agente MQTT.