Visualisation de métriques
Find a file
Michael Atkinson 473d26d8f0
ImageUpload: Add presigned URL support for S3 external image storage (#119002)
* feat(imageupload): 🔗 add presigned URL support for S3 external image storage

Add `enable_presigned_urls` and `presigned_url_expiration` config options
to `[external_image_storage.s3]`, bringing S3 to parity with GCS and Azure.

When enabled, objects are uploaded without an ACL header (compatible with
BucketOwnerEnforced buckets that disable ACLs) and a time-limited
presigned GET URL is returned instead of a direct S3 URL.

Closes #82707

Co-Authored-By: Claude <svc-devxp-claude@slack-corp.com>

* refactor(imageupload): 🔧 address PR review feedback for S3 presigned URLs

- Refactor NewS3Uploader to accept S3UploaderOptions struct instead of
  positional parameters
- Remove dead ACL override (ACL was set to "private" but never used
  since upload skips ACL when presigned URLs are enabled)
- Add validation that presigned_url_expiration is >= 0
- Remove tautological constructor tests
- Add S3 client interface (s3ifaces) with stubbable newS3Client for
  testability, mirroring the existing GCS pattern
- Add unit tests for both upload paths: regular (with ACL) and presigned
  URL (without ACL)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude <svc-devxp-claude@slack-corp.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-06 09:14:06 -04:00
.changelog-archive Update dependency prettier to v3.6.2 (#108689) 2025-07-25 17:47:44 +01:00
.citools chore(ci): Add govulncheck workflow (#123435) 2026-04-27 15:06:02 +00:00
.github CI: Exclude generated openapi specs from mt-compat check (#124260) 2026-05-06 13:48:47 +01:00
.vim Chore: Upgrade yarn and editor sdks (#42847) 2021-12-08 14:40:24 +01:00
.vscode Chore: Move betterer eslint rules to use eslint suppressions (#106267) 2025-09-04 10:47:13 +01:00
.yarn Chore: upgrade to Storybook 10 (#124036) 2026-05-05 08:25:34 +00:00
apps Preferences: Update comments in preferences spec (#124253) 2026-05-06 13:43:29 +02:00
conf ImageUpload: Add presigned URL support for S3 external image storage (#119002) 2026-05-06 09:14:06 -04:00
contribute Zipkin: Remove from core plugins (#124148) 2026-05-06 13:31:03 +02:00
cue.mod ci: add validation for cue using new make target and backend check (#121032) 2026-03-25 10:35:49 -06:00
devenv Zipkin: Remove from core plugins (#124148) 2026-05-06 13:31:03 +02:00
docs ImageUpload: Add presigned URL support for S3 external image storage (#119002) 2026-05-06 09:14:06 -04:00
e2e-playwright Zipkin: Remove from core plugins (#124148) 2026-05-06 13:31:03 +02:00
emails Auth: Remove passwordless (magic link) authentication backend implementation (#118881) 2026-03-27 09:19:58 -05:00
grafana-mixin Log Details: Show embedded trace if available (#109926) 2025-08-25 14:06:01 +00:00
hack Chore: Bump promlib v0.0.11 (#123736) 2026-04-30 17:30:31 +02:00
kinds Dashboards: Add enableGroupBy field to v1 ad-hoc variable schema and conversions (#121236) 2026-03-31 11:50:21 -04:00
local Packaging: Dockerfile copy local folder (#64766) 2023-03-14 14:44:11 -05:00
packages Chore: Convert some more class components to functional (#123964) 2026-05-06 13:18:12 +01:00
packaging fix: replace 'grafana-cli' with 'grafana cli' in custom Dockerfile (#122869) 2026-04-17 11:39:25 +02:00
pkg ImageUpload: Add presigned URL support for S3 external image storage (#119002) 2026-05-06 09:14:06 -04:00
public DashboardLibrary: Fix template card thumbnail collapsing to half width (#124271) 2026-05-06 09:59:56 -03:00
scripts Analytics: silent option for reportInteraction and defineFeatureEvents (#123905) 2026-05-06 09:50:41 +02:00
tools Alerting: Add alertmanager integration tests (#100106) 2025-02-13 11:36:45 +01:00
.air.toml make: build-go: add trimpath for non-dev, and debug-friendly flags for dev (#120264) 2026-03-13 10:40:45 +01:00
.browserslistrc Babel: Target more modern browsers, updates browserlistrc (#32573) 2021-04-01 10:32:00 +02:00
.dockerignore CI: Use docker build without dagger in release-build (#121828) 2026-04-03 10:24:08 +02:00
.editorconfig Chore: Enable PR testing in Drone (#26189) 2020-07-10 16:09:21 +02:00
.gitattributes Chore: Mark more files as generated in gitattributes (#113776) 2025-11-13 09:09:15 +00:00
.gitignore Chore: upgrade to Storybook 10 (#124036) 2026-05-05 08:25:34 +00:00
.golangci.yml Zipkin: Remove from core plugins (#124148) 2026-05-06 13:31:03 +02:00
.ignore Remove support for Google Spanner database. (#105846) 2025-05-23 11:35:59 +02:00
.levignore.js Adds levitate levignore configuration file to prevent breaking change notifications from expected typescript symbols (#74371) 2023-09-05 15:00:13 +02:00
.madgerc Exclude type only imports circular dependencies check (#120075) 2026-03-12 08:37:48 -04:00
.nvmrc Chore: Update node to v24 (#112649) 2025-10-29 17:17:07 +01:00
.nxignore Alerting/Chore: Mock API (MSW) in browser (#89223) 2024-09-04 10:22:03 +01:00
.policy.yml CI: Ignore feature flag files in MT compat check (#123849) 2026-05-06 10:58:50 +00:00
.policy.yml.tmpl fix: wait for patch to complete (#123188) 2026-04-22 07:24:33 +00:00
.prettierignore Feature: Generate OpenFeature type-safe key augmentation (#123275) 2026-04-27 13:46:38 +01:00
.prettierrc.js Toolkit: Remove deprecated plugin:build (#67485) 2023-04-28 14:33:16 +02:00
.vale.ini Lint only Markdown files (#101533) 2025-03-04 11:00:35 +00:00
.yarnrc.yml Yarn: Enable global cache (#120578) 2026-03-20 14:11:47 +00:00
AGENTS.md Zipkin: Remove from core plugins (#124148) 2026-05-06 13:31:03 +02:00
CHANGELOG.md Release: update changelog for main (#122910) 2026-04-17 08:02:01 +00:00
CLAUDE.md agents: add CLAUDE.md (#120503) 2026-03-17 13:10:51 +01:00
CODE_OF_CONDUCT.md Fixing typos (#70487) 2023-06-22 09:43:38 +01:00
CONTRIBUTING.md Update CONTRIBUTING.md (#117033) 2026-01-30 11:17:02 +01:00
crowdin.yml Prometheus: Remove grafana-prometheus package#122953 (#123035) 2026-04-20 12:31:39 +02:00
Dockerfile Dashboards: Remove unused v2alpha0 schema and kindsv2 generator (#123822) 2026-04-29 13:50:27 -04:00
embed.go Core: Remove thema and kindsys dependencies (#84499) 2024-03-21 11:11:29 +01:00
eslint-suppressions.json Chore: Convert some more class components to functional (#123964) 2026-05-06 13:18:12 +01:00
eslint.config.js Zipkin: Remove from core plugins (#124148) 2026-05-06 13:31:03 +02:00
go.mod deps(go): bump pgregory.net/rapid from 1.2.0 to 1.3.0 (#124213) 2026-05-06 14:28:04 +02:00
go.sum deps(go): bump pgregory.net/rapid from 1.2.0 to 1.3.0 (#124213) 2026-05-06 14:28:04 +02:00
go.work chore(deps): update grafana-app-sdk to v0.54.1 (#124079) 2026-05-05 10:47:02 +02:00
go.work.sum Zipkin: Remove from core plugins (#124148) 2026-05-06 13:31:03 +02:00
GOVERNANCE.md Update dependency prettier to v3.6.2 (#108689) 2025-07-25 17:47:44 +01:00
HALL_OF_FAME.md Update HALL_OF_FAME.md (#102267) 2025-03-17 08:25:02 +01:00
i18next.config.ts Add faceted labels filter for time series legend (#119918) 2026-03-12 15:57:58 +01:00
jest.config.codeowner.js Timeseries: Add tests for components (#122702) 2026-04-16 10:00:09 -07:00
jest.config.js Zipkin: Remove from core plugins (#124148) 2026-05-06 13:31:03 +02:00
latest.json Release: Deprecate latest.json and replace with api call to grafana.com (#80537) 2024-01-16 11:19:32 +00:00
lefthook.rc Chore: Fix lefthook not running (#106196) 2025-05-29 11:06:33 +02:00
lefthook.yml Chore: remove betterer command from lefthook (#110600) 2025-09-04 15:16:21 +01:00
lerna.json Release: Bump version to 13.1.0-pre (#122222) 2026-04-09 12:58:20 +02:00
LICENSE Re-license Grafana to AGPLv3 (#33184) 2021-04-20 19:03:30 +02:00
LICENSING.md Actions: Introduce actionlint (#105224) 2025-05-13 08:23:59 +02:00
MAINTAINERS.md Adds johnny as codeowner for alerting docs (#99877) 2025-02-04 13:10:57 +01:00
Makefile fix: module is now fully tidy (#124024) 2026-05-04 12:14:24 +02:00
NOTICE.md Prettier: Fix all markdown files and add markdown files to CI verify step (#39776) 2021-09-29 14:34:40 +02:00
nx.json Chore: Disable tui for Nx (#109896) 2025-08-20 10:08:03 +00:00
package.json Analytics: silent option for reportInteraction and defineFeatureEvents (#123905) 2026-05-06 09:50:41 +02:00
playwright.config.ts Zipkin: Remove from core plugins (#124148) 2026-05-06 13:31:03 +02:00
playwright.storybook.config.ts Chore: Add lint rule for consistent type imports (#121336) 2026-03-30 12:44:01 +01:00
project.json Frontend: use custom conditions for development and build (#111685) 2025-12-18 11:47:38 +01:00
README.md add feedback survey to contributing related docs (#113168) 2025-10-30 09:36:44 +01:00
relyance.yaml Dashboards: Remove unused v2alpha0 schema and kindsv2 generator (#123822) 2026-04-29 13:50:27 -04:00
ROADMAP.md Prettier: Fix all markdown files and add markdown files to CI verify step (#39776) 2021-09-29 14:34:40 +02:00
stylelint.config.js Update dependency stylelint to v16 (#83252) 2024-02-23 11:56:38 +02:00
SUPPORT.md Prettier: Fix all markdown files and add markdown files to CI verify step (#39776) 2021-09-29 14:34:40 +02:00
tsconfig.json Build: Upgrade TypeScript to 6.0 (#118528) 2026-04-15 16:37:34 +01:00
WORKFLOW.md Minor correction done in WORKFLOW.md (#80505) 2024-04-12 17:56:10 +02:00
yarn.lock Zipkin: Remove from core plugins (#124148) 2026-05-06 13:31:03 +02:00

Grafana Logo (Light) Grafana Logo (Dark)

The open-source platform for monitoring and observability

License Go Report Card

Grafana allows you to query, visualize, alert on and understand your metrics no matter where they are stored. Create, explore, and share dashboards with your team and foster a data-driven culture:

  • Visualizations: Fast and flexible client side graphs with a multitude of options. Panel plugins offer many different ways to visualize metrics and logs.
  • Dynamic Dashboards: Create dynamic & reusable dashboards with template variables that appear as dropdowns at the top of the dashboard.
  • Explore Metrics: Explore your data through ad-hoc queries and dynamic drilldown. Split view and compare different time ranges, queries and data sources side by side.
  • Explore Logs: Experience the magic of switching from metrics to logs with preserved label filters. Quickly search through all your logs or streaming them live.
  • Alerting: Visually define alert rules for your most important metrics. Grafana will continuously evaluate and send notifications to systems like Slack, PagerDuty, VictorOps, OpsGenie.
  • Mixed Data Sources: Mix different data sources in the same graph! You can specify a data source on a per-query basis. This works for even custom datasources.

Get started

Unsure if Grafana is for you? Watch Grafana in action on play.grafana.org!

Documentation

The Grafana documentation is available at grafana.com/docs.

Contributing

If you're interested in contributing to the Grafana project:

Share your contributor experience in our feedback survey to help us improve.

Get involved

This project is tested with BrowserStack.

License

Grafana is distributed under AGPL-3.0-only. For Apache-2.0 exceptions, see LICENSING.md.