Compartir a través de


Solución de problemas de máquina sin sistema operativo mediante el comando az networkcloud baremetalmachine run-data-extract

Puede que haya situaciones en las que un usuario necesite investigar y resolver problemas con una máquina sin sistema operativo local. Azure Operator Nexus proporciona un conjunto preestablecido de comandos de extracción de datos a través de az networkcloud baremetalmachine run-data-extract. Estos comandos permiten a los usuarios obtener datos de diagnóstico de una máquina sin sistema operativo.

El comando genera un archivo de salida que contiene los resultados de la extracción de datos. De forma predeterminada, los datos se envían a la cuenta de almacenamiento del Administrador de clústeres. También hay un método de vista previa en el que los usuarios pueden configurar el recurso de clúster con una cuenta de almacenamiento e identidad que tenga acceso a la cuenta de almacenamiento para recibir la salida.

Requisitos previos

  • En este artículo se supone que se instala la interfaz de la línea de comandos de Azure y la extensión de la interfaz de la línea de comandos networkcloud. Para obtener más información, consulte Cómo instalar extensiones de la CLI.
  • La máquina sin sistema operativo de destino está activada y lista.
  • La sintaxis de estos comandos se basa en la versión 0.3.0 o versiones posteriores de la CLI de az networkcloud.
  • Obtenga el nombre del grupo de recursos administrados del clúster (cluster_MRG) que ha creado para el recurso de clúster.

Envío de la salida del comando a una cuenta de almacenamiento especificada por el usuario

Crear y configurar recursos de almacenamiento

  1. Cree una cuenta de almacenamiento o identifique una cuenta de almacenamiento existente que quiera usar. Consulte Crear una cuenta de almacenamiento de Azure.
  2. Cree un contenedor de Blob Storage en la cuenta de almacenamiento. Consulte Crear un contenedor.
  3. Asigne el rol "Colaborador de datos de blobs de almacenamiento" a los usuarios e identidades administradas que necesitan acceso a la salida run-data-extract.
    1. Consulte Asignación de un rol de Azure para acceder a datos de blobs. El rol también debe asignarse a una identidad administrada asignada por el usuario o a la propia identidad administrada asignada por el sistema del clúster.
    2. Para más información sobre las identidades administradas, consulte Identidades administradas para recursos de Azure.
    3. Si usa la identidad asignada por el sistema del clúster, la identidad asignada por el sistema debe agregarse al clúster antes de que se pueda conceder acceso.
    4. Al asignar un rol a la identidad asignada por el sistema del clúster, asegúrese de seleccionar el recurso con el tipo "Cluster (Operator Nexus)".

Configurar el clúster para usar una identidad administrada asignada por el usuario para el acceso al almacenamiento

Use este comando para crear un clúster con una cuenta de almacenamiento administrada por el usuario y una identidad asignada por el usuario. Tenga en cuenta que este ejemplo es un comando abreviado que simplemente resalta los campos pertinentes para agregar el almacenamiento administrado por el usuario. No es el comando de creación de clúster 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>"

Use este comando para configurar un clúster existente para una cuenta de almacenamiento proporcionada por el usuario y una identidad asignada por el usuario. El comando update también se puede usar para cambiar la ubicación y la identidad de la cuenta de almacenamiento si es necesario.

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

Configuración del clúster para usar una identidad administrada asignada por el sistema para el acceso al almacenamiento

Use este comando para crear un clúster con una cuenta de almacenamiento administrada por el usuario y una identidad asignada por el sistema. Tenga en cuenta que este ejemplo es un comando abreviado que simplemente resalta los campos pertinentes para agregar el almacenamiento administrado por el usuario. No es el comando de creación de clúster 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>"

Use este comando para configurar un clúster existente para una cuenta de almacenamiento proporcionada por el usuario y para usar su propia identidad asignada por el sistema. El comando update también se puede usar para cambiar la ubicación de la cuenta de almacenamiento.

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

Para cambiar el clúster de una identidad asignada por el usuario a una identidad asignada por el sistema, la CommandOutputSettings primero debe borrarse mediante el comando de la sección siguiente y, a continuación, establecer con este comando.

Borrar la CommandOutputSettings del clúster

La CommandOutputSettings se puede borrar y volver a dirigir la salida run-data-extract al almacenamiento del administrador del clúster. Sin embargo, no se recomienda, ya que es menos seguro y la opción se quitará en una versión futura.

Sin embargo, la CommandOutputSettings debe borrarse si se cambia de una identidad asignada por el usuario a una identidad asignada por el sistema.

Use este comando para borrar 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}}'

Ver el id. de entidad de seguridad de la identidad administrada

Para encontrar el id. de recurso de identidad, seleccione "Vista JSON" en el recurso de identidad; el id. está en la parte superior del panel que aparece. La dirección URL del contenedor se puede encontrar en la pestaña Configuración: Propiedades de > del recurso de contenedor.

La CLI también se puede usar para ver la identidad y los datos del identificador de entidad de seguridad asociados dentro del clúster.

Ejemplo:

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

Ejemplo de identidad asignada por el sistema:

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

Ejemplo de identidad asignada por el usuario:

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

MÉTODO EN DESUSO: Comprobación del acceso a la cuenta de almacenamiento del Administrador de clústeres

Importante

La cuenta de almacenamiento de Cluster Manager está destinada a la eliminación en abril de 2025 más reciente. Si usa este método hoy en día para la salida del comando, considere la posibilidad de convertir a mediante una cuenta de almacenamiento proporcionada por el usuario.

Si usa el método de almacenamiento del Administrador de clústeres, compruebe que tiene acceso a la cuenta de almacenamiento del Administrador de clústeres:

  1. En Azure Portal, vaya a la cuenta de almacenamiento del Administrador de clústeres.
  2. En los detalles de la cuenta de almacenamiento, seleccione Explorador de almacenamiento en el menú de navegación del lado izquierdo.
  3. En los detalles del explorador de almacenamiento, seleccione Contenedores de blobs.
  4. Si se encuentra el mensaje 403 This request is not authorized to perform this operation. mientras accede a la cuenta de almacenamiento, la configuración del firewall de la cuenta de almacenamiento debe actualizarse para incluir la dirección IP pública.
  5. Solicite acceso mediante la creación de una incidencia de soporte técnico a través del portal en el recurso Administrador de clústeres. Proporcione la dirección IP pública que requiere acceso.

Ejecutar un comando run-data-extract

El comando run-data-extract ejecuta uno o varios scripts predefinidos para extraer datos de una máquina sin sistema operativo.

Advertencia

Microsoft no proporciona ni admite ninguna llamada a la API de Operator Nexus que espere que se proporcione el nombre de usuario o la contraseña de texto no cifrado. Tenga en cuenta que los valores enviados se registran y se consideran secretos expuestos, que se deben rotar y revocar. El método documentado de Microsoft para usar secretos de forma segura es almacenarlos en una instancia de Azure Key Vault. Si tiene preguntas o dudas específicas, envíe una solicitud a través de Azure Portal.

Esta es la lista de comandos admitidos:

La sintaxis del comando es la siguiente:

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

Especifique varios comandos con formato JSON en la opción --commands. Cada valor command especifica el comando y los argumentos. En el caso de un comando con varios argumentos, proporciónelos como una lista al parámetro arguments. Consulte la sintaxis abreviada de la CLI de Azure para obtener instrucciones sobre cómo crear la estructura --commands.

Estos comandos pueden ser de larga duración, por lo que se recomienda establecer --limit-time-seconds en al menos 600 segundos (10 minutos). La opción Debug o la ejecución de varios extractos puede tardar más de 10 minutos.

En la respuesta, la operación se realiza de forma asincrónica y devuelve un código de estado HTTP de 202. Consulte la sección Visualización de la salida para obtener más información sobre cómo realizar un seguimiento de la finalización del comando y ver el archivo de salida.

Recopilación de datos de soporte técnico de hardware

En este ejemplo, se ejecuta el comando hardware-support-data-collection y se obtienen los registros SysInfo y TTYLog del servidor Dell. El script ejecuta un comando racadm supportassist collect en la máquina sin sistema operativo designada. El archivo tar.gz que se obtiene contiene los resultados del archivo de comandos de extracción comprimido en 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

Salida 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

Lista de ejemplos de archivos de soporte técnico de hardware recopilados

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

Recopilación de información del agente de MDE

Se recopilan datos con el comando mde-agent-information y se formatean como JSON en /hostfs/tmp/runcommand/mde-agent-information.json. El archivo JSON se encuentra en el archivo ZIP de extracción de datos ubicado en la cuenta de almacenamiento. El script ejecuta una secuencia de comandos mdatp en la máquina sin sistema operativo designada.

En este ejemplo, se ejecuta el comando mde-agent-information sin argumentos.

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

Salida 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

Ejemplo de objeto JSON recopilado

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

Recopilación de diagnósticos de soporte técnico de MDE

Los datos que se recopilan del comando mde-support-diagnostics usan la herramienta de analizador de clientes de MDE para agrupar la información de los comandos mdatp y de los archivos de registro pertinentes. El archivo de la cuenta de almacenamiento tgz contiene un archivo zip denominado mde-support-diagnostics-<hostname>.zip. El archivo zip debe enviarse junto con las solicitudes de soporte técnico para asegurarse de que los equipos correspondientes puedan usar los registros para la solución de problemas y el análisis de la causa principal, si es necesario.

En este ejemplo, se ejecuta el comando mde-support-diagnostics sin argumentos.

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

Salida 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

Después de descargar el archivo de resultados de ejecución, los archivos de soporte técnico se pueden descomprimir para analizarlos.

Lista de ejemplos de información recopilados por la herramienta de analizador de clientes de MDE

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

Estado de acumulación del hardware

Se recopilan datos con el comando hardware-rollup-status y se formatean como JSON en /hostfs/tmp/runcommand/rollupStatus.json. El archivo JSON se encuentra en el archivo ZIP de extracción de datos ubicado en la cuenta de almacenamiento. Los datos recopilados muestran el estado de los subsistemas de la máquina.

En este ejemplo, se ejecuta el comando hardware-rollup-status sin argumentos.

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

Salida 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

Ejemplo de JSON recopilado

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

Generación del informe de CVE del clúster

Los datos de vulnerabilidades se recopilan con el comando cluster-cve-report y se formatean como JSON en {year}-{month}-{day}-nexus-cluster-vulnerability-report.json. El archivo JSON se encuentra en el archivo ZIP de extracción de datos ubicado en la cuenta de almacenamiento. Los datos recopilados incluyen datos de vulnerabilidades por imagen de contenedor en el clúster.

En este ejemplo, se ejecuta el comando cluster-cve-report sin argumentos.

Nota:

La máquina de destino debe ser un nodo del plano de control o la acción no se ejecuta.

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

Salida 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

Esquema del informe de 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"]
}

Detalles sobre los datos de CVE

Los datos CVE se actualizan por imagen de contenedor cada 24 horas o cuando hay un cambio en el recurso de Kubernetes que hace referencia a la imagen.

Recopilación de versiones de Helm

Los datos de versiones de Helm se recopilan con el comando collect-helm-releases y se formatean como json en {year}-{month}-{day}-helm-releases.json. El archivo JSON se encuentra en el archivo ZIP de extracción de datos ubicado en la cuenta de almacenamiento. Los datos recopilados incluyen toda la información de la versión de Helm del clúster, que consiste en los datos estándar devueltos al ejecutar el comando helm list.

En este ejemplo, se ejecuta el comando collect-helm-releases sin argumentos.

Nota:

La máquina de destino debe ser un nodo del plano de control o la acción no se ejecuta.

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

Salida 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

Esquema de versión de 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"
  ]
}

Recopilación de salida de estado de Systemctl

El estado del servicio se recopila con el comando platform-services-status. La salida está en formato de texto sin formato y devuelve una visión general del estado de los servicios en el host y el systemctl status para cada servicio encontrado.

En este ejemplo, se ejecuta el comando platform-services-status sin argumentos.

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"

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

Visualizar la salida

El comando proporciona un vínculo (si usa el almacenamiento del administrador de clúster) u otro comando (si usa el almacenamiento proporcionado por el usuario) para descargar la salida completa. El archivo tar.gz también contiene la salida del archivo de comandos de extracción comprimido. Especifique la ruta de acceso del directorio en el argumento --output-directory opcional para descargar el archivo de salida desde el blob de almacenamiento a un directorio local.

Advertencia

El uso del argumento --output-directory sobrescribe los archivos del directorio local que tienen el mismo nombre que los nuevos archivos que se crean.

Nota:

La cuenta de almacenamiento podría bloquearse y, como consecuencia de ello, mostrarse el mensaje 403 This request is not authorized to perform this operation. debido a restricciones de red o firewall. Consulte las secciones almacenamiento del administrador de clúster o almacenamiento administrado por el usuario para ver los procedimientos para comprobar el acceso.