Consultar os registos da Gestão de Atualizações
Importante
O Gerenciamento de Atualização de Automação foi desativado em 31 de agosto de 2024 e recomendamos que você use o Azure Update Manager. Siga as diretrizes para migração do Automation Update Management para o Azure Update Manager.
Além dos detalhes fornecidos durante a implantação do Gerenciamento de Atualizações, você pode pesquisar os logs armazenados no espaço de trabalho do Log Analytics. Para pesquisar os logs da sua conta de automação, selecione Gerenciamento de atualizações e abra o espaço de trabalho do Log Analytics associado à sua implantação.
Você também pode personalizar as consultas de log ou usá-las de clientes diferentes. Consulte a documentação da API de pesquisa do Log Analytics.
Consultar registos de atualização
O Gerenciamento de Atualizações coleta registros para VMs Windows e Linux e os tipos de dados que aparecem nos resultados da pesquisa de log. As seções a seguir descrevem esses registros.
Registo de Atualização de Consulta
É criado um registro com um tipo de que representa as atualizações disponíveis e seu status de Update
instalação para uma máquina. Esses registros têm as propriedades na tabela a seguir:
Property | Description |
---|---|
TenantId | Identificador exclusivo que representa a instância do Microsoft Entra ID da sua organização. |
SourceSystem | O sistema de origem do registo. O valor é OperationsManager . |
TimeGenerated | Data e hora da criação do registo. |
SourceComputerId | Identificador exclusivo que representa o computador de origem. |
Título | O título da atualização. |
Classificação | Classificação de aprovação. O valor é Updates. |
Data de Publicação (UTC) | A data em que a atualização está pronta para ser transferida e instalada a partir do Windows Update. |
Computador | Nome de domínio totalmente qualificado da máquina de relatórios. |
UpdateState | O estado atual da atualização. |
Produto | Os produtos aos quais a atualização é aplicável. |
OSType | Tipo de sistema operacional. Os valores são Windows ou Linux. |
Versão do produto | Versão da atualização. |
Arco do Produto | Arquitetura de máquina aplicável |
CVENumbers | Número de Vulnerabilidades e Exposições Comuns |
BulletinUrl | URL do Boletim |
ID do boletim | Número de identificação do boletim. |
PackageRepository | Informações do repositório do pacote. |
PackageSeverity | Severidade da atualização. |
OSName | Tipo de sistema operacional. Os valores são Windows ou Linux. |
OSVersion | A versão do sistema operacional. |
OSFullName | Nome do sistema operacional. |
SubscriptionId | Identificador exclusivo da subscrição do Azure. |
ResourceGroup | Nome do grupo de recursos ao qual o recurso pertence. |
ResourceProvider | O provedor de recursos. |
Recurso | Nome do recurso. |
ResourceId | Identificador exclusivo do recurso associado ao registro. |
ResourceType | O tipo do recurso. |
Ambiente Informático | Ambiente. Os valores possíveis são Azure ou Non-Azure. |
VMUUID | Identificador exclusivo para a máquina virtual. |
MG | Identificador exclusivo para o grupo de gerenciamento ou espaço de trabalho do Log Analytics. |
ManagementGroupName | Nome do grupo de gerenciamento do Operations Manager ou do espaço de trabalho do Log Analytics. |
MSRCSeverity | Classificação de gravidade da vulnerabilidade. Os valores são: Crítico Importante Moderado Baixo |
KBID | ID do artigo da Base de Dados de Conhecimento para a atualização do Windows. |
UpdateID | Identificador exclusivo da atualização de software. |
RevisionNumber | O número de revisão de uma revisão específica de uma atualização. |
Opcional | True se o registro for opcional ou False caso contrário. |
RebootBehavior | O comportamento de reinicialização após a instalação/desinstalação de uma atualização. |
MSRCBulletinID | Número de identificação do boletim de segurança. |
Aprovado | True se o registro for aprovado ou False caso contrário. |
Fonte de aprovação | Aplica-se apenas ao sistema operativo Windows. Fonte de aprovação para o registo. O valor é Microsoft Update. |
InstallTimePredictionSeconds | |
InstallTimeDeviationRangeSeconds | |
InstallTimeAvailable | |
Type | Tipo de registo. O valor é Update. |
Registro de Status de Implantação de Atualização de Consulta
É criado um registro com um tipo de que fornece o status de implantação de atualização de uma implantação agendada UpdateRunProgress
por máquina. Esses registros têm as propriedades na tabela a seguir:
Property | Description |
---|---|
TenantId | Identificador exclusivo que representa a instância do Microsoft Entra ID da sua organização. |
SourceSystem | Sistema de origem do registo. O valor é OperationsManager . |
TimeGenerated | Data e hora da criação do registo. |
MG | Identificador exclusivo para o grupo de gerenciamento ou espaço de trabalho do Log Analytics. |
ManagementGroupName | Nome do grupo de gerenciamento do Operations Manager ou espaço de trabalho do Log Analytics. |
SourceComputerId | Identificador exclusivo que representa o computador de origem. |
KBID | ID do artigo da Base de Dados de Conhecimento para a atualização do Windows. |
UpdateId | Identificador exclusivo da atualização de software. |
SucceededOnRetry | Valor que indica se a execução da atualização falhou na primeira tentativa e se a operação atual é uma tentativa de nova tentativa. |
ErrorResult | Código de erro do Windows Update gerado se uma atualização falhar na instalação. |
UpdateRunName | Nome da agenda de atualização. |
Status da instalação | Os possíveis estados de instalação de uma atualização no computador cliente,NotStarted - trabalho ainda não acionado.Failed - O trabalho começou, mas falhou com uma exceção.InProgress - Trabalhos em curso.MaintenanceWindowExceeded - se a execução estava mantida, mas o intervalo da janela de manutenção foi atingido.Succeeded - trabalho bem sucedido.Install Failed - A atualização falhou ao instalar com êxito.NotIncluded - A classificação da atualização correspondente não corresponde às entradas do cliente na Lista de Classificação de Entrada.Excluded - usuário insere um KBID na lista de excluídos. Durante a aplicação de patches, se o KBID na lista de excluídos corresponder ao ID KB de atualização detetado pelo sistema, ele será marcado como excluído. |
Computador | Nome de domínio totalmente qualificado da máquina de relatórios. |
Título | O título da atualização. |
Produto | Os produtos aos quais a atualização é aplicável. |
OSType | Tipo de sistema operacional. Os valores são Windows ou Linux. |
StartTime (UTC) | Hora em que a atualização está agendada para ser instalada. Esta propriedade não é usada no momento. Consulte TimeGenerated. |
EndTime (UTC) | A hora em que o processo de sincronização terminou. Esta propriedade não é usada no momento. Consulte TimeGenerated. |
CorrelationId | Identificador exclusivo do trabalho runbook executado para a atualização. |
SubscriptionId | Identificador exclusivo da subscrição do Azure. |
ResourceGroup | Nome do grupo de recursos ao qual o recurso pertence. |
ResourceProvider | O provedor de recursos. |
Recurso | Nome do recurso. |
ResourceId | Identificador exclusivo do recurso associado ao registro. |
ResourceType | Tipo de recurso. |
Ambiente Informático | Ambiente. Os valores são Azure ou Non-Azure. |
VMUUID | Identificador exclusivo para a máquina virtual. |
Type | O tipo de atualização. O valor é UpdateRunProgress . |
_ResourceId | Identificador exclusivo do recurso associado ao registro. |
Registro de Resumo de Atualização de Consulta
É criado um registro com um tipo de que fornece resumo de UpdateSummary
atualização por máquina. Esses registros têm as propriedades na tabela a seguir:
Property | Description |
---|---|
TenantId | Identificador exclusivo que representa a instância do Microsoft Entra ID da sua organização. |
SourceSystem | Sistema de origem do registo. O valor é OpsManager . |
TimeGenerated | Data e hora da criação do registo. |
MG | Identificador exclusivo para o grupo de gerenciamento ou espaço de trabalho do Log Analytics. |
ManagementGroupName | Nome do grupo de gerenciamento do Operations Manager ou espaço de trabalho do Log Analytics. |
SourceComputerId | Identificador exclusivo para a máquina virtual. |
LastUpdateApplied (UTC) | |
OldestMissingSecurityUpdateInDays | Número total de dias para a atualização mais antiga detetada como aplicável que não foi instalada. |
OldestMissingSecurityUpdateBucket | Especificador do bucket de segurança ausente mais antigo. Os valores são: Recente se o valor for inferior a 30 dias há 30 dias há 60 dias há 90 dias há 120 dias há 150 dias há 180 dias Mais antigo quando o valor é superior a 180 dias. |
WindowsUpdateSetting | Status do agente do Windows Update. Os valores possíveis são:Scheduled installation Notify before installation Error returned from unhealthy WUA agent |
WindowsUpdateAgentVersion | Versão do agente do Windows Update. |
WSUSServer | Erros se o agente do Windows Update tiver um problema, para ajudar na solução de problemas. |
Computador | Nome de domínio totalmente qualificado da máquina de relatórios. |
OsVersion | A versão do sistema operacional. |
NETRuntimeVersion | Versão do .NET Framework instalada no computador Windows. |
CriticalUpdatesMissing | Número de atualizações críticas aplicáveis que estão faltando. |
SecurityUpdatesMissing | Contagem de atualizações de segurança ausentes que são aplicáveis. |
OtherUpdatesMissing | Contagem de atualizações detetadas ausentes. |
TotalUpdatesMissing | Número total de atualizações em falta que são aplicáveis. |
RestartPending | True se uma reinicialização estiver pendente ou False caso contrário. |
SubscriptionId | Identificador exclusivo da subscrição do Azure. |
ResourceGroup | Nome do grupo de recursos que contém o recurso. |
ResourceProvider | O provedor de recursos. |
Recurso | Nome do recurso para o registro. |
ResourceId | Identificador exclusivo do recurso associado ao registro. |
ResourceType | Tipo de recurso. |
Ambiente Informático | Ambiente. Os valores são Azure ou Non-Azure. |
VMUUID | Identificador exclusivo para a máquina virtual. |
Type | Tipo de registo. O valor é UpdateSummary . |
_ResourceId | Identificador exclusivo do recurso associado ao registro. |
Consultas de amostra
As seções a seguir fornecem consultas de log de exemplo para registros de atualização coletados para o Gerenciamento de Atualizações.
Confirme se as máquinas que não são do Azure estão habilitadas para o Gerenciamento de Atualizações
Para confirmar se as máquinas conectadas diretamente estão se comunicando com os logs do Azure Monitor, execute uma das seguintes pesquisas de log.
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
Em um computador Windows, você pode revisar as seguintes informações para verificar a conectividade do agente com os logs do Azure Monitor:
No Painel de Controle, abra o Microsoft Monitoring Agent. Na guia Azure Log Analytics, o agente exibe a seguinte mensagem: O Microsoft Monitoring Agent se conectou com êxito ao Log Analytics.
Abra o Registo de Eventos do Windows. Vá para Logs de Aplicativos e Serviços\Operations Manager e procure ID de Evento 3000 e ID de Evento 5002 no Service Connector de origem. Estes eventos indicam que o computador foi registado na área de trabalho do Log Analytics e que está a receber a configuração.
Se o agente não puder se comunicar com os logs do Azure Monitor e estiver configurado para se comunicar com a Internet por meio de um firewall ou servidor proxy, confirme se o firewall ou servidor proxy está configurado corretamente. Para saber como verificar se o firewall ou servidor proxy está configurado corretamente, consulte Configuração de rede para agente Windows ou Configuração de rede para agente Linux.
Nota
Se seus sistemas Linux estiverem configurados para se comunicar com um proxy ou Log Analytics Gateway e você estiver habilitando o Gerenciamento de Atualizações, atualize as proxy.conf
permissões para conceder ao grupo omiuser permissão de leitura no arquivo usando os seguintes comandos:
sudo chown omsagent:omiusers /etc/opt/microsoft/omsagent/proxy.conf
sudo chmod 644 /etc/opt/microsoft/omsagent/proxy.conf
Os agentes Linux recém-adicionados mostram um status de Atualizado após uma avaliação ter sido executada. Este processo pode demorar até seis horas.
Para confirmar se um grupo de gerenciamento do Operations Manager está se comunicando com os logs do Azure Monitor, consulte Validar a integração do Operations Manager com os logs do Azure Monitor.
Consultas únicas de avaliação de VM do Azure (Windows)
Substitua o valor VMUUID pelo GUID da VM da máquina virtual que você está consultando. Você pode encontrar o VMUUID que deve ser usado executando a seguinte consulta nos logs do Azure Monitor: Update | where Computer == "<machine name>" | summarize by Computer, VMUUID
Resumo das atualizações em falta
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")
Lista de atualizações em falta
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 de avaliação de VM única do Azure (Linux)
Para algumas distros Linux, há uma incompatibilidade de endianness com o valor VMUUID que vem do Azure Resource Manager e o que é armazenado nos logs do Azure Monitor. A consulta a seguir verifica se há uma correspondência em qualquer endianness. Substitua os valores VMUUID pelo formato big-endian e little-endian do GUID para retornar corretamente os resultados. Você pode encontrar o VMUUID que deve ser usado executando a seguinte consulta nos logs do Azure Monitor: Update | where Computer == "<machine name>" | summarize by Computer, VMUUID
Resumo das atualizações em falta
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")
Lista de atualizações em falta
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 avaliação de várias VMs
Resumo dos computadores
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
Resumo das atualizações em falta
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 computadores
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
Lista de atualizações em falta
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
Próximos passos
- Para obter detalhes dos logs do Azure Monitor, consulte Logs do Azure Monitor.
- Para obter ajuda com alertas, consulte Configurar alertas.