Amazon Cloudwatch Logs Insights with JSON 필드
필드 중 하나에 JSON이 포함된 데이터와 Logs Insights를 사용하여 JSON 필드를 해석하려고 합니다.
스타터 코드를 사용하여 데이터를 통찰에 넣으면 다음과 같이 표시됩니다.
fields @timestamp, @message
| sort @timestamp desc
| limit 25
어떻게 하면 쉽게 추출할 수 있을까요?path
변수에서 집계를 수행하기 위해 중첩된 JSON의 변수? 몇 가지 문서를 보고, 나는 생각했다.@message.path
효과가 있을 것 같지만, 그렇지 않은 것 같습니다.인사이트에서 JSON 로그를 해석한 사람이 있습니까?
EDIT : 데이터 표시 예시
#
@timestamp
@message
1
2018-12-19 23:42:52.000
I, [2018-12-19T23:42:52.629855 #23447] INFO -- : [2ce588f1-c27d-4a55-ac05-62a75b39e762] {"method":"GET","path":"/api/v1/professionals/ID","format":"json","controller":"API::V1::Public::ProfessionalsController","action":"show","status":200,"duration":285.27,"view":222.36,"time":"2018-12-19T23:42:52.344+00:00","params":{"include":"user,tags,promotions,company_sector,similar_professionals.tags,similar_professionals.user","format":"json","compress":false,"id":"ID"},"@timestamp":"2018-12-19T23:42:52.629Z","@version":"1","message":"[200] GET /api/v1/professionals/ID (API::V1::Public::ProfessionalsController#show)"}
@logStream i-05d1d61ab853517a0
@message I, [2018-12-19T23:42:52.629855 #23447] INFO -- : [2ce588f1-c27d-4a55-ac05-62a75b39e762] {"method":"GET","path":"/api/v1/professionals/ID","format":"json","controller":"API::V1::Public::ProfessionalsController","action":"show","status":200,"duration":285.27,"view":222.36,"time":"2018-12-19T23:42:52.344+00:00","params":{"include":"xxx","format":"json","compress":false,"id":"ID"},"@timestamp":"2018-12-19T23:42:52.629Z","@version":"1","message":"[200] GET /api/v1/professionals/ID (API::V1::Public::ProfessionalsController#show)"}
@timestamp 1545262972000
2
2018-12-19 23:42:16.000
I, [2018-12-19T23:42:16.723472 #851] INFO -- : [ea712503-eb86-4a6e-ab38-ddbcd6c2b4d0] {"method":"GET","path":"/api/v1/heartbeats/new","format":"json","controller":"API::V1::Public::HeartbeatsController","action":"new","status":201,"duration":9.97,"view":3.2,"time":"2018-12-19T23:42:16.712+00:00","params":{"format":"json","compress":false},"@timestamp":"2018-12-19T23:42:16.722Z","@version":"1","message":"[201] GET /api/v1/heartbeats/new (API::V1::Public::HeartbeatsController#new)"}
CloudWatch Insights 로그는 다음과 같은 로그 유형에 대한 필드를 자동으로 검색합니다.
람다 로그
CloudWatch Logs Insights는 Lambda 로그의 로그 필드를 자동으로 검색하지만, 각 로그 이벤트의 첫 번째 내장 JSON 조각에 대해서만 검색합니다(참고: 강조 사항).Lambda 로그이벤트에 여러 JSON fragment가 포함되어 있는 경우 parse 명령을 사용하여 로그필드를 해석 및 추출할 수 있습니다.자세한 내용은 JSON 로그의 필드를 참조하십시오.
CloudTrail 로그
출처: 지원되는 로그 및 검색된 필드
한다면@message
이I, [2018-12-11T13:20:27] INFO -- : {"method":"GET"}
그런 다음 다음과 같이 필드를 선택하고 필터링할 수 있습니다.
fields @timestamp, @message, method
| filter method = "GET"
| sort @timestamp desc
중첩된 필드에서도 작동합니다.params.format = "json"
또는results.0.firstName = "Paul"
.
명령어를 사용하여 필드를 추출할 수 있습니다.
한다면@message
이
I, [2018-12-11T13:20:27] INFO -- : {"method":"GET"}
그런 다음 다음과 같이 필드를 추출합니다.
fields @timestamp, @message
| parse "I, [*T*] INFO -- : {"method":"*"}" as @date, @time, @method
| filter method=GET
| sort @timestamp desc
| limit 20
그 서류는 지금으로서는 다소 가볍다.와일드카드를 대체하여 결과를 얻을 수 있다.*
정규 표현을 사용해도 해석은 실패합니다.
@pyb insights를 바탕으로 사용할 수 있었습니다.parse @message '"path":"*"' as path
길의 어느 곳에서든@message
.
다른 파이프로 메서드를 얻을 수 있습니다.parse @message '"method":"*"' as method
두 번째 글로벌 플레인 텍스트 검색이므로 주문에 신경 쓰지 않고@message
이 경우,@message
다음과 같습니다.
I, [2018-12-19T23:42:52.629855 #23447] INFO -- : [2ce588f1-c27d-4a55-ac05-62a75b39e762] {"method":"GET","path":"/api/v1/professionals/ID","format":"json","controller":"API::V1::Public::ProfessionalsController","action":"show","status":200,"duration":285.27,"view":222.36,"time":"2018-12-19T23:42:52.344+00:00","params":{"include":"xxx","format":"json","compress":false,"id":"ID"},"@timestamp":"2018-12-19T23:42:52.629Z","@version":"1","message":"[200] GET /api/v1/professionals/ID (API::V1::Public::ProfessionalsController#show)"}
사용방법:
parse @message '"path":"*"' as path | parse @message '"method":"*"' as method
다음과 같은 필드가 나타납니다.path = '/api/v1/professionals/ID'
그리고.method = 'GET'
이것은 여전히 단순한 문자열 구문 분석이기 때문에 다음과 같은 중첩된 키의 개념은 없습니다.params.format
찾을 수 없다json
단,format
그럴 거야, 다른 사람이 없다면format
내 어디에나 끈을 매다@message
.
또한 이는 Insights가 메시지에서 JSON을 검색하지 못하는 경우에 해당합니다.저는 이것이 @pyb가 이 답변에서 언급한 경우라고 생각합니다.다음 형식에서도 내 로그가 검색되지 않습니다.
info - Request: {"method":"POST","path":"/auth/login/","body":{"login":{"email":"email@example.com","password":"********"}},"uuid":"36d76df2-aec4-4549-8b73-f237e8f14e23","ip":"*.*.*.*"}
regex의 도움을 받아 다른 해석도 가능
@message
말합니다
I, [2018-12-19T23:42:52.629855 #23447] INFO -- : [2ce588f1-c27d-4a55-ac05-62a75b39e762] {"method":"GET","path":"/api/v1/professionals/"}
다음 방법으로 메서드를 추출할 수 있습니다.
fields @timestamp, @message
| parse @message /\"method\":\"(?<method_type>.*?)\"/
parse 명령어 내의 regex 쿼리가 도움이 됩니까?
filter @message like / \"path\":\"/
| parse @message /(?<@endpt>((\/[a-zA-Z0-9_{}()-?]+){1,}))/
행운을 빕니다.
언급URL : https://stackoverflow.com/questions/53725133/amazon-cloudwatch-logs-insights-with-json-fields
'itsource' 카테고리의 다른 글
MUI의 CSS 자 선택기 (0) | 2023.03.13 |
---|---|
사물을 비스듬히 복사하고 있습니까? (0) | 2023.03.13 |
Angularjs의 앵커 링크? (0) | 2023.03.13 |
'속성이 '없음' 유형에 없습니다.' (0) | 2023.03.13 |
React에서 빈 dom 요소를 정의하는 올바른 방법 (0) | 2023.03.13 |