前提・実現したいこと
現在AWSのRoute53を使用していて、CloudWatch Logsでクエリログを収集し、定期的にlambdaでpythonを使用したプログラムを実行させ、CloudWatch LogsからS3へクエリログを転送しています。
少し前からS3への転送時に異常と思われる現象が発生しているため、それの原因を解決したいと思っています。
該当のソースコード
CloudWatch Logs→S3への転送には、こちら↓のサイトに記載されていた、
Python
1 2import time 3import boto3 4import os 5 6def get_from_timestamp(): 7 today = datetime.date.today() 8 yesterday = datetime.datetime.combine(today - datetime.timedelta(days = 1), datetime.time(0, 0, 0)) 9 timestamp = time.mktime(yesterday.timetuple()) 10 return int(timestamp) 11 12def get_to_timestamp(from_ts): 13 return from_ts + (60 * 60 * 24) - 1 14 15def lambda_handler(event, context): 16 17 from_ts = get_from_timestamp() 18 to_ts = get_to_timestamp(from_ts) 19 print('[My Function] Timestamp: from_ts %s, to_ts %s' % (from_ts, to_ts)) 20 21 22 client = boto3.client('logs') 23 response = client.create_export_task( 24 logGroupName = os.environ['TargetLogGroupName'], 25 fromTime = from_ts * 1000, 26 to = to_ts * 1000, 27 destination = os.environ['DestinationS3BucketName'], 28 destinationPrefix = os.environ['DestinationS3Prefix'] 29 ) 30 return response
というプログラムをほとんどそのまま使用していました。
発生している問題・エラーメッセージ
この流れで10/22までは正常にクエリログの収集・転送までできていたのですが、10/23以降、S3への転送時にファイルが分割されて圧縮されるという状況になっています。10/22以前は一つのエッジロケーションに対して一つの.gzファイルが作成されていたのですが、現在は多いと40以上の.gzファイルに分割されています。
分割圧縮されているファイルをダウンロードし、解凍、マージ、ソートをすれば該当の範囲のクエリログと完全に一致しています。このことからただ分割して圧縮されているだけなのだと思いますが、原因が全くわかっていない状態です。
AWSの方に対する設定変更は全く行っておりません。
この様に分割されて保存されるようになったのは、なにかシステムに変更があったのでしょうか? その場合、もとのように一つのファイルに圧縮する事はできるのでしょうか? それともこれは何らかの異常が発生していると認識したほうがよろしいのでしょうか?
ぜひとも有識者の方々からご意見をお聞かせ願いたいです。
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。