Dotazování na protokoly Update Managementu

Kromě podrobností, které jsou k dispozici během nasazování řešení Update Management, můžete prohledávat protokoly uložené v pracovním prostoru služby Log Analytics. Pokud chcete prohledat protokoly z účtu Automation, vyberte Update Management a otevřete pracovní prostor služby Log Analytics přidružený k vašemu nasazení.

Dotazy na protokoly můžete také přizpůsobit nebo je používat z různých klientů. Viz dokumentace k rozhraní API služby Log Analytics pro vyhledávání.

Aktualizace záznamů dotazu

Update Management shromažďuje záznamy pro virtuální počítače s Windows a Linuxem a datové typy, které se zobrazují ve výsledcích hledání v protokolu. Tyto záznamy jsou popsané v následujících částech.

Záznam aktualizace dotazu

Vytvoří se záznam s typem Update , který představuje dostupné aktualizace a stav instalace počítače. Tyto záznamy mají vlastnosti v následující tabulce:

Vlastnost Popis
TenantId Jedinečný identifikátor představující instanci Microsoft Entra ID vaší organizace
SourceSystem Zdrojový systém záznamu. Hodnota je OperationsManager.
TimeGenerated Datum a čas vytvoření záznamu
SourceComputerId Jedinečný identifikátor představující zdrojový počítač.
Nadpis Název aktualizace.
Klasifikace Klasifikace schválení. Hodnota je Aktualizace.
PublishedDate (UTC) Datum, kdy je aktualizace připravená ke stažení a instalaci z služba Windows Update.
Počítač Plně kvalifikovaný název domény počítače pro vytváření sestav.
UpdateState Aktuální stav aktualizace.
Produkt Produkty, pro které je aktualizace použitelná.
OSType Typ operačního systému. Hodnoty jsou Windows nebo Linux.
Productversion Verze aktualizace.
Arch produktu Použitelná architektura počítačů
CVENumbers Běžná ohrožení zabezpečení a číslo ohrožení zabezpečení
BulletinUrl Adresa URL bulletinu
ID bulletinu Číslo ID bulletinu.
PackageRepository Informace o úložišti balíčku
PackageSeverity Závažnost aktualizace
OSName Typ operačního systému. Hodnoty jsou Windows nebo Linux.
OSVersion Verze operačního systému.
OSFullName Název operačního systému.
SubscriptionId Jedinečný identifikátor předplatného Azure.
ResourceGroup Název skupiny prostředků, do které prostředek patří.
ResourceProvider Poskytovatel prostředků.
Prostředek Název prostředku.
ResourceId Jedinečný identifikátor prostředku přidruženého k záznamu
ResourceType Typ zdroje.
ComputerEnvironment Prostředí. Možné hodnoty jsou Azure nebo Jiné než Azure.
VMUUID Jedinečný identifikátor virtuálního počítače.
MG Jedinečný identifikátor skupiny pro správu nebo pracovního prostoru služby Log Analytics.
ManagementGroupName Název skupiny pro správu Operations Manageru nebo pracovního prostoru služby Log Analytics
MSRCSeverity Hodnocení závažnosti ohrožení zabezpečení Hodnoty jsou:
Kritické
Důležité
Střední
nízkou
KBID ID článku znalostní báze pro aktualizaci Windows
UpdateID Jedinečný identifikátor aktualizace softwaru.
RevisionNumber Číslo revize konkrétní revize aktualizace.
Volitelné Hodnota True, pokud je záznam nepovinný, nebo false jinak.
RebootBehavior Chování při restartování po instalaci nebo odinstalaci aktualizace.
MSRCBulletinID Číslo ID bulletinu zabezpečení.
Schválené Hodnota True, pokud je záznam schválen, nebo false jinak.
ApprovalSource Platí jenom pro operační systém Windows. Zdroj schválení záznamu Hodnota je Microsoft Update.
InstallTimePredictionSeconds
InstallTimeDeviationRangeSeconds
InstallTimeAvailable
Type Typ záznamu. Hodnota je Update.

Záznam stavu nasazení aktualizace dotazu

Vytvoří se záznam s typem UpdateRunProgress , který poskytuje stav nasazení aktualizací naplánovaného nasazení podle počítače. Tyto záznamy mají vlastnosti v následující tabulce:

Vlastnost Popis
TenantId Jedinečný identifikátor představující instanci Microsoft Entra ID vaší organizace
SourceSystem Zdrojový systém záznamu. Hodnota je OperationsManager.
TimeGenerated Datum a čas vytvoření záznamu
MG Jedinečný identifikátor skupiny pro správu nebo pracovního prostoru služby Log Analytics.
ManagementGroupName Název skupiny pro správu Operations Manageru nebo pracovního prostoru služby Log Analytics
SourceComputerId Jedinečný identifikátor představující zdrojový počítač.
KBID ID článku znalostní báze pro aktualizaci Windows
UpdateId Jedinečný identifikátor aktualizace softwaru.
SucceededOnRetry Hodnota označující, jestli se spuštění aktualizace při prvním pokusu nezdařilo a aktuální operace je pokus o opakování.
ErrorResult služba Windows Update kód chyby vygenerovaný, pokud se aktualizace nepodaří nainstalovat.
UpdateRunName Název plánu aktualizace
Stav instalace Možné stavy instalace aktualizace v klientském počítači,
NotStarted – úloha se ještě neaktivovala.
Failed – úloha byla spuštěna, ale selhala s výjimkou.
InProgress - probíhá úloha.
MaintenanceWindowExceeded - pokud se zbylo spuštění, ale dosáhl intervalu časového období údržby.
Succeeded - úloha byla úspěšná.
Install Failed – aktualizace se nepovedla úspěšně nainstalovat.
NotIncluded – odpovídající klasifikace aktualizace se neshoduje s položkami zákazníka v seznamu vstupní klasifikace.
Excluded – uživatel zadá do vyloučeného seznamu KBID. Při opravách se kód KBID v vyloučených názvech shoduje s ID aktualizace KB zjištěné systémem, je označen jako vyloučený.
Počítač Plně kvalifikovaný název domény počítače pro vytváření sestav.
Nadpis Název aktualizace.
Produkt Produkty, pro které je aktualizace použitelná.
OSType Typ operačního systému. Hodnoty jsou Windows nebo Linux.
StartTime (UTC) Čas, kdy je naplánovaná instalace aktualizace. Tato vlastnost se aktuálně nepoužívá. Viz TimeGenerated.
EndTime (UTC) Čas ukončení procesu synchronizace. Tato vlastnost se aktuálně nepoužívá. Viz TimeGenerated.
CorrelationId Jedinečný identifikátor spuštění úlohy runbooku pro aktualizaci.
SubscriptionId Jedinečný identifikátor předplatného Azure.
ResourceGroup Název skupiny prostředků, do které prostředek patří.
ResourceProvider Poskytovatel prostředků.
Prostředek Název prostředku.
ResourceId Jedinečný identifikátor prostředku přidruženého k záznamu
ResourceType Typ prostředku.
ComputerEnvironment Prostředí. Hodnoty jsou Azure nebo jiné než Azure.
VMUUID Jedinečný identifikátor virtuálního počítače.
Type Typ aktualizace: Hodnota je UpdateRunProgress.
_ResourceId Jedinečný identifikátor prostředku přidruženého k záznamu

Záznam souhrnu aktualizace dotazu

Vytvoří se záznam s typem UpdateSummary , který poskytuje souhrn aktualizací podle počítače. Tyto záznamy mají vlastnosti v následující tabulce:

Vlastnost Popis
TenantId Jedinečný identifikátor představující instanci Microsoft Entra ID vaší organizace
SourceSystem Zdrojový systém záznamu. Hodnota je OpsManager.
TimeGenerated Datum a čas vytvoření záznamu
MG Jedinečný identifikátor skupiny pro správu nebo pracovního prostoru služby Log Analytics.
ManagementGroupName Název skupiny pro správu Operations Manageru nebo pracovního prostoru služby Log Analytics
SourceComputerId Jedinečný identifikátor virtuálního počítače.
LastUpdateApplied (UTC)
OldestMissingSecurityUpdateInDays Celkový počet dnů nejstarší aktualizace se zjistil jako použitelný, který nebyl nainstalován.
OldestMissingSecurityUpdateBucket Specifikátor nejstaršího chybějícího kontejneru zabezpečení Hodnoty jsou:
Poslední hodnota, pokud je hodnota menší než 30 dnů
před 30 dny
před 60 dny
před 90 dny
před 120 dny
před 150 dny
před 180 dny
Starší, pokud je hodnota větší než 180 dnů.
WindowsUpdateSetting Stav agenta služba Windows Update Možné hodnoty jsou:
Scheduled installation
Notify before installation
Error returned from unhealthy WUA agent
WindowsUpdateAgentVersion Verze agenta služba Windows Update
WSUSServer Chyby, pokud má agent služba Windows Update problém, který vám pomůže s řešením potíží.
Počítač Plně kvalifikovaný název domény počítače pro vytváření sestav.
OsVersion Verze operačního systému.
NETRuntimeVersion Verze rozhraní .NET Framework nainstalovaná v počítači s Windows.
CriticalUpdatesMissing Počet platných důležitých aktualizací, které chybí
SecurityUpdatesMissing Počet chybějících aktualizací zabezpečení, které jsou použitelné.
OtherUpdatesMissing Počet nalezených aktualizací chybí.
TotalUpdatesMissing Celkový počet chybějících aktualizací, které jsou použitelné.
RestartPending Hodnota True, pokud restartování čeká na vyřízení, nebo false jinak.
SubscriptionId Jedinečný identifikátor předplatného Azure.
ResourceGroup Název skupiny prostředků obsahující prostředek
ResourceProvider Poskytovatel prostředků.
Prostředek Název prostředku záznamu
ResourceId Jedinečný identifikátor prostředku přidruženého k záznamu
ResourceType Typ prostředku.
ComputerEnvironment Prostředí. Hodnoty jsou Azure nebo jiné než Azure.
VMUUID Jedinečný identifikátor virtuálního počítače.
Type Typ záznamu. Hodnota je UpdateSummary.
_ResourceId Jedinečný identifikátor prostředku přidruženého k záznamu

Ukázkové dotazy

Následující části obsahují ukázkové dotazy na protokoly pro záznamy aktualizací, které se shromažďují pro Řešení Update Management.

Ověřte, že jsou pro Řešení Update Management povolené počítače mimo Azure.

Pokud chcete ověřit, že přímo připojené počítače komunikují s protokoly služby Azure Monitor, spusťte jedno z následujících prohledávání protokolů.

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

Na počítači s Windows můžete zkontrolovat následující informace a ověřit připojení agenta k protokolům služby Azure Monitor:

  1. V Ovládací panely otevřete microsoft Monitoring Agent. Na kartě Azure Log Analytics zobrazí agent následující zprávu: Agent Microsoft Monitoring Agent se úspěšně připojil ke službě Log Analytics.

  2. Otevřete protokol událostí systému Windows. Přejděte do protokolů aplikací a služeb\Operations Manager a vyhledejte ID události 3000 a ID události 5002 ze zdrojové služby Připojení or. Tyto události znamenají, že se počítač zaregistroval do pracovního prostoru služby Log Analytics a přijímá konfiguraci.

Pokud agent nemůže komunikovat s protokoly služby Azure Monitor a je nakonfigurovaný tak, aby komunikoval s internetem přes bránu firewall nebo proxy server, ověřte, že je brána firewall nebo proxy server správně nakonfigurovaná. Informace o tom, jak ověřit, jestli je brána firewall nebo proxy server správně nakonfigurovaná, najdete v tématu Konfigurace sítě pro agenta Windows nebo konfigurace sítě pro agenta s Linuxem.

Poznámka:

Pokud jsou vaše systémy Linux nakonfigurované tak, aby komunikovaly s proxy serverem nebo bránou Log Analytics a povolujete Update Management, aktualizujte proxy.conf oprávnění k udělení oprávnění ke čtení skupiny omiuser v souboru pomocí následujících příkazů:

sudo chown omsagent:omiusers /etc/opt/microsoft/omsagent/proxy.conf sudo chmod 644 /etc/opt/microsoft/omsagent/proxy.conf

Nově přidaní agenti Linuxu zobrazují stav Aktualizace po provedení posouzení. Tento proces může trvat až 6 hodin.

Pokud chcete ověřit, že skupina pro správu Operations Manageru komunikuje s protokoly služby Azure Monitor, přečtěte si téma Ověření integrace Operations Manageru s protokoly služby Azure Monitor.

Dotazy na posouzení jednotlivých virtuálních počítačů Azure (Windows)

Hodnotu VMUUID nahraďte identifikátorem GUID virtuálního počítače virtuálního počítače, který dotazujete. Id VMUUID, které by se mělo použít, najdete spuštěním následujícího dotazu v protokolech služby Azure Monitor: Update | where Computer == "<machine name>" | summarize by Computer, VMUUID

Souhrn chybějících aktualizací

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

Chybějící seznam aktualizací

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

Dotazy na posouzení jednotlivých virtuálních počítačů Azure (Linux)

U některých distribucí Linuxu dochází k neshodě endianness s hodnotou VMUUID, která pochází z Azure Resource Manageru a co je uložené v protokolech služby Azure Monitor. Následující dotaz zkontroluje shodu u obou endianness. Nahraďte hodnoty VMUUID velkým endianem a malým endianem identifikátoru GUID, aby se výsledky správně vrátily. Id VMUUID, které by se mělo použít, najdete spuštěním následujícího dotazu v protokolech služby Azure Monitor: Update | where Computer == "<machine name>" | summarize by Computer, VMUUID

Souhrn chybějících aktualizací

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

Chybějící seznam aktualizací

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

Dotazy na posouzení více virtuálních počítačů

Souhrn počítačů

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

Souhrn chybějících aktualizací

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

Seznam počítačů

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

Chybějící seznam aktualizací

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

Další kroky

  • Podrobnosti o protokolech služby Azure Monitor najdete v protokolech služby Azure Monitor.
  • Nápovědu k upozorněním najdete v tématu Konfigurace výstrah.