이 문서에서는 태스크 로그를 작성하는 방법과 태스크 로그가 있는 Batch 작업을 만들고 실행하는 방법을 설명합니다.
작업에 로깅이 사용 설정된 경우 런타임 중에 작업의 실행 가능 항목이 인쇄하는 메시지에서 태스크 로그가 생성됩니다. 태스크 로그를 작성하도록 실행 가능 항목을 구성하면 Cloud Logging에 커스텀 정보를 표시할 수 있으므로 작업을 보다 쉽게 분석하고 문제를 해결할 수 있습니다. 로그에 대한 자세한 내용은 로그를 사용하여 작업 분석을 참조하세요.
시작하기 전에
- Batch를 사용한 적이 없으면 Batch 시작하기를 검토하고 프로젝트 및 사용자 기본 요건을 완료하여 Batch를 사용 설정하세요.
-
로그를 작성하는 작업을 만드는 데 필요한 권한을 얻으려면 관리자에게 다음 IAM 역할을 부여해 달라고 요청하세요.
- 작업 만들기:
-
프로젝트에 대한 Batch 작업 편집자(
roles/batch.jobsEditor
) -
기본적으로 기본 Compute Engine 서비스 계정인 작업의 서비스 계정에 대한 서비스 계정 사용자(
roles/iam.serviceAccountUser
)
-
프로젝트에 대한 Batch 작업 편집자(
- 로그 보기: 프로젝트에 대한 로그 뷰어(
roles/logging.viewer
)
역할 부여에 대한 자세한 내용은 액세스 관리를 참조하세요.
- 작업 만들기:
태스크 로그가 있는 작업 만들기 및 실행
태스크 로그가 필요한 작업을 만들고 실행하려면 작업을 만들 때 다음을 수행합니다.
- 작업의 로그를 사용 설정합니다. 이렇게 하면 작업에 대해 기록된 모든 로그를 생성할 수 있습니다.
작업에 포함할 각 태스크 로그에 대해 태스크 로그를 실행 가능 항목에 기록하는 명령어를 추가합니다. 작업이 실행되면 태스크 로그를 작성하는 명령어가 실행될 때마다 태스크 로그가 생성됩니다.
태스크 로그를 작성하는 방법은 이 문서의 태스크 로그 작성을 참조하세요.
태스크 로그 작성
태스크 로그는 작업의 실행 가능 항목이 런타임 중에 표준 출력(stdout
) 스트림 또는 표준 오류(stderr
) 스트림에 출력하는 모든 콘텐츠에 대해 기록됩니다. 예를 들어 echo
명령어를 사용하여 태스크 로그를 작성할 수 있습니다.
결과로 생성되는 태스크 로그의 구조는 인쇄된 콘텐츠의 형식을 지정한 방법에 따라 다릅니다. 특히 다음 옵션 중 하나를 사용하여 각 태스크 로그를 작성할 수 있습니다.
문자열을 출력하여 구조화되지 않은 로그를 작성합니다. 구조화되지 않은 로그는 간단하며 로그의
textPayload
필드만 정의할 수 있습니다.JSON을 출력하여 구조화된 로그를 작성합니다. 구조화된 로그에는 일부 표준 로그 필드, 커스텀 필드, 커스텀 상태 이벤트를 포함하여 여러 필드를 정의할 수 있는 JSON 형식이 필요합니다.
예를 들어 구조화된 태스크 로그를 사용하여 로그의 심각도를 정의할 수 있습니다. 이 심각도를 작업의 로그를 볼 때 필터로 사용할 수 있습니다.
문자열을 출력하여 구조화되지 않은 로그 작성
구조화되지 않은 로그를 사용하면 로그의 textPayload
필드에 표시되는 문자열인 메시지를 정의할 수 있습니다.
구조화되지 않은 로그를 작성하려면 다음 섹션에 표시된 대로 형식이 지정되지 않은 문자열을 출력합니다.
구조화되지 않은 로그 예시
예를 들어 다음 문자열이 포함된 태스크 로그가 필요하다고 가정해 보겠습니다.
MESSAGE
이 예시 문자열을 출력하면 다음과 비슷한 태스크 로그가 생성됩니다.
insertId: ...
labels: ...
logName: projects/PROJECT_ID/logs/batch_task_logs
receiveTimestamp: ...
resource: ...
severity: INFO
textPayload: MESSAGE
timestamp: ...
다음을 바꿉니다.
MESSAGE
: 태스크 로그의 목적을 요약하는 문자열인 메시지입니다(예:The summary for a task log.
).PROJECT_ID
: 프로젝트의 프로젝트 ID입니다.
문자열 출력
실행 가능한 항목에 다음 echo
명령어를 포함하는 등 다양한 메서드를 사용하여 문자열을 출력할 수 있습니다.
echo MESSAGE
echo
명령어를 사용하여 구조화되지 않은 태스크 로그를 작성하는 작업의 포괄적인 예시는 기본 작업 만들기 및 실행을 참조하세요.
JSON 객체를 출력하여 구조화된 로그 작성
구조화된 로그를 사용하면 다음을 정의할 수 있습니다.
- Cloud Logging 에이전트에서 지원하는 표준 필드
- 커스텀 필드
- 커스텀 상태 이벤트
구조화된 로그를 작성하려면 JSON 객체를 출력합니다. 다음 섹션에서는 일부 표준 필드와 커스텀 필드를 사용하여 로그를 정의하는 방법을 보여줍니다. 커스텀 상태 이벤트로 로그를 정의하는 방법을 알아보려면 커스텀 상태 이벤트 구성도 참조하세요.
구조화된 로그 예시
예를 들어 메시지, 심각도, 2개의 커스텀 필드를 정의하는 다음 JSON 객체에 있는 정보가 포함된 태스크 로그가 필요하다고 가정해 보겠습니다.
{
"message": "MESSAGE"
"severity": "SEVERITY"
"CUSTOM_FIELD_1": CUSTOM_VALUE_1
"CUSTOM_FIELD_2": CUSTOM_VALUE_2
}
이 JSON 객체를 출력하면 다음과 비슷한 태스크 로그가 생성됩니다.
insertId: ...
jsonPayload:
"CUSTOM_FIELD_1": CUSTOM_VALUE_1
"CUSTOM_FIELD_2": CUSTOM_VALUE_2
message: MESSAGE
labels: ...
logName: projects/PROJECT_ID/logs/batch_task_logs
receiveTimestamp: ...
resource: ...
severity: SEVERITY
timestamp: ...
다음을 바꿉니다.
MESSAGE
: 태스크 로그의 목적을 요약하는 문자열인 메시지입니다(예:The summary for a task log.
).SEVERITY
: 작업의 로그를 볼 때 필터로 사용할 수 있는 로그의 심각도입니다. 심각도는 첫 글자만 대문자인 문자열로 변환되는LogSeverity
enum 중 하나여야 합니다. 예를 들어ERROR
enum의 경우Error
를 지정합니다.CUSTOM_FIELD_1
및CUSTOM_FIELD_2
: 태스크 로그의 커스텀 필드 이름입니다(예:custom_field_1
및custom_field_2
).CUSTOM_VALUE_1
및CUSTOM_VALUE_2
: 태스크 로그의 커스텀 필드 값으로, 다양한 데이터 유형일 수 있으며 따옴표가 필요할 수 있습니다(예:"the first custom field"
및2
).PROJECT_ID
: 프로젝트의 프로젝트 ID입니다.
JSON 객체 출력
이 예시 JSON 객체를 다양한 메서드를 사용하여 인쇄할 수 있습니다. 예를 들어 다음 샘플은 예시 JSON 객체를 출력할 수 있는 몇 가지 방법을 보여줍니다.
echo
명령어를 사용하여 해당 문자열을 출력합니다.Python을 사용하여 동등한 사전을 출력합니다.
echo 명령어
echo
명령어와 이에 상응하는 문자열을 사용하여 예시 JSON 객체를 출력하려면 실행 가능 항목에 다음 명령어를 포함합니다.
echo '{\"message\":\"MESSAGE\", \"severity\":\"SEVERITY\", \"CUSTOM_FIELD_1\":CUSTOM_VALUE_1, \"CUSTOM_FIELD_2\":CUSTOM_VALUE_2}'
예를 들어 다음 실행 가능 항목을 사용하여 작업을 만들고 실행한다고 가정해 보겠습니다.
"script": {
"text": "echo '{\"message\":\"The message for a structured log.\", \"severity\":\"Error\", \"custom_field_1\":\"the first custom field\", \"custom_field_2\":2}'"
}
그러면 결과로 생성되는 태스크 로그는 다음과 비슷합니다.
insertId: ...
jsonPayload:
custom_field_1: the first custom field
custom_field_2: 2
message: The summary for a structured task log with error severity.
labels: ...
logName: projects/PROJECT_ID/logs/batch_task_logs
receiveTimestamp: ...
resource: ...
severity: ERROR
timestamp: ...
Python
Python 및 이에 상응하는 사전을 사용하여 예시 JSON 객체를 출력하려면 실행 가능 항목에 다음 샘플을 포함합니다.
#!/usr/bin/env python3
import json
entry = dict(
severity="SEVERITY",
message="MESSAGE",
CUSTOM_FIELD_1=CUSTOM_VALUE_1,
CUSTOM_FIELD_2=CUSTOM_VALUE_2,
)
print(json.dumps(entry))
예를 들어 다음 실행 가능 항목을 사용하여 작업을 만들고 실행한다고 가정해 보겠습니다.
"script": {
"text": "#!/usr/bin/env python3\n\nimport json\n\nentry = dict(\nseverity=\"Error\",\nmessage=\"The summary for a structured task log with error severity.\",\ncustom_field_1=\"the first custom field\",\ncustom_field_2=2,\n)\nprint(json.dumps(entry))"
}
그러면 결과로 생성되는 태스크 로그는 다음과 비슷합니다.
insertId: ...
jsonPayload:
custom_field_1: the first custom field
custom_field_2: 2
message: The summary for a structured task log with error severity.
labels: ...
logName: projects/PROJECT_ID/logs/batch_task_logs
receiveTimestamp: ...
resource: ...
severity: ERROR
timestamp: ...
다음 단계
- 로그 형식 지정에 대한 자세한 내용은 Cloud Logging 문서의 구조화된 로깅을 참조하세요.
- 커스텀 상태 이벤트를 포함하는 구조화된 태스크 로그 작성 방법 알아보기
- 작업의 태스크 로그 확인 방법 알아보기
- 작업 만들기 옵션 자세히 알아보기