Syntax und Kontingente für Feldindexe - CloudWatch Amazon-Protokolle

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Syntax und Kontingente für Feldindexe

Sie erstellen Feldindizes, indem Sie Feldindexrichtlinien erstellen. Sie können Indexrichtlinien auf Kontoebene erstellen, die für Ihr gesamtes Konto gelten, und Sie können auch Richtlinien erstellen, die nur für eine einzelne Protokollgruppe gelten. Für kontoweite Indexrichtlinien können Sie eine festlegen, die für alle Protokollgruppen im Konto gilt. Sie können auch Indexrichtlinien auf Kontoebene erstellen, die für eine Teilmenge von Protokollgruppen im Konto gelten, die anhand der Präfixe ihrer Protokollgruppennamen ausgewählt werden. Wenn Sie mehrere Richtlinien auf Kontoebene in demselben Konto haben, dürfen sich die Präfixe der Protokollgruppennamen für diese Richtlinien nicht überschneiden. Ebenso können Sie Indexrichtlinien auf Kontoebene erstellen, die für eine bestimmte Kombination aus Name und Typ der Datenquelle gelten. Pro Kombination aus Datenquellenname und Typ kann nur eine Kontorichtlinie erstellt werden.

Feldindexrichtlinien auf Protokollgruppenebene haben Vorrang vor Feldindexrichtlinien auf Kontoebene, die für die gesamte Protokollgruppe gelten (z. B. Richtlinien auf Kontoebene ohne Auswahlkriterien oder mit Auswahlkriterien, die auf dem Präfix von Protokollgruppennamen basieren). Richtlinien auf Kontoebene, die auf der Ebene der Protokollereignisse übereinstimmen (z. B. für eine Kombination aus Name und Typ einer bestimmten Datenquelle), gelten zusätzlich zu Richtlinien, die der gesamten Protokollgruppe entsprechen. Wenn Sie eine Indexrichtlinie auf Protokollgruppenebene erstellen, verwendet diese Protokollgruppe keine Richtlinien auf Kontoebene, die auf Protokollgruppenebene übereinstimmen.

Bei Übereinstimmungen von Protokollereignissen mit den Namen von Feldindizes wird zwischen Groß- und Kleinschreibung unterschieden. Beispielsweise entspricht ein Feldindex von RequestId nicht einem Protokollereignis, das Folgendes enthält: requestId

Sie können über bis zu 40 Indexrichtlinien auf Kontoebene verfügen, von denen 20 Auswahlkriterien für das Präfix für Protokollgruppennamen und 20 auf Datenquellen basierende Auswahlkriterien verwenden können. Wenn Sie mehrere Indexrichtlinien auf Kontoebene nach Präfixen für Protokollgruppennamen gefiltert haben, können keine zwei von ihnen dieselben oder sich überschneidende Präfixe für Protokollgruppennamen verwenden. Wenn Sie beispielsweise eine Richtlinie so gefiltert haben, dass Gruppen protokolliert werden, die mit beginnenmy-log, können Sie keine andere Feldindexrichtlinie nach oder filtern lassen. my-logpprod my-logging Wenn Sie mehrere Indexrichtlinien auf Kontoebene haben, die nach Kombinationen von Datenquellenname und -typ gefiltert sind, kann keine zwei von ihnen denselben Datenquellennamen und -typ verwenden. Wenn Sie beispielsweise eine Richtlinie nach dem Datenquellennamen amazon_vpc und dem Datenquellentyp gefiltert haben, können flow Sie mit dieser Kombination keine weitere Richtlinie erstellen.

Wenn Sie über eine Indexrichtlinie auf Kontoebene verfügen, die keine Namenspräfixe hat und für alle Protokollgruppen gilt, kann keine andere Indexrichtlinie auf Kontoebene mit Präfixfiltern für Protokollgruppennamen erstellt werden. Sie können Indexrichtlinien auf Kontoebene erstellen, die Filter für den Namen und den Typ von Datenquellen verwenden.

Jede Indexrichtlinie hat die folgenden Kontingente und Einschränkungen:

  • Bis zu 20 Felder können in die Richtlinie aufgenommen werden.

  • Jeder Feldname kann bis zu 100 Zeichen enthalten.

  • Um einen Index für ein benutzerdefiniertes Feld in Ihren Protokollgruppen zu erstellen@, das mit beginnt, müssen Sie das Feld mit einem zusätzlichen @ Wert am Anfang des Feldnamens angeben. Wenn Ihre Protokollereignisse beispielsweise ein Feld mit dem Namen enthalten@userId, müssen Sie angeben, @@userId dass ein Index für dieses Feld erstellt werden soll.

Für Indexrichtlinien auf Kontoebene mit Datenquellennamen und typbasierten Auswahlkriterien gilt eine zusätzliche Einschränkung: Alle Felder müssen primitive Datentypen sein, verschachtelte Primitive werden nur für Strukturen unterstützt.

Generierte Felder und reservierte Felder

CloudWatch Logs Insights generiert bei jedem Protokollereignis automatisch Systemfelder. Diesen generierten Feldern wird das Präfix vorangestellt. @ Weitere Informationen zu generierten Feldern finden Sie unterUnterstützte Protokolle und erkannte Felder.

Von diesen generierten Feldern werden die folgenden für die Verwendung als Feldindizes unterstützt:

  • @logStream

  • @ingestionTime

  • @requestId

  • @type

  • @initDuration

  • @duration

  • @billedDuration

  • @memorySize

  • @maxMemoryUsed

  • @xrayTraceId

  • @xraySegmentId

Um diese generierten Felder zu indizieren, müssen Sie @ bei der Angabe keine zusätzlichen Felder hinzufügen, wie dies bei benutzerdefinierten Feldern der Fall ist, die mit @ beginnen. Um beispielsweise einen Feldindex für zu erstellen@logStream, geben Sie einfach @logStream als Feldindex an.

CloudWatch Logs stellt Standardfeldindizes für alle Protokollgruppen in der Standard-Protokollklasse bereit. Standardfeldindizes sind automatisch für die folgenden Felder verfügbar:

  • @logStream

  • @aws.region

  • @aws.account

  • @source.log

  • @data_source_name

  • @data_source_type

  • @data_format

  • traceId

  • severityText

  • attributes.session.id

CloudWatch Logs bietet auch Standardfeldindizes für bestimmte Kombinationen von Datenquellennamen und -typen. Standardfeldindizes sind automatisch für die folgenden Kombinationen von Datenquellennamen und -typ verfügbar:

Name und Typ der Datenquelle Standard-Feldindizes

amazon_vpc.flow

action

logStatus

region

flowDirection

type

amazon_route53.resolver_query

query_type

transport

rcode

aws_waf.access

action

httpRequest.country

aws_cloudtrail.data

aws_cloudtrail.management

eventSource

eventName

awsRegion

userAgent

errorCode

eventType

managementEvent

readOnly

eventCategory

requestId

Standardfeldindizes gelten zusätzlich zu allen benutzerdefinierten Feldindizes, die Sie in Ihrer Richtlinie definieren. Standardfeldindizes werden nicht auf Ihr Feldindexkontingent angerechnet.

Untergeordnete Felder und Array-Felder in JSON-Protokollen

Sie können Felder indizieren, bei denen es sich um verschachtelte untergeordnete Felder oder Array-Felder in JSON-Protokollen handelt.

Sie können beispielsweise einen Index des accessKeyId untergeordneten Felds innerhalb des userIdentity Felds in diesem Protokoll erstellen:

{ "eventVersion": "1.0", "userIdentity": { "type": "IAMUser", "principalId": "EXAMPLE_PRINCIPAL_ID", "arn": "arn: aws: iam: : 123456789012: user/Alice", "accessKeyId": "11112222", "accountId": "123456789012", "userName": "Alice" }, "eventTime": "2014-03-06T21: 22: 54Z", "eventSource": "ec2.amazonaws.com", "eventName": "StartInstances", "awsRegion": "us-east-2", "sourceIPAddress": "192.0.2.255", "userAgent": "ec2-api-tools1.6.12.2", "requestParameters": { "instancesSet": { "items": [{ "instanceId": "i-abcde123", "currentState": { "code": 0, "name": "pending" }, "previousState": { "code": 80, "name": "stopped" } }] } } }

Um dieses Feld zu erstellen, verweisen Sie sowohl bei der Erstellung des Feldindex als auch bei der Angabe in einer Abfrage mithilfe der Punktnotation (userIdentity.accessKeyId) darauf. Die Abfrage könnte so aussehen:

fields @timestamp, @message | filterIndex userIdentity.accessKeyId = "11112222"

Im vorherigen Beispielereignis befindet sich das instanceId Feld in einem Array innerhalb von requestParameters.instancesSet.items Um dieses Feld sowohl bei der Erstellung des Feldindex als auch bei der Abfrage darzustellen, bezeichnen Sie es als requestParameters.instancesSet.items.0.instanceId Die 0 bezieht sich auf die Position dieses Felds im Array.

Dann könnte eine Abfrage für dieses Feld wie folgt aussehen:

fields @timestamp, @message | filterIndex requestParameters.instancesSet.items.0.instanceId="i-abcde123"