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.

Feldindexrichtlinien auf Protokollgruppenebene haben Vorrang vor Feldindexrichtlinien auf Kontoebene: Wenn Sie eine Indexrichtlinie auf Protokollgruppenebene erstellen, verwendet diese Protokollgruppe nur diese Richtlinie und ignoriert die Richtlinien auf Kontoebene.

Bei der Zuordnung von Protokollereignissen zu 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 bis zu 20 Indexrichtlinien auf Kontoebene haben. 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 über eine Indexrichtlinie auf Kontoebene verfügen, die keine Namenspräfixe hat und für alle Protokollgruppen gilt, kann keine andere Indexrichtlinie auf Kontoebene erstellt werden.

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.

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

  • @xraySetmentId

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.

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 wie folgt 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"