Wykonywanie zapytań względem dzienników rozwiązania Update Management
Ważne
Usługa Automation Update Management została wycofana 31 sierpnia 2024 r. i zalecamy korzystanie z usługi Azure Update Manager. Postępuj zgodnie z wytycznymi dotyczącymi migracji z usługi Automation Update Management do usługi Azure Update Manager.
Oprócz szczegółów podanych podczas wdrażania rozwiązania Update Management można przeszukiwać dzienniki przechowywane w obszarze roboczym usługi Log Analytics. Aby przeszukać dzienniki z konta usługi Automation, wybierz pozycję Update Management i otwórz obszar roboczy usługi Log Analytics skojarzony z wdrożeniem.
Możesz również dostosować zapytania dziennika lub użyć ich z różnych klientów. Zobacz dokumentację interfejsu API wyszukiwania usługi Log Analytics.
Wykonywanie zapytań dotyczących rekordów aktualizacji
Rozwiązanie Update Management zbiera rekordy dla maszyn wirtualnych z systemami Windows i Linux oraz typów danych wyświetlanych w wynikach wyszukiwania dzienników. W poniższych sekcjach opisano te rekordy.
Rekord aktualizacji kwerendy
Tworzony jest rekord o typie Update
, który reprezentuje dostępne aktualizacje i ich stan instalacji dla maszyny. Te rekordy mają właściwości w poniższej tabeli:
Właściwości | opis |
---|---|
TenantId | Unikatowy identyfikator reprezentujący wystąpienie organizacji identyfikatora Entra firmy Microsoft. |
SourceSystem | System źródłowy rekordu. Wartość to OperationsManager . |
TimeGenerated | Data i godzina utworzenia rekordu. |
SourceComputerId | Unikatowy identyfikator reprezentujący komputer źródłowy. |
Tytuł | Tytuł aktualizacji. |
Klasyfikacja | Klasyfikacja zatwierdzenia. Wartość to Aktualizacje. |
Data publikacji (UTC) | Data, w którym aktualizacja jest gotowa do pobrania i zainstalowania z usługi Windows Update. |
Komputer | W pełni kwalifikowana nazwa domeny maszyny raportowania. |
UpdateState | Bieżący stan aktualizacji. |
Rezultat | Produkty, dla których ma zastosowanie aktualizacja. |
OSType | Typ systemu operacyjnego. Wartości to Windows lub Linux. |
ProductVersion | Wersja aktualizacji. |
Łuk produktu | Odpowiednia architektura maszyny |
CVENumbers | Typowy numer luk w zabezpieczeniach i ekspozycji |
BiuletynUrl | Adres URL biuletynu |
Identyfikator biuletynu | Numer identyfikacyjny biuletynu. |
Repozytorium pakietów | Informacje o repozytorium pakietu. |
PackageSeverity | Ważność aktualizacji. |
OSName | Typ systemu operacyjnego. Wartości to Windows lub Linux. |
OSVersion | Wersja systemu operacyjnego. |
OSFullName | Nazwa systemu operacyjnego. |
SubscriptionId | Unikatowy identyfikator subskrypcji platformy Azure. |
ResourceGroup | Nazwa grupy zasobów, do której należy zasób. |
ResourceProvider | Dostawca zasobów. |
Zasób | Nazwa zasobu. |
ResourceId | Unikatowy identyfikator zasobu skojarzonego z rekordem. |
ResourceType | Typ zasobu. |
KomputerŚrodowisko | Środowisko. Możliwe wartości to Azure lub spoza platformy Azure. |
Identyfikator VMUUID | Unikatowy identyfikator maszyny wirtualnej. |
GRUPĄ ZARZĄDZANIA | Unikatowy identyfikator grupy zarządzania lub obszaru roboczego usługi Log Analytics. |
ManagementGroupName | Nazwa grupy zarządzania programu Operations Manager lub obszaru roboczego usługi Log Analytics. |
MSRCSeverity | Ocena ważności luki w zabezpieczeniach. Wartości to: Krytyczne Ważne Umiarkowane Niski |
KBID | Identyfikator artykułu bazy wiedzy dla usługi Windows Update. |
UpdateID | Unikatowy identyfikator aktualizacji oprogramowania. |
RevisionNumber | Numer poprawki określonej poprawki aktualizacji. |
Opcjonalnie | Wartość True, jeśli rekord jest opcjonalny lub fałsz. |
RebootBehavior | Zachowanie ponownego uruchamiania po zainstalowaniu/odinstalowaniu aktualizacji. |
MSRCBulletinID | Numer identyfikacyjny biuletynu zabezpieczeń. |
Zatwierdzona | Wartość True, jeśli rekord jest zatwierdzony lub fałsz. |
Źródło zatwierdzenia | Dotyczy tylko systemu operacyjnego Windows. Źródło zatwierdzenia dla rekordu. Wartość to Microsoft Update. |
InstallTimePredictionSeconds | |
InstallTimeDeviationRangeSeconds | |
InstallTimeAvailable | |
Typ | Typ rekordu. Wartość to Update. |
Rekord stanu wdrożenia aktualizacji kwerendy
Tworzony jest rekord o typie UpdateRunProgress
, który zapewnia stan wdrożenia aktualizacji zaplanowanego wdrożenia według maszyny. Te rekordy mają właściwości w poniższej tabeli:
Właściwości | opis |
---|---|
TenantId | Unikatowy identyfikator reprezentujący wystąpienie organizacji identyfikatora Entra firmy Microsoft. |
SourceSystem | System źródłowy rekordu. Wartość to OperationsManager . |
TimeGenerated | Data i godzina utworzenia rekordu. |
GRUPĄ ZARZĄDZANIA | Unikatowy identyfikator grupy zarządzania lub obszaru roboczego usługi Log Analytics. |
ManagementGroupName | Nazwa grupy zarządzania programu Operations Manager lub obszaru roboczego usługi Log Analytics. |
SourceComputerId | Unikatowy identyfikator reprezentujący komputer źródłowy. |
KBID | Identyfikator artykułu bazy wiedzy dla usługi Windows Update. |
UpdateId | Unikatowy identyfikator aktualizacji oprogramowania. |
SucceededOnRetry | Wartość wskazująca, czy wykonanie aktualizacji nie powiodło się podczas pierwszej próby, a bieżąca operacja jest ponowną próbą. |
BłądResult | Kod błędu usługi Windows Update wygenerowany, jeśli instalacja aktualizacji nie powiedzie się. |
UpdateRunName | Nazwa harmonogramu aktualizacji. |
Stan instalacji | Możliwe stany instalacji aktualizacji na komputerze klienckim,NotStarted — zadanie nie zostało jeszcze wyzwolone.Failed — zadanie zostało uruchomione, ale nie powiodło się z wyjątkiem.InProgress - zadanie w toku.MaintenanceWindowExceeded — jeśli wykonanie pozostało, ale osiągnięto interwał okna obsługi.Succeeded — zadanie zakończyło się pomyślnie.Install Failed — nie można pomyślnie zainstalować aktualizacji.NotIncluded — odpowiednia klasyfikacja aktualizacji nie jest zgodna z wpisami klienta na liście klasyfikacji danych wejściowych.Excluded — użytkownik wprowadza identyfikator KBID na wykluczonej liście. Podczas stosowania poprawek, jeśli identyfikator KBID na wykluczonej liście jest zgodny z systemem wykrył identyfikator bazy wiedzy aktualizacji, jest oznaczony jako wykluczony. |
Komputer | W pełni kwalifikowana nazwa domeny maszyny raportowania. |
Tytuł | Tytuł aktualizacji. |
Rezultat | Produkty, dla których ma zastosowanie aktualizacja. |
OSType | Typ systemu operacyjnego. Wartości to Windows lub Linux. |
StartTime (UTC) | Czas instalowania aktualizacji. Ta właściwość nie jest obecnie używana. Zobacz TimeGenerated. |
EndTime (UTC) | Czas zakończenia procesu synchronizacji. Ta właściwość nie jest obecnie używana. Zobacz TimeGenerated. |
CorrelationId | Unikatowy identyfikator uruchomienia zadania elementu Runbook dla aktualizacji. |
SubscriptionId | Unikatowy identyfikator subskrypcji platformy Azure. |
ResourceGroup | Nazwa grupy zasobów, do której należy zasób. |
ResourceProvider | Dostawca zasobów. |
Zasób | Nazwa zasobu. |
ResourceId | Unikatowy identyfikator zasobu skojarzonego z rekordem. |
ResourceType | Typ zasobu. |
KomputerŚrodowisko | Środowisko. Wartości to Azure lub spoza platformy Azure. |
Identyfikator VMUUID | Unikatowy identyfikator maszyny wirtualnej. |
Typ | Typ aktualizacji. Wartość to UpdateRunProgress . |
_ResourceId | Unikatowy identyfikator zasobu skojarzonego z rekordem. |
Rekord podsumowania aktualizacji kwerendy
Tworzony jest rekord o typie UpdateSummary
, który udostępnia podsumowanie aktualizacji według maszyny. Te rekordy mają właściwości w poniższej tabeli:
Właściwości | opis |
---|---|
TenantId | Unikatowy identyfikator reprezentujący wystąpienie organizacji identyfikatora Entra firmy Microsoft. |
SourceSystem | System źródłowy rekordu. Wartość to OpsManager . |
TimeGenerated | Data i godzina utworzenia rekordu. |
GRUPĄ ZARZĄDZANIA | Unikatowy identyfikator grupy zarządzania lub obszaru roboczego usługi Log Analytics. |
ManagementGroupName | Nazwa grupy zarządzania programu Operations Manager lub obszaru roboczego usługi Log Analytics. |
SourceComputerId | Unikatowy identyfikator maszyny wirtualnej. |
LastUpdateApplied (UTC) | |
OldestMissingSecurityUpdateInDays | Łączna liczba dni dla najstarszej aktualizacji wykrytej jako odpowiednia, która nie została zainstalowana. |
OldestMissingSecurityUpdateBucket | Specyfikator najstarszego brakującego zasobnika zabezpieczeń. Wartości to: Ostatnie, jeśli wartość jest mniejsza niż 30 dni 30 dni temu 60 dni temu 90 dni temu 120 dni temu 150 dni temu 180 dni temu Starsze, gdy wartość jest większa niż 180 dni. |
WindowsUpdateSetting | Stan agenta usługi Windows Update. Dopuszczalne wartości:Scheduled installation Notify before installation Error returned from unhealthy WUA agent |
WindowsUpdateAgentVersion | Wersja agenta usługi Windows Update. |
WSUSServer | Błędy, jeśli agent usługi Windows Update ma problem, aby pomóc w rozwiązywaniu problemów. |
Komputer | W pełni kwalifikowana nazwa domeny maszyny raportowania. |
OsVersion | Wersja systemu operacyjnego. |
NETRuntimeVersion | Wersja programu .NET Framework zainstalowana na komputerze z systemem Windows. |
CriticalUpdatesMissing | Liczba brakujących odpowiednich aktualizacji krytycznych. |
SecurityUpdatesMissing | Liczba brakujących aktualizacji zabezpieczeń, które mają zastosowanie. |
OtherUpdatesMissing | Liczba wykrytych aktualizacji, których brakuje. |
TotalUpdatesMissing | Łączna liczba brakujących aktualizacji, które mają zastosowanie. |
Ponowne uruchamianiePending | Wartość True, jeśli ponowne uruchomienie jest oczekujące lub fałsz. |
SubscriptionId | Unikatowy identyfikator subskrypcji platformy Azure. |
ResourceGroup | Nazwa grupy zasobów zawierającej zasób. |
ResourceProvider | Dostawca zasobów. |
Zasób | Nazwa zasobu rekordu. |
ResourceId | Unikatowy identyfikator zasobu skojarzonego z rekordem. |
ResourceType | Typ zasobu. |
KomputerŚrodowisko | Środowisko. Wartości to Azure lub spoza platformy Azure. |
Identyfikator VMUUID | Unikatowy identyfikator maszyny wirtualnej. |
Typ | Typ rekordu. Wartość to UpdateSummary . |
_ResourceId | Unikatowy identyfikator zasobu skojarzonego z rekordem. |
Przykładowe zapytania
W poniższych sekcjach przedstawiono przykładowe zapytania dziennika dotyczące rekordów aktualizacji zebranych w usłudze Update Management.
Upewnij się, że maszyny spoza platformy Azure są włączone dla rozwiązania Update Management
Aby potwierdzić, że bezpośrednio połączone maszyny komunikują się z dziennikami usługi Azure Monitor, uruchom jedno z następujących wyszukiwań dzienników.
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 komputerze z systemem Windows możesz przejrzeć następujące informacje, aby zweryfikować łączność agenta z dziennikami usługi Azure Monitor:
W Panel sterowania otwórz program Microsoft Monitoring Agent. Na karcie Azure Log Analytics agent wyświetli następujący komunikat: Program Microsoft Monitoring Agent pomyślnie nawiązał połączenie z usługą Log Analytics.
Otwórz dziennik zdarzeń systemu Windows. Przejdź do obszaru Dzienniki aplikacji i usług\Operations Manager i wyszukaj identyfikator zdarzenia 3000 i identyfikator zdarzenia 5002 z łącznika usługi źródłowej. Te zdarzenia informują o tym, że komputer został zarejestrowany w obszarze roboczym usługi Log Analytics i odbiera konfigurację.
Jeśli agent nie może komunikować się z dziennikami usługi Azure Monitor, a agent jest skonfigurowany do komunikowania się z Internetem za pośrednictwem zapory lub serwera proxy, upewnij się, że zapora lub serwer proxy są prawidłowo skonfigurowane. Aby dowiedzieć się, jak sprawdzić, czy zapora lub serwer proxy jest prawidłowo skonfigurowany, zobacz Konfiguracja sieci dla agenta systemu Windows lub Konfiguracja sieci dla agenta systemu Linux.
Uwaga
Jeśli systemy z systemem Linux są skonfigurowane do komunikowania się z serwerem proxy lub bramą usługi Log Analytics i włączasz rozwiązanie Update Management, zaktualizuj proxy.conf
uprawnienia, aby przyznać grupie omiuser uprawnienia do odczytu w pliku przy użyciu następujących poleceń:
sudo chown omsagent:omiusers /etc/opt/microsoft/omsagent/proxy.conf
sudo chmod 644 /etc/opt/microsoft/omsagent/proxy.conf
Nowo dodani agenci systemu Linux pokazują stan Zaktualizowano po przeprowadzeniu oceny. Ten proces może potrwać do 6 godzin.
Aby potwierdzić, że grupa zarządzania programu Operations Manager komunikuje się z dziennikami usługi Azure Monitor, zobacz Weryfikowanie integracji programu Operations Manager z dziennikami usługi Azure Monitor.
Zapytania oceny pojedynczej maszyny wirtualnej platformy Azure (Windows)
Zastąp wartość VMUUID identyfikatorem GUID maszyny wirtualnej maszyny wirtualnej, której wysyłasz zapytanie. Identyfikator VMUUID, który powinien być używany, uruchamiając następujące zapytanie w dziennikach usługi Azure Monitor: Update | where Computer == "<machine name>" | summarize by Computer, VMUUID
Brak podsumowania aktualizacji
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")
Brak listy aktualizacji
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
Zapytania dotyczące oceny pojedynczej maszyny wirtualnej platformy Azure (Linux)
W przypadku niektórych dystrybucji systemu Linux występuje niezgodność endianness z wartością VMUUID pochodzącą z usługi Azure Resource Manager i przechowywanymi w dziennikach usługi Azure Monitor. Poniższe zapytanie sprawdza dopasowanie pod kątem obu elementów endianness. Zastąp wartości VMUUID formatem big-endian i little-endian identyfikatora GUID, aby prawidłowo zwrócić wyniki. Identyfikator VMUUID, który powinien być używany, uruchamiając następujące zapytanie w dziennikach usługi Azure Monitor: Update | where Computer == "<machine name>" | summarize by Computer, VMUUID
Brak podsumowania aktualizacji
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")
Brak listy aktualizacji
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
Zapytania dotyczące oceny wielu maszyn wirtualnych
Podsumowanie komputerów
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
Brak podsumowania aktualizacji
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 komputerów
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
Brak listy aktualizacji
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
Następne kroki
- Aby uzyskać szczegółowe informacje na temat dzienników usługi Azure Monitor, zobacz Dzienniki usługi Azure Monitor.
- Aby uzyskać pomoc dotyczącą alertów, zobacz Konfigurowanie alertów.