Consulta de registros de Update Management
Importante
Update Management en Automation se ha retirado el 31 de agosto de 2024 y se recomienda usar Administrador de actualizaciones de Azure. Siga las instrucciones de migración de Update Management en Automation a Administrador de actualizaciones de Azure.
Además de los detalles que se proporcionan durante la implementación de Update Management, puede buscar en los registros almacenados en el área de trabajo de Log Analytics. Para buscar los registros desde la cuenta de Automation, seleccione Update Management y abra el área de trabajo de Log Analytics asociada a la implementación.
También se pueden personalizar las consultas de registros o usarlas desde clientes distintos. Consulte Documentación de Log Analytics Search API.
Consulta de registros de actualización
Update Management recopila los registros para máquinas virtuales Linux y Windows, y los tipos de datos que aparecen en los resultados de la búsqueda de registros. En las secciones siguientes se describen estos registros.
Consulta del registro de la actualización
Se crea un registro con un tipo de Update
que representa las actualizaciones disponibles y su estado de instalación para un equipo. Estos registros tienen las propiedades de la tabla siguiente:
Propiedad | Descripción |
---|---|
TenantId | Identificador único que representa la instancia de su organización de Microsoft Entra ID. |
SourceSystem | Sistema de origen del registro. El valor es OperationsManager . |
TimeGenerated | Fecha y hora de creación del registro. |
SourceComputerId | Identificador único que representa el equipo de origen. |
Título | El título de la actualización. |
Clasificación | Clasificación de aprobación. El valor es Updates (Actualizaciones). |
PublishedDate (UTC) | Fecha en la que la actualización está lista para descargarse e instalarse desde Windows Update. |
Equipo | Nombre de dominio completo del equipo que genera el informe. |
UpdateState | Estado actual de la actualización. |
Producto | Productos a los que se aplica la actualización. |
OSType | Tipo de sistema operativo. Los valores son Windows o Linux. |
ProductVersion | Versión de la actualización. |
Arco del producto | Arquitectura de máquina aplicable |
CVENumbers | Número de vulnerabilidades y exposiciones comunes |
BulletinUrl | Dirección URL del boletín |
BulletinID | Número de ID del boletín. |
PackageRepository | Información del repositorio del paquete. |
PackageSeverity | Gravedad de la actualización. |
OSName | Tipo de sistema operativo. Los valores son Windows o Linux. |
OSVersion | La versión del sistema operativo. |
OSFullName | Nombre del sistema operativo. |
SubscriptionId | Identificador único de la suscripción de Azure. |
Grupo de recursos | Nombre del grupo de recursos al que pertenece el recurso. |
ResourceProvider | El proveedor de recursos. |
Resource | Nombre del recurso. |
ResourceId | Identificador único del recurso asociado al registro. |
ResourceType | Tipo de recurso. |
ComputerEnvironment | Entorno Los valores posibles son Azure y Non-Azure. |
VMUUID | Identificador único de la máquina virtual. |
MG | Identificador único del grupo de administración o del área de trabajo de Log Analytics. |
ManagementGroupName | Nombre del grupo de administración de Operations Manager o del área de trabajo de Log Analytics. |
MSRCSeverity | Clasificación de gravedad de la vulnerabilidad. Los valores son: Crítico Importante Moderado Bajo |
KBID | Identificador del artículo de Knowledge base para la actualización de Windows. |
UpdateID | Identificador único de la actualización de software. |
RevisionNumber | El número de revisión de una revisión específica de una actualización. |
Opcionales | True si se el registro es opcional o False en caso contrario. |
RebootBehavior | El comportamiento de reinicio después de instalar o desinstalar una actualización. |
MSRCBulletinID | Número de identificación del boletín de seguridad. |
Aprobados | True si el registro está aprobado o False en caso contrario. |
ApprovalSource | Solo se aplica al sistema operativo Windows. Origen de la aprobación del registro. El valor es Microsoft Update. |
InstallTimePredictionSeconds | |
InstallTimeDeviationRangeSeconds | |
InstallTimeAvailable | |
Tipo | Tipo de registro. El valor es Update (Actualización). |
Consulta del registro del estado de implementación de la actualización
Se crea un registro con un tipo de UpdateRunProgress
que proporciona el estado de implementación de actualización de una implementación programada por equipo. Estos registros tienen las propiedades de la tabla siguiente:
Propiedad | Descripción |
---|---|
TenantId | Identificador único que representa la instancia de su organización de Microsoft Entra ID. |
SourceSystem | Sistema de origen del registro. El valor es OperationsManager . |
TimeGenerated | Fecha y hora de creación del registro. |
MG | Identificador único del grupo de administración o del área de trabajo de Log Analytics. |
ManagementGroupName | Nombre del grupo de administración de Operations Manager o del área de trabajo de Log Analytics. |
SourceComputerId | Identificador único que representa el equipo de origen. |
KBID | Identificador del artículo de Knowledge base para la actualización de Windows. |
UpdateId | Identificador único de la actualización de software. |
SucceededOnRetry | Valor que indica si se ha producido un error en la ejecución de la actualización en el primer intento y la operación actual es un reintento. |
ErrorResult | Código de error de Windows Update generado si no se puede instalar una actualización. |
UpdateRunName | Nombre de la programación de actualización. |
InstallationStatus | Los estados de instalación posibles de una actualización en el equipo cliente,NotStarted : el trabajo aún no se ha desencadenado.Failed : el trabajo se inició, pero devolvió una excepción.InProgress : trabajo en curso.MaintenanceWindowExceeded : la ejecución seguía en curso pero se alcanzó el intervalo de la ventana de mantenimiento.Succeeded : el trabajo finalizó correctamente.Install Failed : error de instalación de la actualización.NotIncluded : la clasificación de la actualización correspondiente no coincide con las entradas del cliente en la lista de clasificación de entrada.Excluded : el usuario escribe un KBID en la lista de exclusión. Al aplicar revisiones, si el KBID de la lista de exclusión coincide con el identificador de la KB de actualización detectado por el sistema, se marca como excluido. |
Equipo | Nombre de dominio completo del equipo que genera el informe. |
Título | El título de la actualización. |
Producto | Productos a los que se aplica la actualización. |
OSType | Tipo de sistema operativo. Los valores son Windows o Linux. |
StartTime (UTC) | Hora a la que se ha programado la instalación de la actualización. Esta propiedad no se usa actualmente. Consulte TimeGenerated. |
EndTime (UTC) | La hora a la que ha finalizado el proceso de sincronización. Esta propiedad no se usa actualmente. Consulte TimeGenerated. |
CorrelationId | Identificador único del trabajo de runbook ejecutado para la actualización. |
SubscriptionId | Identificador único de la suscripción de Azure. |
Grupo de recursos | Nombre del grupo de recursos al que pertenece el recurso. |
ResourceProvider | El proveedor de recursos. |
Resource | Nombre del recurso. |
ResourceId | Identificador único del recurso asociado al registro. |
ResourceType | Tipo de recurso. |
ComputerEnvironment | Entorno Los valores posibles son Azure y Non-Azure. |
VMUUID | Identificador único de la máquina virtual. |
Tipo | El tipo de actualización. El valor es UpdateRunProgress . |
_ResourceId | Identificador único del recurso asociado al registro. |
Consulta del registro de resumen de la actualización
Se crea un registro con un tipo de UpdateSummary
que proporciona el resumen de actualizaciones por equipo. Estos registros tienen las propiedades de la tabla siguiente:
Propiedad | Descripción |
---|---|
TenantId | Identificador único que representa la instancia de su organización de Microsoft Entra ID. |
SourceSystem | Sistema de origen del registro. El valor es OpsManager . |
TimeGenerated | Fecha y hora de creación del registro. |
MG | Identificador único del grupo de administración o del área de trabajo de Log Analytics. |
ManagementGroupName | Nombre del grupo de administración de Operations Manager o del área de trabajo de Log Analytics. |
SourceComputerId | Identificador único de la máquina virtual. |
LastUpdateApplied (UTC) | |
OldestMissingSecurityUpdateInDays | Número total de días de la actualización más antigua detectada como aplicable que no se ha instalado. |
OldestMissingSecurityUpdateBucket | Especificador del depósito de seguridad que falta más antiguo. Los valores son: Recent (Reciente) si el valor es inferior a 30 días Hace 30 días Hace 60 días Hace 90 días Hace 120 días Hace 150 días Hace 180 días Older (Anterior) si el valor supera los 180 días. |
WindowsUpdateSetting | Estado del agente de Windows Update. Los valores posibles son:Scheduled installation Notify before installation Error returned from unhealthy WUA agent |
WindowsUpdateAgentVersion | Versión del Agente de Windows Update. |
WSUSServer | Errores en el caso de que el agente de Windows Update tenga un problema, para ayudar en la solución de problemas. |
Equipo | Nombre de dominio completo del equipo que genera el informe. |
OsVersion | La versión del sistema operativo. |
NETRuntimeVersion | Versión de .NET Framework instalada en el equipo Windows. |
CriticalUpdatesMissing | Número de actualizaciones críticas aplicables que faltan. |
SecurityUpdatesMissing | Recuento de actualizaciones de seguridad que faltan que se pueden aplicar. |
OtherUpdatesMissing | Recuento de actualizaciones detectadas que faltan. |
TotalUpdatesMissing | Número total de actualizaciones que faltan que se pueden aplicar. |
RestartPending | True si hay un reinicio pendiente o False en caso contrario. |
SubscriptionId | Identificador único de la suscripción de Azure. |
Grupo de recursos | Nombre del grupo de recursos que contiene el recurso. |
ResourceProvider | El proveedor de recursos. |
Resource | Nombre del recurso del registro. |
ResourceId | Identificador único del recurso asociado al registro. |
ResourceType | Tipo de recurso. |
ComputerEnvironment | Entorno Los valores posibles son Azure y Non-Azure. |
VMUUID | Identificador único de la máquina virtual. |
Tipo | Tipo de registro. El valor es UpdateSummary . |
_ResourceId | Identificador único del recurso asociado al registro. |
Consultas de ejemplo
En las secciones siguientes se proporcionan ejemplos de consultas de registros para los registros de actualizaciones recopilados por Update Management.
Confirmación de que las máquinas que no son de Azure están habilitadas para Update Management
Para confirmar que las máquinas conectadas directamente se comunican con los registros de Azure Monitor, ejecute una de las siguientes búsquedas de registros.
Linux
Heartbeat
| where OSType == "Linux" | summarize arg_max(TimeGenerated, *) by SourceComputerId | top 500000 by Computer asc | render table
Windows
Heartbeat
| where OSType == "Windows" | summarize arg_max(TimeGenerated, *) by SourceComputerId | top 500000 by Computer asc | render table
En un equipo Windows, puede revisar la siguiente información para comprobar la conectividad del agente con los registros de Azure Monitor:
En el Panel de Control, abra Microsoft Monitoring Agent. En la pestaña Azure Log Analytics, el agente muestra un mensaje que indica que Microsoft Monitoring Agent se ha conectado correctamente a Log Analytics.
Abra el registro de eventos de Windows. Vaya a Application and Services Logs\Operations Manager y busque los identificadores de evento 3000 y 5002 desde el Conector de servicio de origen. Estos eventos indican que el equipo se ha registrado con el área de trabajo de Log Analytics y está recibiendo la configuración.
Si el agente no puede comunicarse con los registros de Azure Monitor y está configurado para comunicarse con Internet mediante un firewall o un servidor proxy, confirme que estos están configurados correctamente. Para aprender a comprobar que un firewall o un servidor proxy estén correctamente configurados, consulte Configuración de red para el agente Windows o Configuración de red para el agente de Linux.
Nota:
Si los sistemas Linux están configurados para comunicarse con un servidor proxy o una puerta de enlace de Log Analytics y va a habilitar Update Management, actualice los permisos proxy.conf
a fin de conceder al grupo omiuser permiso de lectura sobre el archivo mediante el uso de los comandos siguientes:
sudo chown omsagent:omiusers /etc/opt/microsoft/omsagent/proxy.conf
sudo chmod 644 /etc/opt/microsoft/omsagent/proxy.conf
Los agentes de Linux recién agregados muestran un estado Actualizado después de haber realizado una evaluación. Este proceso puede tardar hasta 6 horas.
Para confirmar que un grupo de administración de Operations Manager se comunica con los registros de Azure Monitor, consulte Validación de la integración de Operations Manager con los registros de Azure Monitor.
Consultas individuales de evaluación de Azure VM (Windows)
Reemplace el valor de VMUUID con el GUID de la máquina virtual en la que va a realizar la consulta. Para encontrar el VMUUID que se debe usar, ejecute la siguiente consulta en los registros de Azure Monitor: Update | where Computer == "<machine name>" | summarize by Computer, VMUUID
Falta resumen de actualizaciones
Update
| where TimeGenerated>ago(14h) and OSType!="Linux" and (Optional==false or Classification has "Critical" or Classification has "Security") and VMUUID=~"b08d5afa-1471-4b52-bd95-a44fea6e4ca8"
| summarize hint.strategy=partitioned arg_max(TimeGenerated, UpdateState, Classification, Approved) by Computer, SourceComputerId, UpdateID
| where UpdateState=~"Needed" and Approved!=false
| summarize by UpdateID, Classification
| summarize allUpdatesCount=count(), criticalUpdatesCount=countif(Classification has "Critical"), securityUpdatesCount=countif(Classification has "Security"), otherUpdatesCount=countif(Classification !has "Critical" and Classification !has "Security")
Falta lista de actualizaciones
Update
| where TimeGenerated>ago(14h) and OSType!="Linux" and (Optional==false or Classification has "Critical" or Classification has "Security") and VMUUID=~"8bf1ccc6-b6d3-4a0b-a643-23f346dfdf82"
| summarize hint.strategy=partitioned arg_max(TimeGenerated, UpdateState, Classification, Title, KBID, PublishedDate, Approved) by Computer, SourceComputerId, UpdateID
| where UpdateState=~"Needed" and Approved!=false
| project-away UpdateState, Approved, TimeGenerated
| summarize computersCount=dcount(SourceComputerId, 2), displayName=any(Title), publishedDate=min(PublishedDate), ClassificationWeight=max(iff(Classification has "Critical", 4, iff(Classification has "Security", 2, 1))) by id=strcat(UpdateID, "_", KBID), classification=Classification, InformationId=strcat("KB", KBID), InformationUrl=iff(isnotempty(KBID), strcat("https://support.microsoft.com/kb/", KBID), ""), osType=2
| sort by ClassificationWeight desc, computersCount desc, displayName asc
| extend informationLink=(iff(isnotempty(InformationId) and isnotempty(InformationUrl), toobject(strcat('{ "uri": "', InformationUrl, '", "text": "', InformationId, '", "target": "blank" }')), toobject('')))
| project-away ClassificationWeight, InformationId, InformationUrl
Consultas individuales de evaluación de Azure VM (Linux)
En algunas distribuciones de Linux hay una falta de concordancia de la codificación Endiannes con el valor de VMUUID que proviene de Azure Resource Manager y lo que está almacenado en los registros de Azure Monitor. La siguiente consulta busca una concordancia en cualquier codificación Endiannes. Reemplace los valores de VMUUID por el formato de big-endian y little-endian del GUID para devolver correctamente los resultados. Para encontrar el VMUUID que se debe usar, ejecute la siguiente consulta en los registros de Azure Monitor: Update | where Computer == "<machine name>" | summarize by Computer, VMUUID
Falta resumen de actualizaciones
Update
| where TimeGenerated>ago(5h) and OSType=="Linux" and (VMUUID=~"625686a0-6d08-4810-aae9-a089e68d4911" or VMUUID=~"a0865662-086d-1048-aae9-a089e68d4911")
| summarize hint.strategy=partitioned arg_max(TimeGenerated, UpdateState, Classification) by Computer, SourceComputerId, Product, ProductArch
| where UpdateState=~"Needed"
| summarize by Product, ProductArch, Classification
| summarize allUpdatesCount=count(), criticalUpdatesCount=countif(Classification has "Critical"), securityUpdatesCount=countif(Classification has "Security"), otherUpdatesCount=countif(Classification !has "Critical" and Classification !has "Security")
Falta lista de actualizaciones
Update
| where TimeGenerated>ago(5h) and OSType=="Linux" and (VMUUID=~"625686a0-6d08-4810-aae9-a089e68d4911" or VMUUID=~"a0865662-086d-1048-aae9-a089e68d4911")
| summarize hint.strategy=partitioned arg_max(TimeGenerated, UpdateState, Classification, BulletinUrl, BulletinID) by Computer, SourceComputerId, Product, ProductArch
| where UpdateState=~"Needed"
| project-away UpdateState, TimeGenerated
| summarize computersCount=dcount(SourceComputerId, 2), ClassificationWeight=max(iff(Classification has "Critical", 4, iff(Classification has "Security", 2, 1))) by id=strcat(Product, "_", ProductArch), displayName=Product, productArch=ProductArch, classification=Classification, InformationId=BulletinID, InformationUrl=tostring(split(BulletinUrl, ";", 0)[0]), osType=1
| sort by ClassificationWeight desc, computersCount desc, displayName asc
| extend informationLink=(iff(isnotempty(InformationId) and isnotempty(InformationUrl), toobject(strcat('{ "uri": "', InformationUrl, '", "text": "', InformationId, '", "target": "blank" }')), toobject('')))
| project-away ClassificationWeight, InformationId, InformationUrl
Consultas de evaluación de máquinas virtuales múltiples
Resumen de equipos
Heartbeat
| where TimeGenerated>ago(12h) and OSType=~"Windows" and notempty(Computer)
| summarize arg_max(TimeGenerated, Solutions) by SourceComputerId
| where Solutions has "updates"
| distinct SourceComputerId
| join kind=leftouter
(
Update
| where TimeGenerated>ago(14h) and OSType!="Linux"
| summarize hint.strategy=partitioned arg_max(TimeGenerated, UpdateState, Approved, Optional, Classification) by SourceComputerId, UpdateID
| distinct SourceComputerId, Classification, UpdateState, Approved, Optional
| summarize WorstMissingUpdateSeverity=max(iff(UpdateState=~"Needed" and (Optional==false or Classification has "Critical" or Classification has "Security") and Approved!=false, iff(Classification has "Critical", 4, iff(Classification has "Security", 2, 1)), 0)) by SourceComputerId
)
on SourceComputerId
| extend WorstMissingUpdateSeverity=coalesce(WorstMissingUpdateSeverity, -1)
| summarize computersBySeverity=count() by WorstMissingUpdateSeverity
| union (Heartbeat
| where TimeGenerated>ago(12h) and OSType=="Linux" and notempty(Computer)
| summarize arg_max(TimeGenerated, Solutions) by SourceComputerId
| where Solutions has "updates"
| distinct SourceComputerId
| join kind=leftouter
(
Update
| where TimeGenerated>ago(5h) and OSType=="Linux"
| summarize hint.strategy=partitioned arg_max(TimeGenerated, UpdateState, Classification) by SourceComputerId, Product, ProductArch
| distinct SourceComputerId, Classification, UpdateState
| summarize WorstMissingUpdateSeverity=max(iff(UpdateState=~"Needed", iff(Classification has "Critical", 4, iff(Classification has "Security", 2, 1)), 0)) by SourceComputerId
)
on SourceComputerId
| extend WorstMissingUpdateSeverity=coalesce(WorstMissingUpdateSeverity, -1)
| summarize computersBySeverity=count() by WorstMissingUpdateSeverity)
| summarize assessedComputersCount=sumif(computersBySeverity, WorstMissingUpdateSeverity>-1), notAssessedComputersCount=sumif(computersBySeverity, WorstMissingUpdateSeverity==-1), computersNeedCriticalUpdatesCount=sumif(computersBySeverity, WorstMissingUpdateSeverity==4), computersNeedSecurityUpdatesCount=sumif(computersBySeverity, WorstMissingUpdateSeverity==2), computersNeedOtherUpdatesCount=sumif(computersBySeverity, WorstMissingUpdateSeverity==1), upToDateComputersCount=sumif(computersBySeverity, WorstMissingUpdateSeverity==0)
| summarize assessedComputersCount=sum(assessedComputersCount), computersNeedCriticalUpdatesCount=sum(computersNeedCriticalUpdatesCount), computersNeedSecurityUpdatesCount=sum(computersNeedSecurityUpdatesCount), computersNeedOtherUpdatesCount=sum(computersNeedOtherUpdatesCount), upToDateComputersCount=sum(upToDateComputersCount), notAssessedComputersCount=sum(notAssessedComputersCount)
| extend allComputersCount=assessedComputersCount+notAssessedComputersCount
Falta resumen de actualizaciones
Update
| where TimeGenerated>ago(5h) and OSType=="Linux" and SourceComputerId in ((Heartbeat
| where TimeGenerated>ago(12h) and OSType=="Linux" and notempty(Computer)
| summarize arg_max(TimeGenerated, Solutions) by SourceComputerId
| where Solutions has "updates"
| distinct SourceComputerId))
| summarize hint.strategy=partitioned arg_max(TimeGenerated, UpdateState, Classification) by Computer, SourceComputerId, Product, ProductArch
| where UpdateState=~"Needed"
| summarize by Product, ProductArch, Classification
| union (Update
| where TimeGenerated>ago(14h) and OSType!="Linux" and (Optional==false or Classification has "Critical" or Classification has "Security") and SourceComputerId in ((Heartbeat
| where TimeGenerated>ago(12h) and OSType=~"Windows" and notempty(Computer)
| summarize arg_max(TimeGenerated, Solutions) by SourceComputerId
| where Solutions has "updates"
| distinct SourceComputerId))
| summarize hint.strategy=partitioned arg_max(TimeGenerated, UpdateState, Classification, Approved) by Computer, SourceComputerId, UpdateID
| where UpdateState=~"Needed" and Approved!=false
| summarize by UpdateID, Classification )
| summarize allUpdatesCount=count(), criticalUpdatesCount=countif(Classification has "Critical"), securityUpdatesCount=countif(Classification has "Security"), otherUpdatesCount=countif(Classification !has "Critical" and Classification !has "Security")
Lista de equipos
Heartbeat
| where TimeGenerated>ago(12h) and OSType=="Linux" and notempty(Computer)
| summarize arg_max(TimeGenerated, Solutions, Computer, ResourceId, ComputerEnvironment, VMUUID) by SourceComputerId
| where Solutions has "updates"
| extend vmuuId=VMUUID, azureResourceId=ResourceId, osType=1, environment=iff(ComputerEnvironment=~"Azure", 1, 2), scopedToUpdatesSolution=true, lastUpdateAgentSeenTime=""
| join kind=leftouter
(
Update
| where TimeGenerated>ago(5h) and OSType=="Linux" and SourceComputerId in ((Heartbeat
| where TimeGenerated>ago(12h) and OSType=="Linux" and notempty(Computer)
| summarize arg_max(TimeGenerated, Solutions) by SourceComputerId
| where Solutions has "updates"
| distinct SourceComputerId))
| summarize hint.strategy=partitioned arg_max(TimeGenerated, UpdateState, Classification, Product, Computer, ComputerEnvironment) by SourceComputerId, Product, ProductArch
| summarize Computer=any(Computer), ComputerEnvironment=any(ComputerEnvironment), missingCriticalUpdatesCount=countif(Classification has "Critical" and UpdateState=~"Needed"), missingSecurityUpdatesCount=countif(Classification has "Security" and UpdateState=~"Needed"), missingOtherUpdatesCount=countif(Classification !has "Critical" and Classification !has "Security" and UpdateState=~"Needed"), lastAssessedTime=max(TimeGenerated), lastUpdateAgentSeenTime="" by SourceComputerId
| extend compliance=iff(missingCriticalUpdatesCount > 0 or missingSecurityUpdatesCount > 0, 2, 1)
| extend ComplianceOrder=iff(missingCriticalUpdatesCount > 0 or missingSecurityUpdatesCount > 0 or missingOtherUpdatesCount > 0, 1, 3)
)
on SourceComputerId
| project id=SourceComputerId, displayName=Computer, sourceComputerId=SourceComputerId, scopedToUpdatesSolution=true, missingCriticalUpdatesCount=coalesce(missingCriticalUpdatesCount, -1), missingSecurityUpdatesCount=coalesce(missingSecurityUpdatesCount, -1), missingOtherUpdatesCount=coalesce(missingOtherUpdatesCount, -1), compliance=coalesce(compliance, 4), lastAssessedTime, lastUpdateAgentSeenTime, osType=1, environment=iff(ComputerEnvironment=~"Azure", 1, 2), ComplianceOrder=coalesce(ComplianceOrder, 2)
| union(Heartbeat
| where TimeGenerated>ago(12h) and OSType=~"Windows" and notempty(Computer)
| summarize arg_max(TimeGenerated, Solutions, Computer, ResourceId, ComputerEnvironment, VMUUID) by SourceComputerId
| where Solutions has "updates"
| extend vmuuId=VMUUID, azureResourceId=ResourceId, osType=2, environment=iff(ComputerEnvironment=~"Azure", 1, 2), scopedToUpdatesSolution=true, lastUpdateAgentSeenTime=""
| join kind=leftouter
(
Update
| where TimeGenerated>ago(14h) and OSType!="Linux" and SourceComputerId in ((Heartbeat
| where TimeGenerated>ago(12h) and OSType=~"Windows" and notempty(Computer)
| summarize arg_max(TimeGenerated, Solutions) by SourceComputerId
| where Solutions has "updates"
| distinct SourceComputerId))
| summarize hint.strategy=partitioned arg_max(TimeGenerated, UpdateState, Classification, Title, Optional, Approved, Computer, ComputerEnvironment) by Computer, SourceComputerId, UpdateID
| summarize Computer=any(Computer), ComputerEnvironment=any(ComputerEnvironment), missingCriticalUpdatesCount=countif(Classification has "Critical" and UpdateState=~"Needed" and Approved!=false), missingSecurityUpdatesCount=countif(Classification has "Security" and UpdateState=~"Needed" and Approved!=false), missingOtherUpdatesCount=countif(Classification !has "Critical" and Classification !has "Security" and UpdateState=~"Needed" and Optional==false and Approved!=false), lastAssessedTime=max(TimeGenerated), lastUpdateAgentSeenTime="" by SourceComputerId
| extend compliance=iff(missingCriticalUpdatesCount > 0 or missingSecurityUpdatesCount > 0, 2, 1)
| extend ComplianceOrder=iff(missingCriticalUpdatesCount > 0 or missingSecurityUpdatesCount > 0 or missingOtherUpdatesCount > 0, 1, 3)
)
on SourceComputerId
| project id=SourceComputerId, displayName=Computer, sourceComputerId=SourceComputerId, scopedToUpdatesSolution=true, missingCriticalUpdatesCount=coalesce(missingCriticalUpdatesCount, -1), missingSecurityUpdatesCount=coalesce(missingSecurityUpdatesCount, -1), missingOtherUpdatesCount=coalesce(missingOtherUpdatesCount, -1), compliance=coalesce(compliance, 4), lastAssessedTime, lastUpdateAgentSeenTime, osType=2, environment=iff(ComputerEnvironment=~"Azure", 1, 2), ComplianceOrder=coalesce(ComplianceOrder, 2) )
| order by ComplianceOrder asc, missingCriticalUpdatesCount desc, missingSecurityUpdatesCount desc, missingOtherUpdatesCount desc, displayName asc
| project-away ComplianceOrder
Falta lista de actualizaciones
Update
| where TimeGenerated>ago(5h) and OSType=="Linux" and SourceComputerId in ((Heartbeat
| where TimeGenerated>ago(12h) and OSType=="Linux" and notempty(Computer)
| summarize arg_max(TimeGenerated, Solutions) by SourceComputerId
| where Solutions has "updates"
| distinct SourceComputerId))
| summarize hint.strategy=partitioned arg_max(TimeGenerated, UpdateState, Classification, BulletinUrl, BulletinID) by SourceComputerId, Product, ProductArch
| where UpdateState=~"Needed"
| project-away UpdateState, TimeGenerated
| summarize computersCount=dcount(SourceComputerId, 2), ClassificationWeight=max(iff(Classification has "Critical", 4, iff(Classification has "Security", 2, 1))) by id=strcat(Product, "_", ProductArch), displayName=Product, productArch=ProductArch, classification=Classification, InformationId=BulletinID, InformationUrl=tostring(split(BulletinUrl, ";", 0)[0]), osType=1
| union(Update
| where TimeGenerated>ago(14h) and OSType!="Linux" and (Optional==false or Classification has "Critical" or Classification has "Security") and SourceComputerId in ((Heartbeat
| where TimeGenerated>ago(12h) and OSType=~"Windows" and notempty(Computer)
| summarize arg_max(TimeGenerated, Solutions) by SourceComputerId
| where Solutions has "updates"
| distinct SourceComputerId))
| summarize hint.strategy=partitioned arg_max(TimeGenerated, UpdateState, Classification, Title, KBID, PublishedDate, Approved) by Computer, SourceComputerId, UpdateID
| where UpdateState=~"Needed" and Approved!=false
| project-away UpdateState, Approved, TimeGenerated
| summarize computersCount=dcount(SourceComputerId, 2), displayName=any(Title), publishedDate=min(PublishedDate), ClassificationWeight=max(iff(Classification has "Critical", 4, iff(Classification has "Security", 2, 1))) by id=strcat(UpdateID, "_", KBID), classification=Classification, InformationId=strcat("KB", KBID), InformationUrl=iff(isnotempty(KBID), strcat("https://support.microsoft.com/kb/", KBID), ""), osType=2)
| sort by ClassificationWeight desc, computersCount desc, displayName asc
| extend informationLink=(iff(isnotempty(InformationId) and isnotempty(InformationUrl), toobject(strcat('{ "uri": "', InformationUrl, '", "text": "', InformationId, '", "target": "blank" }')), toobject('')))
| project-away ClassificationWeight, InformationId, InformationUrl
Pasos siguientes
- Para obtener más información sobre los registros de Azure Monitor, consulte Registros de Azure Monitor.
- Para obtener ayuda con las alertas, consulte Configuración de alertas.