CloudWatch Logs에 저장된 로그에서 Insights를 사용하여 데이터 추출
하고 싶은 일
CloudWatch Logs에서 수집한 로그에 API 서버가 접수한 요청의 경로와 요청한 사용자 ID가 기록되어 있으므로 특정 API를 호출한 날짜와 시간과 사용자 ID 목록을 만들고 싶습니다. .
CloudWatch Logs에서 수집한 로그
CloudWatch Logs 메시지에는 아래와 같은 JOSN 형식의 로그가 출력됩니다.
CloudWatchLogs의 메시지
{
"access_timestamp": "2019-02-13T10:54:25+09:00",
"level": "info",
"method": "POST",
"path": "/path/to/resource/sub_resource",
"query": {
"param1": "value1",
"param2": "value2",
"param3": "value3",
},
"user_id": "dfc269bf-c08a-48a2-a6e3-14dd25f5350a",
"status": "200",
}
만들고 싶은 것
위의 JSON에 대해 원하는 path를 지정하여 status가 "200"(성공) 로그를 추출하여
access_timestamp
및 user_id
의 목록을 만듭니다."2019-02-13T10:54:25+09:00","dfc269bf-c08a-48a2-a6e3-14dd25f5350a"
"2019-02-13T10:55:16+09:00","908cbf68-744f-41ea-a202-667b129029ca"
"2019-02-13T10:56:14+09:00","5000adc0-da5d-4d58-aad2-f5d4e8c32426"
aws cli로 열심히
aws logs start-query에서 Insights를 사용합니다.
Insights 문의 시작
aws logs start-query --log-group-name 'my-log-group' --start-time 1550012400 --end-time 1550014200 \
--query-string 'fields, @message
| filter ( access_url =~ "/path/to/resource/" and level ="INFO" and method = "POST" and status = "200")
'
인수
--query-string
의 filter
는 CloudWatchLogs message에 기록된 JSON 키를 지정합니다. JSON 키 access_url , level , method , status 는 자동으로 인식되는 것 같습니다. AWS 콘솔에서 로그 그룹 이름을 지정하면 오른쪽의 '검색된 필드에'에 키 이름이 표시되므로 확인할 수 있습니다.Insights 처리가 끝나면
queryId
를 얻을 수 있으므로 queryId
를 지정하여 결과를 검색합니다.queryId 출력
{
"queryId": "5000adc0-da5d-4d58-aad2-f5d4e8c32426"
}
마지막으로 jq를 사용하여 access_timestamp와 user_id를 출력합니다.
Insights 결과에서 access_timestamp 및 user_id 출력
aws logs get-query-results --query-id 5000adc0-da5d-4d58-aad2-f5d4e8c32426 | \
jq -r '.results[] | map ( select( .field == "@message")) | .[].value ' | jq -r '[. access_timestamp, .user_id] | @csv'
Reference
이 문제에 관하여(CloudWatch Logs에 저장된 로그에서 Insights를 사용하여 데이터 추출), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/akym03/items/5d7e30cee4447a37c785텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)