我想计算一下CloudFront dist中所有对象被单独命中的次数,这样我就可以生成一个excel表来跟踪使用情况统计。我一直在查看CloudFront的boto3文档,但我无法确定在哪里可以访问这些信息。我看到AWS Cloudfront控制台生成了一个“流行对象”报告。我不确定是否有人知道如何在boto3中获取AWS为该报告生成的数字?
如果无法通过Boto3访问,是否应该使用AWS CLI命令?
更新:
以下是我最终用作伪代码的,希望这是其他人的起点:
import boto3
import gzip
from datetime import datetime, date, timedelta
import shutil
from xlwt import Workbook
def analyze(timeInterval):
"""
analyze usage data in cloudfront
:param domain:
:param id:
:param password:
:return: usage data
"""
outputList = []
outputDict = {}
s3 = boto3.resource('s3', aws_access_key_id=AWS_ACCESS_KEY_ID, aws_secret_access_key=PASSWORD)
data = s3.Bucket(AWS_STORAGE_BUCKET_NAME)
count = 0
currentDatetime = str(datetime.now()).split(' ')
currentDatetime = currentDatetime[0].split('-')
currentdatetimeYear = int(currentDatetime[0])
currentdatetimeMonth = int(currentDatetime[1])
currentdatetimeDay = int(currentDatetime[2])
currentDatetime = date(year=currentdatetimeYear, month=currentdatetimeMonth, day=currentdatetimeDay)
# create excel workbook/sheet that we'll save results to
wb = Workbook()
sheet1 = wb.add_sheet('Log Results By URL')
sheet1.write(0, 1, 'File')
sheet1.write(0, 2, 'Total Hit Count')
sheet1.write(0, 3, 'Total Byte Count')
for item in data.objects.all():
count += 1
# print(count, '\n', item)
# print(item.key)
datetimeRef = str(item.key).replace(CLOUDFRONT_IDENTIFIER+'.', '')
datetimeRef = datetimeRef.split('.')
datetimeRef = datetimeRef[0]
datetimeRef = str(datetimeRef[:-3]).split('-')
datetimeRefYear = int(datetimeRef[0])
datetimeRefMonth = int(datetimeRef[1])
datetimeRefDay = int(datetimeRef[2])
datetimeRef = date(year=datetimeRefYear, month=datetimeRefMonth, day=datetimeRefDay)
# print('comparing', datetimeRef - timedelta(days=1), currentDatetime)
if timeInterval == 'daily':
if datetimeRef > currentDatetime - timedelta(days=1):
pass
else:
# file not within datetime restrictions, don't do stuff
continue
elif timeInterval == 'weekly':
if datetimeRef > currentDatetime - timedelta(days=7):
pass
else:
# file not within datetime restrictions, don't do stuff
continue
elif timeInterval == 'monthly':
if datetimeRef > currentDatetime - timedelta(weeks=4):
pass
else:
# file not within datetime restrictions, don't do stuff
continue
elif timeInterval == 'yearly':
if datetimeRef > currentDatetime - timedelta(weeks=52):
pass
else:
# file not within datetime restrictions, don't do stuff
continue
print('datetimeRef', datetimeRef)
print('currentDatetime', currentDatetime)
print('Analyzing File:', item.key)
# download the file
s3.Bucket(AWS_STORAGE_BUCKET_NAME).download_file(item.key, 'logFile.gz')
# unzip the file
with gzip.open('logFile.gz', 'rb') as f_in:
with open('logFile.txt', 'wb') as f_out:
shutil.copyfileobj(f_in, f_out)
# read the text file and add contents to a list
with open('logFile.txt', 'r') as f:
lines = f.readlines()
localcount = -1
for line in lines:
localcount += 1
if localcount < 2:
continue
else:
outputList.append(line)
# print(outputList)
# iterate through the data collecting hit counts and byte size
for dataline in outputList:
data = dataline.split('\t')
# print(data)
if outputDict.get(data[7]) is None:
outputDict[data[7]] = {'count': 1, 'byteCount': int(data[3])}
else:
td = outputDict[data[7]]
outputDict[data[7]] = {'count': int(td['count']) + 1, 'byteCount': int(td['byteCount']) + int(data[3])}
# print(outputDict)
# iterate through the result dictionary and write to the excel sheet
outputDictKeys = outputDict.keys()
count = 1
for outputDictKey in outputDictKeys:
sheet1.write(count, 1, str(outputDictKey))
sheet1.write(count, 2, outputDict[outputDictKey]['count'])
sheet1.write(count, 3, outputDict[outputDictKey]['byteCount'])
count += 1
safeDateTime = str(datetime.now()).replace(':', '.')
# save the workbook
wb.save(str(timeInterval)+str('_Log_Result_'+str(safeDateTime)) + '.xls')
if __name__ == '__main__':
analyze('daily')
从配置和使用标准日志(访问日志)-Amazon CloudFront:
您可以将CloudFront配置为创建日志文件,其中包含CloudFront收到的每个用户请求的详细信息。这些称为标准日志,也称为访问日志。这些标准日志可用于web和RTMP发行版。如果启用标准日志,还可以指定希望CloudFront保存文件的AmazonS3存储桶。
日志文件可能相当大,但您可以使用AmazonAthena查询AmazonCloudFront日志。
问题内容: 我正在尝试使用适用于AWS的新boto3客户端做一个“ hello world” 。 我的用例非常简单:从S3获取对象并将其保存到文件中。 在boto 2.XI中,它应该是这样的: 在boto 3中。我找不到一种干净的方法来做同样的事情,所以我手动遍历了“ Streaming”对象: 要么 而且效果很好。我想知道是否有任何“本机” boto3函数可以完成相同的任务? 问题答案: Bot
我正在尝试为AWS的新boto3客户端做一个“hello world”。 我的用例相当简单:从S3获取对象并将其保存到文件中。 在boto 2.X中,我会这样做: 在博托3。我找不到一种干净的方法来做同样的事情,所以我手动迭代“流”对象: 或 而且效果很好。我想知道是否有任何“本机”boto3函数可以完成相同的任务?
问题内容: 在boto 2中,可以使用以下方法写入S3对象: Key.set_contents_from_string() Key.set_contents_from_file() Key.set_contents_from_filename() Key.set_contents_from_stream() 是否有boto 3等效项?将数据保存到S3上存储的对象的boto3方法是什么? 问题答案:
我很抱歉。我以前也提出过同样的问题,但被认为与这个答案重复。我真的不明白那里的答案,我也不明白为什么那个问题会回答我的问题。在我看来很不一样。我需要获取图像对象,但答案是创建一个流。有人能帮我把答案和我的问题联系起来吗?我是新的云功能。请 ================================================================================
问题内容: 下面的代码将控制台日志打印到页面上。它记录来自服务器的获取和响应,例如: 与其将这些内容显示在页面上,我不希望计算每个响应和请求,因此您会看到一个从1开始到结束为止的数字,可以是任何数字。这是为了向用户显示正在发生的事情,而没有向他们显示所有响应并获取数据。 和html: 问题答案: 如果您只想覆盖以打印响应计数,则应该这样做,但这将增加任何呼叫的计数。 如果您希望依靠响应而不是所有控
我需要上传网址到一个s3桶,我正在使用boto3。我想我有一个解决方案,这个问题:如何保存S3对象到一个文件使用boto3,但当我去下载文件,我仍然得到错误。目标是让他们下载为音频文件,而不是URL。我的代码: 我的问题是,我需要更改什么,以便将文件作为音频文件而不是URL保存在s3中?