簡體   English   中英

如何使用 python 從 s3 日志中獲取價值?

[英]How to grab on value from an s3 log using python?

我已經使用 Python 創建了到 AWS s3 的連接。 我已經使用過濾器來獲取我需要的日志類型,但現在我無法獲取特定值。 我試過創建一個字典,但解析不好,所以不太確定我是否應該轉換為字符串,然后以這種方式解析值,或者什么是最好的選擇。

我已經創建了與登錄詳細信息的連接。

s3_client = boto3.client('s3')
s3_bucket_name = 'halo-test-log-bucket'
s3 = boto3.resource('s3',
                    aws_access_key_id='XXXXXXXXXXXXXX',
                    
aws_secret_access_key='XXXXXXXXXXXXXXXXXXXXXXXXXXXXX')

這是我得到罰款的地方:

my_bucket = s3.Bucket(s3_bucket_name)
for file in my_bucket.objects.filter(Prefix = ARCID+'-quote'):
    file_name=file.key
    print(file_name)

我試圖獲得價值:

for file in bucket_list:
   obj = s3.Object(s3_bucket_name, file)
   data=obj.get()['Body'].read()
   data=str(data, 'utf-8')
   data=StringIO(data)
   ARCID_df=pd.read_csv(data, on_bad_lines='skip')

ARCID_df.iloc[[125]]

這不起作用。 就像我之前說的,正在考慮將這個日志變成一個字符串,然后獲取特定的值,但希望得到一個 dataframe 或至少一個字典。

以下是日志 output 的示例:

    2022-08-26 18:50:01.002  INFO 1 --- [http-nio-8092-exec-8] c.afficiency.quote.service.QuoteService  : productId:1111

2022-08-26 18:50:01.002  INFO 1 --- [http-nio-8092-exec-8] c.afficiency.quote.service.QuoteService  : arcId:ARC667766666

2022-08-26 18:50:01.002  INFO 1 --- [http-nio-8092-exec-8] c.afficiency.quote.service.QuoteService  : ##### calling getConfig  #######

2022-08-26 18:50:01.002  INFO 1 --- [http-nio-8092-exec-8] c.afficiency.quote.service.QuoteService  : getConfig Req Obj:{"arcId":"ARC6667766666","productId":"1111"}

2022-08-26 18:50:01.031  INFO 1 --- [http-nio-8092-exec-8] c.afficiency.quote.service.QuoteService  : getConfig ResponseObj:{

  "redisHost": "happy.com", 

  "redisPassword": "1111111111111111", 

  "redisPort": "11111", 

  "redisUser": "default", 

  "statusCode": "200"

}



2022-08-26 18:50:01.031  INFO 1 --- [http-nio-8092-exec-8] c.afficiency.quote.service.QuoteService  : REDIS getConfig Response ConfigStatus:200

2022-08-26 18:50:01.031  INFO 1 --- [http-nio-8092-exec-8] c.afficiency.quote.service.QuoteService  : Input Age:00

2022-08-26 18:50:01.031  INFO 1 --- [http-nio-8092-exec-8] c.afficiency.quote.service.QuoteService  : Input Gender:1

2022-08-26 18:50:01.031  INFO 1 --- [http-nio-8092-exec-8] c.afficiency.quote.service.QuoteService  : Input State:MD

2022-08-26 18:50:01.031  INFO 1 --- [http-nio-8092-exec-8] c.afficiency.quote.service.QuoteService  : ### Input term:15

2022-08-26 18:50:01.034  INFO 1 --- [http-nio-8092-exec-8] c.afficiency.quote.service.QuoteService  : fetched value from Redis arcid+DIST:7777

2022-08-26 18:50:01.035  INFO 1 --- [http-nio-8092-exec-8] c.afficiency.quote.service.QuoteService  : ##distId:7777

2022-08-26 18:50:01.035  INFO 1 --- [http-nio-8092-exec-8] c.afficiency.quote.service.QuoteService  : ####### Input Validation and Data Preparation######## 

2022-08-26 18:50:01.035  INFO 1 --- [http-nio-8092-exec-8] c.afficiency.quote.service.QuoteService  : ### Inside GetServiceApi Call

2022-08-26 18:50:01.035  INFO 1 --- [http-nio-8092-exec-8] c.afficiency.quote.service.QuoteService  : [getService]getServiceUrl:http://getservice-utility-container-external.haven-life-utilities:8092/getServices

2022-08-26 18:50:01.035  INFO 1 --- [http-nio-8092-exec-8] c.afficiency.quote.service.QuoteService  : GetServiceApi Req Obj:{"inProductCode":"1111"}

Output:

2022-08-29 21:05:43.130 INFO 1 --- [http-nio-8092-exec-2] c.afficiency.quote.service.QuoteService : productId:9339
69                                       2022-08-29 21:05:43.235 INFO 1 --- [http-nio-...

大家好,我對我最后一段代碼中的不確定性感到抱歉。 我確實想通了。 我所做的是將 output 變成一個字符串,然后在我正在尋找的值之前和之后拆分信息。

我首先遍歷日志以找到我正在尋找的特定日志,然后將其附加到列表中。 然后我訪問列表中的第一個文件,將其轉換為 object,然后讀取使用.get()讀取文本正文,然后將字節讀取為字符串。

一旦我將它作為一個字符串,我將它拆分為值之前和之后的位置。

bucket_list = []
my_bucket = s3.Bucket(s3_bucket_name)
for file in my_bucket.objects.filter(Prefix = ARCID+'-quote'):
    file_name=file.key
    bucket_list.append(file_name)



for file in bucket_list:
        obj = s3.Object(s3_bucket_name, file)
        data_obj=obj.get()['Body'].read()
        data_str=data_obj.decode('utf-8')



rate_mult_key = data_str.split("Ans Option List:[")
rate_mult_value = rate_mult_key[2].split(']')
rate_multiplier = float(rate_mult_value[0])

Output:

1.95

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM