AWS CloudWatch Log Insight query : Get values with python regex

x·2021년 5월 11일
0
post-thumbnail

다음과 같은 로그에서 user id만 뽑아내고 싶었다. 대괄호가 user id를 로그를 감싸고 있어서 출력해보면 [1], 이런 형태였다.
"[a][b][c] [userID] : [$userId], [d] : [e]"

  1. log insight에서 로그 그룹을 선택하고 원하는 기간을 정해준다.
  2. log insight에서 제공하는 query 문법에 따라 해당 로그만 추려낸다.
fields @timestamp
| filter @message like "[a][b][c]"
| parse @message "* * * *"
as info, file, class_method, msg
| parse msg "* * * * * * * *" as  a,b,c,d,e, f, user_id, g
| filter msg not like /xyx/
| display user_id
| sort @timestamp desc
| limit 10000
  1. user_id들이 지저분하게 출력된다.
  2. 결과 내보내기에서 테이블 다운로드를 클릭해 .csv 파일을 열고 값을 복사한다.
  3. python regex를 사용해 데이터를 필터링한다. 복사한 id들을 문자열로 만들어 해당 객체를 s가 바라보게 한다. 숫자만 원하므로 숫자로 되어있는 값을 찾기위한 패턴을 p가 바라보게 한다. list를 set으로 형변환해서 나온 결과를 복사한다.
import re

s = """[1234],"""

p = re.compile("[\d]+")
found_ids = p.findall(s)
result_ids = set([int(id) for id in found_ids])

print(result_ids)
  1. sql query로 user 정보를 출력한다.
select *
from users
where id in (1234)

0개의 댓글