Utiliser les journaux de plate-forme

Cette page explique comment utiliser les journaux de plate-forme générés par l'API Live Stream en tant que de Cloud Logging. L'API Live Stream utilise le nom de service de l'API Logging livestream.googleapis.com pour consigner l'activité liée aux canaux

Avant de commencer

Activer la journalisation de la plate-forme

Par défaut, la plate-forme livestream.googleapis.com/channel_activities enregistre L'API Live Stream est désactivée. Pour activer les journaux, vous devez spécifier un lors de la création ou de la mise à jour de la ressource de canal.

Pour activer les journaux, ajoutez le champ suivant au corps JSON de la requête du projects.locations.channels.create ou Méthode projects.locations.channels.patch:

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

SEVERITY_LEVEL est l'un des éléments suivants :

  • OFF
  • DEBUG
  • INFO
  • WARNING
  • ERROR

Une fois que vous avez choisi un niveau de gravité de journalisation pour un canal, seule la plate-forme consigne un niveau de gravité supérieur ou égal au niveau choisi sont consignés. Par exemple, si le niveau de gravité est WARNING, seuls les journaux dont le niveau de gravité est WARNING et ERROR sont enregistrés. Si le niveau de gravité est INFO, les journaux les différents niveaux de gravité, à l'exception de DEBUG, sont consignés.

Pour en savoir plus sur les niveaux de gravité des journaux, consultez la section LogSeverity.

Afficher les journaux de la plate-forme

Pour afficher les journaux de la plate-forme, procédez comme suit:

Console

Pour afficher les journaux de plate-forme dans la console Google Cloud:

  1. Accédez à l'explorateur de journaux :

    Accéder à l'explorateur de journaux

  2. Sélectionnez le projet Google Cloud approprié.

  3. Dans le champ Requête, saisissez la commande de requête suivante:

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

    où :

    • CHANNEL_ID est l'ID de la chaîne que vous souhaitez déboguer ou surveiller. Exemple : my-channel.

    • LOCATION est l'emplacement de la version que vous souhaitez déboguer ou surveiller. Exemple : us-central1.

    • PROJECT_ID est l'ID du projet contenant la version que vous souhaitez déboguer ou surveiller. Exemple : my-project.

  4. Cliquez sur Exécuter la requête.

Pour en savoir plus sur l'explorateur de journaux, consultez Présentation de l'explorateur de journaux et utilisation de l'explorateur de journaux

gcloud

L'outil de ligne de commande gcloud fournit une interface de ligne de commande à Cloud Logging.

Pour afficher les journaux channel_activities de votre projet, exécutez la commande suivante:

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

PROJECT_ID est l'ID de votre projet Google Cloud.

Pour en savoir plus sur l'utilisation de l'outil gcloud avec Cloud Logging, consultez la page gcloud logging

Utiliser les journaux de plate-forme

Cette section explique comment utiliser et interpréter des journaux de plate-forme spécifiques pour API Live Stream.

eventStateChange

Les journaux eventStateChange sont générés lorsque l'état d'un événement de canal des modifications. Le niveau de gravité d'un journal eventStateChange est ERROR lorsque le le nouvel état de l'événement de canal est FAILED. Sinon, le niveau de gravité Le journal de eventStateChange est INFO.

Voici un exemple de journal 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

Les journaux scte35CommandReceived sont générés lorsque le flux d'entrée reçoit une SCTE35. Le niveau de gravité d'un journal scte35CommandReceived est INFO.

Voici un exemple de journal 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
          out0fNetworkIndicator: true
          programSpliceFlag: true
          spliceEventCancelIndicator: false
          spliceEventId: 123456789
          spliceImmediateFlag: true
          spliceTime: null
          uniqueProgramId: 5
        }
      }
    }
    message: "Received inband SCTE35 command, eventID=123456789."
  }
  ...
  severity: "INFO"
  ...
}

streamingStateChange

Les journaux streamingStateChange sont générés lorsque l'état de streaming d'un canal des modifications. Le niveau de gravité d'un journal streamingStateChange est ERROR lorsque le le nouvel état du canal est STREAMING_ERROR. Sinon, le niveau de gravité Le journal de streamingStateChange est INFO.

Voici un exemple de journal streamingStateChange dans lequel la précédente est STREAMING_ERROR et le nouvel état est 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"
  ...
}

Vous pouvez ajouter des commandes supplémentaires dans le champ Requête de l'explorateur de journaux pour affiner la liste des journaux affichés.

Ajoutez la commande suivante pour afficher tous les journaux streamingStateChange dont le nouvel état est STREAMING:

jsonPayload.streamingStateChange.newState="STREAMING"

Ajoutez la commande suivante pour n'afficher que les journaux streamingStateChange:

jsonPayload.streamingStateChange.newState:*

streamingError

Les journaux streamingError sont générés lorsqu'un canal rencontre un problème lié au streaming . Le niveau de gravité d'un journal streamingError est ERROR.

Voici un exemple de journal streamingError où l'API Live Stream était Vous avez refusé l'autorisation d'importer des fichiers de sortie dans le bucket Cloud Storage spécifié:

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

Cette erreur peut également se produire si le bucket Cloud Storage spécifié n'existe pas.

Si streamingError.message affiche le message This is due to an internal error. If the error persists, please contact support team, copiez l'adresse e-mail du journal contenu et envoyez-le à l'équipe d'assistance pour qu'elle puisse résoudre le problème.

inputAccept

inputAccept journaux sont générés lorsqu'un flux d'entrée est connecté au point de terminaison d'entrée de l'API Live Stream. Niveau de gravité des journaux inputAccept est INFO.

Le champ inputStreamProperty d'un journal inputAccept inclut les éléments suivants : des informations sur les sous-flux vidéo et audio du flux d'entrée:

Flux vidéo
  • index
  • codec
  • fréquence d'images
  • resolution
Flux audio
  • index
  • nombre de canaux
  • mise en page de la chaîne
  • informations sur le codec

Vous pouvez utiliser les journaux inputAccept pour vérifier le format et l'état d'acceptation du flux d'entrée:

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

Ajoutez la commande suivante dans le champ Requête de l'explorateur de journaux pour afficher que les journaux inputAccept pour un flux spécifique:

jsonPayload.inputAccept.streamId="STREAM_ID"

STREAM_ID est l'identifiant unique d'un flux inclus dans l'entrée URI du point de terminaison.

inputError

Les journaux inputError sont générés lorsqu'un flux d'entrée est rejeté par API Live Stream. Le niveau de gravité d'un journal inputError est ERROR.

Voici un exemple de journal inputError dans lequel un flux d'entrée a été envoyé à une chaîne qui n'a pas encore commencé:

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

Voici un exemple de journal inputError dans lequel un flux d'entrée en double a été envoyé à une chaîne qui diffuse déjà du contenu en streaming:

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

Ajoutez la commande suivante dans le champ Requête de l'explorateur de journaux pour n'afficher que Journaux inputError pour un flux spécifique:

jsonPayload.inputError.streamId="STREAM_ID"

STREAM_ID est l'identifiant unique d'un flux inclus dans l'entrée URI du point de terminaison.

inputDisconnect

inputDisconnect journaux sont générés lorsque les flux d'entrée sont déconnectés depuis l'API Live Stream. Vous pouvez utiliser les journaux inputDisconnect pour rechercher Déconnexions inattendues de la diffusion en direct. Niveau de gravité pour une inputDisconnect est INFO.

Voici un exemple de journal 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"
  ...
}