Cette page explique comment utiliser les journaux de la plate-forme générés par l'API Live Stream dans le cadre 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 à la chaîne.
Avant de commencer
- Assurez-vous de disposer des autorisations et rôles IAM appropriés pour afficher et gérer les journaux.
Activer la journalisation de la plate-forme
Par défaut, les journaux de la plate-forme livestream.googleapis.com/channel_activities
pour l'API Live Stream sont désactivés. Pour activer les journaux, vous devez spécifier un niveau de gravité 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 de la méthode projects.locations.channels.create
ou projects.locations.channels.patch
:
"logConfig": { "logSeverity": "SEVERITY_LEVEL" },
où SEVERITY_LEVEL
est l'un des éléments suivants :
OFF
DEBUG
INFO
WARNING
ERROR
Une fois que vous avez choisi un niveau de gravité des journaux pour un canal, seuls les journaux de la plate-forme avec un niveau de gravité supérieur ou égal au niveau de gravité choisi sont consignés.
Par exemple, si le niveau de gravité est WARNING
, seuls les journaux avec le niveau de gravité WARNING
et ERROR
sont consignés. Si le niveau de gravité est INFO
, les journaux de tous les 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 la plate-forme dans la console Google Cloud:
Accédez à l'explorateur de journaux :
Sélectionnez le projet Google Cloud approprié.
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
correspond à l'ID de la chaîne que vous souhaitez déboguer ou surveiller. Exemple :my-channel
.LOCATION
correspond à l'emplacement du canal que vous souhaitez déboguer ou surveiller. Exemple :us-central1
.PROJECT_ID
correspond à l'ID du projet contenant le canal que vous souhaitez déboguer ou surveiller. Exemple :my-project
.
Cliquez sur Exécuter la requête.
Pour en savoir plus sur l'explorateur de journaux, consultez les pages Présentation de l'explorateur de journaux et Utiliser 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
où PROJECT_ID
correspond à l'ID de votre projet Google Cloud.
Pour en savoir plus sur l'utilisation de l'outil gcloud avec Cloud Logging, consultez gcloud logging
.
Utiliser les journaux de la plate-forme
Cette section explique comment utiliser et interpréter les journaux de plate-forme spécifiques pour l'API Live Stream.
eventStateChange
Les journaux eventStateChange
sont générés lorsque l'état d'un événement de canal change. Le niveau de gravité d'un journal eventStateChange
est ERROR
lorsque le nouvel état de l'événement de canal est FAILED
. Sinon, le niveau de gravité d'un journal 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 commande SCTE35. Le niveau de gravité d'un journal scte35CommandReceived
est INFO
.
Seuls durationFlag
, breakDuration
, spliceTime
et outOfNetworkIndicator
sont traités. Lorsque spliceTime
est manquant, la commande SCTE35 est exécutée immédiatement. Tous les autres champs sont traités comme des opérations sans effet.
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 outOfNetworkIndicator: 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'une chaîne change. Le niveau de gravité d'un journal streamingStateChange
est ERROR
lorsque le nouvel état du canal est STREAMING_ERROR
. Sinon, le niveau de gravité d'un journal streamingStateChange
est INFO
.
Voici un exemple de journal streamingStateChange
où l'état précédent 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 les journaux affichés.
Ajoutez la commande suivante pour afficher tous les journaux streamingStateChange
dont l'é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'une chaîne rencontre une erreur liée au streaming. Le niveau de gravité d'un journal streamingError
est ERROR
.
Vous trouverez ci-dessous un exemple de journal streamingError
où l'API Live Stream n'a pas été autorisée à 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 le contenu du journal et envoyez-le à l'équipe d'assistance pour résoudre le problème.
inputAccept
Les journaux inputAccept
sont générés lorsqu'un flux d'entrée est correctement connecté au point de terminaison d'entrée de l'API Live Stream. Le niveau de gravité des journaux inputAccept
est INFO
.
Le champ inputStreamProperty
d'un journal inputAccept
inclut les informations suivantes sur les sous-flux vidéo et audio du flux d'entrée:
Flux vidéo |
|
Flux audio |
|
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 Query (Requête) de l'explorateur de journaux pour afficher uniquement les journaux inputAccept
d'un flux spécifique:
jsonPayload.inputAccept.streamId="STREAM_ID"
où STREAM_ID
est l'identifiant unique d'un flux inclus dans l'URI du point de terminaison d'entrée.
inputError
Les journaux inputError
sont générés lorsqu'un flux d'entrée est rejeté par l'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
où un flux d'entrée en double a été envoyé à une chaîne 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 Query (Requête) de l'explorateur de journaux pour n'afficher que les journaux inputError
d'un flux spécifique:
jsonPayload.inputError.streamId="STREAM_ID"
où STREAM_ID
est l'identifiant unique d'un flux inclus dans l'URI du point de terminaison d'entrée.
inputDisconnect
Les journaux inputDisconnect
sont générés lorsque les flux d'entrée sont déconnectés de l'API Live Stream. Vous pouvez utiliser les journaux inputDisconnect
pour rechercher des déconnexions inattendues des diffusions en direct. Le niveau de gravité d'un journal 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" ... }