Delen via


Waarschuwingsquery's voor zoeken in logboeken optimaliseren

In dit artikel wordt beschreven hoe u waarschuwingen voor zoeken in logboeken schrijft en converteert om optimale prestaties te bereiken. Geoptimaliseerde query's verminderen de latentie en belasting van waarschuwingen, die regelmatig worden uitgevoerd.

Begin met het schrijven van een waarschuwingsquery voor zoeken in logboeken

Waarschuwingsquery's beginnen bij het uitvoeren van query's op de logboekgegevens in Log Analytics die het probleem aangeeft. Zie Query's gebruiken in Azure Monitor Log Analytics voor meer informatie over wat u kunt detecteren. U kunt ook aan de slag met het schrijven van uw eigen query.

Zorg ervoor dat uw query het probleem identificeert en niet de waarschuwing zelf

De waarschuwingsstroom was gebouwd om de resultaten die op het probleem wijzen om te zetten naar een waarschuwing. Bijvoorbeeld in het geval van een query zoals:

SecurityEvent
| where EventID == 4624

Als de bedoeling van de gebruiker is om een waarschuwing te geven wanneer dit gebeurtenistype plaatsvindt, wordt de waarschuwingslogica count toegevoegd aan de query. De query die wordt uitgevoerd, is:

SecurityEvent
| where EventID == 4624
| count

U hoeft geen waarschuwingslogica toe te voegen aan de query en dit kan zelfs problemen veroorzaken. Als u count in uw query opneemt in het voorgaande voorbeeld, zal dit altijd resulteren in de waarde 1, omdat de waarschuwingsservice count doet van count.

Limiet vermijden en operators nemen

Het gebruik limit en take in query's kan de latentie en belasting van waarschuwingen verhogen, omdat de resultaten na verloop van tijd niet consistent zijn. Gebruik ze alleen als dat nodig is.

Beperkingen voor logboekquery's

Logboekquery's in Azure Monitor beginnen met een tabel, search of union-operator.

Query's voor waarschuwingsregels voor zoeken in logboeken moeten altijd beginnen met een tabel om een duidelijk bereik te definiëren, waardoor de queryprestaties en de relevantie van de resultaten worden verbeterd. Query's in waarschuwingsregels worden regelmatig uitgevoerd. Het gebruik search en union kan leiden tot overmatige overhead die latentie toevoegt aan de waarschuwing, omdat het scannen in meerdere tabellen vereist. Deze operators verminderen ook de mogelijkheden van de waarschuwingsservice om de query te optimaliseren.

We bieden geen ondersteuning voor het maken of wijzigen van waarschuwingsregels voor zoeken in logboeken die gebruikmaken van search of union-operatoren, met uitzondering van query's voor meerdere resources.

De volgende waarschuwingsquery is bijvoorbeeld gericht op de tabel SecurityEvent en zoekt naar een specifieke gebeurtenis-id. Dit is de enige tabel die door de query moet worden verwerkt.

SecurityEvent
| where EventID == 4624

Waarschuwingsregels voor zoeken in logboeken met behulp van worden niet beïnvloed door deze wijziging, omdat query's voor meerdere resources een type gebruiken, waardoor het querybereik wordt beperkt tot specifieke resources. Het volgende voorbeeld is een geldige waarschuwingsquery voor zoeken in logboeken:

union
app('00000000-0000-0000-0000-000000000001').requests,
app('00000000-0000-0000-0000-000000000002').requests,
workspace('00000000-0000-0000-0000-000000000003').Perf 

Notitie

Query's voor meerdere resources worden ondersteund in de nieuwe scheduledQueryRules-API. Als u nog steeds de verouderde Log Analytics Alert-API gebruikt voor het maken van logboekzoekwaarschuwingen, raadpleeg dan Upgrade van verouderde regelsbeheer naar de huidige Azure Monitor Scheduled Query Rules API om te leren hoe u kunt overschakelen.

Voorbeelden

De volgende voorbeelden bevatten logboekquery's die search en union gebruiken. Ze bieden stappen die u kunt gebruiken om deze query's te wijzigen voor gebruik in waarschuwingsregels.

Voorbeeld 1

U wilt een waarschuwingsregel voor zoeken in logboeken maken met behulp van de volgende query waarmee prestatiegegevens worden opgehaald met behulp van search:

search *
| where Type == 'Perf' and CounterName == '% Free Space'
| where CounterValue < 30
  1. Als u deze query wilt wijzigen, gebruikt u eerst de volgende query om de tabel te identificeren waartoe de eigenschappen behoren:

    search *
    | where CounterName == '% Free Space'
    | summarize by $table
    

    Het resultaat van deze query zou laten zien dat de eigenschap CounterName afkomstig is uit de tabel Perf .

  2. Gebruik dit resultaat om de volgende query te maken die u voor de waarschuwingsregel zou gebruiken:

    Perf
    | where CounterName == '% Free Space'
    | where CounterValue < 30
    

Voorbeeld 2

U wilt een waarschuwingsregel voor zoeken in logboeken maken met behulp van de volgende query waarmee prestatiegegevens worden opgehaald met behulp van search:

search ObjectName =="Memory" and CounterName=="% Committed Bytes In Use"
| summarize Avg_Memory_Usage =avg(CounterValue) by Computer
| where Avg_Memory_Usage between(90 .. 95)  
  1. Als u deze query wilt wijzigen, gebruikt u eerst de volgende query om de tabel te identificeren waartoe de eigenschappen behoren:

    search ObjectName=="Memory" and CounterName=="% Committed Bytes In Use"
    | summarize by $table
    

    Het resultaat van deze query zou laten zien dat de eigenschappen ObjectName en CounterName afkomstig zijn uit de tabel Perf .

  2. Gebruik dit resultaat om de volgende query te maken die u voor de waarschuwingsregel zou gebruiken:

    Perf
    | where ObjectName =="Memory" and CounterName=="% Committed Bytes In Use"
    | summarize Avg_Memory_Usage=avg(CounterValue) by Computer
    | where Avg_Memory_Usage between(90 .. 95)
    

Voorbeeld 3

U wilt een logboekzoekwaarschuwing instellen met behulp van de volgende query die zowel search als union gebruikt om prestatiegegevens op te halen.

search (ObjectName == "Processor" and CounterName == "% Idle Time" and InstanceName == "_Total")
| where Computer !in (
    union *
    | where CounterName == "% Processor Utility"
    | summarize by Computer)
| summarize Avg_Idle_Time = avg(CounterValue) by Computer
  1. Als u deze query wilt wijzigen, gebruikt u eerst de volgende query om de tabel te identificeren waartoe de eigenschappen in het eerste deel van de query behoren:

    search (ObjectName == "Processor" and CounterName == "% Idle Time" and InstanceName == "_Total")
    | summarize by $table
    

    Het resultaat van deze query zou laten zien dat al deze eigenschappen afkomstig zijn uit de tabel Perf .

  2. Gebruik de opdracht union met withsource om te bepalen welke brontabel heeft bijgedragen aan elke rij:

    union withsource=table *
    | where CounterName == "% Processor Utility"
    | summarize by table
    

    Het resultaat van deze query zou laten zien dat deze eigenschappen ook afkomstig zijn uit de tabel Perf .

  3. Gebruik deze resultaten om de volgende query te maken die u voor de waarschuwingsregel zou gebruiken:

    Perf
    | where ObjectName == "Processor" and CounterName == "% Idle Time" and InstanceName == "_Total"
    | where Computer !in (
        (Perf
        | where CounterName == "% Processor Utility"
        | summarize by Computer))
    | summarize Avg_Idle_Time = avg(CounterValue) by Computer
    

Voorbeeld 4

U wilt een waarschuwingsregel voor zoeken in logboeken maken met behulp van de volgende query waarmee de resultaten van twee search query's worden samengevoegd:

search Type == 'SecurityEvent' and EventID == '4625'
| summarize by Computer, Hour = bin(TimeGenerated, 1h)
| join kind = leftouter (
    search in (Heartbeat) OSType == 'Windows'
    | summarize arg_max(TimeGenerated, Computer) by Computer , Hour = bin(TimeGenerated, 1h)
    | project Hour , Computer
) on Hour
  1. Als u de query wilt wijzigen, gebruikt u eerst de volgende query om de tabel te identificeren die de eigenschappen aan de linkerkant van de join bevat:

    search Type == 'SecurityEvent' and EventID == '4625'
    | summarize by $table
    

    Het resultaat geeft aan dat de eigenschappen aan de linkerkant van de join behoren tot de tabel SecurityEvent .

  2. Gebruik de volgende query om de tabel te identificeren die de eigenschappen aan de rechterkant van de join bevat:

    search in (Heartbeat) OSType == 'Windows'
    | summarize by $table
    

    Het resultaat geeft aan dat de eigenschappen aan de rechterkant van de join behoren tot de Heartbeat-tabel .

  3. Gebruik deze resultaten om de volgende query te maken die u voor de waarschuwingsregel zou gebruiken:

    SecurityEvent
    | where EventID == '4625'
    | summarize by Computer, Hour = bin(TimeGenerated, 1h)
    | join kind = leftouter (
        Heartbeat
        | where OSType == 'Windows'
        | summarize arg_max(TimeGenerated, Computer) by Computer , Hour = bin(TimeGenerated, 1h)
        | project Hour , Computer
    ) on Hour
    

Volgende stappen