Condividi tramite


Risolvere i problemi relativi ai computer bare metal usando il comando az networkcloud baremetalmachine run-data-extract

In alcuni casi un utente deve analizzare e risolvere i problemi relativi a un computer bare metal locale. Operatore Nexus di Azure fornisce un set prestabilito di comandi di estrazione dei dati tramite az networkcloud baremetalmachine run-data-extract. Questi comandi consentono agli utenti di ottenere dati di diagnostica da un computer bare metal.

Il comando genera un file di output contenente i risultati dell'estrazione dei dati. Per impostazione predefinita, i dati vengono inviati all'account di archiviazione di Cluster Manager. È disponibile anche un metodo di anteprima in cui gli utenti possono configurare la risorsa cluster con un account di archiviazione e un'identità che ha accesso all'account di archiviazione per ricevere l'output.

Prerequisiti

  • Questo articolo presuppone che l'interfaccia della riga di comando di Azure e l'estensione dell'interfaccia della networkcloud riga di comando siano installate. Per altre informazioni, vedere Come installare le estensioni dell'interfaccia della riga di comando.
  • Il computer bare metal di destinazione è acceso e pronto.
  • La sintassi per questi comandi si basa sulla versione 0.3.0+ dell'interfaccia della riga di comando az networkcloud.
  • Ottenere il nome del gruppo di risorse gestite del cluster (cluster_MRG) creato per la risorsa Cluster.

Inviare l'output del comando a un account di archiviazione specificato dall'utente

Creare e configurare le risorse di archiviazione

  1. Creare un account di archiviazione o identificare un account di archiviazione esistente che si vuole usare. Vedere Creare un account di archiviazione di Azure.
  2. Creare un contenitore di archiviazione BLOB nell'account di archiviazione. Vedere Creare un contenitore.
  3. Assegnare il ruolo "Collaboratore ai dati dei BLOB di archiviazione" agli utenti e alle identità gestite che devono accedere all'output run-data-extract.
    1. Vedere Assegnare un ruolo di Azure per l'accesso ai dati BLOB. Il ruolo deve anche essere assegnato a un'identità gestita assegnata dall'utente o all'identità gestita assegnata dal sistema del cluster.
    2. Per altre informazioni sulle identità gestite, vedere Identità gestite per le risorse di Azure.
    3. Se si usa l'identità assegnata dal sistema del cluster, l'identità assegnata dal sistema deve essere aggiunta al cluster prima di poter concedere l'accesso.
    4. Quando si assegna un ruolo all'identità assegnata dal sistema del cluster, assicurarsi di selezionare la risorsa con il tipo "Cluster (Operator Nexus)."

Configurare il cluster per l'uso di un'identità gestita assegnata dall'utente per l'accesso all'archiviazione

Usare questo comando per creare un cluster con un account di archiviazione gestito dall'utente e un'identità assegnata dall'utente. Si noti che questo esempio è un comando abbreviato che evidenzia solo i campi pertinenti per l'aggiunta dell'archiviazione gestita dall'utente. Non è il comando di creazione del cluster completo.

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>"

Usare questo comando per configurare un cluster esistente per un account di archiviazione fornito dall'utente e un'identità assegnata dall'utente. Il comando update può essere usato anche per modificare la posizione e l'identità dell'account di archiviazione, se necessario.

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>"

Configurare il cluster per l'uso di un'identità gestita assegnata dal sistema per l'accesso all'archiviazione

Usare questo comando per creare un cluster con un account di archiviazione gestito dall'utente e un'identità assegnata dal sistema. Si noti che questo esempio è un comando abbreviato che evidenzia solo i campi pertinenti per l'aggiunta dell'archiviazione gestita dall'utente. Non è il comando di creazione del cluster completo.

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>"

Usare questo comando per configurare un cluster esistente per un account di archiviazione fornito dall'utente e per usare la propria identità assegnata dal sistema. Il comando update può essere usato anche per modificare il percorso dell'account di archiviazione.

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>"

Per modificare il cluster da un'identità assegnata dall'utente a un'identità assegnata dal sistema, commandOutputSettings deve prima essere cancellato usando il comando nella sezione successiva, quindi impostare usando questo comando.

Cancellare commandOutputSettings del cluster

CommandOutputSettings può essere cancellato, indirizzando l'output di run-data-extract all'archiviazione di Gestione cluster. Tuttavia, non è consigliabile perché è meno sicuro e l'opzione verrà rimossa in una versione futura.

Tuttavia, commandOutputSettings deve essere cancellato se si passa da un'identità assegnata dall'utente a un'identità assegnata dal sistema.

Usare questo comando per cancellare CommandOutputSettings:

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}}'

Visualizzare l'ID entità per l'identità gestita

L'ID risorsa di identità è reperibile selezionando "Visualizzazione JSON" nella risorsa di identità; l'ID si trova nella parte superiore del pannello visualizzato. L'URL del contenitore è disponibile nella scheda Impostazioni -> Proprietà della risorsa contenitore.

L'interfaccia della riga di comando può essere usata anche per visualizzare l'identità e i dati dell'ID entità associati all'interno del cluster.

Esempio:

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

Esempio di identità assegnata dal sistema:

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

Esempio di identità assegnata dall'utente:

    "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"
            }
        }
    },

METODO DEPRECATO: verificare l'accesso all'account di archiviazione di Cluster Manager

Importante

L'account di archiviazione di Cluster Manager è destinato alla rimozione nel mese di aprile 2025 al più recente. Se si usa questo metodo oggi per l'output dei comandi, è consigliabile eseguire la conversione in usando un account di archiviazione fornito dall'utente.

Se si usa il metodo di archiviazione di Cluster Manager, verificare di avere accesso all'account di archiviazione di Cluster Manager:

  1. Dal portale di Azure passare all'account di archiviazione di Gestione cluster.
  2. Nei dettagli dell'account di archiviazione selezionare Browser archiviazione dal menu di spostamento a sinistra.
  3. Nei dettagli del browser archiviazione selezionare Contenitori BLOB.
  4. Se viene visualizzato l'errore 403 This request is not authorized to perform this operation. durante l'accesso all'account di archiviazione, è necessario aggiornare le impostazioni del firewall dell'account di archiviazione in modo che includano l'IP pubblico.
  5. Richiedere l'accesso creando un ticket di supporto tramite il portale nella risorsa Gestione cluster. Specificare l'IP pubblico che richiede l'accesso.

Eseguire un comando run-data-extract

Il comando run data extract esegue uno o più script predefiniti per estrarre i dati da un computer bare metal.

Avviso

Microsoft non fornisce o supporta chiamate API Operator Nexus che prevedono la fornitura di nome utente e/o password in testo non crittografato. Si noti che tutti i valori inviati vengono registrati e vengono considerati segreti esposti, che devono essere ruotati e revocati. Il metodo documentato da Microsoft per l'uso sicuro dei segreti consiste nell'archiviarli in un insieme di credenziali delle chiavi di Azure. In caso di domande o dubbi specifici, inviare una richiesta tramite il portale di Azure.

Ecco l'elenco corrente dei comandi supportati:

La sintassi del comando è:

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>"

Specificare più comandi usando il formato JSON nell'opzione --commands. Ogni command specifica il comando e gli argomenti. Per un comando con più argomenti, specificarli come elenco per il parametro arguments. Vedere Azure CLI Shorthand (Sintassi abbreviata dell'interfaccia della riga di comando di Azure) per istruzioni sulla costruzione della struttura --commands.

Questi comandi possono essere a esecuzione prolungata, quindi è consigliabile impostare --limit-time-seconds almeno su 600 secondi (10 minuti). L'opzione Debug o l'esecuzione di più estratti potrebbe richiedere più di 10 minuti.

Nella risposta l'operazione viene eseguita in modo asincrono e restituisce un codice di stato HTTP 202. Per informazioni dettagliate su come tenere traccia del completamento dei comandi e visualizzare il file di output, vedere la sezione Visualizzazione dell'output.

Raccolta dei dati di supporto hardware

Questo esempio esegue il comando hardware-support-data-collection e ottiene i log SysInfo e TTYLog dal server Dell. Lo script esegue un racadm supportassist collect comando nella macchina bare metal designata. Il file tar.gz risultante contiene gli output dei file di comando di estrazione compressi 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

Output di 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

Elenco di esempio di file di supporto hardware raccolti

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..]

Raccogliere informazioni sull'agente MDE

I dati vengono raccolti con il comando mde-agent-information e formattati come JSON in /hostfs/tmp/runcommand/mde-agent-information.json. Il file JSON si trova nel file ZIP di estrazione dei dati presente nell'account di archiviazione. Lo script esegue una sequenza di mdatp comandi nella macchina bare metal designata.

Questo esempio esegue il comando mde-agent-information senza argomenti.

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

Output di 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

Oggetto JSON di esempio raccolto

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

Raccogliere la diagnostica per il supporto MDE

I dati raccolti dal comando mde-support-diagnostics usano lo strumento MDE Client Analyzer per aggregare informazioni dai comandi mdatp e dai file di log pertinenti. Il file dell'account tgz di archiviazione contiene un zip file denominato mde-support-diagnostics-<hostname>.zip. Il file zip deve essere inviato insieme a eventuali richieste di supporto per assicurarsi che i team di supporto possano usare i log per la risoluzione dei problemi e l'analisi della causa radice, se necessario.

Questo esempio esegue il comando mde-support-diagnostics senza argomenti.

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

mde-support-diagnostics Prodotto

====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

Dopo aver scaricato il file dei risultati dell'esecuzione, i file di supporto possono essere decompressi per l'analisi.

Elenco di esempio di informazioni raccolte da MDE Client Analyzer

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...]

Stato di rollup dell'hardware

I dati vengono raccolti con il comando hardware-rollup-status e formattati come JSON in /hostfs/tmp/runcommand/rollupStatus.json. Il file JSON si trova nel file ZIP di estrazione dei dati presente nell'account di archiviazione. I dati raccolti mostrano l'integrità dei sottosistemi del computer.

Questo esempio esegue il comando hardware-rollup-status senza argomenti.

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

Output di 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

JSON di esempio raccolto

{
	"@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..]

Generare il report CVE del cluster

I dati sulle vulnerabilità vengono raccolti con il comando cluster-cve-report e formattati come JSON in {year}-{month}-{day}-nexus-cluster-vulnerability-report.json. Il file JSON si trova nel file ZIP di estrazione dei dati presente nell'account di archiviazione. I dati raccolti includono i dati di vulnerabilità per ogni immagine del contenitore nel cluster.

Questo esempio esegue il comando cluster-cve-report senza argomenti.

Nota

Il computer di destinazione deve essere un nodo del piano di controllo o l'azione non viene eseguita.

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

cluster-cve-report Prodotto

====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

Schema del report CVE

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

Dettagli dei dati CVE

I dati CVE vengono aggiornati per ogni immagine del contenitore ogni 24 ore o quando viene apportata una modifica alla risorsa Kubernetes che fa riferimento all'immagine.

Raccogliere le versioni Helm

I dati di rilascio Helm vengono raccolti con il collect-helm-releases comando e formattati come json in {year}-{month}-{day}-helm-releases.json. Il file JSON si trova nel file ZIP di estrazione dei dati presente nell'account di archiviazione. I dati raccolti includono tutte le informazioni sulla versione helm del cluster, costituite dai dati standard restituiti durante l'esecuzione del comando helm list.

Questo esempio esegue il comando collect-helm-releases senza argomenti.

Nota

Il computer di destinazione deve essere un nodo del piano di controllo o l'azione non viene eseguita.

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

collect-helm-releases Prodotto

====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

Schema della versione Helm

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

Raccogliere l'output dello stato systemctl

Lo stato del servizio viene raccolto con il platform-services-status comando . L'output è in formato testo normale e restituisce una panoramica dello stato dei servizi nell'host e di systemctl status per ogni servizio trovato.

Questo esempio esegue il comando platform-services-status senza argomenti.

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"

platform-services-status Prodotto

====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..]

Visualizzazione dell'output

Il comando fornisce un collegamento (se si usa l'archiviazione di Gestione cluster) o un altro comando (se si usa l'archiviazione fornita dall'utente) per scaricare l'output completo. Il file tar.gz contiene anche gli output dei file di comando di estrazione compressi. Scaricare il file di output dal BLOB di archiviazione a una directory locale specificando il percorso della directory nell'argomento facoltativo --output-directory.

Avviso

L'uso dell'argomento --output-directory sovrascrive tutti i file nella directory locale con lo stesso nome dei nuovi file creati.

Nota

Se l'account di archiviazione è bloccato, viene visualizzato l'errore 403 This request is not authorized to perform this operation. a causa delle restrizioni di rete o del firewall. Per le procedure per verificare l'accesso, vedere le sezioni archiviazione di Gestione cluster o archiviazione gestita dall'utente.