プラットフォームのログの使用

このページでは、Cloud Logging の一部として Live Stream API によって生成されたプラットフォーム ログを使用する方法について説明します。Live Stream API は、Logging API サービス名 livestream.googleapis.com を使用して、チャネル関連のアクティビティをログに記録します。

始める前に

プラットフォーム ロギングを有効にする

デフォルトでは、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 の場合、重大度レベルが WARNINGERROR のログのみが記録されます。重大度レベルが INFO の場合、DEBUG を除くすべての重大度レベルのログが記録されます。

ログの重大度の詳細については、LogSeverity をご覧ください。

プラットフォーム ログを表示する

プラットフォーム ログを表示する手順は次のとおりです。

Console

Google Cloud コンソールでプラットフォーム ログを表示するには:

  1. ログ エクスプローラに移動します。

    ログ エクスプローラに移動

  2. 適切な Google Cloud プロジェクトを選択します。

  3. [クエリ] フィールドに次のクエリコマンドを入力します。

    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

  4. [実行] をクリックします。

ログ エクスプローラの詳細については、ログ エクスプローラの概要ログ エクスプローラの使用をご覧ください。

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

scte35CommandReceived ログは、入力ストリームが SCTE35 コマンドを受信したときに生成されます。scte35CommandReceived ログの重大度は INFO です。

処理されるのは durationFlagbreakDurationspliceTimeoutOfNetworkIndicator のみです。spliceTime がない場合、SCTE35 コマンドは直ちに実行されます。その他のフィールドはすべて NoOps として扱われます。

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 です。

次の streamingStateChange ログの例では、以前の状態は STREAMING_ERROR、新しい状態は STREAMING です。

{
  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.messageThis is due to an internal error. If the error persists, please contact support team というメッセージが表示された場合は、ログの内容をコピーしてサポートチームに送信し、トラブルシューティングを行ってください。

inputAccept

inputAccept ログは、入力ストリームが Live Stream API 入力エンドポイントに正常に接続されたときに生成されます。inputAccept ログの重大度は INFO です。

inputAccept ログの inputStreamProperty フィールドには、入力ストリームの動画サブストリームと音声サブストリームに関する次の情報が含まれます。

動画ストリーム
  • index
  • コーデック
  • フレームレート
  • resolution
音声ストリーム
  • index
  • チャネル数
  • チャネル レイアウト
  • codec information

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"
  ...
}