태스크 로그 작성

이 문서에서는 태스크 로그를 작성하는 방법과 태스크 로그가 있는 Batch 작업을 만들고 실행하는 방법을 설명합니다.

작업에 로깅이 사용 설정된 경우 런타임 중에 작업의 실행 가능 항목이 인쇄하는 메시지에서 태스크 로그가 생성됩니다. 태스크 로그를 작성하도록 실행 가능 항목을 구성하면 Cloud Logging에 커스텀 정보를 표시할 수 있으므로 작업을 보다 쉽게 분석하고 문제를 해결할 수 있습니다. 로그에 대한 자세한 내용은 로그를 사용하여 작업 분석을 참조하세요.

시작하기 전에

태스크 로그가 있는 작업 만들기 및 실행

태스크 로그가 필요한 작업을 만들고 실행하려면 작업을 만들 때 다음을 수행합니다.

  1. 작업의 로그를 사용 설정합니다. 이렇게 하면 작업에 대해 기록된 모든 로그를 생성할 수 있습니다.
  2. 작업에 포함할 각 태스크 로그에 대해 태스크 로그를 실행 가능 항목에 기록하는 명령어를 추가합니다. 작업이 실행되면 태스크 로그를 작성하는 명령어가 실행될 때마다 태스크 로그가 생성됩니다.

    태스크 로그를 작성하는 방법은 이 문서의 태스크 로그 작성을 참조하세요.

태스크 로그 작성

태스크 로그는 작업의 실행 가능 항목이 런타임 중에 표준 출력(stdout) 스트림 또는 표준 오류(stderr) 스트림에 출력하는 모든 콘텐츠에 대해 기록됩니다. 예를 들어 echo 명령어를 사용하여 태스크 로그를 작성할 수 있습니다. 결과로 생성되는 태스크 로그의 구조는 인쇄된 콘텐츠의 형식을 지정한 방법에 따라 다릅니다. 특히 다음 옵션 중 하나를 사용하여 각 태스크 로그를 작성할 수 있습니다.

문자열을 출력하여 구조화되지 않은 로그 작성

구조화되지 않은 로그를 사용하면 로그의 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 객체를 출력하여 구조화된 로그 작성

구조화된 로그를 사용하면 다음을 정의할 수 있습니다.

구조화된 로그를 작성하려면 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_1CUSTOM_FIELD_2: 태스크 로그의 커스텀 필드 이름입니다(예: custom_field_1custom_field_2).
  • CUSTOM_VALUE_1CUSTOM_VALUE_2: 태스크 로그의 커스텀 필드 값으로, 다양한 데이터 유형일 수 있으며 따옴표가 필요할 수 있습니다(예: "the first custom field"2).
  • PROJECT_ID: 프로젝트의 프로젝트 ID입니다.

이 예시 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: ...

다음 단계