2

Wir haben kürzlich den AWS Log-Agenten auf einem unserer Testserver eingerichtet. Unsere Protokolldateien enthalten normalerweise mehrzeilige Ereignisse. Beispiel ein unseres Protokollereignisses ist:AWS protokolliert die Einrichtung des Agenten

[10-Jun-2016 07:30:16 UTC] SQS Post Response: Array 
(
    [Status] => 200 
    [ResponseBody] => <?xml version="1.0"?><SendMessageResponse xmlns="http://queue.amazonaws.com/doc/2009-02-01/"><SendMessageResult><MessageId>053c7sdf5-1e23-wa9d-99d8-2a0cf9eewe7a</MessageId><MD5OfMessageBody>8e542d2c2a1325a85eeb9sdfwersd58f</MD5OfMessageBody></SendMessageResult><ResponseMetadata><RequestId>4esdfr30-c39b-526b-bds2-14e4gju18af</RequestId></ResponseMetadata></SendMessageResponse> 
) 

Die Log-Agent Referenz-Dokumentation sagt ‚multi_line_start_pattern‘ Option für solche Protokolle zu verwenden. Unsere AWS Log Agent Config ist wie folgt:

[httpd_info.log] 
file = /var/log/httpd/info.log* 
log_stream_name = info.log 
initial_position = start_of_file 
log_group_name = test.server.name 
multi_line_start_pattern = '(\[)+\d{2}-[a-zA-Z]{3}+-\d{4}' 

jedoch die Protokolle Agent bricht auf oben genannten und ähnlichen Ereignissen berichten. Die Möglichkeit, es zu Cloudwatch Logs gemeldet wird, ist wie folgt:

Ereignis 1:

[10-Jun-2016 11:21:26 UTC] SQS Post Response: Array 

Ereignis 2:

([Status] => 200 [ResponseBody] => <?xml version="1.0"?><SendMessageResponse xmlns="http://queue.amazonaws.com/doc/2009-02-01/"><SendMessageResult><MessageId>053c7sdf5-1e23-wa9d-99d8-2a0cf9eewe7a</MessageId><MD5OfMessageBody>8e542d2c2a1325a85eeb9sdfwersd58f</MD5OfMessageBody></SendMessageResult><ResponseMetadata><RequestId>4esdfr30-c39b-526b-bds2-14e4gju18af</RequestId></ResponseMetadata></SendMessageResponse> 

Ereignis 3:

) 

Trotz der Tatsache, dass es nur ein einziges Ereignis ist. Irgendeine Ahnung was ist hier los?

Antwort

1

denke ich, alles, was Sie brauchen, ist Folgendes zu Ihrer awslogs.conf

datetime_format = %d-%b-%Y %H:%M:%S UTC 
time_zone = UTC 
multi_line_start_pattern = {datetime_format} 

http://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AgentReference.html

multi_line_start_pattern

Gibt das Muster für den Beginn einer Log-Meldung zu identifizieren. Eine Protokollnachricht wird aus einer Zeile erstellt, die dem Muster und allen folgenden Zeilen entspricht, die nicht mit dem Muster übereinstimmen. Die gültigen Werte sind regulärer Ausdruck oder {datetime_format}. Wenn Sie {datetime_format} verwenden, sollte die Option datetime_format angegeben werden. Der Standardwert ist '^ [^ \ s]', sodass jede Zeile, die mit einem Leerzeichen beginnt, die vorherige Protokollnachricht schließt und eine neue Protokollnachricht startet.

Wenn dieses Datetime-Format nicht funktioniert hat, müssten Sie Ihre Regex aktualisieren, damit sie tatsächlich mit Ihrer spezifischen Datetime übereinstimmt. Ich glaube nicht, dass der oben aufgelistete tatsächlich für Ihr gegebenes Format funktioniert.

Sie könnten versuchen, dies zum Beispiel:

[\ d {2} - [\ w] {3} - \ d {4} \ s {1} \ d {2}: \ d {2 }: \ d {2} \ s {1} \ w +]

überein

[10-Jun-2016 11.21.26 UTC]

Siehe hier: http://www.regexpal.com/?fam=96811

Führen Sie nach Abschluss einen Neustart des Dienstes durch und überprüfen Sie, ob das Parsen korrekt ist.

$ sudo Dienst awslogs Neustart