이 페이지에서는 Cloud Logging의 일부로 Live Stream API로 생성된 플랫폼 로그를 사용하는 방법을 설명합니다. Live Stream API는 Logging API 서비스 이름 livestream.googleapis.com
을 사용하여 채널 관련 활동을 로깅합니다.
시작하기 전에
- 로그를 보고 관리할 수 있는 올바른 IAM 권한 및 역할이 있는지 확인합니다.
플랫폼 로깅 활성화
기본적으로 Live Stream API의 livestream.googleapis.com/channel_activities
플랫폼 로그는 비활성화됩니다. 로그를 활성화하려면 채널 리소스를 만들거나 업데이트할 때 심각도 수준을 지정해야 합니다.
로그를 활성화하려면 projects.locations.channels.create
또는 projects.locations.channels.patch
메서드의 요청 JSON 본문에 다음 필드를 추가합니다.
"logConfig": { "logSeverity": "SEVERITY_LEVEL" },
여기서 SEVERITY_LEVEL
은 다음 중 하나입니다.
OFF
DEBUG
INFO
WARNING
ERROR
채널의 로그 심각도 수준을 선택하면 선택한 심각도 수준 이상의 플랫폼 로그만 로깅됩니다.
예를 들어 심각도 수준이 WARNING
이면 심각도 수준이 WARNING
및 ERROR
인 로그만 로깅됩니다. 심각도 수준이 INFO
이면 DEBUG
를 제외한 모든 심각도 수준의 로그가 로깅됩니다.
로그 심각도 수준에 대한 자세한 내용은 LogSeverity를 참조하세요.
플랫폼 로그 보기
플랫폼 로그를 보려면 다음 안내를 따르세요.
콘솔
Google Cloud 콘솔에서 플랫폼 로그를 보려면 다음 안내를 따르세요.
로그 탐색기로 이동합니다.
적합한 Google Cloud 프로젝트를 선택합니다.
쿼리 필드에 다음 쿼리 명령어를 입력합니다.
resource.labels.channel_id=CHANNEL_ID resource.labels.location=LOCATION logName="projects/PROJECT_ID/logs/livestream.googleapis.com%2Fchannel_activities"
각 항목의 의미는 다음과 같습니다.
CHANNEL_ID
는 디버깅하거나 모니터링할 채널의 ID입니다. 예를 들면my-channel
입니다.LOCATION
은 디버깅하거나 모니터링할 채널의 위치입니다. 예를 들면us-central1
입니다.PROJECT_ID
는 디버깅하거나 모니터링할 채널이 포함된 프로젝트의 ID입니다. 예를 들면my-project
입니다.
쿼리 실행을 클릭합니다.
gcloud
gcloud 명령줄 도구는 Cloud Logging에 대한 명령줄 인터페이스를 제공합니다.
프로젝트의 channel_activities
로그를 보려면 다음 명령어를 실행합니다.
gcloud logging read "logName:projects/PROJECT_ID/logs/livestream.googleapis.com%2Fchannel_activities" --project=PROJECT_ID
PROJECT_ID
는 Google Cloud 프로젝트의 ID입니다.
Cloud Logging에서 gcloud 도구를 사용하는 방법에 대한 자세한 내용은 gcloud logging
을 참조하세요.
플랫폼 로그 사용
이 섹션에서는 Live Stream API에 대한 특정 플랫폼 로그를 사용하고 해석하는 방법을 설명합니다.
eventStateChange
eventStateChange
로그는 채널 이벤트의 상태가 변경되면 생성됩니다. 채널 이벤트의 새 상태가 FAILED
인 경우 eventStateChange
로그의 심각도 수준은 ERROR
입니다. 그렇지 않은 경우 eventStateChange
로그의 심각도 수준은 INFO
입니다.
다음은 eventStateChange
로그의 예시입니다.
{ jsonPayload: { @type: "type.googleapis.com/google.cloud.video.livestream.logging.v1.ChannelActivity" eventStateChange: { eventId: "my-ad-break" newState: "SCHEDULED" previousState: "PENDING" } message: "State of event "my-ad-break" changed from "PENDING" to "SCHEDULED"." } ... severity: "INFO" ... }
scte35CommandReceived
입력 스트림이 SCTE35 명령어를 수신하면 scte35CommandReceived
로그가 생성됩니다. scte35CommandReceived
로그의 심각도 수준은 INFO
입니다.
durationFlag
, breakDuration
, spliceTime
, outOfNetworkIndicator
만 처리됩니다. spliceTime
이 없으면 SCTE35 명령어가 즉시 실행됩니다. 다른 모든 필드는 노옵스(no-ops)로 처리됩니다.
다음은 scte35CommandReceived
로그의 예시입니다.
{ jsonPayload: { @type: "type.googleapis.com/google.cloud.video.livestream.logging.v1.ChannelActivity" scte35CommandReceived: { spliceInfoSection: { ptsAdjustment: "123456789" spliceInsert: { availNum: 0 availsExpected: 0 breakDuration: null componentCount: 0 components: [0] durationFlag: false outOfNetworkIndicator: true programSpliceFlag: true spliceEventCancelIndicator: false spliceEventId: 123456789 spliceImmediateFlag: true spliceTime: null uniqueProgramId: 5 } } } message: "Received inband SCTE35 command, eventID=123456789." } ... severity: "INFO" ... }
streamingStateChange
streamingStateChange
로그는 채널의 스트리밍 상태가 변경될 때 생성됩니다. 채널의 새 상태가 STREAMING_ERROR
인 경우 streamingStateChange
로그의 심각도 수준은 ERROR
입니다. 그렇지 않은 경우 streamingStateChange
로그의 심각도 수준은 INFO
입니다.
다음은 이전 상태가 STREAMING_ERROR
이고 새 상태가 STREAMING
인 streamingStateChange
로그의 예시입니다.
{ jsonPayload: { @type: "type.googleapis.com/google.cloud.video.livestream.logging.v1.ChannelActivity" message: "streaming state of channel "CHANNEL_ID" changes from "STREAMING_ERROR" to "STREAMING"" streamingStateChange: { newState: "STREAMING" previousState: "STREAMING_ERROR" ... type: "livestream.googleapis.com/Channel" } severity: "INFO" ... }
로그 탐색기 쿼리 필드에 명령어를 추가하여 표시되는 로그의 범위를 좁힐 수 있습니다.
다음 명령어를 추가하여 새 상태가 STREAMING
인 모든 streamingStateChange
로그를 표시합니다.
jsonPayload.streamingStateChange.newState="STREAMING"
다음 명령어를 추가하여 streamingStateChange
로그만 표시합니다.
jsonPayload.streamingStateChange.newState:*
streamingError
streamingError
로그는 채널에서 스트리밍 관련 오류를 발견하면 생성됩니다. streamingError
로그의 로그 심각도 수준은 ERROR
입니다.
다음은 지정된 Cloud Storage 버킷에 출력 파일을 업로드하기 위해 Live Stream API에 대한 권한이 거부된 streamingError
로그의 예시입니다.
{ jsonPayload: { @type: "type.googleapis.com/google.cloud.video.livestream.logging.v1.ChannelActivity" message: "A live streaming encounters an error." streamingError: { error: { ... message: "Permission denied to access the Cloud Storage bucket "STORAGE_BUCKET_NAME"" ... severity: "ERROR" ... }
지정된 Cloud Storage 버킷이 없는 경우에도 이 오류가 발생할 수 있습니다.
streamingError.message
가 This is due to an internal
error. If the error persists, please contact support team
메시지를 표시하면 로그 콘텐츠를 복사하고 문제 해결을 위해 지원팀으로 보냅니다.
inputAccept
입력 스트림이 Live Stream API 입력 엔드포인트에 성공적으로 연결되면 inputAccept
로그가 생성됩니다. inputAccept
로그의 심각도 수준은 INFO
입니다.
inputAccept
로그의 inputStreamProperty
필드에는 입력 스트림의 동영상 및 오디오 하위 스트림에 대한 다음 정보가 포함됩니다.
동영상 스트림 |
|
오디오 스트림 |
|
inputAccept
로그를 사용하여 입력 스트림의 형식 및 승인 상태를 확인할 수 있습니다.
{ jsonPayload: { @type: "type.googleapis.com/google.cloud.video.livestream.logging.v1.ChannelActivity" inputAccept: { inputAttachment: "input-primary" inputStreamProperty: { audioStreams: [ 0: { audioFormat: { channelCount: 2 channelLayout: [ 0: "fl" 1: "fr" ] codec: "aac" } index: 1 } ] videoStreams: [ 0: { videoFormat: { codec: "h264" frameRate: 60 heightPixels: 720 widthPixels: 1280 ... streamId: "STREAM_ID" } message: "Input stream "STREAM_ID" is accepted by channel "CHANNEL_ID" for input attachment "input-primary"" } ... severity: "INFO" ... }
로그 탐색기 쿼리 필드에 다음 명령어를 추가하여 특정 스트림의 inputAccept
로그만 표시합니다.
jsonPayload.inputAccept.streamId="STREAM_ID"
여기서 STREAM_ID
는 입력 엔드포인트 URI에 포함된 스트림의 고유 식별자입니다.
inputError
inputError
로그는 Live Stream API에서 입력 스트림을 거부할 때 생성됩니다. inputError
로그의 심각도 수준은 ERROR
입니다.
다음은 입력 스트림이 아직 시작되지 않은 채널로 전송된 inputError
로그의 예시입니다.
{ jsonPayload: { @type: "type.googleapis.com/google.cloud.video.livestream.logging.v1.ChannelActivity" inputError: { error: { ... message: "The channel has not been started yet" } streamId: "STREAM_ID" ... severity: "ERROR" ... }
다음은 중복 입력 스트림이 이미 스트리밍 중인 채널로 전송된 inputError
로그의 예시입니다.
{ jsonPayload: { @type: "type.googleapis.com/google.cloud.video.livestream.logging.v1.ChannelActivity" inputError: { error: { code: 9 message: "input stream "STREAM_ID" has been accepted. Please verify if another input stream has been streaming to the same endpoint." } streamId: "STREAM_ID" ... severity: "ERROR" ... }
로그 탐색기 쿼리 필드에 다음 명령어를 추가하여 특정 스트림의 inputError
로그만 표시합니다.
jsonPayload.inputError.streamId="STREAM_ID"
여기서 STREAM_ID
는 입력 엔드포인트 URI에 포함된 스트림의 고유 식별자입니다.
inputDisconnect
inputDisconnect
로그는 입력 스트림이 Live Stream API에서 연결 해제될 때 생성됩니다. inputDisconnect
로그를 사용하여 예기치 않은 실시간 스트림 연결 해제를 확인할 수 있습니다. inputDisconnect
로그의 심각도 수준은 INFO
입니다.
다음은 inputDisconnect
로그의 예시입니다.
{ jsonPayload: { @type: "type.googleapis.com/google.cloud.video.livestream.logging.v1.ChannelActivity" inputDisconnect: { inputAttachment: "input-primary" streamId: "STREAM_ID" } message: "Input stream "STREAM_ID" is disconnected by channel "CHANNEL_ID" for input attachment "input-primary"" ... severity: "INFO" ... }