diff --git a/.betterer.results b/.betterer.results index 14981d93b13..678b91f6694 100644 --- a/.betterer.results +++ b/.betterer.results @@ -125,12 +125,9 @@ exports[`no enzyme tests`] = { "public/app/core/components/QueryOperationRow/QueryOperationAction.test.tsx:3032694716": [ [0, 19, 13, "RegExp match", "2409514259"] ], - "public/app/core/components/QueryOperationRow/QueryOperationRow.test.tsx:2026575657": [ + "public/app/core/components/QueryOperationRow/QueryOperationRow.test.tsx:3743889097": [ [0, 26, 13, "RegExp match", "2409514259"] ], - "public/app/core/components/Select/FolderPicker.test.tsx:993468764": [ - [0, 19, 13, "RegExp match", "2409514259"] - ], "public/app/core/components/Select/MetricSelect.test.tsx:3351544014": [ [0, 19, 13, "RegExp match", "2409514259"] ], @@ -209,11 +206,11 @@ exports[`no enzyme tests`] = { "public/app/plugins/datasource/cloud-monitoring/components/Aggregation.test.tsx:3822406835": [ [1, 19, 13, "RegExp match", "2409514259"] ], - "public/app/plugins/datasource/cloudwatch/components/ConfigEditor.test.tsx:1224072551": [ + "public/app/plugins/datasource/cloudwatch/components/ConfigEditor.test.tsx:227258837": [ [0, 19, 13, "RegExp match", "2409514259"] ], - "public/app/plugins/datasource/cloudwatch/components/LogsQueryField.test.tsx:2097436158": [ - [1, 19, 13, "RegExp match", "2409514259"] + "public/app/plugins/datasource/cloudwatch/components/LogsQueryField.test.tsx:1501504663": [ + [2, 19, 13, "RegExp match", "2409514259"] ], "public/app/plugins/datasource/elasticsearch/configuration/ConfigEditor.test.tsx:3481855642": [ [0, 26, 13, "RegExp match", "2409514259"] @@ -221,7 +218,7 @@ exports[`no enzyme tests`] = { "public/app/plugins/datasource/elasticsearch/configuration/DataLinks.test.tsx:248699332": [ [0, 17, 13, "RegExp match", "2409514259"] ], - "public/app/plugins/datasource/influxdb/components/ConfigEditor.test.tsx:3456478975": [ + "public/app/plugins/datasource/influxdb/components/ConfigEditor.test.tsx:57753101": [ [0, 19, 13, "RegExp match", "2409514259"] ], "public/app/plugins/datasource/loki/components/LokiExploreQueryEditor.test.tsx:1488067923": [ diff --git a/.drone.yml b/.drone.yml index 40305f9faf0..3e95e3fd18c 100644 --- a/.drone.yml +++ b/.drone.yml @@ -15,7 +15,7 @@ steps: name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.49/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -23,13 +23,13 @@ steps: - ./bin/grabpl gen-version --build-id ${DRONE_BUILD_NUMBER} depends_on: - grabpl - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: gen-version - commands: - yarn install --immutable depends_on: - grabpl - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: yarn-install - commands: - yarn run prettier:check @@ -40,7 +40,7 @@ steps: - yarn-install environment: TEST_MAX_WORKERS: 50% - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: lint-frontend - commands: - yarn run ci:test-frontend @@ -48,7 +48,7 @@ steps: - yarn-install environment: TEST_MAX_WORKERS: 50% - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: test-frontend trigger: event: @@ -80,7 +80,7 @@ steps: name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.49/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -88,11 +88,11 @@ steps: - ./bin/grabpl gen-version --build-id ${DRONE_BUILD_NUMBER} depends_on: - grabpl - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: gen-version - commands: - make gen-go - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: wire-install - commands: - ./bin/grabpl verify-drone @@ -110,13 +110,13 @@ steps: wan" > words_to_ignore.txt - codespell -I words_to_ignore.txt docs/ - rm words_to_ignore.txt - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: codespell - commands: - ./bin/grabpl shellcheck depends_on: - grabpl - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: shellcheck - commands: - ./bin/grabpl lint-backend --edition oss @@ -124,19 +124,19 @@ steps: - wire-install environment: CGO_ENABLED: "1" - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: lint-backend - commands: - ./bin/grabpl test-backend --edition oss depends_on: - wire-install - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: test-backend - commands: - ./bin/grabpl integration-tests --edition oss depends_on: - wire-install - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: test-backend-integration trigger: event: @@ -168,7 +168,7 @@ steps: name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.49/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -176,17 +176,17 @@ steps: - ./bin/grabpl gen-version --build-id ${DRONE_BUILD_NUMBER} depends_on: - grabpl - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: gen-version - commands: - make gen-go - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: wire-install - commands: - yarn install --immutable depends_on: - grabpl - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: yarn-install - failure: ignore image: grafana/drone-downstream @@ -207,7 +207,7 @@ steps: depends_on: - gen-version - wire-install - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: build-backend - commands: - ./bin/grabpl build-frontend --jobs 8 --edition oss --build-id ${DRONE_BUILD_NUMBER} @@ -216,7 +216,7 @@ steps: - yarn-install environment: NODE_OPTIONS: --max_old_space_size=8192 - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: build-frontend - commands: - ./bin/grabpl build-frontend-packages --jobs 8 --edition oss --build-id ${DRONE_BUILD_NUMBER} @@ -225,7 +225,7 @@ steps: - yarn-install environment: NODE_OPTIONS: --max_old_space_size=8192 - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: build-frontend-packages - commands: - ./bin/grabpl build-plugins --jobs 8 --edition oss @@ -233,13 +233,13 @@ steps: - gen-version - yarn-install environment: null - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: build-plugins - commands: - ./bin/linux-amd64/grafana-cli cue validate-schema --grafana-root . depends_on: - build-backend - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: validate-scuemata - commands: - '# It is required that the generated Typescript be in sync with the input CUE @@ -252,7 +252,7 @@ steps: - ./bin/linux-amd64/grafana-cli cue gen-ts --grafana-root . --diff depends_on: - validate-scuemata - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: ensure-cuetsified - commands: - . scripts/build/gpg-test-vars.sh && ./bin/grabpl package --jobs 8 --edition oss @@ -263,7 +263,7 @@ steps: - build-frontend - build-frontend-packages environment: null - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: package - commands: - ./scripts/grafana-server/start-server @@ -276,7 +276,7 @@ steps: environment: ARCH: linux-amd64 PORT: 3001 - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: grafana-server - commands: - apt-get install -y netcat @@ -354,7 +354,7 @@ steps: - build-frontend-packages environment: NODE_OPTIONS: --max_old_space_size=4096 - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: build-storybook - commands: - yarn wait-on http://$HOST:$PORT @@ -374,7 +374,7 @@ steps: - cp dist/*.tar.gz* packaging/docker/ depends_on: - package - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: copy-packages-for-docker - commands: - ./bin/grabpl build-docker --edition oss -archs amd64 @@ -434,7 +434,7 @@ services: steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.49/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -455,7 +455,7 @@ steps: GRAFANA_TEST_DB: postgres PGPASSWORD: grafanatest POSTGRES_HOST: postgres - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: postgres-integration-tests - commands: - apt-get update @@ -470,7 +470,7 @@ steps: environment: GRAFANA_TEST_DB: mysql MYSQL_HOST: mysql - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: mysql-integration-tests trigger: event: @@ -504,7 +504,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.49/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -516,13 +516,13 @@ steps: - ./bin/grabpl gen-version --build-id ${DRONE_BUILD_NUMBER} depends_on: - grabpl - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: gen-version - commands: - yarn install --immutable depends_on: - grabpl - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: yarn-install - commands: - |- @@ -534,7 +534,7 @@ steps: wan" > words_to_ignore.txt - codespell -I words_to_ignore.txt docs/ - rm words_to_ignore.txt - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: codespell - commands: - yarn run prettier:checkDocs @@ -542,7 +542,7 @@ steps: - yarn-install environment: NODE_OPTIONS: --max_old_space_size=8192 - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: lint-docs - commands: - ./bin/grabpl build-frontend-packages --jobs 8 --edition oss --build-id ${DRONE_BUILD_NUMBER} @@ -551,13 +551,13 @@ steps: - yarn-install environment: NODE_OPTIONS: --max_old_space_size=8192 - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: build-frontend-packages - commands: - ./scripts/ci-reference-docs-lint.sh ci depends_on: - build-frontend-packages - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: build-frontend-docs - commands: - mkdir -p /hugo/content/docs/grafana @@ -594,7 +594,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.49/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -606,13 +606,13 @@ steps: - ./bin/grabpl gen-version --build-id ${DRONE_BUILD_NUMBER} depends_on: - grabpl - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: gen-version - commands: - yarn install --immutable depends_on: - grabpl - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: yarn-install - commands: - |- @@ -624,7 +624,7 @@ steps: wan" > words_to_ignore.txt - codespell -I words_to_ignore.txt docs/ - rm words_to_ignore.txt - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: codespell - commands: - yarn run prettier:checkDocs @@ -632,7 +632,7 @@ steps: - yarn-install environment: NODE_OPTIONS: --max_old_space_size=8192 - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: lint-docs - commands: - ./bin/grabpl build-frontend-packages --jobs 8 --edition oss --build-id ${DRONE_BUILD_NUMBER} @@ -641,13 +641,13 @@ steps: - yarn-install environment: NODE_OPTIONS: --max_old_space_size=8192 - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: build-frontend-packages - commands: - ./scripts/ci-reference-docs-lint.sh ci depends_on: - build-frontend-packages - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: build-frontend-docs - commands: - mkdir -p /hugo/content/docs/grafana @@ -683,7 +683,7 @@ steps: name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.49/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -691,13 +691,13 @@ steps: - ./bin/grabpl gen-version --build-id ${DRONE_BUILD_NUMBER} depends_on: - grabpl - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: gen-version - commands: - yarn install --immutable depends_on: - grabpl - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: yarn-install - commands: - yarn run prettier:check @@ -708,7 +708,7 @@ steps: - yarn-install environment: TEST_MAX_WORKERS: 50% - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: lint-frontend - commands: - yarn run ci:test-frontend @@ -716,7 +716,7 @@ steps: - yarn-install environment: TEST_MAX_WORKERS: 50% - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: test-frontend trigger: branch: main @@ -744,7 +744,7 @@ steps: name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.49/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -752,11 +752,11 @@ steps: - ./bin/grabpl gen-version --build-id ${DRONE_BUILD_NUMBER} depends_on: - grabpl - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: gen-version - commands: - make gen-go - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: wire-install - commands: - ./bin/grabpl verify-drone @@ -774,13 +774,13 @@ steps: wan" > words_to_ignore.txt - codespell -I words_to_ignore.txt docs/ - rm words_to_ignore.txt - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: codespell - commands: - ./bin/grabpl shellcheck depends_on: - grabpl - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: shellcheck - commands: - ./bin/grabpl lint-backend --edition oss @@ -788,19 +788,19 @@ steps: - wire-install environment: CGO_ENABLED: "1" - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: lint-backend - commands: - ./bin/grabpl test-backend --edition oss depends_on: - wire-install - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: test-backend - commands: - ./bin/grabpl integration-tests --edition oss depends_on: - wire-install - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: test-backend-integration trigger: branch: main @@ -828,7 +828,7 @@ steps: name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.49/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -836,17 +836,17 @@ steps: - ./bin/grabpl gen-version --build-id ${DRONE_BUILD_NUMBER} depends_on: - grabpl - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: gen-version - commands: - make gen-go - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: wire-install - commands: - yarn install --immutable depends_on: - grabpl - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: yarn-install - commands: - git clone "https://$${GITHUB_TOKEN}@github.com/grafana/grafana-enterprise.git" @@ -867,7 +867,7 @@ steps: from_secret: github_token TEST_TAG: v0.0.0-test failure: ignore - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: trigger-test-release when: paths: @@ -892,7 +892,7 @@ steps: depends_on: - gen-version - wire-install - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: build-backend - commands: - ./bin/grabpl build-frontend --jobs 8 --edition oss --build-id ${DRONE_BUILD_NUMBER} @@ -901,7 +901,7 @@ steps: - yarn-install environment: NODE_OPTIONS: --max_old_space_size=8192 - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: build-frontend - commands: - ./bin/grabpl build-frontend-packages --jobs 8 --edition oss --build-id ${DRONE_BUILD_NUMBER} @@ -910,7 +910,7 @@ steps: - yarn-install environment: NODE_OPTIONS: --max_old_space_size=8192 - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: build-frontend-packages - commands: - ./bin/grabpl build-plugins --jobs 8 --edition oss --sign --signing-admin @@ -920,13 +920,13 @@ steps: environment: GRAFANA_API_KEY: from_secret: grafana_api_key - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: build-plugins - commands: - ./bin/linux-amd64/grafana-cli cue validate-schema --grafana-root . depends_on: - build-backend - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: validate-scuemata - commands: - '# It is required that the generated Typescript be in sync with the input CUE @@ -939,7 +939,7 @@ steps: - ./bin/linux-amd64/grafana-cli cue gen-ts --grafana-root . --diff depends_on: - validate-scuemata - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: ensure-cuetsified - commands: - ./bin/grabpl package --jobs 8 --edition oss --build-id ${DRONE_BUILD_NUMBER} --sign @@ -957,7 +957,7 @@ steps: from_secret: gpg_pub_key GRAFANA_API_KEY: from_secret: grafana_api_key - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: package - commands: - ./scripts/grafana-server/start-server @@ -970,7 +970,7 @@ steps: environment: ARCH: linux-amd64 PORT: 3001 - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: grafana-server - commands: - apt-get install -y netcat @@ -1048,7 +1048,7 @@ steps: - build-frontend-packages environment: NODE_OPTIONS: --max_old_space_size=4096 - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: build-storybook - commands: - ./bin/grabpl store-storybook --deployment canary --src-bucket grafana-storybook @@ -1089,7 +1089,7 @@ steps: GRAFANA_MISC_STATS_API_KEY: from_secret: grafana_misc_stats_api_key failure: ignore - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: publish-frontend-metrics when: repo: @@ -1099,7 +1099,7 @@ steps: - cp dist/*.tar.gz* packaging/docker/ depends_on: - package - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: copy-packages-for-docker - commands: - ./bin/grabpl build-docker --edition oss @@ -1177,7 +1177,7 @@ steps: environment: NPM_TOKEN: from_secret: npm_token - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: release-canary-npm-packages when: repo: @@ -1261,7 +1261,7 @@ services: steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.49/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -1282,7 +1282,7 @@ steps: GRAFANA_TEST_DB: postgres PGPASSWORD: grafanatest POSTGRES_HOST: postgres - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: postgres-integration-tests - commands: - apt-get update @@ -1297,7 +1297,7 @@ steps: environment: GRAFANA_TEST_DB: mysql MYSQL_HOST: mysql - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: mysql-integration-tests trigger: branch: main @@ -1334,7 +1334,7 @@ steps: name: identify-runner - commands: - $$ProgressPreference = "SilentlyContinue" - - Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.49/windows/grabpl.exe + - Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.50/windows/grabpl.exe -OutFile grabpl.exe image: grafana/ci-wix:0.1.1 name: windows-init @@ -1422,7 +1422,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.49/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -1507,7 +1507,7 @@ steps: name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.49/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -1515,24 +1515,24 @@ steps: - ./bin/grabpl gen-version ${DRONE_TAG} depends_on: - grabpl - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: gen-version - commands: - make gen-go - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: wire-install - commands: - yarn install --immutable depends_on: - grabpl - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: yarn-install - commands: - ./bin/grabpl build-backend --jobs 8 --edition oss ${DRONE_TAG} depends_on: - gen-version - wire-install - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: build-backend - commands: - ./bin/grabpl build-frontend --jobs 8 --edition oss ${DRONE_TAG} @@ -1541,7 +1541,7 @@ steps: - yarn-install environment: NODE_OPTIONS: --max_old_space_size=8192 - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: build-frontend - commands: - ./bin/grabpl build-frontend-packages --jobs 8 --edition oss ${DRONE_TAG} @@ -1550,7 +1550,7 @@ steps: - yarn-install environment: NODE_OPTIONS: --max_old_space_size=8192 - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: build-frontend-packages - commands: - ./bin/grabpl build-plugins --jobs 8 --edition oss --sign --signing-admin @@ -1560,13 +1560,13 @@ steps: environment: GRAFANA_API_KEY: from_secret: grafana_api_key - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: build-plugins - commands: - ./bin/linux-amd64/grafana-cli cue validate-schema --grafana-root . depends_on: - build-backend - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: validate-scuemata - commands: - '# It is required that the generated Typescript be in sync with the input CUE @@ -1579,7 +1579,7 @@ steps: - ./bin/linux-amd64/grafana-cli cue gen-ts --grafana-root . --diff depends_on: - validate-scuemata - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: ensure-cuetsified - commands: - ./bin/grabpl package --jobs 8 --edition oss --sign ${DRONE_TAG} @@ -1597,14 +1597,14 @@ steps: from_secret: gpg_pub_key GRAFANA_API_KEY: from_secret: grafana_api_key - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: package - commands: - ls dist/*.tar.gz* - cp dist/*.tar.gz* packaging/docker/ depends_on: - package - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: copy-packages-for-docker - commands: - ./bin/grabpl build-docker --edition oss --shouldSave @@ -1641,7 +1641,7 @@ steps: environment: ARCH: linux-amd64 PORT: 3001 - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: grafana-server - commands: - apt-get install -y netcat @@ -1719,7 +1719,7 @@ steps: - build-frontend-packages environment: NODE_OPTIONS: --max_old_space_size=4096 - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: build-storybook - commands: - ./bin/grabpl upload-cdn --edition oss --src-bucket "$${PRERELEASE_BUCKET}" --src-dir @@ -1813,7 +1813,7 @@ steps: name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.49/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -1821,23 +1821,23 @@ steps: - ./bin/grabpl gen-version ${DRONE_TAG} depends_on: - grabpl - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: gen-version - commands: - make gen-go - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: wire-install - commands: - yarn install --immutable depends_on: - grabpl - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: yarn-install - commands: - ./bin/grabpl shellcheck depends_on: - grabpl - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: shellcheck - commands: - |- @@ -1849,7 +1849,7 @@ steps: wan" > words_to_ignore.txt - codespell -I words_to_ignore.txt docs/ - rm words_to_ignore.txt - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: codespell - commands: - ./bin/grabpl lint-backend --edition oss @@ -1857,7 +1857,7 @@ steps: - wire-install environment: CGO_ENABLED: "1" - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: lint-backend - commands: - yarn run prettier:check @@ -1868,19 +1868,19 @@ steps: - yarn-install environment: TEST_MAX_WORKERS: 50% - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: lint-frontend - commands: - ./bin/grabpl test-backend --edition oss depends_on: - wire-install - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: test-backend - commands: - ./bin/grabpl integration-tests --edition oss depends_on: - wire-install - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: test-backend-integration - commands: - yarn run ci:test-frontend @@ -1888,7 +1888,7 @@ steps: - yarn-install environment: TEST_MAX_WORKERS: 50% - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: test-frontend trigger: event: @@ -1937,7 +1937,7 @@ services: steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.49/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -1958,7 +1958,7 @@ steps: GRAFANA_TEST_DB: postgres PGPASSWORD: grafanatest POSTGRES_HOST: postgres - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: postgres-integration-tests - commands: - apt-get update @@ -1973,7 +1973,7 @@ steps: environment: GRAFANA_TEST_DB: mysql MYSQL_HOST: mysql - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: mysql-integration-tests trigger: event: @@ -2014,7 +2014,7 @@ steps: name: identify-runner - commands: - $$ProgressPreference = "SilentlyContinue" - - Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.49/windows/grabpl.exe + - Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.50/windows/grabpl.exe -OutFile grabpl.exe image: grafana/ci-wix:0.1.1 name: windows-init @@ -2073,7 +2073,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.49/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -2088,7 +2088,7 @@ steps: environment: GITHUB_TOKEN: from_secret: github_token - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: clone-enterprise - commands: - mv bin/grabpl /tmp/ @@ -2104,32 +2104,32 @@ steps: environment: GITHUB_TOKEN: from_secret: github_token - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: init-enterprise - commands: - make gen-go depends_on: - init-enterprise - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: wire-install - commands: - yarn install --immutable depends_on: - init-enterprise - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: yarn-install - commands: - ./bin/grabpl gen-version ${DRONE_TAG} depends_on: - init-enterprise - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: gen-version - commands: - ./bin/grabpl build-backend --jobs 8 --edition enterprise ${DRONE_TAG} depends_on: - gen-version - wire-install - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: build-backend - commands: - ./bin/grabpl build-frontend --jobs 8 --edition enterprise ${DRONE_TAG} @@ -2138,7 +2138,7 @@ steps: - yarn-install environment: NODE_OPTIONS: --max_old_space_size=8192 - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: build-frontend - commands: - ./bin/grabpl build-frontend-packages --jobs 8 --edition enterprise ${DRONE_TAG} @@ -2147,7 +2147,7 @@ steps: - yarn-install environment: NODE_OPTIONS: --max_old_space_size=8192 - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: build-frontend-packages - commands: - ./bin/grabpl build-plugins --jobs 8 --edition enterprise --sign --signing-admin @@ -2157,13 +2157,13 @@ steps: environment: GRAFANA_API_KEY: from_secret: grafana_api_key - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: build-plugins - commands: - ./bin/linux-amd64/grafana-cli cue validate-schema --grafana-root . depends_on: - build-backend - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: validate-scuemata - commands: - '# It is required that the generated Typescript be in sync with the input CUE @@ -2176,14 +2176,14 @@ steps: - ./bin/linux-amd64/grafana-cli cue gen-ts --grafana-root . --diff depends_on: - validate-scuemata - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: ensure-cuetsified - commands: - ./bin/grabpl build-backend --jobs 8 --edition enterprise2 ${DRONE_TAG} depends_on: - gen-version - wire-install - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: build-backend-enterprise2 - commands: - ./bin/grabpl package --jobs 8 --edition enterprise --sign ${DRONE_TAG} @@ -2202,14 +2202,14 @@ steps: from_secret: gpg_pub_key GRAFANA_API_KEY: from_secret: grafana_api_key - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: package - commands: - ls dist/*.tar.gz* - cp dist/*.tar.gz* packaging/docker/ depends_on: - package - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: copy-packages-for-docker - commands: - ./bin/grabpl build-docker --edition enterprise --shouldSave @@ -2247,7 +2247,7 @@ steps: ARCH: linux-amd64 PORT: 3001 RUNDIR: scripts/grafana-server/tmp-grafana-enterprise - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: grafana-server - commands: - apt-get install -y netcat @@ -2368,7 +2368,7 @@ steps: from_secret: gpg_pub_key GRAFANA_API_KEY: from_secret: grafana_api_key - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: package-enterprise2 - commands: - ./bin/grabpl upload-cdn --edition enterprise2 --src-bucket "$${PRERELEASE_BUCKET}" @@ -2430,7 +2430,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.49/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -2445,7 +2445,7 @@ steps: environment: GITHUB_TOKEN: from_secret: github_token - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: clone-enterprise - commands: - mv bin/grabpl /tmp/ @@ -2461,25 +2461,25 @@ steps: environment: GITHUB_TOKEN: from_secret: github_token - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: init-enterprise - commands: - make gen-go depends_on: - init-enterprise - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: wire-install - commands: - yarn install --immutable depends_on: - init-enterprise - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: yarn-install - commands: - ./bin/grabpl gen-version ${DRONE_TAG} depends_on: - init-enterprise - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: gen-version - commands: - |- @@ -2491,7 +2491,7 @@ steps: wan" > words_to_ignore.txt - codespell -I words_to_ignore.txt docs/ - rm words_to_ignore.txt - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: codespell - commands: - ./bin/grabpl lint-backend --edition enterprise @@ -2499,7 +2499,7 @@ steps: - wire-install environment: CGO_ENABLED: "1" - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: lint-backend - commands: - yarn run prettier:check @@ -2510,19 +2510,19 @@ steps: - yarn-install environment: TEST_MAX_WORKERS: 50% - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: lint-frontend - commands: - ./bin/grabpl test-backend --edition enterprise depends_on: - wire-install - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: test-backend - commands: - ./bin/grabpl integration-tests --edition enterprise depends_on: - wire-install - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: test-backend-integration - commands: - yarn run ci:test-frontend @@ -2530,7 +2530,7 @@ steps: - yarn-install environment: TEST_MAX_WORKERS: 50% - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: test-frontend - commands: - ./bin/grabpl lint-backend --edition enterprise2 @@ -2538,19 +2538,19 @@ steps: - wire-install environment: CGO_ENABLED: "1" - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: lint-backend-enterprise2 - commands: - ./bin/grabpl test-backend --edition enterprise2 depends_on: - wire-install - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: test-backend-enterprise2 - commands: - ./bin/grabpl integration-tests --edition enterprise2 depends_on: - wire-install - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: test-backend-integration-enterprise2 trigger: event: @@ -2609,7 +2609,7 @@ services: steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.49/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -2624,7 +2624,7 @@ steps: environment: GITHUB_TOKEN: from_secret: github_token - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: clone-enterprise - commands: - mv bin/grabpl /tmp/ @@ -2640,7 +2640,7 @@ steps: environment: GITHUB_TOKEN: from_secret: github_token - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: init-enterprise - commands: - apt-get update @@ -2655,7 +2655,7 @@ steps: GRAFANA_TEST_DB: postgres PGPASSWORD: grafanatest POSTGRES_HOST: postgres - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: postgres-integration-tests - commands: - apt-get update @@ -2670,7 +2670,7 @@ steps: environment: GRAFANA_TEST_DB: mysql MYSQL_HOST: mysql - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: mysql-integration-tests - commands: - dockerize -wait tcp://redis:6379/0 -timeout 120s @@ -2679,7 +2679,7 @@ steps: - init-enterprise environment: REDIS_URL: redis://redis:6379/0 - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: redis-integration-tests - commands: - dockerize -wait tcp://memcached:11211 -timeout 120s @@ -2688,7 +2688,7 @@ steps: - init-enterprise environment: MEMCACHED_HOSTS: memcached:11211 - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: memcached-integration-tests trigger: event: @@ -2733,7 +2733,7 @@ steps: name: identify-runner - commands: - $$ProgressPreference = "SilentlyContinue" - - Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.49/windows/grabpl.exe + - Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.50/windows/grabpl.exe -OutFile grabpl.exe - git clone "https://$$env:GITHUB_TOKEN@github.com/grafana/grafana-enterprise.git" - cd grafana-enterprise @@ -2808,7 +2808,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.49/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -2886,7 +2886,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.49/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -2947,7 +2947,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.49/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -3026,7 +3026,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.49/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -3088,7 +3088,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.49/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -3126,7 +3126,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.49/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -3164,7 +3164,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.49/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -3172,7 +3172,7 @@ steps: - yarn install --immutable depends_on: - grabpl - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: yarn-install - commands: - ./bin/grabpl artifacts npm retrieve --tag v${TAG} @@ -3192,7 +3192,7 @@ steps: environment: NPM_TOKEN: from_secret: npm_token - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: release-npm-packages trigger: event: @@ -3220,7 +3220,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.49/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -3268,7 +3268,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.49/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -3317,7 +3317,7 @@ steps: name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.49/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -3325,24 +3325,24 @@ steps: - ./bin/grabpl gen-version --build-id ${DRONE_BUILD_NUMBER} depends_on: - grabpl - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: gen-version - commands: - make gen-go - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: wire-install - commands: - yarn install --immutable depends_on: - grabpl - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: yarn-install - commands: - ./bin/grabpl build-backend --jobs 8 --edition oss --build-id ${DRONE_BUILD_NUMBER} depends_on: - gen-version - wire-install - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: build-backend - commands: - ./bin/grabpl build-frontend --jobs 8 --edition oss --build-id ${DRONE_BUILD_NUMBER} @@ -3351,7 +3351,7 @@ steps: - yarn-install environment: NODE_OPTIONS: --max_old_space_size=8192 - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: build-frontend - commands: - ./bin/grabpl build-frontend-packages --jobs 8 --edition oss --build-id ${DRONE_BUILD_NUMBER} @@ -3360,7 +3360,7 @@ steps: - yarn-install environment: NODE_OPTIONS: --max_old_space_size=8192 - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: build-frontend-packages - commands: - ./bin/grabpl build-plugins --jobs 8 --edition oss --sign --signing-admin @@ -3370,13 +3370,13 @@ steps: environment: GRAFANA_API_KEY: from_secret: grafana_api_key - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: build-plugins - commands: - ./bin/linux-amd64/grafana-cli cue validate-schema --grafana-root . depends_on: - build-backend - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: validate-scuemata - commands: - '# It is required that the generated Typescript be in sync with the input CUE @@ -3389,7 +3389,7 @@ steps: - ./bin/linux-amd64/grafana-cli cue gen-ts --grafana-root . --diff depends_on: - validate-scuemata - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: ensure-cuetsified - commands: - ./bin/grabpl package --jobs 8 --edition oss --build-id ${DRONE_BUILD_NUMBER} --sign @@ -3407,14 +3407,14 @@ steps: from_secret: gpg_pub_key GRAFANA_API_KEY: from_secret: grafana_api_key - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: package - commands: - ls dist/*.tar.gz* - cp dist/*.tar.gz* packaging/docker/ depends_on: - package - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: copy-packages-for-docker - commands: - ./bin/grabpl build-docker --edition oss --shouldSave @@ -3451,7 +3451,7 @@ steps: environment: ARCH: linux-amd64 PORT: 3001 - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: grafana-server - commands: - apt-get install -y netcat @@ -3529,7 +3529,7 @@ steps: - build-frontend-packages environment: NODE_OPTIONS: --max_old_space_size=4096 - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: build-storybook - commands: - ./bin/grabpl upload-cdn --edition oss --src-bucket "grafana-static-assets" @@ -3593,7 +3593,7 @@ steps: name: identify-runner - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.49/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -3601,23 +3601,23 @@ steps: - ./bin/grabpl gen-version --build-id ${DRONE_BUILD_NUMBER} depends_on: - grabpl - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: gen-version - commands: - make gen-go - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: wire-install - commands: - yarn install --immutable depends_on: - grabpl - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: yarn-install - commands: - ./bin/grabpl shellcheck depends_on: - grabpl - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: shellcheck - commands: - |- @@ -3629,7 +3629,7 @@ steps: wan" > words_to_ignore.txt - codespell -I words_to_ignore.txt docs/ - rm words_to_ignore.txt - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: codespell - commands: - ./bin/grabpl lint-backend --edition oss @@ -3637,7 +3637,7 @@ steps: - wire-install environment: CGO_ENABLED: "1" - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: lint-backend - commands: - yarn run prettier:check @@ -3648,19 +3648,19 @@ steps: - yarn-install environment: TEST_MAX_WORKERS: 50% - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: lint-frontend - commands: - ./bin/grabpl test-backend --edition oss depends_on: - wire-install - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: test-backend - commands: - ./bin/grabpl integration-tests --edition oss depends_on: - wire-install - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: test-backend-integration - commands: - yarn run ci:test-frontend @@ -3668,7 +3668,7 @@ steps: - yarn-install environment: TEST_MAX_WORKERS: 50% - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: test-frontend trigger: ref: @@ -3711,7 +3711,7 @@ services: steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.49/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -3732,7 +3732,7 @@ steps: GRAFANA_TEST_DB: postgres PGPASSWORD: grafanatest POSTGRES_HOST: postgres - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: postgres-integration-tests - commands: - apt-get update @@ -3747,7 +3747,7 @@ steps: environment: GRAFANA_TEST_DB: mysql MYSQL_HOST: mysql - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: mysql-integration-tests trigger: ref: @@ -3782,7 +3782,7 @@ steps: name: identify-runner - commands: - $$ProgressPreference = "SilentlyContinue" - - Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.49/windows/grabpl.exe + - Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.50/windows/grabpl.exe -OutFile grabpl.exe image: grafana/ci-wix:0.1.1 name: windows-init @@ -3830,7 +3830,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.49/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -3845,7 +3845,7 @@ steps: environment: GITHUB_TOKEN: from_secret: github_token - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: clone-enterprise - commands: - mv bin/grabpl /tmp/ @@ -3858,32 +3858,32 @@ steps: depends_on: - clone-enterprise environment: {} - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: init-enterprise - commands: - make gen-go depends_on: - init-enterprise - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: wire-install - commands: - yarn install --immutable depends_on: - init-enterprise - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: yarn-install - commands: - ./bin/grabpl gen-version --build-id ${DRONE_BUILD_NUMBER} depends_on: - init-enterprise - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: gen-version - commands: - ./bin/grabpl build-backend --jobs 8 --edition enterprise --build-id ${DRONE_BUILD_NUMBER} depends_on: - gen-version - wire-install - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: build-backend - commands: - ./bin/grabpl build-frontend --jobs 8 --edition enterprise --build-id ${DRONE_BUILD_NUMBER} @@ -3892,7 +3892,7 @@ steps: - yarn-install environment: NODE_OPTIONS: --max_old_space_size=8192 - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: build-frontend - commands: - ./bin/grabpl build-frontend-packages --jobs 8 --edition enterprise --build-id @@ -3902,7 +3902,7 @@ steps: - yarn-install environment: NODE_OPTIONS: --max_old_space_size=8192 - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: build-frontend-packages - commands: - ./bin/grabpl build-plugins --jobs 8 --edition enterprise --sign --signing-admin @@ -3912,13 +3912,13 @@ steps: environment: GRAFANA_API_KEY: from_secret: grafana_api_key - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: build-plugins - commands: - ./bin/linux-amd64/grafana-cli cue validate-schema --grafana-root . depends_on: - build-backend - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: validate-scuemata - commands: - '# It is required that the generated Typescript be in sync with the input CUE @@ -3931,7 +3931,7 @@ steps: - ./bin/linux-amd64/grafana-cli cue gen-ts --grafana-root . --diff depends_on: - validate-scuemata - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: ensure-cuetsified - commands: - ./bin/grabpl build-backend --jobs 8 --edition enterprise2 --build-id ${DRONE_BUILD_NUMBER} @@ -3939,7 +3939,7 @@ steps: depends_on: - gen-version - wire-install - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: build-backend-enterprise2 - commands: - ./bin/grabpl package --jobs 8 --edition enterprise --build-id ${DRONE_BUILD_NUMBER} @@ -3959,14 +3959,14 @@ steps: from_secret: gpg_pub_key GRAFANA_API_KEY: from_secret: grafana_api_key - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: package - commands: - ls dist/*.tar.gz* - cp dist/*.tar.gz* packaging/docker/ depends_on: - package - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: copy-packages-for-docker - commands: - ./bin/grabpl build-docker --edition enterprise --shouldSave @@ -4004,7 +4004,7 @@ steps: ARCH: linux-amd64 PORT: 3001 RUNDIR: scripts/grafana-server/tmp-grafana-enterprise - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: grafana-server - commands: - apt-get install -y netcat @@ -4082,7 +4082,7 @@ steps: - build-frontend-packages environment: NODE_OPTIONS: --max_old_space_size=4096 - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: build-storybook - commands: - ./bin/grabpl upload-cdn --edition enterprise --src-bucket "grafana-static-assets" @@ -4130,7 +4130,7 @@ steps: from_secret: gpg_pub_key GRAFANA_API_KEY: from_secret: grafana_api_key - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: package-enterprise2 - commands: - ./bin/grabpl upload-cdn --edition enterprise2 --src-bucket "grafana-static-assets" @@ -4185,7 +4185,7 @@ services: [] steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.49/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -4200,7 +4200,7 @@ steps: environment: GITHUB_TOKEN: from_secret: github_token - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: clone-enterprise - commands: - mv bin/grabpl /tmp/ @@ -4213,25 +4213,25 @@ steps: depends_on: - clone-enterprise environment: {} - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: init-enterprise - commands: - make gen-go depends_on: - init-enterprise - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: wire-install - commands: - yarn install --immutable depends_on: - init-enterprise - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: yarn-install - commands: - ./bin/grabpl gen-version --build-id ${DRONE_BUILD_NUMBER} depends_on: - init-enterprise - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: gen-version - commands: - |- @@ -4243,7 +4243,7 @@ steps: wan" > words_to_ignore.txt - codespell -I words_to_ignore.txt docs/ - rm words_to_ignore.txt - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: codespell - commands: - ./bin/grabpl lint-backend --edition enterprise @@ -4251,7 +4251,7 @@ steps: - wire-install environment: CGO_ENABLED: "1" - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: lint-backend - commands: - yarn run prettier:check @@ -4262,19 +4262,19 @@ steps: - yarn-install environment: TEST_MAX_WORKERS: 50% - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: lint-frontend - commands: - ./bin/grabpl test-backend --edition enterprise depends_on: - wire-install - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: test-backend - commands: - ./bin/grabpl integration-tests --edition enterprise depends_on: - wire-install - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: test-backend-integration - commands: - yarn run ci:test-frontend @@ -4282,7 +4282,7 @@ steps: - yarn-install environment: TEST_MAX_WORKERS: 50% - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: test-frontend - commands: - ./bin/grabpl lint-backend --edition enterprise2 @@ -4290,19 +4290,19 @@ steps: - wire-install environment: CGO_ENABLED: "1" - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: lint-backend-enterprise2 - commands: - ./bin/grabpl test-backend --edition enterprise2 depends_on: - wire-install - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: test-backend-enterprise2 - commands: - ./bin/grabpl integration-tests --edition enterprise2 depends_on: - wire-install - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: test-backend-integration-enterprise2 trigger: ref: @@ -4355,7 +4355,7 @@ services: steps: - commands: - mkdir -p bin - - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.49/grabpl + - curl -fL -o bin/grabpl https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.50/grabpl - chmod +x bin/grabpl image: byrnedo/alpine-curl:0.1.8 name: grabpl @@ -4370,7 +4370,7 @@ steps: environment: GITHUB_TOKEN: from_secret: github_token - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: clone-enterprise - commands: - mv bin/grabpl /tmp/ @@ -4383,7 +4383,7 @@ steps: depends_on: - clone-enterprise environment: {} - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: init-enterprise - commands: - apt-get update @@ -4398,7 +4398,7 @@ steps: GRAFANA_TEST_DB: postgres PGPASSWORD: grafanatest POSTGRES_HOST: postgres - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: postgres-integration-tests - commands: - apt-get update @@ -4413,7 +4413,7 @@ steps: environment: GRAFANA_TEST_DB: mysql MYSQL_HOST: mysql - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: mysql-integration-tests - commands: - dockerize -wait tcp://redis:6379/0 -timeout 120s @@ -4422,7 +4422,7 @@ steps: - init-enterprise environment: REDIS_URL: redis://redis:6379/0 - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: redis-integration-tests - commands: - dockerize -wait tcp://memcached:11211 -timeout 120s @@ -4431,7 +4431,7 @@ steps: - init-enterprise environment: MEMCACHED_HOSTS: memcached:11211 - image: grafana/build-container:1.5.4 + image: grafana/build-container:1.5.5 name: memcached-integration-tests trigger: ref: @@ -4470,7 +4470,7 @@ steps: name: identify-runner - commands: - $$ProgressPreference = "SilentlyContinue" - - Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.49/windows/grabpl.exe + - Invoke-WebRequest https://grafana-downloads.storage.googleapis.com/grafana-build-pipeline/v2.9.50/windows/grabpl.exe -OutFile grabpl.exe - git clone "https://$$env:GITHUB_TOKEN@github.com/grafana/grafana-enterprise.git" - cd grafana-enterprise @@ -4667,6 +4667,6 @@ kind: secret name: gcp_upload_artifacts_key --- kind: signature -hmac: a697f4b02af2da0fc6c0d751e40e59db542541d6024e5f0c2b062c7060d635ab +hmac: 1a18574b924be58b3568339b9e40a4fc926aa92d748b7e15c95919169e364a9f ... diff --git a/CHANGELOG.md b/CHANGELOG.md index bf240475032..d8926a3aede 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,231 @@ + + +# 9.0.0-beta2 (2022-05-31) + +### Features and enhancements + +- **Alerting:** Add legacy indicator to navbar. [#49511](https://github.com/grafana/grafana/pull/49511), [@peterholmberg](https://github.com/peterholmberg) +- **Alerting:** Add templated subject config to email notifier. [#49742](https://github.com/grafana/grafana/pull/49742), [@JacobsonMT](https://github.com/JacobsonMT) +- **Alerting:** Enable Unified Alerting for open source and enterprise. [#49834](https://github.com/grafana/grafana/pull/49834), [@grobinson-grafana](https://github.com/grobinson-grafana) +- **Alerting:** Make alertmanager datasource stable. [#49485](https://github.com/grafana/grafana/pull/49485), [@gillesdemey](https://github.com/gillesdemey) +- **Angular:** Remove deprecated angular modal support and libs. [#49781](https://github.com/grafana/grafana/pull/49781), [@torkelo](https://github.com/torkelo) +- **AuthProxy:** Remove deprecated ldap_sync_ttl setting. [#49902](https://github.com/grafana/grafana/pull/49902), [@kalleep](https://github.com/kalleep) +- **Build:** Enable long term caching for frontend assets. [#47625](https://github.com/grafana/grafana/pull/47625), [@jackw](https://github.com/jackw) +- **Chore:** Remove deprecated TextDisplayOptions export. [#49705](https://github.com/grafana/grafana/pull/49705), [@kaydelaney](https://github.com/kaydelaney) +- **Chore:** Remove deprecated `surface` prop from IconButton. [#49715](https://github.com/grafana/grafana/pull/49715), [@kaydelaney](https://github.com/kaydelaney) +- **Chore:** Remove usage of deprecated getColorForTheme function. [#49519](https://github.com/grafana/grafana/pull/49519), [@kaydelaney](https://github.com/kaydelaney) +- **DatePicker:** Add minDate prop. [#49503](https://github.com/grafana/grafana/pull/49503), [@alexanderzobnin](https://github.com/alexanderzobnin) +- **Notification history:** Enable by default. [#49502](https://github.com/grafana/grafana/pull/49502), [@ashharrison90](https://github.com/ashharrison90) +- **Prometheus:** Add pluginVersion to query. [#49414](https://github.com/grafana/grafana/pull/49414), [@toddtreece](https://github.com/toddtreece) +- **Prometheus:** Enable prometheusStreamingJSONParser by default. [#49475](https://github.com/grafana/grafana/pull/49475), [@toddtreece](https://github.com/toddtreece) +- **Prometheus:** Predefined scopes for Azure authentication. [#49557](https://github.com/grafana/grafana/pull/49557), [@kostrse](https://github.com/kostrse) +- **Prometheus:** Streaming JSON parser performance improvements. [#48792](https://github.com/grafana/grafana/pull/48792), [@toddtreece](https://github.com/toddtreece) +- **ValueMapping:** Add support for regex replacement over multiple lines. [#49607](https://github.com/grafana/grafana/pull/49607), [@ashharrison90](https://github.com/ashharrison90) + +### Bug fixes + +- **Accessibility:** Pressing escape in a Modal or DashboardSettings correctly closes the overlay. [#49500](https://github.com/grafana/grafana/pull/49500), [@ashharrison90](https://github.com/ashharrison90) +- **Alerting:** Validate alert notification UID length. [#45546](https://github.com/grafana/grafana/pull/45546), [@wbrowne](https://github.com/wbrowne) +- **BackendSrv:** Throw an error when fetching an invalid JSON. [#47493](https://github.com/grafana/grafana/pull/47493), [@leventebalogh](https://github.com/leventebalogh) +- **Fix:** Timeseries migration regex override. [#49629](https://github.com/grafana/grafana/pull/49629), [@zoltanbedi](https://github.com/zoltanbedi) +- **Loki:** Fix unwrap parsing in query builder. [#49732](https://github.com/grafana/grafana/pull/49732), [@ivanahuckova](https://github.com/ivanahuckova) +- **Navigation:** Position hamburger menu correctly in mobile view. [#49603](https://github.com/grafana/grafana/pull/49603), [@ashharrison90](https://github.com/ashharrison90) +- **PanelEditor:** Fixes issue with Table view and multi data frames. [#49854](https://github.com/grafana/grafana/pull/49854), [@JoaoSilvaGrafana](https://github.com/JoaoSilvaGrafana) +- **Preferences:** Fix updating of preferences for Navbar and Query History. [#49677](https://github.com/grafana/grafana/pull/49677), [@ivanahuckova](https://github.com/ivanahuckova) +- **TimeRange:** Fixes issue when zooming out on a timerange with timespan 0. [#49622](https://github.com/grafana/grafana/pull/49622), [@JoaoSilvaGrafana](https://github.com/JoaoSilvaGrafana) +- **Variables:** Fixes DS variables not being correctly used in panel queries. [#49323](https://github.com/grafana/grafana/pull/49323), [@JoaoSilvaGrafana](https://github.com/JoaoSilvaGrafana) + +### Breaking changes + +Drop support for deprecated setting ldap_sync_ttl under [auth.proxy] +Only sync_ttl will work from now on Issue [#49902](https://github.com/grafana/grafana/issues/49902) + +Removes support for deprecated `heading` and `description` props. Moving forward, the `Card.Heading` and `Card.Description` components should be used. Issue [#49885](https://github.com/grafana/grafana/issues/49885) + +Removes the deprecated `link` variant from the `Button` component. +To migrate, replace any usage of `variant="link"` with `fill="text"`. Issue [#49843](https://github.com/grafana/grafana/issues/49843) + +Removes the deprecated `surface` prop from the `IconButton` component. This prop hasn't actually done anything for a while, so it should be safe to just remove any instances of its usage. +Issue [#49715](https://github.com/grafana/grafana/issues/49715) + +Removes the deprecated `TextDisplayOptions` export from `@grafana/data` in favor of `VizTextDisplayOptions` from `@grafana/schema`. To migrate, just replace usage of `TextDisplayOptions` with `VizTextDisplayOptions`. Issue [#49705](https://github.com/grafana/grafana/issues/49705) + +Removed support for the deprecated `getColorForTheme(color: string, theme: GrafanaTheme)` function in favor of the +`theme.visualization.getColorByName(color: string)` method. The output of this method is identical to the removed function, so migration should just be a matter of rewriting calls of `getColorForTheme(myColor, myTheme)` to `myTheme.visualization.getColorByName(myColor)`. +Issue [#49519](https://github.com/grafana/grafana/issues/49519) + +In the Prometheus data source, for consistency and performance reasons, we changed how we represent `NaN` (not a number) values received from Prometheus. In the past versions, we converted these to `null` in the frontend (for dashboard and explore), and kept as `NaN` in the alerting path. Starting with this version, we will always keep it as `NaN`. This change should be mostly invisible for the users. Issue [#49475](https://github.com/grafana/grafana/issues/49475) + +Plugins using custom Webpack configs could potentially break due to the changes between webpack@4 and webpack@5. Please refer to the [official migration guide](https://webpack.js.org/migrate/5/) for assistance. + +Webpack 5 does not include polyfills for node.js core modules by default (e.g. `buffer`, `stream`, `os`). This can result in failed builds for plugins. If polyfills are required it is recommended to create a custom webpack config in the root of the plugin repo and add the required fallbacks: + +```js +// webpack.config.js + +module.exports.getWebpackConfig = (config, options) => ({ + ...config, + resolve: { + ...config.resolve, + fallback: { + os: require.resolve('os-browserify/browser'), + stream: require.resolve('stream-browserify'), + timers: require.resolve('timers-browserify'), + }, + }, +}); +``` + +Please refer to the webpack build error messages or the [official migration guide](https://webpack.js.org/migrate/5/) for assistance with fallbacks. + +**Which issue(s) this PR fixes**: + + + +Fixes # + +**Special notes for your reviewer**: + +It does not bump the following dependencies to the very latest due to the latest versions being ES modules: + +- ora +- globby +- execa +- chalk + Issue [#47826](https://github.com/grafana/grafana/issues/47826) + +We have changed the internals of `backendSrv.fetch()` to throw an error when the response is an incorrect JSON. + +```javascript +// PREVIOUSLY: this was returning with an empty object {} - in case the response is an invalid JSON +return await getBackendSrv().post(`${API_ROOT}/${id}/install`); + +// AFTER THIS CHANGE: the following will throw an error - in case the response is an invalid JSON +return await getBackendSrv().post(`${API_ROOT}/${id}/install`); +``` + +**When is the response handled as JSON?** + +- If the response has the `"Content-Type: application/json"` header, OR +- If the backendSrv options ([`BackendSrvRequest`](https://github.com/grafana/grafana/blob/e237ff20a996c7313632b2e28f38032012f0e340/packages/grafana-runtime/src/services/backendSrv.ts#L8)) specify the response as JSON: `{ responseType: 'json' }` + +**How does it work after this change?** + +- In case it is recognised as a JSON response and the response is empty, it returns an empty object `{}` +- In case it is recognised as a JSON response and it has formatting errors, it throws an error + +**How to migrate?** +Make sure to handle possible errors on the callsite where using `backendSrv.fetch()` (or any other `backendSrv` methods). Issue [#47493](https://github.com/grafana/grafana/issues/47493) + +### Plugin development fixes & changes + +- **UI/Card:** Remove deprecated props. [#49885](https://github.com/grafana/grafana/pull/49885), [@kaydelaney](https://github.com/kaydelaney) +- **UI/Button:** Remove deprecated "link" variant. [#49843](https://github.com/grafana/grafana/pull/49843), [@kaydelaney](https://github.com/kaydelaney) +- **Toolkit:** Bump dependencies. [#47826](https://github.com/grafana/grafana/pull/47826), [@jackw](https://github.com/jackw) + + + + + +# 9.0.0-beta1 (2022-05-24) + +### Features and enhancements + +- **AccessControl:** Add setting for permission cache. (Enterprise) +- **AccessControl:** Check dashboard permissions for reports. (Enterprise) +- **Auth:** Remove grafana ui dependency to the aws sdk. [#43559](https://github.com/grafana/grafana/pull/43559), [@sunker](https://github.com/sunker) +- **BasicRoles:** Add API endpoint to reset basic roles permissions to factory. (Enterprise) +- **LDAP Mapping:** Allow Grafana Admin mapping without org role. [#37189](https://github.com/grafana/grafana/pull/37189), [@krzysdabro](https://github.com/krzysdabro) +- **Licensing:** Only enforce total number of users. (Enterprise) +- **Loki:** do not convert NaN to null. [#45389](https://github.com/grafana/grafana/pull/45389), [@gabor](https://github.com/gabor) +- **Report:** API support for multiple dashboards. (Enterprise) +- **Report:** Support sending embedded image in the report email. (Enterprise) +- **Report:** UI for multiple dashboards. (Enterprise) +- **Reporting:** Remove redundant empty attachment when export to CSV is enabled. (Enterprise) +- **SAML:** Implement Name Templates for assertion_attribute_name option. (Enterprise) +- **SSE/Alerting:** Support prom instant vector responses. [#44865](https://github.com/grafana/grafana/pull/44865), [@kylebrandt](https://github.com/kylebrandt) +- **Tracing:** Add trace to metrics config behind feature toggle. [#46298](https://github.com/grafana/grafana/pull/46298), [@connorlindsey](https://github.com/connorlindsey) + +### Bug fixes + +- **Fix:** Prevent automatic parsing of string data types to numbers. [#46035](https://github.com/grafana/grafana/pull/46035), [@joshhunt](https://github.com/joshhunt) +- **Prometheus:** Fix inconsistent labels in exemplars resulting in marshal json error. [#46135](https://github.com/grafana/grafana/pull/46135), [@hanjm](https://github.com/hanjm) + +### Breaking changes + +In the Loki data source, for consistency and performance reasons, we changed how we represent `NaN` (not a number) values received from Loki. In the past versions, we converted these to `null` in the frontend (for dashboard and explore), and kept as `NaN` in the alerting path. Starting with this version, we will always keep it as `NaN`. This change should be mostly invisible for the users. Issue [#45389](https://github.com/grafana/grafana/issues/45389) + +The dependency to [grafana/aws-sdk](https://github.com/grafana/grafana-aws-sdk-react) is moved from [grafana/ui](https://github.com/grafana/grafana/blob/main/packages/grafana-ui/package.json) to the plugin. This means that any plugin that use SIGV4 auth need to pass a SIGV4 editor component as a prop to the `DataSourceHttpSettings` component. Issue [#43559](https://github.com/grafana/grafana/issues/43559) + + + + +# 8.5.4 (2022-05-30) + +### Features and enhancements + +- **Alerting:** Remove disabled flag for data source when migrating alerts. [#48559](https://github.com/grafana/grafana/pull/48559), [@yuri-tceretian](https://github.com/yuri-tceretian) +- **Alerting:** Show notification tab of legacy alerting only to editor. [#49624](https://github.com/grafana/grafana/pull/49624), [@yuri-tceretian](https://github.com/yuri-tceretian) +- **Alerting:** Update migration to migrate only alerts that belong to existing org\dashboard. [#49192](https://github.com/grafana/grafana/pull/49192), [@yuri-tceretian](https://github.com/yuri-tceretian) +- **AzureMonitor:** Do not quote variables when a custom "All" variable option is used. [#49428](https://github.com/grafana/grafana/pull/49428), [@andresmgot](https://github.com/andresmgot) +- **AzureMonitor:** Update allowed namespaces. [#48468](https://github.com/grafana/grafana/pull/48468), [@jcolladokuri](https://github.com/jcolladokuri) +- **CloudMonitor:** Correctly encode default project response. [#49510](https://github.com/grafana/grafana/pull/49510), [@aangelisc](https://github.com/aangelisc) +- **Cloudwatch:** Add support for new AWS/RDS EBS\* metrics. [#48798](https://github.com/grafana/grafana/pull/48798), [@szymonpk](https://github.com/szymonpk) +- **InfluxDB:** Use backend for influxDB by default via feature toggle. [#48453](https://github.com/grafana/grafana/pull/48453), [@yesoreyeram](https://github.com/yesoreyeram) +- **Legend:** Use correct unit for percent and count calculations. [#49004](https://github.com/grafana/grafana/pull/49004), [@dprokop](https://github.com/dprokop) +- **LokI:** use millisecond steps in Grafana 8.5.x. [#48630](https://github.com/grafana/grafana/pull/48630), [@gabor](https://github.com/gabor) +- **Plugins:** Introduce HTTP 207 Multi Status response to api/ds/query. [#48550](https://github.com/grafana/grafana/pull/48550), [@wbrowne](https://github.com/wbrowne) +- **Reporting:** Improve PDF file size using grid layout. (Enterprise) +- **Transformations:** Add an All Unique Values Reducer. [#48653](https://github.com/grafana/grafana/pull/48653), [@josiahg](https://github.com/josiahg) +- **Transformers:** avoid error when the ExtractFields source field is missing. [#49368](https://github.com/grafana/grafana/pull/49368), [@wardbekker](https://github.com/wardbekker) +- **[v8.5.x] Alerting:** Update migration to migrate only alerts that belong to existing org\dashboard. [#49199](https://github.com/grafana/grafana/pull/49199), [@grafanabot](https://github.com/grafanabot) +- **[v8.5.x] Reporting:** Improve PDF file size using grid layout. (Enterprise) + +### Bug fixes + +- **Alerting:** Allow disabling override timings for notification policies. [#48648](https://github.com/grafana/grafana/pull/48648), [@gillesdemey](https://github.com/gillesdemey) +- **Alerting:** Allow serving images from custom url path. [#49022](https://github.com/grafana/grafana/pull/49022), [@gillesdemey](https://github.com/gillesdemey) +- **Alerting:** Apply Custom Headers to datasource queries. [#47860](https://github.com/grafana/grafana/pull/47860), [@joeblubaugh](https://github.com/joeblubaugh) +- **Alerting:** Fix RBAC actions for notification policies. [#49185](https://github.com/grafana/grafana/pull/49185), [@yuri-tceretian](https://github.com/yuri-tceretian) +- **Alerting:** Fix access to alerts for viewer with editor permissions when RBAC is disabled. [#49270](https://github.com/grafana/grafana/pull/49270), [@yuri-tceretian](https://github.com/yuri-tceretian) +- **Alerting:** Fix anonymous access to alerting. [#49203](https://github.com/grafana/grafana/pull/49203), [@yuri-tceretian](https://github.com/yuri-tceretian) +- **Alerting:** correctly show all alerts in a folder. [#48684](https://github.com/grafana/grafana/pull/48684), [@gillesdemey](https://github.com/gillesdemey) +- **AzureMonitor:** Fixes metric definition for Azure Storage queue/file/blob/table resources. [#49101](https://github.com/grafana/grafana/pull/49101), [@aangelisc](https://github.com/aangelisc) +- **Dashboard:** Fix dashboard update permission check. [#48746](https://github.com/grafana/grafana/pull/48746), [@IevaVasiljeva](https://github.com/IevaVasiljeva) +- **DashboardExport:** Fix exporting and importing dashboards where query data source ended up as incorrect. [#48410](https://github.com/grafana/grafana/pull/48410), [@torkelo](https://github.com/torkelo) +- **FileUpload:** clicking the `Upload file` button now opens the modal correctly. [#48766](https://github.com/grafana/grafana/pull/48766), [@ashharrison90](https://github.com/ashharrison90) +- **GrafanaUI:** Fix color of links in error Tooltips in light theme. [#49327](https://github.com/grafana/grafana/pull/49327), [@joshhunt](https://github.com/joshhunt) +- **LibraryPanels:** Fix library panels not connecting properly in imported dashboards. [#49161](https://github.com/grafana/grafana/pull/49161), [@joshhunt](https://github.com/joshhunt) +- **Loki:** Improve unpack parser handling. [#49074](https://github.com/grafana/grafana/pull/49074), [@gabor](https://github.com/gabor) +- **RolePicker:** Fix menu position on smaller screens. [#48429](https://github.com/grafana/grafana/pull/48429), [@Clarity-89](https://github.com/Clarity-89) +- **TimeRange:** Fixes updating time range from url and browser history. [#48657](https://github.com/grafana/grafana/pull/48657), [@torkelo](https://github.com/torkelo) +- **TimeSeries:** Fix detection & rendering of sparse datapoints. [#48841](https://github.com/grafana/grafana/pull/48841), [@leeoniya](https://github.com/leeoniya) +- **Timeseries:** Fix outside range stale state. [#49633](https://github.com/grafana/grafana/pull/49633), [@ryantxu](https://github.com/ryantxu) +- **Tooltip:** Fix links not legible in Tooltips when using light theme. [#48748](https://github.com/grafana/grafana/pull/48748), [@joshhunt](https://github.com/joshhunt) +- **Tooltip:** Sort decimals using standard numeric compare. [#49084](https://github.com/grafana/grafana/pull/49084), [@dprokop](https://github.com/dprokop) +- **Transforms:** Labels to fields, fix label picker layout. [#49304](https://github.com/grafana/grafana/pull/49304), [@torkelo](https://github.com/torkelo) +- **Variables:** Fixes issue with data source variables not updating queries with variable. [#49478](https://github.com/grafana/grafana/pull/49478), [@torkelo](https://github.com/torkelo) +- **[v8.5.x] Alerting:** Fix RBAC actions for notification policies (#49185). [#49348](https://github.com/grafana/grafana/pull/49348), [@yuri-tceretian](https://github.com/yuri-tceretian) +- **[v8.5.x] Alerting:** Fix access to alerts for viewer with editor permissions when RBAC is disabled. [#49427](https://github.com/grafana/grafana/pull/49427), [@konrad147](https://github.com/konrad147) +- **[v8.5.x] Alerting:** Fix anonymous access to alerting. [#49268](https://github.com/grafana/grafana/pull/49268), [@yuri-tceretian](https://github.com/yuri-tceretian) + +### Breaking changes + +For a data source query made via /api/ds/query : + +- If the `DatasourceQueryMultiStatus` feature is enabled and + - The data source response has an error set as part of the `DataResponse`, the resulting HTTP status code is now `207 Multi Status` instead of `400 Bad gateway` +- If the `DatasourceQueryMultiStatus` feature is **not** enabled and + - The data source response has an error set as part of the `DataResponse`, the resulting HTTP status code is `400 Bad Request` (no breaking change) + --> Issue [#48550](https://github.com/grafana/grafana/issues/48550) + + # 8.5.3 diff --git a/Dockerfile b/Dockerfile index 455a24b0774..3bee9879f2c 100644 --- a/Dockerfile +++ b/Dockerfile @@ -20,7 +20,7 @@ COPY emails emails ENV NODE_ENV production RUN yarn build -FROM golang:1.17.9-alpine3.15 as go-builder +FROM golang:1.17.11-alpine3.15 as go-builder RUN apk add --no-cache gcc g++ make diff --git a/Dockerfile.ubuntu b/Dockerfile.ubuntu index f8ee00a412d..fe72f04a8c2 100644 --- a/Dockerfile.ubuntu +++ b/Dockerfile.ubuntu @@ -21,7 +21,7 @@ COPY emails emails ENV NODE_ENV production RUN yarn build -FROM golang:1.17.9 AS go-builder +FROM golang:1.17.11 AS go-builder WORKDIR /src/grafana diff --git a/LICENSING.md b/LICENSING.md index 7506fcdc946..510ff42a32b 100644 --- a/LICENSING.md +++ b/LICENSING.md @@ -17,6 +17,8 @@ packages/grafana-toolkit/ packages/grafana-ui/ packages/jaeger-ui-components/ packaging/ +pkg/coremodel/ +pkg/framework/coremodel/ grafana-mixin/ cue/ ``` diff --git a/Makefile b/Makefile index e4881487e56..12cd5e7f900 100644 --- a/Makefile +++ b/Makefile @@ -50,7 +50,7 @@ $(SPEC_TARGET): $(API_DEFINITION_FILES) ## Generate API spec -x "github.com/prometheus/alertmanager" \ -i /grafana/pkg/api/docs/tags.json -swagger-api-spec: gen-go $(SPEC_TARGET) $(MERGED_SPEC_TARGET) +swagger-api-spec: gen-go $(SPEC_TARGET) $(MERGED_SPEC_TARGET) validate-api-spec $(NGALERT_SPEC_TARGET): +$(MAKE) -C pkg/services/ngalert/api/tooling api.json @@ -67,7 +67,7 @@ ensure_go-swagger_mac: -x "github.com/prometheus/alertmanager" \ -i pkg/api/docs/tags.json -swagger-api-spec-mac: gen-go --swagger-api-spec-mac $(MERGED_SPEC_TARGET) +swagger-api-spec-mac: gen-go --swagger-api-spec-mac $(MERGED_SPEC_TARGET) validate-api-spec validate-api-spec: $(MERGED_SPEC_TARGET) ## Validate API spec docker run --rm -it \ diff --git a/conf/defaults.ini b/conf/defaults.ini index d7de0adab5b..d23c0aeeff0 100644 --- a/conf/defaults.ini +++ b/conf/defaults.ini @@ -477,6 +477,8 @@ token_url = https://gitlab.com/oauth/token api_url = https://gitlab.com/api/v4 allowed_domains = allowed_groups = +role_attribute_path = +role_attribute_strict = false #################################### Google Auth ######################### [auth.google] diff --git a/conf/provisioning/datasources/sample.yaml b/conf/provisioning/datasources/sample.yaml index 7bef8618a31..2d9bae8ee56 100644 --- a/conf/provisioning/datasources/sample.yaml +++ b/conf/provisioning/datasources/sample.yaml @@ -19,8 +19,6 @@ apiVersion: 1 # orgId: 1 # # url # url: http://localhost:8080 -# # database password, if used -# password: # # database user, if used # user: # # database name, if used @@ -29,8 +27,6 @@ apiVersion: 1 # basicAuth: # # basic auth username # basicAuthUser: -# # basic auth password -# basicAuthPassword: # # enable/disable with credentials headers # withCredentials: # # mark as default datasource. Max one per org diff --git a/contribute/developer-guide.md b/contribute/developer-guide.md index 9eb31be1f00..33abb37f798 100644 --- a/contribute/developer-guide.md +++ b/contribute/developer-guide.md @@ -136,17 +136,23 @@ Running the backend tests on Windows currently needs some tweaking, so use the b go run build.go test ``` -### Run PostgreSQL and MySQL integration tests +### Run SQLLite, PostgreSQL and MySQL integration tests -To run PostgreSQL and MySQL integration tests locally, you need to start the docker blocks for MySQL and/or PostgreSQL test data sources by running `make devenv sources=mysql_tests,postgres_tests`. When your test data sources are running, you can execute integration tests by running: +By default, Grafana runs SQLite to run tests with SQLite. +```bash +go test -covermode=atomic -tags=integration ./pkg/... ``` + +To run PostgreSQL and MySQL integration tests locally, start the Docker blocks for MySQL and/or PostgreSQL test data sources by running `make devenv sources=mysql_tests,postgres_tests`. When your test data sources are running, you can execute integration tests by running: + +```bash GRAFANA_TEST_DB=mysql go test -covermode=atomic -tags=integration ./pkg/... ``` and/or -``` +```bash GRAFANA_TEST_DB=postgres go test -covermode=atomic -tags=integration ./pkg/... ``` diff --git a/devenv/dev-dashboards/panel-heatmap/heatmap-calculate-log.json b/devenv/dev-dashboards/panel-heatmap/heatmap-calculate-log.json new file mode 100644 index 00000000000..5481b136d9d --- /dev/null +++ b/devenv/dev-dashboards/panel-heatmap/heatmap-calculate-log.json @@ -0,0 +1,553 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 1, + "links": [], + "liveNow": false, + "panels": [ + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "points", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 2, + "scaleDistribution": { + "log": 2, + "type": "log" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 14, + "w": 8, + "x": 0, + "y": 0 + }, + "id": 3, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom" + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "9.0.0-pre", + "targets": [ + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "max": 500000, + "min": 0.01, + "refId": "A", + "scenarioId": "random_walk", + "seriesCount": 2, + "spread": 1000, + "startValue": 0.01 + } + ], + "title": "Time series", + "type": "timeseries" + }, + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "fieldConfig": { + "defaults": { + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "scaleDistribution": { + "type": "linear" + } + } + }, + "overrides": [] + }, + "gridPos": { + "h": 14, + "w": 8, + "x": 8, + "y": 0 + }, + "id": 6, + "options": { + "bucket": { + "layout": "auto" + }, + "calculate": true, + "calculation": { + "yBuckets": { + "scale": { + "log": 2, + "type": "log" + } + } + }, + "cellGap": 1, + "color": { + "exponent": 0.5, + "fill": "dark-orange", + "mode": "scheme", + "scale": "exponential", + "scheme": "Spectral", + "steps": 64 + }, + "exemplars": { + "color": "rgba(255,0,255,0.7)" + }, + "filterValues": { + "le": 1e-9 + }, + "legend": { + "show": true + }, + "mode": "calculate", + "tooltip": { + "show": true, + "yHistogram": false + }, + "yAxis": { + "axisPlacement": "left", + "reverse": false + }, + "yAxisLabels": "auto", + "yAxisReverse": false + }, + "pluginVersion": "9.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 3, + "refId": "A" + } + ], + "title": "log2", + "type": "heatmap-new" + }, + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "fieldConfig": { + "defaults": { + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "scaleDistribution": { + "type": "linear" + } + } + }, + "overrides": [] + }, + "gridPos": { + "h": 14, + "w": 8, + "x": 16, + "y": 0 + }, + "id": 7, + "options": { + "bucket": { + "layout": "auto" + }, + "calculate": true, + "calculation": { + "yBuckets": { + "scale": { + "log": 2, + "type": "log" + }, + "value": "2" + } + }, + "cellGap": 1, + "color": { + "exponent": 0.5, + "fill": "dark-orange", + "mode": "scheme", + "scale": "exponential", + "scheme": "Spectral", + "steps": 64 + }, + "exemplars": { + "color": "rgba(255,0,255,0.7)" + }, + "filterValues": { + "le": 1e-9 + }, + "legend": { + "show": true + }, + "mode": "calculate", + "tooltip": { + "show": true, + "yHistogram": false + }, + "yAxis": { + "axisPlacement": "left", + "reverse": false + }, + "yAxisLabels": "auto", + "yAxisReverse": false + }, + "pluginVersion": "9.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 3, + "refId": "A" + } + ], + "title": "log2 split 2", + "type": "heatmap-new" + }, + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "fieldConfig": { + "defaults": { + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "scaleDistribution": { + "type": "linear" + } + } + }, + "overrides": [] + }, + "gridPos": { + "h": 14, + "w": 8, + "x": 0, + "y": 14 + }, + "id": 4, + "options": { + "bucket": { + "layout": "auto" + }, + "calculate": true, + "cellGap": 1, + "color": { + "exponent": 0.5, + "fill": "dark-orange", + "mode": "scheme", + "scale": "exponential", + "scheme": "Spectral", + "steps": 64 + }, + "exemplars": { + "color": "rgba(255,0,255,0.7)" + }, + "filterValues": { + "le": 1e-9 + }, + "legend": { + "show": true + }, + "mode": "calculate", + "tooltip": { + "show": true, + "yHistogram": false + }, + "yAxis": { + "axisPlacement": "left", + "reverse": false + }, + "yAxisLabels": "auto", + "yAxisReverse": false + }, + "pluginVersion": "9.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 3, + "refId": "A" + } + ], + "title": "linear", + "type": "heatmap-new" + }, + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "fieldConfig": { + "defaults": { + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "scaleDistribution": { + "type": "linear" + } + } + }, + "overrides": [] + }, + "gridPos": { + "h": 14, + "w": 8, + "x": 8, + "y": 14 + }, + "id": 5, + "options": { + "bucket": { + "layout": "auto" + }, + "calculate": true, + "calculation": { + "yBuckets": { + "scale": { + "log": 10, + "type": "log" + } + } + }, + "cellGap": 1, + "color": { + "exponent": 0.5, + "fill": "dark-orange", + "mode": "scheme", + "scale": "exponential", + "scheme": "Spectral", + "steps": 64 + }, + "exemplars": { + "color": "rgba(255,0,255,0.7)" + }, + "filterValues": { + "le": 1e-9 + }, + "legend": { + "show": true + }, + "mode": "calculate", + "tooltip": { + "show": true, + "yHistogram": false + }, + "yAxis": { + "axisPlacement": "left", + "reverse": false + }, + "yAxisLabels": "auto", + "yAxisReverse": false + }, + "pluginVersion": "9.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 3, + "refId": "A" + } + ], + "title": "log10", + "type": "heatmap-new" + }, + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "fieldConfig": { + "defaults": { + "custom": { + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "scaleDistribution": { + "type": "linear" + } + } + }, + "overrides": [] + }, + "gridPos": { + "h": 14, + "w": 8, + "x": 16, + "y": 14 + }, + "id": 8, + "options": { + "bucket": { + "layout": "auto" + }, + "calculate": true, + "calculation": { + "yBuckets": { + "scale": { + "log": 10, + "type": "log" + }, + "value": "2" + } + }, + "cellGap": 1, + "color": { + "exponent": 0.5, + "fill": "dark-orange", + "mode": "scheme", + "scale": "exponential", + "scheme": "Spectral", + "steps": 64 + }, + "exemplars": { + "color": "rgba(255,0,255,0.7)" + }, + "filterValues": { + "le": 1e-9 + }, + "legend": { + "show": true + }, + "mode": "calculate", + "tooltip": { + "show": true, + "yHistogram": false + }, + "yAxis": { + "axisPlacement": "left", + "reverse": false + }, + "yAxisLabels": "auto", + "yAxisReverse": false + }, + "pluginVersion": "9.0.0-pre", + "targets": [ + { + "datasource": { + "type": "datasource", + "uid": "-- Dashboard --" + }, + "panelId": 3, + "refId": "A" + } + ], + "title": "log10 split 2", + "type": "heatmap-new" + } + ], + "schemaVersion": 36, + "style": "dark", + "tags": ["gdev", "panel-tests", "graph-ng"], + "templating": { + "list": [] + }, + "time": { + "from": "now-6h", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Heatmap calculate (log)", + "uid": "ZXYQTA97ZZ", + "version": 1, + "weekStart": "" +} diff --git a/devenv/docker/loadtest/annotations_by_tag_test.js b/devenv/docker/loadtest/annotations_by_tag_test.js index 7f722757caa..39d376b85f7 100644 --- a/devenv/docker/loadtest/annotations_by_tag_test.js +++ b/devenv/docker/loadtest/annotations_by_tag_test.js @@ -57,7 +57,7 @@ export default (data) => { requests.push({ method: 'GET', url: '/api/annotations?from=1580825186534&to=1580846786535' }); for (let n = 0; n < batchCount; n++) { - requests.push({ method: 'POST', url: '/api/tsdb/query', body: payload }); + requests.push({ method: 'POST', url: '/api/ds/query', body: payload }); } let responses = client.batch(requests); diff --git a/devenv/docker/loadtest/auth_key_test.js b/devenv/docker/loadtest/auth_key_test.js index b13b97dd17c..a3029226a64 100644 --- a/devenv/docker/loadtest/auth_key_test.js +++ b/devenv/docker/loadtest/auth_key_test.js @@ -62,7 +62,7 @@ export default (data) => { requests.push({ method: 'GET', url: '/api/annotations?dashboardId=2074&from=1548078832772&to=1548082432772' }); for (let n = 0; n < batchCount; n++) { - requests.push({ method: 'POST', url: '/api/tsdb/query', body: payload }); + requests.push({ method: 'POST', url: '/api/ds/query', body: payload }); } let responses = client.batch(requests); diff --git a/devenv/docker/loadtest/auth_token_slow_test.js b/devenv/docker/loadtest/auth_token_slow_test.js index 7e80b1017c2..38a3a6d8171 100644 --- a/devenv/docker/loadtest/auth_token_slow_test.js +++ b/devenv/docker/loadtest/auth_token_slow_test.js @@ -59,7 +59,7 @@ export default (data) => { requests.push({ method: 'GET', url: '/api/annotations?dashboardId=2074&from=1548078832772&to=1548082432772' }); for (let n = 0; n < batchCount; n++) { - requests.push({ method: 'POST', url: '/api/tsdb/query', body: payload }); + requests.push({ method: 'POST', url: '/api/ds/query', body: payload }); } let responses = client.batch(requests); diff --git a/devenv/docker/loadtest/auth_token_test.js b/devenv/docker/loadtest/auth_token_test.js index 40570fdef57..0626377a29a 100644 --- a/devenv/docker/loadtest/auth_token_test.js +++ b/devenv/docker/loadtest/auth_token_test.js @@ -58,7 +58,7 @@ export default (data) => { requests.push({ method: 'GET', url: '/api/annotations?dashboardId=2074&from=1548078832772&to=1548082432772' }); for (let n = 0; n < batchCount; n++) { - requests.push({ method: 'POST', url: '/api/tsdb/query', body: payload }); + requests.push({ method: 'POST', url: '/api/ds/query', body: payload }); } let responses = client.batch(requests); diff --git a/docs/sources/administration/_index.md b/docs/sources/administration/_index.md index 84e4e51d12c..bf07627ba45 100644 --- a/docs/sources/administration/_index.md +++ b/docs/sources/administration/_index.md @@ -10,9 +10,9 @@ weight: 40 This section includes information for Grafana administrators, team administrators, and users performing administrative tasks: -- [Change Preferences]({{< relref "preferences" >}}) -- [Configuration]({{< relref "configuration" >}}) -- [Configure Docker image]({{< relref "configure-docker" >}}) -- [Security]({{< relref "security" >}}) -- [Database encryption]({{< relref "database-encryption" >}}) -- [Service accounts]({{< relref "service-accounts" >}}) +- [Change Preferences]({{< relref "preferences/" >}}) +- [Configuration]({{< relref "configuration/" >}}) +- [Configure Docker image]({{< relref "configure-docker/" >}}) +- [Security]({{< relref "security/" >}}) +- [Database encryption]({{< relref "database-encryption/" >}}) +- [Service accounts]({{< relref "service-accounts/" >}}) diff --git a/docs/sources/administration/api-keys/about-api-keys.md b/docs/sources/administration/api-keys/about-api-keys.md index 901e8dcb1f5..29258ffa2b2 100644 --- a/docs/sources/administration/api-keys/about-api-keys.md +++ b/docs/sources/administration/api-keys/about-api-keys.md @@ -11,4 +11,4 @@ weight: 30 An API key is a randomly generated string that external systems use to interact with Grafana HTTP APIs. -When you create an API key, you specify a **Role** that determines the permissions associated with the API key. Role permissions control that actions the API key can perform on Grafana resources. For more information about creating API keys, refer to [Create an API key]({{< relref "./create-api-key.md#" >}}). +When you create an API key, you specify a **Role** that determines the permissions associated with the API key. Role permissions control that actions the API key can perform on Grafana resources. For more information about creating API keys, refer to [Create an API key]({{< relref "create-api-key.md#" >}}). diff --git a/docs/sources/administration/api-keys/create-api-key.md b/docs/sources/administration/api-keys/create-api-key.md index d200bc05536..2f01823650b 100644 --- a/docs/sources/administration/api-keys/create-api-key.md +++ b/docs/sources/administration/api-keys/create-api-key.md @@ -14,7 +14,7 @@ weight: 50 Create an API key when you want to manage your computed workload with a user. -For more information about API keys, refer to [About API keys in Grafana]({{< relref "./about-api-keys.md" >}}). +For more information about API keys, refer to [About API keys in Grafana]({{< relref "about-api-keys.md" >}}). This topic shows you how to create an API key using the Grafana UI. You can also create an API key using the Grafana HTTP API. For more information about creating API keys via the API, refer to [Create API key via API]({{< relref "../../developers/http_api/create-api-tokens-for-org.md#how-to-create-a-new-organization-and-an-api-token" >}}). diff --git a/docs/sources/administration/cli.md b/docs/sources/administration/cli.md index 849d51a76af..d76296422cb 100644 --- a/docs/sources/administration/cli.md +++ b/docs/sources/administration/cli.md @@ -137,7 +137,7 @@ grafana-cli --homepath "/usr/share/grafana" admin reset-admin-password }}) for more information about configuring Grafana and default configuration file locations. +`--config value` overrides the default location where Grafana expects the configuration file. Refer to [Configuration]({{< relref "configuration.md" >}}) for more information about configuring Grafana and default configuration file locations. **Example:** diff --git a/docs/sources/administration/configuration.md b/docs/sources/administration/configuration.md index 311a8fa453c..e0a5eb71766 100644 --- a/docs/sources/administration/configuration.md +++ b/docs/sources/administration/configuration.md @@ -127,7 +127,7 @@ password = $__file{/etc/secrets/gf_sql_password} The `vault` provider allows you to manage your secrets with [Hashicorp Vault](https://www.hashicorp.com/products/vault). -> Vault provider is only available in Grafana Enterprise v7.1+. For more information, refer to [Vault integration]({{< relref "../enterprise/vault.md" >}}) in [Grafana Enterprise]({{< relref "../enterprise" >}}). +> Vault provider is only available in Grafana Enterprise v7.1+. For more information, refer to [Vault integration]({{< relref "../enterprise/vault.md" >}}) in [Grafana Enterprise]({{< relref "../enterprise/" >}}).
@@ -434,12 +434,6 @@ For more details check the [Transport.MaxConnsPerHost](https://golang.org/pkg/ne The maximum number of idle connections that Grafana will maintain. Default is `100`. For more details check the [Transport.MaxIdleConns](https://golang.org/pkg/net/http/#Transport.MaxIdleConns) documentation. -### max_idle_connections_per_host - -[Deprecated - use max_idle_connections instead] - -The maximum number of idle connections per host that Grafana will maintain. Default is `2`. For more details check the [Transport.MaxIdleConnsPerHost](https://golang.org/pkg/net/http/#Transport.MaxIdleConnsPerHost) documentation. - ### idle_conn_timeout_seconds The length of time that Grafana maintains idle connections before closing them. Default is `90` seconds. For more details check the [Transport.IdleConnTimeout](https://golang.org/pkg/net/http/#Transport.IdleConnTimeout) documentation. @@ -673,7 +667,7 @@ Path to the default home dashboard. If this value is empty, then Grafana uses St Set to `false` to prohibit users from being able to sign up / create user accounts. Default is `false`. The admin user can still create -users. For more information about creating a user, refer to [Add a user]({{< relref "../administration/manage-users-and-permissions/manage-server-users/add-user.md" >}}). +users. For more information about creating a user, refer to [Add a user]({{< relref "manage-users-and-permissions/manage-server-users/add-user.md" >}}). ### allow_org_create @@ -815,7 +809,7 @@ Set to `true` to enable verbose request signature logging when AWS Signature Ver ## [auth.anonymous] -Refer to [Anonymous authentication]({{< relref "../auth/grafana.md/#anonymous-authentication" >}}) for detailed instructions. +Refer to [Anonymous authentication]({{< relref "../auth/grafana.md#anonymous-authentication" >}}) for detailed instructions.
diff --git a/docs/sources/administration/configure-docker.md b/docs/sources/administration/configure-docker.md index 1c1d800b95b..2e367d77e2d 100644 --- a/docs/sources/administration/configure-docker.md +++ b/docs/sources/administration/configure-docker.md @@ -14,7 +14,7 @@ weight: 200 # Configure a Grafana Docker image -If you are running Grafana in a Docker image, then you configure Grafana using [environment variables]({{< relref "../administration/configuration.md#configure-with-environment-variables" >}}) rather than directly editing the configuration file. If you want to save your data, then you also need to designate persistent storage or bind mounts for the Grafana container. +If you are running Grafana in a Docker image, then you configure Grafana using [environment variables]({{< relref "configuration.md#configure-with-environment-variables" >}}) rather than directly editing the configuration file. If you want to save your data, then you also need to designate persistent storage or bind mounts for the Grafana container. > **Note:** These examples use the Grafana Enterprise docker image. You can use the Grafana Open Source edition by changing the docker image to `grafana/grafana-oss`. @@ -59,7 +59,7 @@ The following settings are hard-coded when launching the Grafana Docker containe ## Logging -Logs in the Docker container go to standard out by default, as is common in the Docker world. Change this by setting a different [log mode]({{< relref "../administration/configuration.md#mode" >}}). +Logs in the Docker container go to standard out by default, as is common in the Docker world. Change this by setting a different [log mode]({{< relref "configuration.md#mode" >}}). Example: diff --git a/docs/sources/administration/database-encryption.md b/docs/sources/administration/database-encryption.md index 0af9ad244ee..269cf8fa7cb 100644 --- a/docs/sources/administration/database-encryption.md +++ b/docs/sources/administration/database-encryption.md @@ -101,7 +101,7 @@ New data keys for encryption operations are generated on-demand. > those secrets still encrypted with it. Look at [secrets re-encryption](#re-encrypt-secrets) to completely stop using > rotated data keys for both encryption and decryption. -> **Note:** This operation is available through Grafana [Admin API]({{< relref "../developers/configuration/admin/#rotate-data-encryption-keys" >}}). +> **Note:** This operation is available through Grafana [Admin API]({{< relref "../developers/http_api/admin/#rotate-data-encryption-keys" >}}). > It's safe to run more than once. # KMS integration diff --git a/docs/sources/administration/manage-user-preferences/_index.md b/docs/sources/administration/manage-user-preferences/_index.md index 809fe239374..c8093efcdf0 100644 --- a/docs/sources/administration/manage-user-preferences/_index.md +++ b/docs/sources/administration/manage-user-preferences/_index.md @@ -47,7 +47,7 @@ Your profile includes your name, user name, and email address, which you can upd ## Edit your preferences -You can choose the way you would like data to appear in Grafana, including the UI theme, home dashboard, timezone, and first day of the week. You can set these preferences for your own account, for a team, for an organization, or Grafana-wide using configuration settings. Your user preferences take precedence over team, organization, and Grafana default preferences. For more information, see [Grafana preferences]({{< relref "../../administration/preferences/_index.md" >}}). +You can choose the way you would like data to appear in Grafana, including the UI theme, home dashboard, timezone, and first day of the week. You can set these preferences for your own account, for a team, for an organization, or Grafana-wide using configuration settings. Your user preferences take precedence over team, organization, and Grafana default preferences. For more information, see [Grafana preferences]({{< relref "../preferences/_index.md" >}}). - **UI theme** determines whether Grafana appears in light mode or dark mode. By default, UI theme is set to dark mode. - **Home dashboard** refers to the dashboard you see when you sign in to Grafana. By default, this is set to the Home dashboard. @@ -81,7 +81,7 @@ Every user is a member of at least one organization. You can have different role 1. Hover your cursor over the user icon in the lower-left corner of the page and click **Preferences**. 1. Scroll down to the **Organizations** section and review the following information: - **Name**: The name of the organizations of which you are a member. - - **Role**: The role to which you are assigned in the organization. For more information about roles and permissions, refer to [Organization users and permissions]({{< relref "../../administration/manage-users-and-permissions/about-users-and-permissions.md#organization-users-and-permissions" >}}). + - **Role**: The role to which you are assigned in the organization. For more information about roles and permissions, refer to [Organization users and permissions]({{< relref "../manage-users-and-permissions/about-users-and-permissions.md#organization-users-and-permissions" >}}). - **Current**: Grafana indicates the organization that you are currently signed into as _Current_. If you are a member of multiple organizations, you can click **Select** to switch to that organization. ## View your Grafana sessions diff --git a/docs/sources/administration/manage-users-and-permissions/about-users-and-permissions.md b/docs/sources/administration/manage-users-and-permissions/about-users-and-permissions.md index 1fa41c94d7c..f287b1f7054 100644 --- a/docs/sources/administration/manage-users-and-permissions/about-users-and-permissions.md +++ b/docs/sources/administration/manage-users-and-permissions/about-users-and-permissions.md @@ -31,7 +31,7 @@ A server administrator can perform the following tasks: - Manage users and permissions - Create, edit, and delete organizations -- View server-wide settings defined in the [Configuration]({{< relref "../../administration/configuration.md" >}}) file +- View server-wide settings defined in the [Configuration]({{< relref "../configuration.md" >}}) file - View Grafana server statistics, including total users and active sessions - Upgrade the server to Grafana Enterprise. @@ -97,9 +97,9 @@ You can specify the following permissions to dashboards and folders. - **Edit**: Can create and edit dashboards. Editors _cannot_ change folder or dashboard permissions, or add, edit, or delete folders. - **View**: Can only view dashboards and folders. -For more information about assigning dashboard folder permissions, refer to [Grant dashboard folder permissions]({{< relref "./manage-dashboard-permissions/_index.md#grant-dashboard-folder-permissions" >}}). +For more information about assigning dashboard folder permissions, refer to [Grant dashboard folder permissions]({{< relref "manage-dashboard-permissions/_index.md#grant-dashboard-folder-permissions" >}}). -For more information about assigning dashboard permissions, refer to [Grant dashboard permissions]({{< relref "./manage-dashboard-permissions/_index.md#grant-dashboard-permissions" >}}). +For more information about assigning dashboard permissions, refer to [Grant dashboard permissions]({{< relref "manage-dashboard-permissions/_index.md#grant-dashboard-permissions" >}}). ## Editors with administrator permissions @@ -109,7 +109,7 @@ If you have access to the Grafana server, you can modify the default editor role This setting can be used to enable self-organizing teams to administer their own dashboards. -For more information about assigning administrator permissions to editors, refer to [Grant editors administrator permissions]({{< relref "./manage-server-users/grant-editor-admin-permissions.md" >}}). +For more information about assigning administrator permissions to editors, refer to [Grant editors administrator permissions]({{< relref "manage-server-users/grant-editor-admin-permissions.md" >}}). ## Viewers with dashboard preview and Explore permissions @@ -120,7 +120,7 @@ If you have access to the Grafana server, you can modify the default viewer role Extending the viewer role is useful for public Grafana installations where you want anonymous users to be able to edit panels and queries, but not be able to save or create new dashboards. -For more information about assigning dashboard preview permissions to viewers, refer to [Enable viewers to preview dashboards and use Explore]({{< relref "./manage-dashboard-permissions/_index.md#enable-viewers-to-preview-dashboards-and-use-explore" >}}). +For more information about assigning dashboard preview permissions to viewers, refer to [Enable viewers to preview dashboards and use Explore]({{< relref "manage-dashboard-permissions/_index.md#enable-viewers-to-preview-dashboards-and-use-explore" >}}). ## Teams and permissions @@ -131,7 +131,7 @@ You can assign a team member one of the following permissions: - **Member**: Includes the user as a member of the team. Members do not have team administrator privileges. - **Admin**: Administrators have permission to manage various aspects of the team, including team membership, permissions, and settings. -Because teams exist inside an organization, the organization administrator can manage all teams. When the `editors_can_admin` setting is enabled, editors can create teams and manage teams that they create. For more information about the `editors_can_admin` setting, refer to [Grant editors administrator permissions]({{< relref "./manage-server-users/grant-editor-admin-permissions.md" >}}). +Because teams exist inside an organization, the organization administrator can manage all teams. When the `editors_can_admin` setting is enabled, editors can create teams and manage teams that they create. For more information about the `editors_can_admin` setting, refer to [Grant editors administrator permissions]({{< relref "manage-server-users/grant-editor-admin-permissions.md" >}}). ## Grafana Enterprise user permissions features @@ -152,7 +152,7 @@ Data source permissions enable you to restrict data source query permissions to RBAC provides you a way of granting, changing, and revoking user read and write access to Grafana resources, such as users, reports, and authentication. -For more information about RBAC, refer to [Role-based access control]({{< relref "../../enterprise/access-control" >}}). +For more information about RBAC, refer to [Role-based access control]({{< relref "../../enterprise/access-control/" >}}). ### Learn more diff --git a/docs/sources/administration/manage-users-and-permissions/manage-dashboard-permissions/_index.md b/docs/sources/administration/manage-users-and-permissions/manage-dashboard-permissions/_index.md index 0786ad403ba..49260ece40d 100644 --- a/docs/sources/administration/manage-users-and-permissions/manage-dashboard-permissions/_index.md +++ b/docs/sources/administration/manage-users-and-permissions/manage-dashboard-permissions/_index.md @@ -76,7 +76,7 @@ This modification is useful for public Grafana installations where you want anon 1. Open the Grafana configuration file. - For more information about the Grafana configuration file and its location, refer to [Configuration]({{< relref "../../../administration/configuration" >}}). + For more information about the Grafana configuration file and its location, refer to [Configuration]({{< relref "../../configuration/" >}}). 1. Locate the `viewers_can_edit` parameter. 1. Set the `viewers_can_edit` value to `true`. diff --git a/docs/sources/administration/manage-users-and-permissions/manage-org-users/change-user-org-permissions.md b/docs/sources/administration/manage-users-and-permissions/manage-org-users/change-user-org-permissions.md index ea769aa8ff9..62e4e5faab1 100644 --- a/docs/sources/administration/manage-users-and-permissions/manage-org-users/change-user-org-permissions.md +++ b/docs/sources/administration/manage-users-and-permissions/manage-org-users/change-user-org-permissions.md @@ -25,4 +25,4 @@ Update user permissions when you want to enhance or restrict a user's access to 1. Select the role that you want to assign. 1. Click **Update**. -> **Note:** If you have [server administrator]({{< relref "../about-users-and-permissions.md#grafana-server-administrators" >}}) permissions, you can also [change a user's organization permissions]({{< relref "../../manage-users-and-permissions/manage-server-users/change-user-org-permissions.md" >}}) in the Server Admin section. +> **Note:** If you have [server administrator]({{< relref "../about-users-and-permissions.md#grafana-server-administrators" >}}) permissions, you can also [change a user's organization permissions]({{< relref "../manage-server-users/change-user-org-permissions.md" >}}) in the Server Admin section. diff --git a/docs/sources/administration/manage-users-and-permissions/manage-org-users/invite-user-join-org.md b/docs/sources/administration/manage-users-and-permissions/manage-org-users/invite-user-join-org.md index 8cef28ced99..047062d8a91 100644 --- a/docs/sources/administration/manage-users-and-permissions/manage-org-users/invite-user-join-org.md +++ b/docs/sources/administration/manage-users-and-permissions/manage-org-users/invite-user-join-org.md @@ -12,7 +12,7 @@ When you invite users to join an organization, you assign the **Admin**, **Edito - If you know that the user already has access Grafana and you know their user name, then you issue an invitation by entering their user name. - If the user is new to Grafana, then use their email address to issue an invitation. The system automatically creates the user account on first sign in. -> **Note:** If you have [server administrator]({{< relref "../about-users-and-permissions.md#grafana-server-administrators" >}}) permissions, you can also manually [add a user to an organization]({{< relref "../../manage-users-and-permissions/manage-server-users/add-remove-user-to-org.md" >}}). +> **Note:** If you have [server administrator]({{< relref "../about-users-and-permissions.md#grafana-server-administrators" >}}) permissions, you can also manually [add a user to an organization]({{< relref "../manage-server-users/add-remove-user-to-org.md" >}}). ## Before you begin @@ -35,7 +35,7 @@ When you invite users to join an organization, you assign the **Admin**, **Edito | ----------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | Email or username | Either the email or username that the user will use to sign in to Grafana. | | Name | The user's name. | - | Role | Click the organization role to assign this user. For more information about organization roles, refer to [Organization roles]({{< relref "../about-users-and-permissions#organization-roles" >}}).. | + | Role | Click the organization role to assign this user. For more information about organization roles, refer to [Organization roles]({{< relref "../about-users-and-permissions/#organization-roles" >}}).. | | Send invite email | Switch to on if your organization has configured. The system sends an email to the user inviting them to sign in to Grafana and join the organization. Switch to off if you are not using email. The user can sign in to Grafana with the email or username you entered. | 1. Click **Submit**. diff --git a/docs/sources/administration/manage-users-and-permissions/manage-org-users/remove-user-from-org.md b/docs/sources/administration/manage-users-and-permissions/manage-org-users/remove-user-from-org.md index 1d6b68ac0ee..9506b7f106e 100644 --- a/docs/sources/administration/manage-users-and-permissions/manage-org-users/remove-user-from-org.md +++ b/docs/sources/administration/manage-users-and-permissions/manage-org-users/remove-user-from-org.md @@ -25,4 +25,4 @@ This action does not remove the user account from the Grafana server. 1. Click the red **X** to remove the user from the organization. -> **Note:** If you have [server administrator]({{< relref "../about-users-and-permissions.md#grafana-server-administrators" >}}) permissions, you can also [remove a user from an organization]({{< relref "../../manage-users-and-permissions/manage-server-users/add-remove-user-to-org.md#remove-a-user-from-an-organization" >}}) on the Users page of the Server Admin section. +> **Note:** If you have [server administrator]({{< relref "../about-users-and-permissions.md#grafana-server-administrators" >}}) permissions, you can also [remove a user from an organization]({{< relref "../manage-server-users/add-remove-user-to-org.md#remove-a-user-from-an-organization" >}}) on the Users page of the Server Admin section. diff --git a/docs/sources/administration/manage-users-and-permissions/manage-org-users/view-list-org-users.md b/docs/sources/administration/manage-users-and-permissions/manage-org-users/view-list-org-users.md index 019027eb360..d8173bcd0a1 100644 --- a/docs/sources/administration/manage-users-and-permissions/manage-org-users/view-list-org-users.md +++ b/docs/sources/administration/manage-users-and-permissions/manage-org-users/view-list-org-users.md @@ -20,4 +20,4 @@ You can see a list of users with accounts in your Grafana organization. If neces ![Org Admin user list](/static/img/docs/manage-users/org-user-list-7-3.png) -> **Note:** If you have [server administrator]({{< relref "../about-users-and-permissions.md#grafana-server-administrators" >}}) permissions, you can also [view a global list of users]({{< relref "../../manage-users-and-permissions/manage-server-users/view-list-users.md" >}}) in the Server Admin section of Grafana. +> **Note:** If you have [server administrator]({{< relref "../about-users-and-permissions.md#grafana-server-administrators" >}}) permissions, you can also [view a global list of users]({{< relref "../manage-server-users/view-list-users.md" >}}) in the Server Admin section of Grafana. diff --git a/docs/sources/administration/manage-users-and-permissions/manage-server-users/_index.md b/docs/sources/administration/manage-users-and-permissions/manage-server-users/_index.md index 91467e02ca7..7cc3502a20f 100644 --- a/docs/sources/administration/manage-users-and-permissions/manage-server-users/_index.md +++ b/docs/sources/administration/manage-users-and-permissions/manage-server-users/_index.md @@ -15,6 +15,6 @@ If you have [server administrator]({{< relref "../about-users-and-permissions.md {{< section >}} -If you have [organization administrator]({{< relref "../about-users-and-permissions.md#organization-roles" >}}) permissions and _not_ [server administrator]({{< relref "../about-users-and-permissions.md#grafana-server-administrators" >}}) permissions, refer to [Manage users in a organization]({{< relref "../../manage-users-and-permissions/manage-org-users/_index.md" >}}). +If you have [organization administrator]({{< relref "../about-users-and-permissions.md#organization-roles" >}}) permissions and _not_ [server administrator]({{< relref "../about-users-and-permissions.md#grafana-server-administrators" >}}) permissions, refer to [Manage users in a organization]({{< relref "../manage-org-users/_index.md" >}}). -For more information about users and permissions, refer to [About users and permissions]({{< relref "../about-users-and-permissions" >}}). +For more information about users and permissions, refer to [About users and permissions]({{< relref "../about-users-and-permissions/" >}}). diff --git a/docs/sources/administration/manage-users-and-permissions/manage-server-users/add-remove-user-to-org.md b/docs/sources/administration/manage-users-and-permissions/manage-server-users/add-remove-user-to-org.md index 50b9b47c800..bda00b06c09 100644 --- a/docs/sources/administration/manage-users-and-permissions/manage-server-users/add-remove-user-to-org.md +++ b/docs/sources/administration/manage-users-and-permissions/manage-server-users/add-remove-user-to-org.md @@ -15,7 +15,7 @@ You are required to specify an Admin role for each organization. The first user ## Before you begin - [Create an organization]({{< relref "../../manage-organizations/_index.md" >}}) -- [Add a user]({{< relref "./add-user.md" >}}) to Grafana +- [Add a user]({{< relref "add-user.md" >}}) to Grafana - Ensure you have Grafana server administrator privileges **To add a user to an organization**: @@ -32,7 +32,7 @@ You are required to specify an Admin role for each organization. The first user The next time the user signs in, they will be able to navigate to their new organization using the Switch Organizations option in the user profile menu. -> **Note:** If you have [organization administrator]({{< relref "../about-users-and-permissions.md#organization-roles" >}}) permissions and _not_ [server administrator]({{< relref "../about-users-and-permissions.md#grafana-server-administrators" >}}) permissions, you can still [invite a user to join an organization]({{< relref "../../manage-users-and-permissions/manage-org-users/invite-user-join-org.md" >}}). +> **Note:** If you have [organization administrator]({{< relref "../about-users-and-permissions.md#organization-roles" >}}) permissions and _not_ [server administrator]({{< relref "../about-users-and-permissions.md#grafana-server-administrators" >}}) permissions, you can still [invite a user to join an organization]({{< relref "../manage-org-users/invite-user-join-org.md" >}}). # Remove a user from an organization @@ -50,4 +50,4 @@ Remove a user from an organization when they no longer require access to the das 1. In the **Organization** section, click **Remove from organization** next to the organization from which you want to remove the user. 1. Click **Confirm removal**. -> **Note:** If you have [organization administrator]({{< relref "../about-users-and-permissions.md#organization-roles" >}}) permissions and _not_ [server administrator]({{< relref "../about-users-and-permissions.md#grafana-server-administrators" >}}) permissions, you can still [remove a user from an organization]({{< relref "../../manage-users-and-permissions/manage-org-users/remove-user-from-org.md" >}}) in the Users section of organization configuration. +> **Note:** If you have [organization administrator]({{< relref "../about-users-and-permissions.md#organization-roles" >}}) permissions and _not_ [server administrator]({{< relref "../about-users-and-permissions.md#grafana-server-administrators" >}}) permissions, you can still [remove a user from an organization]({{< relref "../manage-org-users/remove-user-from-org.md" >}}) in the Users section of organization configuration. diff --git a/docs/sources/administration/manage-users-and-permissions/manage-server-users/add-user.md b/docs/sources/administration/manage-users-and-permissions/manage-server-users/add-user.md index 9450c881d8d..58c7a61f17b 100644 --- a/docs/sources/administration/manage-users-and-permissions/manage-server-users/add-user.md +++ b/docs/sources/administration/manage-users-and-permissions/manage-server-users/add-user.md @@ -24,6 +24,6 @@ When you configure advanced authentication using Oauth, SAML, LDAP, or the Auth 1. Click **New user**. 1. Complete the fields and click **Create user**. -When you create a user, the system assigns the user viewer permissions in a default organization, which you can change. You can now [add a user to a second organization]({{< relref "./add-remove-user-to-org.md" >}}). +When you create a user, the system assigns the user viewer permissions in a default organization, which you can change. You can now [add a user to a second organization]({{< relref "add-remove-user-to-org.md" >}}). -> **Note:** If you have [organization administrator]({{< relref "../about-users-and-permissions.md#organization-roles" >}}) permissions and _not_ [server administrator]({{< relref "../about-users-and-permissions.md#grafana-server-administrators" >}}) permissions, you can still add users by [inviting a user to join an organization]({{< relref "../../manage-users-and-permissions/manage-org-users/invite-user-join-org.md" >}}). +> **Note:** If you have [organization administrator]({{< relref "../about-users-and-permissions.md#organization-roles" >}}) permissions and _not_ [server administrator]({{< relref "../about-users-and-permissions.md#grafana-server-administrators" >}}) permissions, you can still add users by [inviting a user to join an organization]({{< relref "../manage-org-users/invite-user-join-org.md" >}}). diff --git a/docs/sources/administration/manage-users-and-permissions/manage-server-users/assign-remove-server-admin-privileges.md b/docs/sources/administration/manage-users-and-permissions/manage-server-users/assign-remove-server-admin-privileges.md index 27b64fc08c8..24c9e87c13c 100644 --- a/docs/sources/administration/manage-users-and-permissions/manage-server-users/assign-remove-server-admin-privileges.md +++ b/docs/sources/administration/manage-users-and-permissions/manage-server-users/assign-remove-server-admin-privileges.md @@ -13,7 +13,7 @@ Grafana server administrators are responsible for creating users, organizations, ## Before you begin -- [Add a user]({{< relref "./add-user.md" >}}) +- [Add a user]({{< relref "add-user.md" >}}) - Ensure you have Grafana server administrator privileges **To assign or remove Grafana administrator privileges**: diff --git a/docs/sources/administration/manage-users-and-permissions/manage-server-users/change-user-org-permissions.md b/docs/sources/administration/manage-users-and-permissions/manage-server-users/change-user-org-permissions.md index 5eb323753fb..bbea6bb05f1 100644 --- a/docs/sources/administration/manage-users-and-permissions/manage-server-users/change-user-org-permissions.md +++ b/docs/sources/administration/manage-users-and-permissions/manage-server-users/change-user-org-permissions.md @@ -11,7 +11,7 @@ Update organization permissions when you want to enhance or restrict a user's ac ## Before you begin -- [Add a user to an organization]({{< relref "./add-remove-user-to-org.md" >}}) +- [Add a user to an organization]({{< relref "add-remove-user-to-org.md" >}}) - Ensure you have Grafana server administrator privileges **To change a user's organization permissions**: diff --git a/docs/sources/administration/manage-users-and-permissions/manage-server-users/grant-editor-admin-permissions.md b/docs/sources/administration/manage-users-and-permissions/manage-server-users/grant-editor-admin-permissions.md index 5736cb7df84..a360960dbc6 100644 --- a/docs/sources/administration/manage-users-and-permissions/manage-server-users/grant-editor-admin-permissions.md +++ b/docs/sources/administration/manage-users-and-permissions/manage-server-users/grant-editor-admin-permissions.md @@ -26,7 +26,7 @@ When `editors_can_admin` is enabled: 1. Log in to the Grafana server and open the Grafana configuration file. - For more information about the Grafana configuration file and its location, refer to [Configuration]({{< relref "../../../administration/configuration" >}}). + For more information about the Grafana configuration file and its location, refer to [Configuration]({{< relref "../../../administration/configuration/" >}}). 1. Locate the `editors_can_admin` parameter. 1. Set the `editors_can_admin` value to `true`. diff --git a/docs/sources/administration/manage-users-and-permissions/manage-server-users/view-list-users.md b/docs/sources/administration/manage-users-and-permissions/manage-server-users/view-list-users.md index b834bdb4a8b..b3a86efc72d 100644 --- a/docs/sources/administration/manage-users-and-permissions/manage-server-users/view-list-users.md +++ b/docs/sources/administration/manage-users-and-permissions/manage-server-users/view-list-users.md @@ -20,4 +20,4 @@ You can see a list of users with accounts on your Grafana server. This action mi ![Server Admin user list](/static/img/docs/manage-users/server-user-list-7-3.png) -> **Note:** If you have [organization administrator]({{< relref "../about-users-and-permissions.md#organization-roles" >}}) permissions and _not_ [server administrator]({{< relref "../about-users-and-permissions.md#grafana-server-administrators" >}}) permissions, you can still [view of list of users in a given organization]({{< relref "../../manage-users-and-permissions/manage-org-users/view-list-org-users.md" >}}). +> **Note:** If you have [organization administrator]({{< relref "../about-users-and-permissions.md#organization-roles" >}}) permissions and _not_ [server administrator]({{< relref "../about-users-and-permissions.md#grafana-server-administrators" >}}) permissions, you can still [view of list of users in a given organization]({{< relref "../manage-org-users/view-list-org-users.md" >}}). diff --git a/docs/sources/administration/provisioning.md b/docs/sources/administration/provisioning.md index f0e0f744fdd..aaf3d8bdd00 100644 --- a/docs/sources/administration/provisioning.md +++ b/docs/sources/administration/provisioning.md @@ -98,8 +98,6 @@ datasources: uid: my_unique_uid # url url: http://localhost:8080 - # Deprecated, use secureJsonData.password - password: # database user, if used user: # database name, if used @@ -108,8 +106,6 @@ datasources: basicAuth: # basic auth username basicAuthUser: - # Deprecated, use secureJsonData.basicAuthPassword - basicAuthPassword: # enable/disable with credentials headers withCredentials: # mark as default datasource. Max one per org diff --git a/docs/sources/administration/security.md b/docs/sources/administration/security.md index 76cec13081e..d6a4a785edf 100644 --- a/docs/sources/administration/security.md +++ b/docs/sources/administration/security.md @@ -23,7 +23,7 @@ You can configure Grafana to only allow certain IP addresses or hostnames to be ## Request security -The request security configuration option allows users to limit requests from the Grafana server. It targets requests that are generated by users. For more information, refer to [Request security]({{< relref "../enterprise/request-security.md" >}}) in [Grafana Enterprise]({{< relref "../enterprise" >}}). +The request security configuration option allows users to limit requests from the Grafana server. It targets requests that are generated by users. For more information, refer to [Request security]({{< relref "../enterprise/request-security.md" >}}) in [Grafana Enterprise]({{< relref "../enterprise/" >}}). > **Note:** Request security is available in Grafana Enterprise v7.4 and later versions. diff --git a/docs/sources/administration/service-accounts/about-service-accounts.md b/docs/sources/administration/service-accounts/about-service-accounts.md index 8d0737ed0f0..692c60572ec 100644 --- a/docs/sources/administration/service-accounts/about-service-accounts.md +++ b/docs/sources/administration/service-accounts/about-service-accounts.md @@ -11,7 +11,7 @@ weight: 30 A service account can be used to run automated workloads in Grafana, like dashboard provisioning, configuration, or report generation. Create service accounts and tokens to authenticate applications like Terraform with the Grafana API. -> **Note:** Service accounts are available in Grafana 8.5+ as a beta feature. To enable service accounts, refer to [Enable service accounts]({{< relref "./enable-service-accounts.md#" >}}) section. Service accounts will eventually replace [API keys]({{< relref "../api-keys/_index.md" >}}) as the primary way to authenticate applications that interact with Grafana. +> **Note:** Service accounts are available in Grafana 8.5+ as a beta feature. To enable service accounts, refer to [Enable service accounts]({{< relref "enable-service-accounts.md#" >}}) section. Service accounts will eventually replace [API keys]({{< relref "../api-keys/_index.md" >}}) as the primary way to authenticate applications that interact with Grafana. A common use case for creating a service account is to perform operations on automated or triggered tasks. You can use service accounts to: @@ -46,4 +46,4 @@ The added benefits of service accounts to API keys include: - Service accounts resemble Grafana users and can be enabled/disabled, granted specific permissions, and remain active until they are deleted or disabled. API keys are only valid until their expiry date. - Service accounts can be associated with multiple tokens. - Unlike API keys, service account tokens are not associated with a specific user, which means that applications can be authenticated even if a Grafana user is deleted. -- You can grant granular permissions to service accounts by leveraging [fine-grained access control]({{< relref "../../enterprise/access-control" >}}). For more information about permissions, refer to [About users and permissions]({{< relref "../manage-users-and-permissions/about-users-and-permissions.md#" >}}). +- You can grant granular permissions to service accounts by leveraging [fine-grained access control]({{< relref "../../enterprise/access-control/" >}}). For more information about permissions, refer to [About users and permissions]({{< relref "../manage-users-and-permissions/about-users-and-permissions.md#" >}}). diff --git a/docs/sources/administration/service-accounts/add-service-account-token.md b/docs/sources/administration/service-accounts/add-service-account-token.md index a038c33ad2c..5a8d97a5d3a 100644 --- a/docs/sources/administration/service-accounts/add-service-account-token.md +++ b/docs/sources/administration/service-accounts/add-service-account-token.md @@ -9,13 +9,13 @@ weight: 60 # Add a token to a service account in Grafana -A service account token is a generated random string that acts as an alternative to a password when authenticating with Grafana’s HTTP API. For more information about service accounts, refer to [About service accounts in Grafana]({{< relref "./about-service-accounts.md" >}}). +A service account token is a generated random string that acts as an alternative to a password when authenticating with Grafana’s HTTP API. For more information about service accounts, refer to [About service accounts in Grafana]({{< relref "about-service-accounts.md" >}}). You can create a service account token using the Grafana UI or via the API. For more information about creating a service account token via the API, refer to [Create service account tokens using the HTTP API]({{< relref "../../developers/http_api/serviceaccount.md#create-service-account-tokens" >}}). ## Before you begin -- Ensure you have added the `serviceAccounts` feature toggle to Grafana. For more information about adding the feature toggle, refer to [Enable service accounts]({{< relref "./enable-service-accounts.md#" >}}). +- Ensure you have added the `serviceAccounts` feature toggle to Grafana. For more information about adding the feature toggle, refer to [Enable service accounts]({{< relref "enable-service-accounts.md#" >}}). - Ensure you have permission to create and edit service accounts. By default, the organization administrator role is required to create and edit service accounts. For more information about user permissions, refer to [About users and permissions]({{< relref "../manage-users-and-permissions/about-users-and-permissions.md#" >}}). ## To add a token to a service account diff --git a/docs/sources/administration/service-accounts/create-service-account.md b/docs/sources/administration/service-accounts/create-service-account.md index 2e107a74bd7..cf2e878df8f 100644 --- a/docs/sources/administration/service-accounts/create-service-account.md +++ b/docs/sources/administration/service-accounts/create-service-account.md @@ -11,13 +11,13 @@ weight: 50 # Create a service account in Grafana -A service account can be used to run automated workloads in Grafana, like dashboard provisioning, configuration, or report generation. For more information about how you can use service accounts, refer to [About service accounts]({{< relref "../service-accounts/about-service-accounts.md#" >}}). +A service account can be used to run automated workloads in Grafana, like dashboard provisioning, configuration, or report generation. For more information about how you can use service accounts, refer to [About service accounts]({{< relref "about-service-accounts.md#" >}}). For more information about creating service accounts via the API, refer to [Create a service account in the HTTP API]({{< relref "../../developers/http_api/serviceaccount.md#create-service-account" >}}). ## Before you begin -- Ensure you have added the feature toggle for service accounts `serviceAccounts`. For more information about adding the feature toggle, refer to [Enable service accounts]({{< relref "./enable-service-accounts.md#" >}}). +- Ensure you have added the feature toggle for service accounts `serviceAccounts`. For more information about adding the feature toggle, refer to [Enable service accounts]({{< relref "enable-service-accounts.md#" >}}). - Ensure you have permission to create and edit service accounts. By default, the organization administrator role is required to create and edit service accounts. For more information about user permissions, refer to [About users and permissions]({{< relref "../manage-users-and-permissions/about-users-and-permissions.md#" >}}). ## To create a service account diff --git a/docs/sources/administration/service-accounts/enable-service-accounts.md b/docs/sources/administration/service-accounts/enable-service-accounts.md index e6b5325ca27..158bfe3fc59 100644 --- a/docs/sources/administration/service-accounts/enable-service-accounts.md +++ b/docs/sources/administration/service-accounts/enable-service-accounts.md @@ -25,7 +25,7 @@ You can enable service accounts by: This topic shows you how to enable service accounts by modifying the Grafana configuration file. 1. Sign in to the Grafana server and locate the configuration file. For more information about finding the configuration file, refer to LINK. -2. Open the configuration file and locate the [feature toggles section]({{< relref "../../administration/configuration.md#feature_toggles" >}}). Add `serviceAccounts` as a [feature_toggle]({{< relref "../../administration/configuration.md#feature_toggle" >}}). +2. Open the configuration file and locate the [feature toggles section]({{< relref "../configuration.md#feature_toggles" >}}). Add `serviceAccounts` as a [feature_toggle]({{< relref "../configuration.md#feature_toggle" >}}). ``` [feature_toggles] @@ -39,6 +39,6 @@ enable = serviceAccounts This topic shows you how to enable service accounts by setting environment variables before starting Grafana. -Follow the instructions to [override configuration with environment variables]({{< relref "../../administration/configuration.md#override-configuration-with-environment-variables" >}}). Set the following environment variable: `GF_FEATURE_TOGGLES_ENABLE = serviceAccounts`. +Follow the instructions to [override configuration with environment variables]({{< relref "../configuration.md#override-configuration-with-environment-variables" >}}). Set the following environment variable: `GF_FEATURE_TOGGLES_ENABLE = serviceAccounts`. > **Note:** Environment variables override configuration file settings. diff --git a/docs/sources/administration/set-up-for-high-availability.md b/docs/sources/administration/set-up-for-high-availability.md index ff9acc98a66..c6bf6574874 100644 --- a/docs/sources/administration/set-up-for-high-availability.md +++ b/docs/sources/administration/set-up-for-high-availability.md @@ -23,7 +23,7 @@ and other persistent data. So the default embedded SQLite database will not work ## Configure multiple servers to use the same database First, you need to set up MySQL or Postgres on another server and configure Grafana to use that database. -You can find the configuration for doing that in the [[database]]({{< relref "../administration/configuration.md#database" >}}) section in the Grafana config. +You can find the configuration for doing that in the [[database]]({{< relref "configuration.md#database" >}}) section in the Grafana config. Grafana will now persist all long term data in the database. How to configure the database for high availability is out of scope for this guide. We recommend finding an expert on the database you're using. ## Alerting high availability diff --git a/docs/sources/administration/view-server/internal-metrics.md b/docs/sources/administration/view-server/internal-metrics.md index eb18e74534a..c457f6645ec 100644 --- a/docs/sources/administration/view-server/internal-metrics.md +++ b/docs/sources/administration/view-server/internal-metrics.md @@ -15,7 +15,7 @@ weight: 200 Grafana collects some metrics about itself internally. Grafana supports pushing metrics to Graphite or exposing them to be scraped by Prometheus. -For more information about configuration options related to Grafana metrics, refer to [metrics]({{< relref "../../administration/configuration/#metrics" >}}) and [metrics.graphite]({{< relref "../../administration/configuration/#metrics-graphite" >}}) in [Configuration]({{< relref "../../administration/configuration.md" >}}). +For more information about configuration options related to Grafana metrics, refer to [metrics]({{< relref "../../administration/configuration/#metrics" >}}) and [metrics.graphite]({{< relref "../../administration/configuration/#metrics-graphite" >}}) in [Configuration]({{< relref "../configuration.md" >}}). ## Available metrics diff --git a/docs/sources/alerting/_index.md b/docs/sources/alerting/_index.md index 6662edb456b..97e11964f61 100644 --- a/docs/sources/alerting/_index.md +++ b/docs/sources/alerting/_index.md @@ -22,7 +22,7 @@ For new installations or existing installs without alerting configured, Grafana Existing installations that upgrade to v9.0 will have Grafana alerting enabled by default. For more information on migrating from legacy or the cloud alerting plugin, see [Migrating to Grafana alerting]({{< relref "./migrating-alerts/_index.md" >}}). -Before you begin, we recommend that you familiarize yourself with some of the [fundamental concepts]({{< relref "./fundamentals/_index.md" >}}) of Grafana alerting. Refer to [Role-based access control]({{< relref "../enterprise/access-control/_index.md" >}}) in Grafana Enterprise to learn more about controlling access to alerts using role-based permissions. +Before you begin, we recommend that you familiarize yourself with some of the [fundamental concepts]({{< relref "fundamentals/_index.md" >}}) of Grafana alerting. Refer to [Role-based access control]({{< relref "../enterprise/access-control/_index.md" >}}) in Grafana Enterprise to learn more about controlling access to alerts using role-based permissions. - [About alert rules]({{< relref "./fundamentals/alert-rules/_index.md" >}}) - [Migrating legacy alerts]({{< relref "./migrating-alerts/_index.md" >}}) @@ -30,8 +30,9 @@ Before you begin, we recommend that you familiarize yourself with some of the [f - [Create Grafana managed alerting rules]({{< relref "alerting-rules/create-grafana-managed-rule.md" >}}) - [Create Grafana Mimir or Loki managed alerting rules]({{< relref "alerting-rules/create-mimir-loki-managed-rule.md" >}}) - [View existing alerting rules and manage their current state]({{< relref "alerting-rules/rule-list.md" >}}) -- [View the state and health of alerting rules]({{< relref "./fundamentals/state-and-health.md" >}}) -- [View alert groupings]({{< relref "./alert-groups/_index.md" >}}) -- [Add or edit an alert contact point]({{< relref "./contact-points/_index.md" >}}) -- [Add or edit notification policies]({{< relref "./notifications/_index.md" >}}) -- [Add or edit silences]({{< relref "./silences/_index.md" >}}) +- [View the state and health of alerting rules]({{< relref "fundamentals/state-and-health.md" >}}) +- [View alert groupings]({{< relref "alert-groups/_index.md" >}}) +- [Add or edit an alert contact point]({{< relref "contact-points/_index.md" >}}) +- [Add or edit notification policies]({{< relref "notifications/_index.md" >}}) +- [Add or edit silences]({{< relref "silences/_index.md" >}}) +- [Performance considerations for alerting]({{< relref "performance.md" >}}) diff --git a/docs/sources/alerting/alert-groups/_index.md b/docs/sources/alerting/alert-groups/_index.md index 364b7a875f5..28366c1e318 100644 --- a/docs/sources/alerting/alert-groups/_index.md +++ b/docs/sources/alerting/alert-groups/_index.md @@ -17,5 +17,5 @@ Alert groups show grouped alerts from an Alertmanager instance. By default, the For more information, see: -- [View alert groupings]({{< relref "./view-alert-grouping.md" >}}) -- [Filter alerts by group]({{< relref "./filter-alerts.md" >}}) +- [View alert groupings]({{< relref "view-alert-grouping.md" >}}) +- [Filter alerts by group]({{< relref "filter-alerts.md" >}}) diff --git a/docs/sources/alerting/alerting-rules/_index.md b/docs/sources/alerting/alerting-rules/_index.md index bbbf57cae8c..dae48011307 100644 --- a/docs/sources/alerting/alerting-rules/_index.md +++ b/docs/sources/alerting/alerting-rules/_index.md @@ -15,9 +15,9 @@ While queries and expressions select the data set to evaluate, a condition sets You can: -- [Create Grafana Mimir or Loki managed alert rule]({{< relref "./create-mimir-loki-managed-rule.md" >}}) -- [Create Grafana Mimir or Loki managed recording rule]({{< relref "./create-mimir-loki-managed-recording-rule.md" >}}) -- [Edit Grafana Mimir or Loki rule groups and namespaces]({{< relref "./edit-mimir-loki-namespace-group.md" >}}) -- [Create Grafana managed alert rule]({{< relref "./create-grafana-managed-rule.md" >}}) +- [Create Grafana Mimir or Loki managed alert rule]({{< relref "create-mimir-loki-managed-rule.md" >}}) +- [Create Grafana Mimir or Loki managed recording rule]({{< relref "create-mimir-loki-managed-recording-rule.md" >}}) +- [Edit Grafana Mimir or Loki rule groups and namespaces]({{< relref "edit-mimir-loki-namespace-group.md" >}}) +- [Create Grafana managed alert rule]({{< relref "create-grafana-managed-rule.md" >}}) - [State and health of alerting rules]({{< relref "../fundamentals/state-and-health.md" >}}) -- [Manage alerting rules]({{< relref "./rule-list.md" >}}) +- [Manage alerting rules]({{< relref "rule-list.md" >}}) diff --git a/docs/sources/alerting/alerting-rules/create-mimir-loki-managed-rule.md b/docs/sources/alerting/alerting-rules/create-mimir-loki-managed-rule.md index 79f66448792..f9a6145812e 100644 --- a/docs/sources/alerting/alerting-rules/create-mimir-loki-managed-rule.md +++ b/docs/sources/alerting/alerting-rules/create-mimir-loki-managed-rule.md @@ -42,7 +42,7 @@ Grafana allows you to create alerting rules for an external Grafana Mimir or Lok > **Note:** Once a condition is met, the alert goes into the `Pending` state. If the condition remains active for the duration specified, the alert transitions to the `Firing` state, else it reverts to the `Normal` state. 1. In Step 3, add the rule name, namespace, rule group, as well as additional metadata associated with the rule. - In **Rule name**, add a descriptive name. This name is displayed in the alert rule list. It is also the `alertname` label for every alert instance that is created from this rule. - - From the **Namespace** drop-down, select an existing rule namespace. Otherwise, click **Add new** and enter a name to create a new one. Namespaces can contain one or more rule groups and only have an organizational purpose. For more information, see [Grafana Mimir or Loki rule groups and namespaces]({{< relref "./edit-mimir-loki-namespace-group.md" >}}). + - From the **Namespace** drop-down, select an existing rule namespace. Otherwise, click **Add new** and enter a name to create a new one. Namespaces can contain one or more rule groups and only have an organizational purpose. For more information, see [Grafana Mimir or Loki rule groups and namespaces]({{< relref "edit-mimir-loki-namespace-group.md" >}}). - From the **Group** drop-down, select an existing group within the selected namespace. Otherwise, click **Add new** and enter a name to create a new one. Newly created rules are appended to the end of the group. Rules within a group are run sequentially at a regular interval, with the same evaluation time. - Add a description and summary to customize alert messages. Use the guidelines in [Annotations and labels for alerting]({{< relref "../fundamentals/annotation-label/_index.md" >}}). - Add Runbook URL, panel, dashboard, and alert IDs. diff --git a/docs/sources/alerting/alerting-rules/rule-list.md b/docs/sources/alerting/alerting-rules/rule-list.md index 5d09c68992a..56e6317f46a 100644 --- a/docs/sources/alerting/alerting-rules/rule-list.md +++ b/docs/sources/alerting/alerting-rules/rule-list.md @@ -62,5 +62,5 @@ Grafana managed alerting rules can only be edited or deleted by users with Edit To edit or delete a rule: 1. Expand a rule row until you can see the rule controls of **View**, **Edit**, and **Delete**. -1. Click **Edit** to open the create rule page. Make updates following instructions in [Create a Grafana managed alerting rule]({{< relref "./create-grafana-managed-rule.md" >}}) or [Create a Grafana Mimir or Loki managed alerting rule]({{< relref "./create-mimir-loki-managed-rule.md" >}}). +1. Click **Edit** to open the create rule page. Make updates following instructions in [Create a Grafana managed alerting rule]({{< relref "create-grafana-managed-rule.md" >}}) or [Create a Grafana Mimir or Loki managed alerting rule]({{< relref "create-mimir-loki-managed-rule.md" >}}). 1. Click **Delete** to delete a rule. diff --git a/docs/sources/alerting/contact-points/_index.md b/docs/sources/alerting/contact-points/_index.md index cf78e0dd760..f155418a48b 100644 --- a/docs/sources/alerting/contact-points/_index.md +++ b/docs/sources/alerting/contact-points/_index.md @@ -16,7 +16,7 @@ weight: 430 # Contact points -Use contact points to define how your contacts are notified when an alert fires. A contact point can have one or more contact point types, for example, email, slack, webhook, and so on. When an alert fires, a notification is sent to all contact point types listed for a contact point. Optionally, use [message templates]({{< relref "./message-templating/_index.md" >}}) to customize notification messages for the contact point types. +Use contact points to define how your contacts are notified when an alert fires. A contact point can have one or more contact point types, for example, email, slack, webhook, and so on. When an alert fires, a notification is sent to all contact point types listed for a contact point. Optionally, use [message templates]({{< relref "message-templating/_index.md" >}}) to customize notification messages for the contact point types. You can configure Grafana managed contact points as well as contact points for an [external Alertmanager data source]({{< relref "../../datasources/alertmanager.md" >}}). For more information, see [Alertmanager]({{< relref "../fundamentals/alertmanager.md" >}}). diff --git a/docs/sources/alerting/contact-points/message-templating/_index.md b/docs/sources/alerting/contact-points/message-templating/_index.md index 299b974f4cd..95d92b8b016 100644 --- a/docs/sources/alerting/contact-points/message-templating/_index.md +++ b/docs/sources/alerting/contact-points/message-templating/_index.md @@ -15,9 +15,9 @@ weight: 400 # Message templating -Notifications sent via [contact points]({{< relref "../../contact-points/_index.md" >}}) are built using messaging templates. Grafana's default templates are based on the [Go templating system](https://golang.org/pkg/text/template) where some fields are evaluated as text, while others are evaluated as HTML (which can affect escaping). The default template, defined in [default_template.go](https://github.com/grafana/grafana/blob/main/pkg/services/ngalert/notifier/channels/default_template.go), is a useful reference for custom templates. +Notifications sent via [contact points]({{< relref "../_index.md" >}}) are built using messaging templates. Grafana's default templates are based on the [Go templating system](https://golang.org/pkg/text/template) where some fields are evaluated as text, while others are evaluated as HTML (which can affect escaping). The default template, defined in [default_template.go](https://github.com/grafana/grafana/blob/main/pkg/services/ngalert/notifier/channels/default_template.go), is a useful reference for custom templates. -Since most of the contact point fields can be templated, you can create reusable custom templates and use them in multiple contact points. The [template data]({{< relref "./template-data.md" >}}) topic lists variables that are available for templating. The default template is defined in [default_template.go](https://github.com/grafana/grafana/blob/main/pkg/services/ngalert/notifier/channels/default_template.go) which can serve as a useful reference or starting point for custom templates. +Since most of the contact point fields can be templated, you can create reusable custom templates and use them in multiple contact points. The [template data]({{< relref "template-data.md" >}}) topic lists variables that are available for templating. The default template is defined in [default_template.go](https://github.com/grafana/grafana/blob/main/pkg/services/ngalert/notifier/channels/default_template.go) which can serve as a useful reference or starting point for custom templates. ### Using templates diff --git a/docs/sources/alerting/contact-points/message-templating/template-data.md b/docs/sources/alerting/contact-points/message-templating/template-data.md index 7f770f643da..d4341ef2aa4 100644 --- a/docs/sources/alerting/contact-points/message-templating/template-data.md +++ b/docs/sources/alerting/contact-points/message-templating/template-data.md @@ -14,7 +14,7 @@ weight: 120 # Template data -Template data is passed on to [message templates]({{< relref "./_index.md" >}}) as well as sent as payload to webhook pushes. +Template data is passed on to [message templates]({{< relref "_index.md" >}}) as well as sent as payload to webhook pushes. | Name | Type | Notes | | ----------------- | -------- | -------------------------------------------------------------------------------------------------------------------- | diff --git a/docs/sources/alerting/fundamentals/_index.md b/docs/sources/alerting/fundamentals/_index.md index 98ede25db8a..47dca9fb6af 100644 --- a/docs/sources/alerting/fundamentals/_index.md +++ b/docs/sources/alerting/fundamentals/_index.md @@ -11,8 +11,7 @@ weight: 110 This section includes the following fundamental concepts of Grafana alerting: -- [Alert rules]({{< relref "./alert-rules/_index.md" >}}) -- [Annotations and labels for alerting rules]({{< relref "./annotation-label/_index.md" >}}) -- [Alertmanager]({{< relref "./alertmanager.md" >}}) -- [State and health of alerting rules]({{< relref "./state-and-health.md" >}}) -- [Evaluating Grafana managed alerts]({{< relref "./evaluate-grafana-alerts.md" >}}) +- [Annotations and labels for alerting rules]({{< relref "annotation-label/_index.md" >}}) +- [Alertmanager]({{< relref "alertmanager.md" >}}) +- [State and health of alerting rules]({{< relref "state-and-health.md" >}}) +- [Evaluating Grafana managed alerts]({{< relref "evaluate-grafana-alerts.md" >}}) diff --git a/docs/sources/alerting/fundamentals/annotation-label/_index.md b/docs/sources/alerting/fundamentals/annotation-label/_index.md index a1478c0bf78..997b8c11ca9 100644 --- a/docs/sources/alerting/fundamentals/annotation-label/_index.md +++ b/docs/sources/alerting/fundamentals/annotation-label/_index.md @@ -15,7 +15,7 @@ weight: 401 # Annotations and labels for alerting rules -Annotations and labels are key value pairs associated with alerts originating from the alerting rule, datasource response, and as a result of alerting rule evaluation. They can be used in alert notifications directly or in [templates]({{< relref "../../contact-points/message-templating/_index.md" >}}) and [template functions]({{< relref "../../contact-points/message-templating/template-functions" >}}) to create notification contact dynamically. +Annotations and labels are key value pairs associated with alerts originating from the alerting rule, datasource response, and as a result of alerting rule evaluation. They can be used in alert notifications directly or in [templates]({{< relref "../../contact-points/message-templating/_index.md" >}}) and [template functions]({{< relref "../../contact-points/message-templating/template-functions/" >}}) to create notification contact dynamically. ## Annotations @@ -27,6 +27,6 @@ Labels are key-value pairs that contain information about, and are used to uniqu Before you begin using annotations and labels, familiarize yourself with: -- [Labels in Grafana alerting]({{< relref "./how-to-use-labels.md" >}}) -- [How label matching works]({{< relref "./how-to-use-labels.md" >}}) -- [Template variables for alerting rule labels and annotations]({{< relref "./variables-label-annotation.md" >}}) +- [Labels in Grafana alerting]({{< relref "how-to-use-labels.md" >}}) +- [How label matching works]({{< relref "how-to-use-labels.md" >}}) +- [Template variables for alerting rule labels and annotations]({{< relref "variables-label-annotation.md" >}}) diff --git a/docs/sources/alerting/high-availability/_index.md b/docs/sources/alerting/high-availability/_index.md index 8f07d00fd58..b45af3e6d93 100644 --- a/docs/sources/alerting/high-availability/_index.md +++ b/docs/sources/alerting/high-availability/_index.md @@ -30,4 +30,4 @@ The two types of messages gossiped between Grafana instances are: The notification logs and silences are persisted in the database periodically and during a graceful Grafana shut down. -For configuration instructions, refer to [enable alerting high availability]({{< relref "./enable-alerting-ha.md" >}}). +For configuration instructions, refer to [enable alerting high availability]({{< relref "enable-alerting-ha.md" >}}). diff --git a/docs/sources/alerting/high-availability/enable-alerting-ha.md b/docs/sources/alerting/high-availability/enable-alerting-ha.md index 41aa31bcf9c..c040be3cf00 100644 --- a/docs/sources/alerting/high-availability/enable-alerting-ha.md +++ b/docs/sources/alerting/high-availability/enable-alerting-ha.md @@ -15,7 +15,7 @@ weight: 450 # Enable alerting high availability -You can enable [alerting high availability]({{< relref "./_index.md" >}}) support by updating the Grafana configuration file. On Kubernetes, you can enable alerting high availability by updating the Kubernetes container definition. +You can enable [alerting high availability]({{< relref "_index.md" >}}) support by updating the Grafana configuration file. On Kubernetes, you can enable alerting high availability by updating the Kubernetes container definition. ## Update Grafana configuration file diff --git a/docs/sources/alerting/performance.md b/docs/sources/alerting/performance.md new file mode 100644 index 00000000000..a24fa0bb661 --- /dev/null +++ b/docs/sources/alerting/performance.md @@ -0,0 +1,24 @@ ++++ +title = "Performance considerations" +description = "Understanding alerting performance" +keywords = ["grafana", "alerting", "performance"] +weight = 100 ++++ + +# Alerting performance considerations + +Grafana alerting supports multi-dimensional alerting, where one alert rule can generate many alerts. For example, you can configure an alert rule to fire an alert every time the CPU of individual VMs max out. This topic discusses performance considerations resulting from multi-dimensional alerting. + +Evaluating alerting rules consumes RAM and CPU to compute the output of an alerting query, and network resources to send alert notifications and write the results to the Grafana SQL database. The configuration of individual alert rules affects the resource consumption and, therefore, the maximum number of rules a given configuration can support. + +The following section provides a list of alerting performance considerations. + +- Frequency of rule evaluation consideration. The "Evaluate Every" property of an alert rule controls the frequency of rule evaluation. We recommend using the lowest acceptable evaluation frequency to support more concurrent rules. +- Cardinality of the rule's result set. For example, suppose you are monitoring API response errors for every API path, on every VM in your fleet. This set has a cardinality of _n_ number of paths multiplied by _v_ number of VMs. You can reduce the cardinality of a result set - perhaps by monitoring errors-per-VM instead of for each path per VM. +- Complexity of the alerting query consideration. Queries that data sources can process and respond to quickly consume fewer resources. Although this consideration is less important than the other considerations listed above, if you have reduced those as much as possible, looking at individual query performance could make a difference. + +Each evaluation of an alert rule generates a set of alert instances; one for each member of the result set. The state of all the instances is written to the `alert_instance` table in Grafana's SQL database. + +Grafana alerting exposes a metric, `grafana_alerting_rule_evaluations_total` that counts the number of alert rule evaluations. To get a feel for the influence of rule evaluations on your Grafana instance, you can observe the rate of evaluations and compare it with resource consumption. In a Prometheus-compatible database, you can use the query `rate(grafana_alerting_rule_evaluations_total[5m])` to compute the rate over 5 minute windows of time. It's important to remember that this isn't the full picture of rule evaluation. For example, the load will be unevenly distributed if you have some rules that evaluate every 10 seconds, and others every 30 minutes. + +These factors all affect the load on the Grafana instance, but you should also be aware of the performance impact that evaluating these rules has on your data sources. Alerting queries are often the vast majority of queries handled by monitoring databases, so the same load factors that affect the Grafana instance affect them as well. diff --git a/docs/sources/alerting/silences/_index.md b/docs/sources/alerting/silences/_index.md index 259baa64ed0..84a6e5a8b57 100644 --- a/docs/sources/alerting/silences/_index.md +++ b/docs/sources/alerting/silences/_index.md @@ -25,4 +25,4 @@ See also: - [Create a silence]({{< relref "./create-silence.md" >}}) - [Create a URL to link to a silence form]({{< relref "./linking-to-silence-form.md" >}}) - [Edit silences]({{< relref "./edit-silence.md" >}}) -- [Remove a silences]({{< relref "./remove-silence.md" >}}) +- [Remove silences]({{< relref "./remove-silence.md" >}}) diff --git a/docs/sources/auth/_index.md b/docs/sources/auth/_index.md index c68ce381a0f..0249f47be01 100644 --- a/docs/sources/auth/_index.md +++ b/docs/sources/auth/_index.md @@ -14,14 +14,14 @@ Here is a table showing all supported authentication providers and the features See also, [Grafana Authentication]({{< relref "grafana.md" >}}). -| Provider | Support | Role mapping | Team sync
_(Enterprise only)_ | Active sync
_(Enterprise only)_ | -| -------------------------------------------------------------- | :-----: | :----------: | :-------------------------------: | :---------------------------------: | -| [Auth Proxy]({{< relref "auth-proxy.md" >}}) | v2.1+ | - | v6.3+ | - | -| [Azure AD OAuth]({{< relref "azuread.md" >}}) | v6.7+ | v6.7+ | v6.7+ | - | -| [Generic OAuth]({{< relref "generic-oauth.md" >}}) | v4.0+ | v6.5+ | - | - | -| [GitHub OAuth]({{< relref "github.md" >}}) | v2.0+ | - | v6.3+ | - | -| [GitLab OAuth]({{< relref "gitlab.md" >}}) | v5.3+ | - | v6.4+ | - | -| [Google OAuth]({{< relref "google.md" >}}) | v2.0+ | - | - | - | -| [LDAP]({{< relref "ldap.md" >}}) | v2.1+ | v2.1+ | v5.3+ | v6.3+ | -| [Okta OAuth]({{< relref "okta.md" >}}) | v7.0+ | v7.0+ | v7.0+ | - | -| [SAML]({{< relref "../enterprise/saml/" >}}) (Enterprise only) | v6.3+ | v7.0+ | v7.0+ | - | +| Provider | Support | Role mapping | Team sync
_(Enterprise only)_ | Active sync
_(Enterprise only)_ | +| ------------------------------------------------------------------------ | :-----: | :----------: | :-------------------------------: | :---------------------------------: | +| [Auth Proxy]({{< relref "auth-proxy.md" >}}) | v2.1+ | - | v6.3+ | - | +| [Azure AD OAuth]({{< relref "azuread.md" >}}) | v6.7+ | v6.7+ | v6.7+ | - | +| [Generic OAuth]({{< relref "generic-oauth.md" >}}) | v4.0+ | v6.5+ | - | - | +| [GitHub OAuth]({{< relref "github.md" >}}) | v2.0+ | - | v6.3+ | - | +| [GitLab OAuth]({{< relref "gitlab.md" >}}) | v5.3+ | - | v6.4+ | - | +| [Google OAuth]({{< relref "google.md" >}}) | v2.0+ | - | - | - | +| [LDAP]({{< relref "ldap.md" >}}) | v2.1+ | v2.1+ | v5.3+ | v6.3+ | +| [Okta OAuth]({{< relref "okta.md" >}}) | v7.0+ | v7.0+ | v7.0+ | - | +| [SAML]({{< relref "../enterprise/configure-saml/" >}}) (Enterprise only) | v6.3+ | v7.0+ | v7.0+ | - | diff --git a/docs/sources/auth/auth-proxy.md b/docs/sources/auth/auth-proxy.md index 70fff8ee09c..3a2440ba18b 100644 --- a/docs/sources/auth/auth-proxy.md +++ b/docs/sources/auth/auth-proxy.md @@ -306,5 +306,5 @@ With `enable_login_token` set to `true` Grafana will, after successful auth prox a login token and cookie. You only have to configure your auth proxy to provide headers for the /login route. Requests via other routes will be authenticated using the cookie. -Use settings `login_maximum_inactive_lifetime_days` and `login_maximum_lifetime_days` under `[auth]` to control session +Use settings `login_maximum_inactive_lifetime_duration` and `login_maximum_lifetime_duration` under `[auth]` to control session lifetime. [Read more about login tokens]({{< relref "overview/#login-and-short-lived-tokens" >}}) diff --git a/docs/sources/auth/enhanced_ldap.md b/docs/sources/auth/enhanced_ldap.md index 25085763a3d..503e7687db7 100644 --- a/docs/sources/auth/enhanced_ldap.md +++ b/docs/sources/auth/enhanced_ldap.md @@ -17,4 +17,4 @@ weight: 400 The enhanced LDAP integration adds additional functionality on top of the existing [LDAP integration]({{< relref "ldap.md" >}}). -> Enhanced LDAP integration is only available in Grafana Enterprise. For more information, refer to [Enhanced LDAP integration]({{< relref "../enterprise/enhanced_ldap.md" >}}) in [Grafana Enterprise]({{< relref "../enterprise" >}}). +> Enhanced LDAP integration is only available in Grafana Enterprise. For more information, refer to [Enhanced LDAP integration]({{< relref "../enterprise/enhanced_ldap.md" >}}) in [Grafana Enterprise]({{< relref "../enterprise/" >}}). diff --git a/docs/sources/auth/ldap.md b/docs/sources/auth/ldap.md index 2a961a4d47c..36d2c697f91 100644 --- a/docs/sources/auth/ldap.md +++ b/docs/sources/auth/ldap.md @@ -18,7 +18,7 @@ weight: 300 The LDAP integration in Grafana allows your Grafana users to login with their LDAP credentials. You can also specify mappings between LDAP group memberships and Grafana Organization user roles. -> [Enhanced LDAP authentication]({{< relref "../enterprise/enhanced_ldap.md" >}}) is available in [Grafana Cloud Advanced](https://grafana.com/docs/grafana-cloud/) and in [Grafana Enterprise]({{< relref "../enterprise" >}}). +> [Enhanced LDAP authentication]({{< relref "../enterprise/enhanced_ldap.md" >}}) is available in [Grafana Cloud Advanced](https://grafana.com/docs/grafana-cloud/) and in [Grafana Enterprise]({{< relref "../enterprise/" >}}). > Refer to [Role-based access control]({{< relref "../enterprise/access-control/_index.md" >}}) in Grafana Enterprise to understand how you can control access with role-based permissions. diff --git a/docs/sources/auth/okta.md b/docs/sources/auth/okta.md index 2d58b9b3a9b..63d0bbef56f 100644 --- a/docs/sources/auth/okta.md +++ b/docs/sources/auth/okta.md @@ -79,7 +79,7 @@ Grafana can attempt to do role mapping through Okta OAuth. In order to achieve t Grafana uses JSON obtained from querying the `/userinfo` endpoint for the path lookup. The result after evaluating the `role_attribute_path` JMESPath expression needs to be a valid Grafana role, i.e. `Viewer`, `Editor` or `Admin`. Refer to [About users and permissions]({{< relref "../administration/manage-users-and-permissions/about-users-and-permissions.md" >}}) for more information about roles and permissions in Grafana. -Read about how to [add custom claims](https://developer.okta.com/docs/guides/customize-tokens-returned-from-okta/add-custom-claim/) to the user info in Okta. Also, check Generic OAuth page for [JMESPath examples]({{< relref "generic-oauth.md/#jmespath-examples" >}}). +Read about how to [add custom claims](https://developer.okta.com/docs/guides/customize-tokens-returned-from-okta/add-custom-claim/) to the user info in Okta. Also, check Generic OAuth page for [JMESPath examples]({{< relref "generic-oauth.md#jmespath-examples" >}}). ### Team Sync (Enterprise only) diff --git a/docs/sources/auth/overview.md b/docs/sources/auth/overview.md index e6f899d3cf3..ccbc4aaf66d 100644 --- a/docs/sources/auth/overview.md +++ b/docs/sources/auth/overview.md @@ -12,18 +12,18 @@ Grafana provides many ways to authenticate users. Some authentication integratio The following table shows all supported authentication providers and the features available for them. [Team sync]({{< relref "../enterprise/team-sync.md" >}}) and [active sync]({{< relref "../enterprise/enhanced_ldap.md#active-ldap-synchronization" >}}) are only available in Grafana Enterprise. -| Provider | Support | Role mapping | Team sync
_(Enterprise only)_ | Active sync
_(Enterprise only)_ | -| -------------------------------------------------------------- | :-----: | :----------: | :-------------------------------: | :---------------------------------: | -| [Auth Proxy]({{< relref "auth-proxy.md" >}}) | v2.1+ | - | v6.3+ | - | -| [Azure AD OAuth]({{< relref "azuread.md" >}}) | v6.7+ | v6.7+ | v6.7+ | - | -| [Generic OAuth]({{< relref "generic-oauth.md" >}}) | v4.0+ | v6.5+ | - | - | -| [GitHub OAuth]({{< relref "github.md" >}}) | v2.0+ | - | v6.3+ | - | -| [GitLab OAuth]({{< relref "gitlab.md" >}}) | v5.3+ | - | v6.4+ | - | -| [Google OAuth]({{< relref "google.md" >}}) | v2.0+ | - | - | - | -| [JWT]({{< relref "jwt.md" >}}) | v8.0+ | - | - | - | -| [LDAP]({{< relref "ldap.md" >}}) | v2.1+ | v2.1+ | v5.3+ | v6.3+ | -| [Okta OAuth]({{< relref "okta.md" >}}) | v7.0+ | v7.0+ | v7.0+ | - | -| [SAML]({{< relref "../enterprise/saml/" >}}) (Enterprise only) | v6.3+ | v7.0+ | v7.0+ | - | +| Provider | Support | Role mapping | Team sync
_(Enterprise only)_ | Active sync
_(Enterprise only)_ | +| -------------------------------------------------------------------------- | :-----: | :----------: | :-------------------------------: | :---------------------------------: | +| [Auth Proxy]({{< relref "auth-proxy.md" >}}) | v2.1+ | - | v6.3+ | - | +| [Azure AD OAuth]({{< relref "azuread.md" >}}) | v6.7+ | v6.7+ | v6.7+ | - | +| [Generic OAuth]({{< relref "generic-oauth.md" >}}) | v4.0+ | v6.5+ | - | - | +| [GitHub OAuth]({{< relref "github.md" >}}) | v2.0+ | - | v6.3+ | - | +| [GitLab OAuth]({{< relref "gitlab.md" >}}) | v5.3+ | - | v6.4+ | - | +| [Google OAuth]({{< relref "google.md" >}}) | v2.0+ | - | - | - | +| [JWT]({{< relref "jwt.md" >}}) | v8.0+ | - | - | - | +| [LDAP]({{< relref "ldap.md" >}}) | v2.1+ | v2.1+ | v5.3+ | v6.3+ | +| [Okta OAuth]({{< relref "okta.md" >}}) | v7.0+ | v7.0+ | v7.0+ | - | +| [SAML]({{< relref "../enterprise/configure-saml.md" >}}) (Enterprise only) | v6.3+ | v7.0+ | v7.0+ | - | ## Grafana Auth diff --git a/docs/sources/auth/saml.md b/docs/sources/auth/saml.md index efb7ee278c0..ce9a38ec00f 100644 --- a/docs/sources/auth/saml.md +++ b/docs/sources/auth/saml.md @@ -15,4 +15,4 @@ weight: 1100 The SAML authentication integration allows your Grafana users to log in by using an external SAML Identity Provider (IdP). To enable this, Grafana becomes a Service Provider (SP) in the authentication flow, interacting with the IdP to exchange user information. -> SAML authentication integration is available in Grafana Cloud Pro and Advanced and in Grafana Enterprise. For more information, refer to [SAML authentication]({{< relref "../enterprise/saml/" >}}) in [Grafana Enterprise]({{< relref "../enterprise" >}}). +> SAML authentication integration is available in Grafana Cloud Pro and Advanced and in Grafana Enterprise. For more information, refer to [SAML authentication]({{< relref "../enterprise/configure-saml/" >}}) in [Grafana Enterprise]({{< relref "../enterprise/" >}}). diff --git a/docs/sources/auth/team-sync.md b/docs/sources/auth/team-sync.md index c47b4678610..e1d688bc06f 100644 --- a/docs/sources/auth/team-sync.md +++ b/docs/sources/auth/team-sync.md @@ -24,4 +24,4 @@ This mechanism allows Grafana to remove an existing synchronized user from a tea
-> Team Sync is available in both Grafana Enterprise and Grafana Cloud Advanced. For more information, refer to [Team sync]({{< relref "../enterprise/team-sync.md" >}}) in [Grafana Enterprise]({{< relref "../enterprise" >}}). +> Team Sync is available in both Grafana Enterprise and Grafana Cloud Advanced. For more information, refer to [Team sync]({{< relref "../enterprise/team-sync.md" >}}) in [Grafana Enterprise]({{< relref "../enterprise/" >}}). diff --git a/docs/sources/basics/exemplars/_index.md b/docs/sources/basics/exemplars/_index.md index c4bb32ac882..9e8c545dda5 100644 --- a/docs/sources/basics/exemplars/_index.md +++ b/docs/sources/basics/exemplars/_index.md @@ -27,4 +27,4 @@ Grafana shows exemplars alongside a metric in the Explore view and in dashboards {{< figure src="/static/img/docs/v74/exemplars.png" class="docs-image--no-shadow" max-width= "750px" caption="Screenshot showing the detail window of an Exemplar" >}} -Refer to [View exemplar data]({{< relref "./view-exemplars.md" >}}) for instructions on how to drill down and view exemplar trace details from metrics and logs. To know more about exemplars, refer to the blogpost [Intro to exemplars, which enable Grafana Tempo’s distributed tracing at massive scale](https://grafana.com/blog/2021/03/31/intro-to-exemplars-which-enable-grafana-tempos-distributed-tracing-at-massive-scale/). +Refer to [View exemplar data]({{< relref "view-exemplars.md" >}}) for instructions on how to drill down and view exemplar trace details from metrics and logs. To know more about exemplars, refer to the blogpost [Intro to exemplars, which enable Grafana Tempo’s distributed tracing at massive scale](https://grafana.com/blog/2021/03/31/intro-to-exemplars-which-enable-grafana-tempos-distributed-tracing-at-massive-scale/). diff --git a/docs/sources/best-practices/_index.md b/docs/sources/best-practices/_index.md index cb443d43145..0410112f78f 100644 --- a/docs/sources/best-practices/_index.md +++ b/docs/sources/best-practices/_index.md @@ -10,7 +10,7 @@ weight: 20 This section provides information about best practices for intermediate Grafana administrators and users. Click on each of the links before for more information. -- [Best practices for creating dashboards]({{< relref "best-practices-for-creating-dashboards" >}}) -- [Best practices for managing dashboards]({{< relref "best-practices-for-managing-dashboards" >}}) -- [Common observability strategies]({{< relref "common-observability-strategies" >}}) -- [Dashboard management maturity model]({{< relref "dashboard-management-maturity-levels" >}}) +- [Best practices for creating dashboards]({{< relref "best-practices-for-creating-dashboards/" >}}) +- [Best practices for managing dashboards]({{< relref "best-practices-for-managing-dashboards/" >}}) +- [Common observability strategies]({{< relref "common-observability-strategies/" >}}) +- [Dashboard management maturity model]({{< relref "dashboard-management-maturity-levels/" >}}) diff --git a/docs/sources/best-practices/dashboard-management-maturity-levels.md b/docs/sources/best-practices/dashboard-management-maturity-levels.md index 7c6d2bd727c..49c1c74ff0d 100644 --- a/docs/sources/best-practices/dashboard-management-maturity-levels.md +++ b/docs/sources/best-practices/dashboard-management-maturity-levels.md @@ -48,7 +48,7 @@ How can you tell you are here? - Compare like to like: split service dashboards when the magnitude differs. Make sure aggregated metrics don't drown out important information. - Expressive charts with meaningful use of color and normalizing axes where you can. - - Example of meaningful color: Blue means it's good, red means it's bad. [Thresholds]({{< relref "../panels/configure-thresholds" >}}) can help with that. + - Example of meaningful color: Blue means it's good, red means it's bad. [Thresholds]({{< relref "../panels/configure-thresholds/" >}}) can help with that. - Example of normalizing axes: When comparing CPU usage, measure by percentage rather than raw number, because machines can have a different number of cores. Normalizing CPU usage by the number of cores reduces cognitive load because the viewer can trust that at 100% all cores are being used, without having to know the number of CPUs. - Directed browsing cuts down on "guessing." - Template variables make it harder to “just browse” randomly or aimlessly. diff --git a/docs/sources/dashboards/_index.md b/docs/sources/dashboards/_index.md index e33089c3a07..6c0a834f478 100644 --- a/docs/sources/dashboards/_index.md +++ b/docs/sources/dashboards/_index.md @@ -14,17 +14,17 @@ Dashboard snapshots are static . Queries and expressions cannot be re-executed f Before you begin, ensure that you have configured a data source. See also: -- [Working with Grafana dashboard UI]({{< relref "./dashboard-ui/_index.md" >}}) -- [Dashboard folders]({{< relref "./dashboard-folders.md" >}}) -- [Create dashboard]({{< relref "./dashboard-create" >}}) -- [Manage dashboards]({{< relref "./dashboard-manage.md" >}}) -- [Annotations]({{< relref "./annotations.md" >}}) -- [Playlist]({{< relref "./playlist.md" >}}) -- [Search]({{< relref "./search.md" >}}) -- [Keyboard shortcuts]({{< relref "./shortcuts.md" >}}) -- [Reporting]({{< relref "./reporting.md" >}}) -- [Time range controls]({{< relref "./time-range-controls.md" >}}) -- [Dashboard version history]({{< relref "./dashboard-history.md" >}}) -- [Dashboard export and import]({{< relref "./export-import.md" >}}) -- [Dashboard JSON model]({{< relref "./json-model.md" >}}) -- [Scripted dashboards]({{< relref "./scripted-dashboards.md" >}}) +- [Working with Grafana dashboard UI]({{< relref "dashboard-ui/_index.md" >}}) +- [Dashboard folders]({{< relref "dashboard-folders.md" >}}) +- [Create dashboard]({{< relref "dashboard-create/" >}}) +- [Manage dashboards]({{< relref "dashboard-manage.md" >}}) +- [Annotations]({{< relref "annotations.md" >}}) +- [Playlist]({{< relref "playlist.md" >}}) +- [Search]({{< relref "search.md" >}}) +- [Keyboard shortcuts]({{< relref "shortcuts.md" >}}) +- [Reporting]({{< relref "reporting.md" >}}) +- [Time range controls]({{< relref "time-range-controls.md" >}}) +- [Dashboard version history]({{< relref "dashboard-history.md" >}}) +- [Dashboard export and import]({{< relref "export-import.md" >}}) +- [Dashboard JSON model]({{< relref "json-model.md" >}}) +- [Scripted dashboards]({{< relref "scripted-dashboards.md" >}}) diff --git a/docs/sources/dashboards/dashboard-ui/_index.md b/docs/sources/dashboards/dashboard-ui/_index.md index 6822d53a687..222b1a0da33 100644 --- a/docs/sources/dashboards/dashboard-ui/_index.md +++ b/docs/sources/dashboards/dashboard-ui/_index.md @@ -18,4 +18,4 @@ The dashboard UI has the following sections to allow you to customize the presen - **Dashboard panel** (4) Click the panel title to edit panels. - **Graph legend** (5) Change series colors, y-axis and series visibility directly from the legend. -For more details, see [Dashboard header]({{< relref "./dashboard-header.md" >}}) and [Dashboard rows]({{< relref "./dashboard-row.md" >}}). +For more details, see [Dashboard header]({{< relref "dashboard-header.md" >}}) and [Dashboard rows]({{< relref "dashboard-row.md" >}}). diff --git a/docs/sources/dashboards/previews.md b/docs/sources/dashboards/previews.md index fe0a546951d..fda993fe82f 100644 --- a/docs/sources/dashboards/previews.md +++ b/docs/sources/dashboards/previews.md @@ -77,7 +77,7 @@ Use the new [contextPerRenderKey]({{< relref "../image-rendering/#rendering-mode ### Saving previews -The crawler saves previews and their metadata in Grafana's DB. Preview's metadata contains, among other things, the [dashboard version]({{< relref "./dashboard-history" >}}) from the time of taking the screenshot. During subsequent runs, the crawler uses the saved version to find stale dashboard previews. +The crawler saves previews and their metadata in Grafana's DB. Preview's metadata contains, among other things, the [dashboard version]({{< relref "dashboard-history/" >}}) from the time of taking the screenshot. During subsequent runs, the crawler uses the saved version to find stale dashboard previews. ## Permissions @@ -86,7 +86,7 @@ The crawler saves previews and their metadata in Grafana's DB. Preview's metadat The crawler is set up with the required permissions to display all dashboards and query all data sources. The way the permissions are set up depends on the version of Grafana. In OSS and Enterprise Grafana instances without RBAC enabled, the crawler uses a special user with an `Admin` role. -In an Enterprise Grafana instance with RBAC enabled, the crawler uses [service accounts]({{< relref "../administration/service-accounts" >}}) with three fixed roles: +In an Enterprise Grafana instance with RBAC enabled, the crawler uses [service accounts]({{< relref "../administration/service-accounts/" >}}) with three fixed roles: - `fixed:dashboards:reader` - `fixed:datasources:reader` diff --git a/docs/sources/dashboards/reporting.md b/docs/sources/dashboards/reporting.md index b3573056b54..f2d1154b785 100644 --- a/docs/sources/dashboards/reporting.md +++ b/docs/sources/dashboards/reporting.md @@ -16,4 +16,4 @@ Reporting allows you to generate PDFs from any of your dashboards and have them {{< figure src="/static/img/docs/enterprise/reports_list.png" max-width="500px" class="docs-image--no-shadow" >}} -> Reporting is only available in Grafana Enterprise, v6.4 or later. For more information, refer to [Reporting]({{< relref "../enterprise/reporting.md" >}}) in [Grafana Enterprise]({{< relref "../enterprise" >}}). +> Reporting is only available in Grafana Enterprise, v6.4 or later. For more information, refer to [Reporting]({{< relref "../enterprise/reporting.md" >}}) in [Grafana Enterprise]({{< relref "../enterprise/" >}}). diff --git a/docs/sources/datasources/alertmanager.md b/docs/sources/datasources/alertmanager.md index d2df3d05c61..27522a8f0f9 100644 --- a/docs/sources/datasources/alertmanager.md +++ b/docs/sources/datasources/alertmanager.md @@ -37,5 +37,6 @@ datasources: # optionally basicAuth: true basicAuthUser: my_user - basicAuthPassword: test_password + secureJsonData: + basicAuthPassword: test_password ``` diff --git a/docs/sources/datasources/azuremonitor/_index.md b/docs/sources/datasources/azuremonitor/_index.md index 5528e2c3548..a9e09cf2d03 100644 --- a/docs/sources/datasources/azuremonitor/_index.md +++ b/docs/sources/datasources/azuremonitor/_index.md @@ -280,9 +280,9 @@ If a request exceeds the [maximum allowed value of records](https://docs.microso See the following topics to learn more about the Azure Monitor data source: -- [Azure Monitor template variables]({{< relref "./template-variables.md" >}}) for more interactive, dynamic, and reusable dashboards. -- [Provisioning Azure Monitor]({{< relref "./provisioning.md" >}}) for configuring the Azure Monitor data source using YAML files -- [Deprecating Application Insights]({{< relref "./provisioning.md" >}}) and migrating to Metrics and Logs queries +- [Azure Monitor template variables]({{< relref "template-variables.md" >}}) for more interactive, dynamic, and reusable dashboards. +- [Provisioning Azure Monitor]({{< relref "provisioning.md" >}}) for configuring the Azure Monitor data source using YAML files +- [Deprecating Application Insights]({{< relref "provisioning.md" >}}) and migrating to Metrics and Logs queries ### Configuring using Managed Identity diff --git a/docs/sources/datasources/elasticsearch.md b/docs/sources/datasources/elasticsearch.md index e66013dd91e..e1f4ac8e623 100644 --- a/docs/sources/datasources/elasticsearch.md +++ b/docs/sources/datasources/elasticsearch.md @@ -81,7 +81,7 @@ When `X-Pack enabled` is active and the configured Elasticsearch version is high ### Logs There are two parameters, `Message field name` and `Level field name`, that can optionally be configured from the data source settings page that determine -which fields will be used for log messages and log levels when visualizing logs in [Explore]({{< relref "../explore" >}}). +which fields will be used for log messages and log levels when visualizing logs in [Explore]({{< relref "../explore/" >}}). For example, if you're using a default setup of Filebeat for shipping logs to Elasticsearch the following configuration should work: @@ -194,7 +194,7 @@ for annotation events. ## Querying Logs -Querying and displaying log data from Elasticsearch is available in [Explore]({{< relref "../explore" >}}), and in the [logs panel]({{< relref "../visualizations/logs-panel.md" >}}) in dashboards. +Querying and displaying log data from Elasticsearch is available in [Explore]({{< relref "../explore/" >}}), and in the [logs panel]({{< relref "../visualizations/logs-panel.md" >}}) in dashboards. Select the Elasticsearch data source, and then optionally enter a lucene query to display your logs. When switching from a Prometheus or Loki data source in Explore, your query is translated to an Elasticsearch log query with a correct Lucene filter. @@ -264,6 +264,6 @@ For more details on AWS SigV4, refer to the [AWS documentation](https://docs.aws In order to sign requests to your Amazon Elasticsearch Service domain, SigV4 can be enabled in the Grafana [configuration]({{< relref "../administration/configuration.md#sigv4_auth_enabled" >}}). -Once AWS SigV4 is enabled, it can be configured on the Elasticsearch data source configuration page. Refer to [Cloudwatch authentication]({{< relref "../datasources/aws-cloudwatch/aws-authentication.md" >}}) for more information about authentication options. +Once AWS SigV4 is enabled, it can be configured on the Elasticsearch data source configuration page. Refer to [Cloudwatch authentication]({{< relref "aws-cloudwatch/aws-authentication.md" >}}) for more information about authentication options. {{< figure src="/static/img/docs/v73/elasticsearch-sigv4-config-editor.png" max-width="500px" class="docs-image--no-shadow" caption="SigV4 configuration for AWS Elasticsearch Service" >}} diff --git a/docs/sources/datasources/google-cloud-monitoring/preconfig-cloud-monitoring-dashboards.md b/docs/sources/datasources/google-cloud-monitoring/preconfig-cloud-monitoring-dashboards.md index c23a2be9a73..8222fbae20e 100644 --- a/docs/sources/datasources/google-cloud-monitoring/preconfig-cloud-monitoring-dashboards.md +++ b/docs/sources/datasources/google-cloud-monitoring/preconfig-cloud-monitoring-dashboards.md @@ -17,7 +17,7 @@ weight: 10 # Preconfigured Cloud Monitoring dashboards -Google Cloud Monitoring data source ships with pre-configured dashboards for some of the most popular GCP services. These curated dashboards are based on similar dashboards in the GCP dashboard samples repository. See also, [Using Google Cloud Monitoring in Grafana]({{< relref "./_index.md" >}}) for detailed instructions on how to add and configure the Google Cloud Monitoring data source. +Google Cloud Monitoring data source ships with pre-configured dashboards for some of the most popular GCP services. These curated dashboards are based on similar dashboards in the GCP dashboard samples repository. See also, [Using Google Cloud Monitoring in Grafana]({{< relref "_index.md" >}}) for detailed instructions on how to add and configure the Google Cloud Monitoring data source. ## Curated dashboards diff --git a/docs/sources/datasources/jaeger.md b/docs/sources/datasources/jaeger.md index f6a5518b58d..52ea81519cd 100644 --- a/docs/sources/datasources/jaeger.md +++ b/docs/sources/datasources/jaeger.md @@ -34,7 +34,7 @@ To access Jaeger settings, click the **Configuration** (gear) icon, then click * > **Note:** This feature is available in Grafana 7.4+. -This is a configuration for the [trace to logs feature]({{< relref "../explore/trace-integration" >}}). Select target data source (at this moment limited to Loki and Splunk \[logs\] data sources) and select which tags will be used in the logs query. +This is a configuration for the [trace to logs feature]({{< relref "../explore/trace-integration/" >}}). Select target data source (at this moment limited to Loki and Splunk \[logs\] data sources) and select which tags will be used in the logs query. - **Data source -** Target data source. - **Tags -** The tags that will be used in the logs query. Default is `'cluster', 'hostname', 'namespace', 'pod'`. diff --git a/docs/sources/datasources/loki.md b/docs/sources/datasources/loki.md index 7c2f7fbea70..94bdc1b7994 100644 --- a/docs/sources/datasources/loki.md +++ b/docs/sources/datasources/loki.md @@ -16,7 +16,7 @@ weight: 800 Grafana ships with built-in support for Loki, an open source log aggregation system by Grafana Labs. This topic explains options, variables, querying, and other options specific to this data source. -Add it as a data source and you are ready to build dashboards or query your log data in [Explore]({{< relref "../explore" >}}). Refer to [Add a data source]({{< relref "add-a-data-source.md" >}}) for instructions on how to add a data source to Grafana. Only users with the organization admin role can add data sources. +Add it as a data source and you are ready to build dashboards or query your log data in [Explore]({{< relref "../explore/" >}}). Refer to [Add a data source]({{< relref "add-a-data-source.md" >}}) for instructions on how to add a data source to Grafana. Only users with the organization admin role can add data sources. ## Hosted Loki @@ -138,7 +138,7 @@ There are two types of LogQL queries: ### Log queries -Loki log queries return the contents of the log lines. Querying and displaying log data from Loki is available via [Explore]({{< relref "../explore" >}}), and with the [logs panel]({{< relref "../visualizations/logs-panel.md" >}}) in dashboards. Select the Loki data source, and then enter a LogQL query to display your logs.F or more information about log queries and LogQL, refer to the [Loki log queries documentation](https://grafana.com/docs/loki/latest/logql/log_queries/) +Loki log queries return the contents of the log lines. Querying and displaying log data from Loki is available via [Explore]({{< relref "../explore/" >}}), and with the [logs panel]({{< relref "../visualizations/logs-panel.md" >}}) in dashboards. Select the Loki data source, and then enter a LogQL query to display your logs.F or more information about log queries and LogQL, refer to the [Loki log queries documentation](https://grafana.com/docs/loki/latest/logql/log_queries/) #### Log context @@ -222,7 +222,7 @@ You can use some global built-in variables in query variables; `$__interval`, `$ ## Annotations -You can use any non-metric Loki query as a source for [annotations]({{< relref "../dashboards/annotations" >}}). Log content will be used as annotation text and your log stream labels as tags, so there is no need for additional mapping. +You can use any non-metric Loki query as a source for [annotations]({{< relref "../dashboards/annotations/" >}}). Log content will be used as annotation text and your log stream labels as tags, so there is no need for additional mapping. ## Configure the data source with provisioning @@ -255,7 +255,6 @@ datasources: url: http://localhost:3100 basicAuth: true basicAuthUser: my_user - basicAuthPassword: test_password jsonData: maxLines: 1000 derivedFields: @@ -272,6 +271,8 @@ datasources: - matcherRegex: "traceID=(\\w+)" name: TraceID url: 'http://localhost:16686/trace/$${__value.raw}' + secureJsonData: + basicAuthPassword: test_password ``` Here's an example of a Jaeger data source corresponding to the above example. Note that the Jaeger `uid` value does match the Loki `datasourceUid` value. diff --git a/docs/sources/datasources/tempo.md b/docs/sources/datasources/tempo.md index 6ca483d28a3..8aebdfeaf4d 100644 --- a/docs/sources/datasources/tempo.md +++ b/docs/sources/datasources/tempo.md @@ -34,7 +34,7 @@ To access Tempo settings, click the **Configuration** (gear) icon, then click ** > **Note:** This feature is available in Grafana 7.4+. -This is a configuration for the [trace to logs feature]({{< relref "../explore/trace-integration" >}}). Select target data source (at this moment limited to Loki or Splunk \[logs\] data sources) and select which tags will be used in the logs query. +This is a configuration for the [trace to logs feature]({{< relref "../explore/trace-integration/" >}}). Select target data source (at this moment limited to Loki or Splunk \[logs\] data sources) and select which tags will be used in the logs query. - **Data source -** Target data source. - **Tags -** The tags that will be used in the logs query. Default is `'cluster', 'hostname', 'namespace', 'pod'`. diff --git a/docs/sources/datasources/zipkin.md b/docs/sources/datasources/zipkin.md index e07d659848b..695284cef80 100644 --- a/docs/sources/datasources/zipkin.md +++ b/docs/sources/datasources/zipkin.md @@ -14,7 +14,7 @@ weight: 1600 # Zipkin data source Grafana ships with built-in support for Zipkin, an open source, distributed tracing system. -Just add it as a data source and you are ready to query your traces in [Explore]({{< relref "../explore" >}}). +Just add it as a data source and you are ready to query your traces in [Explore]({{< relref "../explore/" >}}). ## Adding the data source @@ -33,7 +33,7 @@ To access Zipkin settings, click the **Configuration** (gear) icon, then click * > **Note:** This feature is available in Grafana 7.4+. -This is a configuration for the [trace to logs feature]({{< relref "../explore/trace-integration" >}}). Select target data source (at this moment limited to Loki or Splunk \[logs\] data sources) and select which tags will be used in the logs query. +This is a configuration for the [trace to logs feature]({{< relref "../explore/trace-integration/" >}}). Select target data source (at this moment limited to Loki or Splunk \[logs\] data sources) and select which tags will be used in the logs query. - **Data source -** Target data source. - **Tags -** The tags that will be used in the logs query. Default is `'cluster', 'hostname', 'namespace', 'pod'`. @@ -66,7 +66,7 @@ This is a configuration for the beta Node Graph visualization. The Node Graph is ## Query traces -Querying and displaying traces from Zipkin is available via [Explore]({{< relref "../explore" >}}). +Querying and displaying traces from Zipkin is available via [Explore]({{< relref "../explore/" >}}). {{< figure src="/static/img/docs/v70/zipkin-query-editor.png" class="docs-image--no-shadow" caption="Screenshot of the Zipkin query editor" >}} @@ -116,4 +116,4 @@ Here is an example JSON: ## Linking Trace ID from logs -You can link to Zipkin trace from logs in Loki or Splunk by configuring a derived field with internal link. See [Loki documentation]({{< relref "loki#derived-fields" >}}) for details. +You can link to Zipkin trace from logs in Loki or Splunk by configuring a derived field with internal link. See [Loki documentation]({{< relref "loki/#derived-fields" >}}) for details. diff --git a/docs/sources/developers/http_api/access_control.md b/docs/sources/developers/http_api/access_control.md index b523a59ceba..fa92323ad2c 100644 --- a/docs/sources/developers/http_api/access_control.md +++ b/docs/sources/developers/http_api/access_control.md @@ -17,7 +17,7 @@ title: RBAC HTTP API # RBAC API -> Role-based access control API is only available in Grafana Enterprise. Read more about [Grafana Enterprise]({{< relref "../../enterprise" >}}). +> Role-based access control API is only available in Grafana Enterprise. Read more about [Grafana Enterprise]({{< relref "../../enterprise/" >}}). The API can be used to create, update, delete, get, and list roles. @@ -79,7 +79,7 @@ Query Parameters: | Action | Scope | | ---------- | -------- | -| roles:list | roles:\* | +| roles:read | roles:\* | #### Example request @@ -180,13 +180,13 @@ Content-Type: application/json; charset=UTF-8 "created": "2021-11-19T10:48:00+01:00" }, { - "action": "reports.admin:create", + "action": "reports:create", "scope": "", "updated": "2021-11-19T10:48:00+01:00", "created": "2021-11-19T10:48:00+01:00" }, { - "action": "reports.admin:write", + "action": "reports:write", "scope": "reports:*", "updated": "2021-11-19T10:48:00+01:00", "created": "2021-11-19T10:48:00+01:00" @@ -222,7 +222,7 @@ Content-Type: application/json; charset=UTF-8 `POST /api/access-control/roles` -Creates a new custom role and maps given permissions to that role. Note that roles with the same prefix as [Fixed roles]({{< relref "../../enterprise/access-control/about-rbac#fixed-roles" >}}) can't be created. +Creates a new custom role and maps given permissions to that role. Note that roles with the same prefix as [Fixed roles]({{< relref "../../enterprise/access-control/about-rbac/#fixed-roles" >}}) can't be created. #### Required permissions @@ -260,24 +260,24 @@ Content-Type: application/json #### JSON body schema -| Field Name | Date Type | Required | Description | -| ----------- | ---------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| uid | string | No | UID of the role. If not present, the UID will be automatically created for you and returned in response. Refer to the [Custom roles]({{< relref "../../enterprise/access-control/about-rbac#custom-roles" >}}) for more information. | -| global | boolean | No | A flag indicating if the role is global or not. If set to `false`, the default org ID of the authenticated user will be used from the request. | -| version | number | No | Version of the role. If not present, version 0 will be assigned to the role and returned in the response. Refer to the [Custom roles]({{< relref "../../enterprise/access-control/about-rbac#custom-roles" >}}) for more information. | -| name | string | Yes | Name of the role. Refer to [Custom roles]({{< relref "../../enterprise/access-control/about-rbac#custom-roles" >}}) for more information. | -| description | string | No | Description of the role. | -| displayName | string | No | Display name of the role, visible in the UI. | -| group | string | No | The group name the role belongs to. | -| hidden | boolean | No | Specify whether the role is hidden or not. If set to `true`, then the role does not show in the role picker. It will not be listed by API endpoints unless explicitly specified. | -| permissions | Permission | No | If not present, the role will be created without any permissions. | +| Field Name | Date Type | Required | Description | +| ----------- | ---------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| uid | string | No | UID of the role. If not present, the UID will be automatically created for you and returned in response. Refer to the [Custom roles]({{< relref "../../enterprise/access-control/about-rbac/#custom-roles" >}}) for more information. | +| global | boolean | No | A flag indicating if the role is global or not. If set to `false`, the default org ID of the authenticated user will be used from the request. | +| version | number | No | Version of the role. If not present, version 0 will be assigned to the role and returned in the response. Refer to the [Custom roles]({{< relref "../../enterprise/access-control/about-rbac/#custom-roles" >}}) for more information. | +| name | string | Yes | Name of the role. Refer to [Custom roles]({{< relref "../../enterprise/access-control/about-rbac/#custom-roles" >}}) for more information. | +| description | string | No | Description of the role. | +| displayName | string | No | Display name of the role, visible in the UI. | +| group | string | No | The group name the role belongs to. | +| hidden | boolean | No | Specify whether the role is hidden or not. If set to `true`, then the role does not show in the role picker. It will not be listed by API endpoints unless explicitly specified. | +| permissions | Permission | No | If not present, the role will be created without any permissions. | **Permission** -| Field Name | Data Type | Required | Description | -| ---------- | --------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| action | string | Yes | Refer to [Custom role actions and scopes]({{< relref "../../enterprise/access-control/custom-role-actions-scopes" >}}) for full list of available actions. | -| scope | string | No | If not present, no scope will be mapped to the permission. Refer to [[Custom role actions and scopes]({{< relref "../../enterprise/access-control/custom-role-actions-scopes" >}}) for full list of available scopes. | +| Field Name | Data Type | Required | Description | +| ---------- | --------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| action | string | Yes | Refer to [Custom role actions and scopes]({{< relref "../../enterprise/access-control/custom-role-actions-scopes/" >}}) for full list of available actions. | +| scope | string | No | If not present, no scope will be mapped to the permission. Refer to [[Custom role actions and scopes]({{< relref "../../enterprise/access-control/custom-role-actions-scopes/" >}}) for full list of available scopes. | #### Example response @@ -375,10 +375,10 @@ Content-Type: application/json **Permission** -| Field Name | Data Type | Required | Description | -| ---------- | --------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| action | string | Yes | Refer to [Custom role actions and scopes]({{< relref "../../enterprise/access-control/custom-role-actions-scopes" >}}) for full list of available actions. | -| scope | string | No | If not present, no scope will be mapped to the permission. Refer to [Custom role actions and scopes]({{< relref "../../enterprise/access-control/custom-role-actions-scopes" >}}) for full list of available scopes. | +| Field Name | Data Type | Required | Description | +| ---------- | --------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| action | string | Yes | Refer to [Custom role actions and scopes]({{< relref "../../enterprise/access-control/custom-role-actions-scopes/" >}}) for full list of available actions. | +| scope | string | No | If not present, no scope will be mapped to the permission. Refer to [Custom role actions and scopes]({{< relref "../../enterprise/access-control/custom-role-actions-scopes/" >}}) for full list of available scopes. | #### Example response @@ -448,10 +448,10 @@ Accept: application/json #### Query parameters -| Param | Type | Required | Description | -| ------ | ------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| force | boolean | No | When set to `true`, the role will be deleted with all it's assignments. | -| global | boolean | No | A flag indicating if the role is global or not. If set to false, the default org ID of the authenticated user will be used from the request. Refer to the [About RBAC]({{< relref "../../enterprise/access-control/about-rbac" >}}) for more information. | +| Param | Type | Required | Description | +| ------ | ------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| force | boolean | No | When set to `true`, the role will be deleted with all it's assignments. | +| global | boolean | No | A flag indicating if the role is global or not. If set to false, the default org ID of the authenticated user will be used from the request. Refer to the [About RBAC]({{< relref "../../enterprise/access-control/about-rbac/" >}}) for more information. | #### Example response @@ -489,7 +489,7 @@ Query Parameters: | Action | Scope | | ---------------- | -------------------- | -| users.roles:list | users:id:`` | +| users.roles:read | users:id:`` | #### Example request @@ -537,7 +537,7 @@ Lists the permissions that a given user has. | Action | Scope | | ---------------------- | -------------------- | -| users.permissions:list | users:id:`` | +| users.permissions:read | users:id:`` | #### Example request @@ -763,7 +763,7 @@ Query Parameters: | Action | Scope | | ---------------- | -------------------- | -| teams.roles:list | teams:id:`` | +| teams.roles:read | teams:id:`` | #### Example request diff --git a/docs/sources/developers/http_api/admin.md b/docs/sources/developers/http_api/admin.md index 412db306a79..65d977afdeb 100644 --- a/docs/sources/developers/http_api/admin.md +++ b/docs/sources/developers/http_api/admin.md @@ -18,7 +18,7 @@ The Admin HTTP API does not currently work with an API Token. API Tokens are cur the permission of server admin, only users can be given that permission. So in order to use these API calls you will have to use Basic Auth and the Grafana user must have the Grafana Admin permission. (The default admin user is called `admin` and has permission to use this API.) -> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../enterprise/access-control/custom-role-actions-scopes" >}}) for more information. +> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../enterprise/access-control/custom-role-actions-scopes/" >}}) for more information. ## Fetch settings @@ -380,9 +380,9 @@ Change password for a specific user. See note in the [introduction]({{< ref "#admin-api" >}}) for an explanation. -| Action | Scope | -| --------------------- | --------------- | -| users.password:update | global.users:\* | +| Action | Scope | +| -------------------- | --------------- | +| users.password:write | global.users:\* | **Example Request**: @@ -413,9 +413,9 @@ Only works with Basic Authentication (username and password). See [introduction] See note in the [introduction]({{< ref "#admin-api" >}}) for an explanation. -| Action | Scope | -| ------------------------ | --------------- | -| users.permissions:update | global.users:\* | +| Action | Scope | +| ----------------------- | --------------- | +| users.permissions:write | global.users:\* | **Example Request**: @@ -516,7 +516,7 @@ See note in the [introduction]({{< ref "#admin-api" >}}) for an explanation. | Action | Scope | | -------------------- | --------------- | -| users.authtoken:list | global.users:\* | +| users.authtoken:read | global.users:\* | **Example Request**: @@ -573,9 +573,9 @@ Only works with Basic Authentication (username and password). See [introduction] See note in the [introduction]({{< ref "#admin-api" >}}) for an explanation. -| Action | Scope | -| ---------------------- | --------------- | -| users.authtoken:update | global.users:\* | +| Action | Scope | +| --------------------- | --------------- | +| users.authtoken:write | global.users:\* | **Example Request**: diff --git a/docs/sources/developers/http_api/annotations.md b/docs/sources/developers/http_api/annotations.md index 7e6709140bd..251156ca36d 100644 --- a/docs/sources/developers/http_api/annotations.md +++ b/docs/sources/developers/http_api/annotations.md @@ -18,7 +18,7 @@ title: 'Annotations HTTP API ' This is the API documentation for the new Grafana Annotations feature released in Grafana 4.6. Annotations are saved in the Grafana database (sqlite, mysql or postgres). Annotations can be organization annotations that can be shown on any dashboard by configuring an annotation data source - they are filtered by tags. Or they can be tied to a panel on a dashboard and are then only shown on that panel. -> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../enterprise/access-control/custom-role-actions-scopes" >}}) for more information. +> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../enterprise/access-control/custom-role-actions-scopes/" >}}) for more information. ## Find Annotations diff --git a/docs/sources/developers/http_api/auth.md b/docs/sources/developers/http_api/auth.md index 6cec6f4949c..1783e53f6e5 100644 --- a/docs/sources/developers/http_api/auth.md +++ b/docs/sources/developers/http_api/auth.md @@ -15,7 +15,7 @@ title: 'Authentication HTTP API ' # Authentication API -> If you are running Grafana Enterprise, for some endpoints you would need to have relevant permissions. Refer to [Role-based access control permissions]({{< relref "../../enterprise/access-control/custom-role-actions-scopes" >}}) for more information. +> If you are running Grafana Enterprise, for some endpoints you would need to have relevant permissions. Refer to [Role-based access control permissions]({{< relref "../../enterprise/access-control/custom-role-actions-scopes/" >}}) for more information. ## Tokens diff --git a/docs/sources/developers/http_api/curl-examples.md b/docs/sources/developers/http_api/curl-examples.md index f8f7be5c2fc..8b600ff74bd 100644 --- a/docs/sources/developers/http_api/curl-examples.md +++ b/docs/sources/developers/http_api/curl-examples.md @@ -22,7 +22,7 @@ The most basic example for a dashboard for which there is no authentication. You curl http://localhost:3000/api/search ``` -Here’s a cURL command that works for getting the home dashboard when you are running Grafana locally with [basic authentication]({{< relref "../../auth#basic-auth" >}}) enabled using the default admin credentials: +Here’s a cURL command that works for getting the home dashboard when you are running Grafana locally with [basic authentication]({{< relref "../../auth/#basic-auth" >}}) enabled using the default admin credentials: ``` curl http://admin:admin@localhost:3000/api/search diff --git a/docs/sources/developers/http_api/dashboard.md b/docs/sources/developers/http_api/dashboard.md index 1ff52ba193c..05b45769ace 100644 --- a/docs/sources/developers/http_api/dashboard.md +++ b/docs/sources/developers/http_api/dashboard.md @@ -14,7 +14,7 @@ title: 'Dashboard HTTP API ' # Dashboard API -> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../enterprise/access-control/custom-role-actions-scopes" >}}) for more information. +> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../enterprise/access-control/custom-role-actions-scopes/" >}}) for more information. ## Identifier (id) vs unique identifier (uid) diff --git a/docs/sources/developers/http_api/dashboard_permissions.md b/docs/sources/developers/http_api/dashboard_permissions.md index a04d70b8cde..e111a66d29c 100644 --- a/docs/sources/developers/http_api/dashboard_permissions.md +++ b/docs/sources/developers/http_api/dashboard_permissions.md @@ -28,7 +28,7 @@ The permission levels for the permission field: - 2 = Edit - 4 = Admin -> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../enterprise/access-control/custom-role-actions-scopes" >}}) for more information. +> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../enterprise/access-control/custom-role-actions-scopes/" >}}) for more information. ## Get permissions for a dashboard diff --git a/docs/sources/developers/http_api/data_source.md b/docs/sources/developers/http_api/data_source.md index 6630998829c..8f4a9da2147 100644 --- a/docs/sources/developers/http_api/data_source.md +++ b/docs/sources/developers/http_api/data_source.md @@ -15,7 +15,7 @@ title: 'Data source HTTP API ' # Data source API -> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../enterprise/access-control/custom-role-actions-scopes" >}}) for more information. +> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../enterprise/access-control/custom-role-actions-scopes/" >}}) for more information. ## Get all data sources @@ -960,117 +960,3 @@ In addition, specific properties of each data source should be added in a reques | 403 | Access denied. | | 404 | Either the data source or plugin required to fulfil the request could not be found. | | 500 | Unexpected error. Refer to the body and/or server logs for more details. | - -## Deprecated resources - -The following resources have been deprecated. They will be removed in a future release. - -### Query a data source by id - -> **Warning:** This API is deprecated since Grafana v8.5.0 and will be removed in a future release. Refer to the [new data source query API](#query-a-data-source). - -Queries a data source having a backend implementation. - -`POST /api/tsdb/query` - -> **Note:** Grafana's built-in data sources usually have a backend implementation. - -**Example Request**: - -```http -POST /api/tsdb/query HTTP/1.1 -Accept: application/json -Content-Type: application/json - -{ - "from": "1420066800000", - "to": "1575845999999", - "queries": [ - { - "refId": "A", - "intervalMs": 86400000, - "maxDataPoints": 1092, - "datasourceId": 86, - "rawSql": "SELECT 1 as valueOne, 2 as valueTwo", - "format": "table" - } - ] -} -``` - -JSON Body schema: - -- **from/to** – Specifies the time range for the queries. The time can be either epoch timestamps in milliseconds or relative using Grafana time units. For example, `now-5m`. -- **queries.refId** – Specifies an identifier of the query. Defaults to "A". -- **queries.format** – Specifies the format the data should be returned in. Valid options are `time_series` or `table` depending on the data source. -- **queries.datasourceId** – Specifies the data source to be queried. Each `query` in the request must have a unique `datasourceId`. -- **queries.maxDataPoints** - Species the maximum amount of data points that a dashboard panel can render. Defaults to 100. -- **queries.intervalMs** - Specifies the time series time interval in milliseconds. Defaults to 1000. - -In addition, specific properties of each data source should be added in a request. To better understand how to form a query for a certain data source, use the Developer Tools in your browser of choice and inspect the HTTP requests being made to `/api/tsdb/query`. - -**Example request for the MySQL data source:** - -```http -POST /api/tsdb/query HTTP/1.1 -Accept: application/json -Content-Type: application/json - -{ - "from": "1420066800000", - "to": "1575845999999", - "queries": [ - { - "refId": "A", - "intervalMs": 86400000, - "maxDataPoints": 1092, - "datasourceId": 86, - "rawSql": "SELECT\n time,\n sum(opened) AS \"Opened\",\n sum(closed) AS \"Closed\"\nFROM\n issues_activity\nWHERE\n $__unixEpochFilter(time) AND\n period = 'm' AND\n repo IN('grafana/grafana') AND\n opened_by IN('Contributor','Grafana Labs')\nGROUP BY 1\nORDER BY 1\n", - "format": "time_series" - } - ] -} -``` - -**Example MySQL time series query response:** - -```http -HTTP/1.1 200 -Content-Type: application/json - -{ - "results": { - "A": { - "refId": "A", - "meta": { - "rowCount": 0, - "sql": "SELECT\n time,\n sum(opened) AS \"Opened\",\n sum(closed) AS \"Closed\"\nFROM\n issues_activity\nWHERE\n time >= 1420066800 AND time <= 1575845999 AND\n period = 'm' AND\n repo IN('grafana/grafana') AND\n opened_by IN('Contributor','Grafana Labs')\nGROUP BY 1\nORDER BY 1\n" - }, - "series": [ - { - "name": "Opened", - "points": [ - [ - 109, - 1420070400000 - ], - [ - 122, - 1422748800000 - ] - ] - }, - { - "name": "Closed", - "points": [ - [ - 89, - 1420070400000 - ] - ] - } - ] - } - } -} -``` diff --git a/docs/sources/developers/http_api/datasource_permissions.md b/docs/sources/developers/http_api/datasource_permissions.md index 15bbb406e95..e2b4128b1b2 100644 --- a/docs/sources/developers/http_api/datasource_permissions.md +++ b/docs/sources/developers/http_api/datasource_permissions.md @@ -19,9 +19,9 @@ title: 'Datasource Permissions HTTP API ' # Data Source Permissions API -> The Data Source Permissions is only available in Grafana Enterprise. Read more about [Grafana Enterprise]({{< relref "../../enterprise" >}}). +> The Data Source Permissions is only available in Grafana Enterprise. Read more about [Grafana Enterprise]({{< relref "../../enterprise/" >}}). -> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../enterprise/access-control/custom-role-actions-scopes" >}}) for more information. +> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../enterprise/access-control/custom-role-actions-scopes/" >}}) for more information. This API can be used to enable, disable, list, add and remove permissions for a data source. diff --git a/docs/sources/developers/http_api/external_group_sync.md b/docs/sources/developers/http_api/external_group_sync.md index 681b894d5e5..34225e0d0f2 100644 --- a/docs/sources/developers/http_api/external_group_sync.md +++ b/docs/sources/developers/http_api/external_group_sync.md @@ -18,9 +18,9 @@ title: 'External Group Sync HTTP API ' # External Group Synchronization API -> External Group Synchronization is only available in Grafana Enterprise. Read more about [Grafana Enterprise]({{< relref "../../enterprise" >}}). +> External Group Synchronization is only available in Grafana Enterprise. Read more about [Grafana Enterprise]({{< relref "../../enterprise/" >}}). -> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../enterprise/access-control/custom-role-actions-scopes" >}}) for more information. +> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../enterprise/access-control/custom-role-actions-scopes/" >}}) for more information. ## Get External Groups diff --git a/docs/sources/developers/http_api/folder.md b/docs/sources/developers/http_api/folder.md index 845c47f6249..98c737c6ed5 100644 --- a/docs/sources/developers/http_api/folder.md +++ b/docs/sources/developers/http_api/folder.md @@ -14,7 +14,7 @@ title: 'Folder HTTP API ' # Folder API -> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../enterprise/access-control/custom-role-actions-scopes" >}}) for more information. +> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../enterprise/access-control/custom-role-actions-scopes/" >}}) for more information. ## Identifier (id) vs unique identifier (uid) diff --git a/docs/sources/developers/http_api/folder_dashboard_search.md b/docs/sources/developers/http_api/folder_dashboard_search.md index f0f1da0d848..85ff060589f 100644 --- a/docs/sources/developers/http_api/folder_dashboard_search.md +++ b/docs/sources/developers/http_api/folder_dashboard_search.md @@ -20,7 +20,7 @@ title: 'Folder/Dashboard Search HTTP API ' `GET /api/search/` -> Note: When using [Role-based access control]({{< relref "../../enterprise/access-control" >}}), search results will contain only dashboards and folders which you have access to. +> Note: When using [Role-based access control]({{< relref "../../enterprise/access-control/" >}}), search results will contain only dashboards and folders which you have access to. Query parameters: diff --git a/docs/sources/developers/http_api/folder_permissions.md b/docs/sources/developers/http_api/folder_permissions.md index b3bff5feccd..e5989981921 100644 --- a/docs/sources/developers/http_api/folder_permissions.md +++ b/docs/sources/developers/http_api/folder_permissions.md @@ -28,7 +28,7 @@ The permission levels for the permission field: - 2 = Edit - 4 = Admin -> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../enterprise/access-control/custom-role-actions-scopes" >}}) for more information. +> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../enterprise/access-control/custom-role-actions-scopes/" >}}) for more information. ## Get permissions for a folder diff --git a/docs/sources/developers/http_api/licensing.md b/docs/sources/developers/http_api/licensing.md index 923cd1c5104..9a61e645564 100644 --- a/docs/sources/developers/http_api/licensing.md +++ b/docs/sources/developers/http_api/licensing.md @@ -15,9 +15,9 @@ title: 'Licensing HTTP API ' # Enterprise License API -Licensing is only available in Grafana Enterprise. Read more about [Grafana Enterprise]({{< relref "../../enterprise" >}}). +Licensing is only available in Grafana Enterprise. Read more about [Grafana Enterprise]({{< relref "../../enterprise/" >}}). -> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../enterprise/access-control/custom-role-actions-scopes" >}}) for more information. +> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../enterprise/access-control/custom-role-actions-scopes/" >}}) for more information. ## Check license availability @@ -71,9 +71,9 @@ Manually ask license issuer for a new token. See note in the [introduction]({{< ref "#enterprise-license-api" >}}) for an explanation. -| Action | Scope | -| ---------------- | ----- | -| licensing:update | n/a | +| Action | Scope | +| --------------- | ----- | +| licensing:write | n/a | ### Examples diff --git a/docs/sources/developers/http_api/org.md b/docs/sources/developers/http_api/org.md index b395874221c..26f0fdff4d4 100644 --- a/docs/sources/developers/http_api/org.md +++ b/docs/sources/developers/http_api/org.md @@ -19,7 +19,7 @@ The Organization HTTP API is divided in two resources, `/api/org` (current organ and `/api/orgs` (admin organizations). One big difference between these are that the admin of all organizations API only works with basic authentication, see [Admin Organizations API](#admin-organizations-api) for more information. -> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../enterprise/access-control/custom-role-actions-scopes" >}}) for more information. +> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../enterprise/access-control/custom-role-actions-scopes/" >}}) for more information. ## Current Organization API @@ -149,9 +149,9 @@ Content-Type: application/json See note in the [introduction]({{< ref "#organization-api" >}}) for an explanation. -| Action | Scope | -| --------------------- | -------- | -| org.users.role:update | users:\* | +| Action | Scope | +| --------------- | -------- | +| org.users:write | users:\* | **Example Request**: @@ -605,9 +605,9 @@ Only works with Basic Authentication (username and password), see [introduction] See note in the [introduction]({{< ref "#organization-api" >}}) for an explanation. -| Action | Scope | -| --------------------- | -------- | -| org.users.role:update | users:\* | +| Action | Scope | +| --------------- | -------- | +| org.users:write | users:\* | **Example Request**: diff --git a/docs/sources/developers/http_api/reporting.md b/docs/sources/developers/http_api/reporting.md index 0c53c5a495b..9f0750b1bf5 100644 --- a/docs/sources/developers/http_api/reporting.md +++ b/docs/sources/developers/http_api/reporting.md @@ -15,9 +15,9 @@ title: Reporting API This API allows you to interact programmatically with the [Reporting]({{< relref "../../enterprise/reporting.md" >}}) feature. -> Reporting is only available in Grafana Enterprise. Read more about [Grafana Enterprise]({{< relref "../../enterprise" >}}). +> Reporting is only available in Grafana Enterprise. Read more about [Grafana Enterprise]({{< relref "../../enterprise/" >}}). -> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../enterprise/access-control/custom-role-actions-scopes" >}}) for more information. +> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../enterprise/access-control/custom-role-actions-scopes/" >}}) for more information. ## Send a report diff --git a/docs/sources/developers/http_api/serviceaccount.md b/docs/sources/developers/http_api/serviceaccount.md index 017296891e3..0e12e8e285e 100644 --- a/docs/sources/developers/http_api/serviceaccount.md +++ b/docs/sources/developers/http_api/serviceaccount.md @@ -14,7 +14,7 @@ title: 'Service account HTTP API ' # Service account API -> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../enterprise/access-control/custom-role-actions-scopes" >}}) for more information. +> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../enterprise/access-control/custom-role-actions-scopes/" >}}) for more information. ## Search service accounts with Paging diff --git a/docs/sources/developers/http_api/team.md b/docs/sources/developers/http_api/team.md index 9e0eb7d7654..8b6aebb6bc2 100644 --- a/docs/sources/developers/http_api/team.md +++ b/docs/sources/developers/http_api/team.md @@ -25,7 +25,7 @@ Access to these API endpoints is restricted as follows: - If you enable `editors_can_admin` configuration flag, then Organization Editors can create teams and manage teams where they are Admin. - If you enable `editors_can_admin` configuration flag, Editors can find out whether a team that they are not members of exists by trying to create a team with the same name. -> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../enterprise/access-control/custom-role-actions-scopes" >}}) for more information. +> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../enterprise/access-control/custom-role-actions-scopes/" >}}) for more information. ## Team Search With Paging diff --git a/docs/sources/developers/http_api/user.md b/docs/sources/developers/http_api/user.md index 3e7ccedfa4a..5d8e64488ae 100644 --- a/docs/sources/developers/http_api/user.md +++ b/docs/sources/developers/http_api/user.md @@ -14,7 +14,7 @@ title: 'User HTTP API ' # User API -> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../enterprise/access-control/custom-role-actions-scopes" >}}) for more information. +> If you are running Grafana Enterprise, for some endpoints you'll need to have specific permissions. Refer to [Role-based access control permissions]({{< relref "../../enterprise/access-control/custom-role-actions-scopes/" >}}) for more information. ## Search Users @@ -140,9 +140,9 @@ Content-Type: application/json See note in the [introduction]({{< ref "#user-api" >}}) for an explanation. -| Action | Scope | -| ---------- | -------- | -| users:read | users:\* | +| Action | Scope | +| ---------- | --------------- | +| users:read | global.users:\* | **Example Request**: @@ -241,9 +241,9 @@ Content-Type: application/json See note in the [introduction]({{< ref "#user-api" >}}) for an explanation. -| Action | Scope | -| ----------- | -------- | -| users:write | users:\* | +| Action | Scope | +| ----------- | --------------- | +| users:write | global.users:\* | **Example Request**: @@ -280,9 +280,9 @@ Content-Type: application/json See note in the [introduction]({{< ref "#user-api" >}}) for an explanation. -| Action | Scope | -| ---------- | -------- | -| users:read | users:\* | +| Action | Scope | +| ---------- | --------------- | +| users:read | global.users:\* | **Example Request**: @@ -318,9 +318,10 @@ Content-Type: application/json See note in the [introduction]({{< ref "#user-api" >}}) for an explanation. -| Action | Scope | -| ---------------- | -------- | -| users.teams:read | users:\* | +| Action | Scope | +| ---------- | --------------- | +| users:read | global.users:\* | +| teams:read | teams:\* | **Example Request**: diff --git a/docs/sources/developers/plugins/_index.md b/docs/sources/developers/plugins/_index.md index abfabf73b15..e66992f6477 100644 --- a/docs/sources/developers/plugins/_index.md +++ b/docs/sources/developers/plugins/_index.md @@ -24,8 +24,8 @@ npx @grafana/toolkit plugin:create my-grafana-plugin If you want a more guided introduction to plugin development, check out our tutorials: -- [Build a panel plugin]({{< relref "/tutorials/build-a-panel-plugin.md" >}}) -- [Build a data source plugin]({{< relref "/tutorials/build-a-data-source-plugin.md" >}}) +- [Build a panel plugin]({{< relref "tutorials/build-a-panel-plugin.md" >}}) +- [Build a data source plugin]({{< relref "tutorials/build-a-data-source-plugin.md" >}}) ## Go further @@ -35,19 +35,19 @@ Learn more about specific areas of plugin development. If you're looking to build your first plugin, check out these introductory tutorials: -- [Build a panel plugin]({{< relref "/tutorials/build-a-panel-plugin.md" >}}) -- [Build a data source plugin]({{< relref "/tutorials/build-a-data-source-plugin.md" >}}) -- [Build a data source backend plugin]({{< relref "/tutorials/build-a-data-source-backend-plugin.md" >}}) +- [Build a panel plugin]({{< relref "tutorials/build-a-panel-plugin.md" >}}) +- [Build a data source plugin]({{< relref "tutorials/build-a-data-source-plugin.md" >}}) +- [Build a data source backend plugin]({{< relref "tutorials/build-a-data-source-backend-plugin.md" >}}) Ready to learn more? Check out our other tutorials: -- [Build a panel plugin with D3.js]({{< relref "/tutorials/build-a-panel-plugin-with-d3.md" >}}) +- [Build a panel plugin with D3.js]({{< relref "tutorials/build-a-panel-plugin-with-d3.md" >}}) ### Guides Improve an existing plugin with one of our guides: -- [Add authentication for data source plugins]({{< relref "add-authentication-for-data-source-plugins" >}}) +- [Add authentication for data source plugins]({{< relref "add-authentication-for-data-source-plugins/" >}}) - [Add support for annotations]({{< relref "add-support-for-annotations.md" >}}) - [Add support for Explore queries]({{< relref "add-support-for-explore-queries.md" >}}) - [Add support for variables]({{< relref "add-support-for-variables.md" >}}) @@ -88,4 +88,4 @@ Learn more about Grafana options and packages. #### Go -- [Grafana Plugin SDK for Go]({{< relref "backend/grafana-plugin-sdk-for-go" >}}) +- [Grafana Plugin SDK for Go]({{< relref "backend/grafana-plugin-sdk-for-go/" >}}) diff --git a/docs/sources/developers/plugins/add-authentication-for-data-source-plugins.md b/docs/sources/developers/plugins/add-authentication-for-data-source-plugins.md index a92566fb965..a0a33d47341 100644 --- a/docs/sources/developers/plugins/add-authentication-for-data-source-plugins.md +++ b/docs/sources/developers/plugins/add-authentication-for-data-source-plugins.md @@ -268,7 +268,7 @@ While the data source proxy supports the most common authentication methods for - Proxy routes only support HTTP or HTTPS - Proxy routes don't support custom token authentication -If any of these limitations apply to your plugin, you need to add a [backend plugin]({{< relref "./backend/_index.md" >}}). Since backend plugins run on the server they can access decrypted secrets, which makes it easier to implement custom authentication methods. +If any of these limitations apply to your plugin, you need to add a [backend plugin]({{< relref "backend/_index.md" >}}). Since backend plugins run on the server they can access decrypted secrets, which makes it easier to implement custom authentication methods. The decrypted secrets are available from the `DecryptedSecureJSONData` field in the instance settings. @@ -293,6 +293,17 @@ To allow Grafana to pass the access token to the plugin, update the data source When configured, Grafana will pass the user's token to the plugin in an Authorization header, available on the `QueryDataRequest` object on the `QueryData` request in your backend data source. ```go +func (ds *dataSource) CheckHealth(ctx context.Context, req *backend.CheckHealthRequest) (*backend.CheckHealthResult, error) { + token := strings.Fields(req.Headers["Authorization"]) + var ( + tokenType = token[0] + accessToken = token[1] + ) + + // ... + return &backend.CheckHealthResult{Status: backend.HealthStatusOk}, nil +} + func (ds *dataSource) QueryData(ctx context.Context, req *backend.QueryDataRequest) (*backend.QueryDataResponse, error) { token := strings.Fields(req.Headers["Authorization"]) var ( @@ -309,6 +320,13 @@ func (ds *dataSource) QueryData(ctx context.Context, req *backend.QueryDataReque In addition, if the user's token includes an ID token, Grafana will pass the user's ID token to the plugin in an `X-ID-Token` header, available on the `QueryDataRequest` object on the `QueryData` request in your backend data source. ```go +func (ds *dataSource) CheckHealth(ctx context.Context, req *backend.CheckHealthRequest) (*backend.CheckHealthResult, error) { + idToken := req.Headers["X-ID-Token"] + + // ... + return &backend.CheckHealthResult{Status: backend.HealthStatusOk}, nil +} + func (ds *dataSource) QueryData(ctx context.Context, req *backend.QueryDataRequest) (*backend.QueryDataResponse, error) { idToken := req.Headers["X-ID-Token"] diff --git a/docs/sources/developers/plugins/add-support-for-annotations.md b/docs/sources/developers/plugins/add-support-for-annotations.md index 8355ae00fb3..1a6795f6ae9 100644 --- a/docs/sources/developers/plugins/add-support-for-annotations.md +++ b/docs/sources/developers/plugins/add-support-for-annotations.md @@ -8,7 +8,7 @@ title: Add support for annotations This guide explains how to add support for [annotations]({{< relref "../../dashboards/annotations.md" >}}) to an existing data source plugin. -This guide assumes that you're already familiar with how to [Build a data source plugin]({{< relref "/tutorials/build-a-data-source-plugin.md" >}}). +This guide assumes that you're already familiar with how to [Build a data source plugin]({{< relref "tutorials/build-a-data-source-plugin.md" >}}). > **Note:** Annotation support for React plugins was released in Grafana 7.2. To support earlier versions, refer to the [Add support for annotation for Grafana 7.1](https://grafana.com/docs/grafana/v7.1/developers/plugins/add-support-for-annotations/). diff --git a/docs/sources/developers/plugins/add-support-for-explore-queries.md b/docs/sources/developers/plugins/add-support-for-explore-queries.md index 224cff98120..6eb58df963e 100644 --- a/docs/sources/developers/plugins/add-support-for-explore-queries.md +++ b/docs/sources/developers/plugins/add-support-for-explore-queries.md @@ -8,7 +8,7 @@ title: Add support for Explore queries This guide explains how to improve support for [Explore]({{< relref "../../explore/_index.md" >}}) in an existing data source plugin. -This guide assumes that you're already familiar with how to [Build a data source plugin]({{< relref "/tutorials/build-a-data-source-plugin.md" >}}). +This guide assumes that you're already familiar with how to [Build a data source plugin]({{< relref "tutorials/build-a-data-source-plugin.md" >}}). With Explore, users can make ad-hoc queries without the use of a dashboard. This is useful when users want to troubleshoot or to learn more about the data. diff --git a/docs/sources/developers/plugins/backend/_index.md b/docs/sources/developers/plugins/backend/_index.md index a370973db06..f536e1b6f54 100644 --- a/docs/sources/developers/plugins/backend/_index.md +++ b/docs/sources/developers/plugins/backend/_index.md @@ -26,7 +26,7 @@ Data source plugins can be extended with a backend component. In the future we p The following examples gives you an idea of why you'd consider implementing a backend plugin: -- Enable [Grafana alerting]({{< relref "../../../alerting" >}}) for data sources. +- Enable [Grafana alerting]({{< relref "../../../alerting/" >}}) for data sources. - Connect to non-HTTP services that normally can't be connected to from a web browser, e.g. SQL database servers. - Keep state between users, e.g. query caching for data sources. - Use custom authentication methods and/or authorization checks that aren't supported in Grafana. @@ -49,7 +49,7 @@ Grafana's backend plugin system exposes a couple of different capabilities, or b ### Query data -The query data capability allows a backend plugin to handle data source queries that are submitted from a [dashboard]({{< relref "../../../dashboards/_index.md" >}}), [Explore]({{< relref "../../../explore/_index.md" >}}) or [Grafana Alerting]({{< relref "../../../alerting" >}}). The response contains [data frames]({{< relref "../data-frames.md" >}}), which are used to visualize metrics, logs, and traces. The query data capability is required to implement for a backend data source plugin. +The query data capability allows a backend plugin to handle data source queries that are submitted from a [dashboard]({{< relref "../../../dashboards/_index.md" >}}), [Explore]({{< relref "../../../explore/_index.md" >}}) or [Grafana Alerting]({{< relref "../../../alerting/" >}}). The response contains [data frames]({{< relref "../data-frames.md" >}}), which are used to visualize metrics, logs, and traces. The query data capability is required to implement for a backend data source plugin. ### Resources diff --git a/docs/sources/developers/plugins/build-a-logs-data-source-plugin.md b/docs/sources/developers/plugins/build-a-logs-data-source-plugin.md index bda48878be4..6abe0ab9029 100644 --- a/docs/sources/developers/plugins/build-a-logs-data-source-plugin.md +++ b/docs/sources/developers/plugins/build-a-logs-data-source-plugin.md @@ -8,7 +8,7 @@ title: Build a logs data source plugin This guide explains how to build a logs data source plugin. -Data sources in Grafana supports both metrics and log data. The steps to build a logs data source plugin are largely the same as for a metrics data source. This guide assumes that you're already familiar with how to [Build a data source plugin]({{< relref "/tutorials/build-a-data-source-plugin.md" >}}) for metrics. +Data sources in Grafana supports both metrics and log data. The steps to build a logs data source plugin are largely the same as for a metrics data source. This guide assumes that you're already familiar with how to [Build a data source plugin]({{< relref "tutorials/build-a-data-source-plugin.md" >}}) for metrics. ## Add logs support to your data source diff --git a/docs/sources/developers/plugins/build-a-streaming-data-source-plugin.md b/docs/sources/developers/plugins/build-a-streaming-data-source-plugin.md index 06e1b748c29..f14e50ebaf4 100644 --- a/docs/sources/developers/plugins/build-a-streaming-data-source-plugin.md +++ b/docs/sources/developers/plugins/build-a-streaming-data-source-plugin.md @@ -8,7 +8,7 @@ title: Build a streaming data source plugin This guide explains how to build a streaming data source plugin. -This guide assumes that you're already familiar with how to [Build a data source plugin]({{< relref "/tutorials/build-a-data-source-plugin.md" >}}). +This guide assumes that you're already familiar with how to [Build a data source plugin]({{< relref "tutorials/build-a-data-source-plugin.md" >}}). When monitoring critical applications, you want your dashboard to refresh as soon as your data does. In Grafana, you can set your dashboards to automatically refresh at a certain interval, no matter what data source you use. Unfortunately, this means that your queries are requesting all the data to be sent again, regardless of whether the data has actually changed. diff --git a/docs/sources/enterprise/_index.md b/docs/sources/enterprise/_index.md index 0e5139cad96..4f04f561e4e 100644 --- a/docs/sources/enterprise/_index.md +++ b/docs/sources/enterprise/_index.md @@ -20,9 +20,13 @@ weight: 150 Grafana Enterprise is a commercial edition of Grafana that includes additional features not found in the open source version. -Building on everything you already know and love about Grafana open source, Grafana Enterprise includes [exclusive datasource plugins]({{< relref "#enterprise-plugins">}}) and [additional features]({{< relref "#enterprise-features">}}). On top of that you get 24x7x365 support and training from the core Grafana team. +Building on everything you already know and love about Grafana open source, Grafana Enterprise includes [exclusive datasource plugins]({{< relref "#enterprise-plugins">}}) and [additional features]({{< relref "#enterprise-features">}}). You also get 24x7x365 support and training from the core Grafana team. -To learn more about Grafana Enterprise, refer to [our product page.](https://grafana.com/enterprise) +To learn more about Grafana Enterprise, refer to [our product page](https://grafana.com/enterprise). + +## Enterprise features in Grafana Cloud + +Many Grafana Enterprise features are also available in [Grafana Cloud]({{< ref "/docs/grafana-cloud" >}}) Pro and Advanced accounts. For details, refer to [the Grafana Cloud features table](https://grafana.com/pricing/#featuresTable) and [Enterprise features available to Grafana Cloud Pro and Advanced accounts]({{< ref "/docs/grafana-cloud/reference/enterprise-features" >}}). ## Authentication @@ -40,27 +44,27 @@ Supported auth providers: - [GitLab OAuth]({{< relref "../auth/gitlab.md#team-sync-enterprise-only" >}}) - [LDAP]({{< relref "enhanced_ldap.md#ldap-group-synchronization-for-teams" >}}) - [Okta]({{< relref "../auth/okta.md#team-sync-enterprise-only" >}}) -- [SAML]({{< relref "./saml/configure-saml.md#configure-team-sync" >}}) +- [SAML]({{< relref "configure-saml.md#configure-team-sync" >}}) ### Enhanced LDAP integration -With Grafana Enterprise [enhanced LDAP]({{< relref "enhanced_ldap.md" >}}), you can set up active LDAP synchronization. +With [enhanced LDAP integration]({{< relref "enhanced_ldap.md" >}}), you can set up active LDAP synchronization. ### SAML authentication -[SAML authentication]({{< relref "./saml" >}}) enables your Grafana Enterprise users to authenticate with SAML. +[SAML authentication]({{< relref "./configure-saml" >}}) enables users to authenticate with single sign-on services that use Security Assertion Markup Language (SAML). ## Enterprise features -With Grafana Enterprise, you get access to the following features: +Grafana Enterprise adds the following features: -- [Role-based access control]({{< relref "./access-control/_index.md" >}}) to control access with role-based permissions. +- [Role-based access control]({{< relref "./access-control/" >}}) to control access with role-based permissions. - [Data source permissions]({{< relref "datasource_permissions.md" >}}) to restrict query access to specific teams and users. - [Data source query caching]({{< relref "query-caching.md" >}}) to temporarily store query results in Grafana to reduce data source load and rate limiting. - [Reporting]({{< relref "reporting.md" >}}) to generate a PDF report from any dashboard and set up a schedule to have it emailed to whoever you choose. - [Export dashboard as PDF]({{< relref "export-pdf.md" >}}) - [White labeling]({{< relref "white-labeling.md" >}}) to customize Grafana from the brand and logo to the footer links. -- [Usage insights]({{< relref "usage-insights/_index.md" >}}) to understand how your Grafana instance is used. +- [Usage insights]({{< relref "./usage-insights/" >}}) to understand how your Grafana instance is used. - [Vault integration]({{< relref "vault.md" >}}) to manage your configuration or provisioning secrets with Vault. - [Auditing]({{< relref "auditing.md" >}}) tracks important changes to your Grafana instance to help you manage and mitigate suspicious activity and meet compliance requirements. - [Request security]({{< relref "request-security.md" >}}) makes it possible to restrict outgoing requests from the Grafana server. @@ -68,7 +72,7 @@ With Grafana Enterprise, you get access to the following features: ## Enterprise data sources -With a Grafana Enterprise license, you get access to premium data sources, including: +With a Grafana Enterprise license, you also get access to premium data sources, including: - [AppDynamics](https://grafana.com/grafana/plugins/dlopes7-appdynamics-datasource) - [Azure Devops](https://grafana.com/grafana/plugins/grafana-azuredevops-datasource) @@ -90,4 +94,4 @@ With a Grafana Enterprise license, you get access to premium data sources, inclu ## Try Grafana Enterprise -To purchase or obtain a trial license contact the Grafana Labs [Sales Team](https://grafana.com/contact?about=support&topic=Grafana%20Enterprise). +To purchase or obtain a trial license, contact the Grafana Labs [Sales Team](https://grafana.com/contact?about=support&topic=Grafana%20Enterprise). diff --git a/docs/sources/enterprise/access-control/about-rbac.md b/docs/sources/enterprise/access-control/about-rbac.md index 4eefb2cd96e..3d52df80c1f 100644 --- a/docs/sources/enterprise/access-control/about-rbac.md +++ b/docs/sources/enterprise/access-control/about-rbac.md @@ -58,8 +58,8 @@ You can use RBAC to modify the permissions associated with any basic role, which Note that any modification to any of these basic role is not propagated to the other basic roles. For example, if you modify Viewer basic role and grant additional permission, Editors or Admins won't have that additional grant. -For more information about the permissions associated with each basic role, refer to [Basic role definitions]({{< relref "./rbac-fixed-basic-role-definitions#basic-role-assignments" >}}). -To interact with the API and view or modify basic roles permissions, refer to [the table]({{< relref "./manage-rbac-roles#basic-role-uid-mapping" >}}) that maps basic role names to the associated UID. +For more information about the permissions associated with each basic role, refer to [Basic role definitions]({{< relref "rbac-fixed-basic-role-definitions/#basic-role-assignments" >}}). +To interact with the API and view or modify basic roles permissions, refer to [the table]({{< relref "manage-rbac-roles/#basic-role-uid-mapping" >}}) that maps basic role names to the associated UID. ## Fixed roles @@ -85,15 +85,15 @@ Assign fixed roles when the basic roles do not meet your permission requirements - [Teams]({{< relref "../../administration/manage-users-and-permissions/manage-teams/_index.md" >}}) - [Users]({{< relref "../../administration/manage-users-and-permissions/manage-server-users/_index.md" >}}) -To learn more about the permissions you can grant for each resource, refer to [RBAC role definitions]({{< relref "./rbac-fixed-basic-role-definitions.md" >}}). +To learn more about the permissions you can grant for each resource, refer to [RBAC role definitions]({{< relref "rbac-fixed-basic-role-definitions.md" >}}). ## Custom roles If you are a Grafana Enterprise customer, you can create custom roles to manage user permissions in a way that meets your security requirements. -Custom roles contain unique combinations of permissions _actions_ and _scopes_. An action defines the action a use can perform on a Grafana resource. For example, the `teams.roles:list` action allows a user to see a list of roles associated with each team. +Custom roles contain unique combinations of permissions _actions_ and _scopes_. An action defines the action a use can perform on a Grafana resource. For example, the `teams.roles:read` action allows a user to see a list of roles associated with each team. -A scope describes where an action can be performed. For example, the `teams:id:1` scope restricts the user's action to the team with ID `1`. When paired with the `teams.roles:list` action, this permission prohibits the user from viewing the roles for teams other than team `1`. +A scope describes where an action can be performed. For example, the `teams:id:1` scope restricts the user's action to the team with ID `1`. When paired with the `teams.roles:read` action, this permission prohibits the user from viewing the roles for teams other than team `1`. Consider creating a custom role when fixed roles do not meet your permissions requirements. @@ -101,7 +101,7 @@ Consider creating a custom role when fixed roles do not meet your permissions re You can use either of the following methods to create, assign, and manage custom roles: -- Grafana provisioning: You can use a YAML file to configure roles. For more information about using provisioning to create custom roles, refer to [Manage RBAC roles]({{< relref "./manage-rbac-roles.md" >}}). For more information about using provisioning to assign RBAC roles to users or teams, refer to [Assign RBAC roles]({{< relref "./assign-rbac-roles.md" >}}). +- Grafana provisioning: You can use a YAML file to configure roles. For more information about using provisioning to create custom roles, refer to [Manage RBAC roles]({{< relref "manage-rbac-roles.md" >}}). For more information about using provisioning to assign RBAC roles to users or teams, refer to [Assign RBAC roles]({{< relref "assign-rbac-roles.md" >}}). - RBAC API: As an alternative, you can use the Grafana HTTP API to create and manage roles. For more information about the HTTP API, refer to [RBAC API]({{< relref "../../developers/http_api/access_control.md" >}}). ## Limitation diff --git a/docs/sources/enterprise/access-control/assign-rbac-roles.md b/docs/sources/enterprise/access-control/assign-rbac-roles.md index cbf100be36d..3a8b6ee0d93 100644 --- a/docs/sources/enterprise/access-control/assign-rbac-roles.md +++ b/docs/sources/enterprise/access-control/assign-rbac-roles.md @@ -28,10 +28,10 @@ In both cases, the assignment applies only to the user or team within the affect **Before you begin:** -- [Plan your RBAC rollout strategy]({{< relref "./plan-rbac-rollout-strategy.md" >}}). +- [Plan your RBAC rollout strategy]({{< relref "plan-rbac-rollout-strategy.md" >}}). - Identify the fixed roles that you want to assign to the user or team. - For more information about available fixed roles, refer to [RBAC role definitions]({{< relref "./rbac-fixed-basic-role-definitions.md" >}}). + For more information about available fixed roles, refer to [RBAC role definitions]({{< relref "rbac-fixed-basic-role-definitions.md" >}}). - Ensure that your own user account has the correct permissions: - If you are assigning permissions to a user or team within an organization, you must have organization administrator or server administrator permissions. @@ -69,8 +69,8 @@ Instead of using the Grafana role picker, you can use file-based provisioning to **Before you begin:** -- Refer to [Role provisioning]({{< relref "./rbac-provisioning#rbac-provisioning" >}}) -- Ensure that the team to which you are adding the fixed role exists. For more information about creating teams, refer to [Manage teams]({{< relref "../../administration/manage-users-and-permissions/manage-teams/_index.md">}}) +- Refer to [Role provisioning]({{< relref "rbac-provisioning/#rbac-provisioning" >}}) +- Ensure that the team to which you are adding the fixed role exists. For more information about creating teams, refer to [Manage teams]({{< relref "../../administration/manage-users-and-permissions/manage-teams/_index.md" >}}) **To assign a role to a team:** @@ -78,21 +78,21 @@ Instead of using the Grafana role picker, you can use file-based provisioning to 1. Refer to the following table to add attributes and values. - | Attribute | Description | - | ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | - | `roles` | Enter the custom role or custom roles you want to create/update. | - | `roles > name` | Enter the name of the custom role. | - | `roles > version` | Enter the custom role version number. Role assignments are independent of the role version number. | - | `roles > global` | Enter `true`. You can specify the `orgId` otherwise. | - | `roles > permissions` | Enter the permissions `action` and `scope` values. For more information about permissions actions and scopes, refer to [RBAC permissions, actions, and scopes]({{< relref "./custom-role-actions-scopes.md" >}}) | - | `teams` | Enter the team or teams to which you are adding the custom role. | - | `teams > orgId` | Because teams belong to organizations, you must add the `orgId` value. | - | `teams > name` | Enter the name of the team. | - | `teams > roles` | Enter the custom or fixed role or roles that you want to grant to the team. | - | `teams > roles > name` | Enter the name of the role. | - | `teams > roles > global` | Enter `true`, or specify `orgId` of the role you want to assign to the team. Fixed roles are global. | + | Attribute | Description | + | ------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | + | `roles` | Enter the custom role or custom roles you want to create/update. | + | `roles > name` | Enter the name of the custom role. | + | `roles > version` | Enter the custom role version number. Role assignments are independent of the role version number. | + | `roles > global` | Enter `true`. You can specify the `orgId` otherwise. | + | `roles > permissions` | Enter the permissions `action` and `scope` values. For more information about permissions actions and scopes, refer to [RBAC permissions, actions, and scopes]({{< relref "custom-role-actions-scopes.md" >}}) | + | `teams` | Enter the team or teams to which you are adding the custom role. | + | `teams > orgId` | Because teams belong to organizations, you must add the `orgId` value. | + | `teams > name` | Enter the name of the team. | + | `teams > roles` | Enter the custom or fixed role or roles that you want to grant to the team. | + | `teams > roles > name` | Enter the name of the role. | + | `teams > roles > global` | Enter `true`, or specify `orgId` of the role you want to assign to the team. Fixed roles are global. | - For more information about managing custom roles, refer to [Create custom roles using provisioning]({{< relref "./manage-rbac-roles/#create-custom-roles-using-provisioning" >}}). + For more information about managing custom roles, refer to [Create custom roles using provisioning]({{< relref "manage-rbac-roles/#create-custom-roles-using-provisioning" >}}). 1. Reload the provisioning configuration file. diff --git a/docs/sources/enterprise/access-control/custom-role-actions-scopes.md b/docs/sources/enterprise/access-control/custom-role-actions-scopes.md index 9679536f5fa..010079e5534 100644 --- a/docs/sources/enterprise/access-control/custom-role-actions-scopes.md +++ b/docs/sources/enterprise/access-control/custom-role-actions-scopes.md @@ -12,7 +12,7 @@ weight: 80 A permission is comprised of an action and a scope. When creating a custom role, consider the actions the user can perform and the resource(s) on which they can perform those actions. -To learn more about the Grafana resources to which you can apply RBAC, refer to [Resources with RBAC permissions]({{< relref "./about-rbac.md#fixed-roles" >}}). +To learn more about the Grafana resources to which you can apply RBAC, refer to [Resources with RBAC permissions]({{< relref "about-rbac.md#fixed-roles" >}}). - **Action:** An action describes what tasks a user can perform on a resource. - **Scope:** A scope describes where an action can be performed, such as reading a specific user profile. In this example, a permission is associated with the scope `users:` to the relevant role. @@ -27,7 +27,7 @@ The following list contains role-based access control actions. | `alert.instances.external:write` | `datasources:*`
`datasources:uid:*` | Manage alerts and silences in data sources that support alerting. | | `alert.instances:create` | n/a | Create silences in the current organization. | | `alert.instances:read` | n/a | Read alerts and silences in the current organization. | -| `alert.instances:update` | n/a | Update and expire silences in the current organization. | +| `alert.instances:write` | n/a | Update and expire silences in the current organization. | | `alert.notifications.external:read` | `datasources:*`
`datasources:uid:*` | Read templates, contact points, notification policies, and mute timings in data sources that support alerting. | | `alert.notifications.external:write` | `datasources:*`
`datasources:uid:*` | Manage templates, contact points, notification policies, and mute timings in data sources that support alerting. | | `alert.notifications:write` | n/a | Manage templates, contact points, notification policies, and mute timings in the current organization. | @@ -37,7 +37,7 @@ The following list contains role-based access control actions. | `alert.rules:create` | `folders:*`
`folders:uid:*` | Create Grafana alert rules in a folder. Combine this permission with `folders:read` in a scope that includes the folder and `datasources:query` in the scope of data sources the user can query. | | `alert.rules:delete` | `folders:*`
`folders:uid:*` | Delete Grafana alert rules in a folder. Combine this permission with `folders:read` in a scope that includes the folder and `datasources:query` in the scope of data sources the user can query. | | `alert.rules:read` | `folders:*`
`folders:uid:*` | Read Grafana alert rules in a folder. Combine this permission with `folders:read` in a scope that includes the folder and `datasources:query` in the scope of data sources the user can query. | -| `alert.rules:update` | `folders:*`
`folders:uid:*` | Update Grafana alert rules in a folder. Combine this permission with `folders:read` in a scope that includes the folder and `datasources:query` in the scope of data sources the user can query. | +| `alert.rules:write` | `folders:*`
`folders:uid:*` | Update Grafana alert rules in a folder. Combine this permission with `folders:read` in a scope that includes the folder and `datasources:query` in the scope of data sources the user can query. | | `annotations:create` | `annotations:*`
`annotations:type:*` | Create annotations. | | `annotations:delete` | `annotations:*`
`annotations:type:*` | Delete annotations. | | `annotations:read` | `annotations:*`
`annotations:type:*` | Read annotations and annotation tags. | @@ -73,8 +73,8 @@ The following list contains role-based access control actions. | `licensing.reports:read` | n/a | Get custom permission reports. | | `licensing:delete` | n/a | Delete the license token. | | `licensing:read` | n/a | Read licensing information. | -| `licensing:update` | n/a | Update the license token. | -| `org.users.role:update` | `users:*`
`users:id:*` | Update the organization role (`Viewer`, `Editor`, or `Admin`) of an organization. | +| `licensing:write` | n/a | Update the license token. | +| `org.users:write` | `users:*`
`users:id:*` | Update the organization role (`Viewer`, `Editor`, or `Admin`) of a user. | | `org.users:add` | `users:*` | Add a user to an organization. | | `org.users:read` | `users:*`
`users:id:*` | Get user profiles within an organization. | | `org.users:remove` | `users:*`
`users:id:*` | Remove a user from an organization. | @@ -87,42 +87,40 @@ The following list contains role-based access control actions. | `orgs:read` | `orgs:*`
`orgs:id:*` | Read one or more organizations. | | `orgs:write` | `orgs:*`
`orgs:id:*` | Update one or more organizations. | | `provisioning:reload` | `provisioners:*` | Reload provisioning files. To find the exact scope for specific provisioner, see [Scope definitions]({{< relref "#scope-definitions" >}}). | -| `reports.admin:create` | n/a | Create reports. | -| `reports.admin:write` | `reports:*`
`reports:id:*` | Update reports. | +| `reports:create` | n/a | Create reports. | +| `reports:write` | `reports:*`
`reports:id:*` | Update reports. | | `reports.settings:read` | n/a | Read report settings. | | `reports.settings:write` | n/a | Update report settings. | | `reports:delete` | `reports:*`
`reports:id:*` | Delete reports. | | `reports:read` | `reports:*` | List all available reports or get a specific report. | | `reports:send` | `reports:*` | Send a report email. | | `roles:delete` | `permissions:type:delegate` | Delete a custom role. | -| `roles:list` | `roles:*` | List available roles without permissions. | -| `roles:read` | `roles:*`
`roles:uid:*` | Read a specific role with its permissions. | +| `roles:read` | `roles:*`
`roles:uid:*` | List roles and read a specific with its permissions. | | `roles:write` | `permissions:type:delegate` | Create or update a custom role. | | `roles:write` | `permissions:type:escalate` | Reset basic roles to their default permissions. | | `server.stats:read` | n/a | Read Grafana instance statistics. | | `settings:read` | `settings:*`
`settings:auth.saml:*`
`settings:auth.saml:enabled` (property level) | Read the [Grafana configuration settings]({{< relref "../../administration/configuration/_index.md" >}}) | -| `settings:write` | `settings:*`
`settings:auth.saml:*`
`settings:auth.saml:enabled` (property level) | Update any Grafana configuration settings that can be [updated at runtime]({{< relref "../../enterprise/settings-updates/_index.md" >}}). | +| `settings:write` | `settings:*`
`settings:auth.saml:*`
`settings:auth.saml:enabled` (property level) | Update any Grafana configuration settings that can be [updated at runtime]({{< relref "../settings-updates/_index.md" >}}). | | `status:accesscontrol` | `services:accesscontrol` | Get access-control enabled status. | | `teams.permissions:read` | `teams:*`
`teams:id:*` | Read members and External Group Synchronization setup for teams. | | `teams.permissions:write` | `teams:*`
`teams:id:*` | Add, remove and update members and manage External Group Synchronization setup for teams. | | `teams.roles:add` | `permissions:type:delegate` | Assign a role to a team. | -| `teams.roles:list` | `teams:*` | List roles assigned directly to a team. | +| `teams.roles:read` | `teams:*` | List roles assigned directly to a team. | | `teams.roles:remove` | `permissions:type:delegate` | Unassign a role from a team. | | `teams:create` | n/a | Create teams. | | `teams:delete` | `teams:*`
`teams:id:*` | Delete one or more teams. | | `teams:read` | `teams:*`
`teams:id:*` | Read one or more teams and team preferences. | | `teams:write` | `teams:*`
`teams:id:*` | Update one or more teams and team preferences. | -| `users.authtoken:list` | `global.users:*`
`global.users:id:*` | List authentication tokens that are assigned to a user. | -| `users.authtoken:update` | `global.users:*`
`global.users:id:*` | Update authentication tokens that are assigned to a user. | -| `users.password:update` | `global.users:*`
`global.users:id:*` | Update a user’s password. | -| `users.permissions:list` | `users:*` | List permissions of a user. | -| `users.permissions:update` | `global.users:*`
`global.users:id:*` | Update a user’s organization-level permissions. | -| `users.quotas:list` | `global.users:*`
`global.users:id:*` | List a user’s quotas. | -| `users.quotas:update` | `global.users:*`
`global.users:id:*` | Update a user’s quotas. | +| `users.authtoken:read` | `global.users:*`
`global.users:id:*` | List authentication tokens that are assigned to a user. | +| `users.authtoken:write` | `global.users:*`
`global.users:id:*` | Update authentication tokens that are assigned to a user. | +| `users.password:write` | `global.users:*`
`global.users:id:*` | Update a user’s password. | +| `users.permissions:read` | `users:*` | List permissions of a user. | +| `users.permissions:write` | `global.users:*`
`global.users:id:*` | Update a user’s organization-level permissions. | +| `users.quotas:read` | `global.users:*`
`global.users:id:*` | List a user’s quotas. | +| `users.quotas:write` | `global.users:*`
`global.users:id:*` | Update a user’s quotas. | | `users.roles:add` | `permissions:type:delegate` | Assign a role to a user. | -| `users.roles:list` | `users:*` | List roles assigned directly to a user. | +| `users.roles:read` | `users:*` | List roles assigned directly to a user. | | `users.roles:remove` | `permissions:type:delegate` | Unassign a role from a user. | -| `users.teams:read` | `global.users:*`
`global.users:id:*` | Read a user’s teams. | | `users:create` | n/a | Create a user. | | `users:delete` | `global.users:*`
`global.users:id:*` | Delete a user. | | `users:disable` | `global.users:*`
`global.users:id:*` | Disable a user. | @@ -146,7 +144,7 @@ The following list contains role-based access control scopes. | `orgs:*`
`orgs:id:*` | Restrict an action to a set of organizations. For example, `orgs:*` matches any organization and `orgs:id:1` matches the organization whose ID is `1`. | | `permissions:type:delegate` | The scope is only applicable for roles associated with the Access Control itself and indicates that you can delegate your permissions only, or a subset of it, by creating a new role or making an assignment. | | `permissions:type:escalate` | The scope is required to trigger the reset of basic roles permissions. It indicates that users might acquire additional permissions they did not previously have. | -| `provisioners:*` | Restrict an action to a set of provisioners. For example, `provisioners:*` matches any provisioner, and `provisioners:accesscontrol` matches the role-based access control [provisioner]({{< relref "./custom-role-actions-scopes" >}}). | +| `provisioners:*` | Restrict an action to a set of provisioners. For example, `provisioners:*` matches any provisioner, and `provisioners:accesscontrol` matches the role-based access control [provisioner]({{< relref "custom-role-actions-scopes/" >}}). | | `reports:*`
`reports:id:*` | Restrict an action to a set of reports. For example, `reports:*` matches any report and `reports:id:1` matches the report whose ID is `1`. | | `roles:*`
`roles:uid:*` | Restrict an action to a set of roles. For example, `roles:*` matches any role and `roles:uid:randomuid` matches only the role whose UID is `randomuid`. | | `services:accesscontrol` | Restrict an action to target only the role-based access control service. You can use this in conjunction with the `status:accesscontrol` actions. | diff --git a/docs/sources/enterprise/access-control/manage-rbac-roles.md b/docs/sources/enterprise/access-control/manage-rbac-roles.md index 3a8deebfdf4..e57f709238b 100644 --- a/docs/sources/enterprise/access-control/manage-rbac-roles.md +++ b/docs/sources/enterprise/access-control/manage-rbac-roles.md @@ -65,7 +65,7 @@ curl --location --request GET '/api/access-control/roles/qQui_LCMk' "created": "2021-05-17T20:49:18+02:00" }, { - "action": "org.users.role:update", + "action": "org.users:write", "scope": "users:*", "updated": "2021-05-17T20:49:18+02:00", "created": "2021-05-17T20:49:18+02:00" @@ -86,9 +86,9 @@ Create a custom role when basic roles and fixed roles do not meet your permissio **Before you begin:** -- [Plan your RBAC rollout strategy]({{< relref "./plan-rbac-rollout-strategy" >}}). -- Determine which permissions you want to add to the custom role. To see a list of actions and scope, refer to [RBAC permissions actions and scopes]({{< relref "./custom-role-actions-scopes.md" >}}). -- [Enable role provisioning]({{< relref "./rbac-provisioning" >}}). +- [Plan your RBAC rollout strategy]({{< relref "plan-rbac-rollout-strategy/" >}}). +- Determine which permissions you want to add to the custom role. To see a list of actions and scope, refer to [RBAC permissions actions and scopes]({{< relref "custom-role-actions-scopes.md" >}}). +- [Enable role provisioning]({{< relref "rbac-provisioning/" >}}). - Ensure that you have permissions to create a custom role. - By default, the Grafana Admin role has permission to create custom roles. - A Grafana Admin can delegate the custom role privilege to another user by creating a custom role with the relevant permissions and adding the `permissions:type:delegate` scope. @@ -101,21 +101,21 @@ File-based provisioning is one method you can use to create custom roles. 1. Refer to the following table to add attributes and values. -| Attribute | Description | -| ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `name` | A human-friendly identifier for the role that helps administrators understand the purpose of a role. `name` is required and cannot be longer than 190 characters. We recommend that you use ASCII characters. Role names must be unique within an organization. | -| `uid` | A unique identifier associated with the role. The UID enables you to change or delete the role. You can either generate a UID yourself, or let Grafana generate one for you. You cannot use the same UID within the same Grafana instance. | -| `orgId` | Identifies the organization to which the role belongs. The [default org ID]({{< relref "../../administration/configuration#auto_assign_org_id" >}}) is used if you do not specify `orgId`. | -| `global` | Global roles are not associated with any specific organization, which means that you can reuse them across all organizations. This setting overrides `orgId`. | -| `displayName` | Human-friendly text that is displayed in the UI. Role display name cannot be longer than 190 ASCII-based characters. For fixed roles, the display name is shown as specified. If you do not set a display name the display name replaces `':'` (a colon) with `' '` (a space). | -| `description` | Human-friendly text that describes the permissions a role provides. | -| `group` | Organizes roles in the role picker. | -| `version` | A positive integer that defines the current version of the role, which prevents overwriting newer changes. | -| `hidden` | Hidden roles do not appear in the role picker. | -| `state` | State of the role. Defaults to `present`, but if set to `absent` the role will be removed. | -| `force` | Can be used in addition to state `absent`, to force the removal of a role and all its assignments. | -| `from` | An optional list of roles from which you want to copy permissions. | -| `permissions` | Provides users access to Grafana resources. For a list of permissions, refer to [RBAC permissions actions and scopes]({{< relref "./rbac-fixed-basic-role-definitions.md" >}}). If you do not know which permissions to assign, you can create and assign roles without any permissions as a placeholder. Using the `from` attribute, you can specify additional permissions or permissions to remove by adding a `state` to your permission list. | +| Attribute | Description | +| ------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| `name` | A human-friendly identifier for the role that helps administrators understand the purpose of a role. `name` is required and cannot be longer than 190 characters. We recommend that you use ASCII characters. Role names must be unique within an organization. | +| `uid` | A unique identifier associated with the role. The UID enables you to change or delete the role. You can either generate a UID yourself, or let Grafana generate one for you. You cannot use the same UID within the same Grafana instance. | +| `orgId` | Identifies the organization to which the role belongs. The [default org ID]({{< relref "../../administration/configuration/#auto_assign_org_id" >}}) is used if you do not specify `orgId`. | +| `global` | Global roles are not associated with any specific organization, which means that you can reuse them across all organizations. This setting overrides `orgId`. | +| `displayName` | Human-friendly text that is displayed in the UI. Role display name cannot be longer than 190 ASCII-based characters. For fixed roles, the display name is shown as specified. If you do not set a display name the display name replaces `':'` (a colon) with `' '` (a space). | +| `description` | Human-friendly text that describes the permissions a role provides. | +| `group` | Organizes roles in the role picker. | +| `version` | A positive integer that defines the current version of the role, which prevents overwriting newer changes. | +| `hidden` | Hidden roles do not appear in the role picker. | +| `state` | State of the role. Defaults to `present`, but if set to `absent` the role will be removed. | +| `force` | Can be used in addition to state `absent`, to force the removal of a role and all its assignments. | +| `from` | An optional list of roles from which you want to copy permissions. | +| `permissions` | Provides users access to Grafana resources. For a list of permissions, refer to [RBAC permissions actions and scopes]({{< relref "rbac-fixed-basic-role-definitions.md" >}}). If you do not know which permissions to assign, you can create and assign roles without any permissions as a placeholder. Using the `from` attribute, you can specify additional permissions or permissions to remove by adding a `state` to your permission list. | 1. Reload the provisioning configuration file. @@ -178,7 +178,7 @@ roles: - name: 'fixed:org.users:writer' global: true permissions: - - action: 'org.users.role:update' + - action: 'org.users:write' scope: 'users:*' state: 'absent' - action: 'org.users:add' @@ -245,7 +245,7 @@ If the default basic role definitions do not meet your requirements, you can cha **Before you begin:** -- Determine the permissions you want to add or remove from a basic role. For more information about the permissions associated with basic roles, refer to [RBAC role definitions]({{< relref "./rbac-fixed-basic-role-definitions#basic-role-assignments" >}}). +- Determine the permissions you want to add or remove from a basic role. For more information about the permissions associated with basic roles, refer to [RBAC role definitions]({{< relref "rbac-fixed-basic-role-definitions/#basic-role-assignments" >}}). **To change permissions from a basic role:** @@ -283,7 +283,7 @@ roles: global: true permissions: # Permissions to remove - - action: 'teams.roles:list' + - action: 'teams.roles:read' scope: 'teams:*' state: 'absent' - action: 'teams.roles:remove' diff --git a/docs/sources/enterprise/access-control/plan-rbac-rollout-strategy.md b/docs/sources/enterprise/access-control/plan-rbac-rollout-strategy.md index d2c07ba4ecc..8498c2a1253 100644 --- a/docs/sources/enterprise/access-control/plan-rbac-rollout-strategy.md +++ b/docs/sources/enterprise/access-control/plan-rbac-rollout-strategy.md @@ -27,8 +27,8 @@ As a first step in determining your permissions rollout strategy, we recommend t To learn more about basic roles and fixed roles, refer to the following documentation: -- [Basic role definitions]({{< relref "./rbac-fixed-basic-role-definitions#basic-role-assignments" >}}) -- [Fixed role definitions]({{< relref "./rbac-fixed-basic-role-definitions#fixed-role-definitions" >}}) +- [Basic role definitions]({{< relref "rbac-fixed-basic-role-definitions/#basic-role-assignments" >}}) +- [Fixed role definitions]({{< relref "rbac-fixed-basic-role-definitions/#fixed-role-definitions" >}}) ## User and team considerations @@ -173,7 +173,6 @@ roles: | action | scope | | -------------- | --------------------------- | -| `roles:list` | `roles:*` | | `roles:read` | `roles:*` | | `roles:write` | `permissions:type:delegate` | | `roles:delete` | `permissions:type:delegate` | @@ -200,16 +199,16 @@ roles: global: true ``` -> **Note:** The `fixed:reports:writer` role assigns more permissions than just creating reports. For more information about fixed role permission assignments, refer to [Fixed role definitions]({{< relref "./rbac-fixed-basic-role-definitions#fixed-role-definitions" >}}). +> **Note:** The `fixed:reports:writer` role assigns more permissions than just creating reports. For more information about fixed role permission assignments, refer to [Fixed role definitions]({{< relref "rbac-fixed-basic-role-definitions/#fixed-role-definitions" >}}). - Add the following permissions to the `basic:viewer` role, using provisioning or the [RBAC HTTP API]({{< relref "../../developers/http_api/access_control.md#update-a-role" >}}): -| Action | Scope | -| ---------------------- | ------------------------------- | -| `reports.admin:create` | n/a | -| `reports.admin:write` | `reports:*`
`reports:id:*` | -| `reports:read` | `reports:*` | -| `reports:send` | `reports:*` | +| Action | Scope | +| ---------------- | ------------------------------- | +| `reports:create` | n/a | +| `reports:write` | `reports:*`
`reports:id:*` | +| `reports:read` | `reports:*` | +| `reports:send` | `reports:*` | ### Prevent a Grafana Admin from creating and inviting users diff --git a/docs/sources/enterprise/access-control/rbac-fixed-basic-role-definitions.md b/docs/sources/enterprise/access-control/rbac-fixed-basic-role-definitions.md index 70b9a852f15..3a7b6fda2a4 100644 --- a/docs/sources/enterprise/access-control/rbac-fixed-basic-role-definitions.md +++ b/docs/sources/enterprise/access-control/rbac-fixed-basic-role-definitions.md @@ -24,67 +24,67 @@ The following tables list permissions associated with basic and fixed roles. ## Fixed role definitions -| Fixed role | Permissions | Description | -| -------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `fixed:alerting.instances:editor` | All permissions from `fixed:alerting.instances:reader` and
`alert.instances:create`
`alert.instances:update` for organization scope
`alert.instances.external:write` for scope `datasources:*` | Create, update and expire all silences in the organization produced by Grafana, Mimir, and Loki.[\*](#alerting-roles) | -| `fixed:alerting.instances:reader` | `alert.instances:read` for organization scope
`alert.instances.external:read` for scope `datasources:*` | Read all alerts and silences in the organization produced by Grafana Alerts and Mimir and Loki alerts and silences.[\*](#alerting-roles) | -| `fixed:alerting.notifications:editor` | All permissions from `fixed:alerting.notifications:reader` and
`alert.notifications:write`for organization scope
`alert.notifications.external:read` for scope `datasources:*` | Create, update, and delete contact points, templates, mute timings and notification policies for Grafana and external Alertmanager.[\*](#alerting-roles) | -| `fixed:alerting.notifications:reader` | `alert.notifications:read` for organization scope
`alert.notifications.external:read` for scope `datasources:*` | Read all Grafana and Alertmanager contact points, templates, and notification policies.[\*](#alerting-roles) | -| `fixed:alerting.rules:editor` | All permissions from `fixed:alerting.rules:reader` and
`alert.rule:create`
`alert.rule:update`
`alert.rule:delete` for scope `folders:*`
`alert.rules.external:write` for scope `datasources:*` | Create, update, and delete all\* Grafana, Mimir, and Loki alert rules.[\*](#alerting-roles) | -| `fixed:alerting.rules:reader` | `alert.rule:read` for scope `folders:*`
`alert.rules.external:read` for scope `datasources:*` | Read all\* Grafana, Mimir, and Loki alert rules.[\*](#alerting-roles) | -| `fixed:alerting:editor` | All permissions from `fixed:alerting.rules:editor`
`fixed:alerting.instances:editor`
`fixed:alerting.notifications:editor` | Create, update, and delete Grafana, Mimir, Loki and Alertmanager alert rules\*, silences, contact points, templates, mute timings, and notification policies.[\*](#alerting-roles) | -| `fixed:alerting:reader` | All permissions from `fixed:alerting.rules:reader`
`fixed:alerting.instances:reader`
`fixed:alerting.notifications:reader` | Read-only permissions for all Grafana, Mimir, Loki and Alertmanager alert rules\*, alerts, contact points, and notification policies.[\*](#alerting-roles) | -| `fixed:annotations.dashboard:writer` | `annotations:write`
`annotations.create`
`annotations:delete` for scope `annotations:type:dashboard` | Create, update and delete dashboard annotations and annotation tags. | -| `fixed:annotations:reader` | `annotations:read` for scopes `annotations:type:*` | Read all annotations and annotation tags. | -| `fixed:annotations:writer` | All permissions from `fixed:annotations:reader`
`annotations:write`
`annotations.create`
`annotations:delete` for scope `annotations:type:*` | Read, create, update and delete all annotations and annotation tags. | -| `fixed:apikeys:reader` | `apikeys:read` for scope `apikeys:*` | Read all api keys. | -| `fixed:apikeys:writer` | All permissions from `fixed:apikeys:reader` and
`apikeys:create`
`apikeys:delete` for scope `apikeys:*` | Read, create, delete all api keys. | -| `fixed:dashboards.permissions:reader` | `dashboards.permissions:read` | Read all dashboard permissions. | -| `fixed:dashboards.permissions:writer` | All permissions from `fixed:dashboards.permissions:reader` and
`dashboards.permissions:write` | Read and update all dashboard permissions. | -| `fixed:dashboards:creator` | `dashboards:create`
`folders:read` | Create dashboards. | -| `fixed:dashboards:reader` | `dashboards:read` | Read all dashboards. | -| `fixed:dashboards:writer` | All permissions from `fixed:dashboards:reader` and
`dashboards:write`
`dashboards:edit`
`dashboards:delete`
`dashboards:create`
`dashboards.permissions:read`
`dashboards.permissions:write` | Read, create, update, and delete all dashboards. | -| `fixed:datasources.permissions:reader` | `datasources.permissions:read` | Read data source permissions. | -| `fixed:datasources.permissions:writer` | All permissions from `fixed:datasources.permissions:reader` and
`datasources.permissions:write` | Create, read, or delete permissions of a data source. | -| `fixed:datasources:explorer` | `datasources:explore` | Enable the Explore feature. Data source permissions still apply, you can only query data sources for which you have query permissions. | -| `fixed:datasources:id:reader` | `datasources.id:read` | Read the ID of a data source based on its name. | -| `fixed:datasources:reader` | `datasources:read`
`datasources:query` | Read and query data sources. | -| `fixed:datasources:writer` | All permissions from `fixed:datasources:reader` and
`datasources:create`
`datasources:write`
`datasources:delete` | Read, query, create, delete, or update a data source. | -| `fixed:folders.permissions:reader` | `folders.permissions:read` | Read all folder permissions. | -| `fixed:folders.permissions:writer` | All permissions from `fixed:folders.permissions:reader` and
`folders.permissions:write` | Read and update all folder permissions. | -| `fixed:folders:creator` | `folders:create` | Create folders. | -| `fixed:folders:reader` | `folders:read`
`dashboards:read` | Read all folders and dashboards. | -| `fixed:folders:writer` | All permissions from `fixed:dashboards:writer` and
`folders:read`
`folders:write`
`folders:create`
`folders:delete`
`folders.permissions:read`
`folders.permissions:write` | Read, create, update, and delete all folders and dashboards. | -| `fixed:ldap:reader` | `ldap.user:read`
`ldap.status:read` | Read the LDAP configuration and LDAP status information. | -| `fixed:ldap:writer` | All permissions from `fixed:ldap:reader` and
`ldap.user:sync`
`ldap.config:reload` | Read and update the LDAP configuration, and read LDAP status information. | -| `fixed:licensing:reader` | `licensing:read`
`licensing.reports:read` | Read licensing information and licensing reports. | -| `fixed:licensing:writer` | All permissions from `fixed:licensing:viewer` and
`licensing:update`
`licensing:delete` | Read licensing information and licensing reports, update and delete the license token. | -| `fixed:org.users:reader` | `org.users:read` | Read users within a single organization. | -| `fixed:org.users:writer` | All permissions from `fixed:org.users:reader` and
`org.users:add`
`org.users:remove`
`org.users.role:update` | Within a single organization, add a user, invite a user, read information about a user and their role, remove a user from that organization, or change the role of a user. | -| `fixed:organization:maintainer` | All permissions from `fixed:organization:reader` and
`orgs:write`
`orgs:create`
`orgs:delete`
`orgs.quotas:write` | Create, read, write, or delete an organization. Read or write its quotas. This role needs to be assigned globally. | -| `fixed:organization:reader` | `orgs:read`
`orgs.quotas:read` | Read an organization and its quotas. | -| `fixed:organization:writer` | All permissions from `fixed:organization:reader` and
`orgs:write`
`orgs.preferences:read`
`orgs.preferences:write` | Read an organization, its quotas, or its preferences. Update organization properties, or its preferences. | -| `fixed:provisioning:writer` | `provisioning:reload` | Reload provisioning. | -| `fixed:reports:reader` | `reports:read`
`reports:send`
`reports.settings:read` | Read all reports and shared report settings. | -| `fixed:reports:writer` | All permissions from `fixed:reports:reader` and
`reports.admin:write`
`reports:delete`
`reports.settings:write` | Create, read, update, or delete all reports and shared report settings. | -| `fixed:roles:reader` | `roles:read`
`roles:list`
`teams.roles:list`
`users.roles:list`
`users.permissions:list` | Read all access control roles, roles and permissions assigned to users, teams. | -| `fixed:roles:writer` | All permissions from `fixed:roles:reader` and
`roles:write`
`roles:delete`
`teams.roles:add`
`teams.roles:remove`
`users.roles:add`
`users.roles:remove` | Create, read, update, or delete all roles, assign or unassign roles to users, teams. | -| `fixed:roles:resetter` | `roles:write` with scope `permissions:type:escalate` | Reset basic roles to their default. | -| `fixed:settings:reader` | `settings:read` | Read Grafana instance settings. | -| `fixed:settings:writer` | All permissions from `fixed:settings:reader` and
`settings:write` | Read and update Grafana instance settings. | -| `fixed:stats:reader` | `server.stats:read` | Read Grafana instance statistics. | -| `fixed:teams:creator` | `teams:create`
`org.users:read` | Create a team and list organization users (required to manage the created team). | -| `fixed:teams:writer` | `teams:create`
`teams:delete`
`teams:read`
`teams:write`
`teams.permissions:read`
`teams.permissions:write` | Create, read, update and delete teams and manage team memberships. | -| `fixed:users:reader` | `users:read`
`users.quotas:list`
`users.authtoken:list`
`users.teams:read` | Read all users and their information, such as team memberships, authentication tokens, and quotas. | -| `fixed:users:writer` | All permissions from `fixed:users:reader` and
`users:write`
`users:create`
`users:delete`
`users:enable`
`users:disable`
`users.password:update`
`users.permissions:update`
`users:logout`
`users.authtoken:update`
`users.quotas:update` | Read and update all attributes and settings for all users in Grafana: update user information, read user information, create or enable or disable a user, make a user a Grafana administrator, sign out a user, update a user’s authentication token, or update quotas for all users. | +| Fixed role | Permissions | Description | +| -------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `fixed:alerting.instances:editor` | All permissions from `fixed:alerting.instances:reader` and
`alert.instances:create`
`alert.instances:write` for organization scope
`alert.instances.external:write` for scope `datasources:*` | Create, update and expire all silences in the organization produced by Grafana, Mimir, and Loki.[\*](#alerting-roles) | +| `fixed:alerting.instances:reader` | `alert.instances:read` for organization scope
`alert.instances.external:read` for scope `datasources:*` | Read all alerts and silences in the organization produced by Grafana Alerts and Mimir and Loki alerts and silences.[\*](#alerting-roles) | +| `fixed:alerting.notifications:editor` | All permissions from `fixed:alerting.notifications:reader` and
`alert.notifications:write`for organization scope
`alert.notifications.external:read` for scope `datasources:*` | Create, update, and delete contact points, templates, mute timings and notification policies for Grafana and external Alertmanager.[\*](#alerting-roles) | +| `fixed:alerting.notifications:reader` | `alert.notifications:read` for organization scope
`alert.notifications.external:read` for scope `datasources:*` | Read all Grafana and Alertmanager contact points, templates, and notification policies.[\*](#alerting-roles) | +| `fixed:alerting.rules:editor` | All permissions from `fixed:alerting.rules:reader` and
`alert.rule:create`
`alert.rule:update`
`alert.rule:delete` for scope `folders:*`
`alert.rules.external:write` for scope `datasources:*` | Create, update, and delete all\* Grafana, Mimir, and Loki alert rules.[\*](#alerting-roles) | +| `fixed:alerting.rules:reader` | `alert.rule:read` for scope `folders:*`
`alert.rules.external:read` for scope `datasources:*` | Read all\* Grafana, Mimir, and Loki alert rules.[\*](#alerting-roles) | +| `fixed:alerting:editor` | All permissions from `fixed:alerting.rules:editor`
`fixed:alerting.instances:editor`
`fixed:alerting.notifications:editor` | Create, update, and delete Grafana, Mimir, Loki and Alertmanager alert rules\*, silences, contact points, templates, mute timings, and notification policies.[\*](#alerting-roles) | +| `fixed:alerting:reader` | All permissions from `fixed:alerting.rules:reader`
`fixed:alerting.instances:reader`
`fixed:alerting.notifications:reader` | Read-only permissions for all Grafana, Mimir, Loki and Alertmanager alert rules\*, alerts, contact points, and notification policies.[\*](#alerting-roles) | +| `fixed:annotations.dashboard:writer` | `annotations:write`
`annotations.create`
`annotations:delete` for scope `annotations:type:dashboard` | Create, update and delete dashboard annotations and annotation tags. | +| `fixed:annotations:reader` | `annotations:read` for scopes `annotations:type:*` | Read all annotations and annotation tags. | +| `fixed:annotations:writer` | All permissions from `fixed:annotations:reader`
`annotations:write`
`annotations.create`
`annotations:delete` for scope `annotations:type:*` | Read, create, update and delete all annotations and annotation tags. | +| `fixed:apikeys:reader` | `apikeys:read` for scope `apikeys:*` | Read all api keys. | +| `fixed:apikeys:writer` | All permissions from `fixed:apikeys:reader` and
`apikeys:create`
`apikeys:delete` for scope `apikeys:*` | Read, create, delete all api keys. | +| `fixed:dashboards.permissions:reader` | `dashboards.permissions:read` | Read all dashboard permissions. | +| `fixed:dashboards.permissions:writer` | All permissions from `fixed:dashboards.permissions:reader` and
`dashboards.permissions:write` | Read and update all dashboard permissions. | +| `fixed:dashboards:creator` | `dashboards:create`
`folders:read` | Create dashboards. | +| `fixed:dashboards:reader` | `dashboards:read` | Read all dashboards. | +| `fixed:dashboards:writer` | All permissions from `fixed:dashboards:reader` and
`dashboards:write`
`dashboards:edit`
`dashboards:delete`
`dashboards:create`
`dashboards.permissions:read`
`dashboards.permissions:write` | Read, create, update, and delete all dashboards. | +| `fixed:datasources.permissions:reader` | `datasources.permissions:read` | Read data source permissions. | +| `fixed:datasources.permissions:writer` | All permissions from `fixed:datasources.permissions:reader` and
`datasources.permissions:write` | Create, read, or delete permissions of a data source. | +| `fixed:datasources:explorer` | `datasources:explore` | Enable the Explore feature. Data source permissions still apply, you can only query data sources for which you have query permissions. | +| `fixed:datasources:id:reader` | `datasources.id:read` | Read the ID of a data source based on its name. | +| `fixed:datasources:reader` | `datasources:read`
`datasources:query` | Read and query data sources. | +| `fixed:datasources:writer` | All permissions from `fixed:datasources:reader` and
`datasources:create`
`datasources:write`
`datasources:delete` | Read, query, create, delete, or update a data source. | +| `fixed:folders.permissions:reader` | `folders.permissions:read` | Read all folder permissions. | +| `fixed:folders.permissions:writer` | All permissions from `fixed:folders.permissions:reader` and
`folders.permissions:write` | Read and update all folder permissions. | +| `fixed:folders:creator` | `folders:create` | Create folders. | +| `fixed:folders:reader` | `folders:read`
`dashboards:read` | Read all folders and dashboards. | +| `fixed:folders:writer` | All permissions from `fixed:dashboards:writer` and
`folders:read`
`folders:write`
`folders:create`
`folders:delete`
`folders.permissions:read`
`folders.permissions:write` | Read, create, update, and delete all folders and dashboards. | +| `fixed:ldap:reader` | `ldap.user:read`
`ldap.status:read` | Read the LDAP configuration and LDAP status information. | +| `fixed:ldap:writer` | All permissions from `fixed:ldap:reader` and
`ldap.user:sync`
`ldap.config:reload` | Read and update the LDAP configuration, and read LDAP status information. | +| `fixed:licensing:reader` | `licensing:read`
`licensing.reports:read` | Read licensing information and licensing reports. | +| `fixed:licensing:writer` | All permissions from `fixed:licensing:viewer` and
`licensing:write`
`licensing:delete` | Read licensing information and licensing reports, update and delete the license token. | +| `fixed:org.users:reader` | `org.users:read` | Read users within a single organization. | +| `fixed:org.users:writer` | All permissions from `fixed:org.users:reader` and
`org.users:add`
`org.users:remove`
`org.users:write` | Within a single organization, add a user, invite a user, read information about a user and their role, remove a user from that organization, or change the role of a user. | +| `fixed:organization:maintainer` | All permissions from `fixed:organization:reader` and
`orgs:write`
`orgs:create`
`orgs:delete`
`orgs.quotas:write` | Create, read, write, or delete an organization. Read or write its quotas. This role needs to be assigned globally. | +| `fixed:organization:reader` | `orgs:read`
`orgs.quotas:read` | Read an organization and its quotas. | +| `fixed:organization:writer` | All permissions from `fixed:organization:reader` and
`orgs:write`
`orgs.preferences:read`
`orgs.preferences:write` | Read an organization, its quotas, or its preferences. Update organization properties, or its preferences. | +| `fixed:provisioning:writer` | `provisioning:reload` | Reload provisioning. | +| `fixed:reports:reader` | `reports:read`
`reports:send`
`reports.settings:read` | Read all reports and shared report settings. | +| `fixed:reports:writer` | All permissions from `fixed:reports:reader` and
`reports:create`
`reports:write`
`reports:delete`
`reports.settings:write` | Create, read, update, or delete all reports and shared report settings. | +| `fixed:roles:reader` | `roles:read`
`teams.roles:read`
`users.roles:read`
`users.permissions:read` | Read all access control roles, roles and permissions assigned to users, teams. | +| `fixed:roles:writer` | All permissions from `fixed:roles:reader` and
`roles:write`
`roles:delete`
`teams.roles:add`
`teams.roles:remove`
`users.roles:add`
`users.roles:remove` | Create, read, update, or delete all roles, assign or unassign roles to users, teams. | +| `fixed:roles:resetter` | `roles:write` with scope `permissions:type:escalate` | Reset basic roles to their default. | +| `fixed:settings:reader` | `settings:read` | Read Grafana instance settings. | +| `fixed:settings:writer` | All permissions from `fixed:settings:reader` and
`settings:write` | Read and update Grafana instance settings. | +| `fixed:stats:reader` | `server.stats:read` | Read Grafana instance statistics. | +| `fixed:teams:creator` | `teams:create`
`org.users:read` | Create a team and list organization users (required to manage the created team). | +| `fixed:teams:writer` | `teams:create`
`teams:delete`
`teams:read`
`teams:write`
`teams.permissions:read`
`teams.permissions:write` | Create, read, update and delete teams and manage team memberships. | +| `fixed:users:reader` | `users:read`
`users.quotas:read`
`users.authtoken:read`
` | Read all users and their information, such as team memberships, authentication tokens, and quotas. | +| `fixed:users:writer` | All permissions from `fixed:users:reader` and
`users:write`
`users:create`
`users:delete`
`users:enable`
`users:disable`
`users.password:write`
`users.permissions:write`
`users:logout`
`users.authtoken:write`
`users.quotas:write` | Read and update all attributes and settings for all users in Grafana: update user information, read user information, create or enable or disable a user, make a user a Grafana administrator, sign out a user, update a user’s authentication token, or update quotas for all users. | ### Alerting roles -If alerting is [enabled]({{< relref "../../alerting/migrating-alerts/opt-in.md" >}}), you can use predefined roles to manage user access to alert rules, alert instances, and alert notification settings and create custom roles to limit user access to alert rules in a folder. +If alerting is [enabled]({{< relref "../../alerting/migrating-alerts/opt-out.md" >}}), you can use predefined roles to manage user access to alert rules, alert instances, and alert notification settings and create custom roles to limit user access to alert rules in a folder. Access to Grafana alert rules is an intersection of many permissions: - Permission to read a folder. For example, the fixed role `fixed:folders:reader` includes the action `folders:read` and a folder scope `folders:id:`. - Permission to query **all** data sources that a given alert rule uses. If a user cannot query a given data source, they cannot see any alert rules that query that data source. -For more information about the permissions required to access alert rules, refer to [Create a custom role to access alerts in a folder]({{< relref "./plan-rbac-rollout-strategy#create-a-custom-role-to-access-alerts-in-a-folder" >}}). +For more information about the permissions required to access alert rules, refer to [Create a custom role to access alerts in a folder]({{< relref "plan-rbac-rollout-strategy/#create-a-custom-role-to-access-alerts-in-a-folder" >}}). diff --git a/docs/sources/enterprise/access-control/rbac-provisioning.md b/docs/sources/enterprise/access-control/rbac-provisioning.md index 2593af6f9aa..fb10a77f775 100644 --- a/docs/sources/enterprise/access-control/rbac-provisioning.md +++ b/docs/sources/enterprise/access-control/rbac-provisioning.md @@ -10,7 +10,7 @@ weight: 60 # Grafana RBAC provisioning -You can create, change or remove [Custom roles]({{< relref "./manage-rbac-roles.md#create-custom-roles-using-provisioning" >}}) and create or remove [basic role assignments]({{< relref "./assign-rbac-roles.md#assign-a-fixed-role-to-a-basic-role-using-provisioning" >}}), by adding one or more YAML configuration files in the `provisioning/access-control/` directory. +You can create, change or remove [Custom roles]({{< relref "manage-rbac-roles.md#create-custom-roles-using-provisioning" >}}) and create or remove [basic role assignments]({{< relref "assign-rbac-roles.md#assign-a-fixed-role-to-a-basic-role-using-provisioning" >}}), by adding one or more YAML configuration files in the `provisioning/access-control/` directory. If you choose to use provisioning to assign and manage role, you must first enable it. @@ -28,11 +28,11 @@ Grafana performs provisioning during startup. After you make a change to the con 3. Create a new YAML in the following folder: **provisioning/access-control**. For example, `provisioning/access-control/custom-roles.yml` -4. Add RBAC provisioning details to the configuration file. See [manage RBAC roles]({{< relref "manage-rbac-roles.md" >}}) and [assign RBAC roles]({{< relref "assign-rbac-roles.md" >}}) for instructions, and see this [example role provisioning file]({{< relref "rbac-provisioning#example" >}}) for a complete example of a provisioning file. +4. Add RBAC provisioning details to the configuration file. See [manage RBAC roles]({{< relref "manage-rbac-roles.md" >}}) and [assign RBAC roles]({{< relref "assign-rbac-roles.md" >}}) for instructions, and see this [example role provisioning file]({{< relref "rbac-provisioning/#example" >}}) for a complete example of a provisioning file. 5. Reload the provisioning configuration file. - For more information about reloading the provisioning configuration at runtime, refer to [Reload provisioning configurations]({{< relref "../../http_api/admin/#reload-provisioning-configurations" >}}). + For more information about reloading the provisioning configuration at runtime, refer to [Reload provisioning configurations]({{< relref "../../developers/http_api/admin/#reload-provisioning-configurations" >}}). ## Example role configuration file using Grafana provisioning diff --git a/docs/sources/enterprise/auditing.md b/docs/sources/enterprise/auditing.md index 78d187edf8b..a727158f2b3 100644 --- a/docs/sources/enterprise/auditing.md +++ b/docs/sources/enterprise/auditing.md @@ -13,10 +13,10 @@ weight: 1100 # Auditing -> **Note:** Only available in Grafana Enterprise v7.3+. - Auditing allows you to track important changes to your Grafana instance. By default, audit logs are logged to file but the auditing feature also supports sending logs directly to Loki. +> **Note:** Available in [Grafana Enterprise]({{< relref "../enterprise" >}}) version 7.3 and later, and [Grafana Cloud Advanced]({{< ref "/docs/grafana-cloud" >}}). + ## Audit logs Audit logs are JSON objects representing user actions like: @@ -128,7 +128,7 @@ pattern of the `requestUri` field is given. \* Where `AUTH-MODULE` is the name of the authentication module: `grafana`, `saml`, `ldap`, etc. \ -\*\* Includes manual log out, token expired/revoked, and [SAML Single Logout]({{< relref "./saml/configure-saml.md#single-logout" >}}). +\*\* Includes manual log out, token expired/revoked, and [SAML Single Logout]({{< relref "configure-saml.md#single-logout" >}}). #### User management @@ -336,7 +336,7 @@ max_file_size_mb = 256 Audit logs are sent to a [Loki](/oss/loki/) service, through HTTP or gRPC. -> The HTTP option for the Loki exporter is only available in Grafana Enterprise v7.4+. +> **Note:** The HTTP option for the Loki exporter is available only in Grafana Enterprise version 7.4 and later. ```ini [auditing.logs.loki] diff --git a/docs/sources/enterprise/saml/configure-saml.md b/docs/sources/enterprise/configure-saml.md similarity index 56% rename from docs/sources/enterprise/saml/configure-saml.md rename to docs/sources/enterprise/configure-saml.md index 848585e9663..1abed00ed88 100644 --- a/docs/sources/enterprise/saml/configure-saml.md +++ b/docs/sources/enterprise/configure-saml.md @@ -1,23 +1,167 @@ --- aliases: - /docs/grafana/latest/auth/saml/ + - /docs/grafana/latest/enterprise/saml/about-saml/ + - /docs/grafana/latest/enterprise/saml/ + - /docs/grafana/latest/enterprise/saml/enable-saml/ - /docs/grafana/latest/enterprise/saml/configure-saml/ -description: This contains information on how to configure SAML authentication in - Grafana -keywords: - - grafana - - saml - - documentation - - saml-configuration - - enterprise -menuTitle: Configure SAML + - /docs/grafana/latest/enterprise/saml/set-up-saml-with-okta/ + - /docs/grafana/latest/enterprise/saml/troubleshoot-saml/ +description: Learn how to configure SAML authentication in Grafana +menuTitle: Configure SAML authentication title: Configure SAML authentication in Grafana -weight: 40 +weight: 160 --- # Configure SAML authentication in Grafana -The table below describes all SAML configuration options. Continue reading below for details on specific options. Like any other Grafana configuration, you can apply these options as [environment variables]({{< relref "../../administration/configuration.md#configure-with-environment-variables" >}}). +SAML authentication integration allows your Grafana users to log in by using an external SAML 2.0 Identity Provider (IdP). To enable this, Grafana becomes a Service Provider (SP) in the authentication flow, interacting with the IdP to exchange user information. + +The SAML single sign-on (SSO) standard is varied and flexible. Our implementation contains a subset of features needed to provide a smooth authentication experience into Grafana. + +> **Note:** Available in [Grafana Enterprise]({{< relref "../enterprise" >}}) and [Grafana Cloud Pro and Advanced]({{< ref "/docs/grafana-cloud" >}}). + +## Supported SAML + +Grafana supports the following SAML 2.0 bindings: + +- From the Service Provider (SP) to the Identity Provider (IdP): + + - `HTTP-POST` binding + - `HTTP-Redirect` binding + +- From the Identity Provider (IdP) to the Service Provider (SP): + - `HTTP-POST` binding + +In terms of security: + +- Grafana supports signed and encrypted assertions. +- Grafana does not support signed or encrypted requests. + +In terms of initiation, Grafana supports: + +- SP-initiated requests +- IdP-initiated requests + +By default, SP-initiated requests are enabled. For instructions on how to enable IdP-initiated logins, see [IdP-initiated Single Sign-On (SSO)]({{< relref "#idp-initiated-single-sign-on-sso" >}}). + +### Edit SAML options in the Grafana config file + +1. In the `[auth.saml]` section in the Grafana configuration file, set [`enabled`]({{< relref "enterprise-configuration.md#enabled" >}}) to `true`. +1. Configure the [certificate and private key]({{< relref "#certificate-and-private-key" >}}). +1. On the Okta application page where you have been redirected after application created, navigate to the **Sign On** tab and find **Identity Provider metadata** link in the **Settings** section. +1. Set the [`idp_metadata_url`]({{< relref "enterprise-configuration.md#idp-metadata-url" >}}) to the URL obtained from the previous step. The URL should look like `https://.okta.com/app//sso/saml/metadata`. +1. Set the following options to the attribute names configured at the **step 10** of the SAML integration setup. You can find this attributes on the **General** tab of the application page (**ATTRIBUTE STATEMENTS** and **GROUP ATTRIBUTE STATEMENTS** in the **SAML Settings** section). + - [`assertion_attribute_login`]({{< relref "enterprise-configuration.md#assertion-attribute-login" >}}) + - [`assertion_attribute_email`]({{< relref "enterprise-configuration.md#assertion-attribute-email" >}}) + - [`assertion_attribute_name`]({{< relref "enterprise-configuration.md#assertion-attribute-name" >}}) + - [`assertion_attribute_groups`]({{< relref "enterprise-configuration.md#assertion-attribute-groups" >}}) +1. Save the configuration file and and then restart the Grafana server. + +When you are finished, the Grafana configuration might look like this example: + +```bash +[server] +root_url = https://grafana.example.com + +[auth.saml] +enabled = true +private_key_path = "/path/to/private_key.pem" +certificate_path = "/path/to/certificate.cert" +idp_metadata_url = "https://my-org.okta.com/app/my-application/sso/saml/metadata" +assertion_attribute_name = DisplayName +assertion_attribute_login = Login +assertion_attribute_email = Email +assertion_attribute_groups = Group +``` + +## Enable SAML authentication in Grafana + +To use the SAML integration, in the `auth.saml` section of in the Grafana custom configuration file, set `enabled` to `true`. + +Refer to [Configuration]({{< relref "../administration/configuration.md" >}}) for more information about configuring Grafana. + +## Certificate and private key + +The SAML SSO standard uses asymmetric encryption to exchange information between the SP (Grafana) and the IdP. To perform such encryption, you need a public part and a private part. In this case, the X.509 certificate provides the public part, while the private key provides the private part. The private key needs to be issued in a [PKCS#8](https://en.wikipedia.org/wiki/PKCS_8) format. + +Grafana supports two ways of specifying both the `certificate` and `private_key`. + +- Without a suffix (`certificate` or `private_key`), the configuration assumes you've supplied the base64-encoded file contents. +- With the `_path` suffix (`certificate_path` or `private_key_path`), then Grafana treats the value entered as a file path and attempts to read the file from the file system. + +> **Note:** You can only use one form of each configuration option. Using multiple forms, such as both `certificate` and `certificate_path`, results in an error. + +--- + +### **Example** of how to generate SAML credentials: + +An example of how to generate a self-signed certificate and private key that's valid for one year: + +```sh +$ openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes​ +``` + +Base64-encode the cert.pem and key.pem files: +(-w0 switch is not needed on Mac, only for Linux) + +```sh +$ base64 -w0 key.pem > key.pem.base64 +$ base64 -w0 cert.pem > cert.pem.base64 +``` + +The base64-encoded values (`key.pem.base64, cert.pem.base64` files) are then used for certificate and private_key. + +The keys you provide should look like: + +``` +-----BEGIN PRIVATE KEY----- +... +... +-----END PRIVATE KEY----- +``` + +## Set up SAML with Okta + +Grafana supports user authentication through Okta, which is useful when you want your users to access Grafana using single sign on. This guide will follow you through the steps of configuring SAML authentication in Grafana with [Okta](https://okta.com/). You need to be an admin in your Okta organization to access Admin Console and create SAML integration. You also need permissions to edit Grafana config file and restart Grafana server. + +**Before you begin:** + +- To configure SAML integration with Okta, create integration inside the Okta organization first. [Add integration in Okta](https://help.okta.com/en/prod/Content/Topics/Apps/apps-overview-add-apps.htm) +- Ensure you have permission to administer SAML authentication. For more information about permissions, refer to [About users and permissions]({{< relref "../administration/manage-users-and-permissions/about-users-and-permissions.md#" >}}). + +**To set up SAML with Okta:** + +1. Log in to the [Okta portal](https://login.okta.com/). +1. Go to the Admin Console in your Okta organization by clicking **Admin** in the upper-right corner. If you are in the Developer Console, then click **Developer Console** in the upper-left corner and then click **Classic UI** to switch over to the Admin Console. +1. In the Admin Console, navigate to **Applications** > **Applications**. +1. Click **Add Application**. +1. Click **Create New App** to start the Application Integration Wizard. +1. Choose **Web** as a platform. +1. Select **SAML 2.0** in the Sign on method section. +1. Click **Create**. +1. On the **General Settings** tab, enter a name for your Grafana integration. You can also upload a logo. +1. On the **Configure SAML** tab, enter the SAML information related to your Grafana instance: + + - In the **Single sign on URL** field, use the `/saml/acs` endpoint URL of your Grafana instance, for example, `https://grafana.example.com/saml/acs`. + - In the **Audience URI (SP Entity ID)** field, use the `/saml/metadata` endpoint URL, for example, `https://grafana.example.com/saml/metadata`. + - Leave the default values for **Name ID format** and **Application username**. + - In the **ATTRIBUTE STATEMENTS (OPTIONAL)** section, enter the SAML attributes to be shared with Grafana, for example: + + | Attribute name (in Grafana) | Value (in Okta profile) | + | --------------------------- | -------------------------------------- | + | Login | `user.login` | + | Email | `user.email` | + | DisplayName | `user.firstName + " " + user.lastName` | + + - In the **GROUP ATTRIBUTE STATEMENTS (OPTIONAL)** section, enter a group attribute name (for example, `Group`) and set filter to `Matches regex .*` to return all user groups. + +1. Click **Next**. +1. On the final Feedback tab, fill out the form and then click **Finish**. + +## Configure SAML authentication in Grafana + +The table below describes all SAML configuration options. Continue reading below for details on specific options. Like any other Grafana configuration, you can apply these options as [environment variables]({{< relref "../administration/configuration.md#configure-with-environment-variables" >}}). | Setting | Required | Description | Default | | ---------------------------------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------- | @@ -46,7 +190,7 @@ The table below describes all SAML configuration options. Continue reading below ### Signature algorithm -> Only available in Grafana v7.3+ +> **Note:** Available in Grafana version 7.3 and later. The SAML standard recommends using a digital signature for some types of messages, like authentication or logout requests. If the `signature_algorithm` option is configured, Grafana will put a digital signature into SAML requests. Supported signature types are `rsa-sha1`, `rsa-sha256`, `rsa-sha512`. This option should match your IdP configuration, otherwise, signature validation will fail. Grafana uses key and certificate configured with `private_key` and `certificate` options for signing SAML requests. @@ -83,7 +227,7 @@ The integration provides two key endpoints as part of Grafana: ### IdP-initiated Single Sign-On (SSO) -> Only available in Grafana v7.3+ +> **Note:** Available in Grafana version 7.3 and later. By default, Grafana allows only service provider (SP) initiated logins (when the user logs in with SAML via Grafana’s login page). If you want users to log in into Grafana directly from your identity provider (IdP), set the `allow_idp_initiated` configuration option to `true` and configure `relay_state` with the same value specified in the IdP configuration. @@ -91,7 +235,7 @@ IdP-initiated SSO has some security risks, so make sure you understand the risks ### Single logout -> Only available in Grafana v7.3+ +> **Note:** Available in Grafana version 7.3 and later. SAML's single logout feature allows users to log out from all applications associated with the current IdP session established via SAML SSO. If the `single_logout` option is set to `true` and a user logs out, Grafana requests IdP to end the user session which in turn triggers logout from all other applications the user is logged into using the same IdP session (applications should support single logout). Conversely, if another application connected to the same IdP logs out using single logout, Grafana receives a logout request from IdP and ends the user session. @@ -103,7 +247,7 @@ For Grafana to map the user information, it looks at the individual attributes w Grafana provides configuration options that let you modify which keys to look at for these values. The data we need to create the user in Grafana is Name, Login handle, and email. -##### The `assertion_attribute_name` option +#### The `assertion_attribute_name` option `assertion_attribute_name` is a special assertion mapping that can either be a simple key, indicating a mapping to a single assertion attribute on the SAML response, or a complex template with variables using the `$__saml{}` syntax. If this property is misconfigured, Grafana will log an error message on startup and disallow SAML sign-ins. Grafana will also log errors after a login attempt if a variable in the template is missing from the SAML response. @@ -125,26 +269,26 @@ By default, new Grafana users using SAML authentication will have an account cre ### Configure team sync -> Team sync support for SAML only available in Grafana v7.0+ +> **Note:** Team sync support for SAML is available in Grafana version 7.0 and later. -To use SAML Team sync, set [`assertion_attribute_groups`]({{< relref ".././enterprise-configuration.md#assertion-attribute-groups" >}}) to the attribute name where you store user groups. Then Grafana will use attribute values extracted from SAML assertion to add user into the groups with the same name configured on the External group sync tab. +To use SAML Team sync, set [`assertion_attribute_groups`]({{< relref "enterprise-configuration.md#assertion-attribute-groups" >}}) to the attribute name where you store user groups. Then Grafana will use attribute values extracted from SAML assertion to add user into the groups with the same name configured on the External group sync tab. -[Learn more about Team Sync]({{< relref "../../enterprise/team-sync.md" >}}) +[Learn more about Team Sync]({{< relref "team-sync.md" >}}) ### Configure role sync -> Only available in Grafana v7.0+ +> **Note:** Available in Grafana version 7.0 and later. -Role sync allows you to map user roles from an identity provider to Grafana. To enable role sync, configure role attribute and possible values for the Editor, Admin, and Grafana Admin roles. For more information about user roles, refer to [About users and permissions]({{< relref "../../administration/manage-users-and-permissions/about-users-and-permissions.md" >}}). +Role sync allows you to map user roles from an identity provider to Grafana. To enable role sync, configure role attribute and possible values for the Editor, Admin, and Grafana Admin roles. For more information about user roles, refer to [About users and permissions]({{< relref "../administration/manage-users-and-permissions/about-users-and-permissions.md" >}}). -1. In the configuration file, set [`assertion_attribute_role`]({{< relref ".././enterprise-configuration.md#assertion-attribute-role" >}}) option to the attribute name where the role information will be extracted from. -1. Set the [`role_values_editor`]({{< relref ".././enterprise-configuration.md#role-values-editor" >}}) option to the values mapped to the `Editor` role. -1. Set the [`role_values_admin`]({{< relref ".././enterprise-configuration.md#role-values-admin" >}}) option to the values mapped to the organization `Admin` role. -1. Set the [`role_values_grafana_admin`]({{< relref ".././enterprise-configuration.md#role-values-grafana-admin" >}}) option to the values mapped to the `Grafana Admin` role. +1. In the configuration file, set [`assertion_attribute_role`]({{< relref "enterprise-configuration.md#assertion-attribute-role" >}}) option to the attribute name where the role information will be extracted from. +1. Set the [`role_values_editor`]({{< relref "enterprise-configuration.md#role-values-editor" >}}) option to the values mapped to the `Editor` role. +1. Set the [`role_values_admin`]({{< relref "enterprise-configuration.md#role-values-admin" >}}) option to the values mapped to the organization `Admin` role. +1. Set the [`role_values_grafana_admin`]({{< relref "enterprise-configuration.md#role-values-grafana-admin" >}}) option to the values mapped to the `Grafana Admin` role. If a user role doesn't match any of configured values, then the `Viewer` role will be assigned. -Refer to [About users and permissions]({{< relref "../../administration/manage-users-and-permissions/about-users-and-permissions.md" >}}) for more information about roles and permissions in Grafana. +Refer to [About users and permissions]({{< relref "../administration/manage-users-and-permissions/about-users-and-permissions.md" >}}) for more information about roles and permissions in Grafana. Example configuration: @@ -160,12 +304,12 @@ role_values_grafana_admin = superadmin ### Configure organization mapping -> Only available in Grafana v7.0+ +> **Note:** Available in Grafana version 7.0 and later. Organization mapping allows you to assign users to particular organization in Grafana depending on attribute value obtained from identity provider. -1. In configuration file, set [`assertion_attribute_org`]({{< relref ".././enterprise-configuration.md#assertion-attribute-org" >}}) to the attribute name you store organization info in. This attribute can be an array if you want a user to be in multiple organizations. -1. Set [`org_mapping`]({{< relref ".././enterprise-configuration.md#org-mapping" >}}) option to the comma-separated list of `Organization:OrgId` pairs to map organization from IdP to Grafana organization specified by id. If you want users to have different roles in multiple organizations, you can set this option to a comma-separated list of `Organization:OrgId:Role` mappings. +1. In configuration file, set [`assertion_attribute_org`]({{< relref "enterprise-configuration.md#assertion-attribute-org" >}}) to the attribute name you store organization info in. This attribute can be an array if you want a user to be in multiple organizations. +1. Set [`org_mapping`]({{< relref "enterprise-configuration.md#org-mapping" >}}) option to the comma-separated list of `Organization:OrgId` pairs to map organization from IdP to Grafana organization specified by id. If you want users to have different roles in multiple organizations, you can set this option to a comma-separated list of `Organization:OrgId:Role` mappings. For example, use following configuration to assign users from `Engineering` organization to the Grafana organization with id `2` as Editor and users from `Sales` - to the org with id `3` as Admin, based on `Org` assertion attribute value: @@ -186,11 +330,11 @@ You can use `*` as an Organization if you want all your users to be in some orga ### Configure allowed organizations -> Only available in Grafana v7.0+ +> **Note:** Available in Grafana version 7.0 and later. -With the [`allowed_organizations`]({{< relref ".././enterprise-configuration.md#allowed-organizations" >}}) option you can specify a list of organizations where the user must be a member of at least one of them to be able to log in to Grafana. +With the [`allowed_organizations`]({{< relref "enterprise-configuration.md#allowed-organizations" >}}) option you can specify a list of organizations where the user must be a member of at least one of them to be able to log in to Grafana. -## Example SAML configuration +### Example SAML configuration ```bash [auth.saml] @@ -213,3 +357,51 @@ role_values_grafana_admin = superadmin org_mapping = Engineering:2:Editor, Engineering:3:Viewer, Sales:3:Editor, *:1:Editor allowed_organizations = Engineering, Sales ``` + +## Troubleshoot SAML authentication in Grafana + +To troubleshoot and get more log information, enable SAML debug logging in the configuration file. Refer to [Configuration]({{< relref "../administration/configuration.md#filters" >}}) for more information. + +```bash +[log] +filters = saml.auth:debug +``` + +## Known issues + +### SAML authentication fails with error: + +- `asn1: structure error: tags don't match` + +We only support one private key format: PKCS#8. + +The keys may be in a different format (PKCS#1 or PKCS#12); in that case, it may be necessary to convert the private key format. + +The following command creates a pkcs8 key file. + +```bash +$ openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes​ +``` + +#### **Convert** the private key format to base64 + +The following command converts keys to base64 format. + +Base64-encode the cert.pem and key.pem files: +(-w0 switch is not needed on Mac, only for Linux) + +```sh +$ base64 -w0 key.pem > key.pem.base64 +$ base64 -w0 cert.pem > cert.pem.base64 +``` + +The base64-encoded values (`key.pem.base64, cert.pem.base64` files) are then used for certificate and private_key. + +The keys you provide should look like: + +``` +-----BEGIN PRIVATE KEY----- +... +... +-----END PRIVATE KEY----- +``` diff --git a/docs/sources/enterprise/datasource_permissions.md b/docs/sources/enterprise/datasource_permissions.md index d79ff9fc49c..a4967eaa402 100644 --- a/docs/sources/enterprise/datasource_permissions.md +++ b/docs/sources/enterprise/datasource_permissions.md @@ -20,7 +20,7 @@ weight: 500 Data source permissions allow you to restrict access for users to query a data source. For each data source there is a permission page that allows you to enable permissions and restrict query permissions to specific **Users** and **Teams**. -> Only available in Grafana Enterprise. +> **Note:** Available in [Grafana Enterprise]({{< relref "../enterprise" >}}) and [Grafana Cloud Pro and Advanced]({{< ref "/docs/grafana-cloud" >}}). ## Enable data source permissions diff --git a/docs/sources/enterprise/enhanced_ldap.md b/docs/sources/enterprise/enhanced_ldap.md index 8da2ba4a99b..d2b86fd4a62 100644 --- a/docs/sources/enterprise/enhanced_ldap.md +++ b/docs/sources/enterprise/enhanced_ldap.md @@ -17,9 +17,9 @@ weight: 600 The enhanced LDAP integration adds additional functionality on top of the [LDAP integration]({{< relref "../auth/ldap.md" >}}) available in the open source edition of Grafana. -> Enhanced LDAP integration is only available in [Grafana Cloud Advanced](https://grafana.com/docs/grafana-cloud/) and in [Grafana Enterprise]({{< relref "../enterprise" >}}). +> **Note:** Available in [Grafana Enterprise]({{< relref "../enterprise" >}}) and [Grafana Cloud Advanced]({{< ref "/docs/grafana-cloud" >}}). -> Refer to [Role-based access control]({{< relref "../enterprise/access-control/_index.md" >}}) in Grafana Enterprise to understand how you can control access with role-based permissions. +> To control user access with role-based permissions, refer to [role-based access control]({{< relref "./access-control" >}}). ## LDAP group synchronization for teams @@ -40,7 +40,7 @@ a user as member of a team, and it will not be removed when the user signs in. T In the open source version of Grafana, user data from LDAP is synchronized only during the login process when authenticating using LDAP. -With active LDAP synchronization, available in Grafana Enterprise v6.3+, you can configure Grafana to actively sync users with LDAP servers in the background. Only users that have logged into Grafana at least once are synchronized. +With active LDAP synchronization, available in Grafana Enterprise version 6.3 and later, you can configure Grafana to actively sync users with LDAP servers in the background. Only users that have logged into Grafana at least once are synchronized. Users with updated role and team membership will need to refresh the page to get access to the new features. diff --git a/docs/sources/enterprise/enterprise-configuration.md b/docs/sources/enterprise/enterprise-configuration.md index 36ce654d29d..2621744f24f 100644 --- a/docs/sources/enterprise/enterprise-configuration.md +++ b/docs/sources/enterprise/enterprise-configuration.md @@ -24,7 +24,7 @@ Defaults to `/license.jwt`. ### license_text -> **Note:** Available in Grafana Enterprise v7.4+. +> **Note:** Available in Grafana Enterprise version 7.4 and later. When set to the text representation (i.e. content of the license file) of the license, Grafana will evaluate and apply the given license to @@ -32,7 +32,7 @@ the instance. ### auto_refresh_license -> **Note:** Available in Grafana Enterprise v7.4+. +> **Note:** Available in Grafana Enterprise version 7.4 and later. When enabled, Grafana will send the license and usage statistics to the license issuer. If the license has been updated on the issuer's @@ -42,7 +42,7 @@ automatically. Defaults to `true`. ### license_validation_type -> **Note:** Available in Grafana Enterprise v8.3+. +> **Note:** Available in Grafana Enterprise version 8.3 and later. When set to `aws`, Grafana will validate its license status with Amazon Web Services (AWS) instead of with Grafana Labs. Only use this setting if you purchased an Enterprise license from AWS Marketplace. Defaults to empty, which means that by default Grafana Enterprise will validate using a license issued by Grafana Labs. For details about licenses issued by AWS, refer to [Activate a Grafana Enterprise license purchased through AWS Marketplace]({{< relref "../enterprise/license/activate-aws-marketplace-license/" >}}). @@ -327,7 +327,7 @@ New duration for renewed tokens. Vault may be configured to ignore this value an ## [security.egress] -> **Note:** Available in Grafana Enterprise v7.4 and later versions. +> **Note:** Available in Grafana Enterprise version 7.4 and later. Security egress makes it possible to control outgoing traffic from the Grafana server. @@ -355,7 +355,7 @@ Encryption algorithm used to encrypt secrets stored in the database and cookies. ## [caching] -> **Note:** Available in Grafana Enterprise v7.5 and later versions. +> **Note:** Available in Grafana Enterprise version 7.5 and later. When query caching is enabled, Grafana can temporarily store the results of data source queries and serve cached responses to similar requests. @@ -371,7 +371,7 @@ Setting 'enabled' to `true` allows users to configure query caching for data sou This value is `true` by default. -> **Note:** This setting enables the caching feature, but it does not turn on query caching for any data source. To turn on query caching for a data source, update the setting on the data source configuration page. For more information, refer to the [query caching docs]({{< relref "./query-caching.md#enable-and-configure-query-caching" >}}). +> **Note:** This setting enables the caching feature, but it does not turn on query caching for any data source. To turn on query caching for a data source, update the setting on the data source configuration page. For more information, refer to the [query caching docs]({{< relref "query-caching.md#enable-and-configure-query-caching" >}}). ### ttl diff --git a/docs/sources/enterprise/enterprise-encryption/using-aws-kms-to-encrypt-database-secrets.md b/docs/sources/enterprise/enterprise-encryption/using-aws-kms-to-encrypt-database-secrets.md index 51877da2748..d4c3dc7d004 100644 --- a/docs/sources/enterprise/enterprise-encryption/using-aws-kms-to-encrypt-database-secrets.md +++ b/docs/sources/enterprise/enterprise-encryption/using-aws-kms-to-encrypt-database-secrets.md @@ -27,7 +27,7 @@ You can use an encryption key from AWS Key Management Service to encrypt secrets 3. Create a [programmatic credential](https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-secret-access-keys) (access key ID and secret access key), which has permission to view the key that you created.

In AWS, you can control access to your KMS keys by using [key policies](https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html), [IAM policies](https://docs.aws.amazon.com/kms/latest/developerguide/iam-policies.html), and [grants](https://docs.aws.amazon.com/kms/latest/developerguide/grants.html). You can also create [temporary credentials](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp_use-resources.html), which must provide a session token along with an access key ID and a secret access key. -4. From within Grafana, turn on [envelope encryption]({{< relref "../../administration//database-encryption.md" >}}). +4. From within Grafana, turn on [envelope encryption]({{< relref "../../administration/database-encryption.md" >}}). 5. Add your AWS KMS details to the Grafana configuration file; depending on your operating system, it is usually named `grafana.ini`:

a. Add a new section to the configuration file, with a name in the format of `[security.encryption.awskms.]`, where `` is any name that uniquely identifies this key among other provider keys.

b. Fill in the section with the following values: diff --git a/docs/sources/enterprise/export-pdf.md b/docs/sources/enterprise/export-pdf.md index 73c56740c8c..aa593c0ccdb 100644 --- a/docs/sources/enterprise/export-pdf.md +++ b/docs/sources/enterprise/export-pdf.md @@ -13,11 +13,11 @@ weight: 1400 # Export dashboard as PDF -You can generate PDFs from any of your dashboards and save it to file. +You can generate and save PDF files from any of your dashboards. -> Only available in Grafana Enterprise v6.7+. +> **Note:** Available in [Grafana Enterprise]({{< relref "../enterprise" >}}). 1. In the upper right corner of the dashboard that you want to export as PDF, click the **Share dashboard** icon. 1. On the PDF tab, select the layout option for exported dashboard: **Portrait** or **Landscape**. -1. Click **Save as PDF** to render dashboard as a PDF document. - Grafana opens the PDF in a new window or browser tab. +1. Click **Save as PDF** to render the dashboard as a PDF file. + Grafana opens the PDF file in a new window or browser tab. diff --git a/docs/sources/enterprise/license/_index.md b/docs/sources/enterprise/license/_index.md index 37352ece76e..9cf66ffcacc 100644 --- a/docs/sources/enterprise/license/_index.md +++ b/docs/sources/enterprise/license/_index.md @@ -14,8 +14,8 @@ weight: 10 When you become a Grafana Enterprise customer, you gain access to Grafana's premium observability features, including enterprise data source plugins, reporting, and role-based access control. In order to use these [enhanced features of Grafana Enterprise]({{< relref "../_index.md" >}}), you must purchase and activate a Grafana Enterprise license. -To purchase a license directly from Grafana Labs, [Contact a Grafana Labs representative](https://grafana.com/contact?about=grafana-enterprise). To activate an Enterprise license purchased from Grafana Labs, refer to [Activate an Enterprise license]({{< relref "./activate-license.md" >}}). +To purchase a license directly from Grafana Labs, [Contact a Grafana Labs representative](https://grafana.com/contact?about=grafana-enterprise). To activate an Enterprise license purchased from Grafana Labs, refer to [Activate an Enterprise license]({{< relref "activate-license.md" >}}). -You can also purchase a Grafana Enterprise license through the AWS Marketplace. To learn more about activating a license purchased through AWS, refer to [Activate a Grafana Enterprise license purchased through AWS Marketplace]({{< relref "../license/activate-aws-marketplace-license" >}}). +You can also purchase a Grafana Enterprise license through the AWS Marketplace. To learn more about activating a license purchased through AWS, refer to [Activate a Grafana Enterprise license purchased through AWS Marketplace]({{< relref "activate-aws-marketplace-license/" >}}). {{< section >}} diff --git a/docs/sources/enterprise/license/activate-aws-marketplace-license/activate-license-on-eks.md b/docs/sources/enterprise/license/activate-aws-marketplace-license/activate-license-on-eks.md index 18a70d719ed..db5fdcda11e 100644 --- a/docs/sources/enterprise/license/activate-aws-marketplace-license/activate-license-on-eks.md +++ b/docs/sources/enterprise/license/activate-aws-marketplace-license/activate-license-on-eks.md @@ -121,6 +121,6 @@ To restart Grafana on a Kubernetes cluster, 1. After you update the service, navigate to your Grafana instance, sign in with Grafana Admin credentials, and navigate to the Statistics and Licensing page to validate that your license is active. -For more information about restarting Grafana, refer to [Restart Grafana]({{< relref "../../../installation/restart-grafana" >}}). +For more information about restarting Grafana, refer to [Restart Grafana]({{< relref "../../../installation/restart-grafana/" >}}). > If you experience issues when you update the EKS cluster, refer to [Amazon EKS troubleshooting](https://docs.aws.amazon.com/eks/latest/userguide/troubleshooting.html). diff --git a/docs/sources/enterprise/license/activate-aws-marketplace-license/activate-license-on-instance-outside-aws.md b/docs/sources/enterprise/license/activate-aws-marketplace-license/activate-license-on-instance-outside-aws.md index 9b472872d54..c6c4937733e 100644 --- a/docs/sources/enterprise/license/activate-aws-marketplace-license/activate-license-on-instance-outside-aws.md +++ b/docs/sources/enterprise/license/activate-aws-marketplace-license/activate-license-on-instance-outside-aws.md @@ -32,7 +32,7 @@ To activate a Grafana Enterprise license from AWS on a Grafana Enterprise instan To install Grafana, refer to the documentation specific to your implementation. - [Install Grafana]({{< relref "../../../installation/" >}}). -- [Run Grafana Docker image]({{< relref "../../../installation/docker" >}}). +- [Run Grafana Docker image]({{< relref "../../../installation/docker/" >}}). - [Deploy Grafana on Kubernetes]({{< relref "../../../installation/kubernetes/#deploy-grafana-enterprise-on-kubernetes" >}}). ## Task 2: Create an AWS IAM user with access to your Grafana Enterprise license @@ -127,4 +127,4 @@ Choose one of the following options to update the [license_validation_type]({{< To activate Grafana Enterprise features, start (or restart) Grafana. -For information about restarting Grafana, refer to [Restart Grafana]({{< relref "../../../installation/restart-grafana" >}}). +For information about restarting Grafana, refer to [Restart Grafana]({{< relref "../../../installation/restart-grafana/" >}}). diff --git a/docs/sources/enterprise/license/activate-aws-marketplace-license/manage-license-in-aws-marketplace.md b/docs/sources/enterprise/license/activate-aws-marketplace-license/manage-license-in-aws-marketplace.md index 861d723031a..4594aa4c42b 100644 --- a/docs/sources/enterprise/license/activate-aws-marketplace-license/manage-license-in-aws-marketplace.md +++ b/docs/sources/enterprise/license/activate-aws-marketplace-license/manage-license-in-aws-marketplace.md @@ -38,4 +38,4 @@ You can use AWS Marketplace to make the following modifications to your Grafana This action retrieves updated license information from AWS. -> To learn more about licensing and active users, refer to [Understanding Grafana Enterprise licensing]({{< relref "../../license/license-restrictions" >}}). +> To learn more about licensing and active users, refer to [Understanding Grafana Enterprise licensing]({{< relref "../../license/license-restrictions/" >}}). diff --git a/docs/sources/enterprise/license/license-restrictions.md b/docs/sources/enterprise/license/license-restrictions.md index 574b72f934f..8f836bfc7c5 100644 --- a/docs/sources/enterprise/license/license-restrictions.md +++ b/docs/sources/enterprise/license/license-restrictions.md @@ -122,7 +122,7 @@ For example, if you purchase 150 licenses, you can have 20 admins, 70 editors, a ### Transition to combined license model To transition from the tiered licensing model to the combined license model, contact your Grafana account team and request to switch to combined user pricing. Once you update your contract with the account team, they will issue you a new license token. -For instructions about how to update your license, refer to [Activate an Enterprise license]({{< relref "./activate-license.md" >}}). +For instructions about how to update your license, refer to [Activate an Enterprise license]({{< relref "activate-license.md" >}}). After you apply the token, Grafana Enterprise resets your license and updates the user counts on the **Utilization** panel. @@ -153,7 +153,7 @@ Your license is controlled by the following rules: **License expiration date:** The license includes an expiration date, which is the date when a license becomes inactive. -As the license expiration date approaches, you will see a banner in Grafana that encourages you to renew. To learn about how to renew your license and what happens in Grafana when a license expires, refer to [License expiration]({{< relref "./license-expiration.md" >}}). +As the license expiration date approaches, you will see a banner in Grafana that encourages you to renew. To learn about how to renew your license and what happens in Grafana when a license expires, refer to [License expiration]({{< relref "license-expiration.md" >}}). **Grafana License URL:** Your license does not work with an instance of Grafana with a different root URL. @@ -175,4 +175,4 @@ Usage billing involves a contractual agreement between you and Grafana Labs, and To increase the number of licensed users within Grafana, extend a license, or change your licensed URL, contact [Grafana support](https://grafana.com/profile/org#support) or your Grafana Labs account team. They will update your license, which you can activate from within Grafana. -For instructions about how to activate your license after it is updated, refer to [Activate an Enterprise license]({{< relref "./activate-license.md" >}}). +For instructions about how to activate your license after it is updated, refer to [Activate an Enterprise license]({{< relref "activate-license.md" >}}). diff --git a/docs/sources/enterprise/query-caching.md b/docs/sources/enterprise/query-caching.md index c0c9b51814d..415d0ca38fb 100644 --- a/docs/sources/enterprise/query-caching.md +++ b/docs/sources/enterprise/query-caching.md @@ -17,6 +17,8 @@ When query caching is enabled, Grafana temporarily stores the results of data so Query caching works for all backend data sources, and queries sent through the data source proxy. You can enable the cache globally and configure the cache duration (also called Time to Live, or TTL). +> **Note:** Available in [Grafana Enterprise]({{< relref "../enterprise" >}}) and [Grafana Cloud Pro and Advanced]({{< ref "/docs/grafana-cloud" >}}). + The following cache backends are available: in-memory, Redis, and Memcached. > **Note:** Storing cached queries in-memory can increase Grafana's memory footprint. In production environments, a Redis or Memcached backend is highly recommended. @@ -35,7 +37,7 @@ You can make a panel retrieve fresh data more frequently by increasing the **Max ## Data sources that work with query caching -Query caching works for all [Enterprise data sources](https://grafana.com/grafana/plugins/?type=datasource&enterprise=1), and it works for the following [built-in data sources]({{< relref "../datasources/_index.md" >}}): +Query caching works for all [Enterprise data sources](https://grafana.com/grafana/plugins/?type=datasource&enterprise=1) as well as the following [built-in data sources]({{< relref "../datasources/_index.md" >}}): - CloudWatch Metrics - Google Cloud Monitoring @@ -65,7 +67,7 @@ By default, data source queries are not cached. To enable query caching for a si > **Note:** If query caching is enabled and the Cache tab is not visible in a data source's settings, then query caching is not available for that data source. -To configure global settings for query caching, refer to the [Query caching section of Enterprise Configuration]({{< relref "./enterprise-configuration.md#caching" >}}). +To configure global settings for query caching, refer to the [Query caching section of Enterprise Configuration]({{< relref "enterprise-configuration.md#caching" >}}). ## Disable query caching @@ -75,7 +77,7 @@ To disable query caching for a single data source: 1. In the data source list, click the data source that you want to turn off caching for. 1. In the Cache tab, click Disable. -To disable query caching for an entire Grafana instance, set the `enabled` flag to `false` in the [Query caching section of Enterprise Configuration]({{< relref "./enterprise-configuration.md#caching" >}}). You will no longer see the Cache tab on any data sources, and no data source queries will be cached. +To disable query caching for an entire Grafana instance, set the `enabled` flag to `false` in the [Query caching section of Enterprise Configuration]({{< relref "enterprise-configuration.md#caching" >}}). You will no longer see the Cache tab on any data sources, and no data source queries will be cached. ## Clear cache diff --git a/docs/sources/enterprise/recorded-queries.md b/docs/sources/enterprise/recorded-queries.md index 599e1c1255b..74b55ee45cf 100644 --- a/docs/sources/enterprise/recorded-queries.md +++ b/docs/sources/enterprise/recorded-queries.md @@ -17,6 +17,8 @@ Recorded queries allow you to see trends over time by taking a snapshot of a dat For our plugins that do not return time series, it might be useful to plot historical data. For example, you might want to query ServiceNow to see a history of request response times but it can only return current point-in-time metrics. +> **Note:** Available in [Grafana Enterprise]({{< relref "../enterprise" >}}). + ## How recorded queries work > **Note:** An administrator must configure a Prometheus data source and associate it with a [Remote write target](#remote-write-target) before recorded queries can be used. diff --git a/docs/sources/enterprise/reporting.md b/docs/sources/enterprise/reporting.md index 9bb0c6de6cd..e29903df652 100644 --- a/docs/sources/enterprise/reporting.md +++ b/docs/sources/enterprise/reporting.md @@ -14,7 +14,7 @@ weight: 800 Reporting allows you to automatically generate PDFs from any of your dashboards and have Grafana email them to interested parties on a schedule. This is available in Grafana Cloud Pro and Advanced and in Grafana Enterprise. -> If you have [Role-based access control]({{< relref "../enterprise/access-control/_index.md" >}}) enabled, for some actions you would need to have relevant permissions. +> If you enabled [Role-based access control]({{< relref "access-control/_index.md" >}}), for some actions users would need to have relevant permissions. > Refer to specific guides to understand what permissions are required. {{< figure src="/static/img/docs/enterprise/reports_list_8.1.png" max-width="500px" class="docs-image--no-shadow" >}} @@ -28,11 +28,11 @@ Any changes you make to a dashboard used in a report are reflected the next time ## Access control -When [RBAC]({{< relref "../enterprise/access-control/_index.md" >}}) is enabled, you need to have the relevant [Permissions]({{< relref "../enterprise/access-control/rbac-fixed-basic-role-definitions" >}}) to create and manage reports. +When [RBAC]({{< relref "access-control/_index.md" >}}) is enabled, you need to have the relevant [Permissions]({{< relref "../enterprise/access-control/rbac-fixed-basic-role-definitions/" >}}) to create and manage reports. ## Create or update a report -Only organization admins can create reports by default. You can customize who can create reports with [Role-based access control]({{< relref "../enterprise/access-control/_index.md" >}}). +Only organization admins can create reports by default. You can customize who can create reports with [Role-based access control]({{< relref "access-control/_index.md" >}}). 1. Click on the reports icon in the side menu. The Reports tab allows you to view, create, and update your reports. 1. Enter report information. All fields are required unless otherwise indicated. @@ -55,7 +55,7 @@ Only organization admins can create reports by default. You can customize who ca ### Choose template variables -> **Note:** Available in Grafana Enterprise version 7.5+ (behind `reportVariables` feature flag) and Grafana Enterprise version 8+ without a feature flag. +> **Note:** Available in [Grafana Enterprise]({{< relref "../enterprise" >}}) version 7.5 and later behind the `reportVariables` feature flag, Grafana Enterprise version 8.0 and later without a feature flag, and [Grafana Cloud Pro and Advanced]({{< ref "/docs/grafana-cloud" >}}). You can configure report-specific template variables for the dashboard on the report page. The variables that you select will override the variables from the dashboard, and they are used when rendering a PDF file of the report. For detailed information about using template variables, refer to the [Templates and variables]({{< relref "../variables/_index.md" >}}) section. @@ -63,7 +63,7 @@ You can configure report-specific template variables for the dashboard on the re ### Render a report with panels or rows set to repeat by a variable -> **Note:** Available in Grafana Enterprise v8+. +> **Note:** Available in [Grafana Enterprise]({{< relref "../enterprise" >}}) version 8.0 and later, and [Grafana Cloud Pro and Advanced]({{< ref "/docs/grafana-cloud" >}}). You can include dynamic dashboards with panels or rows, set to repeat by a variable, into reports. For detailed information about setting up repeating panels or rows in dashboards, refer to the [Repeat panels or rows]({{< relref "../panels/add-panels-dynamically/" >}}) section. @@ -75,7 +75,7 @@ You can include dynamic dashboards with panels or rows, set to repeat by a varia ### Report time range -> Setting custom report time range is available in Grafana Enterprise v7.2+. +> **Note:** You can set custom report time ranges in [Grafana Enterprise]({{< relref "../enterprise" >}}) 7.2+ and [Grafana Cloud Pro and Advanced]({{< ref "/docs/grafana-cloud" >}}). By default, reports use the saved time range of the dashboard. Changing the time range of the report can be done by: @@ -84,11 +84,11 @@ By default, reports use the saved time range of the dashboard. Changing the time The page header of the report displays the time range for the dashboard's data queries. Dashboards set to use the browser's time zone will use the time zone on the Grafana server. -If the time zone is set differently between your Grafana server and its remote image renderer, then the time ranges in the report might be different between the page header and the time axes in the panels. To avoid this, set the time zone to UTC for dashboards when using a remote renderer. Each dashboard's time zone setting is visible in the [time range controls]({{< relref "../dashboards/time-range-controls.md/#dashboard-time-settings" >}}). +If the time zone is set differently between your Grafana server and its remote image renderer, then the time ranges in the report might be different between the page header and the time axes in the panels. To avoid this, set the time zone to UTC for dashboards when using a remote renderer. Each dashboard's time zone setting is visible in the [time range controls]({{< relref "../dashboards/time-range-controls.md#dashboard-time-settings" >}}). ### Layout and orientation -> We're actively working on developing new report layout options. [Contact us](https://grafana.com/contact?about=grafana-enterprise&topic=design-process&value=reporting) if you would like to get involved in the design process. +> We're actively developing new report layout options. [Contact us](https://grafana.com/contact?about=grafana-enterprise&topic=design-process&value=reporting) to get involved in the design process. | Layout | Orientation | Support | Description | Preview | | ------ | ----------- | ------- | --------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | @@ -99,7 +99,7 @@ If the time zone is set differently between your Grafana server and its remote i ### CSV export -> **Note:** Only available in Grafana Enterprise v8.0+, with the [Grafana image renderer plugin](https://grafana.com/grafana/plugins/grafana-image-renderer) v3.0+. +> **Note:** Available in [Grafana Enterprise]({{< relref "../enterprise" >}}) 8+ with the [Grafana image renderer plugin](https://grafana.com/grafana/plugins/grafana-image-renderer) v3.0+, and [Grafana Cloud Pro and Advanced]({{< ref "/docs/grafana-cloud" >}}). You can attach a CSV file to the report email for each table panel on the selected dashboard, along with the PDF report. By default, CSVs larger than 10Mb won't be sent to avoid email servers to reject the email. You can increase or decrease this limit in the [reporting configuration]({{< relref "#rendering-configuration" >}}). @@ -111,9 +111,10 @@ A background job runs every 10 minutes and removes temporary CSV files. You can ### Scheduling -> Note: Scheduler has been significantly changed in Grafana Enterprise v8.1. +> **Note:** Available in [Grafana Enterprise]({{< relref "../enterprise" >}}) version 8.0 and later, and [Grafana Cloud Pro and Advanced]({{< ref "/docs/grafana-cloud" >}}). +> The scheduler was significantly changed in Grafana Enterprise version 8.1. -Scheduled reports can be sent once or repeatedly on an hourly, daily, weekly, or monthly basis, or at custom intervals. You can also disable scheduling by selecting **Never**: for example, if you want to send the report via the API. +Scheduled reports can be sent once, or repeated on an hourly, daily, weekly, or monthly basis, or sent at custom intervals. You can also disable scheduling by selecting **Never**, for example to send the report via the API. {{< figure src="/static/img/docs/enterprise/reports_scheduler_8.1.png" max-width="500px" class="docs-image--no-shadow" >}} @@ -133,7 +134,7 @@ When you schedule a report with a monthly frequency, and set the start date betw ### Send test email -> Only available in Grafana Enterprise v7.0+. +> **Note:** Available in [Grafana Enterprise]({{< relref "../enterprise" >}}) version 7.0 and later, and [Grafana Cloud Pro and Advanced]({{< ref "/docs/grafana-cloud" >}}). 1. In the report, click **Send test email**. 1. In the Email field, enter the email address or addresses that you want to test, separated by semicolon. @@ -146,13 +147,13 @@ The last saved version of the report will be sent to selected emails. You can us ## Pause report -> **Note:** Available in Grafana Enterprise v8+. +> **Note:** Available in [Grafana Enterprise]({{< relref "../enterprise" >}}) version 8.0 and later, and [Grafana Cloud Pro and Advanced]({{< ref "/docs/grafana-cloud" >}}). You can pause sending of reports from the report list view by clicking the pause icon. The report will not be sent according to its schedule until it is resumed by clicking the resume button on the report row. ## Send report via the API -You can send reports programmatically with the [send report]({{< relref "../developers/http_api/reporting.md#send-report" >}}) endpoint in the [HTTP APIs]({{< relref "../developers/http_api" >}}). +You can send reports programmatically with the [send report]({{< relref "../developers/http_api/reporting.md#send-report" >}}) endpoint in the [HTTP APIs]({{< relref "../developers/http_api/" >}}). ## Rendering configuration @@ -187,14 +188,15 @@ font_italic = DejaVuSansCondensed-Oblique.ttf ## Reports settings -> **Note:** Available in Grafana Enterprise v7.2+. +> **Note:** Available in [Grafana Enterprise]({{< relref "../enterprise" >}}) version 7.2 and later, and [Grafana Cloud Pro and Advanced]({{< ref "/docs/grafana-cloud" >}}). You can configure organization-wide report settings in the **Settings** tab on the **Reporting** page. Settings are applied to all the reports for current organization. You can customize the branding options. Report branding: -**Company logo URL** - Company logo displayed in the report PDF. Defaults to the Grafana logo. + +- **Company logo URL** - Company logo displayed in the report PDF. Defaults to the Grafana logo. Email branding: diff --git a/docs/sources/enterprise/request-security.md b/docs/sources/enterprise/request-security.md index d02ded36429..4b307941d22 100644 --- a/docs/sources/enterprise/request-security.md +++ b/docs/sources/enterprise/request-security.md @@ -12,17 +12,12 @@ weight: 400 # Request security -> **Note:** Available in Grafana Enterprise v7.4 and later versions. - -Request security makes it possible to limit requests from the Grafana server, and it targets requests that are generated by users. - -For example: - -- Data source metric queries -- Alert notifications +Request security allows you to limit requests from the Grafana server by targeting requests generated by users, such as data source metric queries and alert notifications. This can be used to limit access to internal systems that the server Grafana runs on can access but that users of Grafana should not be able to access. This feature does not affect traffic from the Grafana users browser. +> **Note:** Available in [Grafana Enterprise]({{< relref "../enterprise" >}}) version 7.4 and later, and [Grafana Cloud Pro and Advanced]({{< ref "/docs/grafana-cloud" >}}). + > **Note:** Although request security works with backend plugins, you can create a backend plugin that bypasses this security. ## IP and hostname blocking diff --git a/docs/sources/enterprise/saml/_index.md b/docs/sources/enterprise/saml/_index.md deleted file mode 100644 index a343bffb002..00000000000 --- a/docs/sources/enterprise/saml/_index.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -aliases: - - /docs/grafana/latest/auth/saml/ - - /docs/grafana/latest/enterprise/saml/ -description: Grafana SAML authentication -keywords: - - grafana - - saml - - documentation - - saml-auth - - enterprise -title: SAML authentication -weight: 10 ---- - -# SAML authentication - -SAML authentication integration enables your Grafana users to log in by using an external SAML 2.0 Identity Provider (IdP). To enable this, Grafana becomes a Service Provider (SP) in the authentication flow, interacting with the IdP to exchange user information. - -> Only available in Grafana Enterprise v6.3+. If you experience any issues with our implementation, contact our [Technical Support team](https://grafana.com/contact?plcmt=top-nav&cta=contactus) - -{{< section >}} diff --git a/docs/sources/enterprise/saml/about-saml.md b/docs/sources/enterprise/saml/about-saml.md deleted file mode 100644 index b42bd19a054..00000000000 --- a/docs/sources/enterprise/saml/about-saml.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -aliases: - - /docs/grafana/latest/auth/saml/ - - /docs/grafana/latest/enterprise/saml/about-saml/ -description: SAML authentication -keywords: - - grafana - - saml - - documentation - - saml-auth - - enterprise -menuTitle: About SAML authentication -title: About SAML authentication in Grafana -weight: 20 ---- - -# About SAML authentication - -SAML authentication integration allows your Grafana users to log in by using an external SAML 2.0 Identity Provider (IdP). To enable this, Grafana becomes a Service Provider (SP) in the authentication flow, interacting with the IdP to exchange user information. - -The SAML single sign-on (SSO) standard is varied and flexible. Our implementation contains a subset of features needed to provide a smooth authentication experience into Grafana. - -> Only available in Grafana Enterprise v6.3+. If you encounter any problems with our implementation, please don't hesitate to contact us. - -## Supported SAML - -Grafana supports the following SAML 2.0 bindings: - -- From the Service Provider (SP) to the Identity Provider (IdP): - - - `HTTP-POST` binding - - `HTTP-Redirect` binding - -- From the Identity Provider (IdP) to the Service Provider (SP): - - `HTTP-POST` binding - -In terms of security: - -- Grafana supports signed and encrypted assertions. -- Grafana does not support signed or encrypted requests. - -In terms of initiation, Grafana supports: - -- SP-initiated requests -- IdP-initiated requests - -By default, SP-initiated requests are enabled. For instructions on how to enable IdP-initiated logins, refer to [IdP-initiated]({{< relref "./configure-saml/#idp-initiated-single-sign-on-sso" >}}) to get more information. - -### Edit SAML options in the Grafana config file - -Once you have enabled saml, you can configure Grafana to use it for SAML authentication. Refer to [Configure SAML Authentication]({{< relref "./configure-saml.md#" >}}) to get more information about how to configure Grafana. diff --git a/docs/sources/enterprise/saml/enable-saml.md b/docs/sources/enterprise/saml/enable-saml.md deleted file mode 100644 index d6e104d7a24..00000000000 --- a/docs/sources/enterprise/saml/enable-saml.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -aliases: - - /docs/grafana/latest/auth/saml/ - - /docs/grafana/latest/enterprise/saml/enable-saml/ -description: This contains information to enable SAML authentication in Grafana -keywords: - - grafana - - saml - - documentation - - saml-auth - - enterprise -menuTitle: Enable SAML authentication -title: Enable SAML authentication in Grafana -weight: 30 ---- - -# Enable SAML authentication in Grafana - -To use the SAML integration, in the `auth.saml` section of in the Grafana custom configuration file, set `enabled` to `true`. - -Refer to [Configuration]({{< relref "../../administration/configuration.md" >}}) for more information about configuring Grafana. - -## Certificate and private key - -The SAML SSO standard uses asymmetric encryption to exchange information between the SP (Grafana) and the IdP. To perform such encryption, you need a public part and a private part. In this case, the X.509 certificate provides the public part, while the private key provides the private part. The private key needs to be issued in a [PKCS#8](https://en.wikipedia.org/wiki/PKCS_8) format. - -Grafana supports two ways of specifying both the `certificate` and `private_key`. - -- Without a suffix (`certificate` or `private_key`), the configuration assumes you've supplied the base64-encoded file contents. -- With the `_path` suffix (`certificate_path` or `private_key_path`), then Grafana treats the value entered as a file path and attempts to read the file from the file system. - -> **Note:** You can only use one form of each configuration option. Using multiple forms, such as both `certificate` and `certificate_path`, results in an error. - ---- - -### **Example** of how to generate SAML credentials: - -An example of how to generate a self-signed certificate and private key that's valid for one year: - -```sh -$ openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes​ -``` - -Base64-encode the cert.pem and key.pem files: -(-w0 switch is not needed on Mac, only for Linux) - -```sh -$ base64 -w0 key.pem > key.pem.base64 -$ base64 -w0 cert.pem > cert.pem.base64 -``` - -The base64-encoded values (`key.pem.base64, cert.pem.base64` files) are then used for certificate and private_key. - -The keys you provide should look like: - -``` ------BEGIN PRIVATE KEY----- -... -... ------END PRIVATE KEY----- -``` diff --git a/docs/sources/enterprise/saml/set-up-saml-with-okta.md b/docs/sources/enterprise/saml/set-up-saml-with-okta.md deleted file mode 100644 index 9de28106e78..00000000000 --- a/docs/sources/enterprise/saml/set-up-saml-with-okta.md +++ /dev/null @@ -1,82 +0,0 @@ ---- -aliases: - - /docs/grafana/latest/enterprise/saml/set-up-saml-with-okta/ -description: This is a guide to set up SAML authentication with Okta in Grafana -keywords: - - grafana - - saml - - documentation - - saml-auth - - enterprise -menuTitle: SAML authentication with Okta -title: Set up SAML authentication with Okta in Grafana -weight: 30 ---- - -# Set up SAML with Okta - -Grafana supports user authentication through Okta, which is useful when you want your users to access Grafana using single sign on. This guide will follow you through the steps of configuring SAML authentication in Grafana with [Okta](https://okta.com/). You need to be an admin in your Okta organization to access Admin Console and create SAML integration. You also need permissions to edit Grafana config file and restart Grafana server. - -## Before you begin - -- To configure SAML integration with Okta, create integration inside the Okta organization first. [Add integration in Okta](https://help.okta.com/en/prod/Content/Topics/Apps/apps-overview-add-apps.htm) -- Ensure you have permission to administer SAML authentication. For more information about permissions, refer to [About users and permissions]({{< relref "../../administration/manage-users-and-permissions/about-users-and-permissions.md#" >}}). - -**To set up SAML with Okta:** - -1. Log in to the [Okta portal](https://login.okta.com/). -1. Go to the Admin Console in your Okta organization by clicking **Admin** in the upper-right corner. If you are in the Developer Console, then click **Developer Console** in the upper-left corner and then click **Classic UI** to switch over to the Admin Console. -1. In the Admin Console, navigate to **Applications** > **Applications**. -1. Click **Add Application**. -1. Click **Create New App** to start the Application Integration Wizard. -1. Choose **Web** as a platform. -1. Select **SAML 2.0** in the Sign on method section. -1. Click **Create**. -1. On the **General Settings** tab, enter a name for your Grafana integration. You can also upload a logo. -1. On the **Configure SAML** tab, enter the SAML information related to your Grafana instance: - - - In the **Single sign on URL** field, use the `/saml/acs` endpoint URL of your Grafana instance, for example, `https://grafana.example.com/saml/acs`. - - In the **Audience URI (SP Entity ID)** field, use the `/saml/metadata` endpoint URL, for example, `https://grafana.example.com/saml/metadata`. - - Leave the default values for **Name ID format** and **Application username**. - - In the **ATTRIBUTE STATEMENTS (OPTIONAL)** section, enter the SAML attributes to be shared with Grafana, for example: - - | Attribute name (in Grafana) | Value (in Okta profile) | - | --------------------------- | -------------------------------------- | - | Login | `user.login` | - | Email | `user.email` | - | DisplayName | `user.firstName + " " + user.lastName` | - - - In the **GROUP ATTRIBUTE STATEMENTS (OPTIONAL)** section, enter a group attribute name (for example, `Group`) and set filter to `Matches regex .*` to return all user groups. - -1. Click **Next**. -1. On the final Feedback tab, fill out the form and then click **Finish**. - -**Edit SAML options for Okta in Grafana config file:** - -1. In the `[auth.saml]` section in the Grafana configuration file, set [`enabled`]({{< relref ".././enterprise-configuration.md#enabled" >}}) to `true`. -1. Configure the [certificate and private key]({{< relref "#certificate-and-private-key" >}}). -1. On the Okta application page where you have been redirected after application created, navigate to the **Sign On** tab and find **Identity Provider metadata** link in the **Settings** section. -1. Set the [`idp_metadata_url`]({{< relref ".././enterprise-configuration.md#idp-metadata-url" >}}) to the URL obtained from the previous step. The URL should look like `https://.okta.com/app//sso/saml/metadata`. -1. Set the following options to the attribute names configured at the **step 10** of the SAML integration setup. You can find this attributes on the **General** tab of the application page (**ATTRIBUTE STATEMENTS** and **GROUP ATTRIBUTE STATEMENTS** in the **SAML Settings** section). - - [`assertion_attribute_login`]({{< relref ".././enterprise-configuration.md#assertion-attribute-login" >}}) - - [`assertion_attribute_email`]({{< relref ".././enterprise-configuration.md#assertion-attribute-email" >}}) - - [`assertion_attribute_name`]({{< relref ".././enterprise-configuration.md#assertion-attribute-name" >}}) - - [`assertion_attribute_groups`]({{< relref ".././enterprise-configuration.md#assertion-attribute-groups" >}}) -1. Save the configuration file and and then restart the Grafana server. - -When you are finished, the Grafana configuration might look like this example: - -```bash -[server] -root_url = https://grafana.example.com - -[auth.saml] -enabled = true -private_key_path = "/path/to/private_key.pem" -certificate_path = "/path/to/certificate.cert" -idp_metadata_url = "https://my-org.okta.com/app/my-application/sso/saml/metadata" -assertion_attribute_name = DisplayName -assertion_attribute_login = Login -assertion_attribute_email = Email -assertion_attribute_groups = Group -``` diff --git a/docs/sources/enterprise/saml/troubleshoot-saml.md b/docs/sources/enterprise/saml/troubleshoot-saml.md deleted file mode 100644 index 678c105c197..00000000000 --- a/docs/sources/enterprise/saml/troubleshoot-saml.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -aliases: - - /docs/grafana/latest/auth/saml/ - - /docs/grafana/latest/enterprise/saml/troubleshoot-saml/ -description: This contains information on how to troubleshoot SAML authentication - in Grafana -keywords: - - grafana - - saml - - documentation - - saml-auth - - enterprise -menuTitle: Troubleshoot SAML Authentication -title: Troubleshoot SAML Authentication in Grafana -weight: 50 ---- - -# Troubleshoot SAML authentication in Grafana - -To troubleshoot and get more log information, enable SAML debug logging in the configuration file. Refer to [Configuration]({{< relref "../../administration/configuration.md#filters" >}}) for more information. - -```bash -[log] -filters = saml.auth:debug -``` - -## Known issues - -### SAML authentication fails with error: - -- `asn1: structure error: tags don't match` - -We only support one private key format: PKCS#8. - -The keys may be in a different format (PKCS#1 or PKCS#12); in that case, it may be necessary to convert the private key format. - -The following command creates a pkcs8 key file. - -```bash -$ openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes​ -``` - -#### **Convert** the private key format to base64 - -The following command converts keys to base64 format. - -Base64-encode the cert.pem and key.pem files: -(-w0 switch is not needed on Mac, only for Linux) - -```sh -$ base64 -w0 key.pem > key.pem.base64 -$ base64 -w0 cert.pem > cert.pem.base64 -``` - -The base64-encoded values (`key.pem.base64, cert.pem.base64` files) are then used for certificate and private_key. - -The keys you provide should look like: - -``` ------BEGIN PRIVATE KEY----- -... -... ------END PRIVATE KEY----- -``` diff --git a/docs/sources/enterprise/settings-updates.md b/docs/sources/enterprise/settings-updates.md index a33c6c573a5..44fc259aeef 100644 --- a/docs/sources/enterprise/settings-updates.md +++ b/docs/sources/enterprise/settings-updates.md @@ -12,9 +12,9 @@ weight: 500 # Settings updates at runtime -> **Note:** Available in Grafana Enterprise v8.0+. +> **Note:** Available in Grafana Enterprise version 8.0 and later. -Settings updates at runtime allows you to update Grafana settings with no need to restart the Grafana server. +By updating settings at runtime, you can update Grafana settings without needing to restart the Grafana server. Updates that happen at runtime are stored in the database and override [settings from the other sources](https://grafana.com/docs/grafana/latest/administration/configuration/) @@ -92,5 +92,5 @@ HTTP API, then the other instances are synchronized through the database and the ## Control access with role-based access control -If you have [Role-based access control]({{< relref "../enterprise/access-control/_index.md" >}}) enabled, you can control who can read or update settings. +If you have [role-based access control]({{< relref "../enterprise/access-control/_index.md" >}}) enabled, you can control who can read or update settings. Refer to the [Admin API]({{< relref "../developers/http_api/admin.md#update-settings" >}}) for more information. diff --git a/docs/sources/enterprise/team-sync.md b/docs/sources/enterprise/team-sync.md index 21d63ede58c..59792b01bf3 100644 --- a/docs/sources/enterprise/team-sync.md +++ b/docs/sources/enterprise/team-sync.md @@ -17,7 +17,7 @@ weight: 1000 Team sync lets you set up synchronization between your auth providers teams and teams in Grafana. This enables LDAP, OAuth, or SAML users who are members of certain teams or groups to automatically be added or removed as members of certain teams in Grafana. -> Available in Grafana Cloud Pro and Advanced and in Grafana Enterprise. +> **Note:** Available in [Grafana Enterprise]({{< relref "../enterprise" >}}) and [Grafana Cloud Advanced]({{< ref "/docs/grafana-cloud" >}}). Grafana keeps track of all synchronized users in teams, and you can see which users have been synchronized in the team members list, see `LDAP` label in screenshot. This mechanism allows Grafana to remove an existing synchronized user from a team when its group membership changes. This mechanism also enables you to manually add a user as member of a team, and it will not be removed when the user signs in. This gives you flexibility to combine LDAP group memberships and Grafana team memberships. @@ -34,7 +34,7 @@ This mechanism allows Grafana to remove an existing synchronized user from a tea - [GitLab OAuth]({{< relref "../auth/gitlab.md#team-sync-enterprise-only" >}}) - [LDAP]({{< relref "enhanced_ldap.md#ldap-group-synchronization-for-teams" >}}) - [Okta]({{< relref "../auth/okta.md#team-sync-enterprise-only" >}}) -- [SAML]({{< relref "./saml/configure-saml.md#configure-team-sync" >}}) +- [SAML]({{< relref "configure-saml.md#configure-team-sync" >}}) ## Synchronize a Grafana team with an external group diff --git a/docs/sources/enterprise/usage-insights/_index.md b/docs/sources/enterprise/usage-insights/_index.md index 608689eef55..abb1c085024 100644 --- a/docs/sources/enterprise/usage-insights/_index.md +++ b/docs/sources/enterprise/usage-insights/_index.md @@ -14,6 +14,8 @@ weight: 200 Usage insights allow you to have a better understanding of how your Grafana instance is used. +> **Note:** Available in [Grafana Enterprise]({{< relref "../../enterprise" >}}) and [Grafana Cloud Pro and Advanced]({{< ref "/docs/grafana-cloud" >}}). + The usage insights feature collects a number of aggregated data and stores them in the database: - Dashboard views (aggregated and per user) diff --git a/docs/sources/enterprise/usage-insights/dashboard-datasource-insights.md b/docs/sources/enterprise/usage-insights/dashboard-datasource-insights.md index e284d0a016b..2a6bff4b413 100644 --- a/docs/sources/enterprise/usage-insights/dashboard-datasource-insights.md +++ b/docs/sources/enterprise/usage-insights/dashboard-datasource-insights.md @@ -16,7 +16,7 @@ For every dashboard and data source, you can access usage information. ## Dashboard insights -> **Note:** Available in Grafana Enterprise v7.0+. +> **Note:** Available in [Grafana Enterprise]({{< relref "../../enterprise" >}}) version 7.0 and later, and [Grafana Cloud Pro and Advanced]({{< ref "/docs/grafana-cloud" >}}). To see dashboard usage information, go to the top bar and click **Dashboard insights**. @@ -31,7 +31,7 @@ Dashboard insights show the following information: ## Data source insights -> **Note:** Available in Grafana Enterprise v7.3+. +> **Note:** Available in [Grafana Enterprise]({{< relref "../../enterprise" >}}) version 7.3 and later, and [Grafana Cloud Pro and Advanced]({{< ref "/docs/grafana-cloud" >}}). Data source insights give you information about how a data source has been used in the past 30 days, such as: diff --git a/docs/sources/enterprise/usage-insights/export-logs.md b/docs/sources/enterprise/usage-insights/export-logs.md index dcd7cef2316..7b569afc2a5 100644 --- a/docs/sources/enterprise/usage-insights/export-logs.md +++ b/docs/sources/enterprise/usage-insights/export-logs.md @@ -13,7 +13,7 @@ weight: 500 # Export logs of usage insights -> **Note:** Available in Grafana Enterprise v7.4+. +> **Note:** Available in [Grafana Enterprise]({{< relref "../../enterprise" >}}) version 7.4 and later, and [Grafana Cloud Pro and Advanced]({{< ref "/docs/grafana-cloud" >}}). By exporting usage logs to Loki, you can directly query them and create dashboards of the information that matters to you most, such as dashboard errors, most active organizations, or your top-10 most-used queries. diff --git a/docs/sources/enterprise/usage-insights/improved-search.md b/docs/sources/enterprise/usage-insights/improved-search.md index 14b873be8c7..24b0ee175e3 100644 --- a/docs/sources/enterprise/usage-insights/improved-search.md +++ b/docs/sources/enterprise/usage-insights/improved-search.md @@ -13,7 +13,7 @@ weight: 400 # Sort dashboards by using insights data -> **Note:** Available in Grafana Enterprise v7.0+. +> **Note:** Available in [Grafana Enterprise]({{< relref "../../enterprise" >}}) version 7.0 and later, and [Grafana Cloud Pro and Advanced]({{< ref "/docs/grafana-cloud" >}}). In the search view, you can sort dashboards by using insights data. Doing so helps you find unused or broken dashboards or discover those that are most viewed. diff --git a/docs/sources/enterprise/usage-insights/presence-indicator.md b/docs/sources/enterprise/usage-insights/presence-indicator.md index a84f0245839..499fcb727a7 100644 --- a/docs/sources/enterprise/usage-insights/presence-indicator.md +++ b/docs/sources/enterprise/usage-insights/presence-indicator.md @@ -12,7 +12,7 @@ weight: 300 # Presence indicator -> **Note:** Available in Grafana Enterprise v7.0+. +> **Note:** Available in [Grafana Enterprise]({{< relref "../../enterprise" >}}) version 7.0 and later, and [Grafana Cloud Pro and Advanced]({{< ref "/docs/grafana-cloud" >}}). When you are signed in and looking at any given dashboard, you can know who is looking at the same dashboard as you are via a presence indicator, which displays avatars of users who have interacted with the dashboard recently. The default time frame is within the past 10 minutes. To see the user's name, hover over the user's avatar. The avatars come from [Gravatar](https://gravatar.com) based on the user's email. diff --git a/docs/sources/enterprise/vault.md b/docs/sources/enterprise/vault.md index de6a7574096..592e09462a0 100644 --- a/docs/sources/enterprise/vault.md +++ b/docs/sources/enterprise/vault.md @@ -12,10 +12,9 @@ weight: 1200 # Vault integration -> Only available in Grafana Enterprise v7.1+. +If you manage your secrets with [Hashicorp Vault](https://www.hashicorp.com/products/vault), you can use them for [Configuration]({{< relref "../administration/configuration.md" >}}) and [Provisioning]({{< relref "../administration/provisioning.md" >}}). -If you manage your secrets with [Hashicorp Vault](https://www.hashicorp.com/products/vault), you can use them for [Configuration]({{< relref "../administration/configuration.md" >}}) -and [Provisioning]({{< relref "../administration/provisioning.md" >}}). +> **Note:** Available in [Grafana Enterprise]({{< relref "../enterprise" >}}) and [Grafana Cloud Advanced]({{< ref "/docs/grafana-cloud" >}}). > **Note:** If you have Grafana [set up for high availability]({{< relref "../administration/set-up-for-high-availability.md" >}}), then we advise not to use dynamic secrets for provisioning files. > Each Grafana instance is responsible for renewing its own leases. Your data source leases might expire when one of your Grafana servers shuts down. diff --git a/docs/sources/enterprise/white-labeling.md b/docs/sources/enterprise/white-labeling.md index 61620ab30f9..244ed3c7e32 100644 --- a/docs/sources/enterprise/white-labeling.md +++ b/docs/sources/enterprise/white-labeling.md @@ -14,7 +14,7 @@ weight: 1300 White labeling allows you to replace the Grafana brand and logo with your own corporate brand and logo. -> Only available in Grafana Enterprise v6.6+. +> **Note:** Available in [Grafana Enterprise]({{< relref "../enterprise" >}}) and [Grafana Cloud Advanced]({{< ref "/docs/grafana-cloud" >}}). Grafana Enterprise has white labeling options in the `grafana.ini` file. As with all configuration options, you can also set them with environment variables. diff --git a/docs/sources/getting-started/getting-started.md b/docs/sources/getting-started/getting-started.md index 860e47699e0..623374e9cec 100644 --- a/docs/sources/getting-started/getting-started.md +++ b/docs/sources/getting-started/getting-started.md @@ -41,7 +41,7 @@ To create your first dashboard: 1. Click the **+** icon on the side menu. 1. On the dashboard, click **Add an empty panel**. 1. In the New dashboard/Edit panel view, go to the **Query** tab. -1. Configure your [query]({{< relref "../panels/query-a-data-source/add-a-query" >}}) by selecting `-- Grafana --` from the data source selector. This generates the Random Walk dashboard. +1. Configure your [query]({{< relref "../panels/query-a-data-source/add-a-query/" >}}) by selecting `-- Grafana --` from the data source selector. This generates the Random Walk dashboard. 1. Click the **Save** icon in the top right corner of your screen to save the dashboard. 1. Add a descriptive name, and then click **Save**. @@ -49,7 +49,7 @@ Congratulations, you have created your first dashboard and it is displaying resu ## Next steps -Continue to experiment with what you have built, try the [explore workflow]({{< relref "../explore/_index.md" >}}) or another visualization feature. Refer to [Data sources]({{< relref "../datasources" >}}) for a list of supported data sources and instructions on how to [add a data source]({{< relref "../datasources/add-a-data-source.md" >}}). The following topics will be of interest to you: +Continue to experiment with what you have built, try the [explore workflow]({{< relref "../explore/_index.md" >}}) or another visualization feature. Refer to [Data sources]({{< relref "../datasources/" >}}) for a list of supported data sources and instructions on how to [add a data source]({{< relref "../datasources/add-a-data-source.md" >}}). The following topics will be of interest to you: - [Panels]({{< relref "../panels/_index.md" >}}) - [Dashboards]({{< relref "../dashboards/_index.md" >}}) diff --git a/docs/sources/image-rendering/_index.md b/docs/sources/image-rendering/_index.md index 4b293b79495..db5a21ea205 100644 --- a/docs/sources/image-rendering/_index.md +++ b/docs/sources/image-rendering/_index.md @@ -143,7 +143,7 @@ RENDERING_MODE=reusable #### Optimize the performance, CPU and memory usage of the image renderer -The performance and resources consumption of the different modes depend a lot on the number of concurrent requests your service is handling. To understand how many concurrent requests your service is handling, [monitor your image renderer service]({{< relref "./monitoring/" >}}). +The performance and resources consumption of the different modes depend a lot on the number of concurrent requests your service is handling. To understand how many concurrent requests your service is handling, [monitor your image renderer service]({{< relref "monitoring/" >}}). With no concurrent requests, the different modes show very similar performance and CPU / memory usage. diff --git a/docs/sources/image-rendering/monitoring.md b/docs/sources/image-rendering/monitoring.md index 33c1331d95a..57744a1faaf 100644 --- a/docs/sources/image-rendering/monitoring.md +++ b/docs/sources/image-rendering/monitoring.md @@ -14,7 +14,7 @@ weight: 100 # Monitoring the image renderer -Rendering images requires a lot of memory, mainly because Grafana creates browser instances in the background for the actual rendering. Monitoring your service can help you allocate the right amount of resources to your rendering service and set the right [rendering mode]({{< relref "./#rendering-mode" >}}). +Rendering images requires a lot of memory, mainly because Grafana creates browser instances in the background for the actual rendering. Monitoring your service can help you allocate the right amount of resources to your rendering service and set the right [rendering mode]({{< relref "/#rendering-mode" >}}). ## Enable Prometheus metrics endpoint diff --git a/docs/sources/image-rendering/troubleshooting.md b/docs/sources/image-rendering/troubleshooting.md index d8f272892ee..736f27c9adb 100644 --- a/docs/sources/image-rendering/troubleshooting.md +++ b/docs/sources/image-rendering/troubleshooting.md @@ -29,9 +29,9 @@ filters = rendering:debug You can also enable more logs in image renderer service itself by: -- Increasing the [log level]({{< relref "./#log-level" >}}). -- Enabling [verbose logging]({{< relref "./#verbose-logging" >}}). -- [Capturing headless browser output]({{< relref "./#capture-browser-output" >}}). +- Increasing the [log level]({{< relref "/#log-level" >}}). +- Enabling [verbose logging]({{< relref "/#verbose-logging" >}}). +- [Capturing headless browser output]({{< relref "/#capture-browser-output" >}}). ## Missing libraries diff --git a/docs/sources/installation/_index.md b/docs/sources/installation/_index.md index b5b3714c7c2..7632b9ee849 100644 --- a/docs/sources/installation/_index.md +++ b/docs/sources/installation/_index.md @@ -17,13 +17,13 @@ weight: 30 This section discusses the hardware and software requirements as well as the process of installing Grafana on different operating systems. This section has the following topics: -- [Requirements]({{< relref "requirements" >}}) -- [Install on Debian or Ubuntu]({{< relref "debian" >}}) -- [Install on RPM-based Linux (CentOS, Fedora, OpenSuse, RedHat)]({{< relref "rpm" >}}) -- [Install on macOS]({{< relref "mac" >}}) -- [Install on Windows]({{< relref "windows" >}}) -- [Run Docker image]({{< relref "docker" >}}) -- [Deploy Grafana on Kubernetes]({{< relref "kubernetes" >}}) +- [Requirements]({{< relref "requirements/" >}}) +- [Install on Debian or Ubuntu]({{< relref "debian/" >}}) +- [Install on RPM-based Linux (CentOS, Fedora, OpenSuse, RedHat)]({{< relref "rpm/" >}}) +- [Install on macOS]({{< relref "mac/" >}}) +- [Install on Windows]({{< relref "windows/" >}}) +- [Run Docker image]({{< relref "docker/" >}}) +- [Deploy Grafana on Kubernetes]({{< relref "kubernetes/" >}}) For upgrade instructions, refer to [Upgrade Grafana]({{< relref "upgrading.md" >}}). To restart Grafana, refer to [Restart Grafana]({{< relref "restart-grafana.md" >}}). diff --git a/docs/sources/installation/requirements.md b/docs/sources/installation/requirements.md index 3939f5f7f88..100f879d4aa 100644 --- a/docs/sources/installation/requirements.md +++ b/docs/sources/installation/requirements.md @@ -22,10 +22,10 @@ Grafana uses other open source software. Refer to [package.json](https://github. The following operating systems are supported for Grafana installation: -- [Debian / Ubuntu]({{< relref "debian" >}}) -- [RPM-based Linux (CentOS, Fedora, OpenSuse, RedHat)]({{< relref "rpm" >}}) -- [macOS]({{< relref "mac" >}}) -- [Windows]({{< relref "windows" >}}) +- [Debian / Ubuntu]({{< relref "debian/" >}}) +- [RPM-based Linux (CentOS, Fedora, OpenSuse, RedHat)]({{< relref "rpm/" >}}) +- [macOS]({{< relref "mac/" >}}) +- [Windows]({{< relref "windows/" >}}) Installation of Grafana on other operating systems is possible, but it is neither recommended nor supported. @@ -39,8 +39,8 @@ Minimum recommended CPU: 1 Some features might require more memory or CPUs. Features require more resources include: - [Server side rendering of images](https://grafana.com/grafana/plugins/grafana-image-renderer#requirements) -- [Alerting]({{< relref "../alerting" >}}) -- [Data source proxy]({{< relref "../developers/http_api/data_source" >}}) +- [Alerting]({{< relref "../alerting/" >}}) +- [Data source proxy]({{< relref "../developers/http_api/data_source/" >}}) ## Supported databases diff --git a/docs/sources/installation/upgrading.md b/docs/sources/installation/upgrading.md index edf6136c704..87150534303 100644 --- a/docs/sources/installation/upgrading.md +++ b/docs/sources/installation/upgrading.md @@ -157,14 +157,16 @@ cookie_secure = true cookie_secure = true ``` -The `login_remember_days`, `cookie_username` and `cookie_remember_name` settings in the `security` section are no longer being used so they're safe to remove. +The `login_remember_days`, `login_maximum_inactive_lifetime_days`, `login_maximum_lifetime_days`, `cookie_username` and `cookie_remember_name` settings in the `security` section are no longer being used so they're safe to remove. + +If you have `login_maximum_lifetime_days` or `login_maximum_inactive_lifetime_days` configured, you need to change it to `login_maximum_lifetime_duration` or `login_maximum_inactive_lifetime_duration` and append `d` to the configuration value to retain the previous behavior. If you have `login_remember_days` configured to 0 (zero) you should change your configuration to this to accomplish similar behavior, i.e. a logged in user will maximum be logged in for 1 day until being forced to login again: ```ini [auth] -login_maximum_inactive_lifetime_days = 1 -login_maximum_lifetime_days = 1 +login_maximum_inactive_lifetime_duration = 1d +login_maximum_lifetime_duration = 1d ``` The default cookie name for storing the auth token is `grafana_session`. you can configure this with `login_cookie_name` in `[auth]` settings. @@ -180,7 +182,7 @@ you can do that by: - For data sources created through UI, you need to go to data source config, re-enter the password or basic auth password and save the data source. - For data sources created by provisioning, you need to update your config file and use secureJsonData.password or - secureJsonData.basicAuthPassword field. See [provisioning docs]({{< relref "../administration/provisioning" >}}) for example of current + secureJsonData.basicAuthPassword field. See [provisioning docs]({{< relref "../administration/provisioning/" >}}) for example of current configuration. ### Embedding Grafana diff --git a/docs/sources/introduction/_index.md b/docs/sources/introduction/_index.md index 510b142b772..c6cad428c99 100644 --- a/docs/sources/introduction/_index.md +++ b/docs/sources/introduction/_index.md @@ -2,16 +2,73 @@ aliases: - /docs/grafana/latest/guides/what-is-grafana/ - /docs/grafana/latest/introduction/ + - /docs/grafana/latest/introduction/oss-details/ title: Introduction to Grafana weight: 5 --- -# Introduction to Grafana +# Grafana OSS -Grafana is a complete observability stack that allows you to monitor and analyze metrics, logs and traces. It allows you to query, visualize, alert on and understand your data no matter where it is stored. Create, explore, and share beautiful dashboards with your team and foster a data driven culture. For more information, refer to [Grafana overview](https://grafana.com/grafana/). Our observability stack has the following products and components. +[Grafana open source software](https://grafana.com/oss/) enables you to query, visualize, alert on, and explore your metrics, logs, and traces wherever they are stored. Grafana OSS provides you with tools to turn your time-series database (TSDB) data into insightful graphs and visualizations. -{{< docs/shared "basics/what-is-grafana.md" >}} +After you have [installed Grafana]({{< relref "../installation/_index.md" >}}) and set up your first dashboard using instructions in [Getting started with Grafana]({{< relref "../getting-started/build-first-dashboard.md" >}}), you will have many options to choose from depending on your requirements. For example, if you want to view weather data and statistics about your smart home, then you can create a [playlist]({{< relref "../dashboards/playlist.md" >}}). If you are the administrator for an enterprise and are managing Grafana for multiple teams, then you can set up [provisioning]({{< relref "../administration/provisioning.md" >}}) and [authentication]({{< relref "../auth/_index.md" >}}). -{{< docs/shared "basics/grafana-cloud.md" >}} +The following sections provide an overview of Grafana features and links to product documentation to help you learn more. For more guidance and ideas, check out our [Grafana Community forums](https://community.grafana.com/). -{{< docs/shared "basics/grafana-enterprise.md" >}} +## Explore metrics, logs, and traces + +Explore your data through ad-hoc queries and dynamic drilldown. Split view and compare different time ranges, queries and data sources side by side. Refer to [Explore]({{< relref "../explore/_index.md" >}}) for more information. + +## Alerts + +If you're using Grafana alerting, then you can have alerts sent through a number of different [alert notifiers]({{< relref "../alerting/contact-points/_index.md#list-of-notifiers-supported-by-grafana" >}}), including PagerDuty, SMS, email, VictorOps, OpsGenie, or Slack. + +Alert hooks allow you to create different notifiers with a bit of code if you prefer some other channels of communication. Visually define [alert rules]({{< relref "../alerting/alerting-rules/_index.md" >}}) for your most important metrics. + +## Annotations + +Annotate graphs with rich events from different data sources. Hover over events to see the full event metadata and tags. + +This feature, which shows up as a graph marker in Grafana, is useful for correlating data in case something goes wrong. You can create the annotations manually—just control-click on a graph and input some text—or you can fetch data from any data source. Refer to [Annotations]({{< relref "../dashboards/annotations.md" >}}) for more information. + +## Dashboard variables + +[Template variables]({{< relref "../variables/_index.md" >}}) allow you to create dashboards that can be reused for lots of different use cases. Values aren't hard-coded with these templates, so for instance, if you have a production server and a test server, you can use the same dashboard for both. + +Templating allows you to drill down into your data, say, from all data to North America data, down to Texas data, and beyond. You can also share these dashboards across teams within your organization—or if you create a great dashboard template for a popular data source, you can contribute it to the whole community to customize and use. + +## Configure Grafana + +If you're a Grafana administrator, then you'll want to thoroughly familiarize yourself with [Grafana configuration options]({{< relref "../administration/configuration.md" >}}) and the [Grafana CLI]({{< relref "../administration/cli.md" >}}). + +Configuration covers both config files and environment variables. You can set up default ports, logging levels, email IP addresses, security, and more. + +## Import dashboards and plugins + +Discover hundreds of [dashboards](https://grafana.com/grafana/dashboards) and [plugins](https://grafana.com/grafana/plugins) in the official library. Thanks to the passion and momentum of community members, new ones are added every week. + +## Authentication + +Grafana supports different authentication methods, such as LDAP and OAuth, and allows you to map users to organizations. Refer to the [User authentication overview]({{< relref "../auth/overview.md" >}}) for more information. + +In Grafana Enterprise, you can also map users to teams: If your company has its own authentication system, Grafana allows you to map the teams in your internal systems to teams in Grafana. That way, you can automatically give people access to the dashboards designated for their teams. Refer to [Grafana Enterprise]({{< relref "../enterprise/_index.md" >}}) for more information. + +## Provisioning + +While it's easy to click, drag, and drop to create a single dashboard, power users in need of many dashboards will want to automate the setup with a script. You can script anything in Grafana. + +For example, if you're spinning up a new Kubernetes cluster, you can also spin up a Grafana automatically with a script that would have the right server, IP address, and data sources preset and locked in so users cannot change them. It's also a way of getting control over a lot of dashboards. Refer to [Provisioning]({{< relref "../administration/provisioning.md" >}}) for more information. + +## Permissions + +When organizations have one Grafana and multiple teams, they often want the ability to both keep things separate and share dashboards. You can create a team of users and then set permissions on [folders and dashboards]({{< relref "../administration/manage-users-and-permissions/manage-dashboard-permissions/_index.md" >}}), and down to the [data source level]({{< relref "../enterprise/datasource_permissions.md" >}}) if you're using [Grafana Enterprise]({{< relref "../enterprise/_index.md" >}}). + +## Other Grafana Labs OSS Projects + +In addition to Grafana, Grafana Labs also provides the following open source projects: + +**Grafana Loki:** Grafana Loki is an open source, set of components that can be composed into a fully featured logging stack. For more information, refer to [Grafana Loki documentation](https://grafana.com/docs/loki/latest/). + +**Grafana Tempo:** Grafana Tempo is an open source, easy-to-use and high-volume distributed tracing backend. For more information, refer to [Grafana Tempo documentation](https://grafana.com/docs/tempo/latest/?pg=oss-tempo&plcmt=hero-txt/). + +**Grafana Mimir:** Grafana Mimir is an open source software project that provides a scalable long-term storage for Prometheus. For more information about Grafana Mimir, refer to [Grafana Mimir documentation](https://grafana.com/docs/mimir/latest/). diff --git a/docs/sources/introduction/grafana-cloud.md b/docs/sources/introduction/grafana-cloud.md new file mode 100644 index 00000000000..fae75e88c13 --- /dev/null +++ b/docs/sources/introduction/grafana-cloud.md @@ -0,0 +1,12 @@ +--- +aliases: + - /docs/grafana/latest/introduction/grafana-cloud/ +title: Grafana Cloud +weight: 300 +--- + +# Grafana Cloud + +Grafana Cloud is a highly available, fast, fully-managed OpenSaaS logging and metrics platform. It is everything you love about Grafana, hosted by Grafana Labs. + +[Learn more about Grafana Cloud](https://grafana.com/cloud/) and get started with your [free account with Grafana Cloud](https://grafana.com/signup/cloud/connect-account?pg=gsdocs) that includes a robust free tier with access to 10k metrics, 50GB logs, 50GB traces, two-week data retention, and three users. diff --git a/docs/sources/introduction/grafana-enterprise.md b/docs/sources/introduction/grafana-enterprise.md new file mode 100644 index 00000000000..20edde2eaa0 --- /dev/null +++ b/docs/sources/introduction/grafana-enterprise.md @@ -0,0 +1,88 @@ +--- +aliases: + - /docs/grafana/latest/enterprise/ + - /docs/grafana/latest/introduction/grafana-enterprise/ +description: Grafana Enterprise overview +title: Grafana Enterprise +weight: 200 +--- + +# Grafana Enterprise + +Grafana Enterprise is a commercial edition of Grafana that includes additional features not found in the open source version. + +Building on everything you already know and love about Grafana open source, Grafana Enterprise includes [exclusive datasource plugins]({{< relref "#enterprise-plugins">}}) and [additional features]({{< relref "#enterprise-features">}}). You also get 24x7x365 support and training from the core Grafana team. + +To learn more about Grafana Enterprise, refer to [our product page](https://grafana.com/enterprise). + +## Enterprise features in Grafana Cloud + +Many Grafana Enterprise features are also available in [Grafana Cloud]({{< ref "/docs/grafana-cloud" >}}) Pro and Advanced accounts. For details, refer to [the Grafana Cloud features table](https://grafana.com/pricing/#featuresTable) and [Enterprise features available to Grafana Cloud Pro and Advanced accounts]({{< ref "/docs/grafana-cloud/reference/enterprise-features" >}}). + +## Authentication + +Grafana Enterprise includes integrations with more ways to authenticate your users and enhanced authentication capabilities. + +### Team sync + +[Team sync]({{< relref "../enterprise/team-sync.md" >}}) allows you to set up synchronization between teams in Grafana and teams in your auth provider so that your users automatically end up in the right team. + +Supported auth providers: + +- [Auth Proxy]({{< relref "../auth/auth-proxy.md#team-sync-enterprise-only" >}}) +- [Azure AD OAuth]({{< relref "../auth/azuread.md#team-sync-enterprise-only" >}}) +- [GitHub OAuth]({{< relref "../auth/github.md#team-sync-enterprise-only" >}}) +- [GitLab OAuth]({{< relref "../auth/gitlab.md#team-sync-enterprise-only" >}}) +- [LDAP]({{< relref "../enterprise/enhanced_ldap.md#ldap-group-synchronization-for-teams" >}}) +- [Okta]({{< relref "../auth/okta.md#team-sync-enterprise-only" >}}) +- [SAML]({{< relref "../enterprise/configure-saml.md#configure-team-sync" >}}) + +### Enhanced LDAP integration + +With [enhanced LDAP integration]({{< relref "../enterprise/enhanced_ldap.md" >}}), you can set up active LDAP synchronization. + +### SAML authentication + +[SAML authentication]({{< relref "../enterprise/configure-saml" >}}) enables users to authenticate with single sign-on services that use Security Assertion Markup Language (SAML). + +## Enterprise features + +Grafana Enterprise adds the following features: + +- [Role-based access control]({{< relref "../enterprise/access-control/" >}}) to control access with role-based permissions. +- [Data source permissions]({{< relref "../enterprise/datasource_permissions.md" >}}) to restrict query access to specific teams and users. +- [Data source query caching]({{< relref "../enterprise/query-caching.md" >}}) to temporarily store query results in Grafana to reduce data source load and rate limiting. +- [Reporting]({{< relref "../enterprise/reporting.md" >}}) to generate a PDF report from any dashboard and set up a schedule to have it emailed to whoever you choose. +- [Export dashboard as PDF]({{< relref "../enterprise/export-pdf.md" >}}) +- [White labeling]({{< relref "../enterprise/white-labeling.md" >}}) to customize Grafana from the brand and logo to the footer links. +- [Usage insights]({{< relref "../enterprise/usage-insights/" >}}) to understand how your Grafana instance is used. +- [Vault integration]({{< relref "../enterprise/vault.md" >}}) to manage your configuration or provisioning secrets with Vault. +- [Auditing]({{< relref "../enterprise/auditing.md" >}}) tracks important changes to your Grafana instance to help you manage and mitigate suspicious activity and meet compliance requirements. +- [Request security]({{< relref "../enterprise/request-security.md" >}}) makes it possible to restrict outgoing requests from the Grafana server. +- [Settings updates at runtime]({{< relref "../enterprise/settings-updates.md" >}}) allows you to update Grafana settings at runtime without requiring a restart. + +## Enterprise data sources + +With a Grafana Enterprise license, you also get access to premium data sources, including: + +- [AppDynamics](https://grafana.com/grafana/plugins/dlopes7-appdynamics-datasource) +- [Azure Devops](https://grafana.com/grafana/plugins/grafana-azuredevops-datasource) +- [DataDog](https://grafana.com/grafana/plugins/grafana-datadog-datasource) +- [Dynatrace](https://grafana.com/grafana/plugins/grafana-dynatrace-datasource) +- [Gitlab](https://grafana.com/grafana/plugins/grafana-gitlab-datasource) +- [Honeycomb](https://grafana.com/grafana/plugins/grafana-honeycomb-datasource) +- [Jira](https://grafana.com/grafana/plugins/grafana-jira-datasource) +- [MongoDB](https://grafana.com/grafana/plugins/grafana-mongodb-datasource) +- [New Relic](https://grafana.com/grafana/plugins/grafana-newrelic-datasource) +- [Oracle Database](https://grafana.com/grafana/plugins/grafana-oracle-datasource) +- [Salesforce](https://grafana.com/grafana/plugins/grafana-salesforce-datasource) +- [SAP HANA®](https://grafana.com/grafana/plugins/grafana-saphana-datasource) +- [ServiceNow](https://grafana.com/grafana/plugins/grafana-servicenow-datasource) +- [Snowflake](https://grafana.com/grafana/plugins/grafana-snowflake-datasource) +- [Splunk](https://grafana.com/grafana/plugins/grafana-splunk-datasource) +- [Splunk Infrastructure monitoring (SignalFx)](https://grafana.com/grafana/plugins/grafana-splunk-monitoring-datasource) +- [Wavefront](https://grafana.com/grafana/plugins/grafana-wavefront-datasource) + +## Try Grafana Enterprise + +To purchase or obtain a trial license, contact the Grafana Labs [Sales Team](https://grafana.com/contact?about=support&topic=Grafana%20Enterprise). diff --git a/docs/sources/introduction/oss-details.md b/docs/sources/introduction/oss-details.md deleted file mode 100644 index cd4452e388b..00000000000 --- a/docs/sources/introduction/oss-details.md +++ /dev/null @@ -1,63 +0,0 @@ ---- -aliases: - - /docs/grafana/latest/guides/what-is-grafana/ - - /docs/grafana/latest/introduction/oss-details/ -title: What is Grafana OSS -weight: 5 ---- - -# What is Grafana OSS - -[Grafana open source software](https://grafana.com/oss/) allows you to query, visualize, alert on, and understand your data no matter where it’s stored. With Grafana you can create, explore and share all of your data through elegant, flexible dashboards. - -After you have [installed Grafana]({{< relref "../installation/_index.md" >}}) and set up your first dashboard using instructions in [Getting started with Grafana]({{< relref "../getting-started/getting-started.md" >}}), you will have many options to choose from depending on your requirements. For example, if you want to view weather data and statistics about your smart home, then you can create a [playlist]({{< relref "../dashboards/playlist.md" >}}). If you are the administrator for an enterprise and are managing Grafana for multiple teams, then you can set up [provisioning]({{< relref "../administration/provisioning.md" >}}) and [authentication]({{< relref "../auth/_index.md" >}}). - -In the following sections, you can get an overview of the capabilities of Grafana features as well as links to the product documentation to help you learn more. For more guidance and ideas, check out our [Grafana Community forums](https://community.grafana.com/). - -## Explore metrics, logs, and traces - -Explore your data through ad-hoc queries and dynamic drilldown. Split view and compare different time ranges, queries and data sources side by side. Refer to [Explore]({{< relref "../explore/_index.md" >}}) for more information. - -## Alerts - -If you're using Grafana alerting, then you can have alerts sent through a number of different [alert notifiers]({{< relref "../alerting/contact-points/_index.md#list-of-notifiers-supported-by-grafana" >}}), including PagerDuty, SMS, email, VictorOps, OpsGenie, or Slack. - -Alert hooks allow you to create different notifiers with a bit of code if you prefer some other channels of communication. Visually define [alert rules]({{< relref "../alerting/alerting-rules/_index.md" >}}) for your most important metrics. - -## Annotations - -Annotate graphs with rich events from different data sources. Hover over events to see the full event metadata and tags. - -This feature, which shows up as a graph marker in Grafana, is useful for correlating data in case something goes wrong. You can create the annotations manually—just control-click on a graph and input some text—or you can fetch data from any data source. Refer to [Annotations]({{< relref "../dashboards/annotations.md" >}}) for more information. - -## Dashboard variables - -[Template variables]({{< relref "../variables/_index.md" >}}) allow you to create dashboards that can be reused for lots of different use cases. Values aren't hard-coded with these templates, so for instance, if you have a production server and a test server, you can use the same dashboard for both. - -Templating allows you to drill down into your data, say, from all data to North America data, down to Texas data, and beyond. You can also share these dashboards across teams within your organization—or if you create a great dashboard template for a popular data source, you can contribute it to the whole community to customize and use. - -## Configure Grafana - -If you're a Grafana administrator, then you'll want to thoroughly familiarize yourself with [Grafana configuration options]({{< relref "../administration/configuration.md" >}}) and the [Grafana CLI]({{< relref "../administration/cli.md" >}}). - -Configuration covers both config files and environment variables. You can set up default ports, logging levels, email IP addresses, security, and more. - -## Import dashboards and plugins - -Discover hundreds of [dashboards](https://grafana.com/grafana/dashboards) and [plugins](https://grafana.com/grafana/plugins) in the official library. Thanks to the passion and momentum of community members, new ones are added every week. - -## Authentication - -Grafana supports different authentication methods, such as LDAP and OAuth, and allows you to map users to organizations. Refer to the [User authentication overview]({{< relref "../auth/overview.md" >}}) for more information. - -In Grafana Enterprise, you can also map users to teams: If your company has its own authentication system, Grafana allows you to map the teams in your internal systems to teams in Grafana. That way, you can automatically give people access to the dashboards designated for their teams. Refer to [Grafana Enterprise]({{< relref "../enterprise/_index.md" >}}) for more information. - -## Provisioning - -While it's easy to click, drag, and drop to create a single dashboard, power users in need of many dashboards will want to automate the setup with a script. You can script anything in Grafana. - -For example, if you're spinning up a new Kubernetes cluster, you can also spin up a Grafana automatically with a script that would have the right server, IP address, and data sources preset and locked in so users cannot change them. It's also a way of getting control over a lot of dashboards. Refer to [Provisioning]({{< relref "../administration/provisioning.md" >}}) for more information. - -## Permissions - -When organizations have one Grafana and multiple teams, they often want the ability to both keep things separate and share dashboards. You can create a team of users and then set permissions on [folders and dashboards]({{< relref "../administration/manage-users-and-permissions/manage-dashboard-permissions/_index.md" >}}), and down to the [data source level]({{< relref "../enterprise/datasource_permissions.md" >}}) if you're using [Grafana Enterprise]({{< relref "../enterprise/_index.md" >}}). diff --git a/docs/sources/old-alerting/create-alerts.md b/docs/sources/old-alerting/create-alerts.md index 98f31f734bb..6f76a168338 100644 --- a/docs/sources/old-alerting/create-alerts.md +++ b/docs/sources/old-alerting/create-alerts.md @@ -41,7 +41,7 @@ This section describes the fields you fill out to create an alert. ### Rule -- **Name -** Enter a descriptive name. The name will be displayed in the Alert Rules list. This field supports [templating]({{< relref "./add-notification-template.md" >}}). +- **Name -** Enter a descriptive name. The name will be displayed in the Alert Rules list. This field supports [templating]({{< relref "add-notification-template.md" >}}). - **Evaluate every -** Specify how often the scheduler should evaluate the alert rule. This is referred to as the _evaluation interval_. - **For -** Specify how long the query needs to violate the configured thresholds before the alert notification triggers. @@ -125,7 +125,7 @@ The actual notifications are configured and shared between multiple alerts. Read [Alert notifications]({{< relref "notifications.md" >}}) for information on how to configure and set up notifications. - **Send to -** Select an alert notification channel if you have one set up. -- **Message -** Enter a text message to be sent on the notification channel. Some alert notifiers support transforming the text to HTML or other rich formats. This field supports [templating]({{< relref "./add-notification-template.md" >}}). +- **Message -** Enter a text message to be sent on the notification channel. Some alert notifiers support transforming the text to HTML or other rich formats. This field supports [templating]({{< relref "add-notification-template.md" >}}). - **Tags -** Specify a list of tags (key/value) to be included in the notification. It is only supported by [some notifiers]({{< relref "notifications/#all-supported-notifiers" >}}). ## Alert state history and annotations diff --git a/docs/sources/old-alerting/notifications.md b/docs/sources/old-alerting/notifications.md index cf2e213777b..05ea49b98e5 100644 --- a/docs/sources/old-alerting/notifications.md +++ b/docs/sources/old-alerting/notifications.md @@ -122,12 +122,12 @@ If you are using the token for a slack bot, then you have to invite the bot to t To setup Opsgenie you will need an API Key and the Alert API Url. These can be obtained by configuring a new [Grafana Integration](https://docs.opsgenie.com/docs/grafana-integration). -| Setting | Description | -| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| Alert API URL | The API URL for your Opsgenie instance. This will normally be either `https://api.opsgenie.com` or, for EU customers, `https://api.eu.opsgenie.com`. | -| API Key | The API Key as provided by Opsgenie for your configured Grafana integration. | -| Override priority | Configures the alert priority using the `og_priority` tag. The `og_priority` tag must have one of the following values: `P1`, `P2`, `P3`, `P4`, or `P5`. Default is `False`. | -| Send notification tags as | Specify how you would like [Notification Tags]({{< relref "create-alerts.md/#notifications" >}}) delivered to Opsgenie. They can be delivered as `Tags`, `Extra Properties` or both. Default is Tags. See note below for more information. | +| Setting | Description | +| ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| Alert API URL | The API URL for your Opsgenie instance. This will normally be either `https://api.opsgenie.com` or, for EU customers, `https://api.eu.opsgenie.com`. | +| API Key | The API Key as provided by Opsgenie for your configured Grafana integration. | +| Override priority | Configures the alert priority using the `og_priority` tag. The `og_priority` tag must have one of the following values: `P1`, `P2`, `P3`, `P4`, or `P5`. Default is `False`. | +| Send notification tags as | Specify how you would like [Notification Tags]({{< relref "create-alerts.md#notifications" >}}) delivered to Opsgenie. They can be delivered as `Tags`, `Extra Properties` or both. Default is Tags. See note below for more information. | > **Note:** When notification tags are sent as `Tags` they are concatenated into a string with a `key:value` format. If you prefer to receive the notifications tags as key/values under Extra Properties in Opsgenie then change the `Send notification tags as` to either `Extra Properties` or `Tags & Extra Properties`. @@ -286,4 +286,4 @@ This URL is based on the [domain]({{< relref "../../administration/configuration > **Note:** Alert notification templating is only available in Grafana v7.4 and above. -The alert notification template feature allows you to take the [label]({{< relref "../../basics/timeseries-dimensions.md#labels" >}}) value from an alert query and [inject that into alert notifications]({{< relref "./add-notification-template.md" >}}). +The alert notification template feature allows you to take the [label]({{< relref "../../basics/timeseries-dimensions.md#labels" >}}) value from an alert query and [inject that into alert notifications]({{< relref "add-notification-template.md" >}}). diff --git a/docs/sources/panels/_index.md b/docs/sources/panels/_index.md index 6ff9bf7d93a..2f07a4714ad 100644 --- a/docs/sources/panels/_index.md +++ b/docs/sources/panels/_index.md @@ -14,6 +14,6 @@ The _panel_ is the basic visualization building block in Grafana. Each panel has There are a wide variety of styling and formatting options for each panel. Panels can be dragged and dropped and rearranged on the dashboard. They can also be resized. -Before you begin, ensure that you have configured a data source. For more information about data sources, refer to [Data Sources]({{< relref "../datasources" >}}). +Before you begin, ensure that you have configured a data source. For more information about data sources, refer to [Data Sources]({{< relref "../datasources/" >}}). {{< section >}} diff --git a/docs/sources/panels/configure-thresholds/_index.md b/docs/sources/panels/configure-thresholds/_index.md index 499e5ac2647..11f2d84d2b6 100644 --- a/docs/sources/panels/configure-thresholds/_index.md +++ b/docs/sources/panels/configure-thresholds/_index.md @@ -21,17 +21,17 @@ This section includes information about using thresholds in your visualizations. A threshold is a value that you specify for a metric that is visually reflected in a dashboard when the threshold value is met or exceeded. -Thresholds provide one method for you to conditionally style and color your visualizations based on query results. You can apply thresholds to most, but not all, visualizations. For more information about visualizations, refer to [Visualization panels]({{< relref "../../visualizations" >}}). +Thresholds provide one method for you to conditionally style and color your visualizations based on query results. You can apply thresholds to most, but not all, visualizations. For more information about visualizations, refer to [Visualization panels]({{< relref "../../visualizations/" >}}). You can use thresholds to: -- Color grid lines or grid ares areas in the [Time-series visualization]({{< relref "../../visualizations/time-series" >}}) +- Color grid lines or grid ares areas in the [Time-series visualization]({{< relref "../../visualizations/time-series/" >}}) - Color lines in the [Time-series visualization]({{< relref "../../visualizations/time-series/graph-color-scheme/#from-thresholds" >}}) -- Color the background or value text in the [Stat visualization]({{< relref "../../visualizations/stat-panel" >}}) -- Color the gauge and threshold markers in the [Gauge visualization]({{< relref "../../visualizations/gauge-panel" >}}) -- Color markers in the [Geomap visualization]({{< relref "../../visualizations/geomap" >}}) -- Color cell text or background in the [Table visualization]({{< relref "../../visualizations/table" >}}) -- Define regions and region colors in the [State timeline visualization]({{< relref "../../visualizations/state-timeline" >}}) +- Color the background or value text in the [Stat visualization]({{< relref "../../visualizations/stat-panel/" >}}) +- Color the gauge and threshold markers in the [Gauge visualization]({{< relref "../../visualizations/gauge-panel/" >}}) +- Color markers in the [Geomap visualization]({{< relref "../../visualizations/geomap/" >}}) +- Color cell text or background in the [Table visualization]({{< relref "../../visualizations/table/" >}}) +- Define regions and region colors in the [State timeline visualization]({{< relref "../../visualizations/state-timeline/" >}}) There are two types of thresholds: diff --git a/docs/sources/panels/library-panels/add-library-panel.md b/docs/sources/panels/library-panels/add-library-panel.md index 041a11dbc38..563945656d3 100644 --- a/docs/sources/panels/library-panels/add-library-panel.md +++ b/docs/sources/panels/library-panels/add-library-panel.md @@ -12,7 +12,7 @@ Add a Grafana library panel to a dashboard when you want to provide visualizatio ## Before you begin -- [Create a library panel]({{< relref "../library-panels/create-library-panel.md" >}}). +- [Create a library panel]({{< relref "create-library-panel.md" >}}). **To add a library panel to a dashboard**: diff --git a/docs/sources/panels/override-field-values/delete-a-field-override.md b/docs/sources/panels/override-field-values/delete-a-field-override.md index c214374213a..8130cda10f3 100644 --- a/docs/sources/panels/override-field-values/delete-a-field-override.md +++ b/docs/sources/panels/override-field-values/delete-a-field-override.md @@ -15,7 +15,7 @@ When you delete an override, the appearance of value defaults to its original fo ## Before you begin - [Add a panel to a dashboard]({{< relref "../working-with-panels/add-panel.md" >}}). -- [Add a field override]({{< relref "../override-field-values/add-a-field-override.md" >}}). +- [Add a field override]({{< relref "add-a-field-override.md" >}}). **To delete a field override**: diff --git a/docs/sources/panels/override-field-values/edit-field-override.md b/docs/sources/panels/override-field-values/edit-field-override.md index cecfd3a583f..2d6b6c23bd7 100644 --- a/docs/sources/panels/override-field-values/edit-field-override.md +++ b/docs/sources/panels/override-field-values/edit-field-override.md @@ -13,7 +13,7 @@ Edit a field override when you want to make changes to an override setting. ## Before you begin - [Add a panel to a dashboard]({{< relref "../working-with-panels/add-panel.md" >}}). -- [Add a field override]({{< relref "../override-field-values/add-a-field-override.md" >}}). +- [Add a field override]({{< relref "add-a-field-override.md" >}}). **To edit a field override**: diff --git a/docs/sources/panels/override-field-values/view-field-override.md b/docs/sources/panels/override-field-values/view-field-override.md index d7ecfae17c8..7d5fd161727 100644 --- a/docs/sources/panels/override-field-values/view-field-override.md +++ b/docs/sources/panels/override-field-values/view-field-override.md @@ -13,7 +13,7 @@ You can view field overrides in the panel display options. ## Before you begin - [Add a panel to a dashboard]({{< relref "../working-with-panels/add-panel.md" >}}). -- [Add a field override]({{< relref "../override-field-values/add-a-field-override.md" >}}). +- [Add a field override]({{< relref "add-a-field-override.md" >}}). **To view field overrides**: diff --git a/docs/sources/panels/query-a-data-source/download-raw-query-results.md b/docs/sources/panels/query-a-data-source/download-raw-query-results.md index 85d1f5cdad5..5d5ad740969 100644 --- a/docs/sources/panels/query-a-data-source/download-raw-query-results.md +++ b/docs/sources/panels/query-a-data-source/download-raw-query-results.md @@ -13,7 +13,7 @@ Grafana generates a CSV file that contains your data, including any transformati ## Before you begin - [Add a panel to a dashboard]({{< relref "../working-with-panels/add-panel.md" >}}). -- [Add a query]({{< relref "../query-a-data-source/add-a-query.md" >}}). +- [Add a query]({{< relref "add-a-query.md" >}}). **To download raw query results**: diff --git a/docs/sources/panels/query-a-data-source/inspect-query-performance.md b/docs/sources/panels/query-a-data-source/inspect-query-performance.md index bfece2faf3d..426bf338357 100644 --- a/docs/sources/panels/query-a-data-source/inspect-query-performance.md +++ b/docs/sources/panels/query-a-data-source/inspect-query-performance.md @@ -13,7 +13,7 @@ The **Stats** tab displays statistics that tell you how long your query takes, h ## Before you begin - [Add a panel to a dashboard]({{< relref "../working-with-panels/add-panel.md" >}}). -- [Add a query]({{< relref "../query-a-data-source/add-a-query.md" >}}). +- [Add a query]({{< relref "add-a-query.md" >}}). **To inspect query performance**: diff --git a/docs/sources/panels/query-a-data-source/inspect-request-and-response-data.md b/docs/sources/panels/query-a-data-source/inspect-request-and-response-data.md index e542369b186..e52bae895d7 100644 --- a/docs/sources/panels/query-a-data-source/inspect-request-and-response-data.md +++ b/docs/sources/panels/query-a-data-source/inspect-request-and-response-data.md @@ -13,7 +13,7 @@ Inspect query request and response data when you want to troubleshoot a query th ## Before you begin - [Add a panel to a dashboard]({{< relref "../working-with-panels/add-panel.md" >}}). -- [Add a query]({{< relref "../query-a-data-source/add-a-query.md" >}}). +- [Add a query]({{< relref "add-a-query.md" >}}). **To inspect query request and response data**: diff --git a/docs/sources/panels/query-a-data-source/share-query.md b/docs/sources/panels/query-a-data-source/share-query.md index 1aee1fae4fd..29cfa593d36 100644 --- a/docs/sources/panels/query-a-data-source/share-query.md +++ b/docs/sources/panels/query-a-data-source/share-query.md @@ -19,7 +19,7 @@ This strategy can drastically reduce the number of queries being made when you f 1. [Create a dashboard]({{< relref "../../getting-started/getting-started.md/#step-3-create-a-dashboard" >}}). 1. [Add a panel to a dashboard]({{< relref "../working-with-panels/add-panel.md" >}}). 1. Change the title to "Source panel". You'll use this panel as a source for the other panels. -1. Define the [query]({{< relref "../query-a-data-source/add-a-query.md" >}}) or queries that you want share. +1. Define the [query]({{< relref "add-a-query.md" >}}) or queries that you want share. If you don't have a data source available, use the **Grafana** data source, which returns a random time series that you can use for testing. diff --git a/docs/sources/panels/query-a-data-source/use-expressions-to-manipulate-data/write-an-expression.md b/docs/sources/panels/query-a-data-source/use-expressions-to-manipulate-data/write-an-expression.md index 8cd0bfbbd8c..d87768b79bb 100644 --- a/docs/sources/panels/query-a-data-source/use-expressions-to-manipulate-data/write-an-expression.md +++ b/docs/sources/panels/query-a-data-source/use-expressions-to-manipulate-data/write-an-expression.md @@ -10,7 +10,7 @@ weight: 20 If your data source supports them, then Grafana displays the **Expression** button and shows any existing expressions in the query editor list. -For more information about expressions, refer to [About expressions]({{< relref "./about-expressions.md" >}}). +For more information about expressions, refer to [About expressions]({{< relref "about-expressions.md" >}}). ## Before you begin @@ -22,7 +22,7 @@ For more information about expressions, refer to [About expressions]({{< relref 1. Below the query, click **Expression**. 1. In the **Operation** field, select the type of expression you want to write. - For more information about expression operations, refer to [About expressions]({{< relref "./about-expressions.md" >}}). + For more information about expression operations, refer to [About expressions]({{< relref "about-expressions.md" >}}). 1. Write the expression. 1. Click **Apply**. diff --git a/docs/sources/panels/working-with-panels/add-panel.md b/docs/sources/panels/working-with-panels/add-panel.md index 05d80a5c0e0..8df88fc16e3 100644 --- a/docs/sources/panels/working-with-panels/add-panel.md +++ b/docs/sources/panels/working-with-panels/add-panel.md @@ -50,7 +50,7 @@ Panels allow you to show your data in visual form. Each panel needs at least one - [Visualization-specific options]({{< relref "../../visualizations/_index.md" >}}) - [Override field values]({{< relref "../override-field-values/about-field-overrides.md" >}}) - [Configure thresholds]({{< relref "../configure-thresholds/" >}}) - - [Apply color to series and fields]({{< relref "./apply-color-to-series.md" >}}) + - [Apply color to series and fields]({{< relref "apply-color-to-series.md" >}}) 1. Add a note to describe the visualization (or describe your changes) and then click **Save** in the upper-right corner of the page. diff --git a/docs/sources/panels/working-with-panels/add-title-and-description.md b/docs/sources/panels/working-with-panels/add-title-and-description.md index 324e9fd6db4..96bdaac5237 100644 --- a/docs/sources/panels/working-with-panels/add-title-and-description.md +++ b/docs/sources/panels/working-with-panels/add-title-and-description.md @@ -12,7 +12,7 @@ Add a title and description to a panel to share with users any important informa ## Before you begin: -- [Add a panel to a dashboard]({{< relref "../working-with-panels/add-panel.md" >}}). +- [Add a panel to a dashboard]({{< relref "add-panel.md" >}}). **To add a title and description to a panel**: diff --git a/docs/sources/panels/working-with-panels/apply-color-to-series.md b/docs/sources/panels/working-with-panels/apply-color-to-series.md index ea29194c87e..4b70d6ea6f1 100644 --- a/docs/sources/panels/working-with-panels/apply-color-to-series.md +++ b/docs/sources/panels/working-with-panels/apply-color-to-series.md @@ -15,7 +15,7 @@ Continuous color interpolates a color using the percentage of a value relative t ## Before you begin -- [Add a panel to a dashboard]({{< relref "../working-with-panels/add-panel.md" >}}). +- [Add a panel to a dashboard]({{< relref "add-panel.md" >}}). **To apply color to series and fields**: diff --git a/docs/sources/panels/working-with-panels/configure-legend.md b/docs/sources/panels/working-with-panels/configure-legend.md index 49e5e7bbd07..ee67bb0b70f 100644 --- a/docs/sources/panels/working-with-panels/configure-legend.md +++ b/docs/sources/panels/working-with-panels/configure-legend.md @@ -18,7 +18,7 @@ When you apply your changes, the visualization changes appear to all users of th ### Before you begin -- [Add a panel to a dashboard]({{< relref "../working-with-panels/add-panel.md" >}}). +- [Add a panel to a dashboard]({{< relref "add-panel.md" >}}). **To isolate series data in a visualization**: diff --git a/docs/sources/panels/working-with-panels/format-standard-fields.md b/docs/sources/panels/working-with-panels/format-standard-fields.md index 0c6c34c1066..5f0337be684 100644 --- a/docs/sources/panels/working-with-panels/format-standard-fields.md +++ b/docs/sources/panels/working-with-panels/format-standard-fields.md @@ -18,7 +18,7 @@ For a complete list of field formatting options, refer to [Standard field defini ## Before you begin -- [Add a panel to a dashboard]({{< relref "../working-with-panels/add-panel.md" >}}). +- [Add a panel to a dashboard]({{< relref "add-panel.md" >}}). **To format a standard field**: diff --git a/docs/sources/panels/working-with-panels/navigate-panel-editor.md b/docs/sources/panels/working-with-panels/navigate-panel-editor.md index ba89626877e..fc4963298dc 100644 --- a/docs/sources/panels/working-with-panels/navigate-panel-editor.md +++ b/docs/sources/panels/working-with-panels/navigate-panel-editor.md @@ -33,9 +33,9 @@ This page describes the parts of the Grafana panel editor. 4. Panel display options: The display options section contains tabs where you configure almost every aspect of your data visualization, including: - - [Apply color to series and fields]({{< relref "./apply-color-to-series.md" >}}) - - [Format a standard field]({{< relref "./format-standard-fields.md" >}}) - - [Add a title and description to a panel]({{< relref "./add-title-and-description.md" >}}) + - [Apply color to series and fields]({{< relref "apply-color-to-series.md" >}}) + - [Format a standard field]({{< relref "format-standard-fields.md" >}}) + - [Add a title and description to a panel]({{< relref "add-title-and-description.md" >}}) > Not all options are available for each visualization. diff --git a/docs/sources/panels/working-with-panels/view-json-model.md b/docs/sources/panels/working-with-panels/view-json-model.md index a576cff4895..25469c0057e 100644 --- a/docs/sources/panels/working-with-panels/view-json-model.md +++ b/docs/sources/panels/working-with-panels/view-json-model.md @@ -12,7 +12,7 @@ Explore and export panel, panel data, and data frame JSON models. ## Before you begin: -- [Add a panel to a dashboard]({{< relref "../working-with-panels/add-panel.md" >}}). +- [Add a panel to a dashboard]({{< relref "add-panel.md" >}}). **To view a panel JSON model**: diff --git a/docs/sources/plugins/_index.md b/docs/sources/plugins/_index.md index 0566d20224a..af53d6a8f64 100644 --- a/docs/sources/plugins/_index.md +++ b/docs/sources/plugins/_index.md @@ -41,6 +41,6 @@ Use app plugins when you want to create an custom out-of-the-box monitoring expe ## Learn more -- [Install plugins]({{< relref "./installation.md" >}}) -- [Plugin signatures]({{< relref "./plugin-signatures.md" >}}) +- [Install plugins]({{< relref "installation.md" >}}) +- [Plugin signatures]({{< relref "plugin-signatures.md" >}}) - Browse the available [Plugins](https://grafana.com/grafana/plugins) diff --git a/docs/sources/plugins/installation.md b/docs/sources/plugins/installation.md index 206e35b2b98..9056ed11517 100644 --- a/docs/sources/plugins/installation.md +++ b/docs/sources/plugins/installation.md @@ -26,7 +26,7 @@ Follow the instructions on the Install tab. You can either install the plugin wi For more information about Grafana CLI plugin commands, refer to [Plugin commands]({{< relref "../administration/cli.md#plugins-commands" >}}). -As of Grafana v8.0, a plugin catalog app was introduced in order to make managing plugins easier. For more information, refer to [Plugin catalog]({{< relref "./catalog.md" >}}). +As of Grafana v8.0, a plugin catalog app was introduced in order to make managing plugins easier. For more information, refer to [Plugin catalog]({{< relref "catalog.md" >}}). ### Install a packaged plugin diff --git a/docs/sources/release-notes/_index.md b/docs/sources/release-notes/_index.md index efc34bb3fd5..7ff30fb5e4f 100644 --- a/docs/sources/release-notes/_index.md +++ b/docs/sources/release-notes/_index.md @@ -10,90 +10,93 @@ weight: 10000 Here you can find detailed release notes that list everything that is included in every release as well as notices about deprecations, breaking changes as well as changes that relate to plugin development. -- [Release notes for 8.5.3]({{< relref "release-notes-8-5-3" >}}) -- [Release notes for 8.5.2]({{< relref "release-notes-8-5-2" >}}) -- [Release notes for 8.5.1]({{< relref "release-notes-8-5-1" >}}) -- [Release notes for 8.5.0]({{< relref "release-notes-8-5-0" >}}) -- [Release notes for 8.5.0-beta1]({{< relref "release-notes-8-5-0-beta1" >}}) -- [Release notes for 8.4.7]({{< relref "release-notes-8-4-7" >}}) -- [Release notes for 8.4.6]({{< relref "release-notes-8-4-6" >}}) -- [Release notes for 8.4.5]({{< relref "release-notes-8-4-5" >}}) -- [Release notes for 8.4.4]({{< relref "release-notes-8-4-4" >}}) -- [Release notes for 8.4.3]({{< relref "release-notes-8-4-3" >}}) -- [Release notes for 8.4.2]({{< relref "release-notes-8-4-2" >}}) -- [Release notes for 8.4.1]({{< relref "release-notes-8-4-1" >}}) -- [Release notes for 8.4.0-beta1]({{< relref "release-notes-8-4-0-beta1" >}}) -- [Release notes for 8.3.7]({{< relref "release-notes-8-3-7" >}}) -- [Release notes for 8.3.6]({{< relref "release-notes-8-3-6" >}}) -- [Release notes for 8.3.5]({{< relref "release-notes-8-3-5" >}}) -- [Release notes for 8.3.4]({{< relref "release-notes-8-3-4" >}}) -- [Release notes for 8.3.3]({{< relref "release-notes-8-3-3" >}}) -- [Release notes for 8.3.2]({{< relref "release-notes-8-3-2" >}}) -- [Release notes for 8.3.1]({{< relref "release-notes-8-3-1" >}}) -- [Release notes for 8.3.0]({{< relref "release-notes-8-3-0" >}}) -- [Release notes for 8.3.0-beta2]({{< relref "release-notes-8-3-0-beta2" >}}) -- [Release notes for 8.3.0-beta1]({{< relref "release-notes-8-3-0-beta1" >}}) -- [Release notes for 8.2.7]({{< relref "release-notes-8-2-7" >}}) -- [Release notes for 8.2.6]({{< relref "release-notes-8-2-6" >}}) -- [Release notes for 8.2.5]({{< relref "release-notes-8-2-5" >}}) -- [Release notes for 8.2.4]({{< relref "release-notes-8-2-4" >}}) -- [Release notes for 8.2.3]({{< relref "release-notes-8-2-3" >}}) -- [Release notes for 8.2.2]({{< relref "release-notes-8-2-2" >}}) -- [Release notes for 8.2.1]({{< relref "release-notes-8-2-1" >}}) -- [Release notes for 8.2.0]({{< relref "release-notes-8-2-0" >}}) -- [Release notes for 8.2.0-beta2]({{< relref "release-notes-8-2-0-beta2" >}}) -- [Release notes for 8.2.0-beta1]({{< relref "release-notes-8-2-0-beta1" >}}) -- [Release notes for 8.1.8]({{< relref "release-notes-8-1-8" >}}) -- [Release notes for 8.1.7]({{< relref "release-notes-8-1-7" >}}) -- [Release notes for 8.1.6]({{< relref "release-notes-8-1-6" >}}) -- [Release notes for 8.1.5]({{< relref "release-notes-8-1-5" >}}) -- [Release notes for 8.1.4]({{< relref "release-notes-8-1-4" >}}) -- [Release notes for 8.1.3]({{< relref "release-notes-8-1-3" >}}) -- [Release notes for 8.1.2]({{< relref "release-notes-8-1-2" >}}) -- [Release notes for 8.1.1]({{< relref "release-notes-8-1-1" >}}) -- [Release notes for 8.1.0]({{< relref "release-notes-8-1-0" >}}) -- [Release notes for 8.1.0-beta3]({{< relref "release-notes-8-1-0-beta3" >}}) -- [Release notes for 8.1.0-beta2]({{< relref "release-notes-8-1-0-beta2" >}}) -- [Release notes for 8.1.0-beta1]({{< relref "release-notes-8-1-0-beta1" >}}) -- [Release notes for 8.0.7]({{< relref "release-notes-8-0-7" >}}) -- [Release notes for 8.0.6]({{< relref "release-notes-8-0-6" >}}) -- [Release notes for 8.0.5]({{< relref "release-notes-8-0-5" >}}) -- [Release notes for 8.0.4]({{< relref "release-notes-8-0-4" >}}) -- [Release notes for 8.0.3]({{< relref "release-notes-8-0-3" >}}) -- [Release notes for 8.0.2]({{< relref "release-notes-8-0-2" >}}) -- [Release notes for 8.0.1]({{< relref "release-notes-8-0-1" >}}) -- [Release notes for 8.0.0]({{< relref "release-notes-8-0-0" >}}) -- [Release notes for 8.0.0-beta3]({{< relref "release-notes-8-0-0-beta3" >}}) -- [Release notes for 8.0.0-beta2]({{< relref "release-notes-8-0-0-beta2" >}}) -- [Release notes for 8.0.0-beta1]({{< relref "release-notes-8-0-0-beta1" >}}) -- [Release notes for 7.5.15]({{< relref "release-notes-7-5-15" >}}) -- [Release notes for 7.5.13]({{< relref "release-notes-7-5-13" >}}) -- [Release notes for 7.5.12]({{< relref "release-notes-7-5-12" >}}) -- [Release notes for 7.5.11]({{< relref "release-notes-7-5-11" >}}) -- [Release notes for 7.5.10]({{< relref "release-notes-7-5-10" >}}) -- [Release notes for 7.5.9]({{< relref "release-notes-7-5-9" >}}) -- [Release notes for 7.5.8]({{< relref "release-notes-7-5-8" >}}) -- [Release notes for 7.5.7]({{< relref "release-notes-7-5-7" >}}) -- [Release notes for 7.5.6]({{< relref "release-notes-7-5-6" >}}) -- [Release notes for 7.5.5]({{< relref "release-notes-7-5-5" >}}) -- [Release notes for 7.5.4]({{< relref "release-notes-7-5-4" >}}) -- [Release notes for 7.5.3]({{< relref "release-notes-7-5-3" >}}) -- [Release notes for 7.5.2]({{< relref "release-notes-7-5-2" >}}) -- [Release notes for 7.5.1]({{< relref "release-notes-7-5-1" >}}) -- [Release notes for 7.5.0]({{< relref "release-notes-7-5-0" >}}) -- [Release notes for 7.5.0-beta2]({{< relref "release-notes-7-5-0-beta2" >}}) -- [Release notes for 7.5.0-beta1]({{< relref "release-notes-7-5-0-beta1" >}}) -- [Release notes for 7.4.5]({{< relref "release-notes-7-4-5" >}}) -- [Release notes for 7.4.3]({{< relref "release-notes-7-4-3" >}}) -- [Release notes for 7.4.2]({{< relref "release-notes-7-4-2" >}}) -- [Release notes for 7.4.1]({{< relref "release-notes-7-4-1" >}}) -- [Release notes for 7.4.0]({{< relref "release-notes-7-4-0" >}}) -- [Release notes for 7.3.10]({{< relref "release-notes-7-3-10" >}}) -- [Release notes for 7.3.7]({{< relref "release-notes-7-3-7" >}}) -- [Release notes for 7.3.6]({{< relref "release-notes-7-3-6" >}}) -- [Release notes for 7.3.5]({{< relref "release-notes-7-3-5" >}}) -- [Release notes for 7.3.4]({{< relref "release-notes-7-3-4" >}}) -- [Release notes for 7.3.3]({{< relref "release-notes-7-3-3" >}}) -- [Release notes for 7.3.2]({{< relref "release-notes-7-3-2" >}}) -- [Release notes for 7.3.1]({{< relref "release-notes-7-3-1" >}}) -- [Release notes for 7.3.0]({{< relref "release-notes-7-3-0" >}}) +- [Release notes for 9.0.0-beta2]({{< relref "release-notes-9-0-0-beta2" >}}) +- [Release notes for 9.0.0-beta1]({{< relref "release-notes-9-0-0-beta1/" >}}) +- [Release notes for 8.5.4]({{< relref "release-notes-8-5-4" >}}) +- [Release notes for 8.5.3]({{< relref "release-notes-8-5-3/" >}}) +- [Release notes for 8.5.2]({{< relref "release-notes-8-5-2/" >}}) +- [Release notes for 8.5.1]({{< relref "release-notes-8-5-1/" >}}) +- [Release notes for 8.5.0]({{< relref "release-notes-8-5-0/" >}}) +- [Release notes for 8.5.0-beta1]({{< relref "release-notes-8-5-0-beta1/" >}}) +- [Release notes for 8.4.7]({{< relref "release-notes-8-4-7/" >}}) +- [Release notes for 8.4.6]({{< relref "release-notes-8-4-6/" >}}) +- [Release notes for 8.4.5]({{< relref "release-notes-8-4-5/" >}}) +- [Release notes for 8.4.4]({{< relref "release-notes-8-4-4/" >}}) +- [Release notes for 8.4.3]({{< relref "release-notes-8-4-3/" >}}) +- [Release notes for 8.4.2]({{< relref "release-notes-8-4-2/" >}}) +- [Release notes for 8.4.1]({{< relref "release-notes-8-4-1/" >}}) +- [Release notes for 8.4.0-beta1]({{< relref "release-notes-8-4-0-beta1/" >}}) +- [Release notes for 8.3.7]({{< relref "release-notes-8-3-7/" >}}) +- [Release notes for 8.3.6]({{< relref "release-notes-8-3-6/" >}}) +- [Release notes for 8.3.5]({{< relref "release-notes-8-3-5/" >}}) +- [Release notes for 8.3.4]({{< relref "release-notes-8-3-4/" >}}) +- [Release notes for 8.3.3]({{< relref "release-notes-8-3-3/" >}}) +- [Release notes for 8.3.2]({{< relref "release-notes-8-3-2/" >}}) +- [Release notes for 8.3.1]({{< relref "release-notes-8-3-1/" >}}) +- [Release notes for 8.3.0]({{< relref "release-notes-8-3-0/" >}}) +- [Release notes for 8.3.0-beta2]({{< relref "release-notes-8-3-0-beta2/" >}}) +- [Release notes for 8.3.0-beta1]({{< relref "release-notes-8-3-0-beta1/" >}}) +- [Release notes for 8.2.7]({{< relref "release-notes-8-2-7/" >}}) +- [Release notes for 8.2.6]({{< relref "release-notes-8-2-6/" >}}) +- [Release notes for 8.2.5]({{< relref "release-notes-8-2-5/" >}}) +- [Release notes for 8.2.4]({{< relref "release-notes-8-2-4/" >}}) +- [Release notes for 8.2.3]({{< relref "release-notes-8-2-3/" >}}) +- [Release notes for 8.2.2]({{< relref "release-notes-8-2-2/" >}}) +- [Release notes for 8.2.1]({{< relref "release-notes-8-2-1/" >}}) +- [Release notes for 8.2.0]({{< relref "release-notes-8-2-0/" >}}) +- [Release notes for 8.2.0-beta2]({{< relref "release-notes-8-2-0-beta2/" >}}) +- [Release notes for 8.2.0-beta1]({{< relref "release-notes-8-2-0-beta1/" >}}) +- [Release notes for 8.1.8]({{< relref "release-notes-8-1-8/" >}}) +- [Release notes for 8.1.7]({{< relref "release-notes-8-1-7/" >}}) +- [Release notes for 8.1.6]({{< relref "release-notes-8-1-6/" >}}) +- [Release notes for 8.1.5]({{< relref "release-notes-8-1-5/" >}}) +- [Release notes for 8.1.4]({{< relref "release-notes-8-1-4/" >}}) +- [Release notes for 8.1.3]({{< relref "release-notes-8-1-3/" >}}) +- [Release notes for 8.1.2]({{< relref "release-notes-8-1-2/" >}}) +- [Release notes for 8.1.1]({{< relref "release-notes-8-1-1/" >}}) +- [Release notes for 8.1.0]({{< relref "release-notes-8-1-0/" >}}) +- [Release notes for 8.1.0-beta3]({{< relref "release-notes-8-1-0-beta3/" >}}) +- [Release notes for 8.1.0-beta2]({{< relref "release-notes-8-1-0-beta2/" >}}) +- [Release notes for 8.1.0-beta1]({{< relref "release-notes-8-1-0-beta1/" >}}) +- [Release notes for 8.0.7]({{< relref "release-notes-8-0-7/" >}}) +- [Release notes for 8.0.6]({{< relref "release-notes-8-0-6/" >}}) +- [Release notes for 8.0.5]({{< relref "release-notes-8-0-5/" >}}) +- [Release notes for 8.0.4]({{< relref "release-notes-8-0-4/" >}}) +- [Release notes for 8.0.3]({{< relref "release-notes-8-0-3/" >}}) +- [Release notes for 8.0.2]({{< relref "release-notes-8-0-2/" >}}) +- [Release notes for 8.0.1]({{< relref "release-notes-8-0-1/" >}}) +- [Release notes for 8.0.0]({{< relref "release-notes-8-0-0/" >}}) +- [Release notes for 8.0.0-beta3]({{< relref "release-notes-8-0-0-beta3/" >}}) +- [Release notes for 8.0.0-beta2]({{< relref "release-notes-8-0-0-beta2/" >}}) +- [Release notes for 8.0.0-beta1]({{< relref "release-notes-8-0-0-beta1/" >}}) +- [Release notes for 7.5.15]({{< relref "release-notes-7-5-15/" >}}) +- [Release notes for 7.5.13]({{< relref "release-notes-7-5-13/" >}}) +- [Release notes for 7.5.12]({{< relref "release-notes-7-5-12/" >}}) +- [Release notes for 7.5.11]({{< relref "release-notes-7-5-11/" >}}) +- [Release notes for 7.5.10]({{< relref "release-notes-7-5-10/" >}}) +- [Release notes for 7.5.9]({{< relref "release-notes-7-5-9/" >}}) +- [Release notes for 7.5.8]({{< relref "release-notes-7-5-8/" >}}) +- [Release notes for 7.5.7]({{< relref "release-notes-7-5-7/" >}}) +- [Release notes for 7.5.6]({{< relref "release-notes-7-5-6/" >}}) +- [Release notes for 7.5.5]({{< relref "release-notes-7-5-5/" >}}) +- [Release notes for 7.5.4]({{< relref "release-notes-7-5-4/" >}}) +- [Release notes for 7.5.3]({{< relref "release-notes-7-5-3/" >}}) +- [Release notes for 7.5.2]({{< relref "release-notes-7-5-2/" >}}) +- [Release notes for 7.5.1]({{< relref "release-notes-7-5-1/" >}}) +- [Release notes for 7.5.0]({{< relref "release-notes-7-5-0/" >}}) +- [Release notes for 7.5.0-beta2]({{< relref "release-notes-7-5-0-beta2/" >}}) +- [Release notes for 7.5.0-beta1]({{< relref "release-notes-7-5-0-beta1/" >}}) +- [Release notes for 7.4.5]({{< relref "release-notes-7-4-5/" >}}) +- [Release notes for 7.4.3]({{< relref "release-notes-7-4-3/" >}}) +- [Release notes for 7.4.2]({{< relref "release-notes-7-4-2/" >}}) +- [Release notes for 7.4.1]({{< relref "release-notes-7-4-1/" >}}) +- [Release notes for 7.4.0]({{< relref "release-notes-7-4-0/" >}}) +- [Release notes for 7.3.10]({{< relref "release-notes-7-3-10/" >}}) +- [Release notes for 7.3.7]({{< relref "release-notes-7-3-7/" >}}) +- [Release notes for 7.3.6]({{< relref "release-notes-7-3-6/" >}}) +- [Release notes for 7.3.5]({{< relref "release-notes-7-3-5/" >}}) +- [Release notes for 7.3.4]({{< relref "release-notes-7-3-4/" >}}) +- [Release notes for 7.3.3]({{< relref "release-notes-7-3-3/" >}}) +- [Release notes for 7.3.2]({{< relref "release-notes-7-3-2/" >}}) +- [Release notes for 7.3.1]({{< relref "release-notes-7-3-1/" >}}) +- [Release notes for 7.3.0]({{< relref "release-notes-7-3-0/" >}}) diff --git a/docs/sources/release-notes/release-notes-9-0-0-beta2.md b/docs/sources/release-notes/release-notes-9-0-0-beta2.md new file mode 100644 index 00000000000..44e9e6b1080 --- /dev/null +++ b/docs/sources/release-notes/release-notes-9-0-0-beta2.md @@ -0,0 +1,135 @@ ++++ +title = "Release notes for Grafana 9.0.0-beta2" +hide_menu = true ++++ + + + +# Release notes for Grafana 9.0.0-beta2 + +### Features and enhancements + +- **Alerting:** Add legacy indicator to navbar. [#49511](https://github.com/grafana/grafana/pull/49511), [@peterholmberg](https://github.com/peterholmberg) +- **Alerting:** Add templated subject config to email notifier. [#49742](https://github.com/grafana/grafana/pull/49742), [@JacobsonMT](https://github.com/JacobsonMT) +- **Alerting:** Enable Unified Alerting for open source and enterprise. [#49834](https://github.com/grafana/grafana/pull/49834), [@grobinson-grafana](https://github.com/grobinson-grafana) +- **Alerting:** Make alertmanager datasource stable. [#49485](https://github.com/grafana/grafana/pull/49485), [@gillesdemey](https://github.com/gillesdemey) +- **Angular:** Remove deprecated angular modal support and libs. [#49781](https://github.com/grafana/grafana/pull/49781), [@torkelo](https://github.com/torkelo) +- **AuthProxy:** Remove deprecated ldap_sync_ttl setting. [#49902](https://github.com/grafana/grafana/pull/49902), [@kalleep](https://github.com/kalleep) +- **Build:** Enable long term caching for frontend assets. [#47625](https://github.com/grafana/grafana/pull/47625), [@jackw](https://github.com/jackw) +- **Chore:** Remove deprecated TextDisplayOptions export. [#49705](https://github.com/grafana/grafana/pull/49705), [@kaydelaney](https://github.com/kaydelaney) +- **Chore:** Remove deprecated `surface` prop from IconButton. [#49715](https://github.com/grafana/grafana/pull/49715), [@kaydelaney](https://github.com/kaydelaney) +- **Chore:** Remove usage of deprecated getColorForTheme function. [#49519](https://github.com/grafana/grafana/pull/49519), [@kaydelaney](https://github.com/kaydelaney) +- **DatePicker:** Add minDate prop. [#49503](https://github.com/grafana/grafana/pull/49503), [@alexanderzobnin](https://github.com/alexanderzobnin) +- **Notification history:** Enable by default. [#49502](https://github.com/grafana/grafana/pull/49502), [@ashharrison90](https://github.com/ashharrison90) +- **Prometheus:** Add pluginVersion to query. [#49414](https://github.com/grafana/grafana/pull/49414), [@toddtreece](https://github.com/toddtreece) +- **Prometheus:** Enable prometheusStreamingJSONParser by default. [#49475](https://github.com/grafana/grafana/pull/49475), [@toddtreece](https://github.com/toddtreece) +- **Prometheus:** Predefined scopes for Azure authentication. [#49557](https://github.com/grafana/grafana/pull/49557), [@kostrse](https://github.com/kostrse) +- **Prometheus:** Streaming JSON parser performance improvements. [#48792](https://github.com/grafana/grafana/pull/48792), [@toddtreece](https://github.com/toddtreece) +- **ValueMapping:** Add support for regex replacement over multiple lines. [#49607](https://github.com/grafana/grafana/pull/49607), [@ashharrison90](https://github.com/ashharrison90) + +### Bug fixes + +- **Accessibility:** Pressing escape in a Modal or DashboardSettings correctly closes the overlay. [#49500](https://github.com/grafana/grafana/pull/49500), [@ashharrison90](https://github.com/ashharrison90) +- **Alerting:** Validate alert notification UID length. [#45546](https://github.com/grafana/grafana/pull/45546), [@wbrowne](https://github.com/wbrowne) +- **BackendSrv:** Throw an error when fetching an invalid JSON. [#47493](https://github.com/grafana/grafana/pull/47493), [@leventebalogh](https://github.com/leventebalogh) +- **Fix:** Timeseries migration regex override. [#49629](https://github.com/grafana/grafana/pull/49629), [@zoltanbedi](https://github.com/zoltanbedi) +- **Loki:** Fix unwrap parsing in query builder. [#49732](https://github.com/grafana/grafana/pull/49732), [@ivanahuckova](https://github.com/ivanahuckova) +- **Navigation:** Position hamburger menu correctly in mobile view. [#49603](https://github.com/grafana/grafana/pull/49603), [@ashharrison90](https://github.com/ashharrison90) +- **PanelEditor:** Fixes issue with Table view and multi data frames. [#49854](https://github.com/grafana/grafana/pull/49854), [@JoaoSilvaGrafana](https://github.com/JoaoSilvaGrafana) +- **Preferences:** Fix updating of preferences for Navbar and Query History. [#49677](https://github.com/grafana/grafana/pull/49677), [@ivanahuckova](https://github.com/ivanahuckova) +- **TimeRange:** Fixes issue when zooming out on a timerange with timespan 0. [#49622](https://github.com/grafana/grafana/pull/49622), [@JoaoSilvaGrafana](https://github.com/JoaoSilvaGrafana) +- **Variables:** Fixes DS variables not being correctly used in panel queries. [#49323](https://github.com/grafana/grafana/pull/49323), [@JoaoSilvaGrafana](https://github.com/JoaoSilvaGrafana) + +### Breaking changes + +Drop support for deprecated setting ldap_sync_ttl under [auth.proxy] +Only sync_ttl will work from now on Issue [#49902](https://github.com/grafana/grafana/issues/49902) + +Removes support for deprecated `heading` and `description` props. Moving forward, the `Card.Heading` and `Card.Description` components should be used. Issue [#49885](https://github.com/grafana/grafana/issues/49885) + +Removes the deprecated `link` variant from the `Button` component. +To migrate, replace any usage of `variant="link"` with `fill="text"`. Issue [#49843](https://github.com/grafana/grafana/issues/49843) + +Removes the deprecated `surface` prop from the `IconButton` component. This prop hasn't actually done anything for a while, so it should be safe to just remove any instances of its usage. +Issue [#49715](https://github.com/grafana/grafana/issues/49715) + +Removes the deprecated `TextDisplayOptions` export from `@grafana/data` in favor of `VizTextDisplayOptions` from `@grafana/schema`. To migrate, just replace usage of `TextDisplayOptions` with `VizTextDisplayOptions`. Issue [#49705](https://github.com/grafana/grafana/issues/49705) + +Removed support for the deprecated `getColorForTheme(color: string, theme: GrafanaTheme)` function in favor of the +`theme.visualization.getColorByName(color: string)` method. The output of this method is identical to the removed function, so migration should just be a matter of rewriting calls of `getColorForTheme(myColor, myTheme)` to `myTheme.visualization.getColorByName(myColor)`. +Issue [#49519](https://github.com/grafana/grafana/issues/49519) + +In the Prometheus data source, for consistency and performance reasons, we changed how we represent `NaN` (not a number) values received from Prometheus. In the past versions, we converted these to `null` in the frontend (for dashboard and explore), and kept as `NaN` in the alerting path. Starting with this version, we will always keep it as `NaN`. This change should be mostly invisible for the users. Issue [#49475](https://github.com/grafana/grafana/issues/49475) + +Plugins using custom Webpack configs could potentially break due to the changes between webpack@4 and webpack@5. Please refer to the [official migration guide](https://webpack.js.org/migrate/5/) for assistance. + +Webpack 5 does not include polyfills for node.js core modules by default (e.g. `buffer`, `stream`, `os`). This can result in failed builds for plugins. If polyfills are required it is recommended to create a custom webpack config in the root of the plugin repo and add the required fallbacks: + +```js +// webpack.config.js + +module.exports.getWebpackConfig = (config, options) => ({ + ...config, + resolve: { + ...config.resolve, + fallback: { + os: require.resolve('os-browserify/browser'), + stream: require.resolve('stream-browserify'), + timers: require.resolve('timers-browserify'), + }, + }, +}); +``` + +Please refer to the webpack build error messages or the [official migration guide](https://webpack.js.org/migrate/5/) for assistance with fallbacks. + +**Which issue(s) this PR fixes**: + + + +Fixes # + +**Special notes for your reviewer**: + +It does not bump the following dependencies to the very latest due to the latest versions being ES modules: + +- ora +- globby +- execa +- chalk + Issue [#47826](https://github.com/grafana/grafana/issues/47826) + +We have changed the internals of `backendSrv.fetch()` to throw an error when the response is an incorrect JSON. + +```javascript +// PREVIOUSLY: this was returning with an empty object {} - in case the response is an invalid JSON +return await getBackendSrv().post(`${API_ROOT}/${id}/install`); + +// AFTER THIS CHANGE: the following will throw an error - in case the response is an invalid JSON +return await getBackendSrv().post(`${API_ROOT}/${id}/install`); +``` + +**When is the response handled as JSON?** + +- If the response has the `"Content-Type: application/json"` header, OR +- If the backendSrv options ([`BackendSrvRequest`](https://github.com/grafana/grafana/blob/e237ff20a996c7313632b2e28f38032012f0e340/packages/grafana-runtime/src/services/backendSrv.ts#L8)) specify the response as JSON: `{ responseType: 'json' }` + +**How does it work after this change?** + +- In case it is recognised as a JSON response and the response is empty, it returns an empty object `{}` +- In case it is recognised as a JSON response and it has formatting errors, it throws an error + +**How to migrate?** +Make sure to handle possible errors on the callsite where using `backendSrv.fetch()` (or any other `backendSrv` methods). Issue [#47493](https://github.com/grafana/grafana/issues/47493) + +### Plugin development fixes & changes + +- **UI/Card:** Remove deprecated props. [#49885](https://github.com/grafana/grafana/pull/49885), [@kaydelaney](https://github.com/kaydelaney) +- **UI/Button:** Remove deprecated "link" variant. [#49843](https://github.com/grafana/grafana/pull/49843), [@kaydelaney](https://github.com/kaydelaney) +- **Toolkit:** Bump dependencies. [#47826](https://github.com/grafana/grafana/pull/47826), [@jackw](https://github.com/jackw) diff --git a/docs/sources/variables/variable-types/_index.md b/docs/sources/variables/variable-types/_index.md index 8c6d857a2d7..433477869af 100644 --- a/docs/sources/variables/variable-types/_index.md +++ b/docs/sources/variables/variable-types/_index.md @@ -18,5 +18,5 @@ Grafana uses several types of variables. | Data source | Quickly change the data source for an entire dashboard. [Add a data source variable]({{< relref "add-data-source-variable.md" >}}). | | Interval | Interval variables represent time spans. [Add an interval variable]({{< relref "add-interval-variable.md" >}}). | | Ad hoc filters | Key/value filters that are automatically added to all metric queries for a data source (InfluxDB, Prometheus, and Elasticsearch only). [Add ad hoc filters]({{< relref "add-ad-hoc-filters.md" >}}). | -| Global variables | Built-in variables that can be used in expressions in the query editor. Refer to [Global variables]({{< relref "global-variables" >}}). | +| Global variables | Built-in variables that can be used in expressions in the query editor. Refer to [Global variables]({{< relref "global-variables/" >}}). | | Chained variables | Variable queries can contain other variables. Refer to [Chained variables]({{< relref "chained-variables.md" >}}). | diff --git a/docs/sources/visualizations/_index.md b/docs/sources/visualizations/_index.md index 4e1435d2f2d..d338ed8dfff 100644 --- a/docs/sources/visualizations/_index.md +++ b/docs/sources/visualizations/_index.md @@ -13,28 +13,28 @@ Grafana offers a variety of visualizations to support different use cases. This > **Note:** If you are unsure which visualization to pick, Grafana can provide visualization suggestions based on the panel query. When you select a visualization, Grafana will show a preview with that visualization applied. For more information, see the [add a panel]({{< relref "../panels/working-with-panels/add-panel.md" >}}) documentation. - Graphs & charts - - [Time series]({{< relref "./time-series/_index.md" >}}) is the default and main Graph visualization. - - [State timeline]({{< relref "./state-timeline.md" >}}) for state changes over time. - - [Status history]({{< relref "./status-history.md" >}}) for periodic state over time. - - [Bar chart]({{< relref "./bar-chart.md" >}}) shows any categorical data. - - [Histogram]({{< relref "./histogram.md" >}}) calculates and shows value distribution in a bar chart. - - [Heatmap]({{< relref "./heatmap.md" >}}) visualizes data in two dimensions, used typically for the magnitude of a phenomenon. - - [Pie chart]({{< relref "./pie-chart-panel.md" >}}) is typically used where proportionality is important. - - [Candlestick]({{< relref "./candlestick.md" >}}) is typically for financial data where the focus is price/data movement. + - [Time series]({{< relref "time-series/_index.md" >}}) is the default and main Graph visualization. + - [State timeline]({{< relref "state-timeline.md" >}}) for state changes over time. + - [Status history]({{< relref "status-history.md" >}}) for periodic state over time. + - [Bar chart]({{< relref "bar-chart.md" >}}) shows any categorical data. + - [Histogram]({{< relref "histogram.md" >}}) calculates and shows value distribution in a bar chart. + - [Heatmap]({{< relref "heatmap.md" >}}) visualizes data in two dimensions, used typically for the magnitude of a phenomenon. + - [Pie chart]({{< relref "pie-chart-panel.md" >}}) is typically used where proportionality is important. + - [Candlestick]({{< relref "candlestick.md" >}}) is typically for financial data where the focus is price/data movement. - Stats & numbers - - [Stat]({{< relref "./stat-panel.md" >}}) for big stats and optional sparkline. - - [Gauge]({{< relref "./gauge-panel.md" >}}) is a normal radial gauge. - - [Bar gauge]({{< relref "./bar-gauge-panel.md" >}}) is a horizontal or vertical bar gauge. + - [Stat]({{< relref "stat-panel.md" >}}) for big stats and optional sparkline. + - [Gauge]({{< relref "gauge-panel.md" >}}) is a normal radial gauge. + - [Bar gauge]({{< relref "bar-gauge-panel.md" >}}) is a horizontal or vertical bar gauge. - Misc - - [Table]({{< relref "./table/_index.md" >}}) is the main and only table visualization. - - [Logs]({{< relref "./logs-panel.md" >}}) is the main visualization for logs. - - [Node Graph]({{< relref "./node-graph.md" >}}) for directed graphs or networks. - - [Traces]({{< relref "./traces.md" >}}) is the main visualization for traces. + - [Table]({{< relref "table/_index.md" >}}) is the main and only table visualization. + - [Logs]({{< relref "logs-panel.md" >}}) is the main visualization for logs. + - [Node Graph]({{< relref "node-graph.md" >}}) for directed graphs or networks. + - [Traces]({{< relref "traces.md" >}}) is the main visualization for traces. - Widgets - - [Dashboard list]({{< relref "./dashboard-list-panel.md" >}}) can list dashboards. - - [Alert list]({{< relref "./alert-list-panel.md" >}}) can list alerts. - - [Text panel]({{< relref "./text-panel.md" >}}) can show markdown and html. - - [News panel]({{< relref "./news-panel.md" >}}) can show RSS feeds. + - [Dashboard list]({{< relref "dashboard-list-panel.md" >}}) can list dashboards. + - [Alert list]({{< relref "alert-list-panel.md" >}}) can list alerts. + - [Text panel]({{< relref "text-panel.md" >}}) can show markdown and html. + - [News panel]({{< relref "news-panel.md" >}}) can show RSS feeds. ## Get more @@ -46,11 +46,11 @@ Below you can find some good examples for how all the visualizations in Grafana ### Graphs -For time based line, area and bar charts we recommend the default [Time series]({{< relref "./time-series/_index.md" >}}) visualization. [This public demo dashboard](https://play.grafana.org/d/000000016/1-time-series-graphs?orgId=1) contains many different examples for how this visualization can be configured and styled. +For time based line, area and bar charts we recommend the default [Time series]({{< relref "time-series/_index.md" >}}) visualization. [This public demo dashboard](https://play.grafana.org/d/000000016/1-time-series-graphs?orgId=1) contains many different examples for how this visualization can be configured and styled. {{< figure src="/static/img/docs/time-series-panel/time_series_small_example.png" max-width="700px" caption="Time series" >}} -For categorical data use the [Bar chart]({{< relref "./bar-chart.md" >}}) visualization. +For categorical data use the [Bar chart]({{< relref "bar-chart.md" >}}) visualization. {{< figure src="/static/img/docs/bar-chart-panel/barchart_small_example.png" max-width="700px" caption="Bar chart" >}} @@ -62,29 +62,29 @@ The [Stat](stat-panel/) visualization shows one large stat value with an optiona ### Gauge -If you want to present a value as it relates to a min and max value you have two options. First a standard [Radial Gauge]({{< relref "./gauge-panel.md" >}}) shown below. +If you want to present a value as it relates to a min and max value you have two options. First a standard [Radial Gauge]({{< relref "gauge-panel.md" >}}) shown below. {{< figure src="/static/img/docs/v66/gauge_panel_cover.png" max-width="700px" >}} -Secondly Grafana also has a horizontal or vertical [Bar gauge]({{< relref "./bar-gauge-panel.md" >}}) with three different distinct display modes. +Secondly Grafana also has a horizontal or vertical [Bar gauge]({{< relref "bar-gauge-panel.md" >}}) with three different distinct display modes. {{< figure src="/static/img/docs/v66/bar_gauge_lcd.png" max-width="700px" >}} ### Table -To show data in a table layout, use the [Table]({{< relref "./table/_index.md" >}}) visualization. +To show data in a table layout, use the [Table]({{< relref "table/_index.md" >}}) visualization. {{< figure src="/static/img/docs/tables/table_visualization.png" max-width="700px" lightbox="true" caption="Table visualization" >}} ### Pie chart -Grafana now ships with an included [Pie chart]({{< relref "./pie-chart-panel.md" >}}) visualization. +Grafana now ships with an included [Pie chart]({{< relref "pie-chart-panel.md" >}}) visualization. {{< figure src="/static/img/docs/pie-chart-panel/pie-chart-example.png" max-width="700px" lightbox="true" caption="Pie chart visualization" >}} ### Heatmaps -To show value distribution over, time use the [heatmap]({{< relref "./heatmap.md" >}}) visualization. +To show value distribution over, time use the [heatmap]({{< relref "heatmap.md" >}}) visualization. {{< figure src="/static/img/docs/v43/heatmap_panel_cover.jpg" max-width="1000px" lightbox="true" caption="Heatmap" >}} diff --git a/docs/sources/visualizations/candlestick.md b/docs/sources/visualizations/candlestick.md index 8208781452b..1bbe8c427a0 100644 --- a/docs/sources/visualizations/candlestick.md +++ b/docs/sources/visualizations/candlestick.md @@ -20,7 +20,7 @@ The Candlestick panel allows you to visualize data that includes a number of con {{< figure src="/static/img/docs/candlestick-panel/candlestick-panel-8-3.png" max-width="1200px" caption="Candlestick panel" >}} -The Candlestick panel builds upon the foundation of the [time series]({{< relref "./time-series/_index.md" >}}) panel and includes many common configuration settings. +The Candlestick panel builds upon the foundation of the [time series]({{< relref "time-series/_index.md" >}}) panel and includes many common configuration settings. ## Mode @@ -56,4 +56,4 @@ The candlestick panel will attempt to map fields to the appropriate dimension. T ## Additional fields -The candlestick panel is based on the time series panel. It can visualization additional data dimensions beyond open, high, low, close, and volume The **Include** and **Ignore** options allow the panel to visualize other included data such as simple moving averages, Bollinger bands and more, using the same styles and configurations available in the [time series]({{< relref "./time-series/_index.md" >}}) panel. +The candlestick panel is based on the time series panel. It can visualization additional data dimensions beyond open, high, low, close, and volume The **Include** and **Ignore** options allow the panel to visualize other included data such as simple moving averages, Bollinger bands and more, using the same styles and configurations available in the [time series]({{< relref "time-series/_index.md" >}}) panel. diff --git a/docs/sources/visualizations/graph-panel.md b/docs/sources/visualizations/graph-panel.md index 4fbb88db7a4..d59158be92c 100644 --- a/docs/sources/visualizations/graph-panel.md +++ b/docs/sources/visualizations/graph-panel.md @@ -16,7 +16,7 @@ weight: 500 # Graph panel (old) -> **Note:** [Time series panel]({{< relref "./time-series/_index.md" >}}) visualization is going to replace the Graph panel visualization in a future release. +> **Note:** [Time series panel]({{< relref "time-series/_index.md" >}}) visualization is going to replace the Graph panel visualization in a future release. The graph panel can render metrics as a line, a path of dots, or a series of bars. This type of graph is versatile enough to display almost any time-series data. diff --git a/docs/sources/visualizations/table/_index.md b/docs/sources/visualizations/table/_index.md index 5edbe5a5e52..9dad366bf35 100644 --- a/docs/sources/visualizations/table/_index.md +++ b/docs/sources/visualizations/table/_index.md @@ -113,7 +113,7 @@ Enables value inspection from table cell. The raw value is presented in a modal ## Column filter -You can temporarily change how column data is displayed. For example, you can order values from highest to lowest or hide specific values. For more information, refer to [Filter table columns]({{< relref "./filter-table-columns.md" >}}). +You can temporarily change how column data is displayed. For example, you can order values from highest to lowest or hide specific values. For more information, refer to [Filter table columns]({{< relref "filter-table-columns.md" >}}). ## Pagination diff --git a/docs/sources/visualizations/time-series/_index.md b/docs/sources/visualizations/time-series/_index.md index b4d5b0428a2..17e19819a1e 100644 --- a/docs/sources/visualizations/time-series/_index.md +++ b/docs/sources/visualizations/time-series/_index.md @@ -37,11 +37,11 @@ Choose which of the [standard calculations]({{< relref "../../panels/calculation Use these options to choose how to display your time series data. -- [Graph time series as lines]({{< relref "./graph-time-series-as-lines.md" >}}) -- [Graph time series as bars]({{< relref "./graph-time-series-as-bars.md" >}}) -- [Graph time series as points]({{< relref "./graph-time-series-as-points.md" >}}) -- [Graph stacked time series]({{< relref "./graph-time-series-stacking.md" >}}) -- [Graph and color schemes]({{< relref "./graph-color-scheme.md" >}}) +- [Graph time series as lines]({{< relref "graph-time-series-as-lines.md" >}}) +- [Graph time series as bars]({{< relref "graph-time-series-as-bars.md" >}}) +- [Graph time series as points]({{< relref "graph-time-series-as-points.md" >}}) +- [Graph stacked time series]({{< relref "graph-time-series-stacking.md" >}}) +- [Graph and color schemes]({{< relref "graph-color-scheme.md" >}}) ### Transform diff --git a/docs/sources/visualizations/time-series/graph-time-series-as-bars.md b/docs/sources/visualizations/time-series/graph-time-series-as-bars.md index 41116db1218..f863dcba80f 100644 --- a/docs/sources/visualizations/time-series/graph-time-series-as-bars.md +++ b/docs/sources/visualizations/time-series/graph-time-series-as-bars.md @@ -109,7 +109,7 @@ Gradient color is generated based on the hue of the line color. #### Scheme -In this mode the whole bar will use a color gradient defined by your Color scheme. For more information, refer to [Apply color to series and fields]({{< relref "../../panels/working-with-panels/apply-color-to-series.md" >}}). There is more information on this option in [Graph and color scheme]({{< relref "./graph-color-scheme.md" >}}). +In this mode the whole bar will use a color gradient defined by your Color scheme. For more information, refer to [Apply color to series and fields]({{< relref "../../panels/working-with-panels/apply-color-to-series.md" >}}). There is more information on this option in [Graph and color scheme]({{< relref "graph-color-scheme.md" >}}). {{< figure src="/static/img/docs/time-series-panel/gradient_mode_scheme_bars.png" max-width="1200px" caption="Gradient color scheme mode" >}} diff --git a/docs/sources/visualizations/time-series/graph-time-series-as-lines.md b/docs/sources/visualizations/time-series/graph-time-series-as-lines.md index 3de1cda08c1..5a3c0856356 100644 --- a/docs/sources/visualizations/time-series/graph-time-series-as-lines.md +++ b/docs/sources/visualizations/time-series/graph-time-series-as-lines.md @@ -114,7 +114,7 @@ Gradient color is generated based on the hue of the line color. #### Scheme -In this mode the whole line will use a color gradient defined by your Color scheme. For more information, refer to [Apply color to series and fields]({{< relref "../../panels/working-with-panels/apply-color-to-series.md" >}}). There is more information on this option in [Graph and color scheme]({{< relref "./graph-color-scheme.md" >}}). +In this mode the whole line will use a color gradient defined by your Color scheme. For more information, refer to [Apply color to series and fields]({{< relref "../../panels/working-with-panels/apply-color-to-series.md" >}}). There is more information on this option in [Graph and color scheme]({{< relref "graph-color-scheme.md" >}}). {{< figure src="/static/img/docs/time-series-panel/gradient_mode_scheme_line.png" max-width="1200px" caption="Gradient mode scheme" >}} diff --git a/docs/sources/whatsnew/_index.md b/docs/sources/whatsnew/_index.md index 0cbebc88aaf..a2bbba5d6cc 100644 --- a/docs/sources/whatsnew/_index.md +++ b/docs/sources/whatsnew/_index.md @@ -9,7 +9,7 @@ weight: 1 # What's new Grafana Grafana is changing all the time. For release highlights checkout links below, if you want a complete list of every change, as well -as info on deprecations, breaking changes and plugin development read the [release notes]({{< relref "../release-notes" >}}). +as info on deprecations, breaking changes and plugin development read the [release notes]({{< relref "../release-notes/" >}}). ## Grafana 9 @@ -17,37 +17,37 @@ as info on deprecations, breaking changes and plugin development read the [relea ## Grafana 8 -- [What's new in 8.5]({{< relref "whats-new-in-v8-5" >}}) -- [What's new in 8.4]({{< relref "whats-new-in-v8-4" >}}) -- [What's new in 8.3]({{< relref "whats-new-in-v8-3" >}}) -- [What's new in 8.2]({{< relref "whats-new-in-v8-2" >}}) -- [What's new in 8.1]({{< relref "whats-new-in-v8-1" >}}) -- [What's new in 8.0]({{< relref "whats-new-in-v8-0" >}}) +- [What's new in 8.5]({{< relref "whats-new-in-v8-5/" >}}) +- [What's new in 8.4]({{< relref "whats-new-in-v8-4/" >}}) +- [What's new in 8.3]({{< relref "whats-new-in-v8-3/" >}}) +- [What's new in 8.2]({{< relref "whats-new-in-v8-2/" >}}) +- [What's new in 8.1]({{< relref "whats-new-in-v8-1/" >}}) +- [What's new in 8.0]({{< relref "whats-new-in-v8-0/" >}}) ## Grafana 7 -- [What's new in 7.5]({{< relref "whats-new-in-v7-5" >}}) -- [What's new in 7.4]({{< relref "whats-new-in-v7-4" >}}) -- [What's new in 7.3]({{< relref "whats-new-in-v7-3" >}}) -- [What's new in 7.2]({{< relref "whats-new-in-v7-2" >}}) -- [What's new in 7.1]({{< relref "whats-new-in-v7-1" >}}) -- [What's new in 7.0]({{< relref "whats-new-in-v7-0" >}}) +- [What's new in 7.5]({{< relref "whats-new-in-v7-5/" >}}) +- [What's new in 7.4]({{< relref "whats-new-in-v7-4/" >}}) +- [What's new in 7.3]({{< relref "whats-new-in-v7-3/" >}}) +- [What's new in 7.2]({{< relref "whats-new-in-v7-2/" >}}) +- [What's new in 7.1]({{< relref "whats-new-in-v7-1/" >}}) +- [What's new in 7.0]({{< relref "whats-new-in-v7-0/" >}}) ## Grafana 6 -- [What's new in 6.7]({{< relref "whats-new-in-v6-7" >}}) -- [What's new in 6.6]({{< relref "whats-new-in-v6-6" >}}) -- [What's new in 6.5]({{< relref "whats-new-in-v6-5" >}}) -- [What's new in 6.4]({{< relref "whats-new-in-v6-4" >}}) -- [What's new in 6.3]({{< relref "whats-new-in-v6-3" >}}) -- [What's new in 6.2]({{< relref "whats-new-in-v6-2" >}}) -- [What's new in 6.1]({{< relref "whats-new-in-v6-1" >}}) -- [What's new in 6.0]({{< relref "whats-new-in-v6-0" >}}) +- [What's new in 6.7]({{< relref "whats-new-in-v6-7/" >}}) +- [What's new in 6.6]({{< relref "whats-new-in-v6-6/" >}}) +- [What's new in 6.5]({{< relref "whats-new-in-v6-5/" >}}) +- [What's new in 6.4]({{< relref "whats-new-in-v6-4/" >}}) +- [What's new in 6.3]({{< relref "whats-new-in-v6-3/" >}}) +- [What's new in 6.2]({{< relref "whats-new-in-v6-2/" >}}) +- [What's new in 6.1]({{< relref "whats-new-in-v6-1/" >}}) +- [What's new in 6.0]({{< relref "whats-new-in-v6-0/" >}}) ## Grafana 5 -- [What's new in 5.4]({{< relref "whats-new-in-v5-4" >}}) -- [What's new in 5.3]({{< relref "whats-new-in-v5-3" >}}) -- [What's new in 5.2]({{< relref "whats-new-in-v5-2" >}}) -- [What's new in 5.1]({{< relref "whats-new-in-v5-1" >}}) -- [What's new in 5.0]({{< relref "whats-new-in-v5-0" >}}) +- [What's new in 5.4]({{< relref "whats-new-in-v5-4/" >}}) +- [What's new in 5.3]({{< relref "whats-new-in-v5-3/" >}}) +- [What's new in 5.2]({{< relref "whats-new-in-v5-2/" >}}) +- [What's new in 5.1]({{< relref "whats-new-in-v5-1/" >}}) +- [What's new in 5.0]({{< relref "whats-new-in-v5-0/" >}}) diff --git a/docs/sources/whatsnew/whats-new-in-v5-4.md b/docs/sources/whatsnew/whats-new-in-v5-4.md index 6d1892dd4af..93931c266a2 100644 --- a/docs/sources/whatsnew/whats-new-in-v5-4.md +++ b/docs/sources/whatsnew/whats-new-in-v5-4.md @@ -52,9 +52,9 @@ Stackdriver is the first data source which has support for a custom templating q create their very own templating query editor. Additionally, if Grafana is running on a Google Compute Engine (GCE) virtual machine, it is now possible for Grafana to automatically retrieve default credentials from the metadata server. -This has the advantage of not needing to generate a private key file for the service account and also not having to upload the file to Grafana. [Learn more]({{< relref "../datasources/google-cloud-monitoring/_index.md/#using-gce-default-service-account" >}}). +This has the advantage of not needing to generate a private key file for the service account and also not having to upload the file to Grafana. [Learn more]({{< relref "../datasources/google-cloud-monitoring/_index.md#using-gce-default-service-account" >}}). -Please read [Using Google Stackdriver in Grafana]({{< relref "../datasources/google-cloud-monitoring/_index.md/" >}}) for more detailed information on how to get started and use it. +Please read [Using Google Stackdriver in Grafana]({{< relref "../datasources/google-cloud-monitoring/_index.md" >}}) for more detailed information on how to get started and use it.
diff --git a/docs/sources/whatsnew/whats-new-in-v6-0.md b/docs/sources/whatsnew/whats-new-in-v6-0.md index c60c326f868..c19265cb086 100644 --- a/docs/sources/whatsnew/whats-new-in-v6-0.md +++ b/docs/sources/whatsnew/whats-new-in-v6-0.md @@ -121,7 +121,7 @@ will be shared soon. Built-in support for [Google Stackdriver](https://cloud.google.com/stackdriver/) is officially released in Grafana 6.0. Beta support was added in Grafana 5.3 and we have added lots of improvements since then. -To get started read the guide: [Using Google Stackdriver in Grafana]({{< relref "../datasources/google-cloud-monitoring/_index.md/" >}}). +To get started read the guide: [Using Google Stackdriver in Grafana]({{< relref "../datasources/google-cloud-monitoring/_index.md" >}}). ## Azure Monitor data source diff --git a/docs/sources/whatsnew/whats-new-in-v6-5.md b/docs/sources/whatsnew/whats-new-in-v6-5.md index 6240925bd41..36ff103297f 100644 --- a/docs/sources/whatsnew/whats-new-in-v6-5.md +++ b/docs/sources/whatsnew/whats-new-in-v6-5.md @@ -179,7 +179,7 @@ In the Explore split view, you can now link the two timepickers so that if you c ### Alerting support for Azure Application Insights -The [Azure Monitor]({{< relref "../datasources/azuremonitor/" >}}) data source supports multiple services in the Azure cloud. Before Grafana v6.5, only the Azure Monitor service had support for [Grafana Alerting]({{< relref "../alerting" >}}). In Grafana 6.5, alerting support has been implemented for the [Application Insights service]({{< relref "../datasources/azuremonitor/#querying-the-application-insights-service" >}}). +The [Azure Monitor]({{< relref "../datasources/azuremonitor/" >}}) data source supports multiple services in the Azure cloud. Before Grafana v6.5, only the Azure Monitor service had support for [Grafana Alerting]({{< relref "../alerting/" >}}). In Grafana 6.5, alerting support has been implemented for the [Application Insights service]({{< relref "../datasources/azuremonitor/#querying-the-application-insights-service" >}}). ### Allow saving of provisioned dashboards from UI diff --git a/docs/sources/whatsnew/whats-new-in-v6-7.md b/docs/sources/whatsnew/whats-new-in-v6-7.md index 954e38fbbec..39efc5c9a1e 100644 --- a/docs/sources/whatsnew/whats-new-in-v6-7.md +++ b/docs/sources/whatsnew/whats-new-in-v6-7.md @@ -42,7 +42,7 @@ General features are included in all Grafana editions. Query history is a new feature that lets you view and interact with the queries that you have previously run in Explore. You can add queries to the Explore query editor, write comments, create and share URL links, star your favorite queries, and much more. Starred queries are displayed in Starred tab, so it is easier to reuse queries that you run often without typing them from scratch. -Learn more about query history in [Explore]({{< relref "../explore" >}}). +Learn more about query history in [Explore]({{< relref "../explore/" >}}). {{< figure src="/static/img/docs/v67/rich-history.gif" max-width="1024px" caption="Query history" >}} @@ -54,7 +54,7 @@ Grafana v6.7 comes with a new OAuth integration for Microsoft Azure Active Direc Allowing a low dashboard refresh interval can cause severe load on data sources and Grafana. Grafana v6.7 allows you to restrict the dashboard refresh interval so it cannot be set lower than a given interval. This provides a way for administrators to control dashboard refresh behavior on a global level. -Refer to min_refresh_interval in [Configuration]({{< relref "../administration/configuration#min-refresh-interval" >}}) for more information and how to enable this feature. +Refer to min_refresh_interval in [Configuration]({{< relref "../administration/configuration/#min-refresh-interval" >}}) for more information and how to enable this feature. ### Stackdriver project selector diff --git a/docs/sources/whatsnew/whats-new-in-v7-0.md b/docs/sources/whatsnew/whats-new-in-v7-0.md index e4165bbf46f..10248a62208 100644 --- a/docs/sources/whatsnew/whats-new-in-v7-0.md +++ b/docs/sources/whatsnew/whats-new-in-v7-0.md @@ -182,11 +182,11 @@ Read more about [Image Rendering]({{< relref "../image-rendering/" >}}) in the d The Query history feature lets you view and interact with the queries that you have previously run in Explore. You can add queries to the Explore query editor, write comments, create and share URL links, star your favorite queries, and much more. Starred queries are displayed in the Starred tab, so it is easier to reuse queries that you run often without typing them from scratch. -It was released as a beta feature in Grafana 6.7. The feedback has been really positive and it is now out of beta for the 7.0 release. Learn more about query history in [Explore]({{< relref "../explore" >}}). +It was released as a beta feature in Grafana 6.7. The feedback has been really positive and it is now out of beta for the 7.0 release. Learn more about query history in [Explore]({{< relref "../explore/" >}}). ## Stackdriver data source supports Service Monitoring -[Service monitoring](https://cloud.google.com/service-monitoring) in Google Cloud Platform (GCP) enables you to monitor based on Service Level Objectives (SLOs) for your GCP services. The new SLO query builder in the Stackdriver data source allows you to display SLO data in Grafana. Read more about it in the [Stackdriver data source documentation]({{< relref "../datasources/google-cloud-monitoring/_index.md/#slo-service-level-objective-queries" >}}). +[Service monitoring](https://cloud.google.com/service-monitoring) in Google Cloud Platform (GCP) enables you to monitor based on Service Level Objectives (SLOs) for your GCP services. The new SLO query builder in the Stackdriver data source allows you to display SLO data in Grafana. Read more about it in the [Stackdriver data source documentation]({{< relref "../datasources/google-cloud-monitoring/_index.md#slo-service-level-objective-queries" >}}). ## Time zone support @@ -221,7 +221,7 @@ This release includes a series of features that build on our new usage analytics ### SAML Role and Team Sync -SAML support in Grafana Enterprise is improved by adding Role and Team Sync. Read more about how to use these features in the [SAML team sync documentation]({{< relref "../enterprise/saml/configure-saml.md#configure-team-sync" >}}). +SAML support in Grafana Enterprise is improved by adding Role and Team Sync. Read more about how to use these features in the [SAML team sync documentation]({{< relref "../enterprise/configure-saml.md#configure-team-sync" >}}). ### Okta OAuth Team Sync diff --git a/docs/sources/whatsnew/whats-new-in-v7-3.md b/docs/sources/whatsnew/whats-new-in-v7-3.md index b435b83b3f8..7f9813dbfad 100644 --- a/docs/sources/whatsnew/whats-new-in-v7-3.md +++ b/docs/sources/whatsnew/whats-new-in-v7-3.md @@ -82,7 +82,7 @@ The updated Google Cloud monitoring data source is shipped with pre-configured d To import the pre-configured dashboards, go to the configuration page of your Google Cloud Monitoring data source and click on the `Dashboards` tab. Click `Import` for the dashboard you would like to use. To customize the dashboard, we recommend to save the dashboard under a different name, because otherwise the dashboard will be overwritten when a new version of the dashboard is released. -For more details, see the [Google Cloud Monitoring docs]({{< relref "../datasources/google-cloud-monitoring/_index.md/#out-of-the-box-dashboards" >}}) +For more details, see the [Google Cloud Monitoring docs]({{< relref "../datasources/google-cloud-monitoring/_index.md#out-of-the-box-dashboards" >}}) ## Shorten URL for dashboards and Explore @@ -142,11 +142,11 @@ Insights: ### SAML single logout -SAML’s single logout (SLO) capability allows users to log out from all applications associated with the current identity provider (IdP) session established via SAML SSO. For more information, refer to the [docs]({{< relref "../enterprise/saml/#single-logout" >}}). +SAML’s single logout (SLO) capability allows users to log out from all applications associated with the current identity provider (IdP) session established via SAML SSO. For more information, refer to the [docs]({{< relref "../enterprise/configure-saml/#single-logout" >}}). ### SAML IdP-initiated single sign on -IdP-initiated single sign on (SSO) allows the user to log in directly from the SAML identity provider (IdP). It is disabled by default for security reasons. For more information, refer to the [docs]({{< relref "../enterprise/saml/#idp-initiated-single-sign-on-sso" >}}). +IdP-initiated single sign on (SSO) allows the user to log in directly from the SAML identity provider (IdP). It is disabled by default for security reasons. For more information, refer to the [docs]({{< relref "../enterprise/configure-saml/#idp-initiated-single-sign-on-sso" >}}). ## Upgrading diff --git a/docs/sources/whatsnew/whats-new-in-v7-4.md b/docs/sources/whatsnew/whats-new-in-v7-4.md index 735dd5f2a10..dc5a2787f15 100644 --- a/docs/sources/whatsnew/whats-new-in-v7-4.md +++ b/docs/sources/whatsnew/whats-new-in-v7-4.md @@ -40,7 +40,7 @@ The following documentation topics were added for this feature: - [Time series panel]({{< relref "../visualizations/time-series/_index.md" >}}) - [Graph time series as lines]({{< relref "../visualizations/time-series/graph-time-series-as-lines.md" >}}) - [Graph time series as bars]({{< relref "../visualizations/time-series/graph-time-series-as-bars.md" >}}) -- [Graph time series as points]({{< relref "../visualizations/time-series/graph-time-series-as-points" >}}) +- [Graph time series as points]({{< relref "../visualizations/time-series/graph-time-series-as-points/" >}}) - [Change axis display]({{< relref "../visualizations/time-series/change-axis-display.md" >}}) ### Node graph panel visualization (Beta) @@ -171,7 +171,7 @@ Google Cloud Monitoring data source ships with pre-configured dashboards for som If you want to customize a dashboard, we recommend that you save it under a different name. Otherwise the dashboard will be overwritten when a new version of the dashboard is released. -For more information, refer to the [Google Cloud Monitoring docs]({{< relref "../datasources/google-cloud-monitoring/_index.md/#out-of-the-box-dashboards" >}}). +For more information, refer to the [Google Cloud Monitoring docs]({{< relref "../datasources/google-cloud-monitoring/_index.md#out-of-the-box-dashboards" >}}). ### Query Editor Help @@ -209,7 +209,7 @@ For more information, refer to [Export logs of usage insights]({{< relref "../en ### New audit log events -New log out events are logged based on when a token expires or is revoked, as well as [SAML Single Logout]({{< relref "../enterprise/saml/configure-saml.md#single-logout" >}}). A `tokenId` field was added to all audit logs to help understand which session was logged out of. +New log out events are logged based on when a token expires or is revoked, as well as [SAML Single Logout]({{< relref "../enterprise/configure-saml.md#single-logout" >}}). A `tokenId` field was added to all audit logs to help understand which session was logged out of. Also, a counter for audit log writing actions with status (success / failure) and logger (loki / file / console) labels was added. diff --git a/docs/sources/whatsnew/whats-new-in-v8-0.md b/docs/sources/whatsnew/whats-new-in-v8-0.md index 4d10b2d8df3..d5db7cebfc4 100644 --- a/docs/sources/whatsnew/whats-new-in-v8-0.md +++ b/docs/sources/whatsnew/whats-new-in-v8-0.md @@ -45,7 +45,7 @@ In addition to data source integration, events can be sent to dashboards by post These metrics will be broadcast to all dashboards connected to that stream endpoint. -For more information about real-time streaming, refer to [Grafana Live documentation]({{< relref "../live/set-up-grafana-live" >}}). +For more information about real-time streaming, refer to [Grafana Live documentation]({{< relref "../live/set-up-grafana-live/" >}}). ### Prometheus metrics browser diff --git a/docs/sources/whatsnew/whats-new-in-v8-1.md b/docs/sources/whatsnew/whats-new-in-v8-1.md index 167a3a43806..92b4c48a4d8 100644 --- a/docs/sources/whatsnew/whats-new-in-v8-1.md +++ b/docs/sources/whatsnew/whats-new-in-v8-1.md @@ -136,7 +136,7 @@ We’d love as much feedback as possible about this change, because we are consi ### High availability setup support for Grafana Live -We have added an experimental HA setup support for Grafana Live with Redis. This resolves the limitation when clients were connected to different Grafana instances and those instances had no shared state. For additional information, refer to [Configure Grafana Live HA setup]({{< relref "../live//set-up-grafana-live/#configure-grafana-live-ha-setup" >}}). +We have added an experimental HA setup support for Grafana Live with Redis. This resolves the limitation when clients were connected to different Grafana instances and those instances had no shared state. For additional information, refer to [Configure Grafana Live HA setup]({{< relref "../live/set-up-grafana-live/#configure-grafana-live-ha-setup" >}}). ## Enterprise features diff --git a/e2e/panels-suite/panelEdit_base.spec.ts b/e2e/panels-suite/panelEdit_base.spec.ts index 1436fc457ac..8eb18531ddd 100644 --- a/e2e/panels-suite/panelEdit_base.spec.ts +++ b/e2e/panels-suite/panelEdit_base.spec.ts @@ -102,7 +102,7 @@ e2e.scenario({ e2e.components.PanelEditor.DataPane.content().should('be.visible'); // Field & Overrides tabs (need to switch to React based vis, i.e. Table) - e2e.components.PanelEditor.OptionsPane.fieldLabel('Header and footer Show header').should('be.visible'); + e2e.components.PanelEditor.OptionsPane.fieldLabel('Table Show table header').should('be.visible'); e2e.components.PanelEditor.OptionsPane.fieldLabel('Table Column width').should('be.visible'); }, }); diff --git a/go.mod b/go.mod index 3900b7e23b5..b5897178db2 100644 --- a/go.mod +++ b/go.mod @@ -11,9 +11,6 @@ replace github.com/denisenkom/go-mssqldb => github.com/grafana/go-mssqldb v0.0.0 // It's also present on grafana/loki's go.mod so we'll need till it gets updated. replace k8s.io/client-go => k8s.io/client-go v0.22.1 -// Github issue https://github.com/etcd-io/etcd/issues/11154 -replace go.etcd.io/etcd => go.etcd.io/etcd v0.0.0-20200520232829-54ba9589114f - replace github.com/russellhaering/goxmldsig@v1.1.0 => github.com/russellhaering/goxmldsig v1.1.1 require ( @@ -56,7 +53,7 @@ require ( github.com/grafana/cuetsy v0.0.1 github.com/grafana/grafana-aws-sdk v0.10.3 github.com/grafana/grafana-azure-sdk-go v1.2.0 - github.com/grafana/grafana-plugin-sdk-go v0.134.0 + github.com/grafana/grafana-plugin-sdk-go v0.136.0 github.com/grafana/loki v1.6.2-0.20211015002020-7832783b1caa github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 github.com/hashicorp/go-hclog v1.0.0 @@ -251,7 +248,7 @@ require ( github.com/golang-migrate/migrate/v4 v4.7.0 github.com/grafana/dskit v0.0.0-20211011144203-3a88ec0b675f github.com/grafana/thema v0.0.0-20220523183731-72aebd14e751 - go.etcd.io/etcd v3.3.25+incompatible + go.etcd.io/etcd/api/v3 v3.5.4 go.opentelemetry.io/contrib/propagators/jaeger v1.6.0 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.6.3 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.6.3 diff --git a/go.sum b/go.sum index 0f8a1421224..73a2ab06f3e 100644 --- a/go.sum +++ b/go.sum @@ -585,6 +585,7 @@ github.com/cockroachdb/apd/v2 v2.0.1/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOG github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= github.com/cockroachdb/cockroach-go v0.0.0-20181001143604-e0a95dfd547c/go.mod h1:XGLbWH/ujMcbPbhZq52Nv6UrCghb1yGn//133kEsvDk= +github.com/cockroachdb/datadriven v0.0.0-20190531201743-edce55837238/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo= github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA= @@ -880,7 +881,6 @@ github.com/elazarl/goproxy/ext v0.0.0-20220115173737-adb46da277ac/go.mod h1:gNh8 github.com/ema/qdisc v0.0.0-20190904071900-b82c76788043/go.mod h1:ix4kG2zvdUd8kEKSW0ZTr1XLks0epFpI4j745DXxlNE= github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/emicklei/proto v1.6.15 h1:XbpwxmuOPrdES97FrSfpyy67SSCV/wBIKXqgJzh6hNw= github.com/emicklei/proto v1.6.15/go.mod h1:rn1FgRS/FANiZdD2djyH7TMA9jdRDcYQ9IEN9yvjX0A= github.com/emicklei/proto v1.10.0 h1:pDGyFRVV5RvV+nkBK9iy3q67FBy9Xa7vwrOTE+g5aGw= github.com/emicklei/proto v1.10.0/go.mod h1:rn1FgRS/FANiZdD2djyH7TMA9jdRDcYQ9IEN9yvjX0A= @@ -1217,6 +1217,7 @@ github.com/gogo/googleapis v1.2.0/go.mod h1:Njal3psf3qN6dwBtQfUmBZh2ybovJ0tlu3o/ github.com/gogo/googleapis v1.4.0/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= +github.com/gogo/protobuf v1.0.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.0/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= @@ -1297,6 +1298,7 @@ github.com/gomodule/redigo v1.8.4/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUz github.com/gomodule/redigo v1.8.5/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0= github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0= github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= +github.com/google/btree v0.0.0-20180124185431-e89373fe6b4a/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= @@ -1451,8 +1453,8 @@ github.com/grafana/grafana-plugin-sdk-go v0.94.0/go.mod h1:3VXz4nCv6wH5SfgB3mlW3 github.com/grafana/grafana-plugin-sdk-go v0.114.0/go.mod h1:D7x3ah+1d4phNXpbnOaxa/osSaZlwh9/ZUnGGzegRbk= github.com/grafana/grafana-plugin-sdk-go v0.125.0/go.mod h1:9YiJ5GUxIsIEUC0qR9+BJVP5M7mCSP6uc6Ne62YKkgc= github.com/grafana/grafana-plugin-sdk-go v0.129.0/go.mod h1:4edtosZepfQF9jkQwRywJsNSJzXTHmzbmcVcAl8MEQc= -github.com/grafana/grafana-plugin-sdk-go v0.134.0 h1:8j8vsvhU3GabRPWB1EnFKSWt60yQVFPEE/5P1QV2gFw= -github.com/grafana/grafana-plugin-sdk-go v0.134.0/go.mod h1:jmrxelOJKrIK0yrsIzcotS8pbqPZozbmJgGy7k3hK1k= +github.com/grafana/grafana-plugin-sdk-go v0.136.0 h1:DSw/RLUI8pr/zunJUhbTjHyaRzf0IoOZgu2PjLsJ6Wc= +github.com/grafana/grafana-plugin-sdk-go v0.136.0/go.mod h1:jmrxelOJKrIK0yrsIzcotS8pbqPZozbmJgGy7k3hK1k= github.com/grafana/loki v1.6.2-0.20211015002020-7832783b1caa h1:+pXjAxavVR2FKKNsuuCXGCWEj8XGc1Af6SPiyBpzU2A= github.com/grafana/loki v1.6.2-0.20211015002020-7832783b1caa/go.mod h1:0O8o/juxNSKN/e+DzWDTRkl7Zm8CkZcz0NDqEdojlrk= github.com/grafana/saml v0.0.0-20211007135653-aed1b2edd86b h1:YiSGp34F4V0G08HHx1cJBf2GVgwYAkXQjzuVs1t8jYk= @@ -1473,6 +1475,7 @@ github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.0.0-rc.2.0.20201207153454-9f6 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.1-0.20191002090509-6af20e3a5340 h1:uGoIog/wiQHI9GAxXO5TJbT0wWKH3O9HhOJW1F9c3fY= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.1-0.20191002090509-6af20e3a5340/go.mod h1:3bDW6wMZJB7tiONtC/1Xpicra6Wp5GgbTbQWCbI5fkc= +github.com/grpc-ecosystem/grpc-gateway v1.4.1/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.4/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= @@ -1774,6 +1777,7 @@ github.com/jsimonetti/rtnetlink v0.0.0-20190606172950-9527aa82566a/go.mod h1:Oz+ github.com/jsimonetti/rtnetlink v0.0.0-20190830100107-3784a6c7c552/go.mod h1:Oz+70psSo5OFh8DBl0Zv2ACw7Esh6pPUphlvZG9x7uw= github.com/jsimonetti/rtnetlink v0.0.0-20200117123717-f846d4f6c1f4/go.mod h1:WGuG/smIU4J/54PblvSbh+xvCZmpJnFgr3ds6Z55XMQ= github.com/json-iterator/go v0.0.0-20180612202835-f2b4162afba3/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= @@ -1844,6 +1848,7 @@ github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfn github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/pty v1.0.0/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= @@ -1968,6 +1973,7 @@ github.com/mattn/go-sqlite3 v1.14.7/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A github.com/mattn/go-tty v0.0.0-20180907095812-13ff1204f104/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE= github.com/mattn/go-xmlrpc v0.0.3/go.mod h1:mqc2dz7tP5x5BKlCahN/n+hs7OSZKJkS9JsHNBRlrxA= github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= +github.com/matttproud/golang_protobuf_extensions v1.0.0/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= @@ -2143,6 +2149,7 @@ github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/gomega v0.0.0-20151007035656-2152b45fa28a/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= @@ -2275,6 +2282,7 @@ github.com/prometheus/alertmanager v0.23.1-0.20210914172521-e35efbddb66a/go.mod github.com/prometheus/alertmanager v0.23.1-0.20211116083607-e2a10119aaf7 h1:OMwDo53awRp+UzaBrwmVC7HJiAMYP/niBJfKcGpPiac= github.com/prometheus/alertmanager v0.23.1-0.20211116083607-e2a10119aaf7/go.mod h1:1UH4XA4DAXzsvofKVzcXmC0mqt6Y8BZP9JcQWKDmbFc= github.com/prometheus/client_golang v0.0.0-20180209125602-c332b6f63c06/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= @@ -2295,6 +2303,7 @@ github.com/prometheus/client_golang v1.10.0/go.mod h1:WJM3cc3yu7XKBKa/I8WeZm+V3e github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.12.1 h1:ZiaPsmm9uiBeaSMRznKsCDNtPCS0T3JVDGF+06gjBzk= github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_model v0.0.0-20170216185247-6f3806018612/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= @@ -2304,6 +2313,7 @@ github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6T github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/common v0.0.0-20180110214958-89604d197083/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +github.com/prometheus/common v0.0.0-20180518154759-7600349dcfe1/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= @@ -2339,6 +2349,7 @@ github.com/prometheus/exporter-toolkit v0.7.0/go.mod h1:ZUBIj498ePooX9t/2xtDjeQY github.com/prometheus/node_exporter v1.0.0-rc.0.0.20200428091818-01054558c289 h1:dTUS1vaLWq+Y6XKOTnrFpoVsQKLCbCp1OLj24TDi7oM= github.com/prometheus/node_exporter v1.0.0-rc.0.0.20200428091818-01054558c289/go.mod h1:FGbBv5OPKjch+jNUJmEQpMZytIdyW0NdBtWFcfSKusc= github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20180612222113-7d6f385de8be/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= @@ -2380,7 +2391,6 @@ github.com/prometheus/prometheus v1.8.2-0.20211011171444-354d8d2ecfac/go.mod h1: github.com/prometheus/statsd_exporter v0.20.0/go.mod h1:YL3FWCG8JBBtaUSxAg4Gz2ZYu22bS84XM89ZQXXTWmQ= github.com/prometheus/statsd_exporter v0.21.0/go.mod h1:rbT83sZq2V+p73lHhPZfMc3MLCHmSHelCh9hSGYNLTQ= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/protocolbuffers/txtpbfmt v0.0.0-20201118171849-f6a6b3f636fc h1:gSVONBi2HWMFXCa9jFdYvYk7IwW/mTLxWOF7rXS4LO0= github.com/protocolbuffers/txtpbfmt v0.0.0-20201118171849-f6a6b3f636fc/go.mod h1:KbKfKPy2I6ecOIGA9apfheFv14+P3RSmmQvshofQyMY= github.com/protocolbuffers/txtpbfmt v0.0.0-20220428173112-74888fd59c2b h1:zd/2RNzIRkoGGMjE+YIsZ85CnDIz672JK2F3Zl4vux4= github.com/protocolbuffers/txtpbfmt v0.0.0-20220428173112-74888fd59c2b/go.mod h1:KjY0wibdYKc4DYkerHSbguaf3JeIPGhNJBp2BNiFH78= @@ -2488,6 +2498,7 @@ github.com/shurcooL/vfsgen v0.0.0-20200824052919-0d455de96546 h1:pXY9qYc/MP5zdvq github.com/shurcooL/vfsgen v0.0.0-20200824052919-0d455de96546/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= github.com/siebenmann/go-kstat v0.0.0-20160321171754-d34789b79745/go.mod h1:G81aIFAMS9ECrwBYR9YxhlPjWgrItd+Kje78O6+uqm8= github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= +github.com/sirupsen/logrus v1.0.5/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.0.6/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= @@ -2595,14 +2606,10 @@ github.com/thanos-io/thanos v0.13.1-0.20210224074000-659446cab117/go.mod h1:kdqF github.com/thanos-io/thanos v0.13.1-0.20210226164558-03dace0a1aa1/go.mod h1:gMCy4oCteKTT7VuXVvXLTPGzzjovX1VPE5p+HgL1hyU= github.com/thanos-io/thanos v0.13.1-0.20210401085038-d7dff0c84d17/go.mod h1:zU8KqE+6A+HksK4wiep8e/3UvCZLm+Wrw9AqZGaAm9k= github.com/thanos-io/thanos v0.22.0/go.mod h1:SZDWz3phcUcBr4MYFoPFRvl+Z9Nbi45HlwQlwSZSt+Q= -github.com/tidwall/gjson v1.6.0/go.mod h1:P256ACg0Mn+j1RXIDXoss50DeIABTYK1PULOJHhxOls= -github.com/tidwall/gjson v1.6.1/go.mod h1:BaHyNc5bjzYkPqgLq7mdVzeiRtULKULXLgZFKsxEHI0= github.com/tidwall/gjson v1.14.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/pretty v0.0.0-20180105212114-65a9db5fad51/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= -github.com/tidwall/pretty v1.0.2 h1:Z7S3cePv9Jwm1KwS0513MRaoUe3S01WPbLNV40pwWZU= -github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tidwall/pretty v1.2.0 h1:RWIZEg2iJ8/g6fDDYzMpobmaoGh5OLl4AXtGUGPcqCs= github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= github.com/tidwall/tinylru v1.0.2/go.mod h1:HDVL7TsWeezQ4g44Um84TOVBMFcq7Xa9giqNc805KJ8= @@ -2751,11 +2758,17 @@ go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.5-0.20200615073812-232d8fc87f50/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= -go.etcd.io/etcd v0.0.0-20200520232829-54ba9589114f h1:uj/Xzadu0dyweesgOo+HghLYs0ssb9IRDvMp1UbAwJU= -go.etcd.io/etcd v0.0.0-20200520232829-54ba9589114f/go.mod h1:skWido08r9w6Lq/w70DO5XYIKMu4QFu1+4VsqLQuJy8= +go.etcd.io/etcd v0.0.0-20190709142735-eb7dd97135a5/go.mod h1:N0RPWo9FXJYZQI4BTkDtQylrstIigYHeR18ONnyTufk= +go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.etcd.io/etcd v0.5.0-alpha.5.0.20200520232829-54ba9589114f/go.mod h1:skWido08r9w6Lq/w70DO5XYIKMu4QFu1+4VsqLQuJy8= +go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg= +go.etcd.io/etcd v3.3.25+incompatible h1:V1RzkZJj9LqsJRy+TUBgpWSbZXITLB819lstuTFoZOY= +go.etcd.io/etcd v3.3.25+incompatible/go.mod h1:yaeTdrJi5lOmYerz05bd8+V7KubZs8YSFZfzsF9A6aI= go.etcd.io/etcd/api/v3 v3.5.0-alpha.0/go.mod h1:mPcW6aZJukV6Aa81LSKpBjQXTWlXB5r74ymPoSWa3Sw= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= +go.etcd.io/etcd/api/v3 v3.5.4 h1:OHVyt3TopwtUQ2GKdd5wu3PmmipR4FTwCqoEjSyRdIc= +go.etcd.io/etcd/api/v3 v3.5.4/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/v2 v2.305.0-alpha.0/go.mod h1:kdV+xzCJ3luEBSIeQyB/OEKkWKd8Zkux4sbDeANrosU= @@ -2898,6 +2911,7 @@ gocloud.dev v0.25.0 h1:Y7vDq8xj7SyM848KXf32Krda2e6jQ4CLh/mTeCSqXtk= gocloud.dev v0.25.0/go.mod h1:7HegHVCYZrMiU3IE1qtnzf/vRrDwLYnRNR3EhWX8x9Y= golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180505025534-4ec37c66abab/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20180608092829-8ac0e0d97ce4/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181009213950-7c1a557ab941/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -3110,8 +3124,6 @@ golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220401154927-543a649e0bdd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220421235706-1d1ef9303861 h1:yssD99+7tqHWO5Gwh81phT+67hg+KttniBr6UnEXOY8= -golang.org/x/net v0.0.0-20220421235706-1d1ef9303861/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4 h1:HVyaeDAYux4pnY+D/SiwmLOR36ewZ4iGQIIrtnuCjFA= golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -3570,6 +3582,7 @@ google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCID google.golang.org/cloud v0.0.0-20151119220103-975617b05ea8/go.mod h1:0H1ncTHf11KCFhTc/+EFRbzSCOZx+VUbRMk55Yv5MYk= google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180518175338-11a468237815/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20180608181217-32ee49c4dd80/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190404172233-64821d5d2107/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= diff --git a/lerna.json b/lerna.json index 56b8d14068f..8fb5a4d9628 100644 --- a/lerna.json +++ b/lerna.json @@ -4,5 +4,5 @@ "packages": [ "packages/*" ], - "version": "9.0.0-beta.1" + "version": "9.0.0-beta.2" } diff --git a/package.json b/package.json index 367d2a91c1b..377ffbd6c05 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "license": "AGPL-3.0-only", "private": true, "name": "grafana", - "version": "9.0.0-beta.1", + "version": "9.0.0-beta.2", "repository": "github:grafana/grafana", "scripts": { "api-tests": "jest --notify --watch --config=devenv/e2e-api-tests/jest.js", @@ -387,7 +387,7 @@ "tether-drop": "https://github.com/torkelo/drop", "tinycolor2": "1.4.2", "tslib": "2.4.0", - "uplot": "1.6.20", + "uplot": "1.6.21", "uuid": "8.3.2", "vendor": "link:./public/vendor", "visjs-network": "4.25.0", diff --git a/packages/grafana-data/package.json b/packages/grafana-data/package.json index e730ac53804..62ae5e48c34 100644 --- a/packages/grafana-data/package.json +++ b/packages/grafana-data/package.json @@ -2,7 +2,7 @@ "author": "Grafana Labs", "license": "Apache-2.0", "name": "@grafana/data", - "version": "9.0.0-beta.1", + "version": "9.0.0-beta.2", "description": "Grafana Data Library", "keywords": [ "typescript" @@ -22,7 +22,7 @@ }, "dependencies": { "@braintree/sanitize-url": "6.0.0", - "@grafana/schema": "9.0.0-beta.1", + "@grafana/schema": "9.0.0-beta.2", "@types/d3-interpolate": "^1.4.0", "d3-interpolate": "1.4.0", "date-fns": "2.28.0", @@ -38,7 +38,7 @@ "regenerator-runtime": "0.13.9", "rxjs": "7.5.5", "tslib": "2.4.0", - "uplot": "1.6.20", + "uplot": "1.6.21", "xss": "1.0.11" }, "devDependencies": { diff --git a/packages/grafana-data/src/types/dataFrame.ts b/packages/grafana-data/src/types/dataFrame.ts index e385ca4fb15..75d7482a455 100644 --- a/packages/grafana-data/src/types/dataFrame.ts +++ b/packages/grafana-data/src/types/dataFrame.ts @@ -181,6 +181,13 @@ export interface FieldState { * This is only related to the cached displayName property above. */ multipleFrames?: boolean; + + /** + * Boolean value is true if a null filling threshold has been applied + * against the frame of the field. This is used to avoid cases in which + * this would applied more than one time. + */ + nullThresholdApplied?: boolean; } /** @public */ diff --git a/packages/grafana-data/src/types/datasource.ts b/packages/grafana-data/src/types/datasource.ts index ca269d76d0f..435ae27828a 100644 --- a/packages/grafana-data/src/types/datasource.ts +++ b/packages/grafana-data/src/types/datasource.ts @@ -536,11 +536,9 @@ export interface DataSourceSettings {}; - export function ClipboardButton({ onClipboardCopy, onClipboardError, children, getText, ...buttonProps }: Props) { const buttonRef = useRef(null); const copyTextCallback = useCallback(async () => { const textToCopy = getText(); - // Can be removed in 9.x - const dummyEvent: ClipboardEvent = { - action: 'copy', - clearSelection: dummyClearFunc, - text: textToCopy, - trigger: buttonRef.current!, - }; + try { await copyText(textToCopy, buttonRef); - onClipboardCopy?.(dummyEvent); - } catch { - onClipboardError?.(dummyEvent); + onClipboardCopy?.(textToCopy); + } catch (e) { + onClipboardError?.(textToCopy, e); } }, [getText, onClipboardCopy, onClipboardError]); diff --git a/packages/grafana-ui/src/components/ColorPicker/ColorPicker.tsx b/packages/grafana-ui/src/components/ColorPicker/ColorPicker.tsx index 453c7d430c6..e88b8f0240f 100644 --- a/packages/grafana-ui/src/components/ColorPicker/ColorPicker.tsx +++ b/packages/grafana-ui/src/components/ColorPicker/ColorPicker.tsx @@ -8,7 +8,7 @@ import { closePopover } from '../../utils/closePopover'; import { Popover } from '../Tooltip/Popover'; import { PopoverController } from '../Tooltip/PopoverController'; -import { ColorPickerPopover, ColorPickerProps, ColorPickerChangeHandler } from './ColorPickerPopover'; +import { ColorPickerPopover, ColorPickerProps } from './ColorPickerPopover'; import { ColorSwatch } from './ColorSwatch'; import { SeriesColorPickerPopover } from './SeriesColorPickerPopover'; @@ -34,19 +34,12 @@ export const colorPickerFactory = ( static displayName = displayName; pickerTriggerRef = createRef(); - onColorChange = (color: string) => { - const { onColorChange, onChange } = this.props; - const changeHandler = (onColorChange || onChange) as ColorPickerChangeHandler; - - return changeHandler(color); - }; - render() { - const { theme, children } = this.props; + const { theme, children, onChange } = this.props; const styles = getStyles(theme); const popoverElement = React.createElement(popover, { ...{ ...this.props, children: null }, - onChange: this.onColorChange, + onChange, }); return ( diff --git a/packages/grafana-ui/src/components/ColorPicker/ColorPickerPopover.tsx b/packages/grafana-ui/src/components/ColorPicker/ColorPickerPopover.tsx index 3a77661ac44..992eda49792 100644 --- a/packages/grafana-ui/src/components/ColorPicker/ColorPickerPopover.tsx +++ b/packages/grafana-ui/src/components/ColorPicker/ColorPickerPopover.tsx @@ -10,7 +10,6 @@ import { PopoverContentProps } from '../Tooltip'; import { NamedColorsPalette } from './NamedColorsPalette'; import SpectrumPalette from './SpectrumPalette'; -import { warnAboutColorPickerPropsDeprecation } from './warnAboutColorPickerPropsDeprecation'; export type ColorPickerChangeHandler = (color: string) => void; @@ -18,10 +17,6 @@ export interface ColorPickerProps extends Themeable2 { color: string; onChange: ColorPickerChangeHandler; - /** - * @deprecated Use onChange instead - */ - onColorChange?: ColorPickerChangeHandler; enableNamedColors?: boolean; } @@ -48,7 +43,6 @@ class UnThemedColorPickerPopover extends Reac this.state = { activePicker: 'palette', }; - warnAboutColorPickerPropsDeprecation('ColorPickerPopover', props); } getTabClassName = (tabName: PickerType | keyof T) => { @@ -57,12 +51,11 @@ class UnThemedColorPickerPopover extends Reac }; handleChange = (color: any) => { - const { onColorChange, onChange, enableNamedColors, theme } = this.props; - const changeHandler = onColorChange || onChange; + const { onChange, enableNamedColors, theme } = this.props; if (enableNamedColors) { - return changeHandler(color); + return onChange(color); } - changeHandler(colorManipulator.asHexString(theme.visualization.getColorByName(color))); + onChange(colorManipulator.asHexString(theme.visualization.getColorByName(color))); }; onTabChange = (tab: PickerType | keyof T) => { diff --git a/packages/grafana-ui/src/components/ColorPicker/warnAboutColorPickerPropsDeprecation.ts b/packages/grafana-ui/src/components/ColorPicker/warnAboutColorPickerPropsDeprecation.ts deleted file mode 100644 index 9f58ba70285..00000000000 --- a/packages/grafana-ui/src/components/ColorPicker/warnAboutColorPickerPropsDeprecation.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { deprecationWarning } from '@grafana/data'; - -import { ColorPickerProps } from './ColorPickerPopover'; - -export const warnAboutColorPickerPropsDeprecation = (componentName: string, props: ColorPickerProps) => { - const { onColorChange } = props; - if (onColorChange) { - deprecationWarning(componentName, 'onColorChange', 'onChange'); - } -}; diff --git a/packages/grafana-ui/src/components/DataSourceSettings/BasicAuthSettings.tsx b/packages/grafana-ui/src/components/DataSourceSettings/BasicAuthSettings.tsx index 4755f7cb59d..d74a3c38f6e 100644 --- a/packages/grafana-ui/src/components/DataSourceSettings/BasicAuthSettings.tsx +++ b/packages/grafana-ui/src/components/DataSourceSettings/BasicAuthSettings.tsx @@ -12,7 +12,6 @@ export const BasicAuthSettings: React.FC = ({ dataSourceConfi const onPasswordReset = () => { onChange({ ...dataSourceConfig, - basicAuthPassword: '', secureJsonData: { ...dataSourceConfig.secureJsonData, basicAuthPassword: '', @@ -48,10 +47,7 @@ export const BasicAuthSettings: React.FC = ({ dataSourceConfi { typeLogoUrl: '', access: 'direct', url: 'http://localhost:8086', - password: '', user: 'grafana', database: 'site', basicAuth: false, basicAuthUser: '', - basicAuthPassword: '', withCredentials: false, isDefault: false, jsonData: { diff --git a/packages/grafana-ui/src/components/DataSourceSettings/DataSourceHttpSettings.story.tsx b/packages/grafana-ui/src/components/DataSourceSettings/DataSourceHttpSettings.story.tsx index 17ebfcc7b66..9df51502347 100644 --- a/packages/grafana-ui/src/components/DataSourceSettings/DataSourceHttpSettings.story.tsx +++ b/packages/grafana-ui/src/components/DataSourceSettings/DataSourceHttpSettings.story.tsx @@ -17,12 +17,10 @@ const settingsMock: DataSourceSettings = { typeLogoUrl: '', access: 'direct', url: 'http://localhost:8086', - password: '', user: 'grafana', database: 'site', basicAuth: false, basicAuthUser: '', - basicAuthPassword: '', withCredentials: false, isDefault: false, jsonData: { diff --git a/packages/grafana-ui/src/components/DataSourceSettings/DataSourceHttpSettings.test.tsx b/packages/grafana-ui/src/components/DataSourceSettings/DataSourceHttpSettings.test.tsx index 0f072dde808..2daebd46a92 100644 --- a/packages/grafana-ui/src/components/DataSourceSettings/DataSourceHttpSettings.test.tsx +++ b/packages/grafana-ui/src/components/DataSourceSettings/DataSourceHttpSettings.test.tsx @@ -18,12 +18,10 @@ const setup = (propOverrides?: object) => { typeLogoUrl: '', access: 'direct', url: 'http://localhost:8086', - password: '', user: 'grafana', database: 'site', basicAuth: false, basicAuthUser: '', - basicAuthPassword: '', withCredentials: false, isDefault: false, jsonData: { diff --git a/packages/grafana-ui/src/components/Forms/InlineLabel.tsx b/packages/grafana-ui/src/components/Forms/InlineLabel.tsx index 32e21247969..33ffc2b660f 100644 --- a/packages/grafana-ui/src/components/Forms/InlineLabel.tsx +++ b/packages/grafana-ui/src/components/Forms/InlineLabel.tsx @@ -17,12 +17,6 @@ export interface Props extends Omit { - console.warn('getFormStyles is deprecated'); - - return { - label: getLabelStyles(theme), - legend: getLegendStyles(theme.v1), - fieldValidationMessage: getFieldValidationMessageStyles(theme), - button: getButtonStyles({ - theme, - variant: options.variant, - size: options.size, - }), - input: getInputStyles({ theme, invalid: options.invalid }), - checkbox: getCheckboxStyles(theme), - }; - } -); diff --git a/packages/grafana-ui/src/components/GraphNG/nullInsertThreshold.test.ts b/packages/grafana-ui/src/components/GraphNG/nullInsertThreshold.test.ts index 210233a89b9..6373e8884b8 100644 --- a/packages/grafana-ui/src/components/GraphNG/nullInsertThreshold.test.ts +++ b/packages/grafana-ui/src/components/GraphNG/nullInsertThreshold.test.ts @@ -57,7 +57,7 @@ describe('nullInsertThreshold Transformer', () => { ], }); - const result = applyNullInsertThreshold(df); + const result = applyNullInsertThreshold({ frame: df }); expect(result.fields[0].values.toArray()).toStrictEqual([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); expect(result.fields[1].values.toArray()).toStrictEqual([4, null, 6, null, null, null, null, null, null, 8]); @@ -74,7 +74,7 @@ describe('nullInsertThreshold Transformer', () => { ], }); - const result = applyNullInsertThreshold(df); + const result = applyNullInsertThreshold({ frame: df }); expect(result.fields[0].values.toArray()).toStrictEqual([5, 7, 9, 11]); expect(result.fields[1].values.toArray()).toStrictEqual([4, 6, null, 8]); @@ -91,13 +91,63 @@ describe('nullInsertThreshold Transformer', () => { ], }); - const result = applyNullInsertThreshold(df); + const result = applyNullInsertThreshold({ frame: df }); expect(result.fields[0].values.toArray()).toStrictEqual([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); expect(result.fields[1].values.toArray()).toStrictEqual([4, null, 6, null, null, null, null, null, null, 8]); expect(result.fields[2].values.toArray()).toStrictEqual(['a', null, 'b', null, null, null, null, null, null, 'c']); }); + test('should insert leading null at beginning +interval when timeRange.from.valueOf() exceeds threshold', () => { + const df = new MutableDataFrame({ + refId: 'A', + fields: [ + { name: 'Time', type: FieldType.time, config: { interval: 1 }, values: [4, 6, 13] }, + { name: 'One', type: FieldType.number, values: [4, 6, 8] }, + { name: 'Two', type: FieldType.string, values: ['a', 'b', 'c'] }, + ], + }); + + const result = applyNullInsertThreshold({ + frame: df, + refFieldName: null, + refFieldPseudoMin: 1, + refFieldPseudoMax: 13, + }); + + expect(result.fields[0].values.toArray()).toStrictEqual([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]); + expect(result.fields[1].values.toArray()).toStrictEqual([ + null, + null, + null, + 4, + null, + 6, + null, + null, + null, + null, + null, + null, + 8, + ]); + expect(result.fields[2].values.toArray()).toStrictEqual([ + null, + null, + null, + 'a', + null, + 'b', + null, + null, + null, + null, + null, + null, + 'c', + ]); + }); + test('should insert trailing null at end +interval when timeRange.to.valueOf() exceeds threshold', () => { const df = new MutableDataFrame({ refId: 'A', @@ -108,10 +158,24 @@ describe('nullInsertThreshold Transformer', () => { ], }); - const result = applyNullInsertThreshold(df, null, 13); + const result = applyNullInsertThreshold({ frame: df, refFieldName: null, refFieldPseudoMax: 13 }); - expect(result.fields[0].values.toArray()).toStrictEqual([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]); - expect(result.fields[1].values.toArray()).toStrictEqual([4, null, 6, null, null, null, null, null, null, 8, null]); + expect(result.fields[0].values.toArray()).toStrictEqual([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]); + expect(result.fields[1].values.toArray()).toStrictEqual([ + 4, + null, + 6, + null, + null, + null, + null, + null, + null, + 8, + null, + null, + null, + ]); expect(result.fields[2].values.toArray()).toStrictEqual([ 'a', null, @@ -124,6 +188,8 @@ describe('nullInsertThreshold Transformer', () => { null, 'c', null, + null, + null, ]); // should work for frames with 1 datapoint @@ -136,7 +202,9 @@ describe('nullInsertThreshold Transformer', () => { ], }); - const result2 = applyNullInsertThreshold(df2, null, 13); + // Max is 2 as opposed to the above 13 otherwise + // we get 12 nulls instead of the additional 1 + const result2 = applyNullInsertThreshold({ frame: df2, refFieldName: null, refFieldPseudoMax: 2 }); expect(result2.fields[0].values.toArray()).toStrictEqual([1, 2]); expect(result2.fields[1].values.toArray()).toStrictEqual([1, null]); @@ -154,7 +222,7 @@ describe('nullInsertThreshold Transformer', () => { ], }); - const result = applyNullInsertThreshold(df); + const result = applyNullInsertThreshold({ frame: df }); expect(result.fields[0].values.toArray()).toStrictEqual([5, 6, 7, 8, 11]); expect(result.fields[1].values.toArray()).toStrictEqual([4, null, 6, null, 8]); @@ -170,7 +238,7 @@ describe('nullInsertThreshold Transformer', () => { ], }); - const result = applyNullInsertThreshold(df); + const result = applyNullInsertThreshold({ frame: df }); expect(result).toBe(df); }); @@ -184,7 +252,7 @@ describe('nullInsertThreshold Transformer', () => { ], }); - const result = applyNullInsertThreshold(df); + const result = applyNullInsertThreshold({ frame: df }); expect(result).toBe(df); }); @@ -198,7 +266,7 @@ describe('nullInsertThreshold Transformer', () => { ], }); - const result = applyNullInsertThreshold(df); + const result = applyNullInsertThreshold({ frame: df }); expect(result).toBe(df); }); @@ -212,7 +280,7 @@ describe('nullInsertThreshold Transformer', () => { ], }); - const result = applyNullInsertThreshold(df); + const result = applyNullInsertThreshold({ frame: df }); expect(result).toBe(df); }); @@ -226,7 +294,7 @@ describe('nullInsertThreshold Transformer', () => { ], }); - const result = applyNullInsertThreshold(df, 'Time2'); + const result = applyNullInsertThreshold({ frame: df, refFieldName: 'Time2' }); expect(result).toBe(df); }); @@ -238,7 +306,7 @@ describe('nullInsertThreshold Transformer', () => { // eslint-disable-next-line no-console console.time('insertValues-10x3k'); - applyNullInsertThreshold(bigFrameA); + applyNullInsertThreshold({ frame: bigFrameA }); // eslint-disable-next-line no-console console.timeEnd('insertValues-10x3k'); }); diff --git a/packages/grafana-ui/src/components/GraphNG/nullInsertThreshold.ts b/packages/grafana-ui/src/components/GraphNG/nullInsertThreshold.ts index 6c61426f930..cd996e1179c 100644 --- a/packages/grafana-ui/src/components/GraphNG/nullInsertThreshold.ts +++ b/packages/grafana-ui/src/components/GraphNG/nullInsertThreshold.ts @@ -9,15 +9,24 @@ const INSERT_MODES = { plusone: (prev: number, next: number, threshold: number) => prev + 1, }; -export function applyNullInsertThreshold( - frame: DataFrame, - refFieldName?: string | null, - refFieldPseudoMax: number | null = null, - insertMode: InsertMode = INSERT_MODES.threshold, - thorough = true -): DataFrame { - if (frame.length === 0) { - return frame; +interface NullInsertOptions { + frame: DataFrame; + refFieldName?: string | null; + refFieldPseudoMax?: number; + refFieldPseudoMin?: number; + insertMode?: InsertMode; +} + +export function applyNullInsertThreshold(opts: NullInsertOptions): DataFrame { + if (opts.frame.length === 0) { + return opts.frame; + } + + let thorough = true; + let { frame, refFieldName, refFieldPseudoMax, refFieldPseudoMin, insertMode } = opts; + + if (!insertMode) { + insertMode = INSERT_MODES.threshold; } const refField = frame.fields.find((field) => { @@ -54,6 +63,7 @@ export function applyNullInsertThreshold( refValues, frameValues, threshold, + refFieldPseudoMin, refFieldPseudoMax, insertMode, thorough @@ -83,6 +93,7 @@ function nullInsertThreshold( refValues: number[], frameValues: any[][], threshold: number, + refFieldPseudoMin: number | null = null, // will insert a trailing null when refFieldPseudoMax > last datapoint + threshold refFieldPseudoMax: number | null = null, getInsertValue: InsertMode, @@ -91,8 +102,26 @@ function nullInsertThreshold( ) { const len = refValues.length; let prevValue: number = refValues[0]; - const refValuesNew: number[] = [prevValue]; + const refValuesNew: number[] = []; + // Continiuously add the threshold to the minimum value + // While this is less than "prevValue" which is the lowest + // time value in the sequence add in time frames + if (refFieldPseudoMin != null) { + let minValue = refFieldPseudoMin - threshold; + + while (minValue < prevValue - threshold) { + let nextValue = minValue + threshold; + refValuesNew.push(getInsertValue(minValue, nextValue, threshold)); + minValue = nextValue; + } + } + + // Insert initial value + refValuesNew.push(prevValue); + + // Fill nulls when a value is greater than + // the threshold value for (let i = 1; i < len; i++) { const curValue = refValues[i]; @@ -111,8 +140,12 @@ function nullInsertThreshold( prevValue = curValue; } - if (refFieldPseudoMax != null && prevValue + threshold <= refFieldPseudoMax) { - refValuesNew.push(getInsertValue(prevValue, refFieldPseudoMax, threshold)); + // At the end of the sequence + if (refFieldPseudoMax != null) { + while (prevValue + threshold <= refFieldPseudoMax) { + refValuesNew.push(getInsertValue(prevValue, refFieldPseudoMax, threshold)); + prevValue += threshold; + } } const filledLen = refValuesNew.length; diff --git a/packages/grafana-ui/src/components/GraphNG/nullToValue.test.ts b/packages/grafana-ui/src/components/GraphNG/nullToValue.test.ts new file mode 100644 index 00000000000..f5c3bfb1a7e --- /dev/null +++ b/packages/grafana-ui/src/components/GraphNG/nullToValue.test.ts @@ -0,0 +1,94 @@ +import { FieldType, MutableDataFrame } from '@grafana/data'; + +import { applyNullInsertThreshold } from './nullInsertThreshold'; +import { nullToValue } from './nullToValue'; + +describe('nullToValue Transformer', () => { + test('should change all nulls to configured zero value', () => { + const df = new MutableDataFrame({ + refId: 'A', + fields: [ + { name: 'Time', type: FieldType.time, values: [1, 3, 10] }, + { + name: 'One', + type: FieldType.number, + config: { custom: { insertNulls: 1 }, noValue: '0' }, + values: [4, 6, 8], + }, + { + name: 'Two', + type: FieldType.string, + config: { custom: { insertNulls: 1 }, noValue: '0' }, + values: ['a', 'b', 'c'], + }, + ], + }); + + const result = nullToValue(applyNullInsertThreshold({ frame: df })); + + expect(result.fields[0].values.toArray()).toStrictEqual([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); + expect(result.fields[1].values.toArray()).toStrictEqual([4, 0, 6, 0, 0, 0, 0, 0, 0, 8]); + expect(result.fields[2].values.toArray()).toStrictEqual(['a', 0, 'b', 0, 0, 0, 0, 0, 0, 'c']); + }); + + test('should change all nulls to configured positive value', () => { + const df = new MutableDataFrame({ + refId: 'A', + fields: [ + { name: 'Time', type: FieldType.time, values: [5, 7, 11] }, + { + name: 'One', + type: FieldType.number, + config: { custom: { insertNulls: 2 }, noValue: '1' }, + values: [4, 6, 8], + }, + { + name: 'Two', + type: FieldType.string, + config: { custom: { insertNulls: 2 }, noValue: '1' }, + values: ['a', 'b', 'c'], + }, + ], + }); + + const result = nullToValue(applyNullInsertThreshold({ frame: df })); + + expect(result.fields[0].values.toArray()).toStrictEqual([5, 7, 9, 11]); + expect(result.fields[1].values.toArray()).toStrictEqual([4, 6, 1, 8]); + expect(result.fields[2].values.toArray()).toStrictEqual(['a', 'b', 1, 'c']); + }); + + test('should change all nulls to configured negative value', () => { + const df = new MutableDataFrame({ + refId: 'A', + fields: [ + { name: 'Time', type: FieldType.time, config: { interval: 1 }, values: [1, 3, 10] }, + { name: 'One', type: FieldType.number, config: { noValue: '-1' }, values: [4, 6, 8] }, + { name: 'Two', type: FieldType.string, config: { noValue: '-1' }, values: ['a', 'b', 'c'] }, + ], + }); + + const result = nullToValue(applyNullInsertThreshold({ frame: df })); + + expect(result.fields[0].values.toArray()).toStrictEqual([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); + expect(result.fields[1].values.toArray()).toStrictEqual([4, -1, 6, -1, -1, -1, -1, -1, -1, 8]); + expect(result.fields[2].values.toArray()).toStrictEqual(['a', -1, 'b', -1, -1, -1, -1, -1, -1, 'c']); + }); + + test('should have no effect without nulls', () => { + const df = new MutableDataFrame({ + refId: 'A', + fields: [ + { name: 'Time', type: FieldType.time, config: { interval: 1 }, values: [1, 2, 3] }, + { name: 'One', type: FieldType.number, values: [4, 6, 8] }, + { name: 'Two', type: FieldType.string, values: ['a', 'b', 'c'] }, + ], + }); + + const result = nullToValue(applyNullInsertThreshold({ frame: df, refFieldName: null })); + + expect(result.fields[0].values.toArray()).toStrictEqual([1, 2, 3]); + expect(result.fields[1].values.toArray()).toStrictEqual([4, 6, 8]); + expect(result.fields[2].values.toArray()).toStrictEqual(['a', 'b', 'c']); + }); +}); diff --git a/packages/grafana-ui/src/components/GraphNG/nullToValue.ts b/packages/grafana-ui/src/components/GraphNG/nullToValue.ts new file mode 100644 index 00000000000..b79ac200214 --- /dev/null +++ b/packages/grafana-ui/src/components/GraphNG/nullToValue.ts @@ -0,0 +1,17 @@ +import { DataFrame } from '@grafana/data'; + +export function nullToValue(frame: DataFrame) { + frame.fields.forEach((f) => { + const noValue = +f.config?.noValue!; + if (!Number.isNaN(noValue)) { + const values = f.values.toArray(); + for (let i = 0; i < values.length; i++) { + if (values[i] === null) { + values[i] = noValue; + } + } + } + }); + + return frame; +} diff --git a/packages/grafana-ui/src/components/GraphNG/utils.ts b/packages/grafana-ui/src/components/GraphNG/utils.ts index 5d35a8e3926..e5de3bd9f66 100644 --- a/packages/grafana-ui/src/components/GraphNG/utils.ts +++ b/packages/grafana-ui/src/components/GraphNG/utils.ts @@ -44,7 +44,18 @@ function applySpanNullsThresholds(frame: DataFrame) { export function preparePlotFrame(frames: DataFrame[], dimFields: XYFieldMatchers, timeRange?: TimeRange | null) { // apply null insertions at interval - frames = frames.map((frame) => applyNullInsertThreshold(frame, null, timeRange?.to.valueOf())); + frames = frames.map((frame) => { + if (!frame.fields[0].state?.nullThresholdApplied) { + return applyNullInsertThreshold({ + frame, + refFieldName: null, + refFieldPseudoMin: timeRange?.from.valueOf(), + refFieldPseudoMax: timeRange?.to.valueOf(), + }); + } else { + return frame; + } + }); let numBarSeries = 0; diff --git a/packages/grafana-ui/src/components/Monaco/CodeEditor.tsx b/packages/grafana-ui/src/components/Monaco/CodeEditor.tsx index c6f8dad7157..ada037d8b66 100644 --- a/packages/grafana-ui/src/components/Monaco/CodeEditor.tsx +++ b/packages/grafana-ui/src/components/Monaco/CodeEditor.tsx @@ -111,7 +111,7 @@ class UnthemedCodeEditor extends React.PureComponent { const value = this.props.value ?? ''; const longText = value.length > 100; - const styles = getStyles(theme); + const containerStyles = this.props.containerStyles ?? getStyles(theme).container; const options: MonacoOptions = { wordWrap: 'off', @@ -143,7 +143,7 @@ class UnthemedCodeEditor extends React.PureComponent { } return ( -
+
+ +# PanelContainer + +The PanelContainer is used as a simple background for storing other components. diff --git a/packages/grafana-ui/src/components/PanelContainer/PanelContainer.story.tsx b/packages/grafana-ui/src/components/PanelContainer/PanelContainer.story.tsx new file mode 100644 index 00000000000..4ace28bd6b0 --- /dev/null +++ b/packages/grafana-ui/src/components/PanelContainer/PanelContainer.story.tsx @@ -0,0 +1,26 @@ +import { Meta, Story } from '@storybook/react'; +import React from 'react'; + +import { withCenteredStory } from '../../utils/storybook/withCenteredStory'; + +import { PanelContainer } from './PanelContainer'; +import mdx from './PanelContainer.mdx'; + +export default { + title: 'General/PanelContainer', + component: PanelContainer, + decorators: [withCenteredStory], + parameters: { + docs: { + page: mdx, + }, + }, +} as Meta; + +export const Basic: Story = () => { + return ( + +

Here could be your component

+
+ ); +}; diff --git a/packages/grafana-ui/src/components/PanelContainer/PanelContainer.tsx b/packages/grafana-ui/src/components/PanelContainer/PanelContainer.tsx new file mode 100644 index 00000000000..d39725ec91a --- /dev/null +++ b/packages/grafana-ui/src/components/PanelContainer/PanelContainer.tsx @@ -0,0 +1,24 @@ +import { css, cx } from '@emotion/css'; +import React, { DetailedHTMLProps, HTMLAttributes } from 'react'; + +import { GrafanaTheme2 } from '@grafana/data'; + +import { useStyles2 } from '../../themes'; + +type Props = DetailedHTMLProps, HTMLDivElement>; + +export const PanelContainer = ({ children, className, ...props }: Props) => { + const styles = useStyles2(getStyles); + return ( +
+ {children} +
+ ); +}; + +const getStyles = (theme: GrafanaTheme2) => + css` + background-color: ${theme.components.panel.background}; + border: 1px solid ${theme.components.panel.borderColor}; + border-radius: 3px; + `; diff --git a/packages/grafana-ui/src/components/Sparkline/utils.ts b/packages/grafana-ui/src/components/Sparkline/utils.ts index 0d8952f9daa..38a925e1d1b 100644 --- a/packages/grafana-ui/src/components/Sparkline/utils.ts +++ b/packages/grafana-ui/src/components/Sparkline/utils.ts @@ -14,14 +14,16 @@ export function preparePlotFrame(sparkline: FieldSparkline, config?: FieldConfig }; return applyNullInsertThreshold({ - refId: 'sparkline', - fields: [ - sparkline.x ?? IndexVector.newField(length), - { - ...sparkline.y, - config: yFieldConfig, - }, - ], - length, + frame: { + refId: 'sparkline', + fields: [ + sparkline.x ?? IndexVector.newField(length), + { + ...sparkline.y, + config: yFieldConfig, + }, + ], + length, + }, }); } diff --git a/packages/grafana-ui/src/components/index.ts b/packages/grafana-ui/src/components/index.ts index 4c32405d854..2e089ad834e 100644 --- a/packages/grafana-ui/src/components/index.ts +++ b/packages/grafana-ui/src/components/index.ts @@ -190,7 +190,6 @@ export { InputControl } from './InputControl'; export { Button, LinkButton, ButtonVariant, ToolbarButton, ButtonGroup, ToolbarButtonRow, ButtonProps } from './Button'; export { ValuePicker } from './ValuePicker/ValuePicker'; export { fieldMatchersUI } from './MatchersUI/fieldMatchersUI'; -export { getFormStyles } from './Forms/getFormStyles'; export { Link } from './Link/Link'; export { Label } from './Forms/Label'; @@ -269,3 +268,4 @@ export { GraphNGLegendEvent } from './GraphNG/types'; export * from './PanelChrome/types'; export { EmotionPerfTest } from './ThemeDemos/EmotionPerfTest'; export { Label as BrowserLabel } from './BrowserLabel/Label'; +export { PanelContainer } from './PanelContainer/PanelContainer'; diff --git a/packages/grafana-ui/src/options/builder/axis.tsx b/packages/grafana-ui/src/options/builder/axis.tsx index 010a7d25a63..d5dc9753d68 100644 --- a/packages/grafana-ui/src/options/builder/axis.tsx +++ b/packages/grafana-ui/src/options/builder/axis.tsx @@ -2,10 +2,10 @@ import React from 'react'; import { FieldConfigEditorBuilder, - FieldOverrideEditorProps, FieldType, identityOverrideProcessor, SelectableValue, + StandardEditorProps, } from '@grafana/data'; import { AxisConfig, AxisPlacement, ScaleDistribution, ScaleDistributionConfig } from '@grafana/schema'; @@ -89,8 +89,8 @@ export function addAxisConfig( path: 'scaleDistribution', name: 'Scale', category, - editor: ScaleDistributionEditor, - override: ScaleDistributionEditor, + editor: ScaleDistributionEditor as any, + override: ScaleDistributionEditor as any, defaultValue: { type: ScaleDistribution.Linear }, shouldApply: (f) => f.type === FieldType.number, process: identityOverrideProcessor, @@ -121,19 +121,16 @@ const LOG_DISTRIBUTION_OPTIONS: Array> = [ ]; /** - * @alpha + * @internal */ -const ScaleDistributionEditor: React.FC> = ({ - value, - onChange, -}) => { +export const ScaleDistributionEditor = ({ value, onChange }: StandardEditorProps) => { + const type = value?.type ?? ScaleDistribution.Linear; return ( { - console.log(v, value); onChange({ ...value, type: v!, @@ -141,9 +138,8 @@ const ScaleDistributionEditor: React.FC - {value.type === ScaleDistribution.Log && ( + {type === ScaleDistribution.Log && (