Dela via


Tips och verktyg för att felsöka din Azure IoT Operations-instans

Den här artikeln beskriver hur du använder några vanliga verktyg när du lär dig, utforskar eller felsöker dina Azure IoT Operations-instanser. De här verktygen är utöver de funktioner som tillhandahålls av Azure Portal, Azure CLI, driftupplevelsens webbgränssnitt och observerbarhetsresurser.

Kubernetes-verktyg

Azure IoT Operations-komponenter körs i ett Kubernetes-standardkluster. Du kan använda CLI-verktygen kubectl och k9s för att interagera med och hantera klustret.

kubectl

kubectl är kommandoradsverktyget Kubernetes för att hantera klustret. Den har många funktioner som du kan lära dig mer om i den officiella kubernetes-dokumentationen. Den här artikeln beskriver vanliga användningsområden för kubectl när du arbetar med Azure IoT Operations, till exempel att visa de poddar som körs och visa loggar.

Konfigurera kubectl för att ansluta till din instans

I artikeln Förbered ditt Azure Arc-aktiverade Kubernetes-kluster beskrivs hur du konfigurerar kubectl för att ansluta till k3s-klustret när du kör kubectl kommandon på samma dator där du distribuerade kubernetes-klustret.

Dricks

Lägg till kommandot i export KUBECONFIG=~/.kube/config.bashrc - eller .bash_profile-filen så att du inte behöver ange KUBECONFIG miljövariabeln varje gång du öppnar ett nytt terminalfönster.

Om du distribuerade din Azure IoT Operations-instans till en Arc-aktiverad AKS-EE konfigureras konfigurationen kubectl automatiskt åt dig. Du kan köra kubectl kommandon direkt från kommandoraden på den dator där du distribuerade klustret.

Det går också att köra kubectl kommandon från den lokala klientdatorn i stället för den dator där du distribuerade det Arc-aktiverade klustret:

Som ett engångssteg använder du SSH för att ansluta till datorn där du distribuerade klustret och kör följande kommandon. Ersätt <your-name> med ditt namn:

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

Anteckna token. Du använder den här token för att autentisera när du kör kubectl kommandon på klientdatorn. Nu kan du koppla från datorn som kör Kubernetes-klustret.

Om du vill använda kubectl på klientdatorn för att ansluta till klustret öppnar du två terminaler:

  1. I den första terminalen kör du följande kommando för att konfigurera en proxy för att ansluta till klustret. Se till att ersätta värdena för de tre platshållarna:

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

    Lämna terminalen öppen medan du kör kubectl kommandon i den andra terminalen.

  2. I den andra terminalen kan du köra dina kubectl kommandon mot fjärrklustret. Om du till exempel vill lista poddarna i azure-iot-operations namnområdet:

    kubectl get pods -n azure-iot-operations
    

    Dricks

    Du kan också köra kommandon, till exempel , som k9sanvänder konfigurationen kubectl i den här terminalen.

    Kontexten kubectl förblir inställd på fjärrklustret tills du stänger din första terminal.

Mer information finns i Använda klusteranslutning för att ansluta på ett säkert sätt till Azure Arc-aktiverade Kubernetes-kluster.

Namnrymder

Som standard använder Arc och Azure IoT Operations följande namnområden i Kubernetes-klustret:

  • azure-iot-operations för Azure IoT Operations-komponenterna.
  • azure-arc för Azure Arc-aktiverade Kubernetes-komponenter.

Dricks

Om du vill visa alla namnområden i klustret kör du följande kommando: kubectl get namespaces.

Vanliga kubectl kommandon

Om du vill visa alla poddar som körs i azure-iot-operations namnområdet kör du följande kommando:

kubectl get pods -n azure-iot-operations

Utdata ser ut som i följande exempel:

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

Kör följande kommando för att visa loggarna för en specifik podd, till exempel podden aio-opc-opc.tcp-1-858b9ff67-dxwvb:

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

Kör följande kommando för att visa en läsbar beskrivning av en specifik podd, till exempel podden aio-opc-opc.tcp-1-858b9ff67-dxwvb :

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

På vissa ställen använder Azure IoT Operations-dokumentationen kommandot kubectl apply för att tillämpa en Kubernetes-manifestfil för att göra en konfigurationsändring i klustret.

k9s

Verktyget k9s erbjuder ett terminalbaserat användargränssnitt för att hantera ditt Kubernetes-kluster. Den använder konfigurationen kubectl för att ansluta till klustret och ger ett visuellt sätt att interagera med klustret. Dess standardvy visar alla poddar som körs i klustret:

Skärmbild som visar standardvyn k9s.

När du arbetar med Azure IoT Operations kan du filtrera vyn så att endast poddarna visas i azure-iot-operations namnområdet.

  1. Skriv : för att öppna kommandopanelen och skriv ns och tryck på Retur.

  2. I listan med namnområden väljer du azure-iot-operations och trycker på Retur.

  3. Listan över poddar visar nu endast poddarna i namnområdet azure-iot-operations :

    Skärmbild som visar k9s-listan över poddar som filtrerats till namnområdet azure-iot-operations.

Dricks

Nu kan du använda nummernycklarna för att tillämpa filter. Föregående skärmbild visar att 0 visar alla poddar och 1 endast visar poddarna i namnområdet azure-iot-operations .

Du kan använda genvägsnycklar för att visa information om dina poddar. Till exempel:

  • Om du vill beskriva en podd väljer du den i listan och trycker på d.

    Skärmbild som visar en beskrivning i k9s för en podd som körs.

  • Om du vill visa loggarna för en podd markerar du den i listan och trycker på l.

    Skärmbild som visar loggen för en podd som körs i k9s.

    Dricks

    Du kan använda nummernycklarna för att navigera runt loggfilen.

Så här visar du andra anpassade resurstyper som poddar i klustret:

  1. Tryck på Ctrl-a för att visa listan över anpassade resurstyper.

  2. Välj den anpassade resurstypen, till exempel assetendpointprofiles och tryck på Retur.

    Dricks

    Om du vill söka efter en anpassad resurstyp efter namn skriver / du och börjar sedan skriva namnet på den typ du letar efter.

  3. Välj en anpassad resurs och välj en av de tillgängliga åtgärderna. Du kan till exempel visa YAML-definitionen för en enhetsslutpunktsprofil genom att välja den och trycka på y. För vissa resurser kan du redigera konfigurationen.

I följande tabell beskrivs några av de anpassade resurstyper som du kan arbeta med i Azure IoT Operations:

Anpassad resurstyp beskrivning
devices Representerar konfigurationen för en enhet.
assets Representerar konfigurationen för en tillgång.
brokers, brokerlisters, , brokerauthenticationsbrokerauthorizations Representerar konfigurationen för en MQTT-koordinator.
dataflows, , dataflowendpointsdataflowprofiles Representera konfigurationen för ett dataflöde.
secrets, , secretsyncssecretproviderclasses Representerar konfigurationen för hemligheter och hemlig hantering.

MQTT-verktyg

När du lär dig om och testar MQTT-koordinatorn i din Azure IoT Operations-instans kan du använda MQTT-klientverktyg för att interagera med asynkron meddelandekö. Av säkerhetsskäl exponerar Dock inte Azure IoT Operations MQTT-koordinatorn utanför klustret. Som en work-around har du följande alternativ:

Varning

Dessa tre metoder är endast lämpliga för utvecklings- och testmiljöer. Du bör inte under några omständigheter använda dem i en produktionsmiljö.

  • Anslut till standardlyssnaren i klustret. Det här alternativet använder standardkonfigurationen och kräver inga extra uppdateringar. Du är begränsad till en liten uppsättning MQTT-klientverktyg.

  • Använd en NodePort tjänst för att exponera MQTT-koordinatorn utanför klustret. Det här alternativet kräver att du uppdaterar konfigurationen av MQTT-koordinatorn. Du kan använda MQTT-klientverktyg som stöder anslutning till en specifik port.

  • Använd en LoadBalancer tjänst för att exponera MQTT-koordinatorn utanför klustret. Det här alternativet kräver att du uppdaterar konfigurationen av MQTT-koordinatorn. Du kan använda MQTT-klientverktyg som stöder anslutning till en specifik port.

Ansluta till standardlyssnaren i klustret

Om du vill ansluta till standardlyssnaren i klustret kan du distribuera en podd som kör CLI-baserade MQTT-klientverktyg som mosquitto_sub och mosquitto_pub. Följande kommando distribuerar en sådan podd till klustret:

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

När podden har körts kan du ansluta till ett gränssnitt i podden:

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

Använd det här gränssnittet för att köra kommandon som mosquitto_sub och mosquitto_pub för att interagera med MQTT-koordinatorn. Om du till exempel vill prenumerera på alla ämnen under ämnet 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)

Observera hur kommandot läser in en certifikatfil och en token från poddens filsystem. Manifestfilen mqtt-client.yaml monterar dessa filer i podden.

Om du vill ta emot ett enda meddelande från ämnet azure-iot-operations/data/thermostat lägger du till alternativet -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)

Om du vill visa MQTT v5-användaregenskaperna i meddelandena använder du alternativet -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)

Så här publicerar du ett meddelande till ämnet 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)

När du är klar med MQTT-klientverktygspodden kan du ta bort den från klustret:

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

Mer information om den här konfigurationen finns i Ansluta till standardlyssnaren i klustret.

Använda en NodePort eller LoadBalancer tjänst

Om du följer stegen för att konfigurera en nodport eller en lastbalanserare för att exponera MQTT-koordinatorn utanför klustret kan du använda MQTT-klientverktyg som stöder anslutning till en specifik port. I följande exempel förutsätts att du har konfigurerat tjänsten utan autentisering, auktorisering eller TLS. Du kan nu använda dina MQTT-favoritklientverktyg för att ansluta till MQTT-koordinatorn på port 1883 om du använder en lastbalanserare eller den konfigurerade porten om du använder en nodport.

Om du till exempel vill köra Mqttui-verktyget med öppen källkod på den dator där Kubernetes-klustret körs använder du följande kommando:

mqttui --broker mqtt://localhost:1883

Dricks

Om du har konfigurerat en lastbalanserare och port 1883 är öppen på värddatorns offentliga IP-adress kan du använda följande kommando för att ansluta till MQTT-koordinatorn från en annan dator: mqttui --broker mqtt://<cluster-machine-public-ip>:1883

Du kan använda mqttui verktyget för att prenumerera på ämnen, publicera meddelanden och visa de meddelanden som flödar via asynkron meddelandekö:

Skärmbild som visar MQTTUI-verktyget som visar alla ämnen.

Om du vill visa meddelanden i ett visst ämne, till exempel azure-iot-operations/data/thermostat, använder du följande kommando:

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

Om du vill publicera ett meddelande till ämnet azure-iot-operations/data/valve använder du följande kommando:

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

Om du vill köra MQTT Explorer-verktyget med öppen källkod på datorn där Kubernetes-klustret körs använder du följande konfiguration:

Skärmbild som visar konfigurationen för localhost för MQTT Explorer.

Använd följande konfiguration för att köra MQTT Explorer-verktyget med öppen källkod på den lokala datorn för att ansluta till datorn där Kubernetes-klustret körs:

Skärmbild som visar fjärrvärdkonfigurationen för MQTT Explorer.

Kontrollera att MQTT Explorer har minst det # konfigurerade ämnet:

Skärmbild som visar standardämneskonfigurationen för MQTT Explorer.

När du har anslutit kan du se meddelanden i de ämnen som du prenumererar på och publicera meddelanden:

Skärmbild som visar avsnitten om MQTT Explorer som prenumererar på Azure IoT Operations.