Plattformlogs verwenden

Auf dieser Seite wird beschrieben, wie du Plattformprotokolle, die von der Live Stream API generiert werden, im Rahmen von Cloud Logging verwendest. Die Live Stream API verwendet den Dienstnamen der Logging API (livestream.googleapis.com), um kanalbezogene Aktivitäten zu protokollieren.

Hinweise

Plattform-Logging aktivieren

Standardmäßig sind die livestream.googleapis.com/channel_activities-Plattformprotokolle für die Live Stream API deaktiviert. Wenn Sie die Protokolle aktivieren möchten, müssen Sie beim Erstellen oder Aktualisieren der Kanalressource eine Schweregradstufe angeben.

Wenn Sie die Protokolle aktivieren möchten, fügen Sie dem JSON-Anfragetext der Methode projects.locations.channels.create oder projects.locations.channels.patch das folgende Feld hinzu:

   "logConfig": {
     "logSeverity": "SEVERITY_LEVEL"
   },
  

Dabei kann SEVERITY_LEVEL für folgendes stehen:

  • OFF
  • DEBUG
  • INFO
  • WARNING
  • ERROR

Nachdem Sie einen Schweregrad für einen Channel ausgewählt haben, werden nur die Plattformprotokolle mit einem Schweregrad protokolliert, der mindestens dem ausgewählten Schweregrad entspricht. Wenn der Schweregrad beispielsweise WARNING ist, werden nur Logs mit den Schweregraden WARNING und ERROR protokolliert. Wenn der Schweregrad INFO ist, werden Logs aller Schweregrade mit Ausnahme von DEBUG protokolliert.

Weitere Informationen zu den Schweregraden von Protokollen finden Sie unter LogSeverity.

Plattformprotokolle ansehen

So rufen Sie Plattformprotokolle auf:

Console

So rufen Sie Plattformprotokolle in der Google Cloud Console auf:

  1. Rufen Sie den Log-Explorer auf:

    Zu „Log-Explorer“

  2. Wählen Sie das entsprechende Google Cloud-Projekt aus.

  3. Geben Sie im Feld Abfrage den folgenden Abfragebefehl ein:

    resource.labels.channel_id=CHANNEL_ID
    resource.labels.location=LOCATION
    logName="projects/PROJECT_ID/logs/livestream.googleapis.com%2Fchannel_activities"
    

    Dabei gilt:

    • CHANNEL_ID ist die ID des Kanals, den Sie debuggen oder überwachen möchten. Beispiel: my-channel

    • LOCATION ist der Speicherort des Kanals, den Sie debuggen oder überwachen möchten. Beispiel: us-central1

    • PROJECT_ID ist die ID des Projekts, das den Kanal enthält, den Sie debuggen oder überwachen möchten. Beispiel: my-project

  4. Klicken Sie auf Abfrage ausführen.

Weitere Informationen zum Log-Explorer finden Sie unter Log-Explorer – Übersicht und Log-Explorer verwenden.

gcloud

Das gcloud-Befehlszeilentool bietet eine Befehlszeilenschnittstelle für Cloud Logging.

Führen Sie den folgenden Befehl aus, um die channel_activities-Protokolle für Ihr Projekt aufzurufen:

gcloud logging read "logName:projects/PROJECT_ID/logs/livestream.googleapis.com%2Fchannel_activities" --project=PROJECT_ID

Dabei ist PROJECT_ID die ID Ihres Google Cloud-Projekts.

Weitere Informationen zur Verwendung des gcloud-Tools mit Cloud Logging finden Sie unter gcloud logging.

Plattform-Logs verwenden

In diesem Abschnitt wird beschrieben, wie du bestimmte Plattformprotokolle für die Live Stream API verwendest und auswertest.

eventStateChange

eventStateChange-Protokolle werden generiert, wenn sich der Status eines Kanalereignisses ändert. Die Schwere eines eventStateChange-Logs ist ERROR, wenn der neue Status des Kanalereignisses FAILED ist. Andernfalls ist der Schweregrad eines eventStateChange-Logs INFO.

Im Folgenden finden Sie ein Beispiel für ein eventStateChange-Protokoll:

{
  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-Logs werden generiert, wenn der Eingabestream einen SCE35-Befehl empfängt. Der Schweregrad für ein scte35CommandReceived-Log ist INFO.

Nur durationFlag, breakDuration, spliceTime und outOfNetworkIndicator werden verarbeitet. Wenn spliceTime fehlt, wird der SCTE35-Befehl sofort ausgeführt. Alle anderen Felder werden ignoriert.

Im Folgenden finden Sie ein Beispiel für ein scte35CommandReceived-Protokoll:

{
  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-Protokolle werden generiert, wenn sich der Streamingstatus eines Kanals ändert. Die Schwere eines streamingStateChange-Logs ist ERROR, wenn der neue Status des Kanals STREAMING_ERROR ist. Andernfalls ist der Schweregrad eines streamingStateChange-Logs INFO.

Im folgenden Beispiel für ein streamingStateChange-Protokoll ist der vorherige Status STREAMING_ERROR und der neue Status 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"
  ...
}

Sie können im Feld Abfrage des Log-Explorers zusätzliche Befehle hinzufügen, um die angezeigten Logs einzugrenzen.

Fügen Sie den folgenden Befehl hinzu, um alle streamingStateChange-Protokolle anzuzeigen, bei denen der neue Status STREAMING ist:

jsonPayload.streamingStateChange.newState="STREAMING"

Fügen Sie den folgenden Befehl hinzu, um nur streamingStateChange-Protokolle anzuzeigen:

jsonPayload.streamingStateChange.newState:*

streamingError

streamingError-Protokolle werden generiert, wenn bei einem Kanal ein streamingbezogener Fehler auftritt. Der Schweregrad eines streamingError-Logs ist ERROR.

Im folgenden Beispiel für ein streamingError-Log wurde der Live Stream API die Berechtigung zum Hochladen von Ausgabedateien in den angegebenen Cloud Storage-Bucket verweigert:

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

Dieser Fehler kann auch auftreten, wenn der angegebene Cloud Storage-Bucket nicht vorhanden ist.

Wenn streamingError.message die Meldung This is due to an internal error. If the error persists, please contact support team anzeigt, kopieren Sie den Inhalt des Protokolls und senden Sie es zur Fehlerbehebung an das Supportteam.

inputAccept

inputAccept-Protokolle werden generiert, wenn ein Eingabestream erfolgreich mit dem Eingabeendpunkt der Live Stream API verbunden wurde. Der Schweregrad der inputAccept-Protokolle ist INFO.

Das Feld inputStreamProperty in einem inputAccept-Log enthält die folgenden Informationen zu den Video- und Audio-Unterstreams des Eingabestreams:

Videostreams
  • index
  • Codec
  • Framerate
  • Auflösung
Audiostreams
  • index
  • Kanalanzahl
  • Kanallayout
  • Codec-Informationen

Mit inputAccept-Protokollen können Sie das Format und den Annahmestatus des Eingabestreams prüfen:

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

Fügen Sie im Log-Explorer im Feld Abfrage den folgenden Befehl hinzu, um nur inputAccept-Logs für einen bestimmten Stream anzuzeigen:

jsonPayload.inputAccept.streamId="STREAM_ID"

Dabei ist STREAM_ID die eindeutige Kennung für einen Stream, der im URI des Eingabeendpunkts enthalten ist.

inputError

inputError-Protokolle werden generiert, wenn ein Eingabestream von der Live Stream API abgelehnt wird. Der Schweregrad für ein inputError-Log ist ERROR.

Im folgenden Beispiel für ein inputError-Protokoll wurde ein Eingabestream an einen Kanal gesendet, der noch nicht gestartet wurde:

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

Im folgenden Beispiel für ein inputError-Protokoll wurde ein doppelter Eingabestream an einen Kanal gesendet, der bereits gestreamt wird:

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

Fügen Sie im Log-Explorer im Feld Abfrage den folgenden Befehl hinzu, um nur inputError-Logs für einen bestimmten Stream anzuzeigen:

jsonPayload.inputError.streamId="STREAM_ID"

Dabei ist STREAM_ID die eindeutige Kennung für einen Stream, der im URI des Eingabeendpunkts enthalten ist.

inputDisconnect

inputDisconnect-Protokolle werden generiert, wenn die Verbindung der Eingabestreams zur Live Stream API getrennt wird. Mit inputDisconnect-Logs kannst du nach unerwarteten Unterbrechungen von Livestreams suchen. Der Schweregrad für ein inputDisconnect-Log ist INFO.

Im Folgenden finden Sie ein Beispiel für ein inputDisconnect-Protokoll:

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