Monitor a native app¶
This topic describes how providers can monitor a Snowflake Native App across all consumer accounts. It covers application health, performance, lifecycle and upgrade state, container health (for apps with containers), telemetry costs, and usage and engagement patterns.
Monitor application health¶
Providers can centrally monitor application health using the
APPLICATION_STATE view in the
SNOWFLAKE.DATA_SHARING_USAGE schema of the provider account. Unlike event-table telemetry (which is
emitted per region and is only centralized if the provider builds an ETL or uses a third-party tool),
APPLICATION_STATE aggregates health and upgrade state across every region your listing is published to via
Cross-Cloud Auto-Fulfillment, without requiring consumer opt-in.
This view delivers:
Centralized health across all consumer regions, with no per-region login required.
Automatic health reporting that does not require consumers to enable event sharing.
A minimal data footprint: only health and upgrade state columns are replicated, which keeps replication cost low and prevents data exfiltration.
Note
APPLICATION_STATE centralizes health and upgrade state only. Log, trace, metric, and lifecycle event data
stay in each consumer’s event table and (if shared) replicate to the provider’s event account in the same
region. To route shared events from multiple regions to a central location, see
Configure centralized event sharing for an app.
Set up health reporting¶
Each application instance reports its health using
SYSTEM$REPORT_HEALTH_STATUS with a status of
OK, FAILED, or PAUSED. The function returns true on success and false if the call is
rate-limited.
Health status can only be updated once every 55 minutes. If a report is attempted sooner, the function returns
false and the stored value isn’t changed. PAUSED can override this limit. The 55-minute cadence is the
built-in sampling for health: there is no separate sampling control. To adjust the volume of log, trace, and metric
telemetry, set log_level, trace_level, and metric_level (at app, schema, or object scope) and use
event definitions to filter what is shared.
Query health status¶
CoCo prompt: “Show me the latest health status for every consumer instance of my native app and sort by most recent update.”
The following query returns the latest health status for every consumer instance of an app:
The preceding query may return results similar to the following:
Detect and respond to issues¶
Look for instances with the FAILED status, or instances with no recent update within the expected interval.
When an issue is detected, query the provider’s event table to read shared lifecycle events, log messages, and
trace events from the consumer’s instance to diagnose the root cause.
For the full column reference, including UPGRADE_STATE, DISABLEMENT_REASONS, and the
BCR bundle 2026_02 additions UPGRADE_DEADLINE,
MAINTENANCE_STATE, and MAINTAIN_AFTER, see the
APPLICATION_STATE view.
Monitor application lifecycle events¶
Snowflake emits application lifecycle events (records with RECORD_TYPE = 'EVENT') that complement the
APPLICATION_STATE view. While APPLICATION_STATE shows the current snapshot of every consumer instance,
lifecycle events give you the full per-instance event stream so you can replay history, build alerts, and
correlate state changes.
Supported lifecycle events:
upgrade_statechanges: every version transition across all instances, includingQUEUED,UPGRADING,COMPLETE,QUEUED_RETRY,FAILED,DISABLED, andQUEUED_DELAYED.health_statusupdates: when an instance reportsOK,FAILED, orPAUSEDvia SYSTEM$REPORT_HEALTH_STATUS.auto_grantchanges: when consumers grant or revoke privileges (for example,CREATE COMPUTE POOL,CREATE WAREHOUSE) to the app.
Common use cases:
Catch failing upgrades early. Watch for
upgrade_statetransitions toFAILEDorQUEUED_RETRYand alert on the failure reason before consumers open a support case.Detect health regressions across the fleet. Stream
health_statustransitions fromOKtoFAILEDinto your alerting tool to triage instance-by-instance.Audit privilege changes. When a consumer revokes
CREATE COMPUTE POOLor another privilege, theauto_grantevent lands in your event table within seconds; use it to tell support what changed.Reconstruct an incident timeline. Lifecycle events are timestamped, so you can correlate an upgrade attempt with a subsequent health failure and a consumer privilege revocation.
Example VALUE for an auto_grant event:
By default, lifecycle events are not logged. With
BCR bundle 2026_02 enabled, set
LOG_EVENT_LEVEL in the manifest to control which severity of lifecycle events is
recorded (TRACE, DEBUG, INFO, WARN, ERROR, FATAL, or OFF). Each level includes records
from all lower levels. If the BCR bundle is disabled, the log_level property controls which lifecycle events
are recorded instead.
CoCo prompt: “From my native app event table, show every upgrade_state, health_status, and auto_grant change in the last 7 days, grouped by consumer account.”
The following query returns lifecycle events for a specific app recorded in the past hour:
Monitor application performance¶
Snowflake Native Apps auto-instrument every stored procedure and UDF call with a SPAN that captures start time, duration, error status, and error message. Python, Java, and Scala stored procedures and UDFs additionally emit METRIC records for CPU and memory usage. SQL and JavaScript handlers emit SPANs only.
The following matrix summarizes the auto-instrumented telemetry by handler language:
Handler language |
Span (duration, status) |
Metric (CPU, memory) |
|---|---|---|
SQL stored procedure or UDF |
Yes |
No |
JavaScript stored procedure or UDF |
Yes |
No |
Python stored procedure or UDF |
Yes |
Yes |
Java stored procedure or UDF |
Yes |
Yes |
Scala stored procedure |
Yes |
Yes |
For details, see Trace events for functions and procedures and Collecting metrics data.
CoCo prompt: “From my native app event table, show execution counts, average duration, error count, and success rate for each auto-instrumented function and procedure over the last 24 hours.”
The following query returns execution counts, average duration, error counts, and success rate for each auto-instrumented function and procedure in your event table:
Monitor SPCS containers¶
For Snowflake Native Apps with Snowpark Container Services, Snowflake emits platform events to the event table for container startup and readiness, image pull failures, resource constraints (OOM kills), restarts, and error conditions. Events are written with seconds-scale delay; Snowflake does not publish a platform-event latency SLA at this time.
For the full list of telemetry types available in containers (application logs, application metrics, application traces, platform event logs, and platform metrics, with their preview status), see Snowpark Container Services: Monitoring Services.
Configure platform metric collection in your service specification:
Snowflake exports the selected metric groups to the event table. You can also scrape metrics directly from compute pool nodes via the Prometheus-compatible endpoint for real-time monitoring or custom integrations. See Snowpark Container Services: Monitoring Services for the endpoint reference and metric schema.
CoCo prompt: “Show SPCS platform events from the event table for my container service in the last 24 hours, ordered by most recent.”
The following query returns SPCS platform events from the event table:
Monitor application upgrades¶
The APPLICATION_STATE view exposes upgrade
lifecycle columns: UPGRADE_STATE, CURRENT_VERSION, TARGET_UPGRADE_VERSION, UPGRADE_FAILURE_REASON,
UPGRADE_ATTEMPT, UPGRADE_STARTED_ON, and UPGRADE_ATTEMPTED_ON.
BCR bundle 2026_02 adds the following columns:
UPGRADE_DEADLINE: the deadline by which an upgrade must be completed.MAINTENANCE_STATE: the current state of the application’s maintenance process. Possible values areCOMPLETED,QUEUED,INITIALIZING,IN_PROGRESS.MAINTAIN_AFTER: the earliest time the system will begin maintenance.
To find instances with in-progress, queued, or failed upgrades, including the failure reason:
CoCo prompt: “Show every consumer instance of my native app whose upgrade is not in COMPLETE or DISABLED state, including the failure reason and current version.”
To find instances that successfully completed upgrades to the latest target version:
To find instances still finalizing the previous version due to active queries:
Once an application is uninstalled, APPLICATION_STATE no longer includes that instance. For listings published
through Cross-Cloud Auto-Fulfillment, the view aggregates data across all regions.
Manage telemetry costs¶
Telemetry costs scale with the volume of data emitted. For pricing details, see Costs of telemetry data collection.
Track overall telemetry credits and bytes ingested using EVENT_USAGE_HISTORY:
CoCo prompt: “Show daily telemetry credits used and bytes ingested for my native app over the last 30 days.”
Track per-app credits and storage in test environments using APPLICATION_DAILY_USAGE_HISTORY:
Break down compute by service type:
To control telemetry volume, set log_level, trace_level, and metric_level at the most specific scope
that meets your monitoring needs (procedure or UDF, schema, or app), use
event definitions to filter the records shared with the
provider, and configure regional event tables only in regions where the app has active usage.
Understand app usage patterns¶
Use LISTING_ACCESS_HISTORY to track daily query volume and active consumer accounts by version and patch:
CoCo prompt: “For my native app, show daily query volume and active consumer accounts broken down by version and patch.”
Flatten APPLICATION_OBJECTS_ACCESSED to see which procedures, functions, tables, or views are accessed most
often:
CoCo prompt: “For my native app, which procedures, functions, tables, or views are accessed most, and by how many distinct consumer accounts?”
Monitor consumer engagement¶
Use LISTING_CONSUMPTION_DAILY to track weekly and monthly usage trends, regional adoption patterns, and engaged customers. Data has up to a 2-day latency and is retained for 365 days.
Monitor app acquisition funnel¶
Use LISTING_TELEMETRY_DAILY and LISTING_EVENTS_DAILY to track:
Discovery: unique account views by region and viewing trends.
Conversion: view-to-get rate, get-to-install rate, overall funnel conversion.
Retention: uninstall trends by region and paid listing cancellations.
Uninstall events are currently available for paid listings. Support for trial and free listings is not yet available.