Grafana Image Renderer issues after update to 11.5

Hi,

We’ve been using standalone image renderer (helm chart imageRenderer.enabled: true) to screenshot panels linked to alerts. In Grafana 11.3 it worked well but after update to 11.5 it stopped creating screenshots (both in 3.11.5 version as in latest version).
Logs (image renderer) that are probably related to this issue:

{"error":"TypeError: Cannot read properties of undefined (reading 'keys')","level":"error","message":"Browser uncaught exception"}
{"failure":"net::ERR_ABORTED","level":"error","message":"Browser request failed","method":"POST","url":"http://grafana-dev.grafana-dev/api/ds/query?ds_type=prometheus&requestId=SQR100"}
{"level":"debug","message":"10.244.0.199 - - [24/Mar/2025:08:16:35 +0000] \"GET /render?deviceScaleFactor=1.000000&domain=grafana-dev.grafana-dev&encoding=png&height=500&renderKey=DnjNxwkYtxn7XqE9uSWqDg3ZhO0iVkdd&timeout=30&timezone=&url=<url>&width=1000 HTTP/1.1\" - - \"-\" \"Grafana/11.5.2\"\n"}
{"level":"debug","message":"Connection closed","url":"<url>"}
{"err":"AbortError: This operation was aborted\n    at new DOMException (node:internal/per_context/domexception:53:5)\n    at AbortController.abort (node:internal/abort_controller:465:18)\n    at IncomingMessage.<anonymous> (/usr/src/app/build/service/http-server.js:56:33)\n    at IncomingMessage.emit (node:events:518:28)\n    at emitCloseNT (node:internal/streams/destroy:148:10)\n    at process.processTicksAndRejections (node:internal/process/task_queues:89:21)","level":"error","message":"Error while performing step","step":"panelsRendered","url":"<url>"}

Logs from Grafana instance:

{"dashboard":"20e69027c8e0e703b4c63ec23c768afd","level":"debug","logger":"ngalert.image","msg":"Requesting screenshot","org_id":1,"panel":11,"rule_uid":"cegspyj2y639cc","t":"2025-03-24T10:34:24.062630217Z","traceID":"ac8aa0daeedfc11ef444503d39dd33f0"}
{"level":"info","logger":"rendering","msg":"Rendering","org_id":1,"path":"<dashboard path>","renderer":"http","rule_uid":"cegspyj2y639cc","t":"2025-03-24T10:34:24.070847904Z","traceID":"ac8aa0daeedfc11ef444503d39dd33f0","userID":0}
{"level":"debug","logger":"rendering","msg":"calling remote rendering service","org_id":1,"renderer":"http","rule_uid":"cegspyj2y639cc","t":"2025-03-24T10:34:24.085764779Z","traceID":"ac8aa0daeedfc11ef444503d39dd33f0","url":"http://grafana-dev-image-renderer.grafana-dev:8081/render?deviceScaleFactor=1.000000&domain=grafana-dev.grafana-dev&encoding=png&height=500&renderKey=t2KGzXlQOEQ2Vhoxe2UoD0zzILqVJKvk&timeout=30&timezone=&url=<url>%26render%3D1&width=1000"}

I’ve noticed that sometime Grafana logs 400 http error from datasource but the query itself for the dashboard is not malformed - in dashboard it appears correctly. Sometimes (mainly during resolving the alert by deleting the rule) imageUrl appears in the message, but not always (anyway more often than it does during “firing” the alert).

Both Grafana and image renderer are set to debug logs so I’m not sure I can provide any more data.

Config from Grafana’s side (helm chart, under grafana.ini):

    unified_alerting.screenshots:
      capture: true
      max_concurrent_screenshots: 5
      capture_timeout: 30s
    unified_alerting.state_history.annotations:
      max_age: 14d
    external_image_storage:
      provider: local
    rendering:
      renderer_token: "-"
      server_url: http://grafana-image-renderer.grafana-dev.svc.cluster.local:8081/render
      callback_url: http://grafana-dev.grafana-dev.svc.cluster.local:3000/

config of imageRenderer:

  imageRenderer:
    enabled: true
    env:
      HTTP_HOST: "0.0.0.0"
      RENDERING_ARGS: --no-sandbox,--disable-gpu,--window-size=1280x758
      RENDERING_MODE: clustered
      IGNORE_HTTPS_ERRORS: true
      AUTH_TOKEN: "-"
      RENDERING_CLUSTERING_MODE: "context"
      RENDERING_CLUSTERING_MAX_CONCURRENCY: 5
      ENABLE_METRICS: true
      XDG_CONFIG_HOME: /tmp/.chromium
      XDG_CACHE_HOME: /tmp/.chromium
      LOG_LEVEL: debug
    resources:
      limits:
        cpu: 1
        memory: 2Gi
    networkPolicy:
      limitIngress: false

Has someone struggled with this?