개요
요청이 앱에 전송되면 App Engine에 의해 요청 로그가 자동으로 작성됩니다. 요청을 처리하는 동안 앱은 애플리케이션 로그를 작성할 수도 있습니다. 이 페이지에서는 애플리케이션에서 애플리케이션 로그를 작성하는 방법, Google Cloud 콘솔에서 로깅을 확인하는 방법, 요청 중 App Engine이 작성하는 요청 로그 데이터를 이해하는 방법을 설명합니다.
로그데이터 다운로드에 대한 자세한 내용은 로그 내보내기 개요를 참조하세요.
요청 로그와 애플리케이션 로그
로그 데이터에는 요청 로그와 애플리케이션 로그의 두 가지 카테고리가 있습니다. 요청 로그는 앱에서 처리되는 요청마다 App Engine에서 자동으로 작성하며, 프로젝트 ID, HTTP 버전 등의 정보를 포함합니다.
애플리케이션 로그 작성
기본 제공 PHP 함수 syslog()
를 호출할 때 Logs PHP API를 사용하여 로그를 작성합니다. 예를 들면 다음과 같습니다.
if (authorizedUser()) {
echo '<p>Welcome authorized user</p>';
syslog(LOG_INFO, 'Authorized access');
} else {
echo 'Go away unauthorized user<p />';
syslog(LOG_WARNING, "Unauthorized access");
}
syslog
에 쓰기 전에 openlog()
또는 closelog()
를 호출할 필요는 없습니다. 이러한 함수에 대한 호출은 무시됩니다.
Google Cloud 콘솔의 로그 URL 형식
Google Cloud 콘솔의 로그 URL 형식 예시는 다음 샘플 URL을 참조하세요.
https://console.cloud.google.com/logs?filters=request_id:000000db00ff00ff827e493472570001737e73686966746361727331000168656164000100
콘솔에서 로그 읽기
표준 환경에서 실행되는 앱에서 작성된 로그를 보려면 로그 탐색기를 사용하세요.
일반적인 App Engine 로그에는 다음 샘플 로그에서 볼 수 있듯이 Apache 결합 로그 형식의 데이터와 일부 특수한 App Engine 필드가 포함됩니다.
192.0.2.0 - test [27/Jun/2014:09:11:47 -0700] "GET / HTTP/1.1" 200 414
"http://www.example.com/index.html"
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36"
"1-dot-calm-sylph-602.appspot.com" ms=195 cpu_ms=42 cpm_usd=0.000046
loading_request=1 instance=00c61b117cfeb66f973d7df1b7f4ae1f064d app_engine_release=
요청 로그 필드 이해
다음 표에는 표시 순서에 따라 필드와 설명이 나와 있습니다.
필드 순서 | 필드 이름 | 항상 표시 여부 | 설명 |
---|---|---|---|
1 | 클라이언트 주소 | 예 | 클라이언트 IP 주소입니다. 예: 192.0.2.0 |
2 | RFC 1413 ID | 아니요 | 클라이언트의 RFC 1413 ID입니다. 거의 항상 문자 - 입니다. |
3 | 사용자 | 아니요 | 앱에서 Users API를 사용하고 사용자가 로그인한 경우에만 있습니다. 이 값은 Google 계정의 '닉네임' 부분입니다. 예를 들어 Google 계정이 test@example.com 이면 이 필드에 로깅되는 닉네임은 test 입니다. |
4 | 타임스탬프 | 예 | 요청 타임스탬프입니다. 예: [27/Jun/2014:09:11:47 -0700] |
5 | 요청 쿼리 문자열 | 예 | 요청의 첫 번째 줄로, 메서드, 경로, HTTP 버전을 포함합니다. 예: GET / HTTP/1.1 |
6 | HTTP 상태 코드 | 예 | 반환된 HTTP 상태 코드입니다. 예: 200 |
7 | 응답 크기 | 예 | 응답 크기(바이트)입니다. 예: 414 |
8 | 참조자 경로 | 아니요 | 참조자가 없는 경우 로그에는 경로 없이 - 만 포함됩니다. 참조자 경로의 예시: "http://www.example.com/index.html" |
9 | 사용자 에이전트 | 예 | 웹 서버에 브라우저와 운영체제를 확인합니다. 예: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.153 Safari/537.36 |
10 | 호스트 이름 | 예 | 클라이언트에서 App Engine 애플리케이션에 연결하는 데 사용하는 호스트 이름입니다. 예: (1-dot-calm-sylph-602.appspot.com ) |
11 | 벽시계 시간 | 예 | App Engine이 요청에 소비한 총 시간(밀리초 단위)입니다. 애플리케이션 인스턴스를 실행 중인 서버와 클라이언트 사이에서 소비된 시간은 포함되지 않습니다(예: ms=195 ). |
12 | CPU 밀리초 | 예 | 요청을 수행하는 데 필요한 CPU 밀리초입니다. CPU에서 애플리케이션 코드를 실제로 실행하는 데 소비한 밀리초 단위의 시간이며, 1.2GHz Intel x86 CPU를 기준으로 표현됩니다. 실제 사용된 CPU가 이 기준보다 더 빠른 경우 CPU 밀리초는 위에 정의된 실제 시계 시간보다 더 클 수 있습니다. 예: cpu_ms=42 |
13 | 종료 코드 | 아니요 | 인스턴스가 요청을 받은 후 종료되는 경우에만 존재합니다. 형식은 exit_code=XXX 이며, 여기서 XXX 는 인스턴스 종류 이유에 해당하는 3자리 숫자입니다. 종료 코드는 주로 Google에서 문제를 찾아 수정하기 위한 용도로 사용되므로 문서화되지 않았습니다. |
14 | 예상 비용 | 예 | 지원이 중단되었습니다. 요청 1,000개당 추정 비용(USD)입니다. 예: cpm_usd=0.000046 |
15 | 큐 이름 | 아니요 | 사용되는 태스크 큐 이름입니다. 요청이 태스크 큐를 사용한 경우에만 존재합니다. 예: queue_name=default |
16 | 태스크 이름 | 아니요 | 이 요청을 위해 태스크 큐에서 실행된 태스크의 이름입니다. 요청으로 인해 태스크가 큐에 추가된 경우에만 존재합니다. 예: task_name=7287390692361099748 |
17 | 보류 중인 큐 | 아니요 | 요청이 보류 중인 큐에서 어느 정도의 시간을 소비한 경우에만 존재합니다. 로그에 이러한 항목이 많거나 값이 높은 경우 트래픽을 감당하기 위해 더 많은 인스턴스가 필요하다는 의미일 수 있습니다. 예: pending_ms=195 |
18 | 로딩 요청 | 아니요 | 요청이 로딩 요청인 경우에만 존재합니다. 인스턴스를 시작해야 했음을 의미합니다. 이상적으로 인스턴스는 재활용되어 다시 시작되기 전까지 최대한 오래 가동되며 정상 상태를 유지하면서 많은 수의 요청을 처리해야 합니다. 즉, 로그에 이 항목이 많지 않아야 합니다. 예: loading_request=1 |
19 | 인스턴스 | 예 | 요청을 처리하는 인스턴스의 고유 식별자입니다. 예: instance=00c61b117cfeb66f973d7df1b7f4ae1f064d |
20 | 버전 | 예 | 프로덕션 App Engine에 사용되는 현재 App Engine 출시 버전입니다. |
할당량 및 한도
애플리케이션은 다음 로그 관련 할당량의 영향을 받습니다.
- Logs API를 통해 검색되는 로그 데이터
- 로그 수집 할당량 및 보관
검색된 데이터 할당량
Logs API 호출을 통해 하루에 검색되는 로그 데이터 중 처음 100MB는 무료입니다. 100MB를 초과하는 데이터에는 $0.12/GB의 비용이 청구됩니다.
로그 수집 할당량
App Engine 앱의 로깅은 Google Cloud Observability에서 제공됩니다. 로깅 비용 및 한도에 대한 자세한 내용은 Google Cloud Observability 가격 책정을 참조하세요. 로그를 장기간 저장하려면 Google Cloud Observability에서 Cloud Storage, BigQuery, Pub/Sub로 로그를 내보내면 됩니다.