Freigeben über


Behandeln von Problemen mit Bare-Metal-Computern mithilfe des Befehls az networkcloud baremetalmachine run-data-extract

Es kann Situationen geben, in denen ein Benutzer Probleme mit einem lokalen Bare-Metal-Computer untersuchen und auflösen muss. Azure Operator Nexus bietet über az networkcloud baremetalmachine run-data-extract einen vorgeschriebenen Satz von Datenextraktionsbefehlen. Mit diesen Befehlen können Benutzer Diagnosedaten von einem Bare-Metal-Computer abrufen.

Der Befehl erzeugt eine Ausgabedatei, welche die Ergebnisse der Datenextraktion enthält. Standardmäßig werden die Daten an das Clustermanager-Speicherkonto gesendet. Es gibt auch eine Vorschaumethode, mit der Benutzer die Clusterressource mit einem Speicherkonto und einer Identität konfigurieren können, die Zugriff auf das Speicherkonto hat, um die Ausgabe zu erhalten.

Voraussetzungen

  • Dieser Artikel geht davon aus, dass die Azure-Befehlszeilenschnittstelle und die networkcloud-Erweiterung der Befehlszeilenschnittstelle installiert sind. Weitere Informationen finden Sie unter Installieren von CLI-Erweiterungen.
  • Der Bare-Metal-Zielcomputer ist eingeschaltet und bereit.
  • Die Syntax für diese Befehle basiert auf Version 0.3.0+ der az networkcloud CLI.
  • Rufen Sie den Namen der vom Cluster verwalteten Ressourcengruppe (cluster_MRG) ab, den Sie für die Clusterressource erstellt haben.

Überprüfen des Zugriffs auf das Clustermanager-Speicherkonto

Hinweis

Die Ausgabemethode des Clustermanager-Speicherkontos wird in Zukunft veraltet werden, sobald das Cluster-Onboarding zu vertrauenswürdigen Diensten abgeschlossen ist und die Option benutzerseitig verwalteter Speicher vollständig unterstützt wird.

Überprüfen Sie bei Verwendung der Clustermanager-Speichermethode, ob Sie Zugriff auf das Speicherkonto des Clustermanagers haben:

  1. Navigieren Sie im Azure-Portal zum Speicherkonto des Cluster-Managers.
  2. Wählen Sie in den Details des Speicherkontos den Speicherbrowser im Navigationsmenü auf der linken Seite aus.
  3. Wählen Sie in den Details des Speicherbrowsers die Option für Blobcontainer aus.
  4. Wenn beim Zugriff auf das Speicherkonto 403 This request is not authorized to perform this operation. auftritt, müssen die Firewalleinstellungen des Speicherkontos aktualisiert werden, um die öffentliche IP-Adresse einzuschließen.
  5. Fordern Sie den Zugriff an, indem Sie über das Portal ein Supportticket für die Cluster-Manager-Ressource erstellen. Geben Sie die öffentliche IP-Adresse an, die Zugriff erfordert.

VORSCHAU: Senden der Befehlsausgabe an ein vom Benutzer angegebenes Speicherkonto

Wichtig

Bitte beachten Sie, dass sich diese Methode zum Angeben eines Benutzerspeicherkontos für die Befehlsausgabe in der Vorschau befindet. Diese Methode sollte nur mit Benutzerspeicherkonten verwendet werden, für die keine Firewall aktiviert ist. Wenn für Ihre Umgebung die Speicherkontofirewall aktiviert sein muss, verwenden Sie die vorhandene Clustermanager-Ausgabemethode.

Erstellen und Konfigurieren von Speicherressourcen

  1. Erstellen Sie ein Speicherkonto, oder identifizieren Sie ein vorhandenes Speicherkonto, das Sie verwenden möchten. Siehe Erstellen eines Azure-Speicherkontos.
  2. Erstellen Sie einen Blob Storage-Container im Speicherkonto. Siehe Erstellen eines Containers.
  3. Weisen Sie den Benutzern und verwalteten Identitäten die Rolle „Mitwirkender für Speicherblobdaten“ zu, die Zugriff auf die Ausgabe des Run-Data-Extrakts benötigen.
    1. Weitere Informationen finden Sie unter Zuweisen einer Azure-Rolle für den Zugriff auf Blobdaten. Die Rolle muss auch einer benutzerseitig zugewiesenen verwalteten Identität oder der eigenen systemseitig zugewiesenen verwalteten Identität des Clusters zugewiesen werden.
    2. Weitere Informationen zu verwalteten Identitäten finden Sie unter Was sind verwaltete Identitäten für Azure-Ressourcen?.
    3. Wenn Sie die systemseitig zugewiesene Identität des Clusters verwenden, muss diese dem Cluster hinzugefügt werden, bevor der Zugriff gewährt werden kann.
    4. Stellen Sie beim Zuweisen einer Rolle zur systemseitig zugewiesenen Identität des Clusters sicher, dass Sie die Ressource mit dem Typ „Cluster (Operator Nexus)" auswählen.

Konfigurieren des Clusters für die Verwendung einer benutzerseitig zugewiesenen verwalteten Identität für den Speicherzugriff

Verwenden Sie diesen Befehl, um einen Cluster mit einem vom Benutzer verwalteten Speicherkonto und einer benutzerseitig zugewiesenen Identität zu erstellen. Beachten Sie, dass dieses Beispiel ein abgekürzter Befehl ist, das nur die Felder hervorhebt, die für das Hinzufügen des vom Benutzer verwalteten Speichers relevant sind. Es handelt sich nicht um den vollständigen Befehl zum Erstellen des Clusters.

az networkcloud cluster create --name "<cluster-name>" \
  --resource-group "<cluster-resource-group>" \
  ...
  --mi-user-assigned "<user-assigned-identity-resource-id>" \
  --command-output-settings identity-type="UserAssignedIdentity" \
  identity-resource-id="<user-assigned-identity-resource-id>" \
  container-url="<container-url>" \
  ...
  --subscription "<subscription>"

Verwenden Sie diesen Befehl, um einen vorhandenen Cluster für ein von einem Benutzer bereitgestelltes Speicherkonto und eine benutzerseitig zugewiesene Identität zu konfigurieren. Der Updatebefehl kann auch verwendet werden, um den Speicherort und die Identität des Speicherkontos bei Bedarf zu ändern.

az networkcloud cluster update --name "<cluster-name>" \
  --resource-group "<cluster-resource-group>" \
  --mi-user-assigned "<user-assigned-identity-resource-id>" \
  --command-output-settings identity-type="UserAssignedIdentity" \
  identity-resource-id="<user-assigned-identity-resource-id>" \
  container-url="<container-url>" \
  --subscription "<subscription>"

Konfigurieren des Clusters für die Verwendung einer systemseitig zugewiesenen verwalteten Identität für den Speicherzugriff

Verwenden Sie diesen Befehl, um einen Cluster mit einem von einem Benutzer verwalteten Speicherkonto und einer systemseitig zugewiesenen Identität zu erstellen. Beachten Sie, dass dieses Beispiel ein abgekürzter Befehl ist, das nur die Felder hervorhebt, die für das Hinzufügen des vom Benutzer verwalteten Speichers relevant sind. Es handelt sich nicht um den vollständigen Befehl zum Erstellen des Clusters.

az networkcloud cluster create --name "<cluster-name>" \
  --resource-group "<cluster-resource-group>" \
  ...
  --mi-system-assigned true \
  --command-output-settings identity-type="SystemAssignedIdentity" \
  container-url="<container-url>" \
  ...
  --subscription "<subscription>"

Verwenden Sie diesen Befehl, um einen vorhandenen Cluster für ein von einem Benutzer bereitgestelltes Speicherkonto zu konfigurieren und eine eigene systemseitig zugewiesene Identität zu verwenden. Der Updatebefehl kann auch verwendet werden, um den Ort des Speicherkontos zu ändern.

az networkcloud cluster update --name "<cluster-name>" \
  --resource-group "<cluster-resource-group>" \
  --mi-system-assigned true \
  --command-output-settings identity-type="SystemAssignedIdentity" \
  container-url="<container-url>" \
  --subscription "<subscription>"

Um den Cluster von einer benutzerseitig zugewiesenen Identität in eine systemseitig zugewiesene Identität zu ändern, muss CommandOutputSettings zuerst mithilfe des Befehls im nächsten Abschnitt gelöscht und dann mit diesem Befehl festgelegt werden.

Löschen der CommandOutputSettings des Clusters

Die CommandOutputSettings können gelöscht werden, so dass die Ausgabe des Run-Data-Extrakts wieder an den Speicher des Clustermanagers geleitet wird. Dies wird jedoch nicht empfohlen, da es weniger sicher ist und die Option in einem zukünftigen Release entfernt wird.

Die CommandOutputSettings müssen jedoch gelöscht werden, wenn sie von einer benutzerseitig zugewiesenen Identität zu einer systemseitig zugewiesenen Identität wechseln.

Verwenden Sie diesen Befehl, um die CommandOutputSettings zu löschen:

az rest --method patch \
  --url  "https://management.azure.com/subscriptions/<subscription>/resourceGroups/<cluster-resource-group>/providers/Microsoft.NetworkCloud/clusters/<cluster-name>?api-version=2024-08-01-preview" \
  --body '{"properties": {"commandOutputSettings":null}}'

Anzeigen der Prinzipal-ID für die verwaltete Identität

Die Identitätsressourcen-ID finden Sie, indem Sie auf der Identitätsressource „JSON-Ansicht“ auswählen, die ID befindet sich am oberen Rand des angezeigten Bereichs. Die Container-URL finden Sie auf der Registerkarte „Einstellungen –> Eigenschaften“ der Containerressource.

Die CLI kann auch verwendet werden, um die Identität und die zugehörigen Prinzipal-ID-Daten im Cluster anzuzeigen.

Beispiel:

az networkcloud cluster show --ids /subscriptions/<Subscription ID>/resourceGroups/<Cluster Resource Group Name>/providers/Microsoft.NetworkCloud/clusters/<Cluster Name>

Beispiel für systemseitig zugewiesene Identität:

    "identity": {
        "principalId": "aaaaaaaa-bbbb-cccc-1111-222222222222",
        "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
        "type": "SystemAssigned"
    },

Beispiel für benutzerseitig zugewiesene Identität:

    "identity": {
        "type": "UserAssigned",
        "userAssignedIdentities": {
            "/subscriptions/<subscriptionID>/resourcegroups/<resourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<userAssignedIdentityName>": {
                "clientId": "00001111-aaaa-2222-bbbb-3333cccc4444",
                "principalId": "bbbbbbbb-cccc-dddd-2222-333333333333"
            }
        }
    },

Ausführen eines Ausführungsdatenextraktionsbefehls

Der Befehl zum Ausführen der Datenextraktion führt ein oder mehrere vordefinierte Skripts aus, um Daten von einem Bare-Metal-Computer zu extrahieren.

Warnung

Microsoft bietet oder unterstützt keine Operator Nexus-API-Aufrufe, die die Angabe von Benutzernamen und/oder Kennwörtern als Klartext erwarten. Beachten Sie, dass alle gesendeten Werte protokolliert werden und als verfügbar gemachte Geheimnisse betrachtet werden, die rotiert und widerrufen werden sollen. Die von Microsoft dokumentierte Methode für die sichere Verwendung von Geheimnissen besteht darin, sie in Azure Key Vault zu speichern. Wenn Sie bestimmte Fragen oder Bedenken haben, senden Sie eine Anfrage über das Azure-Portal.

Aktuelle Liste der unterstützten Befehle:

Die Befehlssyntax ist wie folgt:

az networkcloud baremetalmachine run-data-extract --name "<machine-name>"  \
  --resource-group "<cluster_MRG>" \
  --subscription "<subscription>" \
  --commands '[{"arguments":["<arg1>","<arg2>"],"command":"<command1>"}]'  \
  --limit-time-seconds "<timeout>"

Geben Sie in der --commands-Option mehrere Befehle im JSON-Format an. Jedes command-Element gibt Befehle und Argumente an. Geben Sie für einen Befehl mit mehreren Argumenten eine Liste für den Parameter arguments an. Anweisungen zum Erstellen der --commands-Struktur finden Sie unter Azure CLI-Kurzform.

Diese Befehle können zeitintensiv sein, daher wird empfohlen, --limit-time-seconds auf mindestens 600 Sekunden (10 Minuten) festzulegen. Die Option Debug oder das Ausführen mehrerer Extraktionen kann länger als 10 Minuten dauern.

In der Antwort wird der Vorgang asynchron ausgeführt, und der HTTP-Statuscode 202 wird zurückgegeben. Weitere Informationen zum Nachverfolgen des Befehlsabschlusses und zum Anzeigen der Ausgabedatei finden Sie im Abschnitt Anzeigen des Ausgabe.

Sammlung von Hardwareunterstützungsdaten

In diesem Beispiel wird der Befehl hardware-support-data-collection ausgeführt, und die Protokolle SysInfo und TTYLog werden vom Dell Server abgerufen. Das Skript führt einen racadm supportassist collect-Befehl auf dem angegebenen Bare-Metal-Computer aus. Die resultierende tar.gz-Datei enthält die komprimierten Ausgaben der extrahierten Befehlsdatei in hardware-support-data-<timestamp>.zip.

az networkcloud baremetalmachine run-data-extract --name "bareMetalMachineName" \
  --resource-group "cluster_MRG" \
  --subscription "subscription" \
  --commands '[{"arguments":["SysInfo", "TTYLog"],"command":"hardware-support-data-collection"}]' \
  --limit-time-seconds 600

Ausgabe von hardware-support-data-collection

====Action Command Output====
Executing hardware-support-data-collection command
Getting following hardware support logs: SysInfo,TTYLog
Job JID_814372800396 is running, waiting for it to complete ...
Job JID_814372800396 Completed.
---------------------------- JOB -------------------------
[Job ID=JID_814372800396]
Job Name=SupportAssist Collection
Status=Completed
Scheduled Start Time=[Not Applicable]
Expiration Time=[Not Applicable]
Actual Start Time=[Thu, 13 Apr 2023 20:54:40]
Actual Completion Time=[Thu, 13 Apr 2023 20:59:51]
Message=[SRV088: The SupportAssist Collection Operation is completed successfully.]
Percent Complete=[100]
----------------------------------------------------------
Deleting Job JID_814372800396
Collection successfully exported to /hostfs/tmp/runcommand/hardware-support-data-2023-04-13T21:00:01.zip

================================
Script execution result can be found in storage account:
https://cm2p9bctvhxnst.blob.core.windows.net/bmm-run-command-output/dd84df50-7b02-4d10-a2be-46782cbf4eef-action-bmmdataextcmd.tar.gz?se=2023-04-14T01%3A00%3A15Zandsig=ZJcsNoBzvOkUNL0IQ3XGtbJSaZxYqmtd%2BM6rmxDFqXE%3Dandsp=randspr=httpsandsr=bandst=2023-04-13T21%3A00%3A15Zandsv=2019-12-12

Beispielliste von gesammelten Hardwareunterstützungsdateien

Archive:  TSR20240227164024_FM56PK3.pl.zip
   creating: tsr/hardware/
   creating: tsr/hardware/spd/
   creating: tsr/hardware/sysinfo/
   creating: tsr/hardware/sysinfo/inventory/
  inflating: tsr/hardware/sysinfo/inventory/sysinfo_CIM_BIOSAttribute.xml
  inflating: tsr/hardware/sysinfo/inventory/sysinfo_CIM_Sensor.xml
  inflating: tsr/hardware/sysinfo/inventory/sysinfo_DCIM_View.xml
  inflating: tsr/hardware/sysinfo/inventory/sysinfo_DCIM_SoftwareIdentity.xml
  inflating: tsr/hardware/sysinfo/inventory/sysinfo_CIM_Capabilities.xml
  inflating: tsr/hardware/sysinfo/inventory/sysinfo_CIM_StatisticalData.xml
   creating: tsr/hardware/sysinfo/lcfiles/
  inflating: tsr/hardware/sysinfo/lcfiles/lclog_0.xml.gz
  inflating: tsr/hardware/sysinfo/lcfiles/curr_lclog.xml
   creating: tsr/hardware/psu/
   creating: tsr/hardware/idracstateinfo/
  inflating: tsr/hardware/idracstateinfo/avc.log
 extracting: tsr/hardware/idracstateinfo/avc.log.persistent.1
[..snip..]

Sammeln von MDE-Agent-Informationen

Daten werden mit dem Befehl mde-agent-information gesammelt und als JSON in /hostfs/tmp/runcommand/mde-agent-information.json formatiert. Die JSON-Datei befindet sich in der ZIP-Datei der Datenextraktion im Speicherkonto. Das Skript führt eine Sequenz von mdatp-Befehlen auf dem angegebenen Bare-Metal-Computer aus.

In diesem Beispiel wird der Befehl mde-agent-information ohne Argumente ausgeführt.

az networkcloud baremetalmachine run-data-extract --name "bareMetalMachineName" \
  --resource-group "cluster_MRG" \
  --subscription "subscription" \
  --commands '[{"command":"mde-agent-information"}]' \
  --limit-time-seconds 600

Ausgabe von mde-agent-information

====Action Command Output====
Executing mde-agent-information command
MDE agent is running, proceeding with data extract
Getting MDE agent information for bareMetalMachine
Writing to /hostfs/tmp/runcommand

================================
Script execution result can be found in storage account:
 https://cmzhnh6bdsfsdwpbst.blob.core.windows.net/bmm-run-command-output/f5962f18-2228-450b-8cf7-cb8344fdss63b0-action-bmmdataextcmd.tar.gz?se=2023-07-26T19%3A07%3A22Z&sig=X9K3VoNWRFP78OKqFjvYoxubp65BbNTq%2BGnlHclI9Og%3D&sp=r&spr=https&sr=b&st=2023-07-26T15%3A07%3A22Z&sv=2019-12-12

Beispiel für gesammeltes JSON-Objekt

{
  "diagnosticInformation": {
      "realTimeProtectionStats": $real_time_protection_stats,
      "eventProviderStats": $event_provider_stats
      },
  "mdeDefinitions": $mde_definitions,
  "generalHealth": $general_health,
  "mdeConfiguration": $mde_config,
  "scanList": $scan_list,
  "threatInformation": {
      "list": $threat_info_list,
      "quarantineList": $threat_info_quarantine_list
    }
}

Diagnose des MDE-Supports erfassen

Die mit dem Befehl mde-support-diagnostics gesammelten Daten werden mit dem MDE-Clientanalysetool gebündelt, um Informationen aus mdatp-Befehlen und relevanten Protokolldateien zu erhalten. Die Speicherkontodatei tgz enthält eine Datei zip mit dem Namen mde-support-diagnostics-<hostname>.zip. Die zip-Datei sollte zusammen mit allen Supportanfragen gesendet werden, damit die Supportteams die Protokolle bei Bedarf für die Problembehandlung und Ursachenanalyse verwenden können.

In diesem Beispiel wird der Befehl mde-support-diagnostics ohne Argumente ausgeführt.

az networkcloud baremetalmachine run-data-extract --name "bareMetalMachineName" \
  --resource-group "cluster_MRG" \
  --subscription "subscription" \
  --commands '[{"command":"mde-support-diagnostics"}]' \
  --limit-time-seconds 600

Ausgabe von mde-support-diagnostics

====Action Command Output====
Executing mde-support-diagnostics command
[2024-01-23 16:07:37.588][INFO] XMDEClientAnalyzer Version: 1.3.2
[2024-01-23 16:07:38.367][INFO] Top Command output: [/tmp/top_output_2024_01_23_16_07_37mel0nue0.txt]
[2024-01-23 16:07:38.367][INFO] Top Command Summary: [/tmp/top_summary_2024_01_23_16_07_370zh7dkqn.txt]
[2024-01-23 16:07:38.367][INFO] Top Command Outliers: [/tmp/top_outlier_2024_01_23_16_07_37aypcfidh.txt]
[2024-01-23 16:07:38.368][INFO] [MDE Diagnostic]
[2024-01-23 16:07:38.368][INFO]   Collecting MDE Diagnostic
[2024-01-23 16:07:38.613][WARNING] mde is not running
[2024-01-23 16:07:41.343][INFO] [SLEEP] [3sec] waiting for agent to create diagnostic package
[2024-01-23 16:07:44.347][INFO] diagnostic package path: /var/opt/microsoft/mdatp/wdavdiag/5b1edef9-3b2a-45c1-a45d-9e7e4b6b869e.zip
[2024-01-23 16:07:44.347][INFO] Successfully created MDE diagnostic zip
[2024-01-23 16:07:44.348][INFO]   Adding mde_diagnostic.zip to report directory
[2024-01-23 16:07:44.348][INFO]   Collecting MDE Health
[...snip...]
================================
Script execution result can be found in storage account:
 https://cmmj627vvrzkst.blob.core.windows.net/bmm-run-command-output/7c5557b9-b6b6-a4a4-97ea-752c38918ded-action-bmmdataextcmd.tar.gz?se=2024-01-23T20%3A11%3A32Z&sig=9h20XlZO87J7fCr0S1234xcyu%2Fl%2BVuaDh1BE0J6Yfl8%3D&sp=r&spr=https&sr=b&st=2024-01-23T16%3A11%3A32Z&sv=2019-12-12

Nachdem Sie die Ausführungsergebnisdatei heruntergeladen haben, können die Supportdateien für die Analyse entpackt werden.

Beispielliste der vom MDE-Clientanalysetool erfassten Informationen

Archive:  mde-support-diagnostics-rack1compute02.zip
  inflating: mde_diagnostic.zip
  inflating: process_information.txt
  inflating: auditd_info.txt
  inflating: auditd_log_analysis.txt
  inflating: auditd_logs.zip
  inflating: ebpf_kernel_config.txt
  inflating: ebpf_enabled_func.txt
  inflating: ebpf_syscalls.zip
  inflating: ebpf_raw_syscalls.zip
  inflating: messagess.zip
  inflating: conflicting_processes_information.txt
[...snip...]

Dell-Hardwarerollupstatus

Daten werden mit dem Befehl hardware-rollup-status gesammelt und als JSON in /hostfs/tmp/runcommand/rollupStatus.json formatiert. Die JSON-Datei befindet sich in der ZIP-Datei der Datenextraktion im Speicherkonto. Die gesammelten Daten zeigen die Integrität der Computersubsysteme an.

In diesem Beispiel wird der Befehl hardware-rollup-status ohne Argumente ausgeführt.

az networkcloud baremetalmachine run-data-extract --name "bareMetalMachineName" \
  --resource-group "clusete_MRG" \
  --subscription "subscription" \
  --commands '[{"command":"hardware-rollup-status"}]' \
  --limit-time-seconds 600

Ausgabe von hardware-rollup-status

====Action Command Output====
Executing hardware-rollup-status command
Getting rollup status logs for b37dev03a1c002
Writing to /hostfs/tmp/runcommand

================================
Script execution result can be found in storage account:
https://cmkfjft8twwpst.blob.core.windows.net/bmm-run-command-output/20b217b5-ea38-4394-9db1-21a0d392eff0-action-bmmdataextcmd.tar.gz?se=2023-09-19T18%3A47%3A17Z&sig=ZJcsNoBzvOkUNL0IQ3XGtbJSaZxYqmtd%3D&sp=r&spr=https&sr=b&st=2023-09-19T14%3A47%3A17Z&sv=2019-12-12

Beispiel für JSON mit gesammelten Daten

{
	"@odata.context" : "/redfish/v1/$metadata#DellRollupStatusCollection.DellRollupStatusCollection",
	"@odata.id" : "/redfish/v1/Systems/System.Embedded.1/Oem/Dell/DellRollupStatus",
	"@odata.type" : "#DellRollupStatusCollection.DellRollupStatusCollection",
	"Description" : "A collection of DellRollupStatus resource",
	"Members" :
	[
		{
			"@odata.context" : "/redfish/v1/$metadata#DellRollupStatus.DellRollupStatus",
			"@odata.id" : "/redfish/v1/Systems/System.Embedded.1/Oem/Dell/DellRollupStatus/iDRAC.Embedded.1_0x23_SubSystem.1_0x23_Current",
			"@odata.type" : "#DellRollupStatus.v1_0_0.DellRollupStatus",
			"CollectionName" : "CurrentRollupStatus",
			"Description" : "Represents the subcomponent roll-up statuses.",
			"Id" : "iDRAC.Embedded.1_0x23_SubSystem.1_0x23_Current",
			"InstanceID" : "iDRAC.Embedded.1#SubSystem.1#Current",
			"Name" : "DellRollupStatus",
			"RollupStatus" : "Ok",
			"SubSystem" : "Current"
		},
		{
			"@odata.context" : "/redfish/v1/$metadata#DellRollupStatus.DellRollupStatus",
			"@odata.id" : "/redfish/v1/Systems/System.Embedded.1/Oem/Dell/DellRollupStatus/iDRAC.Embedded.1_0x23_SubSystem.1_0x23_Voltage",
			"@odata.type" : "#DellRollupStatus.v1_0_0.DellRollupStatus",
			"CollectionName" : "VoltageRollupStatus",
			"Description" : "Represents the subcomponent roll-up statuses.",
			"Id" : "iDRAC.Embedded.1_0x23_SubSystem.1_0x23_Voltage",
			"InstanceID" : "iDRAC.Embedded.1#SubSystem.1#Voltage",
			"Name" : "DellRollupStatus",
			"RollupStatus" : "Ok",
			"SubSystem" : "Voltage"
		},
[..snip..]

Generieren eines Cluster-CVE-Berichts

Daten zu Sicherheitsrisiken werden mit dem Befehl cluster-cve-report gesammelt und als JSON in {year}-{month}-{day}-nexus-cluster-vulnerability-report.json formatiert. Die JSON-Datei befindet sich in der ZIP-Datei der Datenextraktion im Speicherkonto. Die gesammelten Daten enthalten Sicherheitsrisikodaten pro Containerimage im Cluster.

In diesem Beispiel wird der Befehl cluster-cve-report ohne Argumente ausgeführt.

Hinweis

Der Zielcomputer muss ein Knoten auf Steuerungsebene sein, andernfalls wird die Aktion nicht ausgeführt.

az networkcloud baremetalmachine run-data-extract --name "bareMetalMachineName" \
  --resource-group "cluster_MRG" \
  --subscription "subscription" \
  --commands '[{"command":"cluster-cve-report"}]' \
  --limit-time-seconds 600

Ausgabe von cluster-cve-report

====Action Command Output====
Nexus cluster vulnerability report saved.


================================
Script execution result can be found in storage account:
https://cmkfjft8twwpst.blob.core.windows.net/bmm-run-command-output/20b217b5-ea38-4394-9db1-21a0d392eff0-action-bmmdataextcmd.tar.gz?se=2023-09-19T18%3A47%3A17Z&sig=ZJcsNoBzvOkUNL0IQ3XGtbJSaZxYqmtd%3D&sp=r&spr=https&sr=b&st=2023-09-19T14%3A47%3A17Z&sv=2019-12-12

CVE-Berichtsschema

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "title": "Vulnerability Report",
  "type": "object",
  "properties": {
    "metadata": {
      "type": "object",
      "properties": {
        "dateRetrieved": {
          "type": "string",
          "format": "date-time",
          "description": "The date and time when the data was retrieved."
        },
        "platform": {
          "type": "string",
          "description": "The name of the platform."
        },
        "resource": {
          "type": "string",
          "description": "The name of the resource."
        },
        "runtimeVersion": {
          "type": "string",
          "description": "The version of the runtime."
        },
        "managementVersion": {
          "type": "string",
          "description": "The version of the management software."
        },
        "vulnerabilitySummary": {
          "type": "object",
          "properties": {
            "criticalCount": {
              "type": "integer",
              "description": "Number of critical vulnerabilities."
            },
            "highCount": {
              "type": "integer",
              "description": "Number of high severity vulnerabilities."
            },
            "mediumCount": {
              "type": "integer",
              "description": "Number of medium severity vulnerabilities."
            },
            "lowCount": {
              "type": "integer",
              "description": "Number of low severity vulnerabilities."
            },
            "noneCount": {
              "type": "integer",
              "description": "Number of vulnerabilities with no severity."
            },
            "unknownCount": {
              "type": "integer",
              "description": "Number of vulnerabilities with unknown severity."
            }
          },
          "required": ["criticalCount", "highCount", "mediumCount", "lowCount", "noneCount", "unknownCount"]
        }
      },
      "required": ["dateRetrieved", "platform", "resource", "runtimeVersion", "managementVersion", "vulnerabilitySummary"]
    },
    "containers": {
      "type": "object",
      "additionalProperties": {
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "namespace": {
              "type": "string",
              "description": "The namespace of the container."
            },
            "digest": {
              "type": "string",
              "description": "The digest of the container image."
            },
            "os": {
              "type": "object",
              "properties": {
                "family": {
                  "type": "string",
                  "description": "The family of the operating system."
                }
              },
              "required": ["family"]
            },
            "summary": {
              "type": "object",
              "properties": {
                "criticalCount": {
                  "type": "integer",
                  "description": "Number of critical vulnerabilities in this container."
                },
                "highCount": {
                  "type": "integer",
                  "description": "Number of high severity vulnerabilities in this container."
                },
                "lowCount": {
                  "type": "integer",
                  "description": "Number of low severity vulnerabilities in this container."
                },
                "mediumCount": {
                  "type": "integer",
                  "description": "Number of medium severity vulnerabilities in this container."
                },
                "noneCount": {
                  "type": "integer",
                  "description": "Number of vulnerabilities with no severity in this container."
                },
                "unknownCount": {
                  "type": "integer",
                  "description": "Number of vulnerabilities with unknown severity in this container."
                }
              },
              "required": ["criticalCount", "highCount", "lowCount", "mediumCount", "noneCount", "unknownCount"]
            },
            "vulnerabilities": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "title": {
                    "type": "string",
                    "description": "Title of the vulnerability."
                  },
                  "vulnerabilityID": {
                    "type": "string",
                    "description": "Identifier of the vulnerability."
                  },
                  "fixedVersion": {
                    "type": "string",
                    "description": "The version in which the vulnerability is fixed."
                  },
                  "installedVersion": {
                    "type": "string",
                    "description": "The currently installed version."
                  },
                  "referenceLink": {
                    "type": "string",
                    "format": "uri",
                    "description": "Link to the vulnerability details."
                  },
                  "publishedDate": {
                    "type": "string",
                    "format": "date-time",
                    "description": "The date when the vulnerability was published."
                  },
                  "score": {
                    "type": "number",
                    "description": "The CVSS score of the vulnerability."
                  },
                  "severity": {
                    "type": "string",
                    "description": "The severity level of the vulnerability."
                  },
                  "resource": {
                    "type": "string",
                    "description": "The resource affected by the vulnerability."
                  },
                  "target": {
                    "type": "string",
                    "description": "The target of the vulnerability."
                  },
                  "packageType": {
                    "type": "string",
                    "description": "The type of the package."
                  },
                  "exploitAvailable": {
                    "type": "boolean",
                    "description": "Indicates if an exploit is available for the vulnerability."
                  }
                },
                "required": ["title", "vulnerabilityID", "fixedVersion", "installedVersion", "referenceLink", "publishedDate", "score", "severity", "resource", "target", "packageType", "exploitAvailable"]
              }
            }
          },
          "required": ["namespace", "digest", "os", "summary", "vulnerabilities"]
        }
      }
    }
  },
  "required": ["metadata", "containers"]
}

CVE-Datendetails

Die CVE-Daten werden pro Containerimage alle 24 Stunden aktualisiert, oder wenn eine Änderung an der Kubernetes-Ressource auftritt, die auf das Image verweist.

Helm-Freigaben sammeln

Helm-Freigabedaten werden mit dem collect-helm-releases Befehl gesammelt und als json nach {year}-{month}-{day}-helm-releases.json formatiert. Die JSON-Datei befindet sich in der ZIP-Datei der Datenextraktion im Speicherkonto. Die gesammelten Daten enthalten alle Steuerfreigabeinformationen aus dem Cluster, die aus den beim Ausführen des Befehls helm listzurückgegebenen Standarddaten bestehen.

In diesem Beispiel wird der Befehl collect-helm-releases ohne Argumente ausgeführt.

Hinweis

Der Zielcomputer muss ein Knoten auf Steuerungsebene sein, andernfalls wird die Aktion nicht ausgeführt.

az networkcloud baremetalmachine run-data-extract --name "bareMetalMachineName" \
  --resource-group "cluster_MRG" \
  --subscription "subscription" \
  --commands '[{"command":"collect-helm-releases"}]' \
  --limit-time-seconds 600

Ausgabe von collect-helm-releases

====Action Command Output====
Helm releases report saved.


================================
Script execution result can be found in storage account:
https://cmcr5xp3mbn7st.blob.core.windows.net/bmm-run-command-output/a29dcbdb-5524-4172-8b55-88e0e5ec93ff-action-bmmdataextcmd.tar.gz?se=2024-10-30T02%3A09%3A54Z&sig=v6cjiIDBP9viEijs%2B%2BwJDrHIAbLEmuiVmCEEDHEi%2FEc%3D&sp=r&spr=https&sr=b&st=2024-10-29T22%3A09%3A54Z&sv=2023-11-03

Helm Release-Schema

{
  "$schema": "http://json-schema.org/schema#",
  "type": "object",
  "properties": {
    "metadata": {
      "type": "object",
      "properties": {
        "dateRetrieved": {
          "type": "string"
        },
        "platform": {
          "type": "string"
        },
        "resource": {
          "type": "string"
        },
        "clusterId": {
          "type": "string"
        },
        "runtimeVersion": {
          "type": "string"
        },
        "managementVersion": {
          "type": "string"
        }
      },
      "required": [
        "clusterId",
        "dateRetrieved",
        "managementVersion",
        "platform",
        "resource",
        "runtimeVersion"
      ]
    },
    "helmReleases": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "namespace": {
            "type": "string"
          },
          "revision": {
            "type": "string"
          },
          "updated": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "chart": {
            "type": "string"
          },
          "app_version": {
            "type": "string"
          }
        },
        "required": [
          "app_version",
          "chart",
          "name",
          "namespace",
          "revision",
          "status",
          "updated"
        ]
      }
    }
  },
  "required": [
    "helmReleases",
    "metadata"
  ]
}

Systemctl-Statusausgabe sammeln

Der Dienststatus wird mit dem platform-services-status Befehl erfasst. Die Ausgabe ist im Nur-Text-Format und gibt einen Überblick über den Status der Dienste auf dem Host sowie die systemctl status für jeden gefundenen Dienst zurück.

In diesem Beispiel wird der Befehl platform-services-status ohne Argumente ausgeführt.

az networkcloud baremetalmachine run-data-extract --name "bareMetalMachineName" \
  --resource-group "clusete_MRG" \
  --subscription "subscription" \
  --commands '[{"command":"platform-services-status"}]' \
  --limit-time-seconds 600
  --output-directory "/path/to/local/directory"

Ausgabe von platform-services-status

====Action Command Output====
UNIT                                                                                          LOAD      ACTIVE   SUB     DESCRIPTION
aods-infra-vf-config.service                                                                  not-found inactive dead    aods-infra-vf-config.service
aods-pnic-config-infra.service                                                                not-found inactive dead    aods-pnic-config-infra.service
aods-pnic-config-workload.service                                                             not-found inactive dead    aods-pnic-config-workload.service
arc-unenroll-file-semaphore.service                                                           loaded    active   exited  Arc-unenrollment upon shutdown service
atop-rotate.service                                                                           loaded    inactive dead    Restart atop daemon to rotate logs
atop.service                                                                                  loaded    active   running Atop advanced performance monitor
atopacct.service                                                                              loaded    active   running Atop process accounting daemon
audit.service                                                                                 loaded    inactive dead    Audit service
auditd.service                                                                                loaded    active   running Security Auditing Service
azurelinux-sysinfo.service                                                                    loaded    inactive dead    Azure Linux Sysinfo Service
blk-availability.service                                                                      loaded    inactive dead    Availability of block devices
[..snip..]


-------
● arc-unenroll-file-semaphore.service - Arc-unenrollment upon shutdown service
     Loaded: loaded (/etc/systemd/system/arc-unenroll-file-semaphore.service; enabled; vendor preset: enabled)
     Active: active (exited) since Tue 2024-11-12 06:33:40 UTC; 11h ago
   Main PID: 11663 (code=exited, status=0/SUCCESS)
        CPU: 5ms

Nov 12 06:33:39 rack1compute01 systemd[1]: Starting Arc-unenrollment upon shutdown service...
Nov 12 06:33:40 rack1compute01 systemd[1]: Finished Arc-unenrollment upon shutdown service.


-------
○ atop-rotate.service - Restart atop daemon to rotate logs
     Loaded: loaded (/usr/lib/systemd/system/atop-rotate.service; static)
     Active: inactive (dead)
TriggeredBy: ● atop-rotate.timer
[..snip..]

Anzeigen der Ausgabe

Der Befehl stellt einen Link bereit (wenn Clustermanager-Speicher verwendet wird) oder einen anderen Befehl (wenn vom Benutzer bereitgestellter Speicher verwendet wird), um die vollständige Ausgabe herunterzuladen. Die tar.gz-Datei enthält auch die komprimierten Ausgaben der extrahierten Befehlsdatei. Laden Sie die Ausgabedatei aus dem Speicherblob in ein lokales Verzeichnis herunter, indem Sie den Verzeichnispfad im optionalen Argument --output-directory angeben.

Warnung

Wenn Sie das Argument --output-directory verwenden, werden alle Dateien im lokalen Verzeichnis überschrieben, die denselben Namen haben wie die neuen Dateien, die erstellt werden.

Hinweis

Das Speicherkonto kann aufgrund von Netzwerk- oder Firewalleinschränkungen gesperrt werden, was zu 403 This request is not authorized to perform this operation. führt. Prozeduren zum Überprüfen des Zugriffs finden Sie in den Abschnitten Clustermanager-Speicher oder vom Benutzer verwalteter Speicher.