Delivery Overview
Delivery Overview is a visual observability tool designed to help Segment users diagnose event delivery issues for any cloud-streaming destination receiving events from cloud-streaming sources.
Delivery Overview for RETL destinations, Storage destinations, and Engage Audience Syncs currently in development
This means that Segment is actively developing Delivery Overview features for RETL destinations, Storage destinations, and Engage Audience syncs. Some functionality may change before Delivery Overview for these integrations becomes generally available.
Delivery Overview is generally available for streaming connections (cloud-streaming sources and cloud-streaming destinations). All users of Delivery Overview have access to the Event Delivery tab, and can configure delivery alerts for their destinations.
Key features
Delivery Overview has three core features:
- Pipeline view: a visual overview of each step your data takes during the delivery process
- Breakdown table: contains more detail about the events that were processed at each pipeline step
- Discard table: contains details about the events that failed or were filtered out of your process and allows you to inspect samples of them
You can refine these tables using the time picker and the metric toggle, located under the destination header. With the time picker, you can specify a time period (last 10 minutes, 1 hour, 24 hours, 7 days, 2 weeks, or a custom date range over the last two weeks) for which you’d like to see data. With the metric toggle, you can switch between seeing metrics represented as percentages (for example, 85% of events or a 133% increase in events) or as counts (13 events or an increase of 145 events.) Delivery Overview shows percentages by default.
Pipeline view
The pipeline view provides insights into each step your data is processed by enroute to the destination, with an emphasis on the steps where data can be discarded due to errors or your filter preferences. Each step provides details into counts, change rates, and event details (like the associated Event Type or Event Names), and the discard steps (Failed on ingest, Filtered at source, Filtered at destination, & Failed delivery) provide you with the reasons events were dropped before reaching the destination. Discard steps also include how to control or alter that outcome, when possible. The pipeline view also shows a label between the Filtered at destination and Failed delivery steps indicating how many events are currently pending retry.
The pipeline view shows the following steps:
- Successfully received: Events that Segment ingested from your source
- Failed on ingest: Events that Segment received, but were dropped due to internal data validation rules
- Filtered at source: Events that were discarded due to schema settings or Protocols Tracking Plans
- Filtered at destination: Events that were discarded due to Destination Filters, filtering in the Integrations object, Destination Insert functions, or per source schema integration filters. Actions destinations also have a filtering capability: for example, if your Action is set to only send Identify events, all other event types will be filtered out. Actions destinations with incomplete triggers or disabled mappings are filtered out at this step. Consent Management users also see events discarded due to consent preferences.
- Failed delivery: Events that have been discarded due to errors or unmet destination requirements
- Successful delivery: Events that were successfully delivered to the destination
Actions destinations also include a mapping dropdown, which allows you to select a mapping to filter the events in the Filtered at destination, Failed delivery and Successful delivery pipeline steps. The following image shows an Actions destination filtered to include only Track Page View events in the last three pipeline steps:
Breakdown table
The breakdown table provides you with greater detail about the selected events.
To open the breakdown table, select either the first step in the pipeline view (Successfully received,) the last step in the pipeline view (Successful delivery,) or select a discard step and then click on a discard reason.
The breakdown table displays the following details:
- Event type: The Segment spec event type (Track call vs. Identify call, for example)
- Event name: The event name, provided by you or the source (not available for inspection at all steps)
- App version: The app/release version, provided by you or the source (not available for inspection at all steps)
- Event count: How many of each event either successfully made it through this pipeline step (in the case of the first or last steps in the pipeline view) or were filtered out (if you access it from a discard table)
- % Change: Insight into how the event counts differ from the last comparable time range as a percentage1
1: Segment calculates the related change percentage by subtracting the percent of events impacted in the previous time period from the percent of impacted events in the current time period. For example, if last week 15% of your events were filtered at a source, but this week, 22% of your events were filtered at a source, you would have a related change percentage of 7%.
Discard table
The discard table provides you with greater detail about the events that failed to deliver or were filtered out of your sources and destinations.
To open the discard table, click on one of the discard steps. If you click on a row in the discard table, you can see the breakdown table for the discarded events.
The discard table displays the following details:
- Discard reason: Any relevant error code, message, or description associated with the event’s failure. When possible, Delivery Overview links to any troubleshooting information you can use to get your events up and running again. Clicking on a discard reason brings you to the breakdown table where you can see more detail about discarded events. For more context about discard reasons, see the Troubleshooting documentation.
- Details & Samples: View up to ten samples over the selected time range. Examine the error message and reason for the error or discard and inspect the payloads involved with the attempted transaction (not available for inspection at all steps)
- Event count: How many of each event were discarded in this pipeline step
- % Change: Insight into how the event counts differ from the last comparable time range as a percentage1
1: Segment calculates the related change percentage by subtracting the percent of events impacted in the previous time period from the percent of impacted events in the current time period. For example, if last week 15% of your events were filtered at a source, but this week, 22% of your events were filtered at a source, you would have a related change percentage of 7%.
When should I use Delivery Overview?
Delivery Overview is useful to diagnose delivery errors in the following scenarios:
- When setting up a destination, tracking plan, or filter for the first time: With Delivery Overview, you can verify that the data you’re sending to a new destination, a new tracking plan, or a new filter arrives in your destination as expected.
- When data is missing from your destination: The pipeline view can help you see where your data is getting “stuck” on the way to your destination, which can help you quickly diagnose and address problems in your data pipeline.
- When emission or delivery volume fluctuates out of expected norms: Delivery Overview will highlight where the largest rate change(s) occurred and what events were associated with the change.
Delivery Overview in Engage Destinations
Because Engage uses sources for multiple purposes, you can expect to see filtered at destination
events with the integrations object in destinations linked to Engage. Engage uses the integrations object to route events to destinations you’ve added to your audiences, traits, and journey steps. As a result, some events aren’t meant to be delivered by the destination, so the integrations object filters them.
Where do I find Delivery Overview?
To view the Delivery Overview page:
- Sign into Segment.
- From the homepage, navigate to Connection > Destinations and click on the destination you’d like to investigate.
- Select the Delivery Overview tab from the destination header.
How do I use Delivery Overview?
To use Delivery Overview:
- Navigate to the destination you’d like to review, and select Delivery Overview from the destination header.
- On the Delivery Overview tab, select a time period from the time picker. The time picker reflects data in the user’s local time.
Optional: Turn the metric toggle off if you’d like to see the quantity of events as counts instead of percentages. Delivery Overview shows percentages by default. - Select a success or discard step to view additional context about the events that passed through that step.
How does Delivery Overview differ from other Segment monitoring and observability tools?
With Source Debugger or Event Delivery, you can only verify that events are successfully making it from your source or to your destination. If events fail, you have to troubleshoot to see where in the pipeline your events are getting stuck. With Event Tester, you can verify that your event makes it from your source to your destination, but if the results aren’t what you expected, you’re stuck troubleshooting your source, filters, tracking plans, and destinations.
With Delivery Overview, you can verify that your source receives your events, that any filters and tracking plans work as expected, and that events successfully make it to your destination. Any errors or unexpected behavior can be identified using the pipeline view, leading to quicker resolution.
How can I configure alerts?
You can use the Event Delivery alerting features (Delivery Alerts) by selecting the Alerts tab in the destination header. Once you enable alerts, if the successful delivery rate of all events is less than the threshold percentage in the last 24 hours, you’ll be notified through in-app notification and/or workspace email.
Note that this is dependent on your notification settings. For example, if the threshold is set to 99%, then you’ll be notified each time less than 100% of events fail.
You can also use Connections Alerting, a feature that allows Segment users to receive in-app, email, and Slack notifications related to the performance and throughput of an event-streaming connection.
Connections Alerting allows you to create two different alerts:
- Source volume alerts: These alerts notify you if your source ingests an abnormally small or large amount of data. For example, if you set a change percentage of 4%, you would be notified when your source ingests less than 96% or more than 104% of the typical event volume.
- Successful delivery rate alerts: These alerts notify you if your destination’s successful delivery rate falls outside of a percentage that you set. For example, if you set a percentage of 99%, you would be notified if you destination had a successful delivery rate of 98% or below.
How “fresh” is the data in Delivery Overview?
The data in Delivery Overview has an expected latency of approximately 30 seconds after event ingestion, but this may vary, depending on the features you’ve enabled in your workspace and spikes in volume. Segment delays the data visible in the Delivery Overview UI by 5 minutes to allow for more precise metric correlation. Segment does not impose the 5 minute delay if you access data using the Public API.
Why is the Delivery Overview page only available for cloud-mode destinations?
Similar to Segment’s Event Delivery feature, the Delivery Overview page is only available for server-side integrations (also known as cloud-mode destinations). You won’t be able to use the Delivery Overview page for client side integrations (also known as device-mode destinations) because device-mode data is sent directly to the destination tool’s API. In order to report on deliverability, data must be sent to destinations using a server-side connection.
Troubleshooting
The Delivery Overview pipeline steps Failed on Ingest, Filtered at Source, Filtered at Destination, and Failed Delivery display a discard table with information about why your events failed or were discarded.
This table provides a list of all possible discard reasons available at each pipeline step.
Show all All Failed on Ingest Filtered at Source Filtered at Destination Failed Delivery
Discard reason | Error code | What happened? | Remedy |
---|---|---|---|
Failed on Ingest: Events that Segment received, but were dropped due to internal data validation rules | |||
Empty batch result | empty_batch_result | No messages found for batch result. After processing messages within batch, no messages returned | Check the event payload and client instrumentation |
Source disabled | source_disabled | Source is not enabled | Check the source settings |
Batch is empty | empty_batch | The batch request contained no messages | Check the event payload and client instrumentation. For more information, see the HTTP API Batch documentation |
Multi user error | multi_user_error | One or more messages within the batch had an error. Only messages without errors were published | Review individual payloads for each error. For more information, see the HTTP API Errors documentation |
No userID or anonymousID | no_user_anon_id | The userID or anonymousID was not provided | Check the event payload and client instrumentation. For more information, see the Anatomy of a Segment message documentation |
Event not defined | event_not_defined | Track event did not have event name | Check the event payload and client instrumentation. For more information, see the Spec: Track documentation |
Track event not a string | event_not_string | Track event name is not a string | Check the event payload and client instrumentation. For more information, see the Spec: Track documentation |
Properties field not an object | properties_not_object | The properties field must be an object type | Check the event payload and client instrumentation. For more information, see the Spec: Track documentation |
Traits must be an object | traits_not_object | The traits field must be an object type | Check the event payload and client instrumentation. For more information, see the Spec: Track documentation |
Name must be non-empty string | name_not_string | For Page or Screen calls, name field was an empty string or not a string | Check the event payload and client instrumentation. For more information, see the Spec: Page documentation |
Category field must be a string | category_not_string | For Page or Screen calls, category field was an empty string or not a string | Check the event payload and client instrumentation. For more information, see the Spec: Page documentation |
Identifier missing from payload | id_required | All payloads require a userId and/or an anonymousId | Ensure all payloads have a userId and/or anonymousId. For more information, see the Anatomy of a Segment message documentation |
Identifier not a string | id_not_string | The userID or anonymousId was an empty string or not a string | Check the event payload and client instrumentation. For more information, see the Anatomy of a Segment message documentation |
Consent categoryPreference object does not exist | consent_ categorypreferences _should_exist |
context.consent. categoryPreferences object is required |
Check the event payload and instrumentation for the Segment Consent Preference Updated Track event. For more information, see the Segment Consent Preference Updated event documentation |
Consent Categories field must be an object for "Segment Consent Preference Updated" event | consent_ categorypreferences _fields_should_be_object |
context.consent. categoryPreferences must be an object |
Check the event payload and instrumentation for the Segment Consent Preference Updated Track event. For more information, see the Segment Consent Preference Updated event documentation |
Consent category preferences not boolean | consent_ categorypreferences _fields_should_be_bool |
Consent preferences for the categories must be boolean | Check the event payload and instrumentation for the Segment Consent Preference Updated Track event. For more information, see the Segment Consent Preference Updated event documentation |
Device advertisingId not a string | device_advertisingid _should_be_string |
advertisingId must be a string | Check the event payload and instrumentation for the Segment Consent Preference Updated Track event. |
Consent version not a number | consent_version_ should_be_number |
Version must be a number | Check the event payload and instrumentation for the Segment Consent Preference Updated Track event. |
Could not decode payload | bad_request | The payload could have an incorrect content type, body, or something else | Fix the payload and include any missing details. For more information, see the Source Functions documentation |
Could not read write key from url | unknown_source | Failed to find source with [write_key] | Verify and use the appropriate function webhook URL. For more information, see the Source Functions documentation |
Could not find source from write key | unknown_source | Failed to find source with [write_key] | Verify and use the appropriate function webhook URL. For more information, see the Source Functions documentation |
Source missing write key | unknown_source | Failed to find source with [write_key] | Verify and use the appropriate function webhook URL. For more information, see the Source Functions documentation |
Could not decode internal settings of the source | invalid_settings | Function internal settings are invalid | Fix the function settings. If you need more information to troubleshoot the function settings, contact support. For more information, see the Source Functions documentation |
Could not parse content-type | BAD_REQUEST | The payload has an incorrect content type | Fix the payload and include any missing details. Make sure you're using 'application/json' or 'application/x-www-form-urlencoded' as your content-type header value. For more information, see the Source Functions documentation |
Could not parse request body | BAD_REQUEST | The payload has an incorrect body | Ensure the payload uses accurate JSON. For more information, see the Source Functions documentation |
Unsupported content-type | BAD_REQUEST | The payload has an incorrect content type | Fix the payload and include any missing details. Make sure you're using 'application/json' or 'application/x-www-form-urlencoded' as your content-type header value. For more information, see the Source Functions documentation |
Source/project is disabled | source_disabled or SOURCE_DISABLED |
The source/project instance is disabled | Enable the source/project instance. For more information, see the Source Functions documentation |
Workspace is locked out | locked_workspace | The workspace is disabled | Contact support for more details |
Function not deployed | internal | The function is not deployed properly | Re-deploy the function. Contact support if the issue persists. For more information, see the Source Functions documentation |
Unexpected deploy type | internal | The function must be deployed as an AWS lambda type | Re-deploy the function. Contact support if the issue persists. For more information, see the Source Functions documentation |
Invalid deploy ID | internal | The function is missing the lambda ARN | Re-deploy the function. Contact support if the issue persists. For more information, see the Source Functions documentation |
Could not call tracking API | TRACKING_API_FAILED | Failed to call tracking API | Check the payload. Contact support if issue persists. For more information, see the HTTP API documentation |
Could not call set API | SET_API_FAILED | Failed to call set API because the client was closed | Check the payload. Contact support for more details. For more information, see the Source Functions documentation |
Could not call set API | SET_API_FAILED | Failed to call set API | Check the payload. Contact support for more details. For more information, see the Source Functions documentation |
Failed to encode into lambda input format | lambda_err or internal |
Internal encoding error | Contact support for more details |
Failed to create lambda client | lambda_err | Unexpected lambda error | Contact support for more details |
Lambda API permanent error | lambda_err | Unexpected lambda error | Contact support for more details |
Lambda API temporary error | lambda_err | Unexpected lambda error | Contact support for more details |
Too many lambda API requests | too_many_requests | The incoming event traffic rate exceeds the expected rate. | Contact support for more details. For more information, see the Rate Limits documentation |
Function timeout | FUNCTION_TIMEOUT | The function timed out | Optimize the function code. For more information, see the Functions Usage documentation |
Function retry error | RETRY_ERROR | Retry error from function code. Retry attempt will be done | Function will be retried. Segment's systems have a retry mechanism where an event will be retried 6 times over a four-hour period with exponential backoff. For more information, see the Source Functions documentation |
Function execution error | INVOKE_ERROR | The function failed to execute | Check the function code for syntax and config issues. Contact support if issue persists. |
Failed to decode function output | internal | Internal error | Reach out to support for more details |
Failed is not deployed | BAD_DEPLOY | The function is not deployed properly | Re-deploy the function and then reach out to support if issue persists. For more information, see the Source Functions documentation. |
Unexpected DeployType. Supported is aws::lambda | BAD_DEPLOY | The function is not deployed properly | Reach out to support if issue persists. For more information, see the Source Functions documentation. |
Invalid deploy ID, missing lambda ARN | BAD_DEPLOY | The function is not deployed properly | Re-deploy the function and then reach out to support if issue persists. For more information, see the Source Functions documentation. |
Filtered at Source: Events that were discarded due to schema settings or Protocols Tracking Plans | |||
Common schema violation | common_schema_violation | Event violated common JSON schema of Tracking Plan | Check event payload against the connected Tracking Plan Common JSON Schema. If the event passes the correct information, then update the tracking plan common JSON schema with the new information. or: Update the source configurations settings to allow events that violate the connected Tracking Plan JSON schema: Source > Settings > Schema Configurations > Advanced Blocking Controls For more information, see the Common JSON schema documentation |
Event discard setting | event_setting | The Source is configured to discard events of this type | Check source schema filters. For more information, see the Source Schema Integrations Filters documentation |
Schema violation | schema_violation | Source schema is configured to block events that violate the connected Tracking Plan JSON schema. | Check event payload against the connected Tracking Plan Common JSON Schema. If the event passes the correct information, then update the tracking plan common JSON schema with the new information. or: Update the source configurations settings to allow events that violate the connected Tracking Plan JSON schema: Source > Settings > Schema Configurations > Advanced Blocking Controls For more information, see the Customize your schema controls documentation |
Unplanned event | unplanned | Source schema configured to block events not defined in the connected Tracking Plan | Check source Configurations: Settings > Schema Configurations > to allow unplanned events. OR: Add the new event in the connected tracking plan so it's recognized as a planned event. For more information, see the Customize your schema controls documentation |
Unplanned and schema violation | unplanned_and_ schema_violation |
Source schema configured to block events not defined in the connected tracking plan. The event also violated the connected tracking plan JSON schema | Update the source schema configurations to allow unplanned events OR: Add the new event in the connected tracking plan so it's recognized as a planned event. |
Filtered at Destination: Events that were discarded due to Destination Filters, filtering in the Integrations object, or per source schema integration filters | |||
Filtered by rules | FILTERED_BY_RULES | Event matched a Destination Filter rule | To include events like this, change the Destination Filter to be more specific or exclude this event. For more information, see the Destination Filters documentation |
Filtered by integrations object | FILTERED_BY_ INTEGRATIONS_OBJECT |
The event was filtered because sending to the destination in the integrations object is disabled | To include events like this, remove filtering from the integrations object. For more information, see the Filtering with the integrations object documentation |
Unkown integration | UNKNOWN_INTEGRATION | Destination not registered in the integrations info | Check the event payloads integrations object to ensure all listed destinations are valid. Refer to the destination's documentation for acceptable names. For more information, see the Filtering with the integrations object documentation |
Message sent client side | MESSAGE_SENT_CLIENT_SIDE | The message was already sent client side | These events are being sent client side in Device Mode and will not be sent from Segment's servers. Events in this category are sent directly from your website or app to the downstream destination. For more information, see the Destination methods comparison documentation |
Unsupported event type | UNSUPPORTED_EVENT_TYPE | The destination does not support this event type | For more information about the events your destination can consume, see the Filtering with the integrations object documentation |
Invalid settings | INVALID_SETTINGS | The event type is missing one or more required settings | Check your integration type. For more information, see the Destination settings documentation |
Functions lock out | FUNCTIONS_LOCK_OUT | The function wasn't executed because the workspace reached its paid limit for functions | To increase your functions limits, upgrade your workspace plan. For more information, see the Functions usage limits documentation |
Internal error | INTERNAL | Something went wrong | Contact support for more information |
Action missing mapping or trigger | NO_MATCHING_MAPPING | The Actions destination is missing either a mapping or trigger for this event | Your event does not meet any trigger cases for your Actions mappings. Please add a mapping with a trigger that accepts this event. For more information, see the Actions destination FAQ |
Filtered at mapping | FILTERED_AT_MAPPING | The event was filtered because it did not match the Actions destination mapping | Contact support for more information |
Failed data encryption | FAILED_DATA_ENCRYPTION | Message delivery failed due to data encryption; either there was an issue encrypting data or failed to deliver data with encrypted values | Check if the destination can accept encrypted data in the fields being encrypted |
Invalid request | bad_request | The request is either malformed or the function threw an unknown exception | Review the payload to ensure that it aligns with Segment's expectations. For more information, see the HTTP API Errors documentation |
Invalid settings | invalid_settings | The function's internal settings are invalid | Fix the function's settings or reach out to support for more details. |
Invalid event | message_rejected | The function threw exceptions such as InvalidEventPayload or ValidationError | Fix the payload to contain the data needed by the function |
Unsupported content-type | unsupported_event_type | EventNotSupported or Missing event handler | Add the missing handler to the function code |
Failed to process request | internal | Segment failed to process the request | Contact support for more information |
Too many incoming lambda API requests | too_many_requests | The incoming event traffic rate exceeds the expected rate | Contact support for more information |
Function timeout | gateway_timeout | The function timed out | Check the function code or contact support to increase the timeout |
Function retry error | retry | Retry errror from function code | Function will be retried automatically |
Filtered by end user consent | FILTERED_BY_ END_USER_CONSENT |
The message was dropped due to the user's consent preferences | Contact support for more information |
Failed Delivery: Events that have been discarded due to errors or unmet destination requirements | |||
Invalid settings | INVALID_SETTINGS | The event is missing some required settings as configured for that integration per event type | Review your Segment settings and make any necessary updates. For more information, see the Integration Error Codes documentation |
429 | 429 | Too many requests were sent in a time frame | These events will be retried automatically. If the events eventually fail due to too much volume, contact the partner to raise your rate limit. If the destination allows batching in Segment, you may be able to reduce the total number of requests. For more information, see the Integration Error Codes documentation |
Erefused | EREFUSED | There was a temporary problem connecting to the destination's API | This event will be retried automatically. If the event eventually fails, your Segment configuration settings may contain some invalid settings, or the integration may not be operational. If your configurations are valid, consider disabling this integration or conact the intagration partner. For more information, see the Integration Error Codes documentation |
Unsupported event type | UNSUPPORTED_EVENT_TYPE | The destination does not support this event type | Contact support for more information |
Message rejected | MESSAGE_REJECTED | Request was blocked | Check the event payload for required fields and data types for all fields and compare it to your destination configuration. For more information, see the Integration Error Codes documentation |
400/Bad request | 400 or BAD_REQUEST |
The downstream API rejected the payload | Review the Response from Destination tab for more information. For more context, see the Integration Error Codes documentation |
Etimedout | ETIMEDOUT or etimedout |
The downstream destination did not send an API response back to Segment in a reasonable amount of time | No action is needed. The delivery will be retried automatically |
Enotfound | ENOTFOUND | The endpoint URL cannot be found or does not exist | Check the Request from Segment tab to see which URL the request is being sent to and verify that the URL there is correct |
Internal | INTERNAL | There was a problem connecting to the destination's server | No action needed. Events will be retried when there's a successful connection |
404 | 404 | The server cannot find the requested resource | The server cannot find the requested resource. This can happen for a number of reasons, such as: The requested resource does not exist. The requested resource has been moved or deleted. There is a typo in the URL. The server is experiencing technical difficulties. |
307 | 307 | The requested resource was temporarily redirected | Segment will automatically retry the request using the redirected URL |
502 | 502 | The server recieved an invalid response from the upstream server | No action needed. Segment will try to send the payload again. For more information, see the Integration Error Codes documentation |
503 | 503 | Server could not handle the request | No action needed. Segment will try to send the payload again. For more information, see the Integration Error Codes documentation |
Retry | RETRY | The intitial request was unsuccessful. The request was sent again | No action needed. Segment will continue to retry sending the payload. For more information, see the Integration Error Codes documentation |
401 | 401 | The request could not be completed because the authentication credentials are either invalid or expired | Re-authenticate your account with the partner and update your authentication settings in Segment. For more information, see the Integration Error Codes documentation |
Econnreset | ECONNRESET | Segment could not establish a connection to the partner server | Your Segment configurations might contain some invalid settings or the integration may no longer be operational. If your configurations are valid, disable this integration or contact the integration partner. For more information, see the Integration Error Codes documentation |
This page was last modified: 22 May 2024
Need support?
Questions? Problems? Need more info? Contact Segment Support for assistance!