質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

2回答

1344閲覧

AWS CloudWatch LogsからS3へクエリログの転送

rfvujm2

総合スコア9

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2020/11/09 06:09

前提・実現したいこと

現在AWSのRoute53を使用していて、CloudWatch Logsでクエリログを収集し、定期的にlambdaでpythonを使用したプログラムを実行させ、CloudWatch LogsからS3へクエリログを転送しています。
少し前からS3への転送時に異常と思われる現象が発生しているため、それの原因を解決したいと思っています。

該当のソースコード

CloudWatch Logs→S3への転送には、こちら↓のサイトに記載されていた、

https://note.com/cavityyoukey/n/ne5ae744ba4c1#hMKX9

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の方に対する設定変更は全く行っておりません。

この様に分割されて保存されるようになったのは、なにかシステムに変更があったのでしょうか? その場合、もとのように一つのファイルに圧縮する事はできるのでしょうか? それともこれは何らかの異常が発生していると認識したほうがよろしいのでしょうか?

ぜひとも有識者の方々からご意見をお聞かせ願いたいです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

こちらに記載の件なのですが、12/4 以降正常に戻っていました。
Lambda どころか AWS に対するアクションすら起こしていない状況で改善されたため、解決策や事象の原因など何一つとしてわかっていない状態ではありますが、時間経過で正常化した、ということだけ報告させていただきます。

投稿2020/12/11 05:12

rfvujm2

総合スコア9

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

単に出力するログの量が増えたからではないかと…。
参考サイトのLambdaは単にCloudWatch LogsからのS3のエクスポート機能を実行しているだけで、Python側で何かをしているわけではありません。

投稿2020/11/09 06:51

yu_1985

総合スコア7588

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

rfvujm2

2020/11/09 08:28 編集

ご回答ありがとうございます。 出力するログの量が増えたことが原因、とは考えづらい状況です。というのもアクセスが極端に減少する日のクエリログや、サブドメインでのもともとの量が少ないクエリログのファイルも分割されている状態だからです。 分割されているファイルの容量もまちまちで、中身が少ないものだとクエリログが3行書かれているだけで圧縮されている、といったファイルもある状況です。具体的には、以前のファイルは一つのファイルで200KBを超えているものも珍しくなかったのですが、現在は大きいファイルで5KBほどとなっています。
yu_1985

2020/11/09 09:21

それはちょっとわかりませんね。 ざっと調べてみましたがそこについて言及したドキュメントは見つからず、内部的な仕様かもしれません。 容量ではなく内部的に別の断面で分割している可能性はあります。 ちなみに、分割されているとなにか問題はありますか? 現実的にはエクスポートされたログを一つずつダウンロードして覗くことはあまりなく、Athenaを使って横断検索するほうが楽ですし、仮にダウンロードして覗くにしても纏めて中身を見ることは普通にコマンドで可能です。
rfvujm2

2020/11/10 03:18

ご回答ありがとうございます。 一応すべて解答し、マージすれば問題ないことは把握できているので、そこの点に関しては問題はないです。しかし、運用上すべてのクエリログをS3からローカルにダウンロードしており、その際にフォルダ数が増えたことにより、作業に必要な時間が数倍になってしまっているのが問題となっています。 とは言っても数倍といえども数時間に渡る作業ということではないので、単純に意味がわからず、怖いというのが本音のところです。。。
yu_1985

2020/11/10 03:25

スクリプト作ってしまえば一発な気もしますが…。 ダウンロードしてマージするよりも、Athenaでクエリを投げてその結果をダウンロードしたほうが楽だとは思います。
rfvujm2

2020/11/10 04:00

ご回答&アドバイスありがとうございます。 万が一のためにデータを保存しておきたい、ということを中心に考えているのでこの形で収まっています。(とりあえず保管できていればいいや状態) 内部でよくわからない断面で分割していそう。詳しい方でもすぐにはわからない挙動であるということがわかっただけでも収穫だと思っています。現状そこまでの問題にはなっていないので、少しずつ確認していこうと思います。 繰り返しになりますが何度ものご回答、アドバイス有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問