Eseguire query sui log di Gestione aggiornamenti
Importante
Gestione aggiornamenti di Automazione è stato ritirato il 31 agosto 2024 ed è consigliabile usare Gestore aggiornamenti di Azure. Seguire le linee guida per la migrazione da Gestione aggiornamenti di Automazione a Gestore aggiornamenti di Azure.
Oltre ai dettagli indicati durante la distribuzione di Gestione aggiornamenti, è possibile eseguire ricerche nei log archiviati nell'area di lavoro Log Analytics. Per cercare i log dall'account di automazione, selezionare Gestione aggiornamenti e aprire l'area di lavoro Log Analytics associata alla distribuzione.
È anche possibile personalizzare le query sui log o usarle da client diversi. Vedere Documentazione dell'API di ricerca di Log Analytics.
Eseguire una query sui record di aggiornamento
Gestione aggiornamenti raccoglie i record per le macchine virtuali Windows e Linux e i tipi di dati visualizzati nei risultati della ricerca log. Nelle sezioni seguenti vengono descritti i record.
Eseguire una query su un record di aggiornamento
Viene creato un record con un tipo di Update
che rappresenta gli aggiornamenti disponibili e il relativo stato di installazione per un computer. Questi record includono le proprietà elencate nella tabella seguente:
Proprietà | Descrizione |
---|---|
TenantId | Identificatore univoco che rappresenta l'istanza di Microsoft Entra ID dell'organizzazione. |
SourceSystem | Sistema di origine per il record. Il valore è OperationsManager . |
TimeGenerated | Data e ora di creazione del record. |
SourceComputerId | Identificatore univoco che rappresenta il computer di origine. |
Title | Il titolo dell'aggiornamento. |
Valutazione | Classificazione dell'approvazione. Il valore è Updates. |
PublishedDate (UTC) | Data in cui l'aggiornamento è pronto per il download e l'installazione da Windows Update. |
Computer | Nome di dominio completo del computer per la creazione del report. |
UpdateState | Stato attuale del problema. |
Prodotto | Prodotti per i quali l'aggiornamento è applicabile. |
OSType | Tipo di sistema operativo. I valori sono Windows o Linux. |
ProductVersion | Versione dell'aggiornamento. |
Architettura del prodotto | Architettura del computer applicabile |
CVENumbers | Numero di Vulnerabilità ed esposizione comuni |
BulletinUrl | URL del bollettino |
BulletinID | Numero ID del bollettino. |
PackageRepository | Informazioni sul repository del pacchetto. |
PackageSeverity | Gravità dell'aggiornamento. |
OSName | Tipo di sistema operativo. I valori sono Windows o Linux. |
OSVersion | Versione del sistema operativo. |
OSFullName | Nome del sistema operativo. |
SubscriptionId | Identificatore univoco per la sottoscrizione di Azure. |
ResourceGroup | Nome del gruppo di risorse a cui appartiene la risorsa. |
ResourceProvider | Provider di risorse. |
Conto risorse | Nome della risorsa. |
ResourceId | Identificatore univoco per la risorsa associata al record. |
ResourceType | Tipo di risorsa. |
ComputerEnvironment | Ambiente. I valori possibili sono Azure o non Azure. |
VMUUID | Identificatore univoco per la macchina virtuale. |
MG | Identificatore univoco per il gruppo di gestione o l'area di lavoro Log Analytics. |
ManagementGroupName | Nome del gruppo di gestione Operations Manager o dell'area di lavoro Log Analytics. |
MSRCSeverity | Classificazione di gravità per la vulnerabilità. I valori sono: Critico Importante Moderato Basso |
KBID | ID dell'articolo della Knowledge Base per l'aggiornamento Windows. |
UpdateID | Identificatore univoco dell'aggiornamento software. |
RevisionNumber | Numero di una revisione specifica di un aggiornamento. |
Facoltativo | True se il record è facoltativo; in caso contrario False. |
RebootBehavior | Comportamento del riavvio dopo l'installazione o la disinstallazione di un aggiornamento. |
MSRCBulletinID | Numero ID bollettino di sicurezza. |
Approvato | True se il record è approvato; in caso contrario False. |
ApprovalSource | Si applica solo al sistema operativo Windows. Origine dell'approvazione per il record. Il valore è Microsoft Update. |
InstallTimePredictionSeconds | |
InstallTimeDeviationRangeSeconds | |
InstallTimeAvailable | |
Type | Tipo di record. Il valore è Update. |
Eseguire una query sui record dello stato di distribuzione dell'aggiornamento
Viene creato un record con un tipo di UpdateRunProgress
che fornisce lo stato di distribuzione dell'aggiornamento di una distribuzione pianificata per computer. Questi record includono le proprietà elencate nella tabella seguente:
Proprietà | Descrizione |
---|---|
TenantId | Identificatore univoco che rappresenta l'istanza di Microsoft Entra ID dell'organizzazione. |
SourceSystem | Sistema di origine per il record. Il valore è OperationsManager . |
TimeGenerated | Data e ora di creazione del record. |
MG | Identificatore univoco per il gruppo di gestione o l'area di lavoro Log Analytics. |
ManagementGroupName | Nome del gruppo di gestione Operations Manager o dell'area di lavoro Log Analytics. |
SourceComputerId | Identificatore univoco che rappresenta il computer di origine. |
KBID | ID dell'articolo della Knowledge Base per l'aggiornamento Windows. |
UpdateId | Identificatore univoco dell'aggiornamento software. |
SucceededOnRetry | Valore che indica se l'esecuzione dell'aggiornamento non è riuscita al primo tentativo e se l'operazione corrente è un nuovo tentativo. |
ErrorResult | Codice di errore di Windows Update generato se l'installazione di un aggiornamento non riesce. |
UpdateRunName | Nome della pianificazione dell'aggiornamento. |
InstallationStatus | Possibili stati di installazione di un aggiornamento nel computer client.NotStarted - il processo non è stato ancora attivato.Failed - il processo è stato avviato, ma non è riuscito con un'eccezione.InProgress - processo in corso.MaintenanceWindowExceeded - se l'esecuzione è in corso, ma è stato raggiunto l'intervallo della finestra di manutenzione.Succeeded - processo completato.Install Failed - installazione dell'aggiornamento non riuscita.NotIncluded : la classificazione dell'aggiornamento corrispondente non corrisponde alle voci del cliente nell'elenco di classificazione di input.Excluded : l'utente immette un KBID nell'elenco di elementi esclusi. Durante l'applicazione di patch, se KBID nell'elenco di elementi esclusi corrisponde all'ID KB di aggiornamento rilevato dal sistema, viene contrassegnato come escluso. |
Computer | Nome di dominio completo del computer per la creazione del report. |
Title | Il titolo dell'aggiornamento. |
Prodotto | Prodotti per i quali l'aggiornamento è applicabile. |
OSType | Tipo di sistema operativo. I valori sono Windows o Linux. |
StartTime (UTC) | Ora pianificata per l'installazione dell'aggiornamento. Questa proprietà non è attualmente usata. Vedere TimeGenerated. |
EndTime (UTC) | Data e ora di fine del processo di sincronizzazione. Questa proprietà non è attualmente usata. Vedere TimeGenerated. |
CorrelationId | Identificatore univoco dell'esecuzione del processo runbook per l'aggiornamento. |
SubscriptionId | Identificatore univoco per la sottoscrizione di Azure. |
ResourceGroup | Nome del gruppo di risorse a cui appartiene la risorsa. |
ResourceProvider | Provider di risorse. |
Conto risorse | Nome della risorsa. |
ResourceId | Identificatore univoco per la risorsa associata al record. |
ResourceType | Tipo di risorsa. |
ComputerEnvironment | Ambiente. I valori sono Azure o non Azure. |
VMUUID | Identificatore univoco per la macchina virtuale. |
Type | Tipo di aggiornamento. Il valore è UpdateRunProgress . |
_ResourceId | Identificatore univoco per la risorsa associata al record. |
Eseguire una query sui record di riepilogo aggiornamento
Viene creato un record con un tipo di UpdateSummary
che fornisce il riepilogo degli aggiornamenti per computer. Questi record includono le proprietà elencate nella tabella seguente:
Proprietà | Descrizione |
---|---|
TenantId | Identificatore univoco che rappresenta l'istanza di Microsoft Entra ID dell'organizzazione. |
SourceSystem | Sistema di origine per il record. Il valore è OpsManager . |
TimeGenerated | Data e ora di creazione del record. |
MG | Identificatore univoco per il gruppo di gestione o l'area di lavoro Log Analytics. |
ManagementGroupName | Nome del gruppo di gestione Operations Manager o dell'area di lavoro Log Analytics. |
SourceComputerId | Identificatore univoco per la macchina virtuale. |
LastUpdateApplied (UTC) | |
OldestMissingSecurityUpdateInDays | Numero totale di giorni per l'aggiornamento meno recente rilevato come applicabile che non è stato installato. |
OldestMissingSecurityUpdateBucket | Identificatore del bucket di sicurezza mancante meno recente. I valori sono: Recente se il valore è inferiore a 30 giorni 30 giorni fa 60 giorni fa 90 giorni fa 120 giorni fa 150 giorni fa 180 giorni fa Meno recente quando il valore è maggiore di 180 giorni. |
WindowsUpdateSetting | Stato dell'agente di Windows Update. I valori possibili sono:Scheduled installation Notify before installation Error returned from unhealthy WUA agent |
WindowsUpdateAgentVersion | Versione dell'agente di Windows Update. |
WSUSServer | Errori se si verifica un problema nell'agente di Windows Update, per facilitare la risoluzione dei problemi. |
Computer | Nome di dominio completo del computer per la creazione del report. |
OsVersion | Versione del sistema operativo. |
NETRuntimeVersion | Versione di .NET Framework installata nel computer Windows. |
CriticalUpdatesMissing | Numero di aggiornamenti critici applicabili mancanti. |
SecurityUpdatesMissing | Numero di aggiornamenti della sicurezza mancanti applicabili. |
OtherUpdatesMissing | Conteggio degli aggiornamenti rilevati mancanti. |
TotalUpdatesMissing | Numero totale di aggiornamenti mancanti applicabili. |
RestartPending | True se un riavvio è in sospeso; in caso contrario False. |
SubscriptionId | Identificatore univoco per la sottoscrizione di Azure. |
ResourceGroup | Nome del gruppo di risorse che contiene la risorsa. |
ResourceProvider | Provider di risorse. |
Conto risorse | Nome della risorsa per il record. |
ResourceId | Identificatore univoco per la risorsa associata al record. |
ResourceType | Tipo di risorsa. |
ComputerEnvironment | Ambiente. I valori sono Azure o non Azure. |
VMUUID | Identificatore univoco per la macchina virtuale. |
Type | Tipo di record. Il valore è UpdateSummary . |
_ResourceId | Identificatore univoco per la risorsa associata al record. |
Query di esempio
Le sezioni seguenti contengono esempi di query di ricerca sui log per i record di aggiornamento raccolti per Gestione aggiornamenti.
Verificare che i computer non Azure siano abilitati per Gestione aggiornamenti
Per verificare che i computer connessi direttamente comunichino con i log di Monitoraggio di Azure, eseguire una di queste ricerche 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
In un computer Windows la connettività degli agenti con i log di Monitoraggio di Azure può essere verificata esaminando le informazioni seguenti:
Aprire Microsoft Monitoring Agent nel Pannello di controllo. Nella scheda Analisi dei log di Azure l'agente visualizza un messaggio per indicare che Microsoft Monitoring Agent ha eseguito la connessione a Log Analytics.
Aprire il registro eventi di Windows. Passare a Registri applicazioni e servizi\Operations Manager e cercare gli ID evento 3000 e 5002 del connettore del servizio di origine. Questi eventi indicano che il computer ha eseguito la registrazione all'area di lavoro di Log Analytics e sta ricevendo la configurazione.
Se l'agente non è in grado di comunicare con i log di Monitoraggio di Azure ed è configurato in modo da comunicare con Internet attraverso un firewall o un server proxy, verificare che il firewall o il server proxy sia configurato correttamente. Per sapere come verificare se il firewall o il server proxy è configurato correttamente, vedere Connettere computer Windows al servizio Log Analytics in Azure oppure Raccogliere dati dal computer Linux ospitato nell'ambiente in uso.
Nota
Se i sistemi Linux sono configurati per la comunicazione con un proxy o il gateway di Log Analytics e si sta abilitando Gestione aggiornamenti, aggiornare le autorizzazioni proxy.conf
per concedere al gruppo omiuser le necessarie autorizzazioni di lettura per il file usando i comandi seguenti:
sudo chown omsagent:omiusers /etc/opt/microsoft/omsagent/proxy.conf
sudo chmod 644 /etc/opt/microsoft/omsagent/proxy.conf
Gli agenti Linux appena aggiunti visualizzano lo stato Aggiornato dopo l'esecuzione di una valutazione. Il processo può richiedere fino a 6 ore.
Per verificare che un gruppo di gestione di Operations Manager comunichi con i log di Monitoraggio di Azure, vedere Convalidare l'integrazione di Operations Manager con i log di Monitoraggio di Azure.
Singole query di valutazione delle macchine virtuali di Azure (Windows)
Sostituire il valore VMUUID con il GUID VM della macchina virtuale per cui si esegue la query. Per trovare il VMUUID da usare, eseguire la query seguente sui log di Monitoraggio di Azure: Update | where Computer == "<machine name>" | summarize by Computer, VMUUID
Riepilogo degli aggiornamenti mancanti
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")
Elenco degli aggiornamenti mancanti
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
Singole query di valutazione delle macchine virtuali di Azure (Linux)
Per alcune distribuzioni Linux esiste una mancata corrispondenza tra l'ordine dei byte con il valore VMUUID di Azure Resource Manager e quello archiviato nei log di Monitoraggio di Azure. La query seguente verifica la presenza di una corrispondenza in uno degli ordini di byte. Sostituire i valori VMUUID con il formato big-endian e little-endian del GUID in modo che i risultati vengano restituiti correttamente. Per trovare il VMUUID da usare, eseguire la query seguente sui log di Monitoraggio di Azure: Update | where Computer == "<machine name>" | summarize by Computer, VMUUID
Riepilogo degli aggiornamenti mancanti
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")
Elenco degli aggiornamenti mancanti
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
Query di valutazione per più macchine virtuali
Riepilogo dei computer
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
Riepilogo degli aggiornamenti mancanti
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")
Elenco dei computer
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
Elenco degli aggiornamenti mancanti
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
Passaggi successivi
- Per informazioni dettagliate sui log di Monitoraggio di Azure, vedere log di Monitoraggio di Azure.
- Per informazioni sugli avvisi, vedere Configurare gli avvisi.