On this page
Real-time logs for Dynamic Ad Insertion (DAI) allow you to export stream-level data in near real time to monitor and troubleshoot serving issues. This article outlines the specifications of log file delivery, specific fields, and known issues.
Log delivery
Log files are delivered to publisher-specific storage buckets in Google Cloud, approximately every 5 minutes.
The bucket name is: gs://gdai-[NETWORK_CODE]
File names are in the form of:
[Log Type]_[Network Code]_[Stream Type]_[Content ID]_[YYYYMMDD]_[HHMMSS]_
[Random Number].gz
Where:
Log Type
: EitherDAIAdServerInteraction
orDAIManifest
orDAIServedBreak
Network Code
: Ad Manager network codeStream Type
: EitherVOD
orLinear
Content ID
: Content source ID for VOD, Asset key for LiveYYMMDD, HHMMSS
: Log generation time in UTCRandom Number
: Random number
Files are gzipped and contain data as double-quoted, comma-separated values conforming to RFC4180. With regard to Section 2, point 5 of RFC4180, which states that "Each field may or may not be enclosed in double quotes", note that all data in the log files is enclosed in double quotes.
Files remain in the bucket for 7 days, after which they are removed.
Manifest delivery log
This log provides information about video stream delivery. The following fields are present:
Field** | Description |
---|---|
timestamp
INTEGER |
UTC timestamp of request (in Unix time) |
entry_id
STRING |
Unique ID for the log entry
There is a current limitation on our system that a log entry may appear more than once. This ID can be used to de-duplicate entries.
|
stream_id
STRING |
Unique ID assigned to every stream (also known as the SAM ID) |
network_code
INTEGER |
Network Code of publisher |
content
INTEGER |
Content source ID |
vid
STRING |
Video ID |
asset_key
STRING |
Asset key of live stream |
manifest_type
STRING |
Type of video manifest:
|
stream_type
STRING |
Type of stream:
|
request_type
STRING |
Type of request:
|
beaconing_type
STRING |
Type of ad beaconing for the stream:
|
http_method
STRING |
Method used in the HTTP request |
user_agent
STRING |
User agent of device |
response_code
INTEGER |
HTTP response code |
response_time
DOUBLE |
Latency of the request (in seconds) |
Served break log
This log provides information about ad breaks that were served to DAI clients. See Served Break log structure for more details and examples on how information is presented in the log.
Field** | Description |
---|---|
timestamp INTEGER |
UTC timestamp of request (in Unix time) |
entry_id STRING |
Unique ID for the log entry There is a current limitation on our system that a log entry may appear more than once. This ID can be used to de-duplicate entries.
|
stream_id STRING |
Unique ID assigned to every stream (also known as the SAM ID) |
network_code STRING |
Network Code of the publisher |
content INTEGER |
Content source ID |
vid STRING |
Video ID |
asset_key STRING |
Asset key of live stream |
break_id STRING |
ID of this served ad break For VOD, this will be a VMAP break ID. Ex: "preroll-1", "midroll-2" For Live, this will be a sequential break number assigned to this break by DAI. Ex: "0000000001", "0000000024" |
expected_break_duration DOUBLE |
The duration that DAI requested ads for based on how long DAI expected the break to last. |
actual_break_duration DOUBLE |
The duration that DAI filled in the content. This is the summed up duration of ads, slate, and underlying content DAI filled in the ad break. |
ads_duration DOUBLE |
The duration of ad media in the ad break. For VOD this also marks the actual duration of the ad break. |
slate_duration DOUBLE |
The duration of slate media in the ad break. |
ads_status STRING |
The status of ad insertion in the ad break. See Served break log structure for more details. |
slate_status STRING |
The status of slate insertion in the ad break. See Served break log structure for more details. |
complete BOOLEAN |
Whether the ad pod has completed. For HLS streams, this means that DAI has inserted in a cue in marker to signal the end of the ad pod. For DASH streams, this means the ad period is closed. |
Served break log structure
DAI served break logs provide information about how DAI serves ad breaks to clients. The following Ads status and Slate status tables present DAI logs information in different ads-stitching scenarios. Learn more about served break logs for live streams.
Ads status
Below is a list of ads statuses and what they indicate.
Ads status | Description |
---|---|
ADS_STATUS_INSERTED |
Ad insertion was successful. |
ADS_STATUS_DROPPED_UNKNOWN |
Ad pod was dropped for an unknown reason. |
ADS_STATUS_ALL_ADS_MISSING |
Ad pod was dropped due to all of the ads in the pod missing. |
ADS_STATUS_TOO_MANY_MIDROLLS |
Ad pod was dropped due to more midroll pods being returned from the ad server than ad breaks to insert them in. |
ADS_STATUS_OUT_OF_WINDOW |
Ad break is partially or fully outside of the stitching window at request time, and will have underlying content stitched in instead of ads. |
ADS_STATUS_DISABLED |
Ads have been disabled for this stream. |
ADS_STATUS_DROPPED_FOR_PREROLL |
This midroll ad pod was dropped due to an ongoing preroll ad break. |
ADS_STATUS_EXPIRED |
Ad pod expired because the ad request did not finish in time to be stitched into the content. |
ADS_STATUS_HOLIDAY |
Ad pod was dropped due to an ongoing ad holiday. |
ADS_STATUS_DROPPED_SLATE_UNAVAILABLE |
Ads were dropped due to an error that occurred with slate, see slate status. |
Slate status
The following are a list of slate statuses and what they indicate.
Slate status | Description |
---|---|
SLATE_STATUS_INSERTED |
Slate insertion was successful. |
SLATE_STATUS_SKIPPED |
Slate insertion was skipped due to the live stream event configuration (disabled, skip on empty). |
SLATE_STATUS_DROPPED_UNKNOWN |
Slate was not inserted into this ad break due to unknown reasons. |
SLATE_STATUS_MINIMUM_INSERTED |
Remainder of ad break was stitched with underlying content, with a small amount of slate to bridge between ads and content. |
Ad server interaction log
This log provides information about interactions with an ad server to get ads. Reference Ad server interaction log structure for more details and examples on how information is presented in the log.
Field** | Description |
---|---|
timestamp
INTEGER |
UTC timestamp of request (in Unix time) |
entry_id
STRING |
Unique ID for the log entry
There is a current limitation on our system that a log entry may appear more than once. This ID can be used to de-duplicate entries.
|
stream_id
STRING |
Unique ID assigned to every stream (also known as the SAM ID) |
network_code
INTEGER |
Ad Manager network code |
content
INTEGER |
Content source ID |
vid
STRING |
Video ID |
asset_key
STRING |
Asset key of live stream |
pod_id
INTEGER |
ID of the ad break:
|
ad_server_host_name
STRING |
Domain name of ad server |
response_time
DOUBLE |
Latency of the request (in seconds) |
response_type
STRING |
Type of response:
|
response_code
INTEGER |
|
row_type
STRING |
Type of log file entry:
Reference the VMAP response example that includes each log file type. |
vast_error_code
STRING |
VAST error code |
prefetch_stage
STRING |
Prefetch stage (if prefetch is enabled) |
ad_position
STRING |
Position of the decisioned ad in the ad pod
|
ad_id
STRING |
Ad ID * |
ad_system
STRING |
Ad system * |
ad_title
STRING |
Ad title * |
creative_id
STRING |
Creative ID * |
creative_ad_id
STRING |
Creative Ad ID * |
universal_ad_id_registry
STRING |
Universal Ad ID registry * |
universal_ad_id_value
STRING |
Universal Ad ID value * |
creative_duration
DOUBLE |
Duration of creative |
STRING |
Mezzanine uri * Everything in the URI is escaped except the characters specified as unreserved in RFC3986. |
STRING |
This is the first element found within the Everything in the URI is escaped except the characters specified as unreserved in RFC3986. |
STRING |
The tracking element that's used to track the start of an ad break. This data comes from VMAP response. Everything in the URI is escaped except the characters specified as unreserved in RFC3986. |
STRING |
Unique identifier of a creative associated with this ad. |
* These values are from VAST
** Where not applicable for a particular row, some fields may be left blank