Troubleshooting Apache Superset alerts and reports

A structured way to find why Superset alerts and scheduled reports do not arrive, covering the worker chain, the screenshot renderer, delivery channels and timeouts.

On this page

Why Apache Superset alerts and reports stop arriving

A scheduled dashboard report or threshold alert that stops arriving usually fails silently, because nothing in the Superset web interface reports that a background job did not run. The chain between the scheduler, the Celery worker, the screenshot step and the delivery channel is where most failures sit. According to the Superset architecture documentation, alerts and reports, async queries and dashboard thumbnails depend on the caching layer and the worker components, and most installations use Redis and Celery for them. A missing link in that chain looks the same from the recipient's side: no message.

This troubleshooting is needed when a team notices that a report or alert has gone quiet, when a new delivery channel or Superset upgrade has been introduced, or when a worker, beat or Redis change has been made in the infrastructure. Before changing anything, confirm which components your deployment actually runs, where the beat scheduler lives, which worker executes report jobs, and which user the executor runs as. Those answers determine which of the checks in the following sections apply to your environment. The architecture documentation is the right reference for the component layout, and your own deployment records should confirm it.

DeployOpen does not guarantee a fix without an environment review. The same symptom can come from a stopped beat process, a worker that cannot launch a headless browser, an SMTP or Slack configuration problem, or a dashboard too slow to render within the configured limits, and each needs different evidence. A review of your configuration, container image, logs and scheduled job records is the starting point, and any fix is agreed in writing against that review.

Which component to check first when a report fails

This sequence moves from the infrastructure a report depends on toward the delivery itself, so you find the failing layer before changing any configuration. Each check narrows the search to one component, and the last check confirms whether the problem is in rendering or delivery.

  1. Confirm the Redis caching layer is reachable

    Start with the caching layer, because alerts and reports, async queries and dashboard thumbnails depend on it in most installations. From the Superset host or container, confirm the Redis instance named in your cache and Celery settings accepts connections from the web and worker processes, and that the network path and credentials match what Superset is configured to use. Done means a connection test succeeds from each tier. A failure here points to networking, DNS, authentication or a Redis instance that is down, and no report will run until it is fixed.

  2. Verify the Celery beat schedule is running

    Next, confirm that the Celery beat process is alive and writing schedule activity. Beat is the component that decides when a scheduled report should be queued, so a stopped beat process produces reports that never start, while workers and Redis look healthy. Check the process supervisor or container status for the beat service, and review its startup output for errors about the schedule or broker. Done means beat is running continuously and the report schedule is present in your configuration. If beat is missing, the fault sits in deployment or process management rather than in the report definition.

  3. Check workers consume the alerts and reports queue

    Confirm that at least one Celery worker is subscribed to the queue that carries alerts and reports tasks. A worker can be running and still ignore this queue if its startup command or configuration limits which queues it listens to, so the worker's queue subscription is the item to verify. Done means the worker reports the alerts and reports queue among the queues it consumes, and that queued tasks are picked up rather than accumulating. If tasks wait without starting, the worker configuration or the broker connection is the likely cause.

  4. Review the report execution log

    Once the queue is being consumed, read the execution record for the failed report. Superset records each run, including its state and any error message, so you can see whether the task started, which step it reached and how it ended. Look for states that show the task was queued but never finished, and for errors that name a timeout or an unreachable destination. Done means you know the last step that completed. Use that step to decide between a rendering problem and a delivery problem in the next two checks.

  5. Inspect the screenshot rendering step

    If the run reached rendering, check the headless browser step that captures the dashboard or chart image. Reports that fail here usually point to Playwright or Chromium missing from the image, a browser that cannot start under the executor user, or a page that loads too slowly for the configured timeout. Confirm the browser binary exists in the running image and that the worker can execute it as its configured user. Done means a rendering test completes for a small chart. A failure at this step points to the image contents, file permissions or timeout settings, not to SMTP or Slack.

  6. Confirm delivery to email or Slack

    Last, confirm the delivery channel. For email, check the SMTP host, port, authentication and sender address against your mail relay's requirements. For Slack, confirm the app has the scopes its delivery path needs. Superset 4.1.0 moved Slack delivery to Slack's file upload API, which requires the channels:read scope, and deprecated the original Slack integration, so an older app configuration can fail even when everything upstream works. Done means a test delivery reaches the recipient. A failure here means the rendered output existed but could not leave the platform.

Common causes: beat, workers, Chromium, executor user and dry-run mode

Most missing or failing Superset reports trace back to a small set of causes. Each one fails in a different place: the scheduler, the worker, the rendering browser, the account that runs the job, or a setting that suppresses delivery. Check them in that order so you do not chase a symptom in the wrong tier.

Celery beat not scheduling

Beat is the process that decides when a report or alert is due and queues the job. If beat is not running, no scheduled job is ever queued, so the report log shows nothing new for the schedule. Confirm that the beat process is deployed as its own container or service, that it runs in the same Superset codebase and configuration as the web tier, and that only one beat instance is active. Check its logs for startup errors before looking at workers.

Workers not started or on the wrong broker

Workers consume the queued jobs and execute them. A worker that is down, or that points at a different Redis or broker URL than the web tier and beat, will leave jobs sitting in a queue nobody reads. Confirm the worker process is running, that its broker and result backend settings match the other components, and that it listens on the queues Superset uses for reports. Compare the broker URL in each container, because a copied value with a different database index is a common cause.

Playwright or Chromium missing from the image

Scheduled reports with screenshots render the dashboard in a headless browser on the worker. If Playwright or Chromium is not installed in the worker image, or its system libraries are missing, the job fails at the rendering step while scheduling still looks healthy. Confirm the browser binary exists inside the running worker container, not only on the host, and that the image was rebuilt after any base image change. Worker logs usually name the missing library or executable.

Executor user without dashboard access

Each report or alert runs as a configured executor account. That account needs permission to open the dashboard or chart, and to read the underlying database through its role and any row level security filters. A report can fail or render an empty or partial page when the executor lacks access. Confirm which user is set as the executor, that the user holds the roles covering the dashboard, and that the same user can open the dashboard in a fresh browser session.

Dry-run mode left on

Alert and report settings include a dry-run switch that logs what would be sent without delivering it. Teams often enable it during testing and forget to disable it, so the schedule runs, the log shows success, and no email or Slack message leaves the system. Confirm the dry-run setting in the global configuration and in the feature flags for the environment you are testing, and confirm that the production configuration does not inherit a test value.

Screenshot timeouts on large dashboards

Rendering a dashboard with many charts or heavy queries can exceed the time the worker allows for screenshot capture, so the job ends with a timeout even though the dashboard works in a browser. Confirm the rendering timeout and the worker task time limits, check how long the charts take to load under the executor account, and look for slow warehouse queries. Reducing chart count in the report, or fixing the slowest queries, usually helps more than raising limits alone.

Email over SMTP versus Slack delivery

Email is the channel most organizations start with because it needs no third-party app approval. Superset hands the rendered report to an SMTP relay configured in your Superset settings, so the failure points sit mostly outside Superset: the network path to the relay, the credentials the relay accepts, and the sender address the relay allows. Those three items belong to your mail team, and they should confirm them before anyone debugs the Superset side.

  • Relay reachability: Confirm that the Superset worker container, not only the web container, can open a connection to the relay host and port. Workers often run in a different subnet or namespace.
  • Authentication: Ask the mail team which account and method the relay expects, and whether the account is allowed to send from a service context. Rotated or expired service credentials are a common cause of silent failures.
  • Sender policy: Confirm that the configured sender address is permitted for the relay and that the domain's sender policy records include the relay. Messages can be accepted by the relay and then dropped or quarantined downstream.
  • Attachment and size limits: Ask whether the relay caps message or attachment size, since large dashboard exports can exceed limits that small test emails never reach.
  • Logging access: Agree in advance who can read relay logs for the Superset sender, so that delivery questions can be traced from a timestamp.

Before closing the ticket, send a test report to an internal mailbox from a worker and confirm both the relay log entry and the received message.

Configuration settings to check and when each fits

This table lists the settings a troubleshooting engineer reviews when reports fail, with the symptom that points to each one and what to confirm in the configuration documentation. Work down the rows in order, since a broken caching or broker layer often hides problems further down the list.

Setting areaWhen it is the causeWhat to confirm
Caching layer and Celery brokerScheduled reports never start, or the queue shows jobs that stay pending. The architecture documentation ties alerts, reports and thumbnails to the caching layer and workers.Confirm the cache and broker endpoints are reachable from both the web container and the worker container, and that both point to the same broker.
Celery worker processReports are queued but never executed, or they fail after a long wait. Scheduled jobs do not run when no worker consumes the queue.Confirm a worker process is running, subscribed to the reports queue, and able to reach the metadata database and the data sources.
Celery beat processReports never fire on their schedule even though manual runs work. Beat is the scheduler, so a missing beat process stops all scheduled runs.Confirm a single beat process is running, that its schedule store is writable, and that it is not duplicated across replicas.
Feature flags and dry-run behaviorA report appears to run but sends nothing, or alert logic runs without delivery. Dry-run style behavior hides delivery problems.Confirm the alerts and reports feature flag is enabled and whether the report or alert is set to a test or dry-run mode in its settings.
Executor selectionThe report runs under an unexpected user, so the data returned is missing rows or access is denied. Row-level and role rules then differ from what the owner sees.Confirm which executor user the report is configured to run as and that this account has the dataset access the report needs.
Browser and screenshot settingsScreenshot-based reports fail or show blank charts. Playwright and Chromium must exist inside the image, and large dashboards can exceed timeouts.Confirm the browser binary is present in the worker image and check the configured timeouts against the dashboard size and query time.
SMTP settingsEmail reports fail with connection or authentication errors, or the message is accepted but never reaches the inbox. Most email failures trace to host, port, TLS or credential mismatch.Confirm the SMTP host, port, encryption mode and sender address with the mail team, and test a direct send from the worker container.
Slack settingsSlack reports fail after upgrading to Superset 4.1.0 or later, which moved delivery to Slack's new file upload API. Older integrations deprecated in that release may still be configured.Confirm the Slack app has the channels:read scope, that the bot is invited to the target channel, and that the configuration matches the UPDATING notes for your version.

Questions teams ask before fixing report delivery themselves

How long does a typical fix for Superset alerts and reports take?

No duration is supplied for this work, so the honest answer depends on what is broken. A missing Celery beat schedule or a worker that never picked up a task is usually quicker to diagnose than a Chromium rendering failure or an SMTP relay that rejects the sender. The main drivers are how many layers are involved (web app, metadata database, Redis broker, Celery worker, beat, headless browser, mail or Slack), whether logs are retained and reachable, and whether a staging copy exists for safe testing. Ask any partner to state the diagnostic steps, the environments they will touch and the point at which they will report findings in writing before a timeline is agreed.

Can our in-house team fix report delivery without a partner?

Often yes, if the team already runs Superset in production and can read Celery and web server logs. Reports depend on the caching layer and worker components, and most installations use Redis and Celery for them, so the team needs working knowledge of those pieces alongside the Superset configuration. Teams without that experience usually lose time to the same few checks: whether the beat and worker processes run as the expected user, whether the headless browser can start inside the container image, and whether the mail or Slack credentials have the scopes the current release requires. An internal team can work through these checklists, and a partner is most useful when the cause is not obvious from the logs.

What access and help do we need to provide during troubleshooting?

Plan to provide access to the host or cluster where Superset runs, including the web, worker and beat containers or processes, and read access to their logs. You will also need the Superset configuration file and environment variables with secrets masked, the metadata database connection details for read-only inspection, and a named contact who can confirm the expected recipients and schedules. Mail administrators must be available to check the SMTP relay, sender authentication and any allow lists. Slack workspace administrators must confirm the app is installed, the bot has the scopes it needs, and the target channels are reachable. Agree in writing how credentials are shared and rotated afterward.

What does a fixed-scope troubleshooting engagement include?

A fixed-scope engagement is agreed in writing before work starts, and it should name the reports and dashboards in scope, the delivery channels (email, Slack or both), the environments covered and the deliverables. Typical items include a review of the Celery worker and beat setup, a check of the headless browser and its dependencies in the image, a dry-run test of a representative report, verification of SMTP or Slack settings, and a written summary of root causes with the changes made. Ask whether the scope covers fixes in production, changes in staging only, or a handover of recommended changes for your team to apply, and whether retesting after the fix is included.

Do we need to upgrade Superset to fix report delivery?

Not necessarily. Many delivery failures come from configuration, worker health, mail or Slack credentials, or the container image, and none of these require a new release. An upgrade becomes relevant when the installed version has a known defect that the project has fixed, or when the Slack integration in use is one the project has deprecated. Superset 4.1.0 moved Slack delivery to Slack's new file upload API, requiring the channels:read scope, and deprecated the original Slack integration, so an older Slack setup may need changes regardless of the fault. Before any upgrade, the Superset upgrade documentation calls for a metadata database backup, running superset db upgrade and superset init, testing in staging first, and checking UPDATING.md for breaking changes.

What does the cost of this work depend on?

Cost follows the written scope, and DeployOpen does not publish a price list. The main drivers are the number of delivery channels and reports involved, how many environments must be inspected, how much of the stack is in scope (Superset alone, or also the Redis broker, the mail relay, the Slack app or the container image), the state of logs and documentation, and whether a retest or handover is included. One-time work covers diagnosis and repair. Recurring costs, if any, depend on whether you want ongoing support or upgrade work under a retainer. Ask for a quote that lists each component, its deliverables and any assumptions about access.

Will troubleshooting expose our data or change access controls?

It can, so the scope should say how it is handled. Reports render dashboards and send their contents to recipients, so troubleshooting may involve viewing report payloads, mail queues or Slack messages that contain business data. Ask for a clear rule on what is read, what is copied out of your environment and how temporary test recipients are removed. Confirm that changes to roles, data access or the secret key are either out of scope or approved separately, and that every change is recorded so your team can review it afterward.

Security points when fixing report delivery

Fixing report delivery usually means touching the components that hold the most sensitive settings: the secret key, the service account that renders dashboards, the mail and chat credentials, and the headless browser. Each card below is a point to check in your own environment before you consider the fix finished.

Keep SECRET_KEY identical across containers

Superset uses SECRET_KEY to encrypt sensitive values stored in the metadata database, including database connection credentials. The web containers and the Celery worker and beat containers must load the same value, or the worker cannot read the settings it needs to deliver a report. Check that every container gets the key from the same secret source, and that the key is set explicitly rather than left at a default. Rotation is handled with PREVIOUS_SECRET_KEY, so plan it as a deliberate change, not a side effect of a redeploy.

Scope the executor user's access

Reports run as an executor user, and that account opens each dashboard in the headless browser to produce a screenshot or PDF. Any data that account can see ends up in the report, so it should hold only the dashboard and chart access the report needs. Use a dedicated account with read-only roles, confirm it cannot reach dashboards beyond the recipients' intended scope, and review it whenever report ownership changes.

Store SMTP and Slack credentials as secrets

SMTP passwords and Slack tokens belong in your secrets manager or orchestrator secret store, injected at runtime into the web and worker containers. They should not appear in superset_config.py, image layers, Git history or the report configuration fields visible to report owners. For Slack, the token needs only the scopes the delivery method requires, and rotating it should be a tested procedure that does not require editing configuration by hand.

Isolate the rendering browser

The headless Chromium that renders reports loads dashboard pages, and those pages can include links, filters and chart content shaped by users. Run the worker in a container with no direct access to internal metadata services, cloud instance endpoints or the secret store, and restrict its outbound network to the Superset web endpoint and the data sources it needs. Confirm which URLs the renderer can reach before you widen any network policy to make a failing report succeed.

When a fixed-scope troubleshooting engagement makes sense

Internal staff can usually fix a missing report on their own when the failure is isolated, reproducible and visible in the logs of one component. A single job that fails once after a configuration change, a Slack message that stops after a scope change, or a dashboard that times out only for one user are typically within reach of the team that already runs Superset. A fixed-scope review becomes worth considering when the same class of failure returns after each upgrade, when the Celery worker, beat process, Redis broker and Playwright browser cannot be observed from inside a restricted network, or when the team cannot see executor logs at all. In those cases the cost is often the time spent guessing across layers, and an outside reviewer can narrow the search faster.

Before asking for a quote, decide which questions the review must answer. Scope the review to a named set of reports, a named Superset version and a named environment, and agree on whether the work includes changes to the image or only diagnosis. Ask the provider to state in writing what they will need from you: read access to Superset logs, a staging instance that mirrors production, the SECRET_KEY handling process, SMTP or Slack credentials for a test recipient, and a named contact who can approve a restart. Ask how any change will be tested against the same report schedule that failed, and whether the review will include the dry-run mode check described earlier.

Expect written deliverables that a reader can keep and check later. A root-cause note should identify the failing component, the evidence for it (log excerpts, configuration values and versions, with secrets removed), the reason the failure occurred, and the change that addresses it. A verified test report should record each affected report type, the delivery channel, the recipient, the timestamp of the run and the result, including screenshots where the report depends on rendering. Request a list of open risks and any configuration left unchanged on purpose. No engagement can promise that every future report will deliver, so ask the provider to define what verification covers and what it does not.

How DeployOpen scopes and supports Superset report fixes

DeployOpen approaches alerts and report troubleshooting as a bounded engineering task inside your own infrastructure. We start from the written scope, reproduce the failing delivery path end to end, and fix it in the components that actually break, then hand over the evidence and runbooks your team needs to keep reports arriving.

How we scope

  • The written scope lists which alerts and scheduled reports are affected and which delivery channels, email or Slack, must be fixed.
  • Scope records the Superset version, metadata database, cache and worker topology, and where the image is built and run.
  • Engagements are fixed-scope, so scope, deliverables and timelines are agreed in writing before any troubleshooting starts.

How we build

  • We trace each failing report through beat scheduling, worker execution, screenshot rendering and delivery, and record where it stops.
  • Fixes cover Celery beat and worker configuration, Chromium and Playwright in the image, executor user permissions and timeout settings.
  • We verify each fix with dry-run mode and controlled test sends to your SMTP relay or Slack workspace before any recipient list is restored.

How we hand over

  • You receive a written record of each root cause, the configuration or image changes made, and the test results behind them.
  • Runbooks cover checking beat and worker health, reading report logs, rotating Slack or SMTP credentials and re-running a failed report.
  • Your team walks through the handover with us so the people who run Superset can repeat the checks without us.

How we support

  • Ongoing support, upgrades and continuous testing are available as retainers, including re-checks after Superset version upgrades.
  • Support can cover reviewing report failures after changes to dashboard size, data volume or the Slack and SMTP configuration.
  • Retainer scope, response expectations and review cadence are written down in the agreement, so you know what is covered before you need it.

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.