Intermittent plugin errors in production — Grafana 11.4.0, Google Sheets 2.2.1 and Business Charts 7.2.2

Hello Grafana Community,

I’m looking for help investigating recurring plugin errors affecting a business-critical production dashboard.

Environment:

  • Grafana Server: 11.4.0

  • Google Sheets datasource: 2.2.1

  • Business Charts (Volkov Labs): 7.2.2 (version recorded in the dashboard JSON)

  • PostgreSQL datasource

Issue:

Our Health Score dashboard contains 15 Business Charts panels. Each panel queries Google Sheets and PostgreSQL, then uses Grafana transformations to join and filter the data.

Several panels intermittently display:

An error occurred within the plugin

Sometimes nearly all 15 panels fail simultaneously. Other times, the entire dashboard loads correctly without any changes to its configuration, JavaScript, or data sources.

We have also experienced occasional infinite loading in another dashboard (Win-Loss) that uses a different Google Sheets spreadsheet.

What we’ve tried:

  • Increasing Google Sheets cache duration from 300 to 900 and 1800 seconds in experimental configurations.

  • Optimizing some JavaScript code.

  • Testing copies of the original dashboard.

  • Comparing the original dashboard with its backup.

Unfortunately, the instability persists.

Questions:

  1. Are there known issues involving Grafana 11.4.0, Google Sheets datasource 2.2.1, or Business Charts 7.2.2?

  2. Which newer Google Sheets plugin version can safely run on Grafana 11.4.0?

  3. Could concurrent queries, transformations, or plugin initialization cause these intermittent errors?

  4. Which browser or server logs should we collect to identify the root cause?

  5. Is there a recommended way to improve dashboard reliability without modifying our production ETL?

We want to preserve all existing business calculations and filters while improving reliability.

Any diagnostic guidance would be greatly appreciated.

Thank you!

image

Hi @guilherme1208moraes, welcome to the community!

“An error occurred within the plugin” is a generic message. Please check the browser developer tools (F12 → Console and Network) while the panels are failing to identify the underlying error.

Since all 15 panels sometimes fail simultaneously and recover on their own, I would investigate two possibilities →

Google Sheets API quota limits → Multiple panels querying Google Sheets simultaneously could contribute to quota exhaustion, particularly on a cold cache. Check Google Cloud Console → APIs & Services → Google Sheets API → Metrics/Quotas for 429 Too Many Requests responses.

Business Charts handling empty data → If a query fails or returns no data, custom chart code that assumes data.series[0] exists may throw an exception. You can add a guard at the top of your chart function: if (!data?.series?.length) { return {}; }

To reduce duplicate API requests → If multiple panels query the same Google Sheets data, consider executing the query once and using Grafana’s -- Dashboard -- datasource in the other panels. This lets you reuse the query result while keeping panel-specific transformations.

Versions → Business Charts 7.x supports Grafana 11, and Google Sheets 2.2.1 works on 11.4.0. Please don’t update the Google Sheets plugin on its own, because recent versions require Grafana 11.6 or newer.

Could you share the browser console error and the HTTP status/response of the failing /api/ds/query request? That would help narrow down the root cause.

Thank you for your guidance. I captured the failed request in the browser Network tab.

The request is sent to:

POST /api/ds/query?ds_type=grafana-googlesheets-datasource

It returns HTTP 500 with the following response:

{
  "message": "An error occurred within the plugin",
  "messageId": "plugin.downstreamError",
  "statusCode": 500,
  "traceID": ""
}

The failing query reads Historico_Grafana!A1:AW with a configured cache duration of 900 seconds.

During the same dashboard load, other Google Sheets queries return HTTP 200 with approximately 668 KB of data, while some return HTTP 500 after roughly 7–10 seconds. PostgreSQL queries are also returning HTTP 200.

This confirms that the datasource query is failing before the chart can render, although the underlying cause of the plugin error is still unknown.

Could this be related to Google Sheets API quotas, a backend issue in plugin version 2.2.1, or concurrent requests?

Would Grafana server logs provide more detailed information about the plugin.downstreamError response?

I’m also evaluating the Dashboard datasource to reduce repeated Google Sheets queries without changing our production ETL.

Thanks again!

the 500 from the sheets plugin usually means the datasource hit an upstream error like quota or a malformed range so checking the sheet itself for hidden chars or permission changes helps also try lowerring the concurrent query count by spreadding panels across tabs or adding a small stagger delay in the dashboard json have you looked at the Grafana server logs for the exact stack trace when the 500 occurs?

How many rows are you pulling or querying from Google sheets

If you used another tool other than grafana such as python visualization do you get the same error?

Hi @guilherme1208moraes, thanks for capturing the request, that narrows it down.

Yes, the server logs should show more detail. plugin.downstreamError with an empty traceID means the plugin’s call to Google failed, and the 7-10 second delay before the 500 suggests a timeout or transient upstream error. The browser response won’t show the real cause.

Get the underlying error from the server log

Search the Grafana log for grafana-googlesheets-datasource around a failure timestamp. If nothing useful appears, enable debug logging for this plugin in grafana.ini, restart Grafana, and reproduce the error:

[log]
filters = plugin.grafana-googlesheets-datasource:debug

Reduce simultaneous requests (a likely contributor)

Historico_Grafana!A1:AW returns about 668 KB per call, and 15 panels request it at once when the cache is cold. That fits all panels failing together and recovering on their own. Run the query once in a single panel and set the other panels to the -- Dashboard -- datasource using that panel’s result. Each panel keeps its own transformations, and your ETL stays unchanged.

Rule out Google’s side

How many rows does the sheet have? Also, if you read the same range with Python or the Sheets API directly, does it also fail or run slowly? Check the Sheets API quotas in Google Cloud Console and the sheet’s sharing permissions too.

Please share the log lines around a 500 and we can narrow it down.

Hi everyone, thank you for the suggestions and detailed guidance!

I’ve continued investigating the issue and have some additional findings.

Environment:

  • Grafana 11.4.0

  • Google Sheets datasource 2.2.1

  • Business Charts 7.2.2

  • PostgreSQL datasource

Confirmed findings:

  1. Multiple requests to grafana-googlesheets-datasource intermittently return HTTP 500 with plugin.downstreamError and an empty traceID.

  2. Other requests to the same spreadsheet and range (Historico_Grafana!A1:AW) return HTTP 200, with approximately 668 KB of data.

  3. PostgreSQL queries continue returning HTTP 200 during these failures.

  4. Some Google Sheets requests fail in less than one second, while others fail after approximately 7–10 seconds.

  5. The problem sometimes disappears without changing the dashboard configuration.

Regarding query sharing:

Our dashboard combines Google Sheets and PostgreSQL using Mixed datasource panels, with panel-specific SQL queries and transformations.

I attempted to centralize Google Sheets queries using the Dashboard datasource, but Grafana returned:

Dashboard data source cannot be used with Mixed data source.

Therefore, this approach cannot be applied directly to our existing Mixed panels.

We have also tested longer cache durations, although the backend errors have not yet been eliminated.

Next steps:

I’ll ask our administrator to inspect the Grafana server logs and enable plugin-specific debug logging if necessary.

I’ll also check the number of rows in the spreadsheet and investigate whether the same range can be queried reliably outside Grafana using Python and the Google Sheets API.

One question:

Given the Mixed datasource limitation in Grafana 11.4.0, is there a supported method to share only the Google Sheets query result while preserving independent PostgreSQL queries and transformations in each panel?

Thank you all for helping us investigate this production issue!

I think it would be best to answer the question we asked of you about performance of google sheet query outside of grafana before answering your question