Condividi tramite


Suggerimenti e strumenti per la risoluzione dei problemi dell'istanza di Operazioni IoT di Azure

Questo articolo descrive come usare alcuni strumenti comuni durante l'apprendimento, l'esplorazione o la risoluzione dei problemi delle istanze di Operazioni IoT di Azure. Questi strumenti sono oltre alle funzionalità fornite dalle portale di Azure, dall'interfaccia della riga di comando di Azure, dall'interfaccia della riga di comando di Azure, dall'interfaccia utente Web dell'esperienza operativa e dalle risorse di osservabilità.

Strumenti di Kubernetes

I componenti di Operazioni IoT di Azure vengono eseguiti in un cluster Kubernetes standard. È possibile usare gli strumenti dell'interfaccia della kubectl riga di comando e k9s per interagire con e gestire il cluster.

kubectl

kubectl è lo strumento da riga di comando kubernetes per la gestione del cluster. Offre molte funzionalità che è possibile ottenere nella documentazione ufficiale di kubernetes. Questo articolo descrive gli usi comuni per kubectl quando si usano le operazioni di Azure IoT, ad esempio elencare i pod in esecuzione e visualizzare i log.

Configurare kubectl per connettersi all'istanza

L'articolo Preparare il cluster Kubernetes abilitato per Azure Arc descrive come configurare kubectl per connettersi al cluster k3s quando si eseguono kubectl comandi nello stesso computer in cui è stato distribuito il cluster Kubernetes.

Suggerimento

Aggiungere il export KUBECONFIG=~/.kube/config comando al file con estensione bashrc o .bash_profile in modo che non sia necessario impostare la KUBECONFIG variabile di ambiente ogni volta che si apre una nuova finestra del terminale.

Se l'istanza di Azure IoT Operations è stata distribuita in un servizio Azure Kubernetes-EE abilitato per Arc, la kubectl configurazione viene configurata automaticamente. È possibile eseguire kubectl comandi direttamente dalla riga di comando nel computer in cui è stato distribuito il cluster.

È anche possibile eseguire kubectl comandi dal computer client locale anziché dal computer in cui è stato distribuito il cluster abilitato per Arc:

Come passaggio una tantum, usare SSH per connettersi al computer in cui è stato distribuito il cluster ed eseguire i comandi seguenti. Assicurarsi di sostituire <your-name> con il nome:

kubectl create serviceaccount <your-name> -n default
kubectl create clusterrolebinding <your-name>-binding --clusterrole cluster-admin --serviceaccount default:<your-name>
kubectl apply -f - <<EOF
apiVersion: v1
kind: Secret
metadata:
    name: <your-name>-secret
    annotations:
        kubernetes.io/service-account.name: <your-name>
type: kubernetes.io/service-account-token
EOF
TOKEN=$(kubectl get secret <your-name>-secret -o jsonpath='{$.data.token}' | base64 -d | sed 's/$/\n/g')
echo $TOKEN

Prendere nota del token. Questo token viene usato per eseguire l'autenticazione quando si eseguono kubectl comandi nel computer client. È ora possibile disconnettersi dal computer che esegue il cluster Kubernetes.

Per usare kubectl nel computer client per connettersi al cluster, aprire due terminali:

  1. Nel primo terminale eseguire il comando seguente per configurare un proxy per connettersi al cluster. Assicurarsi di sostituire i valori per i tre segnaposto:

    az connectedk8s proxy -n <your-arc-enabled-cluster-name> -g <your-arc-enabled-cluster-resource-group> --token <token-from-previous-step>
    

    Lasciare aperto questo terminale mentre si eseguono kubectl i comandi nel secondo terminale.

  2. Nel secondo terminale è possibile eseguire i kubectl comandi nel cluster remoto. Ad esempio, per elencare i pod nello spazio dei azure-iot-operations nomi :

    kubectl get pods -n azure-iot-operations
    

    Suggerimento

    È anche possibile eseguire comandi, ad esempio k9s, che usano la kubectl configurazione in questo terminale.

    Il kubectl contesto rimane impostato sul cluster remoto fino a quando non si chiude il primo terminale.

Per altre informazioni, vedere Usare la connessione al cluster per connettersi in modo sicuro ai cluster Kubernetes abilitati per Azure Arc.

Namespaces (Spazi dei nomi)

Per impostazione predefinita, Arc e Azure IoT Operations usano gli spazi dei nomi seguenti nel cluster Kubernetes:

  • azure-iot-operations per i componenti di Operazioni IoT di Azure.
  • azure-arc per i componenti Kubernetes abilitati per Azure Arc.

Suggerimento

Per visualizzare tutti gli spazi dei nomi nel cluster, eseguire il comando seguente: kubectl get namespaces.

Comandi comuni kubectl

Per visualizzare tutti i pod in esecuzione nello spazio dei azure-iot-operations nomi, eseguire il comando seguente:

kubectl get pods -n azure-iot-operations

L'output ha un aspetto simile all'esempio seguente:

NAME                                              READY   STATUS      RESTARTS       AGE
adr-schema-registry-0                             2/2     Running     0              19m
adr-schema-registry-1                             2/2     Running     0              19m
aio-akri-agent-777477bc68-72lrg                   1/1     Running     7 (83m ago)    21d
aio-broker-authentication-0                       1/1     Running     7 (83m ago)    21d
aio-broker-backend-1-0                            1/1     Running     11 (82m ago)   21d
aio-broker-backend-1-1                            1/1     Running     7 (83m ago)    21d
aio-broker-diagnostics-probe-0                    1/1     Running     11 (83m ago)   21d
aio-broker-diagnostics-service-0                  1/1     Running     7 (83m ago)    21d
aio-broker-fluent-bit-6bkf2                       1/1     Running     0              16m
aio-broker-frontend-0                             1/1     Running     12 (83m ago)   21d
aio-broker-health-manager-0                       1/1     Running     14 (82m ago)   21d
aio-broker-operator-0                             1/1     Running     7 (83m ago)    21d
aio-broker-upgrade-status-job-1.0.4-bwlcc         0/1     Completed   0              77m
aio-broker-webhook-admission-65d67f8ddc-jct9j     1/1     Running     0              82m
aio-dataflow-admission-webhook-84dd44c8bd-6pw58   1/1     Running     7 (83m ago)    21d
aio-dataflow-operator-0                           1/1     Running     14 (83m ago)   21d
aio-dataflow-upgrade-status-job-1.0.5-msmf4       0/1     Completed   0              77m
aio-opc-asset-discovery-54649d46cf-kb6qs          1/1     Running     2 (83m ago)    17d
aio-opc-media-1-785748ff6c-qkhgl                  1/1     Running     1 (83m ago)    14d
aio-opc-opc.tcp-1-858b9ff67-dxwvb                 1/1     Running     4 (80m ago)    17d
aio-opc-supervisor-5d6b9bfc49-fgt7d               1/1     Running     2 (83m ago)    17d
aio-operator-7b9b585dc6-bvfpd                     2/2     Running     0              19m
aio-usage-28946280-f42k8                          0/1     Completed   0              14d
aio-usage-28946340-45grx                          0/1     Completed   0              14d
aio-usage-28946400-znn7v                          0/1     Completed   0              13d
aio-usage-28946460-nrw4z                          0/1     Completed   0              13d
aio-usage-28966500-mrcmf                          0/1     Completed   0              55m

Per visualizzare i log per un pod specifico, ad esempio aio-opc-opc.tcp-1-858b9ff67-dxwvb pod, eseguire il comando seguente:

kubectl logs aio-opc-opc.tcp-1-858b9ff67-dxwvb -n azure-iot-operations

Per visualizzare una descrizione leggibile di un pod specifico, ad esempio aio-opc-opc.tcp-1-858b9ff67-dxwvb, eseguire il comando seguente:

kubectl describe pod aio-opc-opc.tcp-1-858b9ff67-dxwvb -n azure-iot-operations

In alcuni casi, la documentazione relativa alle operazioni di Azure IoT usa il comando kubectl apply per applicare un file manifesto Kubernetes per apportare una modifica alla configurazione nel cluster.

k9s

L'utilità k9s offre un'interfaccia utente basata su terminale per la gestione del cluster Kubernetes. Usa la kubectl configurazione per connettersi al cluster e offre un modo visivo per interagire con il cluster. La visualizzazione predefinita elenca tutti i pod attualmente in esecuzione nel cluster:

Screenshot che mostra la visualizzazione k9s predefinita.

Quando si lavora con le operazioni di Azure IoT, è possibile filtrare la visualizzazione in modo da visualizzare solo i pod nello spazio dei azure-iot-operations nomi.

  1. Digitare : per aprire il pannello dei comandi, quindi digitare ns e premere INVIO.

  2. Nell'elenco degli spazi dei nomi selezionare azure-iot-operations e premere INVIO.

  3. L'elenco dei pod mostra ora solo i pod nello spazio dei nomi azure-iot-operations :

    Screenshot che mostra l'elenco k9s di pod filtrati nello spazio dei nomi azure-iot-operations.

Suggerimento

È ora possibile usare le chiavi numerice per applicare i filtri. Lo screenshot precedente mostra che 0 mostra tutti i pod e 1 mostra solo i pod nello spazio dei nomi azure-iot-operations .

È possibile usare i tasti di scelta rapida per visualizzare informazioni sui pod. Ad esempio:

  • Per descrivere un pod, selezionarlo nell'elenco e premere d.

    Screenshot che mostra una descrizione in k9s di un pod in esecuzione.

  • Per visualizzare i log per un pod, selezionarlo nell'elenco e premere l.

    Screenshot che mostra il log di un pod in esecuzione in k9s.

    Suggerimento

    È possibile usare le chiavi numerice per spostarsi nel file di log.

Per visualizzare tipi di risorse personalizzati altri pod nel cluster:

  1. Premere CTRL+A per visualizzare l'elenco dei tipi di risorse personalizzati.

  2. Selezionare il tipo di risorsa personalizzato, ad esempio i dispositivi e premere INVIO.

    Suggerimento

    Per cercare un tipo di risorsa personalizzato in base al nome, digitare / e quindi iniziare a digitare il nome del tipo che si sta cercando.

  3. Selezionare una risorsa personalizzata e scegliere una delle operazioni disponibili. Ad esempio, è possibile visualizzare la definizione YAML di un profilo endpoint dispositivo selezionandolo e premendo y. Per alcune risorse, è possibile modificare la configurazione.

La tabella seguente descrive alcuni dei tipi di risorse personalizzati che è possibile usare in Operazioni IoT di Azure:

Tipo di risorsa personalizzato Descrizione
devices Rappresenta la configurazione per un dispositivo.
assets Rappresenta la configurazione di un asset.
brokers, brokerlisters, brokerauthenticationsbrokerauthorizations Rappresenta la configurazione per un broker MQTT.
dataflows, dataflowendpoints, dataflowprofiles Rappresentare la configurazione per un flusso di dati.
secrets, secretsyncs, secretproviderclasses Rappresenta la configurazione per i segreti e la gestione dei segreti.

Strumenti MQTT

Quando si apprende e si testa il broker MQTT nell'istanza di Operazioni IoT di Azure, è possibile usare gli strumenti client MQTT per interagire con il broker. Tuttavia, per motivi di sicurezza, le operazioni IoT di Azure non espongono il broker MQTT all'esterno del cluster. Come soluzione alternativa, sono disponibili le opzioni seguenti:

Attenzione

Questi tre approcci sono adatti solo per ambienti di sviluppo e test. In nessun caso è consigliabile usarli in un ambiente di produzione.

  • Connettersi al listener predefinito all'interno del cluster. Questa opzione usa la configurazione predefinita e non richiede aggiornamenti aggiuntivi. Si è limitati a un piccolo set di strumenti client MQTT.

  • Usare un NodePort servizio per esporre il broker MQTT all'esterno del cluster. Questa opzione richiede di aggiornare la configurazione del broker MQTT. È possibile usare qualsiasi strumento client MQTT che supporti la connessione a una porta specifica.

  • Usare un LoadBalancer servizio per esporre il broker MQTT all'esterno del cluster. Questa opzione richiede di aggiornare la configurazione del broker MQTT. È possibile usare qualsiasi strumento client MQTT che supporti la connessione a una porta specifica.

Connettersi al listener predefinito all'interno del cluster

Per connettersi al listener predefinito all'interno del cluster, è possibile distribuire un pod che esegue strumenti client MQTT basati sull'interfaccia della riga di comando, mosquitto_sub ad esempio e mosquitto_pub. Il comando seguente distribuisce un pod di questo tipo nel cluster:

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

Dopo l'esecuzione del pod, è possibile connettersi a una shell nel pod:

kubectl exec --stdin --tty mqtt-client -n azure-iot-operations -- sh

Usare questa shell per eseguire comandi come mosquitto_sub e mosquitto_pub per interagire con il broker MQTT. Ad esempio, per sottoscrivere tutti gli argomenti nell'argomento azure-iot-operations/data :

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

Si noti che il comando carica un file di certificato e un token dal file system del pod. Il mqtt-client.yaml file manifesto monta questi file nel pod.

Per ricevere un singolo messaggio dall'argomento azure-iot-operations/data/thermostat , aggiungere l'opzione -C 1 :

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

Per visualizzare le proprietà utente MQTT v5 nei messaggi, usare l'opzione -F %P :

mosquitto_sub --host aio-broker --port 18883 --topic "azure-iot-operations/data/thermostat" -V mqttv5 -F %P --cafile /var/run/certs/ca.crt -D CONNECT authentication-method 'K8S-SAT' -D CONNECT authentication-data $(cat /var/run/secrets/tokens/broker-sat)

Per pubblicare un messaggio nell'argomento azure-iot-operations/data/valve :

mosquitto_pub --host aio-broker --port 18883 --topic "azure-iot-operations/data/valve" --message "open:15%" --id "controller" --cafile /var/run/certs/ca.crt -D CONNECT authentication-method 'K8S-SAT' -D CONNECT authentication-data $(cat /var/run/secrets/tokens/broker-sat)

Al termine dell'uso del pod degli strumenti client MQTT, è possibile eliminarlo dal cluster:

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

Per altre informazioni su questa configurazione, vedere Connettersi al listener predefinito all'interno del cluster.

Usare un NodePort servizio o LoadBalancer

Se si seguono i passaggi per configurare una porta Node o un servizio di bilanciamento del carico per esporre il broker MQTT all'esterno del cluster, è possibile usare qualsiasi strumento client MQTT che supporti la connessione a una porta specifica. Negli esempi seguenti si presuppone che il servizio sia stato configurato senza autenticazione, autorizzazione o TLS. È ora possibile usare gli strumenti client MQTT preferiti per connettersi al broker MQTT sulla porta 1883 se si usa un servizio di bilanciamento del carico o la porta configurata se si usa una porta del nodo.

Ad esempio, per eseguire lo strumento mqttui open source nel computer in cui è in esecuzione il cluster Kubernetes, usare il comando seguente:

mqttui --broker mqtt://localhost:1883

Suggerimento

Se è stato configurato un servizio di bilanciamento del carico e la porta 1883 è aperta nell'indirizzo IP pubblico del computer host, è possibile usare il comando seguente per connettersi al broker MQTT da un computer diverso: mqttui --broker mqtt://<cluster-machine-public-ip>:1883

È possibile usare lo mqttui strumento per sottoscrivere argomenti, pubblicare messaggi e visualizzare i messaggi trasmessi attraverso il broker:

Screenshot che mostra lo strumento MQTTUI che mostra tutti gli argomenti.

Per visualizzare i messaggi in un argomento specifico, ad azure-iot-operations/data/thermostatesempio , usare il comando seguente:

mqttui --broker mqtt://localhost:1883 azure-iot-operations/data/thermostat

Per pubblicare un messaggio nell'argomento azure-iot-operations/data/valve , usare il comando seguente:

mqttui publish --broker mqtt://localhost:1883 azure-iot-operations/data/valve open:15%

Per eseguire lo strumento MQTT Explorer open source nel computer in cui è in esecuzione il cluster Kubernetes, usare la configurazione seguente:

Screenshot che mostra la configurazione localhost di MQTT Explorer.

Per eseguire lo strumento MQTT Explorer open source nel computer locale per connettersi al computer in cui è in esecuzione il cluster Kubernetes, usare la configurazione seguente:

Screenshot che mostra la configurazione dell'host remoto di MQTT Explorer.

Assicurarsi che MQTT Explorer abbia almeno l'argomento # configurato:

Screenshot che mostra la configurazione dell'argomento predefinito di MQTT Explorer.

Dopo la connessione, è possibile visualizzare i messaggi negli argomenti sottoscritti e pubblicare messaggi:

Screenshot che mostra gli argomenti relativi alle operazioni di Azure IoT sottoscritti da MQTT Explorer.

Suggerimenti

Ecco alcuni suggerimenti aggiuntivi che consentono di usare l'istanza di Operazioni IoT di Azure:

Trovare la posizione personalizzata dell'istanza di Azure IoT Operations

Per trovare il percorso personalizzato associato all'istanza di Azure IoT Operations, usare il comando seguente:

az iot ops show --name <YOUR_INSTANCE_NAME> --resource-group <YOUR_RESOURCE_GROUP> --query "extendedLocation.name" --output tsv

È anche possibile trovare il percorso personalizzato nel portale di Azure nella pagina di panoramica dell'istanza nel campo Percorso esteso .