2017-04-18 1 views
6

Google Cloud Platform 애플리케이션의 로그를 스트리밍하려고합니다. 첫 번째로 주목해야 할 점은 Google에서 초당 약 10 건의 건강 검진을 보냅니다. 따라서 유용한 정보를 얻으려면 grep -v /health해야합니다. 그게 표준인가?"gcloud 앱 로그 테일"에 주간 데이터가 표시됩니다.

두 번째로 이전 로그를 스트리밍하는 것입니다. 나는 gcloud app logs tail -s default을 실행 중이고 4 월 11 일 (이 시점에서 1 주일)의 로그를 얻습니다. 최신 로그 (4, 3, 2 일 전)가 천천히 시간이 흐르면서 스트리밍됩니다. 방금 내 앱을 새로 고침 (로그 메시지를 실행 함)하고 새 로그를 보지 못했습니다.

새 로그 메시지를 거의 실시간에서 (몇 시간 또는 몇 시간 내에) 볼 수 있습니까?

+1

같은 문제가 있습니다. 뭐 찾았 니? 현재 로그 삭제 만 시도 중 'gcloud 베타 로그 기록 목록' 'gcloud 베타 로그 기록 삭제 로그 ' –

답변

0

건강 검진의 경우 grep에 의존 할 필요가 없습니다. SDK에는 included filters이 있으므로 출력을 필터링 할 수 있습니다. 그러나 터미널에 숨기 만하면 SDK는 여전히 grep을 사용하는 것처럼 API에서 가져올 수 있습니다. 사용자 정의 필터와 일치하는 로그 만 요청하기 때문에보다 최적의 방법은 gcloud logging read 'resource.type="gae_app" AND logName:"logs/appengine.googleapis.com%2Frequest_log" AND protoPayload.resource!="/health"' --order desc입니다. 이것은 매우 자세한 로그를 제공하므로 format the output directly on the SDK을 사용하면 원하는대로 gcloud app logs tail과 유사하게 만들 수 있습니다. 당신은 출력이 당신의 요구에 맞게 만들기 위해 --format 플래그를 추가해야합니다

watch 'gcloud logging read "resource.type=\"gae_app\" AND logName:\"logs/appengine.googleapis.com%2Frequest_log\" AND protoPayload.resource!=\"/health\"" --order desc --limit 1' 

하고 --limit 플래그 : gcloud logging는 "꼬리"모드를 가지고 있지 않기 때문에

, 당신은 단지처럼 watch에 포장 할 수 있습니다 한도가 커질수록 응답 속도가 느려집니다.

로그가 시작되는 시간과 관련하여 gcloud app logs tail -s default --log-http을 실행하고 SDK에서 수행 한 요청을 API에서 사용할 수있는 필터와 비교하면 왜 1 주일 이전 로그가 표시되는지 알 수 있습니다.

귀하의 경우 가장 좋은 옵션은 watch에 싸여있는 API에 직접 전화를 걸 것이라고 생각합니다.

직접 API 호출을 사용하면 사용자 지정 필터를 추가하고 field mask을 사용하여 관련 로그 항목과 필드 만 반환하여 네트워크에 대한 부담을 줄이고 응답 시간을 단축 할 수 있습니다.

먼저 원하는 로그 만 반환하는 log filter을 만들어야합니다 (건강 검진 또는 스팸 모니터링 없음). 이를 수행하는 가장 좋은 방법은 표시된 로그가 만족 스러울 때까지 console itself에서 테스트하는 것입니다.

그런 다음 관심있는 필드를 확인하십시오. GAE 로그의 경우 protoPayload (및 페이로드의 일부 필드 만 필요하지만 나중에 필터링 할 수 있습니다)가 필요할 가능성이 큽니다.

그래서 우리는 다음과 같은 방법으로 우리의 API 호출 루프를 구성 (경고 : 인용 탈출 지옥) : 빠른 테스트로

watch -tcn 0.5 'curl -H"Authorization: Bearer $(gcloud auth print-access-token)" \ 
    -H"Content-Type: application/json" \ 
    "https://logging.googleapis.com/v2/entries:list?fields=entries%2FprotoPayload" \ 
    -d"{ 
    \"filter\":\"resource.type=\\\"gae_app\\\" 
       logName=\\\"projects/$(gcloud config get-value project)/logs/appengine.googleapis.com%2Frequest_log\\\"\", 
    \"pageSize\":$(tput lines), 
    \"orderBy\":\"timestamp desc\", 
    \"resourceNames\": [ 
     \"projects/$(gcloud config get-value project)\" 
    ] 
}" 2>\dev\null |jq -cC ".entries[].protoPayload | { timestamp: .startTime, method, status, latency, URL: (.host + .resource) }"' 

, 내가 출력 형식을 jq을 통해 응답 배관 및 제한하고있어 응답 크기를 화면 크기에 맞게 조정할 수 있지만이를 쉽게 읽을 수있는 필드와 출력에 맞게 조정해야합니다.

관련 문제