* updated the alerting tab.
* changed so we use a confirm button.
* removed uncommeneted import.
* Change to secondary buttons
Co-Authored-By: Dominik Prokop <dominik.prokop@grafana.com>
* trying to fix issue with panel of undefined.
* Fix prettier
* Update public/app/features/alerting/AlertTab.tsx
Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
* Set min height of panel pane to 200px
* Disable badge on viz picker when item is in disabled in search results
* Fix UserProfile inputs width
* Remove select caret in user admin permissions editor
* fix 23911
If refresh interval is lower than minimum refresh interval
when importing dashboard, use the minimum refresh interval
instead of returning error.
Fixes#23099
* PanelEditor: fixes save/apply for undefined props in restoreModel
* Refactor: changes after PR comments
* Refactor: changes sourcePanel refresh strategy
* Added unit tests and minor refactoring of method, starting with cleanup, then setting properties from model
* Update public/app/features/dashboard/state/PanelModel.test.ts
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
* MaxDataPoints: Now enabled for all
* Updates to code and test
* Moved the panel query inspector
* PaneQueryRunner: Simplify logic and only take in maxDataPoints not width
* azuremonitor: add support for log analytics macros
Also adds tests for the kql macros
* azuremonitor: backend implementation for Log Analytics
* azuremonitor: remove gzip header from plugin route
The Go net/http library adds an accept encoding header
for gzip automatically.
https://golang.org/src/net/http/transport.go\#L2454
So no need to specify it manually
* azuremonitor: parses log analytics time series
* azuremonitor: support for table data for Log Analytics
* azuremonitor: for log analytics switch to calling the API...
...from the backend for time series and table queries.
* azuremonitor: fix missing err check
* azuremonitor: support Azure China, Azure Gov...
for log analytics on the backend.
* azuremonitor: review fixes
* azuremonitor: rename test files folder to testdata
To follow Go conventions for test data in tests
* azuremonitor: review fixes
* azuremonitor: better error message for http requests
* azuremonitor: fix for load workspaces on config page
* azuremonitor: strict null check fixes
Co-authored-by: bergquist <carl.bergquist@gmail.com>
* added moment timezone package.
* added a qnd way of selecting timezone.
* added a first draft to display how it can be used.
* fixed failing tests.
* made moment.local to be in utc when running tests.
* added tests to verify that the timeZone support works as expected.
* Fixed so we use the formatter in the graph context menu.
* changed so we will format d3 according to timeZone.
* changed from class base to function based for easier consumption.
* fixed so tests got green.
* renamed to make it shorter.
* fixed formatting in logRow.
* removed unused value.
* added time formatter to flot.
* fixed failing tests.
* changed so history will use the formatting with support for timezone.
* added todo.
* added so we append the correct abbrivation behind time.
* added time zone abbrevation in timepicker.
* adding timezone in rangeutil tool.
* will use timezone when formatting range.
* changed so we use new functions to format date so timezone is respected.
* wip - dashboard settings.
* changed so the time picker settings is in react.
* added force update.
* wip to get the react graph to work.
* fixed formatting and parsing on the timepicker.
* updated snap to be correct.
* fixed so we format values properly in time picker.
* make sure we pass timezone on all the proper places.
* fixed so we use correct timeZone in explore.
* fixed failing tests.
* fixed so we always parse from local to selected timezone.
* removed unused variable.
* reverted back.
* trying to fix issue with directive.
* fixed issue.
* fixed strict null errors.
* fixed so we still can select default.
* make sure we reads the time zone from getTimezone
* Fix storybook
* Add deprecated/alpha badge to panels in viz picker, fix long title display
* Move getFocusCss to mixins
* Updated hover/active state of vis picker item
* try fixing e2e
* Add removed label for e2e to be happy happy happy
* Datasource/Cloudwatch: Adds support for Cloudwatch Logs
* Fix rebase leftover
* Use jsurl for AWS url serialization
* WIP: Temporary workaround for CLIQ metrics
* Only allow up to 20 log groups to be selected
* WIP additional changes
* More changes based on feedback
* More changes based on PR feedback
* Fix strict null errors
* Resort Icon.story.tsx into Docs Overview category
* Make CallToActionCard.story.tsx internal
* Move ThemeColors to Docs Overview category
* Move Tag.story.tsx to Forms category
* Move TagList.story.tsx to Forms category
Co-authored-by: Clarity-89 <homes89@ukr.net>
Same as #23452 but for assumed roles.
When using service accounts (webIdentity) on EKS in combination
with assuming roles in other AWS accounts Grafana needs to retrieve
the service account credentials first and then needs to assume the
configured role.
* Explore: Create basic E2E test
* Feature: adds e2e tests for panel inspector
* Refactor: adds ts-ignore because of type checking errors
* Refactor: changes after PR comments and updates snapshot
* Refactor: adds typings back for IScope
* e2e: adds e2e for panel edit
Co-authored-by: Andreas Opferkuch <andreas.opferkuch@gmail.com>
When Include image is enabled for an alert notification channel, but there's
no image renderer available/installed when sending notification an error
image will be uploaded/attached explaining that you need to install the
Grafana Image Renderer plugin.
Ref #13802
Co-Authored-By: Arve Knudsen <arve.knudsen@gmail.com>
If no image renderer available/installed when adding a new alert notification
channel will set Include image to false per default, otherwise true as before.
If no image renderer available/installed when adding/edit alert notification
channel will show an informational message that you need to install the
Grafana Image Renderer plugin for Grafana to be able to render an image.
Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
* DataLink input to new form styles
* Make Angular work with inline editor
* Remove onRemove and desiableRemove
* Remove DataLinksEditor
* Change order of inputs
* Enable syntax highlight
* Fix datalinks for Elastic
* Explore: Create basic E2E test
* Feature: adds e2e tests for panel inspector
* Refactor: adds ts-ignore because of type checking errors
* Refactor: changes after PR comments and updates snapshot
* Refactor: adds typings back for IScope
* Refactor: changes after PR comments
Co-authored-by: Andreas Opferkuch <andreas.opferkuch@gmail.com>
* NewPanelEditor: Panel edit tweaks (#22415)
* NewPanelEditor: Alternative edit layout
* Fixed full height issue
* panel-edit-tabs experiment
* minor tweaks
* PanelEditor: Minor tweaks
* Docs: URL update to Relref to repair broken links
Rewrote URL references in the text for the Administration guide
and older Whats New page to repair broken links, and change
to the Relref format to build the website with Hugo.
Closes#22378
* Remove stale file, caught in this
branch and PR from my Fork. contribute/style-guides/markdown-style-guide.md
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
* Fixes and security patches:
1. Always keep the source directory, just don't package the source
2. Do not publish the SSH key for common plugin tasks.
Changed to environment variable
* env variable renamed.
* Re-added the src remove
* touch config.yml for rebuild
* show signing status
* show signing status
* Progress on signed badge style
* Progress on signing status look and updated card background
* Updates
* Transforms card tweak
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Create .mdx for ColorPicker component group
Describes the building blocks of the component and how they work together.
* Rename ColorPicker.mdx to ColorPicker.story.mdx
* Update packages/grafana-ui/src/components/ColorPicker/ColorPicker.story.mdx
Clean up tags
Co-Authored-By: Tobias Skarhed <1438972+tskarhed@users.noreply.github.com>
* Update packages/grafana-ui/src/components/ColorPicker/ColorPicker.story.mdx
Co-Authored-By: Tobias Skarhed <1438972+tskarhed@users.noreply.github.com>
Co-authored-by: Tobias Skarhed <1438972+tskarhed@users.noreply.github.com>
* Transformers: adds labels as columns transformer
* Refactor: adds support for same timestamps with different labels
* Refactor: adds basic transform ui
* Refactor: adds sorted result
* Refactor: renames transformer
* clear dashboard on unmount
* fix menu z-index, folderpicker width
* fix issue with saving dashboard in another folder
* use foldermodel instead of selectablevalue
* using z-index from theme
* updated names
* update snapshot
* remove size from folderpicker
* use connectWithCleanup
* update snapshot
grafana-plugin-model is legacy and is replaced by new backend
plugins SDK and architecture. Renderer is not part of SDK and
we want to keep it that way for now since it's highly unlikely there
will be more than one kind of renderer plugin.
So this PR adds support for renderer plugin v2.
Also adds support sending a Device Scale Factor parameter to the
plugin v2 remote rendering service and by that replaces #22474.
Adds support sending a Headers parameter to the plugin v2 and
remote rendering service which for now only include
Accect-Language header (the user locale in browser when using
Grafana), ref grafana/grafana-image-renderer#45.
Fixes health check json details response.
Adds image renderer plugin configuration settings in defaults.ini
and sample.ini.
Co-Authored-By: Arve Knudsen <arve.knudsen@gmail.com>
* Search: Toggle Search based on search query
* Search: Fix types and closed search param
* Search: Remove appEvents from SearchWrapper
* Search: Reset folder on close
Co-Authored-By: Alexander Zobnin <alexanderzobnin@gmail.com>
* Search: Disable reloadOnSearch for manage dashboards urls
Co-authored-by: Alexander Zobnin <alexanderzobnin@gmail.com>
* Table: Fixed to column alignment
* testing table state reducer
* Styles starting to work
* Persisting column resize now works
* Trying to fix Table storybook stories
* Minor updates
* fixed ts issue
* Table: Support duplicate field names, and use data frame directly instead of copying data and other improvements (#23681)
* Poc at use data frame directly
* working ok
* Table improvements
* Move xss and sanitize packages to grafana-data
* Move text, url and location utils to grafana-data
* Move grafana config types to grafana-data
* Move field display value proxy to grafana-data
* Fix
* Move data links built in vars to grafana-data
* Attach links supplier to when applying field overrides
* Prep tests
* Use links suppliers attached via field overrides
* locationUtil dependencies type
* Move sanitize-url declaration to grafana-data
* Revert "Move sanitize-url declaration to grafana-data"
This reverts commit 11db9f5e55.
* Fix typo
* fix ts vol1
* Remove import from runtime in data.... Make TS happy at the same time ;)
* Lovely TS, please shut up
* Lovely TS, please shut up vol2
* fix tests
* Fixes
* minor refactor
* Attach get links to FieldDisplayValue for seamless usage
* Update packages/grafana-data/src/field/fieldOverrides.ts
* Make storybook build
* Tweaks and comments for ci-improvements, stability, and readibility
- Made naming more obvious and intuitive
- CI supports grafana e2e plus more granular design
(side effect that it takes slightly longer, but negligable)
- disable strict e2e errors through environment variable
- Added tools for linting and for building plugin-ci
* feedback from stevev - remove version. Causes problems
* Because alpine uses musl instead of libc, the e2e/cypress was not compatible
So:
- Created new VM based on debian-slim
- Could also be used as a build VM
Fixes:
- ginstall issue with merge somewhere.
- Trimmed down the alpine VM since we don't need the extra libraries for cypress
* Fix: Don't need cp on debian
Fix: Don't use /bin/sh on debian. Only for alpine. Use /bin/bash on debian
Fix: Missing dependencies to e2e tests
* WIP: Inspect transformers
* Updated
* Transformations working in inspect drawer and series to columns working as normal transformation
* Minor name change
* Updated
* Updated
* Fix: fixes crash with dataFrameIndex out of bounds
Co-authored-by: Hugo Häggmark <hugo.haggmark@grafana.com>
* add a table picker
* move picker to the top
* add missing change
* Removed overflow from panel-content so dropdown menus can extend a panel, moved the select to the bottom
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
So:
- Created new VM based on debian-slim
- Could also be used as a build VM
Fixes:
- ginstall issue with merge somewhere.
- Trimmed down the alpine VM since we don't need the extra libraries for cypress
Removes all references and usage of PhantomJS #23375.
Remove direct link rendered image e2e smoke test for now.
Docker: Fix installing chrome in ubuntu custom docker image.
Improve handling of image renderer not available/installed #23593.
Add PhantomJS breaking change and upgrading notes.
Use grabpl v0.2.10.
Closes#13802
Co-authored-by: Kyle Brandt <kyle@grafana.com>
Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
The last three sections of this document are not rendered on https://grafana.com/docs/grafana/latest/alerting/notifications
It seems like in all other instances (other .md docs of this project), level one headers are only used at the top of the page, so I assume using level two headers will make them show. Level two headers do also match the overall structure of the documentation.
* move Panel JSON to inspector
* move Panel JSON to inspector
* update test
* use stats display options
* move query inspector to inspector
* open inspector from the queries section
* subscribe to results
* subscribe to results
* open the right tab
* apply review feedback
* update menus (inspect tabs)
* Dashboard: extend dashnav to add custom content (#23433)
* Dashlist: Fixed dashlist broken in edit mode (#23426)
* Chore: Fix bunch of strict null error to fix master CI (#23443)
* Fix bunch of null error
* Fix failing test
* Another test fix
* Docs: Add SQL region annotation examples (#23268)
Add region annotation examples for SQL data sources in docs.
Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com>
* Docs: Update contributing doc to install node@12. (#23450)
* NewPanelEdit: Minor style and description tweaks, AND PanelQueryRunner & autoMinMax (#23445)
* NewPanelEdit: Minor style and description tweaks
* Removed the worst snapshot of all time
* ReactTable: adds color text to field options (#23427)
* Feature: adds text color field config
* Refactor: created an extension point
* Refactor: uses HOC for extension instead
* Fix: fixes background styling from affecting cells without display.color
* Chore: export OptionsUIRegistryBuilder on grafana/data (#23444)
* export the ui registry
* add to utils index also
* DataLinks: Do not full page reload data links links (#23429)
* Templating: Fix global variable "__org.id" (#23362)
* Fixed global variable __org.id value
* correct orgId value
* reverted the change as variables moved to new file
* Chore: reduce null check errors to 788 (currently over 798) (#23449)
* Fixed ts errors so build will succeed
* Update packages/grafana-data/src/types/graph.ts
Co-Authored-By: Ryan McKinley <ryantxu@gmail.com>
* Feedback from code review
* Leaving out trivial typing's
* Fix error with color being undefined now.
* fix test with timezone issue
* Fixed test
Co-authored-by: Ryan McKinley <ryantxu@gmail.com>
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Cloudwatch: prefer webIdentity over EC2 role (#23452)
* Plugins: add a signature status flag (#23420)
* Progress
* fixed button
* Final touches
* now works from edit mode
* fix layout
* show raw objects
* move query inspector buttons to the bottom
* update snapshot
* Updated design
* Made full page reload work
* Fixed minor style issue
* Updated
* More fixes
* Removed unused imports
* Updated
* Moved to data tab out to seperate component
* fixed ts issue
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
Co-authored-by: Agnès Toulet <35176601+AgnesToulet@users.noreply.github.com>
Co-authored-by: Andrej Ocenas <mr.ocenas@gmail.com>
Co-authored-by: Alexandre de Verteuil <alexandre@grafana.com>
Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com>
Co-authored-by: Cyril Tovena <cyril.tovena@gmail.com>
Co-authored-by: Hugo Häggmark <hugo.haggmark@grafana.com>
Co-authored-by: Vikky Omkar <vikkyomkar@gmail.com>
Co-authored-by: Stephanie Closson <srclosson@gmail.com>
Co-authored-by: Dário Nascimento <dfrnascimento@gmail.com>
* Add integration with Jeager
Add Jaeger datasource and modify derived fields in loki to allow for opening a trace in Jager in separate split.
Modifies build so that this branch docker images are pushed to docker hub
Add a traceui dir with docker-compose and provision files for demoing.:wq
* Enable docker logger plugin to send logs to loki
* Add placeholder zipkin datasource
* Fixed rebase issues, added enhanceDataFrame to non-legacy code path
* Trace selector for jaeger query field
* Fix logs default mode for Loki
* Fix loading jaeger query field services on split
* Updated grafana image in traceui/compose file
* Fix prettier error
* Hide behind feature flag, clean up unused code.
* Fix tests
* Fix tests
* Cleanup code and review feedback
* Remove traceui directory
* Remove circle build changes
* Fix feature toggles object
* Fix merge issues
* Add trace ui in Explore
* WIP
* WIP
* WIP
* Make jaeger datasource return trace data instead of link
* Allow js in jest tests
* Return data from Jaeger datasource
* Take yarn.lock from master
* Fix missing component
* Update yarn lock
* Fix some ts and lint errors
* Fix merge
* Fix type errors
* Make tests pass again
* Add tests
* Fix es5 compatibility
* Add header with minimap
* Fix sizing issue due to column resizer handle
* Fix issues with sizing, search functionality, duplicate react, tests
* Refactor TraceView component, fix tests
* Fix type errors
* Add dark theme styling
* Add tests for hooks
* More color changes
* Fix tests to deal with additional theme wrappers.
* Add memoization
* Fix duplicate identifier
Co-authored-by: David Kaltschmidt <david.kaltschmidt@gmail.com>
* Allow API to assign new user to a specific organization
* Add defer block to test
* Add API tests and return 400 instead of 500 for bad orgId
* Minor test improvements
* Fixed so we dont miss the deep default options.
* removed console log.
* remove check of feature toggle and assuming that the new variables are the default ones.
* removed e2e statement about used featuretoggles.
* added comments for the angular loader.
* added code documentation for backendSrv.
* docs for datasource_srv.
* added some more docs.
* added documentation for the locationsrv.
* started to add docs for echo srv.
* added docs for meta srv.2
* added docs for analytics.
* draft documentation of the DataSourceWithBackend.
* added docs for last files.
* fixed all warnigns in api-extractor.
* fixed some typos and captializations.
* replaced run
* consolidated dist and toolkit
* Solved a few more issues
1. Need to explicitly copy circleci config to dist
so that it's published
2. Detect build directory, and use "local" or "linked"
mode for local builds.
* Reverted change used only for testing
* grafana-toolkit.js always required now. Copy to dist
* removed grafana-toolkit.dist.js, no longer required
* feedback from code review
* Code review comments 2.
Enables adding a section `plugin.<plugin id>` and key/value to
Grafana configuration file which will be converted and sent
as environment variables to the backend plugin.
Also sends some additional environment variables, Grafana
version (GF_VERSION), Grafana edition (GF_EDITION) and
enterprise license path (GF_ENTERPRISE_LICENSE_PATH).
Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
Fixes#21515,
* Hangouts: fixes notifications for alerts with empty message
* Update pkg/services/alerting/notifiers/googlechat.go
Co-Authored-By: Marcus Efraimsson <marcus.efraimsson@gmail.com>
Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com>
* Add integration with Jeager
Add Jaeger datasource and modify derived fields in loki to allow for opening a trace in Jager in separate split.
Modifies build so that this branch docker images are pushed to docker hub
Add a traceui dir with docker-compose and provision files for demoing.:wq
* Enable docker logger plugin to send logs to loki
* Add placeholder zipkin datasource
* Fixed rebase issues, added enhanceDataFrame to non-legacy code path
* Trace selector for jaeger query field
* Fix logs default mode for Loki
* Fix loading jaeger query field services on split
* Updated grafana image in traceui/compose file
* Fix prettier error
* Hide behind feature flag, clean up unused code.
* Fix tests
* Fix tests
* Cleanup code and review feedback
* Remove traceui directory
* Remove circle build changes
* Fix feature toggles object
* Fix merge issues
* Add trace ui in Explore
* WIP
* WIP
* WIP
* Make jaeger datasource return trace data instead of link
* Allow js in jest tests
* Return data from Jaeger datasource
* Take yarn.lock from master
* Fix missing component
* Update yarn lock
* Fix some ts and lint errors
* Fix merge
* Fix type errors
* Make tests pass again
* Add tests
* Fix es5 compatibility
* Add header with minimap
* Fix sizing issue due to column resizer handle
* Fix issues with sizing, search functionality, duplicate react, tests
* Refactor TraceView component, fix tests
* Fix type errors
* Add dark theme styling
* Add tests for hooks
* More color changes
* Fix tests to deal with additional theme wrappers.
Co-authored-by: David Kaltschmidt <david.kaltschmidt@gmail.com>
* Toolkit: Update plugin added
- To normalize an bring a plugins "managed" config up to date
* Added changes for filter only release
* changed name
* updated test for checking files in manifest
* New alpine based plugin ci image
- smaller, based on alpine (downloads in 7 to 10 seconds)
- Has updated gget that uses tar.gz
- Unpacks to /opt/grafana
- Compatible cp with toolkit
* needed build tools for go lint
* added built vm to test tool
* add circleci plugin config
* added openssh to image
* fix for gget & renamed to ginstall
* Styles: Refactoring and tweaks to inline form styles
* Minor change
* Minor fix
* Updated snapshot
* tweaks
* minor tweak
* Updated modal style
* Updated snapshot
* Updated more snapshots
* IconButton: New component to share pointer, size & hover style for icon buttons
* Progress
* IconButton: new component
* Think I am done
* Updated snapshots
* Do not like the black button reverting that, and not the plus-circle changed to plus
* fixed test
* fixed e2e test
* Fixed ts issue
* Use single registry for transformations
* Fix transformations tests
* Added documentation comments and minor refactor
* Added documentation comments and minor refactor
Minor misunderstanding between me and Typescript. We should be good friends back now.
* Fix registry import
* Redux: Added config to redux development middlewares that checks for mutations and serializability
* Disable these middlewares, they are too slow
* Update public/app/store/configureStore.ts
* Update public/app/store/configureStore.ts
* Prettier fix
Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
* Do not use pointer cursor on icon by default
* Allow items alignment in the HorizontalGroup layout
* Add util for rendering components based on their type (element or function)
* Components for rendering query and transformation rows in a unified way
* Apply new UI fo query and transformation rows
* Add some tests
* Minor fix for scroll area
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* First bar gauge panel option
* Update doc comments
* Minor changes
* progress
* Minor type updates
* Fixing typing errors
* Fix that TS!
* Bring satisfaction to that beast called typescript
* Prototype
* Remove import
* Experimenting with different named categories
* Experimenting with category naming
* Naming is very hard
* merge master
* Remove commented code
* Fix merge
* Categorise panel options into collapsible sections
* Remove categories from table panel
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Fixed ts errors so build will succeed
* Update packages/grafana-data/src/types/graph.ts
Co-Authored-By: Ryan McKinley <ryantxu@gmail.com>
* Feedback from code review
* Leaving out trivial typing's
* Fix error with color being undefined now.
* fix test with timezone issue
* Fixed test
Co-authored-by: Ryan McKinley <ryantxu@gmail.com>
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Feature: adds text color field config
* Refactor: created an extension point
* Refactor: uses HOC for extension instead
* Fix: fixes background styling from affecting cells without display.color
* Remove deprecated setDefault usages
* Add simple support for conditinal field config properties
* Use new API in NewsPanel
* Update tests
* Fix check
* Add integration with Jeager
Add Jaeger datasource and modify derived fields in loki to allow for opening a trace in Jager in separate split.
Modifies build so that this branch docker images are pushed to docker hub
Add a traceui dir with docker-compose and provision files for demoing.:wq
* Enable docker logger plugin to send logs to loki
* Add placeholder zipkin datasource
* Fixed rebase issues, added enhanceDataFrame to non-legacy code path
* Trace selector for jaeger query field
* Fix logs default mode for Loki
* Fix loading jaeger query field services on split
* Updated grafana image in traceui/compose file
* Fix prettier error
* Hide behind feature flag, clean up unused code.
* Fix tests
* Fix tests
* Cleanup code and review feedback
* Remove traceui directory
* Remove circle build changes
* Fix feature toggles object
* Fix merge issues
* Add trace ui in Explore
* WIP
* WIP
* WIP
* Make jaeger datasource return trace data instead of link
* Allow js in jest tests
* Return data from Jaeger datasource
* Take yarn.lock from master
* Fix missing component
* Update yarn lock
* Fix some ts and lint errors
* Fix merge
* Fix type errors
* Make tests pass again
* Add tests
* Fix es5 compatibility
* Add header with minimap
* Fix sizing issue due to column resizer handle
* Fix issues with sizing, search functionality, duplicate react, tests
* Refactor TraceView component, fix tests
* Fix type errors
* Add tests for hooks
Co-authored-by: David Kaltschmidt <david.kaltschmidt@gmail.com>
* Replicate SDK behaviour for WebIdentityRole
Fix#20473
* Use WebIdentityRole in s3 uploader as well
* Use consistent casing
* use WebIdentityRole to assume another role
Co-authored-by: eV <ev@7pr.xyz>
* Part1: Unicons implementation (#23197)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* NewPanelEditor: Fixed so that test alert rule works in new edit mode (#23179)
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Remove color prop from icon, remove color implemetation in mono icons
* Update navbar styling
* Move toPascalCase to utils/string
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Resolve type errors resulted from merge
* Part2: Unicons implementation (#23266)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Implment icons in Tabs
* Implement icons in search items and empty list
* Update buttons
* Update button-related snapshot tests
* Update icons in modals and page headers
* Create anfular wrapper and update all icons on search screen
* Update sizing, remove colors, update snapshot tests
* Remove color prop from icon, remove color implemetation in mono icons
* Remove color props from monochrome icons
* Complete update of icons for search screen
* Update icons for infor tooltips, playlist, permissions
* Support temporarly font awesome icons used in enterprise grafana
* Part1: Unicons implementation (#23197)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* NewPanelEditor: Fixed so that test alert rule works in new edit mode (#23179)
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Remove color prop from icon, remove color implemetation in mono icons
* Update navbar styling
* Move toPascalCase to utils/string
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Icons update
* Add optional chaining to for isFontAwesome variable
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Part3: Unicons implementation (#23356)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Implment icons in Tabs
* Implement icons in search items and empty list
* Update buttons
* Update button-related snapshot tests
* Update icons in modals and page headers
* Create anfular wrapper and update all icons on search screen
* Update sizing, remove colors, update snapshot tests
* Remove color prop from icon, remove color implemetation in mono icons
* Remove color props from monochrome icons
* Complete update of icons for search screen
* Update icons for infor tooltips, playlist, permissions
* Support temporarly font awesome icons used in enterprise grafana
* Part1: Unicons implementation (#23197)
* Create a new Icon component
* Update icons in main sidebar
* Update icons in Useful links and in react components on main site
* Update icons in Useful links and in main top navigation
* Adjust sizing
* Update panel navigation and timepicker
* Update icons in Panel menu
* NewPanelEditor: Fixed so that test alert rule works in new edit mode (#23179)
* Update icons in add panel widget
* Resolve merge conflict
* Fix part of the test errors and type errors
* Fix storybook errors
* Update getAvailableIcons import in storybook knobs
* Fix import path
* Fix SyntaxError: Cannot use import statement outside a module in test environment error
* Remove dynamic imports
* Remove types as using @ts-ignore
* Update snapshot test
* Add @iconscout/react-unicons to the shouldExclude list as it is blundled with es2015 syntax
* Remove color prop from icon, remove color implemetation in mono icons
* Update navbar styling
* Move toPascalCase to utils/string
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Update icons in Explore
* Update icons in alerting
* Update + and x buttons
* Update icons in configurations and settings
* Update close icons
* Update icons in rich history
* Update alert messages
* Add optional chaining to for isFontAwesome variable
* Remove icon mock, set up jest.config
* Fix navbar plus icon
* Fir enable-bacground to enableBackgournd
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Merge remote branch origin master to icons-unicons
* Revert "Merge remote branch origin master to icons-unicons"
This reverts commit 3f25d50a39.
* Size-up dashnav icons
* Fix alerting icons, panel headers, update tests
* Fix typecheck error
* Adjustments - add panel icon, spacing
* Set TerserPlugin sourceMap to false to prevent running out of memory when publishing storybook
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Chore: Upgrade to Go 1.14
* Chore: Bump version of grafana/grafana-ci-deploy Docker image
* Chore: Fix/bump version of grafana/build-container Docker image
* CircleCI: Upgrade build Docker images
* BackendPlugin: (wip) change response format
goes with https://github.com/grafana/grafana-plugin-sdk-go/pull/109
* fix error mapping in wrapper
* latest of my sdk branch
* latest of my sdk branch
* TransformWrapper fixes
* latest of sdk branch (removes extra meta)
* add metadata in wrappers
* also set error string
* sdk: v0.35.0
The fetch() API won't send cookies or other type of credentials unless
you set the credentials init option. Some datasources like Prometheus
and Elasticsearch have `withCredentials` option in Browser access mode,
but this option is not currently getting passed in the fetch() API.
Fixes#23338.
* Refactor: adds one form of column resize to React-Table
* Refactor: resizing works
* Refactor: adds onColumnResize
* Refactor: fixes so sorting is not invoked when resizing
* Refactor: fixes styles for resizer
* Refactor: removes callback call
* Refactor: changes after comments
* Refactor: updates code according to new api
* Improved styling
* fix
* Refactor: adds back resizable panel option and defaults to false
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Set field config defaults based on config registry
* Rename FIeldPropertyEditorItem to FieldConfigPopertyItem
* Remove console.log
* Simplify overrides persistence model and add support for nested properties in overrides
* Review updates
* Added draft on transformers to sort and hide fields.
* added structure for the UI.
* draft on sorting/filtering UI.
* simplified the datastructure a bit.
* added draft on drag and drop support.
* added some super simple styling. Nothing final still waiting for a proper design on this.
* updated lockfile after merge.
* changed so we use the new path for button.
* added one more test.
* Ignore feature toggle
* Moved editor to app
* Added top description
* Minor update
* Did some renaming and simplified the code a bit.
* fixed so we dont use capital naming on the transformer.
* changed to an vertical drag and drop design.
* added support to rename fields.
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
1. Typo in the default email address
2. Nested promises causing problems in some situations. Return a promise
and resolve in the outer function
3. If extension still have '.' in front remove it prior to matching.
* Lessons learned from using circle-ci
1. Make it clearer that GITHUB_TOKEN or GITHUB_ACCESS_TOKEN
are required for a release. Don't build without them.
2. Default gracefully to an reasonable email address.
(It does not have to actually exist, but the api needs it to publish)
* template for testing
* Wrote a basic test.
* Simple test
* Slight fix to brackets
* Code review changes
* Fix for test. Setup environment properly
* FieldConfig: Unifying standard and custom registry
* Adding path to option items to make id be prefixed for custom options
* Code updates progress
* Add docs back
* Fix TS
* ld overrides tests from ui to data
* Refactor - rename
* Gauge and table cleanup
* F-I-X e2e
Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
* Show organization popup in alphabetical order
* GetUserOrgList: Sort organizations by name in API
Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
* Theme: Updates old gf-form-styles
* Removed margin buttom
* updated
* updated
* This will take some time
* More style tweaks to both light and dark theme
* Minor change
* Tweaked table styles
* use dropdown
* keep padding the same
* keep padding the same
* Refactoring and moving to components
* Updated
* Alt names
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* FieldOverride: Fixed number override so that it return undefined for null/undefined values and not NaN
* Made process function be able to return undefined an null
* POC grid layout of gague.
* added a grid property that can be used to auto size the charts within a panel.
* fill the grid
* fix lint
* change default for stat panel
* avoid empty cells
* Moved to absolute positioning
* Fixed spacing
* Another fix
* Improve layout algorithm
* VizRepeater: Reverted back to so this is auto behavior for some panels
Co-authored-by: Ryan McKinley <ryantxu@gmail.com>
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Variables: turns on newVariables as default
* Chore: adds default templating state
* Some small refactorings to get the template_srv tests to get green when toggle is enabled by default.
* Refactor: adds getVariables dependency to DashboardModel
* Tests: fixes StackDriver tests
* Tests: updates snapshots
* Tests: updates snapshot for DashboardGrid.test.tsx
* Tests: fixes DashboardModel.test.ts
* fixed initDashboard tests.
* renamed variable.
* changed so we use the templating.list when running the migration work.
* changed so we always returns the variables in sorted order.
* Tests: fixed cloudwatch tests
* added so we set the global template variable props.
* Fixed tests and added moved logic to complete templateSrv variables.
* removed unneccesary updateIndex.
Co-authored-by: Marcus Andersson <marcus.andersson@grafana.com>
* removing src dir on publish
* Moved from binary to native typescript
1. Moved to a native typescrpt github publish using the existing
github client.
2. Change dist.js to detect running in a linked environment.
Todo: Optimize docker image for build size.
* Optimized build of docker container
Much smaller. From 5.47 gb to 2.88
* Feedback from discussion with Ryan
- Added gget for getting grafana versions
- Added infrastructure for testing
- Uploaded new docker image
* Fixed typo... Not sure what happened there :)
* Added command to download canary
* small fix for displaying versions in help
* Removed --dev option
Should really just rename version to (ex: 1.2.0-dev)
* removing src dir on publish
* Moved from binary to native typescript
1. Moved to a native typescrpt github publish using the existing
github client.
2. Change dist.js to detect running in a linked environment.
Todo: Optimize docker image for build size.
* Optimized build of docker container
Much smaller. From 5.47 gb to 2.88
* Feedback from discussion with Ryan
- Added gget for getting grafana versions
- Added infrastructure for testing
- Uploaded new docker image
* Fixed typo... Not sure what happened there :)
* Added command to download canary
* small fix for displaying versions in help
* Removed --dev option
Should really just rename version to (ex: 1.2.0-dev)
* Utils: Use 's' as default for unit-less intervals
If the user specifies a string that is a unit-less number, it is
assumed that they meant seconds.
Fixes#22362
* Rephrase tooltip for better line break position
* Add integration with Jeager
Add Jaeger datasource and modify derived fields in loki to allow for opening a trace in Jager in separate split.
Modifies build so that this branch docker images are pushed to docker hub
Add a traceui dir with docker-compose and provision files for demoing.:wq
* Enable docker logger plugin to send logs to loki
* Add placeholder zipkin datasource
* Fixed rebase issues, added enhanceDataFrame to non-legacy code path
* Trace selector for jaeger query field
* Fix logs default mode for Loki
* Fix loading jaeger query field services on split
* Updated grafana image in traceui/compose file
* Fix prettier error
* Hide behind feature flag, clean up unused code.
* Fix tests
* Fix tests
* Cleanup code and review feedback
* Remove traceui directory
* Remove circle build changes
* Fix feature toggles object
* Fix merge issues
* Add trace ui in Explore
* WIP
* WIP
* WIP
* Make jaeger datasource return trace data instead of link
* Allow js in jest tests
* Return data from Jaeger datasource
* Take yarn.lock from master
* Fix missing component
* Update yarn lock
* Fix some ts and lint errors
* Fix merge
* Fix type errors
* Make tests pass again
* Add tests
* Fix es5 compatibility
Co-authored-by: David Kaltschmidt <david.kaltschmidt@gmail.com>
* Changed location for Current Org:
Current Org: was below the current Org, I changed it so you can deside what looks correct.
I also put an "." after Org, since it is a shorting
* removed an empty line
* Update snapshot
Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
* Export other components as Legacy
* More Select Legacy
* Add namespacing to more files
* Export new elements
* Move Legacy Select folder
* Let's not forget the scss file
* Move new Select folder
* Move new Select from Forms namespace
* Little oopsie
* Fix errors
* Fix merge issues
* Fixed issue with multi value.
* Made some refactorings after feedback from Torkel and Hugo.
* minor refactorings.
* changed so we don't make the current value to array if multi is false.
* added snapshot to contain v23.
* Fixed so we always use the correct type when setting value for multi/non-multi.
* added some more tests.
* added tests.
* some small adjustments after feedback
* Forms for UserProfile
* Migrate to new Form styles
* Add remove icon
* Remove unused import
* Update public/app/features/admin/UserOrgs.tsx
* Remove comment
* Remove icon and add text
* Make every ButtonGroup unique - regardless of values
* Remove visual glitch etc.
* Fic failing typecheck
* Add "some" typesafety to panel options/field config APIs
* Allow selected common field config properties config, allow option defaults config via fluent API
* Update packages/grafana-data/src/panel/PanelPlugin.ts
Co-Authored-By: Ryan McKinley <ryantxu@gmail.com>
* Add defaults support for custom field config
* Enable defaults setting for standard and custom field configs
* Remove setFieldConfigDefaults from PanelPlugin API and replace it with useStandardFieldConfig
* Update API for standard field config defaults
Co-authored-by: Ryan McKinley <ryantxu@gmail.com>
* first things
* introduce headers and moving buttons
* adding reducer and action for gcom dashboard
* action working
* continue building on import form
* change dashboard title
* add prop to not render a label
* first things
* introduce headers and moving buttons
* adding reducer and action for gcom dashboard
* action working
* continue building on import form
* change dashboard title
* add prop to not render a label
* import form layout
* break out form to component
* add actions and reader for file upload
* fix upload issue
* modified data types to handle both gcom and file upload
* import dashboard json
* save dashboard
* start change uid
* change dashboard uid
* fix spacing and date format
* fix import from json
* handle uid and title change
* revert change in panelinspect
* redo fileupload component
* after review
* redo forms to use Forms functionality
* first attempt on async validation
* use ternary on uid input
* removed unused actions, fixed async validation on form
* post form if invalid, break out form to component
* sync file with master
* fix after merge
* nits
* export formapi type
* redo page to use forms validation
* fix inputs and validation
* readd post
* add guards on data source and constants
* type checks and strict nulls
* strict nulls
* validate onchange and fix import button when valid
* shorten validate call
* reexport OnSubmit type
* add comment for overwrite useEffect
* move validation functions to util
* fix button imports
* remove angular import
* move title and uid validation
* Text change
made it more understandable that this is a search field
* Made "New Folder"-button green
Since New Dashboard was green I thought New Folder; Import also would be green. Green seems to be the color for creating new items
* Update playlist_search.html
* change search text
* wrong link
* Update playlist.md
* Update manage_dashboards.html
* Update manage_dashboards.html
* replaced Filter
* replaced Filter
* replaced Filter
* replaced filter
* changed text for placeholder
* Update UsersActionBar.tsx
* Update UserListAdminPage.tsx
* update snapshots
Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
* Cookie : Increase duration to avoid error
When using oauth2 authentication with multifactor, the 60s delay may be too short
* Introduce new setting for OAuth state cookie max age
Co-authored-by: Sofia Papagiannaki <sofia@grafana.com>
Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
* Refactor: adds first naive implemenation of join by field name
* Chore: changes after PR comments
* Refactor: fixes labels and adds support for multiple columns
* StatPanels: Refactoring DisplayValueOptions and renaming
* added return
* Progress
* Updated
* Made radio groups full width by default in panel options
* Fixed ts issue
* Updated
* Added remaining options
* Removed unused type
* Updated snapshot
* Renamed to ReduceDataOptions
* First bar gauge panel option
* Update doc comments
* Minor changes
* progress
* Fixing typing errors
* Minor type updates
* Fix that TS!
* Bring satisfaction to that beast called typescript
Co-authored-by: Dominik Prokop <dominik.prokop@grafana.com>
* wip: add slo support
* Export DataSourcePlugin
* wip: break out metric query editor into its own component
* wip: refactor frontend - keep SLO and Metric query in differnt objects
* wip - load services and slos
* Fix broken test
* Add interactive slo expression builder
* Change order of dropdowns
* Refactoring backend model. slo unit testing in progress
* Unit test migration and SLOs
* Cleanup SLO editor
* Simplify alias by component
* Support alias by for slos
* Support slos in variable queries
* Fix broken last query error
* Update Help section to include SLO aliases
* streamline datasource resource cache
* Break out api specific stuff in datasource to its own file
* Move get projects call to frontend
* Refactor api caching
* Unit test api service
* Fix lint go issue
* Fix typescript strict errors
* Fix test datasource
* Use budget fraction selector instead of budget
* Reset SLO when service is changed
* Handle error in case resource call returned no data
* Show real SLI display name
* Use unsafe prefix on will mount hook
* Store goal in query model since it will be used as soon as graph panel supports adding a threshold
* Add comment to describe why componentWillMount is used
* Interpolate sloid
* Break out SLO aggregation into its own func
* Also test group bys for metricquery test
* Remove not used type fields
* Remove annoying stackdriver prefix from error message
* Default view param to FULL
* Add part about SLO query builder in docs
* Use new images
* Fixes after feedback
* Add one more group by test
* Make stackdriver types internal
* Update docs/sources/features/datasources/stackdriver.md
Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
* Update docs/sources/features/datasources/stackdriver.md
Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
* Update docs/sources/features/datasources/stackdriver.md
Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
* Updates after PR feedback
* add test for when no alias by defined
* fix infinite loop when newVariables feature flag is on
onChange being called in componentDidUpdate produces an
infinite loop when using the new React template variable
implementation.
Also fixes a spelling mistake
* implements feedback for documentation changes
* more doc changes
Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
Co-authored-by: Daniel Lee <dan.limerick@gmail.com>
* Registry of standard option editors
* Move override processors to grafana data
* API for declaratively creating field config/panel options
* Enable declarative API in PanelPlugin for options and field config
* Use new api in react table panel
* Add color and unit picker to option registries
* Add some docs and tests
* Fix tests
because id is never defined on notification object, the condition 'n.id === an.id' is equal to 'undefined === undefined' which is always true.
that code is responsible for the situation when you delete one endpoint and it removes all of them.
* Minor changes
* Fixtures path is now relative to the project directory
* URL support module now has individual exports
* Scenario context timing issues resolved
... caused by being ran synchronously, instead of as part of Cypress' asynchronous queue.
* Scenario context API now supports multiple keys per function call
* addDataSource flow accepts a config argument
… and optionally checks datasource health status
* Added readProvisions command
* Added addPanel flow
* Add integration with Jeager
Add Jaeger datasource and modify derived fields in loki to allow for opening a trace in Jager in separate split.
Modifies build so that this branch docker images are pushed to docker hub
Add a traceui dir with docker-compose and provision files for demoing.:wq
* Enable docker logger plugin to send logs to loki
* Add placeholder zipkin datasource
* Fixed rebase issues, added enhanceDataFrame to non-legacy code path
* Trace selector for jaeger query field
* Fix logs default mode for Loki
* Fix loading jaeger query field services on split
* Updated grafana image in traceui/compose file
* Fix prettier error
* Hide behind feature flag, clean up unused code.
* Fix tests
* Fix tests
* Cleanup code and review feedback
* Remove traceui directory
* Remove circle build changes
* Fix feature toggles object
* Fix merge issues
* Fix some null errors
* Fix test after strict null changes
* Review feedback fixes
* Fix toggle name
Co-authored-by: David Kaltschmidt <david.kaltschmidt@gmail.com>
* BackendSrv: Added config to response
* QueryInspector: Removing config from showing up
* Replace config with request and make it be the unmodified params sent in
* Fixing issue 16090 where Grafana uses illegal characters in requests to Prometheus
* Rebase with Grafana and Merge branch 'master' of https://github.com/BhartiAgrawalNvidia/grafana into fix-16090
# Conflicts:
# public/app/plugins/datasource/prometheus/language_provider.ts
* Rebase with Grafana and Merge branch 'master' of https://github.com/BhartiAgrawalNvidia/grafana into fix-16090
# Conflicts:
# public/app/plugins/datasource/prometheus/language_provider.ts
* Use querystring to escape the url
Co-authored-by: Andrej Ocenas <mr.ocenas@gmail.com>
Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
* CircleCI: Run golangci-lint in two batches
Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>
* CircleCI: Fix typo
Signed-off-by: Arve Knudsen <arve.knudsen@gmail.com>
* Chore: adds fallback value to time series class
* Chore: changes fallback value from null to empty string in FilterInput component
* Update public/app/core/time_series2.ts
Co-Authored-By: Hugo Häggmark <hugo.haggmark@grafana.com>
* Chore: updates || to ?? operators
Co-authored-by: Lukas Siatka <lukasz.siatka@grafana.com>
Co-authored-by: Hugo Häggmark <hugo.haggmark@grafana.com>
* Add Tag component
* Add Tag story
* Add TagList
* Group Tab and TabList
* Fix typechecks
* Remove Meta
* Use forwardRef for the Tag
* Add actions instead of console.log
* Add previews
* Theme: Updates the theme to align panel & page background colors
* Updated dashboard settings view to be similar to new panel edit
* Updated themes
* Added shadow
* Updates generated files
* Minor fix to inspect drawer
* Clean up old dashboard setttings stuff
* Polish to search
* Updated truth image
* Minor tweaks to dropdown menu
* Updates and alignments between inspect drawer and explore rich history
* removed unused variables
* Minor tweak to light page header bg
Casually drops 2.0 in a couple of places in the docs so that a reader looking for information about supported SAML version can find it. Since SAML hasn't had any releases since 2005, we don't have to make a big deal out of it.
* Refactor: moves all the newVariables part to features/variables directory
* Feature: adds datasource type
* Tests: adds reducer tests
* Tests: covers data source actions with tests
* Chore: reduces strict null errors
* boilerplate that will be replaced by real code.
* added old editor template.
* added initial version of ad hoc editor.
* added working (apart from add) version of the editor.
* Added placeholder for picker.
* Have a working UI. Need to connect it so we refresh the variables on changes.
* variable should be updated now.
* removed console.log
* made the url work.
* cleaned up the adapter.
* added possiblity to create filter directly from table.
* moved infotext from general reducer to extended value of adhoc.
* fixed strict null errors.
* fixed strict null errors.
* fixed issue where remove was displayed before being added.
* fixed issue with fragment key.
* changed so template_src is using the redux variables.
* minor refactorings.
* moved adhoc picker to adhoc variable.
* adding tests for reducer and fixed bug.
* added tests or urlparser.
* added tests for ad hoc actions.
* added more tests.
* added more tests.
* fixed strict null error.
* fixed copy n pase error.
* added utilit for getting new variable index.
* removed console.log
* added location to reducerTester type and created a module type for it.
* changed so we only have one builder pattern.
* fixed tests to use static expected values.
* fixed strict errors.
* fixed more strict errors.
Co-authored-by: Hugo Häggmark <hugo.haggmark@grafana.com>
* Refactor value mappings UI to work better with new panel edit
* TS fix
* Experimenting with tabs in the sidebar
* Small refactor and added Panel general settings
* Merge fixes
* fix fieldOptions being used instead of fieldConfig
* Added icons to tabs (testing)
* Only 3 tabs i think, panel specific options need ot exist in first tab, some style tweaks
* Moved title and no value up
* Updated
* Render panel options in Options tab and add old options styles hack to display those vertically
* Basic settings to Panel settings
* Make nullcheck pass
* Snaps bump
* Fix standard configs not update
* Organise sidebar better, add tmp NewPanelEditorContext to hide duplicate legacy options
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Apply field overrides in PanelChrome
* Move applyFieldOverrides to panel query runner
* Review updates
* Make sure overrides are applied back on souce panel when exiting the new edit mode
* TS ignores in est
* Make field display work in viz repeater
* Review updates
* Review and test updates
* Change the way overrides and trransformations are retrieved in PQR
* Add fieldConfig property to PanelModel
* Dashboard migration v1
* Use field config when exiting new panel edit mode
* Gauge - use fieldConfig from panel model
* FieldDisplayOptions - don's extend FieldConfigSource
* Fix fieldDisplay ts
* StatPanel updated
* Stat panel defaults applied
* Table2 panel options update
* React graph updates
* BarGauge updated
* PieChart, Gauge, BarGauge and Stat updates
* PieChart - remove field config defaults from options
* FieldDisplayEditor - remove unused methos
* PanelModel - remove debugger
* Remove fieldConfig from field options when migrating dashboard
* Update data links migrations
* Update fieldDisaplay tests to respect new fieldConfig
* Update dashboard schema version in snapshots
* Fix BarGaugePanel test
* Rebase fixes
* Add onFieldConfigChange to PanelProps type
* Update shared single stat migration
* Pass PanelModel instead of options only for panel type change handler [breaking]
* Renames
* Don't mutate panel options
* Migrations update
* Remove obsolete snap
* Minor updates after review
* Fix null checks
* Temporarily (until we decide to switch to new pane edit) bring back old aditors
* Temporarily rename ValueMappingEditor and MappingRow to Legacy*
* Migrations update
* Updae setFieldConfigDefaults API
* Update the way field config defaults are applied
* Use standard field config for gauge, bar gauge and stat panels
* refactoring
* Revert dashboard fieldOptions migrations as those are handled by single stat migrator
* Fix ts in tests
* Strict null fix and some minor fixes
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Initial commit
* Visualised renamed or deleted datasources as well, if they have queries
* Pass ds image to card and information if the datasource was removed/renamed
* Set up card with datasource info and change run query
* Style comment, run button
* Fix button naming
* Remember last filters
* Update public/app/core/store.ts
* Update public/app/features/explore/RichHistory/RichHistory.tsx
* Update comments
* Rename datasource to data source
* Add test coverage, fix naming
* Remove unused styles, add feedback info
Co-authored-by: Ivana <ivana.huckova@gmail.com>
Co-authored-by: Ivana Huckova <30407135+ivanahuckova@users.noreply.github.com>
* azuremonitor: adds support for workspaces query macro...
...for Azure Logs template variable queries
* docs: azure logs workspaces templating function
* Update docs/sources/features/datasources/azuremonitor.md
Co-Authored-By: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
* docs: convert list into table
* docs: fixes prettier formatting problem
Prettier adds a slash before dollar signs in markdown. Disabling it
for this table with a prettier comment.
https://prettier.io/docs/en/ignore.html
Co-authored-by: Diana Payton <52059945+oddlittlebird@users.noreply.github.com>
* Update export-pdf.md
Minor edits and one question.
* Update docs/sources/enterprise/export-pdf.md
Co-Authored-By: Alexander Zobnin <alexanderzobnin@gmail.com>
* Update export-pdf.md
Co-authored-by: Alexander Zobnin <alexanderzobnin@gmail.com>
data.Frame (that can be series) are converted to as tsdb.TimeSeriesSlice - so new backend plugins can be shimmed into existing alerting
use sdk v0.31.0
* AlertNotifications: Translate notifications IDs to UIDs in alert Rule builder
* Avoid shadowing errors, raise validation error on non-existing notification id
* create a cache for notification Uids to minimize db overhead
* add cache usage test
* avoid caching empty notification Uids
* isolate db in alert notificationUid caching tests
* WIP: Rollup indiator progress
* Progress
* Progress, can now open inspector with right tab
* changed type and made inspect
* Showing stats
* Progress
* Progress
* Getting ready for v1
* Added option and fixed some strict nulls
* Updated
* Fixed test
* Add unit test coverage
* Add tests to util/richHistory
* Remove unused import
* Remove redundant tests
* Fix tests for components
* Test saving to local storage
* Add boxshadow to container
* Revert "Add boxshadow to container"
This reverts commit 5ca2e850e4.
* Initial commit
* Fix spelling of data sources
* Display sorting value for starred and query tab
* Fix handle color for light theme
* Add close button and fix animation
* Remove toggling of tabs
* Stop event propagation when clicking on comment buttons
* Add title for card functionality
* Remove interpolation for easier searchability of variables
* Improve syncing of comments and starred
* Add modal to check if user wants to permanently delete history
* Fix the height of the query card buttons
* Adjust slider's width based on drawer width
* Add spacing between slider and legend
* Semantic variable naming
* Fix disabled button when live tailing
* Add error handling
* Remove unused imports
* Fix starring, remove useEffect
* Remove emiting of appEvents.alertError in store
* Remove unused imports
* Feature: adds onTimeRangeUpdated to newVariables
* Refactor: removes VariableWithRefresh and unused func
* Refactor: adds console output when something throws as well
* Hide plugins list from viewers
* Made /api/plugins only return core plugins for users with viewer role
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Apply field overrides in PanelChrome
* Move applyFieldOverrides to panel query runner
* Review updates
* Make sure overrides are applied back on souce panel when exiting the new edit mode
* TS ignores in est
* Make field display work in viz repeater
* Review updates
* Review and test updates
* Change the way overrides and trransformations are retrieved in PQR
* Minor updates after review
* Fix null checks
* Start adding admin users list page to redux/react.
* removed unused code.
* added pagination.
* changed so we use the new form styles.
* added tooltip.
* using tagbadge for authlabels.
* remove unused code.
* removed old code.
* Fixed the last feedback on PR.
* Refactor: moves all the newVariables part to features/variables directory
* Feature: adds datasource type
* Tests: adds reducer tests
* Tests: covers data source actions with tests
* Chore: reduces strict null errors
* Explore: turns off actions execution on blur for Loki
* Explore: turns off actions execution on blur for Prometheus
* Explore: updates snapshots for Loki & Prometheus after turning off onBlur
* changed so data query response always it returned in the correct order when using mixed data sources.
* refactored the code to make it a bit simpler and not failing the tests.
* changed to simple array type.
* Docs: export dashboard as PDF
* Update docs/sources/enterprise/_index.md
Co-Authored-By: Leonard Gram <leo@xlson.com>
Co-authored-by: Leonard Gram <leo@xlson.com>
* Revert "API: Fix redirect issue when configured to use a subpath (#21652)" (#22671)
This reverts commit 0e2d874ecf.
* Fix redirect validation (#22675)
* Chore: Add test for parse of app url and app sub url
Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com>
* Fix redirect: prepend subpath only if it's missing (#22676)
* Validate redirect in login oauth (#22677)
* Fix invalid redirect for authenticated user (#22678)
* Login: Use correct path for OAuth logos
Co-authored-by: Marcus Efraimsson <marcus.efraimsson@gmail.com>
* Explore: adds QueryRowErrors component
* Explore: updates QueryRow to use QueryRowErrors component
* Explore: updates PromQueryField to remove error render
* Explore: updates Elastic query field to remove error render
* Explore: updates LokiQueryFieldForm to remove error render
* Explore: updates QueryRow component - brings back passing errors down
* Explore: removes QueryRowErrors component
* Explore: updates ErrorContainer component - moves out data filtering
* Explore: updates QueryRow component - changes QueryRowErrors to ErrorContainer
* Explore: updates Explore component - adds error filtering for ErrorContainer
* Explore: updates ErrorContainer and adds a basic test for it
* Explore: updates Explore component props name and adds a basic render test
* Explore: adds snapshots for Explore and ErrorContainer
* Explore: adds a test for error render
* Explore: adds a comment to Explore component explaining the way we filter non-query-row-specific errors
* Explore: adds getFirstNonQueryRowSpecificError method to explore utilities
* Explore: extracts getFirstNonQueryRowSpecificError method and slightly refactors Explore component
* Explore: updates Explore component tests to cover non-query-row-specific errors
line 31 : makes user a superadmin : multiple use of 'a' can be avoided for better reading
line 35: User can belong to : remove 'be' it is incorrect
line 51: allow you : typo correction
* Minor changes
* Only exclude installed packages that are not @grafana/e2e itself
* Explicitly load Cypress tsconfig for clarity
* Fix Cypress tsconfig
* it was trying to extend a config that is not published
* it needs to be commonjs
* Explore: Refactor active buttons css
* Explore: Add query history button
* WIP: Creating drawer
* WIP: Create custom drawer (for now)
* Revert changes to Drawer.tsx
* WIP: Layout finished
* Rich History: Set up boilerplate for Settings
* WIP: Query history cards
* Refactor, split components
* Add resizability, interactivity
* Save history to local storage
* Visualise queries from queryhistory local storage
* Set up query history settings
* Refactor
* Create link, un-refactored verison
* Copyable url
* WIP: Add slider
* Commenting feature
* Slider filtration
* Add headings
* Hide Rich history behind feature toggle
* Cleaning up, refactors
* Update tests
* Implement getQueryDisplayText
* Update lockfile for new dependencies
* Update heading based on sorting
* Fix typescript strinctNullCheck errors
* Fix Forms, new forms
* Fixes based on provided feedback
* Fixes, splitting component into two
* Add tooltips, add delete history button
* Clicking on card adds queries to query rows
* Delete history, width of drawers
* UI/UX changes, updates
* Add number of queries to headings, box shadows
* Fix slider, remove feature toggle
* Fix typo in the beta announcement
* Fix how the rich history state is rendered when initialization
* Move updateFilters when activeDatasourceFilter onlyto RichHistory, remove duplicated code
* Fix typescript strictnull errors, not used variables errors
* Fix property descriptions, add missing properties
Fixes incorrect property descriptions, adds missing properties, and adds an up-to-date example.
* Update logo descriptions
Updates the "large" and "small" logo descriptions to specify SVG image type requirement, and that they may be identical
* Update docs/sources/plugins/developing/plugin.json.md
* Refactor the picker to FC
* Remove redundant variable
* currentDashboardId => currentDashboard
* Make isClearable configurable
* Use useAsyncFn for options loading
* Move getDashboards outside of component
* Refactor: Adds variables in state to TemplateSrv
* Refactor: Introduces some typings and structures
* Refactor: Introduces picker to adapter
* Refactor: Removes useState and introduces contains instead
* Refactor: Introduces Variable Editor
* Refactor: Adds uuid and simplifies state
* Refactor: Consolidates to VariableRenderer
* Refactor: Adds name change capability
* Refactor: Adds variableMiddleware
* Refactor: Adds ability to change Angular type to type in State
* Fix: Fixes so we check for duplicate names
* Refactor: Adds ability to change State type to type in Angular
* Refactor: Updates name in dashboard templating list
* Refactor: Adds label change to VariableEditor
* Refactor: Adds hide change to VariableEditor
* Refactor: Adds update ability
* Refactor: Adds tooltip
* Refactor: Adds SelectionOptionsEditor
* Refactor: Adds query editor and validation
* Refactor: Adds regex and sort to editor
* Refactor: Adds Selection options
* Refactor: Adds Varible Values Previewer
* Refactor: Changes from array in state to Record
* Refactor: Removes getVariableAtIndex from templateSrv
* Tests: Fixs broken tests
* Chore: Fixes duplicate merge import
* Refactor: Removes strict null errors
* Refactor: Adds duplicate variable
* Refactor: Adds remove variable
* Refactor: Adds change order of variables
* Refactor: Adds add new variable
* Chore: Fixes Prettier formatting
* Refactor: Adds VariablePicker
* Fixed so sub menu is displayed when we only have redux template variables.
* removed unused variable.
* tags will be visibile in the new react picker.
* added some nice colors to the tags.
* Added thunk for selecting a tag.
* Refactor: Cleans up templating state when dashboard unloads
* Refactor: Adds save capabilities for variables in state
* added possibility to select tag.
* Added so you can deselect a tag.
* Fixed issue with coloring on top.
* minor refactoring to make the code more slim.
* Refactor: Fixes dispatch return and copy of variable
* selecting options when tag i selected
* small refactoring.
* fixed so we use options.
* Refactor: Adds getValueForUrl capabilities
* first implementation of keyboard navigation on picker.
* removed comment.
* fixed so you can toggle all options.
* Refactor: Simplified state handling using Redux Toolkit and flat reducer structure
* Refactor: Adds sharedTemplatingReducer and queryVariableReducer
* Tests: Fixs broken tests
* Chore: Removes some strict null errors
* Tests: Fix broken tests
* Refactor: Splitted QueryVariablePicker into smaller components
* Refactor: Moves linktext and selected tags to component instead
* Fix: Fixes the ability to have multiple dropdowns opened at same time
* Fix: Fixes onKeyDown from prev refactor
* Refactor: Adds searchfilter searching
* Tests: Fixes after running e2e tests
* Refactor: Adds an attempt to solve dependencies at startup
* Refactor: Adds feature toggle
* Refactor: Resets all angular files to master
* Refactor: Move stuff to query folder
* Refactor: Initial commit for SubMenu component
* Refactor: Updated DashboardModel with new list
* Refactor: Adds feature toggle to dashboard model and friends
* Refactor: Adds picker to SubMenu
* Refactor: Fixes styling on SubMenu
* Refactor: Fixes processvariables
* Refactor: Initial EditorList skeleton
* Refactor: Refactors out VariableEditorList and VariableEditorContainer
* Refactor: Adds New variable functionality
* Refactor: Adds registred types
* Refactor: Adds edit existing variable functionality
* Refactor: Changes params to thunks
* Refactor: Small fix for cleaning up state when clicking update/add
* Refactor: Better typings for outer containers
* Refactor: Adds change order functionality
* Refactor: Removed notify angular args
* Change so the url is in sync with the redux template variables.
* Adding support for saving proper values and checking changes.
* Refactor: Adds duplicate variable functionality
* Feature: Adds remove variable functionality
* Refactor: Small refactor so e2e tests work as before
* Refactor: Returns null if no visible variables
* Refactor: Adds annotations to SubMenu
* Refactor: Fixes toggling of annotations in SubMenu
* added dashboard links to new submehu.
* Refactor: Small refactor breaking up into smaller components
* Fix: Fixes infinite recursive loop when changing varible name
* Templating: Do not mutate location query state
* Refactor: Fixes minor timing issue when adding new variable
* Refactor: removes initialization in variable_srv constructor
* Refactor: Suggestion on how to handle templating.list in DashboardExporter
* Refactor: Adds getVariables typings and changes ChangeTracker and ShareSnapshotCtrl
* Refactor: Adds getVariable on DashboardModel and changes DashboardMigrator
* Fix: Fixes repeated panels
* wip: starting to add custom variable type.
* Refactor: Merging two different toVariablePayload functions
* Tests: Fixes broken tests
* Fix: Reduces strict null errors
* Tests: Initial commit and fixes strange dependency order
* Tests: Covers sharedTemplatingReducer with tests
* Refactor: Rename state/index.ts => state/reducers.ts as every where else
* Refactor: Renames and moves adapters.ts
* Tests: Adds tests for templatingReducer
* Tests: Adds intitial tests for queryVariableReducer
* starting to ad custom variable.
* Tests: Adds more queryVariableReducer tests
* Added support for custom variable. Next up applying some DRY principles and refactoring.
* fixed compile issue.
* added todo.
* Tests: Fixes broken test
* Tests: Covers queryVariableReducer with tests and fixed a couple of bugs
* Fix: Fixes broken test
* Fix: Reduces strict null errors
* change so custom won't be depending on anything elese.
* fixed descriptions.
* removed unused dependency.
* Fixed issue when adding a new variable and editor is being unmount twice.
* fixed issue with select option loop.
* changed so we update query on typing in editor and removed it from component state.
* Moved runQuery up one level in the component tree.
* renamed action and moved it to custom actions.
* moved applyStateChanges to shared code.
* removed todo comment.
* first stab on moving picker to more general.
* Refactor: Changes so we always show variables type
* removed duplicate code regarding picker.
* Did some renamings.
* Feature: Adds text box variable type
* moved tests from query reducer to picker reducer.
* Removed picker from VariableState.
* removed reference to picker.
* Some more refactorings of the picker reducer + actions.
* Chore: Refactors away editor state to its own state slice (#22515)
* Refactor: Inital move, tests not working
* Tests: Adds editorReducer tests
* Refactor: Cleaning up
* Refactor: Moves logic to thunk instead
* Refactor: Initial commit
* Refactor: Combines reducers to one state
* Refactor: Adds combine reducers
* moved navigation logic flow to a thunk instead of in the component.
* fixed issue with rendering picker link.
* Refactor: Removes variable prop from templating.variables
* refactored and removed some more code.
* Feature: adds Constant variable type
* fixed so tags can be selected.
* Fix: fixes default hide for constant and enum order
* fixed so tags works again.
* Fix: fixes so we use Angular editor when newVariables is not defined
* Fix: fixes wrong hide default for Constant variable
* Fix: fixes bug when using duplicate button
* Fix: changes action id
* Tests: prepares for newVariables
* Chore: reduces strict null errors
* Refactor: removes uuidInEditorReducer for simplification
* Chore: changes after PR comments
* Chore: uses getConfig instead of config
* Tests: fixes so e2e tests check for feature toggle and fixed initLock bug
* Refactor: changes so sharedReducer uses createSlice instead
* Refactor: changes textBoxVariableReducer to use creactSlice instead
* Refactor: changes queryBoxVariableReducer to use creactSlice instead
* Refactor: changes customVariableReducer to use creactSlice instead
* Refactor: changes constantVariableReducer to use creactSlice instead
* Refactor: moves types to specific types.ts files instead
* changed so we use queryValue stored on the variable to populate options input when opening picker.
* Feature: adds the ability to test templating thunks using real store and middleware
* Chore: cleans up unused import
* excluded queryValue from the getSaveModel
* Refactor: adds whenAsyncActionIsDispatched to reduxTester
* Tests: adds initial tests for processVariables
* Added reducer tests for constant variable.
* added tests for custom reducer.
* added tets for texbox reducer.
* Tests: adds more tests for ProcessVariable
* Refactor: fixes processVariable flow so we do notrun updateOptions twice
* Tests: finishes tests for processVariables and removed skip test
* added actions tests for custom and constant.
* Tests: adds tests for setOptionFromUrl
* Tests: adds a naive variable mock builder
* Tests: adds tests for validateVariableSelectionState
* added tests for query variable actions.
* added last test for query actions.
* added more tests.
* some more tests.
* fixed typing errors.
* Fixed issues with variable tags.
Co-authored-by: Hugo Häggmark <hugo.haggmark@grafana.com>
Co-authored-by: Torkel Ödegaard <torkel@grafana.com>
* Minor changes
* Revert CLI to JavaScript
... as Rollup is only accepts ESM modules and TypeScript would need to use the new incremental builds feature which causes weird Redux module errors.
* Adding git publish to toolkit
* grafana-toolkit new feature plugin:github-release
* Feedback from code review
1. Used async await and exec for executing commands
2. Using dist folder to get plugin information
* Reverting change to plugin.json back to original value.
* reverted changes to yarn.lock
* reverted changes to yarn.lock
* feedback from code review
* feedback from code review 2
* moved constants to recommended functions
* styling changes and reverting yarn.lock
* removing changes to package.json
* replced execLine with execa
* better error detection around the publish token
* made simpler with commitHash from build
* Testing showed a number of required changes:
- Make the sha configurable
or through environment variable
or through git config.
- Allow a release to be recreated
- Set name and repo from git config as this is what
ghr is expecting anyway.
- Appropriate errors if the user
tries to run a release without
doing a ci-build and ci-package first.
* Using spinner.
Took out extra dependencies out of project.json
wrote tests manually.
* Updated tests. Now passing
* Adding git publish to toolkit
* grafana-toolkit new feature plugin:github-release
* Feedback from code review
1. Used async await and exec for executing commands
2. Using dist folder to get plugin information
* Reverting change to plugin.json back to original value.
* reverted changes to yarn.lock
* reverted changes to yarn.lock
* feedback from code review
* feedback from code review 2
* moved constants to recommended functions
* styling changes and reverting yarn.lock
* removing changes to package.json
* replced execLine with execa
* better error detection around the publish token
* made simpler with commitHash from build
* Testing showed a number of required changes:
- Make the sha configurable
or through environment variable
or through git config.
- Allow a release to be recreated
- Set name and repo from git config as this is what
ghr is expecting anyway.
- Appropriate errors if the user
tries to run a release without
doing a ci-build and ci-package first.
* Using spinner.
Took out extra dependencies out of project.json
wrote tests manually.
* Updated tests. Now passing
* updated test for reducers, from master
* package.json and yarn.lock from master
@@ -20,8 +20,6 @@ Upgrading Go or Node.js requires making changes in many different files. See bel
The Grafana project uses [Go modules](https://golang.org/cmd/go/#hdr-Modules__module_versions__and_more) to manage dependencies on external packages. This requires a working Go environment with version 1.11 or greater installed.
All dependencies are vendored in the `vendor/` directory.
_Note:_ Since most developers of Grafana still use the `GOPATH` we need to specify `GO111MODULE=on` to make `go mod` and `got get` work as intended. If you have setup Grafana outside of the `GOPATH` on your machine you can skip `GO111MODULE=on` when running the commands below.
To add or update a new dependency, use the `go get` command:
@@ -35,16 +33,14 @@ GO111MODULE=on go get example.com/some/module/pkg
GO111MODULE=on go get example.com/some/module/pkg@vX.Y.Z
```
Tidy up the `go.mod` and `go.sum` files and copy the new/updated dependency to the `vendor/` directory:
Tidy up the `go.mod` and `go.sum` files:
```bash
# The GO111MODULE variable can be omitted when the code isn't located in GOPATH.
GO111MODULE=on go mod tidy
GO111MODULE=on go mod vendor
```
You have to commit the changes to `go.mod`,`go.sum` and the `vendor/` directory before submitting the pull request.
You have to commit the changes to `go.mod` and`go.sum` before submitting the pull request.
# Number dashboard versions to keep (per dashboard). Default: 20, Minimum: 1
versions_to_keep=20
# Minimum dashboard refresh interval. When set, this will restrict users to set the refresh interval of a dashboard lower than given interval. Per default this is not set/unrestricted.
# Minimum dashboard refresh interval. When set, this will restrict users to set the refresh interval of a dashboard lower than given interval. Per default this is 5 seconds.
# The interval string is a possibly signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s or 1m.
# If the remote HTTP image renderer service runs on a different server than the Grafana server you may have to configure this to a URL where Grafana is reachable, e.g. http://grafana.domain/.
callback_url=
# Concurrent render request limit affects when the /render HTTP endpoint is used. Rendering many images at the same time can overload the server,
# which this setting can help protect against by only allowing a certain amount of concurrent requests.
concurrent_render_request_limit=30
[panels]
# here for to support old env variables, can remove after a few months
# Number dashboard versions to keep (per dashboard). Default: 20, Minimum: 1
;versions_to_keep = 20
# Minimum dashboard refresh interval. When set, this will restrict users to set the refresh interval of a dashboard lower than given interval. Per default this is not set/unrestricted.
# Minimum dashboard refresh interval. When set, this will restrict users to set the refresh interval of a dashboard lower than given interval. Per default this is 5 seconds.
# The interval string is a possibly signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s or 1m.
# If the remote HTTP image renderer service runs on a different server than the Grafana server you may have to configure this to a URL where Grafana is reachable, e.g. http://grafana.domain/.
;callback_url =
# Concurrent render request limit affects when the /render HTTP endpoint is used. Rendering many images at the same time can overload the server,
# which this setting can help protect against by only allowing a certain amount of concurrent requests.
;concurrent_render_request_limit = 30
[panels]
# If set to true Grafana will allow script tags in text panels. Not recommended as it enable XSS vulnerabilities.
@@ -4,7 +4,6 @@ This guide helps you get started developing Grafana.
Before you begin, you might want to read [How to contribute to Grafana as a junior dev](https://medium.com/@ivanahuckova/how-to-contribute-to-grafana-as-junior-dev-c01fe3064502) by [Ivana Huckova](https://medium.com/@ivanahuckova).
## Dependencies
Make sure you have the following dependencies installed before setting up your developer environment:
@@ -21,7 +20,7 @@ We recommend using [Homebrew](https://brew.sh/) for installing any missing depen
```
brew install git
brew install go
brew install node
brew install node@12
npm install -g yarn
```
@@ -52,7 +51,7 @@ After the command has finished, we can start building our source code:
yarn start
```
Once `yarn start` has built the assets, it will continue to do so whenever any of the files change. This means you don't have to manually build the assets whenever every time you change the code.
Once `yarn start` has built the assets, it will continue to do so whenever any of the files change. This means you don't have to manually build the assets every time you change the code.
Next, we'll build the web server that will serve the frontend assets we just built.
@@ -106,7 +105,7 @@ To run the tests:
yarn e2e-tests
```
By default, the end-to-end tests assumes Grafana is available on `localhost:3000`. To use a specific URL, set the `BASE_URL` environment variable:
By default, the end-to-end tests assume Grafana is available on `localhost:3000`. To use a specific URL, set the `BASE_URL` environment variable:
```
BASE_URL=http://localhost:3333 yarn e2e-tests
@@ -130,7 +129,6 @@ Enable the development mode, by adding the following line in your `custom.ini`:
app_mode = development
```
### Add data sources
By now, you should be able to build and test a change you've made to the Grafana source code. In most cases, you need to add at least one data source to verify the change.
@@ -172,7 +170,7 @@ The resulting image will be tagged as grafana/grafana:dev.
1. Build the frontend: `go run build.go build-frontend`.
1. Build the Docker image: `make build-docker-dev`.
**Note:** If you are using Docker for macOS, be sure to set the memory limit to be larger than 2 GiB. Otherwise `grunt build` may fail. The memory limit settings are available under **Docker Desktop** -> **Preferences** -> **Advanced**.
**Note:** If you are using Docker for macOS, be sure to set the memory limit to be larger than 2 GiB. Otherwise,`grunt build` may fail. The memory limit settings are available under **Docker Desktop** -> **Preferences** -> **Advanced**.
## Troubleshooting
@@ -180,7 +178,7 @@ Are you having issues with setting up your environment? Here are some tips that
### Too many open files when running `make run`
Depending on your environment, you may have to increase the maximum number of open files allowed.
Depending on your environment, you may have to increase the maximum number of open files allowed. For the rest of this section, we will assume you are on a Unix like OS (e.g. Linux/MacOS), where you can control the maximum number of open files through the [ulimit](https://ss64.com/bash/ulimit.html) shell command.
Another alternative is to limit the files being watched. The directories that are watched for changes are listed in the `.bra.toml` file in the root directory.
To retain your `ulimit` configuration, i.e. so it will be remembered for future sessions, you need to commit it to your command line shell initialization file. Which file this will be depends on the shell you are using, here are some examples:
* zsh -> ~/.zshrc
* bash -> ~/.bashrc
Commit your ulimit configuration to your shell initialization file as follows ($LIMIT being your chosen limit and $INIT_FILE being the initialization file for your shell):
```
echo ulimit -S -n $LIMIT >> $INIT_FILE
```
Your command shell should read the initialization file in question every time it gets started, and apply your `ulimit` command.
For some people, typically using the bash shell, ulimit fails with an error similar to the following:
```
ulimit: open files: cannot modify limit: Operation not permitted
```
If that happens to you, chances are you've already set a lower limit and your shell won't let you set a higher one. Try looking in your shell initalization files (~/.bashrc typically), if there's already a ulimit command that you can tweak.
@@ -4,6 +4,8 @@ This style guide applies to all documentation created for Grafana products.
For information about how to write technical documentation, we suggest reviewing the content of the [Google Technical Writing courses](https://developers.google.com/tech-writing).
The [Divio documentation system](https://documentation.divio.com/) site is also a good resource.
## Contributing
The *Documentation style guide* is a living document. Add to it whenever a style decision is made or a question is answered regarding style, grammar, or word choice.
@@ -139,6 +141,10 @@ Two words, not one
* Correct, but passive voice: Your list of active alarms is displayed.
* Incorrect: The list of active alarms displays.
#### intro, introduction
"Introduction" is the preferred word. Use "intro" if there are space constraints (like on the side menu) or you are specifically trying for a less formal, more conversational tone.
Now that we added the `aria-label` we suddenly get more information about this particular field. It's an input field that represents a username, but there it's still not really signaling that it's part of an e2e test.
The next step is to create a `Page` representation in our e2e test framework to glue the test with the real implementation using the `pageFactory` function. For that function we can supply a `url` and `selectors` like in the example below:
```typescript
export const Login = pageFactory({
url: '/login', // used when called from Login.visit()
selectors: {
username: 'Username input field', // used when called from Login.username().type('Hello World')
},
});
export const Login = {
url: "/login", // used when called from Login.visit()
username: "Username input field", // used when called from Login.username().type('Hello World')
};
```
The next step is to add the `Login` page to the exported const `Pages` in `packages/grafana-e2e/src/pages/index.ts` so that it appears when we type `e2e.pages` in our IDE.
The next step is to add the `Login` page to the exported const `Pages` in `packages/grafana-e2e-selectors/src/selectors/pages.ts` so that it appears when we type `e2e.pages` in our IDE.
```ecmascript 6
export const Pages = {
Login,
@@ -49,17 +75,21 @@ export const Pages = {
};
```
Now that we have a `Page` called `Login` in our `Pages` const we can use that to add a selector in our html like shown below and now this really signals to future developers that it is part of an e2e test.
The last step in our example is to use our `Login` page as part of a test. The `pageFactory` function we used before gives us two things:
The last step in our example is to use our `Login` page as part of a test.
- The `url` property is used whenever we call the `visit` function and is equivalent to the Cypress function [cy.visit()](https://docs.cypress.io/api/commands/visit.html#Syntax).
> Best practice after calling `visit` is to always call `should` on a selector to prevent flaky tests when you try to access an element that isn't ready. For more information, refer to [Commands vs. assertions](https://docs.cypress.io/guides/core-concepts/retry-ability.html#Commands-vs-assertions).
- Any defined selector in the `selectors` property can be accessed from the `Login` page by invoking it. This is equivalent to the result of the Cypress function [cy.get(...)](https://docs.cypress.io/api/commands/get.html#Syntax).
> Best practice after calling `visit` is to always call `should` on a selector to prevent flaky tests when you try to access an element that isn't ready. For more information, refer to [Commands vs. assertions](https://docs.cypress.io/guides/core-concepts/retry-ability.html#Commands-vs-assertions).
- Any defined selector can be accessed from the `Login` page by invoking it. This is equivalent to the result of the Cypress function [cy.get(...)](https://docs.cypress.io/api/commands/get.html#Syntax).
```ecmascript 6
describe('Login test', () => {
it('Should pass', () => {
@@ -73,6 +103,7 @@ describe('Login test', () => {
```
## Advanced example
Let's take a look at an example that uses the same `selector` for multiple items in a list for instance. In this example app we have a list of data sources that we want to click on during an e2e test.
```jsx harmony
@@ -80,36 +111,35 @@ Let's take a look at an example that uses the same `selector` for multiple items
Just as before in the basic example we'll start by creating a page abstraction using the `pageFactory` function:
```typescript
export const DataSources = pageFactory({
export const DataSources = {
url: '/datasources',
selectors: {
dataSources: (dataSourceName: string) => `Data source list item ${dataSourceName}`,
},
});
```
dataSources: (dataSourceName: string) => `Data source list item ${dataSourceName}`,
};
````
You might have noticed that instead of a simple `string` as the `selector`, we're using a `function` that takes a string parameter as an argument and returns a formatted string using the argument.
Just as before we need to add the `DataSources` page to the exported const `Pages` in `packages/grafana-e2e/src/pages/index.ts`.
Just as before we need to add the `DataSources` page to the exported const `Pages` in `packages/grafana-e2e-selectors/src/selectors/pages.ts`.
The next step is to use the `dataSources` selector function as in our example below:
@@ -119,6 +149,7 @@ The next step is to use the `dataSources` selector function as in our example be
```
When this list is rendered with the data sources with names `A`, `B`, `C` the resulting html would become:
```jsx harmony
<div class="card-item-name" aria-label="Data source list item A">
A
@@ -134,7 +165,9 @@ When this list is rendered with the data sources with names `A`, `B`, `C` the re
```
Now we can write our test. The one thing that differs from the `Basic example` is that we pass in which data source we want to click on as an argument to the selector function:
> Best practice after calling `visit` is to always call `should` on a selector to prevent flaky tests when you try to access an element that isn't ready. For more information, refer to [Commands vs. assertions](https://docs.cypress.io/guides/core-concepts/retry-ability.html#Commands-vs-assertions).
The most common error with PhantomJs image rendering is when a PR introduces an import that has functionality that's not supported by PhantomJs. To quickly identify which new import causes this you can use a tool like `es-check`.
1. Run > `npx es-check es5 './public/build/*.js'`
2. Check the output for files that break es5 compatibility.
3. Lazy load the failing imports if possible.
3. Lazy load the failing imports if possible.
### Debugging
There is no easy or comprehensive way to debug PhantomJS smoke test (image rendering) failures. However, PhantomJS exposes remote debugging interface which can give you a sense of what is going wrong in the smoke test. Before performing the steps described below make sure your local Grafana instance is running:
Stories for a component should be placed next to the component file. The Storybook file requires the same name as the component file. For example, a story for `SomeComponent.tsx` will have the file name `SomeComponent.story.tsx`.
Stories for a component should be placed next to the component file. The Storybook file requires the same name as the component file. For example, a story for `SomeComponent.tsx` will have the file name `SomeComponent.story.tsx`. If a story should be internal, not visible in production, name the file `SomeComponent.story.internal.tsx`.
### Writing stories
@@ -101,7 +101,10 @@ import { MyComponent } from "./MyComponent";
### MDX file without a relationship to a component
An MDX file can exist by itself without any connection to a story. This can be good for writing things such as a general guidelines page. Something that is required when the MDX file has no relation to a component is a `Meta` tag that says where in the hierarchy the component will live. It can look like this:
An MDX file can exist by itself without any connection to a story. This can be good for writing things such as a general guidelines page. Two things are required for this to work:
- The file needs to be named `*.story.mdx`
- A `Meta` tag must exist that says where in the hierarchy the component lives. It can look like this:
@@ -26,7 +26,7 @@ In the case of a long task, then you probably won't need any headings except for
1. Use second-person imperative tense.
1. Basically, "You, do this" with every sentence.
1. Do not use the third-person "user" for steps you want the reader ("you") to perform.
1. Write steps that contain one action, possibly two related actions, such as copy and paste a thing or save and quite the program.
1. Write steps that contain one action, possibly two related actions, such as copy and paste a thing or save and quit the program.
If a sentence is not telling the reader to do something, then it is not a step. You can use nested images or paragraphs like this one to add information if necessary.
In many cases, you should tell the reader what the outcome should be so that they know when they are done.
docker run -v $(PWD)/sources:/hugo/content/docs/grafana/latest -p 3002:3002 --rm -it grafana/docs-base:latest /bin/bash -c 'npm i && make webpack && make docs-menu && hugo server -p 3002 -D --ignoreCache --baseUrl http://localhost:3002 --bind 0.0.0.0'
docs-no-pull:
docker run -v $(PWD)/sources:/hugo/content/docs/grafana/latest -p 3002:3002 --rm -it grafana/docs-base:latest /bin/bash -c 'make docs-menu && hugo server -p 3002 -D --ignoreCache --baseUrl http://localhost:3002 --bind 0.0.0.0'
`--configOverrides` is a command line argument that acts like an environmental variable override.
For example, you can use it to redirect logging to another file (maybe to log plugin installs in a service like Hosted Grafana) or when resetting the admin password and you have non-default values for some important config value (like where the database is located).
For example, you can use it to redirect logging to another file (maybe to log plugin installations in a service like Hosted Grafana) or when resetting the admin password and you have non-default values for some important config value (like where the database is located).
Grafana supports automatic rendering of panels and dashboards as PNG images. This allows Grafana to automatically generate images of your panels to include in alert [Notifications]({{< relref "../alerting/notifications.md" >}}).
Grafana supports automatic rendering of panels and dashboards as PNG images. This allows Grafana to automatically generate images of your panels to include in [alert notifications]({{< relref "../alerting/notifications.md" >}}).
When an image is being rendered the PNG-image is temporarily written to the file system. When an image is rendered, the PNG image is temporary written to the `png` folder in the Grafana `data` folder.
A background job runs every 10 minutes and removes temporary images. You can configure how long an image should be stored before being removed by configuring the [temp-data-lifetime]({{< relref "/installation/configuration/#temp-data-lifetime" >}}) setting.
A background job runs every 10 minutes and removes temporary images. You can configure how long an image should be stored before being removed by configuring the [temp-data-lifetime]({{< relref "../installation/configuration/#temp-data-lifetime" >}}) setting.
You can also render a PNG by clicking the dropdown arrow next to a panel title, then clicking **Share > Direct link rendered image**.
@@ -22,7 +22,7 @@ You can also render a PNG by clicking the dropdown arrow next to a panel title,
Minimum free memory recommendation is 16GB on the system doing the rendering.
Rendering images can require a lot of memory, mainly because Grafama creates browser instances in the background for the actual rendering. If multiple images are rendered in parallel, then the rendering has a bigger memory footprint. One advantage of using the remote rendering service is that the rendering will be done on the remote system, so your local system resources will not be affected by rendering.
Rendering images can require a lot of memory, mainly because Grafana creates browser instances in the background for the actual rendering. If multiple images are rendered in parallel, then the rendering has a bigger memory footprint. One advantage of using the remote rendering service is that the rendering will be done on the remote system, so your local system resources will not be affected by rendering.
## Alerting and render limits
@@ -36,9 +36,9 @@ To install the plugin, refer to the [Grafana Image Renderer Installation instruc
## Run in custom Grafana Docker image
We recommend setting up another Docker container for rendering and using remote rendering. Refer to [Remote rendering service](#remote-rendering-service) for instructions.
We recommend setting up another Docker container for rendering and using remote rendering. Refer to [Remote rendering service]({{< relref "#remote-rendering-service" >}}) for instructions.
If you still want to install the plugin in the Grafana Docker image, refer to [Build with Grafana Image Renderer plugin pre-installed]({{< relref "/installation/docker/#build-with-grafana-image-renderer-plugin-pre-installed" >}}).
If you still want to install the plugin in the Grafana Docker image, refer to [Build with Grafana Image Renderer plugin pre-installed]({{< relref "../installation/docker/#build-with-grafana-image-renderer-plugin-pre-installed" >}}).
## Remote rendering service
@@ -108,7 +108,7 @@ The following example describes how to build and run the remote HTTP rendering s
## PhantomJS
> PhantomJS is deprecated since Grafana v6.4 and will be removed in a future release. Please migrate to the Grafana Image Renderer plugin or remote rendering service.
> Starting from Grafana v7.0.0, all PhantomJS support has been removed. Please use the Grafana Image Renderer plugin or remote rendering service.
Grafana collects some metrics about itself internally. Currently, Grafana supports pushing metrics to Graphite or exposing them to be scraped by Prometheus.
Grafana collects some metrics about itself internally. Grafana supports pushing metrics to Graphite or exposing them to be scraped by Prometheus.
To emit internal metrics you have to enable the option under the [metrics] section in your [grafana.ini](http://docs.grafana.org/installation/configuration/#enabled-6) config file. If you want to push metrics to Graphite, you must also configure the [metrics.graphite](http://docs.grafana.org/installation/configuration/#metrics-graphite) section.
For more information about configuration options related to Grafana metrics, refer to [metrics]({{< relref "../installation/configuration/#metrics" >}}) and [metrics.graphite]({{< relref "../installation/configuration/#metrics-graphite" >}}) in [Configuration]({{< relref "../installation/configuration.md" >}}).
## Available metrics
When enabled, Grafana exposes a number of metrics, including:
* Active Grafana instances
* Number of dashboards, users, and playlists
* HTTP status codes
* Requests by routing group
* Grafana active alerts
* Grafana performance
## Pull metrics from Grafana into Prometheus
These instructions assume you have already added Prometheus as a data source in Grafana.
1. Enable Prometheus to scrape metrics from Grafana. In your configuration file (`grafana.ini` or `custom.ini` depending on your operating system) remove the semicolon to enable the following configuration options:
```
# Metrics available at HTTP API Url /metrics
[metrics]
# Disable / Enable internal metrics
enabled = true
# Disable total stats (stat_totals_*) metrics to be generated
disable_total_stats = false
```
1. (optional) If you want to require authorization to view the metrics endpoint, then uncomment and set the following options:
```
basic_auth_username =
basic_auth_password =
```
1. Restart Grafana. Grafana now exposes metrics at http://localhost:3000/metrics.
1. Add the job to your prometheus.yml file.
Example:
```
- job_name: 'grafana_metrics'
scrape_interval: 15s
scrape_timeout: 5s
static_configs:
- targets: ['localhost:3000']
```
1. Restart Prometheus. Your new job should appear on the Targets tab.
1. In Grafana, hover your mouse over the **Configuration** (gear) icon on the left sidebar and then click **Data Sources**.
1. Select the **Prometheus** data source.
1. On the Dashboards tab, **Import** the Grafana metrics dashboard. All scraped Grafana metrics are available in the dashboard.
## View Grafana metrics in Graphite
These instructions assume you have already added Graphite as a data source in Grafana.
1. Enable sending metrics to Graphite. In your configuration file (`grafana.ini` or `custom.ini` depending on your operating system) remove the semicolon to enable the following configuration options:
```
# Metrics available at HTTP API Url /metrics
[metrics]
# Disable / Enable internal metrics
enabled = true
# Disable total stats (stat_totals_*) metrics to be generated
disable_total_stats = false
```
1. Enable [metrics.graphite] options:
```
# Send internal metrics to Graphite
[metrics.graphite]
# Enable by setting the address setting (ex localhost:2003)
address = <hostname or ip>:<port#>
prefix = prod.grafana.%(instance_name)s.
```
1. Restart Grafana. Grafana now exposes metrics at http://localhost:3000/metrics and sends them to the Graphite location you specified.
# <int> org id. will default to orgId 1 if not specified
orgId:1
# <string> custom UID which can be used to reference this datasource in other parts of the configuration, if not specified will be generated automatically
uid:my_unique_uid
# <string> url
url:http://localhost:8080
# <string> Deprecated, use secureJsonData.password
@@ -160,6 +162,9 @@ Since not all datasources have the same configuration settings we only have the
It's possible to manage dashboards in Grafana by adding one or more yaml config files in the [`provisioning/dashboards`](/installation/configuration/#provisioning) directory. Each config file can contain a list of `dashboards providers` that will load dashboards into Grafana from the local filesystem.
It's possible to manage dashboards in Grafana by adding one or more yaml config files in the [`provisioning/dashboards`]({{< relref "../installation/configuration.md" >}}) directory. Each config file can contain a list of `dashboards providers` that will load dashboards into Grafana from the local filesystem.
The dashboard provider config file looks somewhat like this:
@@ -240,9 +245,9 @@ When Grafana starts, it will update/insert all dashboards available in the confi
It's possible to make changes to a provisioned dashboard in the Grafana UI. However, it is not possible to automatically save the changes back to the provisioning source.
If `allowUiUpdates` is set to `true` and you make changes to a provisioned dashboard, you can `Save` the dashboard then changes will be persisted to the Grafana database.
> **Note.**
> **Note:**
> If a provisioned dashboard is saved from the UI and then later updated from the source, the dashboard stored in the database will always be overwritten. The `version` property in the JSON file will not affect this, even if it is lower than the existing dashboard.
>
>
> If a provisioned dashboard is saved from the UI and the source is removed, the dashboard stored in the database will be deleted unless the configuration option `disableDeletion` is set to true.
If `allowUiUpdates` is configured to `false`, you are not able to make changes to a provisioned dashboard. When you click `Save`, Grafana brings up a *Cannot save provisioned dashboard* dialog. The screenshot below illustrates this behavior.
@@ -250,7 +255,7 @@ If `allowUiUpdates` is configured to `false`, you are not able to make changes t
Grafana offers options to export the JSON definition of a dashboard. Either `Copy JSON to Clipboard` or `Save JSON to file` can help you synchronize your dashboard changes back to the provisioning source.
Note: The JSON definition in the input field when using `Copy JSON to Clipboard` or `Save JSON to file` will have the `id` field automatically removed to aid the provisioning workflow.
@@ -270,7 +275,7 @@ Alert Notification Channels can be provisioned by adding one or more yaml config
Each config file can contain the following top-level fields:
-`notifiers`, a list of alert notifications that will be added or updated during start up. If the notification channel already exists, Grafana will update it to match the configuration file.
-`delete_notifiers`, a list of alert notifications to be deleted before before inserting/updating those in the `notifiers` list.
-`delete_notifiers`, a list of alert notifications to be deleted before inserting/updating those in the `notifiers` list.
Provisioning looks up alert notifications by uid, and will update any existing notification with the provided uid.
@@ -398,6 +403,8 @@ The following sections detail the supported settings for each alert notification
| Name |
| ---- |
| url |
| basicAuthUser |
| basicAuthPassword |
#### Alert notification `teams`
@@ -415,6 +422,7 @@ The following sections detail the supported settings for each alert notification
| Name |
| ---- |
| singleEmail |
| addresses |
#### Alert notification `hipchat`
@@ -463,4 +471,3 @@ The following sections detail the supported settings for each alert notification
The alert engine publishes some internal metrics about itself. You can read more about how Grafana publishes [internal metrics]({{< "../administration/metrics/" >}}).
The alert engine publishes some internal metrics about itself. You can read more about how Grafana publishes [internal metrics]({{< relref "../administration/metrics/" >}}).
Severity | Level for dynamic notifications, default is `critical`
Auto resolve incidents | Resolve incidents in PagerDuty once the alert goes back to ok
**Note:** The tags `Class`, `Group`, and `Component` have special meaning in the [Pagerduty Common Event Format - PD-CEF](https://support.pagerduty.com/docs/pd-cef). If an alert panel defines these tag keys they will be transposed to the root of the event sent to Pagerduty. This means they will be available within the Pagerduty UI and Filtering tools.
**Note:** The tags `Severity`, `Class`, `Group`, and `Component` have special meaning in the [Pagerduty Common Event Format - PD-CEF](https://support.pagerduty.com/docs/pd-cef). If an alert panel defines these tag keys, then they are transposed to the root of the event sent to Pagerduty. This means they will be available within the Pagerduty UI and Filtering tools. A Severity tag set on an alert overrides the global Severity set on the notification channel if it's a valid level.
# Enable images in notifications {#external-image-store}
## Enable images in notifications {#external-image-store}
Grafana can render the panel associated with the alert rule as a PNG image and include that in the notification. Read more about the requirements and how to configure
Grafana can render the panel associated with the alert rule as a PNG image and include that in the notification. Read more about the requirements and how to configure
Most Notification Channels require that this image be publicly accessible (Slack and PagerDuty for example). In order to include images in alert notifications, Grafana can upload the image to an image store. It currently supports
@@ -216,7 +220,7 @@ Be aware that some notifiers requires public access to the image to be able to i
Notification services which need public image access are marked as 'external only'.
# Use alert rule tags in notifications {#alert-rule-tags}
## Use alert rule tags in notifications {#alert-rule-tags}
> Only available in Grafana v6.3+.
@@ -226,7 +230,7 @@ It currently supports only the Prometheus Alertmanager notifier.
This is an optional feature. You can get notifications without using alert rule tags.
# Configure the link back to Grafana from alert notifications
## Configure the link back to Grafana from alert notifications
All alert notifications contain a link back to the triggered alert in the Grafana instance.
This URL is based on the [domain]({{< relref "../installation/configuration/#domain" >}}) setting in Grafana.
The Azure AD authentication provides the possibility to use an Azure Active Directory tenant as an identity provider for Grafana. By using Azure AD Application Roles it is also possible to assign Users and Groups to Grafana roles from the Azure Portal.
## Create the Azure AD application
@@ -120,6 +122,12 @@ only give access to members of the group `example` which has Id `8bab1c86-8fba-3
You'll need to ensure that you've [enabled group attributes](https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-fed-group-claims#configure-the-azure-ad-application-registration-for-group-attributes) in your Azure AD Application Registration manifest file (Azure Portal -> Azure Active Directory -> Application Registrations -> Select Application -> Manifest)
```json
"groupMembershipClaims": "ApplicationGroup"
```
The `allowed_domains` option limits access to the users belonging to the specific domains. Domains should be separated by space or comma.
@@ -54,24 +54,6 @@ Check for the presence of a role using the [JMESPath](http://jmespath.org/exampl
See [JMESPath examples](#jmespath-examples) for more information.
## Set up OAuth2 with Okta
First set up Grafana as an OpenId client "webapplication" in Okta. Then set the Base URIs to `https://<grafana domain>/` and set the Login redirect URIs to `https://<grafana domain>/login/generic_oauth`.
Finally set up the generic oauth module like this:
> Note: It's important to ensure that the [root_url]({{< relref "../installation/configuration/#root-url" >}}) in Grafana is set in your Azure Application Reply URLs (App -> Settings -> Reply URLs)
## Set up OAuth2 with Centrify
1. Create a new Custom OpenID Connect application configuration in the Centrify dashboard.
The Okta authentication allows your Grafana users to log in by using an external Okta authorization server.
## Create an Okta application
Before you can sign a user in, you need to create an Okta application from the Okta Developer Console.
1. Log in to the [Okta portal](https://login.okta.com/).
1. Go to Admin and then select **Developer Console**.
1. Select **Applications**, then **Add Application**.
1. Pick **Web** as the platform.
1. Enter a name for your application (or leave the default value).
1. Add the **Base URI** of your application, such as https://grafana.example.com.
1. Enter values for the **Login redirect URI**. Use **Base URI** and append it with `/login/okta`, for example: https://grafana.example.com/login/okta.
1. Click **Done** to finish creating the Okta application.
## Enable Okta Oauth in Grafana
1. Add the following to the [Grafana configuration file]({{< relref "../installation/configuration.md#config-file-locations" >}}):
To limit access to authenticated users that are members of one or more groups, set `allowed_groups`
to a comma- or space-separated list of Okta groups.
```ini
allowed_groups=Developers, Admins
```
The `allowed_domains` option limits access to the users belonging to the specific domains. Domains should be separated by space or comma.
```ini
allowed_domains=mycompany.com mycompany.org
```
### Map roles
Grafana can attempt to do role mapping through Okta OAuth. In order to achieve this, Grafana checks for the presence of a role using the [JMESPath](http://jmespath.org/examples.html) specified via the `role_attribute_path` configuration option.
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 [Organization roles]({{< relref "../permissions/organization_roles.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" >}}).
### Team Sync (Enterprise only)
Map your Okta groups to teams in Grafana so that your users will automatically be added to
the correct teams.
Okta groups can be referenced by group name, like `Admins`.
[Learn more about Team Sync]({{< relref "../enterprise/team-sync.md" >}})
Grafana Enterprise is a commercial edition of Grafana that includes additional features not found in the open source
version.
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, Grafana Enterprise adds enterprise data sources,
advanced authentication options, more permission controls, 24x7x365 support, and training from the core Grafana team.
Building on everything you already know and love about Grafana, Grafana Enterprise adds enterprise data sources, advanced authentication options, more permission controls, 24x7x365 support, and training from the core Grafana team.
Grafana Enterprise includes all of the features found in the open source edition and more.
___
[Learn more about Grafana Enterprise.](https://grafana.com/enterprise)
### Enhanced LDAP Integration
With Grafana Enterprise you can set up synchronization between LDAP Groups and Teams. [Learn More]({{< relref "../auth/enhanced_ldap.md" >}}).
### SAML Authentication
Enables your Grafana Enterprise users to authenticate with SAML. [Learn More]({{< relref "../auth/saml.md" >}}).
### Team Sync
Team Sync allows you to setup synchronization between teams in Grafana and teams in your auth provider so that your users automatically end up in the right team. [Learn More]({{< relref "../auth/team-sync.md" >}}).
White labeling makes it possible to customize the logos and footer links of Grafana. [Learn More]({{< relref "white-labeling.md" >}}).
## Enhanced security features
Grafana Enterprise includes integrations with more ways to authenticate your users and enhanced authorization capabilities.
### Data source permissions
Data source permissions allow you to restrict query access to only specific Teams and Users. [Learn More]({{< relref "../permissions/datasource_permissions.md" >}}).
[Data source permissions]({{< relref "datasource_permissions.md" >}}) allow you to restrict query access to only specific teams and users.
### Reporting
### Enhanced LDAP integration
Reporting makes it possible to take any dashboard, generate a PDF report, and set up a schedule to have it delivered. [Learn More]({{< relref "../features/reporting.md" >}}).
With Grafana Enterprise [enhanced LDAP]({{< relref "enhanced_ldap.md" >}}), you can set up synchronization between LDAP groups and Grafana teams.
### Enterprise Plugins
### SAML authentication
With a Grafana Enterprise license you will get access to enterprise plugins, including:
[SAML authentication]({{< relref "saml.md" >}}) enables your Grafana Enterprise users to authenticate with SAML.
[Team sync]({{< relref "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.
[Reporting]({{< relref "reporting.md" >}}) allows you to take any dashboard, generate a PDF report, and set up a schedule to have it emailed to whoever you choose.
## Export dashboard as PDF
[Export dashboard as PDF]({{< relref "export-pdf.md" >}}) allows you to export a dashboard as a PDF document.
## White labeling
[White labeling]({{< relref "white-labeling.md" >}}) allows you to replace the Grafana brand and logo with your own corporate brand and logo. You can also change footer links to point to your custom resources.
## Enterprise plugins
With a Grafana Enterprise license, you get access to premium plugins, including:
You can learn more about Grafana Enterprise [here](https://grafana.com/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).
## License file management
To download your Grafana Enterprise license log in to your [Grafana.com](https://grafana.com) account and go to your **Org
Profile**. In the side menu there is a section for Grafana Enterprise licenses. At the bottom of the license
details page there is **Download Token** link that will download the *license.jwt* file containing your license.
To download your Grafana Enterprise license log in to your [Grafana.com](https://grafana.com) account and go to your **Org Profile**. In the side menu there is a section for Grafana Enterprise licenses. At the bottom of the license details page there is **Download Token** link that will download the *license.jwt* file containing your license.
Place the *license.jwt* file in Grafana's data folder. This is usually located at `/var/lib/grafana/data` on Linux systems.
@@ -85,7 +88,4 @@ You can also configure a custom location for the license file via the ini settin
license_path= /company/secrets/license.jwt
```
This setting can also be set via ENV variable which is useful if you're running Grafana via docker and have a custom
volume where you have placed the license file. In this case set the ENV variable `GF_ENTERPRISE_LICENSE_PATH` to point
to the location of your license file.
This setting can also be set with an environment variable, which is useful if you're running Grafana with Docker and have a custom volume where you have placed the license file. In this case, set the environment variable `GF_ENTERPRISE_LICENSE_PATH` to point to the location of your license file.
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**.
By default, permissions are disabled for data sources and a data source in an organization can be queried by any user in
that organization. For example a user with `Viewer` role can still issue any possible query to a data source, not just
those queries that exist on dashboards he/she has access to.
By default, data sources in an organization can be queried by any user in that organization. For example, a user with the `Viewer` role can issue any possible query to a data source, not just
queries that exist on dashboards they have access to.
When permissions are enabled for a data source in an organization you will restrict admin and query access for that
data source to [admin users]({{< relref "../permissions/organization_roles/#admin-role" >}}) in that organization.
When permissions are enabled for a data source in an organization, you restrict admin and query access for that data source to [admin users]({{< relref "../permissions/organization_roles/#admin-role" >}}) in that organization.
**To enable permissions for a data source:**
**Enable permissions for a data source:**
1. Navigate to Configuration / Data Sources.
1. Navigate to **Configuration > Data Sources**.
2. Select the data source you want to enable permissions for.
3.Select the Permissions tab and click on the `Enable` button.
3.On the Permissions tab, click **Enable**.
<div class="clearfix"></div>
@@ -39,31 +37,30 @@ data source to [admin users]({{< relref "../permissions/organization_roles/#admi
After you have [enabled permissions](#restricting-access-enable-permissions) for a data source you can assign query
permissions to users and teams which will allow access to query the data source.
After you have enabled permissions for a data source you can assign query permissions to users and teams which will allow access to query the data source.
**Assign query permission to users and teams:**
1. Navigate to Configuration / Data Sources.
1. Navigate to **Configuration > Data Sources**.
2. Select the data source you want to assign query permissions for.
3.Select the Permissions tab.
4.click on the `Add Permission` button.
5. Select Team/User and find the team/user you want to allow query access and click on the `Save` button.
3.On the Permissions tab, click **Add Permission**.
4.Select **Team** or **User**.
5. Select the entity you want to allow query access and then click **Save**.
If you have enabled permissions for a data source and want to return data source permissions to the default, i.e.
data source can be queried by any user in that organization, you can disable permissions with a click of a button.
Note that all existing permissions created for data source will be deleted.
If you have enabled permissions for a data source and want to return data source permissions to the default, then you can disable permissions with a click of a button.
Note that *all* existing permissions created for the data source will be deleted.
**Disable permissions for a data source:**
1. Navigate to Configuration / Data Sources.
1. Navigate to **Configuration > Data Sources**.
2. Select the data source you want to disable permissions for.
3.Select the Permissions tab and click on the `Disable Permissions` button.
3.On the Permissions tab, click **Disable Permissions**.
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.
The enhanced LDAP integration adds additional functionality on top of the existing [LDAP integration]({{< relref "../auth/ldap.md" >}}).
> Enhanced LDAP integration is only available in Grafana Enterprise.
With the enhanced LDAP integration it's possible to setup synchronization between LDAP groups and teams. This enables LDAP users which are members
of certain LDAP groups to automatically be added/removed as members to certain teams in Grafana. Currently the synchronization will only happen every
time a user logs in, unless Grafana v6.3 (or later) is used with active background synchronization enabled.
With enhanced LDAP integration, you can setup synchronization between LDAP groups and teams. This enables LDAP users that are members
of certain LDAP groups to automatically be added or removed as members to certain teams in Grafana.
Grafana keeps track of all synchronized users in teams and you can see which users have been synchronized from LDAP 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 LDAP 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.
Grafana keeps track of all synchronized users in teams, and you can see which users have been synchronized from LDAP 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 LDAP group membership changes. This mechanism also allows 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.
[Learn more about Team Sync]({{< relref "team-sync.md">}})
[Learn more about team sync.]({{< relref "team-sync.md">}})
<div class="clearfix"></div>
## Active LDAP Synchronization
## Active LDAP synchronization
> Only available in Grafana Enterprise v6.3+
In the open source version of Grafana, user data from LDAP is synchronized only during the login process when authenticating using LDAP.
In the open source version of Grafana, user data from LDAP will be 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 this feature you can configure Grafana to actively sync users with LDAP servers in the background. Only users that have logged into Grafana at least once will be synchronized.
Users with updated role and team membership will need to refresh the page to get access to the new features.
Removed users will be automatically logged out and their account disabled. They will be displayed in the Server Admin / Users page with a `disabled` label. Disabled users will keep their custom permissions on dashboards, folders and datasources so if you add them back in your LDAP database, they will have access to the application with the same custom permissions as before.
Removed users are automatically logged out and their account disabled. These accounts are displayed in the Server Admin > Users page with a `disabled` label. Disabled users keep their custom permissions on dashboards, folders, and data sources, so if you add them back in your LDAP database, they have access to the application with the same custom permissions as before.
```bash
[auth.ldap]
@@ -61,6 +60,4 @@ sync_cron = "0 0 1 * * *" # This is default value (At 1 am every day)
active_sync_enabled=true# enabled by default
```
### Not compatible with Single Bind
Single Bind configuration (as in the [Single Bind Example]({{< relref "../auth/ldap.md#single-bind-example">}})) is not supported with active LDAP synchronization because Grafana needs user information to perform LDAP searches.
Single bind configuration (as in the [Single bind example]({{< relref "../auth/ldap.md#single-bind-example">}})) is not supported with active LDAP synchronization because Grafana needs user information to perform LDAP searches.
@@ -14,7 +14,7 @@ If your license has expired most of Grafana keeps working as normal. Some enterp
> Replace your license as soon as possible. Running Grafana Enterprise with an expired license is unsupported and can lead to unexpected consequences.
## Replacing your license
## Update your license
1. Locate your current `license.jwt` file. In a standard installation it is stored inside Grafana's data directory, which on a typical Linux installation is in `/var/lib/grafana/data`. This location might be overridden in the ini file [Configuration](https://grafana.com/docs/grafana/latest/installation/configuration/)
```
@@ -31,19 +31,19 @@ The configuration file's location may also be overridden by the `GF_ENTERPRISE_L
Your current data source permissions will keep working as expected, but you'll be unable to add new data source permissions until the license has been renewed.
## Reporting
## LDAP authentication
- You're unable to configure new reports or generate previews.
- Scheduled reports are not generated or sent.
* LDAP synchronization is not affected by an expired license.
* Enhanced LDAP debugging is unavailable.
## SAML authentication
SAML is not affected by an expired license.
SAML authentication is not affected by an expired license.
## LDAP authentication
## Reporting
- LDAP synchronization is not affected by an expired license.
- Enhanced LDAP debugging is unavailable.
* You're unable to configure new reports or generate previews.
Any changes you make to a dashboard used in a report are reflected the next time the report is sent. For example, if you change the time range in the dashboard, then the time range in the report changes as well.
With Reports there are a few things to keep in mind, most importantly, any changes you make to the Dashboard used in a report will be reflected in the report. If you change the time range in the Dashboard the time range will be the same in the report as well.
## Requirements
## Setup
* SMTP must be configured for reports to be sent. Refer to [SMTP]({{< relref "../installation/configuration.md#smtp" >}}) in [Configuration]({{< relref "../installation/configuration.md" >}}) for more information.
* The Image Renderer plugin must be installed or the remote rendering service must be set up. Refer to [Image rendering]({{< relref "../administration/image_rendering.md" >}}) for more information.
> SMTP must be configured for reports to be sent
## Create or update a report
Currently only Organization Admins can create reports.
### Rendering
> Reporting requires the [rendering plugin]({{< relref "../administration/image_rendering.md#grafana-image-renderer-plugin" >}}).
Reporting with the built-in image rendering is not supported. We recommend installing the image renderer plugin.
## Usage
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.
* **Name -** Name of the report as you want it to appear in the Reports list.
* **Choose dashboard -** Select the dashboard to generate the report from.
* **Recipients -** Enter the emails of the people orteams that you want to receive the report.
* **Reply to -** (optional) The address that will appear in the **Reply to** field of the email.
* **Custom message -** (optional) Message body in the email with the report.
1.**Preview** the report to make sure it appears as you expect. Update if necessary
1. Select the layout option for generated report: **Portrait** or **Landscape**.
1. Enter scheduling information. Options vary depending on the frequency you select.
Currently only Organisation Admins can create reports. To get to report click on the reports icon in the side menu. This will allow you to list, create and update your reports.
| Dashboard | what dashboard to generate the report from |
| Recipients | emails of the people who will receive this report |
| ReplyTo | your email address, so that the recipient can respond |
| Message | message body in the email with the report |
| Schedule | how often do you want the report generated and sent |
When Grafana generates a report, it will render each panel separately and then put them together in a PDF file. You can configure the per-panel rendering request timeout and the maximum number of concurrent calls to the rendering service. These options are available in the [configuration]({{< relref "../installation/configuration.md">}}) file.
## Debugging errors
```ini
[reporting]
# Set timeout for each panel rendering request
rendering_timeout=10s
# Set maximum number of concurrent calls to the rendering service
concurrent_render_limit=4
```
If you have problems with the reporting feature you can enable debug logging by switching the logger to debug (`filters = report:debug`). Learn more about making configuration changes [here]({{< relref "../installation/configuration.md#filters" >}}).
## Troubleshoot reporting
To troubleshoot and get more log information, enable debug logging in the configuration file. Refer to [Configuration]({{< relref "../installation/configuration.md#filters" >}}) for more information.
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.
## Supported SAML
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 the subset of features needed to provide a smooth authentication experience into Grafana.
> Should you encounter any problems with our implementation, please don't hesitate to contact us.
> Only available in Grafana Enterprise v6.3+. If you encounter any problems with our implementation, please don't hesitate to contact us.
Grafana supports:
## Supported SAML
* From the Service Provider (SP) to the Identity Provider (IdP)
Grafana supports the following SAML 2.0 bindings:
-`HTTP-POST` binding
-`HTTP-Redirect` binding
* 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)
* From the Identity Provider (IdP) to the Service Provider (SP):
-`HTTP-POST` binding
-`HTTP-POST` binding
In terms of security:
* Grafana supports signed and encrypted assertions.
* Grafana does not support signed or encrypted requests.
*In terms of security, we currently support signed and encrypted Assertions. However, signed or encrypted requests are not supported.
*In terms of initiation, only SP-initiated requests are supported. There's no support for IdP-initiated request.
In terms of initiation:
* Grafana supports SP-initiated requests.
*Grafana does not support IdP-initiated request.
## Set up SAML authentication
To use the SAML integration, you need to enable SAML in the [main config file]({{< relref "../installation/configuration.md" >}}).
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 "../installation/configuration.md#configure-with-environment-variables" >}}).
```bash
[auth.saml]
# Defaults to false. If true, the feature is enabled
| `enabled` | No | Whether SAML authentication is allowed | `false` |
| `certificate` or `certificate_path` | Yes | Base64-encoded string or Path for the SP X.509 certificate | |
| `private_key` or `private_key_path` | Yes | Base64-encoded string or Path for the SP private key | |
| `idp_metadata`, `idp_metadata_path`, or `idp_metadata_url` | Yes | Base64-encoded string, Path or URL for the IdP SAML metadata XML | |
| `max_issue_delay` | No | Duration, since the IdP issued a response and the SP is allowed to process it | `90s` |
| `metadata_valid_duration` | No | Duration, for how long the SP metadata is valid | `48h` |
| `assertion_attribute_name` | No | Friendly name or name of the attribute within the SAML assertion to use as the user name | `displayName` |
| `assertion_attribute_login` | No | Friendly name or name of the attribute within the SAML assertion to use as the user login handle | `mail` |
| `assertion_attribute_email` | No | Friendly name or name of the attribute within the SAML assertion to use as the user email | `mail` |
# Base64-encoded public X.509 certificate. Used to sign requests to the IdP
certificate=
### Enable SAML authentication
# Path to the public X.509 certificate. Used to sign requests to the IdP
certificate_path=
To use the SAML integration, in the `auth.saml` section of in the Grafana custom configuration file, set `enabled` to `true`.
# Base64-encoded private key. Used to decrypt assertions from the IdP
private_key=
Refer to [Configuration]({{< relref "../installation/configuration.md" >}}) for more information about configuring Grafana.
# Path to the private key. Used to decrypt assertions from the IdP
private_key_path=
### Certificate and private key
# Base64-encoded IdP SAML metadata XML. Used to verify and obtain binding locations from the IdP
idp_metadata=
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.
# Path to the SAML metadata XML. Used to verify and obtain binding locations from the IdP
idp_metadata_path=
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 attempt to read the file from the file system.
# URL to fetch SAML IdP metadata. Used to verify and obtain binding locations from the IdP
idp_metadata_url=
You can only use one form of each configuration option. Using multiple forms, such as both `certificate` and `certificate_path`, results in an error.
# Duration, since the IdP issued a response and the SP is allowed to process it. Defaults to 90 seconds
max_issue_delay=
### IdP metadata
# Duration, for how long the SP's metadata should be valid. Defaults to 48 hours
metadata_valid_duration=
You also need to define the public part of the IdP for message verification. The SAML IdP metadata XML defines where and how Grafana exchanges user information.
# Friendly name or name of the attribute within the SAML assertion to use as the user's name
assertion_attribute_name= displayName
Grafana supports three ways of specifying the IdP metadata.
* Without a suffix `idp_metadata`, Grafana assumes base64-encoded XML file contents.
* With the `_path` suffix, Grafana assumes a file path and attempts to read the file from the file system.
* With the `_url` suffix, Grafana assumes a URL and attempts to load the metadata from the given location.
# Friendly name or name of the attribute within the SAML assertion to use as the user's login handle
assertion_attribute_login= mail
### Maximum issue delay
# Friendly name or name of the attribute within the SAML assertion to use as the user's email
assertion_attribute_email= mail
```
Prevents SAML response replay attacks and internal clock skews between the SP (Grafana) and the IdP. You can set a maximum amount of time between the IdP issuing a response and the SP (Grafana) processing it.
Important to note:
The configuration options is specified as a duration, such as `max_issue_delay = 90s` or `max_issue_delay = 1h`.
- Like any other Grafana configuration, use of [environment variables for these options is supported]({{< relref "../installation/configuration.md#using-environment-variables" >}})
- Only one form of configuration option is required. Using multiple forms, e.g. both `certificate` and `certificate_path` will result in an error
### Metadata valid duration
## Grafana configuration
SP metadata is likely to expire at some point, perhaps due to a certificate rotation or change of location binding. Grafana allows you to specify for how long the metadata should be valid. Leveraging the `validUntil` field, you can tell consumers until when your metadata is going to be valid. The duration is computed by adding the duration to the current time.
Example working configuration:
The configuration option is specified as a duration, such as `metadata_valid_duration = 48h`.
### Identity provider (IdP) registration
For the SAML integration to work correctly, you need to make the IdP aware of the SP.
The integration provides two key endpoints as part of Grafana:
* The `/saml/metadata` endpoint, which contains the SP metadata. You can either download and upload it manually, or youmake the IdP request it directly from the endpoint. Some providers name it Identifier or Entity ID.
* The `/saml/acs` endpoint, which is intended to receive the ACS (Assertion Customer Service) callback. Some providers name it SSO URL or Reply URL.
### Assertion mapping
During the SAML SSO authentication flow, Grafana receives the ACS callback. The callback contains all the relevant information of the user under authentication embedded in the SAML response. Grafana parses the response to create (or update) the user within its internal database.
For Grafana to map the user information, it looks at the individual attributes within the assertion. You can think of these attributes as Key/Value pairs (although, they contain more information than that).
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.
An example is `assertion_attribute_name = "givenName"` where Grafana looks within the assertion for an attribute with a friendly name or name of `givenName`. Both, the friendly name (e.g. `givenName`) or the name (e.g. `urn:oid:2.5.4.42`) can be used interchangeably as the value for the configuration option.
## Example SAML configuration
```bash
[auth.saml]
@@ -105,67 +124,9 @@ assertion_attribute_login = mail
| `enabled` | No | Whenever SAML authentication is allowed | `false` |
| `certificate` or `certificate_path` | Yes | Base64-encoded string or Path for the SP X.509 certificate | |
| `private_key` or `private_key_path` | Yes | Base64-encoded string or Path for the SP private key | |
| `idp_metadata` or `idp_metadata_path` or `idp_metadata_url` | Yes | Base64-encoded string, Path or URL for the IdP SAML metadata XML | |
| `max_issue_delay` | No | Duration, since the IdP issued a response and the SP is allowed to process it | `90s` |
| `metadata_valid_duration` | No | Duration, for how long the SP's metadata should be valid | `48h` |
| `assertion_attribute_name` | No | Friendly name or name of the attribute within the SAML assertion to use as the user's name | `displayName` |
| `assertion_attribute_login` | No | Friendly name or name of the attribute within the SAML assertion to use as the user's login handle | `mail` |
| `assertion_attribute_email` | No | Friendly name or name of the attribute within the SAML assertion to use as the user's email | `mail` |
### Cert 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.
Grafana supports two ways of specifying both the `certificate` and `private_key`. Without a suffix (e.g. `certificate=`), the configuration assumes you've supplied the base64-encoded file contents. However, if specified with the `_path` suffix (e.g. `certificate_path=`) Grafana will treat it as a file path and attempt to read the file from the file system.
### IdP metadata
Expanding on the above, we'll also need the public part from our IdP for message verification. The SAML IdP metadata XML tells us where and how we should exchange the user information.
Currently, we support three ways of specifying the IdP metadata. Without a suffix `idp_metadata=` Grafana assumes base64-encoded XML file contents, with the `_path` suffix assumes a file path and attempts to read the file from the file system and with the `_url` suffix assumes an URL and attempts to load the metadata from the given location.
### Max issue delay
Prevention of SAML response replay attacks and internal clock skews between the SP (Grafana), and the IdP is covered. You can set a maximum amount of time between the IdP issuing a response and the SP (Grafana) processing it.
The configuration options is specified as a duration e.g. `max_issue_delay = 90s` or `max_issue_delay = 1h`
### Metadata valid duration
As an SP, our metadata is likely to expire at some point, e.g. due to a certificate rotation or change of location binding. Grafana allows you to specify for how long the metadata should be valid. Leveraging the standard's `validUntil` field, you can tell consumers until when your metadata is going to be valid. The duration is computed by adding the duration to the current time.
The configuration option is specified as a duration e.g. `metadata_valid_duration = 48h`
## Identity provider (IdP) registration
For the SAML integration to work correctly, you need to make the IdP aware of the SP.
The integration provides two key endpoints as part of Grafana:
- The `/saml/metadata` endpoint. Which contains the SP's metadata. You can either download and upload it manually or make the IdP request it directly from the endpoint. Some providers name it Identifier or Entity ID.
- The `/saml/acs` endpoint. Which is intended to receive the ACS (Assertion Customer Service) callback. Some providers name it SSO URL or Reply URL.
## Assertion mapping
During the SAML SSO authentication flow, we receive the ACS (Assertion Customer Service) callback. The callback contains all the relevant information of the user under authentication embedded in the SAML response. Grafana parses the response to create (or update) the user within its internal database.
For Grafana to map the user information, it looks at the individual attributes within the assertion. You can think of these attributes as Key/Value pairs (although, they contain more information than that).
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.
An example is `assertion_attribute_name = "givenName"` where Grafana looks within the assertion for an attribute with a friendly name or name of `givenName`. Both, the friendly name (e.g. `givenName`) or the name (e.g. `urn:oid:2.5.4.42`) can be used interchangeably as the value for the configuration option.
## Troubleshooting
To troubleshoot and get more log info enable saml debug logging in the [main config file]({{< relref "../installation/configuration.md" >}}).
To troubleshoot and get more log information, enable SAML debug logging in the configuration file. Refer to [Configuration]({{< relref "../installation/configuration.md#filters" >}}) for more information.
With the Team Sync it's possible to setup synchronization between your auth providers teams and teams in Grafana. This enables LDAP or GitHub OAuth users which are members
of certain teams/groups to automatically be added/removed as members to certain teams in Grafana. Currently the synchronization will only happen every
time a user logs in, unless LDAP is used together with active background synchronization that was added in Grafana 6.3.
Team sync lets you setup synchronization between your auth providers teams and teams in Grafana. This enables LDAP or GitHub OAuth users who are members
of certain teams or groups to automatically be added or removed as members of certain teams in Grafana.
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 LDAP group membership (for example) 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.
> Only available in Grafana Enterprise.
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.
> Currently the synchronization only happens when a user logs in, unless LDAP is used with the active background synchronization that was added in Grafana 6.3.
<div class="clearfix"></div>
### Enable synchronization for a team
## Synchronize a Grafana team with an external group
If you have already grouped some users into a team, then you can synchronize that team with an external group.
Grafana Enterprise has white labeling options in the `grafana.ini` file (can also be set via ENV variables).
Grafana Enterprise has whitelabeling options in the `grafana.ini` file. As with all configuration options, you can also be set set them with environment variables.
You can change the following elements:
- Application Title
- Login Background
- Login Logo
- Application title
- Login background
- Login logo
- Side menu top logo
- Footer & Help menu links
- Footer and help menu links
- Fav icon (shown in browser tab)
> You will have to host your logo and other images used by the white labeling feature separately.
> You will have to host your logo and other images used by the white labeling feature separately. Make sure Grafana can access the URL where the assets are stored.
The configuration file in Grafana Enterprise contains the following options. Each option is defined in the file. For more information about configuring Grafana, refer to [Configuration]({{< relref "../installation/configuration.md">}}).
```ini
# Enterprise only
@@ -50,21 +54,24 @@ You can change the following elements:
# Set to complete URL to override apple/ios icon
;apple_touch_icon =
# Below is an example for how to replace the default footer & help links with 2 custom links
@@ -18,7 +18,7 @@ A *dashboard* is a set of one or more panels organized and arranged into one or
1. Zoom out time range
2. Time picker dropdown. Here you can access relative time range options, auto refresh options and set custom absolute time ranges.
3. Manual refresh button. Will cause all panels to refresh (fetch new data).
4. Dashboard panel. You edit panels by clicking the panel title.
4. Dashboard panel. Click the panel title to edit panels.
5. Graph legend. You can change series colors, y-axis and series visibility directly from the legend.
## Dashboard header
@@ -30,7 +30,7 @@ Click the new Dashboard link on the right side of the Dashboard picker. You now
The image above shows you the top header for a Dashboard.
1. Side menubar toggle: This toggles the side menu, allowing you to focus on the data presented in the dashboard. The side menu provides access to features unrelated to a Dashboard such as Users, Organizations, and Data Sources.
2. Dashboard dropdown: This dropdown shows you which Dashboard you are currently viewing, and allows you to easily switch to a new Dashboard. From here you can also create a new Dashboard or folder, Import existing Dashboards, and manage Dashboard playlists.
2. Dashboard dropdown: This dropdown shows you which Dashboard you are currently viewing, and allows you to easily switch to a new Dashboard. From here you can also create a new Dashboard or folder, import existing Dashboards, and manage Dashboard playlists.
3. Add Panel: Adds a new panel to the current Dashboard
4. Star Dashboard: Star (or unstar) the current Dashboard. Starred Dashboards will show up on your own Home Dashboard by default, and are a convenient way to mark Dashboards that you're interested in.
5. Share Dashboard: Share the current dashboard by creating a link or create a static Snapshot of it. Make sure the Dashboard is saved before sharing.
Before you create your first dashboard, you need to add your data source. Following are the list of instructions to create one.
> Only users with the Admin role can add data sources.
1. Move your cursor to the cog on the side menu which will show you the configuration menu. If the side menu is not visible click the Grafana icon in the upper left corner. Click on **Configuration** > **Data Sources** in the side menu and you'll be taken to the data sources page
where you can add and edit data sources. You can also click the cog.
1. In the **Type**, select the type of data source. See [Supported data sources]({{< relref "../../features/datasources/#supported-data-sources/" >}}) for more information and how to configure your data source settings.
### Templating with Variables for the Azure Monitor Service
Instead of hard-coding things like server, application and sensor name in you metric queries you can use variables in their place. Variables are shown as dropdown select boxes at the top of the dashboard. These dropdowns makes it easy to change the data being displayed in your dashboard.
Instead of hard-coding things like server, application and sensor name in your metric queries you can use variables in their place. Variables are shown as dropdown select boxes at the top of the dashboard. These dropdowns make it easy to change the data being displayed in your dashboard.
Note that the Azure Monitor service does not support multiple values yet. If you want to visualize multiple time series (for example, metrics for server1 and server2) then you have to add multiple queries to able to view them on the same graph or in the same table.
@@ -274,6 +274,45 @@ There are also some Grafana variables that can be used in Azure Log Analytics qu
-`$__interval` - Grafana calculates the minimum time grain that can be used to group by time in queries. More details on how it works [here]({{< relref "../../reference/templating.md#interval-variables" >}}). It returns a time grain like `5m` or `1h` that can be used in the bin function. E.g. `summarize count() by bin(TimeGenerated, $__interval)`
### Templating with Variables for Azure Log Analytics
Any Log Analytics query that returns a list of values can be used in the `Query` field in the Variable edit view. There is also one Grafana function for Log Analytics that returns a list of workspaces.
Refer to the [Variables]({{< relref "../../reference/templating.md" >}}) documentation for an introduction to the templating feature and the different
| _workspaces()_ | Returns a list of workspaces for the default subscription. |
| _workspaces(12345678-aaaa-bbbb-cccc-123456789aaa)_ | Returns a list of workspaces for the specified subscription (the parameter can be quoted or unquoted). |
| _subscriptions()_ | Returns a list of Azure subscriptions |
| _workspaces()_ | Returns a list of workspaces for default subscription |
| _workspaces("12345678-aaaa-bbbb-cccc-123456789aaa")_ | Returns a list of workspaces for a specified subscription |
| _workspaces("$subscription")_ | With template variable for the subscription parameter |
| _workspace("myWorkspace").Heartbeat \| distinct Computer_ | Returns a list of Virtual Machines |
| _workspace("$workspace").Heartbeat \| distinct Computer_ | Returns a list of Virtual Machines with template variable |
| _workspace("$workspace").Perf \| distinct ObjectName_ | Returns a list of objects from the Perf table |
| _workspace("$workspace").Perf \| where ObjectName == "$object" \| distinct CounterName_ | Returns a list of metric names from the Perf table |
<!-- prettier-ignore-end -->
Example of a time series query using variables:
```
Perf
| where ObjectName == "$object" and CounterName == "$metric"
| where TimeGenerated >= $__timeFrom() and TimeGenerated <= $__timeTo()
| where $__contains(Computer, $computer)
| summarize avg(CounterValue) by bin(TimeGenerated, $__interval), Computer
| order by TimeGenerated asc
```
### Azure Log Analytics Alerting
Not implemented yet.
@@ -293,3 +332,34 @@ There are some important caveats to remember:
- Currently, four default dashboard variables are supported: `$__timeFilter()`, `$__from`, `$__to`, and `$__interval`. If you're searching in timestamped data, replace the beginning of your where clause to `where $__timeFilter()`. Dashboard changes by time region are handled as you'd expect, as long as you leave the name of the `timestamp` column alone. Likewise, `$__interval` will automatically change based on the dashboard's time region _and_ the width of the chart being displayed. Use it in bins, so `bin(timestamp,$__interval)` changes into something like `bin(timestamp,1s)`. Use `$__from` and `$__to` if you just want the formatted dates to be inserted.
- Templated dashboard variables are not yet supported! They will come in a future version.
## Configure the data source with provisioning
It's now possible to configure data sources using config files with Grafana's provisioning system. You can read more about how it works and all the settings you can set for data sources on the [provisioning docs page]({{< relref "../../administration/provisioning/#datasources" >}})
Here are some provisioning examples for this data source.
@@ -43,7 +43,7 @@ server is running on AWS you can use IAM Roles and authentication will be handle
See the AWS documentation on [IAM Roles](http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/iam-roles-for-amazon-ec2.html)
> NOTE: AWS Role Switching as described [here](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-cli.html) it not supported at the moment.
> NOTE: AWS Role Switching as described [here](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-cli.html) is not supported at the moment.
## IAM Policies
@@ -62,6 +62,8 @@ Here is a minimal policy example:
"Effect": "Allow",
"Action": [
"cloudwatch:DescribeAlarmsForMetric",
"cloudwatch:DescribeAlarmHistory",
"cloudwatch:DescribeAlarms",
"cloudwatch:ListMetrics",
"cloudwatch:GetMetricStatistics",
"cloudwatch:GetMetricData"
@@ -180,7 +182,7 @@ To import the pre-configured dashboards, go to the configuration page of your Cl
## Templated queries
Instead of hard-coding things like server, application and sensor name in you metric queries you can use variables in their place. Variables are shown as dropdown select boxes at the top of the dashboard. These dropdowns makes it easy to change the data being displayed in your dashboard.
Instead of hard-coding things like server, application and sensor name in you metric queries you can use variables in their place. Variables are shown as dropdown select boxes at the top of the dashboard. These dropdowns make it easy to change the data being displayed in your dashboard.
See the [Templating]({{< relref "../../reference/templating.md" >}}) documentation for an introduction to the templating feature and the different types of template variables.
Grafana can visualize, explore, and alert on data from many different databases and cloud services. Each database or service type is accessed from a *data source*.
Grafana can visualize, explore, and alert on data from many different databases and cloud services. Each database or service type is accessed from a *data source*. Before you can create visualizations in Grafana, you must [add a data source]({{< relref "add-a-data-source.md" >}}).
Each data source has a specific query editor that is customized for the features and capabilities that the particular data source exposes. The query language and capabilities of each data source are obviously very different. You can combine data from multiple data sources into a single dashboard, but each panel is connected to a specific data source that belongs to a particular organization.
@@ -116,8 +116,8 @@ Some metric aggregations are called Pipeline aggregations, for example, *Moving
## Templating
Instead of hard-coding things like server, application and sensor name in you metric queries you can use variables in their place.
Variables are shown as dropdown select boxes at the top of the dashboard. These dropdowns makes it easy to change the data
Instead of hard-coding things like server, application and sensor name in your metric queries you can use variables in their place.
Variables are shown as dropdown select boxes at the top of the dashboard. These dropdowns make it easy to change the data
being displayed in your dashboard.
Check out the [Templating]({{< relref "../../reference/templating.md" >}}) documentation for an introduction to the templating feature and the different
@@ -172,7 +172,7 @@ Example dashboard:
## Annotations
[Annotations]({{< relref "../../reference/annotations.md" >}}) allows you to overlay rich event information on top of graphs. You add annotation
[Annotations]({{< relref "../../reference/annotations.md" >}}) allow you to overlay rich event information on top of graphs. You add annotation
queries via the Dashboard menu / Annotations view. Grafana can query any Elasticsearch index
@@ -87,8 +87,8 @@ this consolidation is done using `avg` function. You can control how Graphite co
## Templating
Instead of hard-coding things like server, application and sensor name in you metric queries you can use variables in their place.
Variables are shown as dropdown select boxes at the top of the dashboard. These dropdowns makes it easy to change the data
Instead of hard-coding things like server, application and sensor name in your metric queries you can use variables in their place.
Variables are shown as dropdown select boxes at the top of the dashboard. These dropdowns make it easy to change the data
being displayed in your dashboard.
Check out the [Templating]({{< relref "../../reference/templating.md" >}}) documentation for an introduction to the templating feature and the different
You can use a variable in a metric node path or as a parameter to a function.
@@ -163,12 +162,16 @@ Check out the [Advanced Formatting Options section in the Variables]({{< relref
## Annotations
[Annotations]({{< relref "../../reference/annotations.md" >}}) allows you to overlay rich event information on top of graphs. You add annotation
[Annotations]({{< relref "../../reference/annotations.md" >}}) allow you to overlay rich event information on top of graphs. You add annotation
queries via the Dashboard menu / Annotations view.
Graphite supports two ways to query annotations. A regular metric query, for this you use the `Graphite query` textbox. A Graphite events query, use the `Graphite event tags` textbox,
specify a tag or wildcard (leave empty should also work)
## Getting Grafana metrics into Graphite
Grafana exposes metrics for Graphite on the `/metrics` endpoint. For detailed instructions, refer to [Internal Grafana metrics]({{< relref "../../administration/metrics.md">}}).
## Configure the data source with provisioning
It's now possible to configure data sources using config files with Grafana's provisioning system. You can read more about how it works and all the settings you can set for data sources on the [provisioning docs page]({{< relref "../../administration/provisioning/#datasources" >}})
@@ -140,8 +140,8 @@ To add a filter click the plus icon to the right of the `Measurements/Fields` bu
## Templating
Instead of hard-coding things like server, application and sensor name in you metric queries you can use variables in their place.
Variables are shown as dropdown select boxes at the top of the dashboard. These dropdowns makes it easy to change the data
Instead of hard-coding things like server, application and sensor name in your metric queries you can use variables in their place.
Variables are shown as dropdown select boxes at the top of the dashboard. These dropdowns make it easy to change the data
being displayed in your dashboard.
Check out the [Templating]({{< relref "../../reference/templating.md" >}}) documentation for an introduction to the templating feature and the different
@@ -39,14 +39,16 @@ Just add it as a data source and you are ready to query your log data in [Explor
### Derived fields
The Derived Fields configuration allows you to:
* Add fields parsed from the log message.
* Add a link that uses the value of the field.
You can use this functionality to link to your tracing backend directly from your logs, or link to a user profile page if a userId is present in the log line. These links will be shown in the [log details](/features/explore/#labels-and-parsed-fields).
You can use this functionality to link to your tracing backend directly from your logs, or link to a user profile page if a userId is present in the log line. These links appear in the [log details](/features/explore/#labels-and-parsed-fields).
{{< docs-imagebox img="/img/docs/v65/loki_derived_fields.png" class="docs-image--no-shadow" caption="Screenshot of the derived fields configuration" >}}
Each derived field consists of:
- **Name:** Shown in the log details as a label.
- **Regex:** A Regex pattern that runs on the log message and captures part of it to as the value of the new field. Can only contain capture a single group.
- **Regex:** A Regex pattern that runs on the log message and captures part of it as the value of the new field. Can only contain a single capture group.
- **URL**: A URL template used to construct a link next to the field value in log details. Use special `${__value.raw}` value in your template to interpolate the real field value into your URL template.
You can use a debug section to see what your fields extract and how the URL is interpolated. Click **Show example log message** to show the text area where you can enter a log message.
@@ -69,7 +71,7 @@ Once the result is returned, the log panel shows a list of log rows and a bar ch
The [same rules that apply for Prometheus Label Selectors](https://prometheus.io/docs/prometheus/latest/querying/basics/#instant-vector-selectors) apply for Loki Log Stream Selectors.
Another way to add a label selector, is in the table section, clicking on the**Filter** button beside a label will add the label to the query expression. This even works for multiple queries and will the label selector to each query.
Another way to add a label selector is in the table section. Click **Filter** beside a label to add the label to the query expression. This even works for multiple queries and will add the label selector to each query.
### Search Expression
@@ -125,7 +127,7 @@ The following filter types are currently supported:
## Live tailing
Loki supports Live tailing which displays logs in real-time. This feature is supported in [Explore]({{< relref "../explore/#loki-specific-features" >}}) and in dashboards with a Live toggle in the query editor.
Loki supports Live tailing which displays logs in real-time. This feature is supported in [Explore]({{< relref "../explore/#loki-specific-features" >}}).
Note that Live Tailing relies on two Websocket connections: one between the browser and the Grafana server, and another between the Grafana server and the Loki server. If you run any reverse proxies, please configure them accordingly.
@@ -187,8 +189,15 @@ datasources:
jsonData:
maxLines:1000
derivedFields:
- datasourceName:Jaeger
# Field with internal link pointing to datasource in Grafana
- datasourceUid:my_jaeger_uid
matcherRegex:"traceID=(\\w+)"
name:TraceID
# url will be interpreted as query for the datasource
You find the MSSQL query editor in the metrics tab in Graph, Singlestat or Table panel's edit mode. You enter edit mode by clicking the
You will find the MSSQL query editor in the metrics tab in Graph, Singlestat or Table panel's edit mode. You enter edit mode by clicking the
panel title, then edit. The editor allows you to define a SQL query to select data to be visualized.
1. Select *Format as*`Time series` (for use in Graph or Singlestat panel's among others) or `Table` (for use in Table panel among others).
@@ -97,24 +97,24 @@ To simplify syntax and to allow for dynamic parts, like date range filters, the
Macro example | Description
------------ | -------------
*$__time(dateColumn)* | Will be replaced by an expression to rename the column to *time*. For example, *dateColumn as time*
*$__timeEpoch(dateColumn)* | Will be replaced by an expression to convert a DATETIME column type to Unix timestamp and rename it to *time*. <br/>For example, *DATEDIFF(second, '1970-01-01', dateColumn) AS time*
*$__timeFilter(dateColumn)* | Will be replaced by a time range filter using the specified column name. <br/>For example, *dateColumn BETWEEN '2017-04-21T05:01:17Z' AND '2017-04-21T05:06:17Z'*
*$__timeFrom()* | Will be replaced by the start of the currently active time selection. For example, *'2017-04-21T05:01:17Z'*
*$__timeTo()* | Will be replaced by the end of the currently active time selection. For example, *'2017-04-21T05:06:17Z'*
*$__timeGroup(dateColumn,'5m'[, fillvalue])* | Will be replaced by an expression usable in GROUP BY clause. Providing a *fillValue* of *NULL* or *floating value* will automatically fill empty series in timerange with that value. <br/>For example, *CAST(ROUND(DATEDIFF(second, '1970-01-01', time_column)/300.0, 0) as bigint)\*300*.
*$__timeGroup(dateColumn,'5m', 0)* | Same as above but with a fill parameter so missing points in that series will be added by grafana and 0 will be used as value.
*$__timeGroup(dateColumn,'5m', NULL)* | Same as above but NULL will be used as value for missing points.
*$__timeGroup(dateColumn,'5m', previous)* | Same as above but the previous value in that series will be used as fill value if no value has been seen yet NULL will be used (only available in Grafana 5.3+).
*$__timeGroupAlias(dateColumn,'5m')* | Will be replaced identical to $__timeGroup but with an added column alias (only available in Grafana 5.3+).
*$__unixEpochFilter(dateColumn)* | Will be replaced by a time range filter using the specified column name with times represented as Unix timestamp. For example, *dateColumn > 1494410783 AND dateColumn < 1494497183*
*$__unixEpochFrom()* | Will be replaced by the start of the currently active time selection as Unix timestamp. For example, *1494410783*
*$__unixEpochTo()* | Will be replaced by the end of the currently active time selection as Unix timestamp. For example, *1494497183*
*$__unixEpochNanoFilter(dateColumn)* | Will be replaced by a time range filter using the specified column name with times represented as nanosecond timestamp. For example, *dateColumn > 1494410783152415214 AND dateColumn < 1494497183142514872*
*$__unixEpochNanoFrom()* | Will be replaced by the start of the currently active time selection as nanosecond timestamp. For example, *1494410783152415214*
*$__unixEpochNanoTo()* | Will be replaced by the end of the currently active time selection as nanosecond timestamp. For example, *1494497183142514872*
*$__unixEpochGroup(dateColumn,'5m', [fillmode])* | Same as $__timeGroup but for times stored as Unix timestamp (only available in Grafana 5.3+).
*$__unixEpochGroupAlias(dateColumn,'5m', [fillmode])* | Same as above but also adds a column alias (only available in Grafana 5.3+).
*`$__time(dateColumn)`* | Will be replaced by an expression to rename the column to *time*. For example, *dateColumn as time*
*`$__timeEpoch(dateColumn)`* | Will be replaced by an expression to convert a DATETIME column type to Unix timestamp and rename it to *time*. <br/>For example, *DATEDIFF(second, '1970-01-01', dateColumn) AS time*
*`$__timeFilter(dateColumn)`* | Will be replaced by a time range filter using the specified column name. <br/>For example, *dateColumn BETWEEN '2017-04-21T05:01:17Z' AND '2017-04-21T05:06:17Z'*
*`$__timeFrom()`* | Will be replaced by the start of the currently active time selection. For example, *'2017-04-21T05:01:17Z'*
*`$__timeTo()`* | Will be replaced by the end of the currently active time selection. For example, *'2017-04-21T05:06:17Z'*
*`$__timeGroup(dateColumn,'5m'[, fillvalue])`* | Will be replaced by an expression usable in GROUP BY clause. Providing a *fillValue* of *NULL* or *floating value* will automatically fill empty series in timerange with that value. <br/>For example, *CAST(ROUND(DATEDIFF(second, '1970-01-01', time_column)/300.0, 0) as bigint)\*300*.
*`$__timeGroup(dateColumn,'5m', 0)`* | Same as above but with a fill parameter so missing points in that series will be added by grafana and 0 will be used as value.
*`$__timeGroup(dateColumn,'5m', NULL)`* | Same as above but NULL will be used as value for missing points.
*`$__timeGroup(dateColumn,'5m', previous)`* | Same as above but the previous value in that series will be used as fill value if no value has been seen yet NULL will be used (only available in Grafana 5.3+).
*`$__timeGroupAlias(dateColumn,'5m')`* | Will be replaced identical to $__timeGroup but with an added column alias (only available in Grafana 5.3+).
*`$__unixEpochFilter(dateColumn)`* | Will be replaced by a time range filter using the specified column name with times represented as Unix timestamp. For example, *dateColumn > 1494410783 AND dateColumn < 1494497183*
*`$__unixEpochFrom()`* | Will be replaced by the start of the currently active time selection as Unix timestamp. For example, *1494410783*
*`$__unixEpochTo()`* | Will be replaced by the end of the currently active time selection as Unix timestamp. For example, *1494497183*
*`$__unixEpochNanoFilter(dateColumn)`* | Will be replaced by a time range filter using the specified column name with times represented as nanosecond timestamp. For example, *dateColumn > 1494410783152415214 AND dateColumn < 1494497183142514872*
*`$__unixEpochNanoFrom()`* | Will be replaced by the start of the currently active time selection as nanosecond timestamp. For example, *1494410783152415214*
*`$__unixEpochNanoTo()`* | Will be replaced by the end of the currently active time selection as nanosecond timestamp. For example, *1494497183142514872*
*`$__unixEpochGroup(dateColumn,'5m', [fillmode])`* | Same as $__timeGroup but for times stored as Unix timestamp (only available in Grafana 5.3+).
*`$__unixEpochGroupAlias(dateColumn,'5m', [fillmode])`* | Same as above but also adds a column alias (only available in Grafana 5.3+).
We plan to add many more macros. If you have suggestions for what macros you would like to see, please [open an issue](https://github.com/grafana/grafana) in our GitHub repo.
@@ -293,12 +293,12 @@ GROUP BY
ORDERBY1
```
When above query are used in a graph panel the result will be two series named `Metric A` and `Metric B` with a sum of `valueTwo` plotted over `time`.
When the above query is used in a graph panel, the result is two series named `Metric A` and `Metric B` with a sum of `valueTwo` plotted over `time`.
Any series lacking a value in a 3 minute window will have a value of zero which you'll see rendered in the graph to the right.
## Templating
Instead of hard-coding things like server, application and sensor name in you metric queries you can use variables in their place. Variables are shown as dropdown select boxes at the top of the dashboard. These dropdowns makes it easy to change the data being displayed in your dashboard.
Instead of hard-coding things like server, application and sensor name in your metric queries you can use variables in their place. Variables are shown as dropdown select boxes at the top of the dashboard. These dropdowns make it easy to change the data being displayed in your dashboard.
Check out the [Templating]({{< relref "../../reference/templating.md" >}}) documentation for an introduction to the templating feature and the different types of template variables.
@@ -319,7 +319,7 @@ A query can return multiple columns and Grafana will automatically create a list
Another option is a query that can create a key/value variable. The query should return two columns that are named `__text` and `__value`. The `__text` column value should be unique (if it is not unique then the first value is used). The options in the dropdown will have a text and value that allows you to have a friendly name as text and an id as the value. An example query with `hostname` as the text and `id` as the value:
Another option is a query that can create a key/value variable. The query should return two columns that are named `__text` and `__value`. The `__text` column value should be unique (if it is not unique then the first value is used). The options in the dropdown will have a text and value that allow you to have a friendly name as text and an id as the value. An example query with `hostname` as the text and `id` as the value:
```sql
SELECThostname__text,id__valueFROMhost
@@ -374,14 +374,14 @@ Read more about variable formatting options in the [Variables]({{< relref "../..
## Annotations
[Annotations]({{< relref "../../reference/annotations.md" >}}) allows you to overlay rich event information on top of graphs. You add annotation queries via the Dashboard menu / Annotations view.
[Annotations]({{< relref "../../reference/annotations.md" >}}) allow you to overlay rich event information on top of graphs. You add annotation queries via the Dashboard menu / Annotations view.
**Columns:**
Name | Description
------------ | -------------
time | The name of the date/time field. Could be a column with a native SQL date/time data type or epoch value.
timeend | Optional name of the end date/time field. Could be a column with a native SQL date/time data type or epoch value.
timeend | Optional name of the end date/time field. Could be a column with a native SQL date/time data type or epoch value. (Grafana v6.6+)
text | Event description field.
tags | Optional field name to use for event tags as a comma separated string.
@@ -411,6 +411,23 @@ WHERE
ORDERBY1
```
**Example region query using time and timeend columns with epoch values:**
> Only available in Grafana v6.6+.
```sql
SELECT
time_secastime,
time_end_secastimeend,
descriptionas[text],
tags
FROM
[events]
WHERE
$__unixEpochFilter(time_sec)
ORDERBY1
```
**Example query using time column of native SQL date/time data type:**
```sql
@@ -427,7 +444,7 @@ ORDER BY 1
## Stored procedure support
Stored procedures have been verified to work. However, please note that we haven't done anything special to support this why there may exist edge cases where it won't work as you would expect.
Stored procedures have been verified to work. However, please note that we haven't done anything special to support this, so there might be edge cases where it won't work as you would expect.
Stored procedures should be supported in table, time series and annotation queries as long as you use the same naming of columns and return data in the same format as describe above under respective section.
Please note that any macro function will not work inside a stored procedure.
@@ -474,7 +491,7 @@ We can define a stored procedure that will return all data we need to render 4 s
In this case the stored procedure accepts two parameters `@from` and `@to` of `int` data types which should be a timerange (from-to) in epoch format
which will be used to filter the data to return from the stored procedure.
We're mimicking the `$__timeGroup(time, '5m')` in the select and group by expressions and that's why there's a lot of lengthy expressions needed -
We're mimicking the `$__timeGroup(time, '5m')` in the select and group by expressions, and that's why there are a lot of lengthy expressions needed -
these could be extracted to MSSQL functions, if wanted.
> Starting from Grafana v5.1 you can name the time column *time* in addition to earlier supported *time_sec*. Usage of *time_sec* will eventually be deprecated.
Grafana ships with a built-in MySQL data source plugin that allow you to query any visualize
Grafana ships with a built-in MySQL data source plugin that allows you to query and visualize
data from a MySQL compatible database.
## Adding the data source
@@ -131,28 +131,28 @@ To simplify syntax and to allow for dynamic parts, like date range filters, the
Macro example | Description
------------ | -------------
*$__time(dateColumn)* | Will be replaced by an expression to convert to a UNIX timestamp and rename the column to `time_sec`. For example, *UNIX_TIMESTAMP(dateColumn) as time_sec*
*$__timeEpoch(dateColumn)* | Will be replaced by an expression to convert to a UNIX timestamp and rename the column to `time_sec`. For example, *UNIX_TIMESTAMP(dateColumn) as time_sec*
*$__timeFilter(dateColumn)* | Will be replaced by a time range filter using the specified column name. For example, *dateColumn BETWEEN FROM_UNIXTIME(1494410783) AND FROM_UNIXTIME(1494410983)*
*$__timeFrom()* | Will be replaced by the start of the currently active time selection. For example, *FROM_UNIXTIME(1494410783)*
*$__timeTo()* | Will be replaced by the end of the currently active time selection. For example, *FROM_UNIXTIME(1494410983)*
*$__timeGroup(dateColumn,'5m')* | Will be replaced by an expression usable in GROUP BY clause. For example, *cast(cast(UNIX_TIMESTAMP(dateColumn)/(300) as signed)*300 as signed),*
*$__timeGroup(dateColumn,'5m', 0)* | Same as above but with a fill parameter so missing points in that series will be added by grafana and 0 will be used as value.
*$__timeGroup(dateColumn,'5m', NULL)* | Same as above but NULL will be used as value for missing points.
*$__timeGroup(dateColumn,'5m', previous)* | Same as above but the previous value in that series will be used as fill value if no value has been seen yet NULL will be used (only available in Grafana 5.3+).
*$__timeGroupAlias(dateColumn,'5m')* | Will be replaced identical to $__timeGroup but with an added column alias (only available in Grafana 5.3+).
*$__unixEpochFilter(dateColumn)* | Will be replaced by a time range filter using the specified column name with times represented as Unix timestamp. For example, *dateColumn > 1494410783 AND dateColumn < 1494497183*
*$__unixEpochFrom()* | Will be replaced by the start of the currently active time selection as Unix timestamp. For example, *1494410783*
*$__unixEpochTo()* | Will be replaced by the end of the currently active time selection as Unix timestamp. For example, *1494497183*
*$__unixEpochNanoFilter(dateColumn)* | Will be replaced by a time range filter using the specified column name with times represented as nanosecond timestamp. For example, *dateColumn > 1494410783152415214 AND dateColumn < 1494497183142514872*
*$__unixEpochNanoFrom()* | Will be replaced by the start of the currently active time selection as nanosecond timestamp. For example, *1494410783152415214*
*$__unixEpochNanoTo()* | Will be replaced by the end of the currently active time selection as nanosecond timestamp. For example, *1494497183142514872*
*$__unixEpochGroup(dateColumn,'5m', [fillmode])* | Same as $__timeGroup but for times stored as Unix timestamp (only available in Grafana 5.3+).
*$__unixEpochGroupAlias(dateColumn,'5m', [fillmode])* | Same as above but also adds a column alias (only available in Grafana 5.3+).
*`$__time(dateColumn)`* | Will be replaced by an expression to convert to a UNIX timestamp and rename the column to `time_sec`. For example, *UNIX_TIMESTAMP(dateColumn) as time_sec*
*`$__timeEpoch(dateColumn)`* | Will be replaced by an expression to convert to a UNIX timestamp and rename the column to `time_sec`. For example, *UNIX_TIMESTAMP(dateColumn) as time_sec*
*`$__timeFilter(dateColumn)`* | Will be replaced by a time range filter using the specified column name. For example, *dateColumn BETWEEN FROM_UNIXTIME(1494410783) AND FROM_UNIXTIME(1494410983)*
*`$__timeFrom()`* | Will be replaced by the start of the currently active time selection. For example, *FROM_UNIXTIME(1494410783)*
*`$__timeTo()`* | Will be replaced by the end of the currently active time selection. For example, *FROM_UNIXTIME(1494410983)*
*`$__timeGroup(dateColumn,'5m')`* | Will be replaced by an expression usable in GROUP BY clause. For example, *cast(cast(UNIX_TIMESTAMP(dateColumn)/(300) as signed)*300 as signed),*
*`$__timeGroup(dateColumn,'5m', 0)`* | Same as above but with a fill parameter so missing points in that series will be added by grafana and 0 will be used as value.
*`$__timeGroup(dateColumn,'5m', NULL)`* | Same as above but NULL will be used as value for missing points.
*`$__timeGroup(dateColumn,'5m', previous)`* | Same as above but the previous value in that series will be used as fill value if no value has been seen yet NULL will be used (only available in Grafana 5.3+).
*`$__timeGroupAlias(dateColumn,'5m')`* | Will be replaced identical to $__timeGroup but with an added column alias (only available in Grafana 5.3+).
*`$__unixEpochFilter(dateColumn)`* | Will be replaced by a time range filter using the specified column name with times represented as Unix timestamp. For example, *dateColumn > 1494410783 AND dateColumn < 1494497183*
*`$__unixEpochFrom()`* | Will be replaced by the start of the currently active time selection as Unix timestamp. For example, *1494410783*
*`$__unixEpochTo()`* | Will be replaced by the end of the currently active time selection as Unix timestamp. For example, *1494497183*
*`$__unixEpochNanoFilter(dateColumn)`* | Will be replaced by a time range filter using the specified column name with times represented as nanosecond timestamp. For example, *dateColumn > 1494410783152415214 AND dateColumn < 1494497183142514872*
*`$__unixEpochNanoFrom()`* | Will be replaced by the start of the currently active time selection as nanosecond timestamp. For example, *1494410783152415214*
*`$__unixEpochNanoTo()`* | Will be replaced by the end of the currently active time selection as nanosecond timestamp. For example, *1494497183142514872*
*`$__unixEpochGroup(dateColumn,'5m', [fillmode])`* | Same as $__timeGroup but for times stored as Unix timestamp (only available in Grafana 5.3+).
*`$__unixEpochGroupAlias(dateColumn,'5m', [fillmode])`* | Same as above but also adds a column alias (only available in Grafana 5.3+).
We plan to add many more macros. If you have suggestions for what macros you would like to see, please [open an issue](https://github.com/grafana/grafana) in our GitHub repo.
The query editor has a link named `Generated SQL` that show up after a query as been executed, while in panel edit mode. Click on it and it will expand and show the raw interpolated SQL string that was executed.
The query editor has a link named `Generated SQL` that shows up after a query has been executed, while in panel edit mode. Click on it and it will expand and show the raw interpolated SQL string that was executed.
## Table queries
@@ -236,7 +236,7 @@ This is something we plan to add.
This feature is currently available in the nightly builds and will be included in the 5.0.0 release.
Instead of hard-coding things like server, application and sensor name in you metric queries you can use variables in their place. Variables are shown as dropdown select boxes at the top of the dashboard. These dropdowns makes it easy to change the data being displayed in your dashboard.
Instead of hard-coding things like server, application and sensor name in your metric queries you can use variables in their place. Variables are shown as dropdown select boxes at the top of the dashboard. These dropdowns make it easy to change the data being displayed in your dashboard.
Check out the [Templating]({{< relref "../../reference/templating.md" >}}) documentation for an introduction to the templating feature and the different types of template variables.
@@ -251,7 +251,7 @@ For example, you can have a variable that contains all values for the `hostname`
SELECThostnameFROMmy_host
```
A query can returns multiple columns and Grafana will automatically create a list from them. For example, the query below will return a list with values from `hostname` and `hostname2`.
A query can return multiple columns and Grafana will automatically create a list from them. For example, the query below will return a list with values from `hostname` and `hostname2`.
@@ -49,8 +49,8 @@ The autocomplete only works if the OpenTSDB suggest api is enabled.
## Templating queries
Instead of hard-coding things like server, application and sensor name in you metric queries you can use variables in their place.
Variables are shown as dropdown select boxes at the top of the dashboard. These dropdowns makes it easy to change the data
Instead of hard-coding things like server, application and sensor name in your metric queries you can use variables in their place.
Variables are shown as dropdown select boxes at the top of the dashboard. These dropdowns make it easy to change the data
being displayed in your dashboard.
Check out the [Templating]({{< relref "../../reference/templating.md" >}}) documentation for an introduction to the templating feature and the different
@@ -66,10 +66,10 @@ When using OpenTSDB with a template variable of `query` type you can use followi
Query | Description
------------ | -------------
*metrics(prefix)* | Returns metric names with specific prefix (can be empty)
*tag_names(cpu)* | Return tag names (i.e. keys) for a specific cpu metric
*tag_values(cpu, hostname)* | Return tag values for metric cpu and tag key hostname
*suggest_tagk(prefix)* | Return tag names (i.e. keys) for all metrics with specific prefix (can be empty)
*suggest_tagv(prefix)* | Return tag values for all metrics with specific prefix (can be empty)
*tag_names(cpu)* | Returns tag names (i.e. keys) for a specific cpu metric
*tag_values(cpu, hostname)* | Returns tag values for metric cpu and tag key hostname
*suggest_tagk(prefix)* | Returns tag names (i.e. keys) for all metrics with specific prefix (can be empty)
*suggest_tagv(prefix)* | Returns tag values for all metrics with specific prefix (can be empty)
If you do not see template variables being populated in `Preview of values` section, you need to enable
`tsd.core.meta.enable_realtime_ts` in the OpenTSDB server settings. Also, to populate metadata of
> NOTE: In **9.5.18, 9.4.23, 9.6.14, 10.9, 11.4, 12-beta2** versions of PostgreSQL has a [bug](https://www.postgresql.org/message-id/flat/28827.1561082086%40sss.pgh.pa.us#df2287bd7481153984bef6bab40af0db) which prevents execution of multiple column modifications via `ALTER TABLE` statement. Because Grafana uses it during initial database set up and since PostgreSQL has [fixed](https://github.com/postgres/postgres/commit/f946a409143d01951411382fbc3c91c7eb640094) this issue, Grafana **does not support these versions**
Grafana ships with a built-in PostgreSQL data source plugin that allows you to query and visualize data from a PostgreSQL compatible database.
## Adding the data source
@@ -143,24 +141,24 @@ Macros can be used within a query to simplify syntax and allow for dynamic parts
Macro example | Description
------------ | -------------
*$__time(dateColumn)* | Will be replaced by an expression to rename the column to `time`. For example, *dateColumn as time*
*$__timeSec(dateColumn)* | Will be replaced by an expression to rename the column to `time` and converting the value to Unix timestamp. For example, *extract(epoch from dateColumn) as time*
*$__timeFilter(dateColumn)* | Will be replaced by a time range filter using the specified column name. For example, *dateColumn BETWEEN '2017-04-21T05:01:17Z' AND '2017-04-21T05:06:17Z'*
*$__timeFrom()* | Will be replaced by the start of the currently active time selection. For example, *'2017-04-21T05:01:17Z'*
*$__timeTo()* | Will be replaced by the end of the currently active time selection. For example, *'2017-04-21T05:06:17Z'*
*$__timeGroup(dateColumn,'5m')* | Will be replaced by an expression usable in a GROUP BY clause. For example, *(extract(epoch from dateColumn)/300)::bigint*300*
*$__timeGroup(dateColumn,'5m', 0)* | Same as above but with a fill parameter so missing points in that series will be added by Grafana and 0 will be used as the value.
*$__timeGroup(dateColumn,'5m', NULL)* | Same as above but NULL will be used as value for missing points.
*$__timeGroup(dateColumn,'5m', previous)* | Same as above but the previous value in that series will be used as fill value. If no value has been seen yet, NULL will be used (only available in Grafana 5.3+).
*$__timeGroupAlias(dateColumn,'5m')* | Will be replaced with an expression identical to $__timeGroup, but with an added column alias (only available in Grafana 5.3+).
*$__unixEpochFilter(dateColumn)* | Will be replaced by a time range filter using the specified column name with times represented as Unix timestamps. For example, *dateColumn >= 1494410783 AND dateColumn <= 1494497183*
*$__unixEpochFrom()* | Will be replaced by the start of the currently active time selection as Unix timestamp. For example, *1494410783*
*$__unixEpochTo()* | Will be replaced by the end of the currently active time selection as Unix timestamp. For example, *1494497183*
*$__unixEpochNanoFilter(dateColumn)* | Will be replaced by a time range filter using the specified column name with times represented as nanosecond timestamps. For example, *dateColumn >= 1494410783152415214 AND dateColumn <= 1494497183142514872*
*$__unixEpochNanoFrom()* | Will be replaced by the start of the currently active time selection as nanosecond timestamp. For example, *1494410783152415214*
*$__unixEpochNanoTo()* | Will be replaced by the end of the currently active time selection as Unix timestamp. For example, *1494497183142514872*
*$__unixEpochGroup(dateColumn,'5m', [fillmode])* | Same as $__timeGroup, but for times stored as Unix timestamp (only available in Grafana 5.3+).
*$__unixEpochGroupAlias(dateColumn,'5m', [fillmode])* | Same as above, but also adds a column alias (only available in Grafana 5.3+).
*`$__time(dateColumn)`* | Will be replaced by an expression to rename the column to `time`. For example, *dateColumn as time*
*`$__timeSec(dateColumn)`* | Will be replaced by an expression to rename the column to `time` and converting the value to Unix timestamp. For example, *extract(epoch from dateColumn) as time*
*`$__timeFilter(dateColumn)`* | Will be replaced by a time range filter using the specified column name. For example, *dateColumn BETWEEN '2017-04-21T05:01:17Z' AND '2017-04-21T05:06:17Z'*
*`$__timeFrom()`* | Will be replaced by the start of the currently active time selection. For example, *'2017-04-21T05:01:17Z'*
*`$__timeTo()`* | Will be replaced by the end of the currently active time selection. For example, *'2017-04-21T05:06:17Z'*
*`$__timeGroup(dateColumn,'5m')`* | Will be replaced by an expression usable in a GROUP BY clause. For example, *(extract(epoch from dateColumn)/300)::bigint*300*
*`$__timeGroup(dateColumn,'5m', 0)`* | Same as above but with a fill parameter so missing points in that series will be added by Grafana and 0 will be used as the value.
*`$__timeGroup(dateColumn,'5m', NULL)`* | Same as above but NULL will be used as value for missing points.
*`$__timeGroup(dateColumn,'5m', previous)`* | Same as above but the previous value in that series will be used as fill value. If no value has been seen yet, NULL will be used (only available in Grafana 5.3+).
*`$__timeGroupAlias(dateColumn,'5m')`* | Will be replaced with an expression identical to $__timeGroup, but with an added column alias (only available in Grafana 5.3+).
*`$__unixEpochFilter(dateColumn)`* | Will be replaced by a time range filter using the specified column name with times represented as Unix timestamps. For example, *dateColumn >= 1494410783 AND dateColumn <= 1494497183*
*`$__unixEpochFrom()`* | Will be replaced by the start of the currently active time selection as Unix timestamp. For example, *1494410783*
*`$__unixEpochTo()`* | Will be replaced by the end of the currently active time selection as Unix timestamp. For example, *1494497183*
*`$__unixEpochNanoFilter(dateColumn)`* | Will be replaced by a time range filter using the specified column name with times represented as nanosecond timestamps. For example, *dateColumn >= 1494410783152415214 AND dateColumn <= 1494497183142514872*
*`$__unixEpochNanoFrom()`* | Will be replaced by the start of the currently active time selection as nanosecond timestamp. For example, *1494410783152415214*
*`$__unixEpochNanoTo()`* | Will be replaced by the end of the currently active time selection as Unix timestamp. For example, *1494497183142514872*
*`$__unixEpochGroup(dateColumn,'5m', [fillmode])`* | Same as $__timeGroup, but for times stored as Unix timestamp (only available in Grafana 5.3+).
*`$__unixEpochGroupAlias(dateColumn,'5m', [fillmode])`* | Same as above, but also adds a column alias (only available in Grafana 5.3+).
We plan to add many more macros. If you have suggestions for what macros you would like to see, please [open an issue](https://github.com/grafana/grafana) in our GitHub repo.
@@ -242,7 +240,7 @@ ORDER BY time
## Templating
Instead of hard-coding things like server, application and sensor name in you metric queries you can use variables in their place. Variables are shown as dropdown select boxes at the top of the dashboard. These dropdowns makes it easy to change the data being displayed in your dashboard.
Instead of hard-coding things like server, application and sensor name in your metric queries you can use variables in their place. Variables are shown as dropdown select boxes at the top of the dashboard. These dropdowns make it easy to change the data being displayed in your dashboard.
Check out the [Templating]({{< relref "../../reference/templating.md" >}}) documentation for an introduction to the templating feature and the different types of template variables.
@@ -354,6 +352,22 @@ WHERE
$__unixEpochFilter(epoch_time)
```
**Example region query using time and timeend columns with epoch values:**
> Only available in Grafana v6.6+.
```sql
SELECT
epoch_timeastime,
epoch_time_endastimeend,
metric1astext,
concat_ws(', ',metric1::text,metric2::text)astags
FROM
public.test_data
WHERE
$__unixEpochFilter(epoch_time)
```
**Example query using time column of native SQL date/time data type:**
```sql
@@ -370,7 +384,7 @@ WHERE
Name | Description
------------ | -------------
time | The name of the date/time field. Could be a column with a native SQL date/time data type or epoch value.
timeend | Optional name of the time end field, needs to be date/time data type. If set, then annotations are marked as regions between time and time-end.
timeend | Optional name of the time end field, needs to be date/time data type. If set, then annotations are marked as regions between time and time-end. (Grafana v6.6+)
text | Event description field.
tags | Optional field name to use for event tags as a comma separated string.
Grafana includes built-in support for Prometheus. This topic explains options, variables, querying, and other options specific to the Prometheus data source. Refer to [Add a data source]({{< relref "add-a-data-source.md" >}}) for instructions on how to add a data source to Grafana.
## Adding the data source
## Prometheus settings
1. Open the side menu by clicking the Grafana icon in the top header.
2. In the side menu under the `Dashboards` link you should find a link named `Data Sources`.
3. Click the `+ Add data source` button in the top header.
4. Select `Prometheus` from the _Type_ dropdown.
> NOTE: If you're not seeing the `Data Sources` link in your side menu it means that your current user does not have the `Admin` role for the current organization.
## Data source options
To access Prometheus settings, click the **Configuration** (gear) icon, then click **Data Sources**, and then click **Prometheus**.
@@ -35,9 +28,9 @@ Grafana includes built-in support for Prometheus.
| _User_ | User name for basic authentication. |
| _Password_ | Password for basic authentication. |
| _Scrape interval_ | Set this to the typical scrape and evaluation interval configured in Prometheus. Defaults to 15s. |
| _Custom Query Parameters_ | Add custom parameters to the Prometheus query URL. For example `timeout`, `partial_response`, `dedup` or `max_source_resolution`. Multiple parameters should be concatenated together with an '&'. |
| _Custom Query Parameters_ | Add custom parameters to the Prometheus query URL. For example `timeout`, `partial_response`, `dedup`, or `max_source_resolution`. Multiple parameters should be concatenated together with an '&'. |
## Query editor
## Prometheus query editor
Open a graph in edit mode by click the title > Edit (or by pressing `e` key while hovering over panel).
@@ -47,7 +40,7 @@ Open a graph in edit mode by click the title > Edit (or by pressing `e` key whil
| _Query expression_ | Prometheus query expression, check out the [Prometheus documentation](http://prometheus.io/docs/querying/basics/). |
| _Legend format_ | Controls the name of the time series, using name or pattern. For example `{{hostname}}`will be replaced with label value for the label `hostname`. |
| _Legend format_ | Controls the name of the time series, using name or pattern. For example `{{hostname}}`is replaced with the label value for the label `hostname`. |
| _Min step_ | An additional lower limit for the [`step` parameter of Prometheus range queries](https://prometheus.io/docs/prometheus/latest/querying/api/#range-queries) and for the `$__interval` variable. The limit is absolute and not modified by the _Resolution_ setting. |
| _Resolution_ | `1/1` sets both the `$__interval` variable and the [`step` parameter of Prometheus range queries](https://prometheus.io/docs/prometheus/latest/querying/api/#range-queries) such that each pixel corresponds to one data point. For better performance, lower resolutions can be picked. `1/2` only retrieves a data point for every other pixel, and `1/10` retrieves one data point per 10 pixels. Note that both _Min time interval_ and _Min step_ limit the final value of `$__interval` and `step`. |
| _Metric lookup_ | Search for metric names in this input field. |
@@ -55,15 +48,14 @@ Open a graph in edit mode by click the title > Edit (or by pressing `e` key whil
| _Instant_ | Perform an "instant" query, to return only the latest value that Prometheus has scraped for the requested time series. Instant queries return results much faster than normal range queries. Use them to look up label sets. |
| _Min time interval_| This value multiplied by the denominator from the _Resolution_ setting sets a lower limit to both the `$__interval` variable and the [`step` parameter of Prometheus range queries](https://prometheus.io/docs/prometheus/latest/querying/api/#range-queries). Defaults to _Scrape interval_ as set in the data source options. |
> NOTE: Grafana slightly modifies the request dates for queries to align them with the dynamically calculated step.
> This ensures consistent display of metrics data but can result in a small gap of data at the right edge of a graph.
> **Note:** Grafana modifies the request dates for queries to align them with the dynamically calculated step. This ensures consistent display of metrics data, but it can result in a small gap of data at the right edge of a graph.
### Instant queries
The Prometheus datasource allows you to run "instant" queries, which queries only the latest value.
The Prometheus datasource allows you to run "instant" queries, which query only the latest value.
You can visualize the results in a table panel to see all available labels of a timeseries.
Instant query results are made up only of one datapoint per series but can be shown in the graph panel with the help of [series overrides]({{< relref "../panels/graph/#series-overrides" >}}).
Instant query results are made up only of one datapoint per series but can be shown in the graph panel with the help of [series overrides]({{< relref "../panels/graph/#series-overrides" >}}).
To show them in the graph as a latest value point, add a series override and select `Points > true`.
To show a horizontal line across the whole graph, add a series override and select `Transform > constant`.
@@ -72,7 +64,7 @@ To show a horizontal line across the whole graph, add a series override and sele
## Templating
Instead of hard-coding things like server, application and sensor name in your metric queries, you can use variables in their place.
Variables are shown as dropdown select boxes at the top of the dashboard. These dropdowns makes it easy to change the data
Variables are shown as dropdown select boxes at the top of the dashboard. These dropdowns make it easy to change the data
being displayed in your dashboard.
Check out the [Templating]({{< relref "../../reference/templating.md" >}}) documentation for an introduction to the templating feature and the different
@@ -91,20 +83,20 @@ provides the following functions you can use in the `Query` input field.
| _metrics(metric)_ | Returns a list of metrics matching the specified `metric` regex. |
| _query_\__result(query)_ | Returns a list of Prometheus query result for the `query`. |
For details of _metric names_, _label names_ and _label values_ are please refer to the [Prometheus documentation](http://prometheus.io/docs/concepts/data_model/#metric-names-and-labels).
For details of what _metric names_, _label names_ and _label values_ are please refer to the [Prometheus documentation](http://prometheus.io/docs/concepts/data_model/#metric-names-and-labels).
#### Using interval and range variables
> Support for `$__range`, `$__range_s` and `$__range_ms` only available from Grafana v5.3
It's possible to use some global built-in variables in query variables; `$__interval`, `$__interval_ms`, `$__range`, `$__range_s` and `$__range_ms`, see [Global built-in variables]({{< relref "../../reference/templating/#global-built-in-variables" >}}) for more information. These can be convenient to use in conjunction with the `query_result` function when you need to filter variable queries since
You can use some global built-in variables in query variables; `$__interval`, `$__interval_ms`, `$__range`, `$__range_s` and `$__range_ms`, see [Global built-in variables]({{< relref "../../reference/templating/#global-built-in-variables" >}}) for more information. These can be convenient to use in conjunction with the `query_result` function when you need to filter variable queries since
`label_values` function doesn't support queries.
Make sure to set the variable's `refresh` trigger to be `On Time Range Change` to get the correct instances when changing the time range on the dashboard.
**Example usage:**
Populate a variable with the the busiest 5 request instances based on average QPS over the time range shown in the dashboard:
Populate a variable with the busiest 5 request instances based on average QPS over the time range shown in the dashboard:
```
Query: query_result(topk(5, sum(rate(http_requests_total[$__range])) by (instance)))
@@ -130,7 +122,7 @@ options are enabled, Grafana converts the labels from plain text to a regex comp
## Annotations
[Annotations]({{< relref "../../reference/annotations.md" >}}) allows you to overlay rich event information on top of graphs. You add annotation
[Annotations]({{< relref "../../reference/annotations.md" >}}) allow you to overlay rich event information on top of graphs. You add annotation
queries via the Dashboard menu / Annotations view.
Prometheus supports two ways to query annotations.
@@ -140,15 +132,17 @@ Prometheus supports two ways to query annotations.
The step option is useful to limit the number of events returned from your query.
## Getting Grafana metrics into Prometheus
## Get Grafana metrics into Prometheus
Since 4.6.0 Grafana exposes metrics for Prometheus on the `/metrics` endpoint. We also bundle a dashboard within Grafana so you can get started viewing your metrics faster. You can import the bundled dashboard by going to the data source edit page and click the dashboard tab. There you can find a dashboard for Grafana and one for Prometheus. Import and start viewing all the metrics!
Grafana exposes metrics for Prometheus on the `/metrics` endpoint. We also bundle a dashboard within Grafana so you can get started viewing your metrics faster. You can import the bundled dashboard by going to the data source edit page and click the dashboard tab. There you can find a dashboard for Grafana and one for Prometheus. Import and start viewing all the metrics!
## Configure the data source with provisioning
For detailed instructions, refer to [Internal Grafana metrics]({{< relref "../../administration/metrics.md">}}).
It's now possible to configure data sources using config files with Grafana's provisioning system. You can read more about how it works and all the settings you can set for data sources on the [provisioning docs page]({{< relref "../../administration/provisioning/#datasources" >}})
## Provision the Prometheus data source
Here are some provisioning examples for this data source.
You can configure data sources using config files with Grafana's provisioning system. Read more about how it works and all the settings you can set for data sources on the [provisioning docs page]({{< relref "../../administration/provisioning/#datasources" >}})
Here are some provisioning examples for this data source:
@@ -27,11 +27,11 @@ Grafana ships with built-in support for Google Stackdriver. Just add it as a dat
> NOTE: If you're not seeing the `Data Sources` link in your side menu it means that your current user does not have the `Admin` role for the current organization.
Click on the links above and click the `Enable` button:
@@ -57,24 +57,24 @@ Click on the links above and click the `Enable` button:
1. Navigate to the [APIs and Services Credentials page](https://console.cloud.google.com/apis/credentials).
2. Click on the `Create credentials` dropdown/button and choose the `Service account key` option.
{{< docs-imagebox img="/img/docs/v53/stackdriver_create_service_account_button.png" class="docs-image--no-shadow" caption="Create service account button" >}}
{{< docs-imagebox img="/img/docs/v53/stackdriver_create_service_account_button.png" class="docs-image--no-shadow" caption="Create service account button" >}}
3. On the `Create service account key` page, choose key type `JSON`. Then in the `Service Account` dropdown, choose the `New service account` option:
{{< docs-imagebox img="/img/docs/v53/stackdriver_create_service_account_key.png" class="docs-image--no-shadow" caption="Create service account key" >}}
{{< docs-imagebox img="/img/docs/v53/stackdriver_create_service_account_key.png" class="docs-image--no-shadow" caption="Create service account key" >}}
4. Some new fields will appear. Fill in a name for the service account in the `Service account name` field and then choose the `Monitoring Viewer` role from the `Role` dropdown:
5. Click the Create button. A JSON key file will be created and downloaded to your computer. Store this file in a secure place as it allows access to your Stackdriver data.
6. Upload it to Grafana on the data source Configuration page. You can either upload the file or paste in the contents of the file.
{{< docs-imagebox img="/img/docs/v53/stackdriver_grafana_upload_key.png" class="docs-image--no-shadow" caption="Upload service key file to Grafana" >}}
{{< docs-imagebox img="/img/docs/v53/stackdriver_grafana_upload_key.png" class="docs-image--no-shadow" caption="Upload service key file to Grafana" >}}
7. The file contents will be encrypted and saved in the Grafana database. Don't forget to save after uploading the file!
{{< docs-imagebox img="/img/docs/v53/stackdriver_grafana_key_uploaded.png" class="docs-image--no-shadow" caption="Service key file is uploaded to Grafana" >}}
{{< docs-imagebox img="/img/docs/v53/stackdriver_grafana_key_uploaded.png" class="docs-image--no-shadow" caption="Service key file is uploaded to Grafana" >}}
### Using GCE Default Service Account
@@ -86,58 +86,68 @@ If Grafana is running on a Google Compute Engine (GCE) virtual machine, it is po
Read more about creating and enabling service accounts for GCE VM instances [here](https://cloud.google.com/compute/docs/access/create-enable-service-accounts-for-instances).
The Stackdriverqueryeditor allows you to build two types of queries - **Metric** and **Service Level Objective (SLO)**. Both types return time series data.
The Stackdriver query editor allows you to select metrics, group/aggregate by labels and by time, and use filters to specify which time series you want in the results.
### Metric Queries
Begin by choosing a `Service` and then a metric from the `Metric` dropdown. Use the plus and minus icons in the filter and group by sections to add/remove filters or group by clauses.
The metric query editor allows you to select metrics, group/aggregate by labels and by time, and use filters to specify which time series you want in the results.
To create a metric query, follow these steps:
1. Choose the option **Metrics** in the **Query Type** dropdown
2. Choose a project from the **Project** dropdown
3. Choose a Google Cloud Platform service from the **Service** dropdown
4. Choose a metric from the **Metric** dropdown.
5. Use the plus and minus icons in the filter and group by sections to add/remove filters or group by clauses. This step is optional.
Stackdriver metrics can be of different kinds (GAUGE, DELTA, CUMULATIVE) and these kinds have support for different aggregation options (reducers and aligners). The Grafana query editor shows the list of available aggregation methods for a selected metric and sets a default reducer and aligner when you select the metric. Units for the Y-axis are also automatically selected by the query editor.
### Filter
#### Filter
To add a filter, click the plus icon and choose a field to filter by and enter a filter value e.g. `instance_name = grafana-1`. You can remove the filter by clicking on the filter name and select `--remove filter--`.
#### Simple wildcards
##### Simple wildcards
When the operator is set to `=` or `!=` it is possible to add wildcards to the filter value field. E.g `us-*` will capture all values that starts with "us-" and `*central-a` will capture all values that ends with "central-a". `*-central-*` captures all values that has the substring of -central-. Simple wildcards are less expensive than regular expressions.
#### Regular expressions
##### Regular expressions
When the operator is set to `=~` or `!=~` it is possible to add regular expressions to the filter value field. E.g `us-central[1-3]-[af]` would match all values that starts with "us-central", is followed by a number in the range of 1 to 3, a dash and then either an "a" or an "f". Leading and trailing slashes are not needed when creating regular expressions.
### Aggregation
#### Aggregation
The aggregation field lets you combine time series based on common statistics. Read more about this option [here](https://cloud.google.com/monitoring/charts/metrics-selector#aggregation-options).
The `Aligner` field allows you to align multiple time series after the same group by time interval. Read more about how it works [here](https://cloud.google.com/monitoring/charts/metrics-selector#alignment).
#### Alignment Period/Group by Time
##### Alignment Period/Group by Time
The `Alignment Period` groups a metric by time if an aggregation is chosen. The default is to use the GCP Stackdriver default groupings (which allows you to compare graphs in Grafana with graphs in the Stackdriver UI).
The option is called `Stackdriver auto` and the defaults are:
* 1m for time ranges < 23 hours
* 5m for time ranges >= 23 hours and < 6 days
* 1h for time ranges >= 6 days
- 1m for time ranges < 23 hours
- 5m for time ranges >= 23 hours and < 6 days
- 1h for time ranges >= 6 days
The other automatic option is `Grafana auto`. This will automatically set the group by time depending on the time range chosen and the width of the graph panel. Read more about the details [here](http://docs.grafana.org/reference/templating/#the-interval-variable).
It is also possible to choose fixed time intervals to group by, like `1h` or `1d`.
### Group By
#### Group By
Group by resource or metric labels to reduce the number of time series and to aggregate the results by a group by. E.g. Group by instance_name to see an aggregated metric for a Compute instance.
#### Metadata labels
##### Metadata labels
Resource metadata labels contains information to uniquely identify a resource in Google cloud. Metadata labels are only returned in the time series response if they're part of the **Group By** segment in the time series request. There's no API for retrieving metadata labels, so it's not possible to populate the group by dropdown with the metadata labels that are available for the selected service and metric. However, the **Group By** field dropdown comes with a pre-defined list of common system labels.
Resource metadata labels contain information to uniquely identify a resource in Google Cloud. Metadata labels are only returned in the time series response if they're part of the **Group By** segment in the time series request. There's no API for retrieving metadata labels, so it's not possible to populate the group by dropdown with the metadata labels that are available for the selected service and metric. However, the **Group By** field dropdown comes with a pre-defined list of common system labels.
User labels cannot be pre-defined, but it's possible to enter them manually in the **Group By** field. If a metadata label, user label or system label is included in the **Group By** segment, then you can create filters based on it and expand its value on the **Alias** field.
### Alias Patterns
#### Alias patterns
The Alias By field allows you to control the format of the legend keys. The default is to show the metric name and labels. This can be long and hard to read. Using the following patterns in the alias field, you can format the legend key the way you want it.
@@ -153,10 +163,10 @@ The Alias By field allows you to control the format of the legend keys. The defa
In the Group By dropdown, you can see a list of metric and resource labels for a metric. These can be included in the legend key using alias patterns.
| Alias Pattern Format | Description | Alias Pattern Example | Example Result |
The SLO query builder in the Stackdriver data source allows you to display SLO data in time series format. To get an understanding of the basic concepts in service monitoring, please refer to Google Stackdriver's [official docs](https://cloud.google.com/monitoring/service-monitoring).
#### How to create an SLO query
To create an SLO query, follow these steps:
1. Choose the option **Service Level Objectives (SLO)** in the **Query Type** dropdown.
2. Choose a project from the **Project** dropdown.
3. Choose an [SLO service](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/services) from the **Service** dropdown.
4. Choose an [SLO](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/services.serviceLevelObjectives) from the **SLO** dropdown.
5. Choose a [time series selector](https://cloud.google.com/monitoring/service-monitoring/timeseries-selectors#ts-selector-list) from the **Selector** dropdown.
The friendly names for the time series selectors are shown in Grafana. Here is the mapping from the friendly name to the system name that is used in the Service Monitoring documentation:
| Selector dropdown value | Corresponding time series selector used |
| `{{project}}` | returns the GCP project name | `myProject` |
| `{{service}}` | returns the service name | `myService` |
| `{{slo}}` | returns the SLO | `latency-slo` |
| `{{selector}}` | returns the selector | `select_slo_health` |
#### Alignment Period/Group by Time for SLO queries
SLO queries use the same [alignment period functionality as metric queries]({{< relref "#metric-queries" >}}).
## Templating
Instead of hard-coding things like server, application and sensor name in you metric queries you can use variables in their place.
Variables are shown as dropdown select boxes at the top of the dashboard. These dropdowns makes it easy to change the data
Variables are shown as dropdown select boxes at the top of the dashboard. These dropdowns make it easy to change the data
being displayed in your dashboard.
Check out the [Templating]({{< relref "../../reference/templating.md" >}}) documentation for an introduction to the templating feature and the different
@@ -185,24 +236,27 @@ types of template variables.
### Query Variable
Variable of the type *Query* allows you to query Stackdriver for various types of data. The Stackdriver data source plugin provides the following `Query Types`.
Variable of the type _Query_ allows you to query Stackdriver for various types of data. The Stackdriver data source plugin provides the following `Query Types`.
Why two ways? The first syntax is easier to read and write but does not allow you to use a variable in the middle of a word. When the _Multi-value_ or _Include all value_ options are enabled, Grafana converts the labels from plain text to a regex compatible string, which means you have to use `=~` instead of `=`.
@@ -210,7 +264,7 @@ Why two ways? The first syntax is easier to read and write but does not allow yo
[Annotations]({{< relref "../../reference/annotations.md" >}}) allows you to overlay rich event information on top of graphs. You add annotation
[Annotations]({{< relref "../../reference/annotations.md" >}}) allow you to overlay rich event information on top of graphs. You add annotation
queries via the Dashboard menu / Annotations view. Annotation rendering is expensive so it is important to limit the number of rows returned. There is no support for showing Stackdriver annotations and events yet but it works well with [custom metrics](https://cloud.google.com/monitoring/custom-metrics/) in Stackdriver.
With the query editor for annotations, you can select a metric and filters. The `Title` and `Text` fields support templating and can use data returned from the query. For example, the Title field could have the following text:
> Explore is only available in Grafana 6.0 and above.
## Introduction
One of the major new features of Grafana 6.0 is the new query-focused Explore workflow for troubleshooting and/or for data exploration.
Grafana's dashboard UI is all about building dashboards for visualization. Explore strips away all the dashboard and panel options so that you can focus on the query. Iterate until you have a working query and then think about building a dashboard.
> Explore is only available in Grafana 6.0 and above.
For infrastructure monitoring and incident response, you no longer need to switch to other tools to debug what went wrong. Explore allows you to dig deeper into your metrics and logs to find the cause. Grafana's new logging data source, [Loki](https://github.com/grafana/loki) is tightly integrated into Explore and allows you to correlate metrics and logs by viewing them side-by-side. This creates a new debugging workflow where you can:
1. Receive an alert
2. Drill down and examine metrics
3. Drill down again and search logs related to the metric and time interval (and in the future, distributed traces).
1. Drill down and examine metrics
1. Drill down again and search logs related to the metric and time interval (and in the future, distributed traces).
If you just want to explore your data and do not want to create a dashboard then Explore makes this much easier. Explore will show the results as both a graph and a table enabling you to see trends in the data and more detail at the same time (if the data source supports both graph and table data).
## How to Start Exploring
## Start exploring
There is a new Explore icon on the menu bar to the left. This opens a new empty Explore tab.
> **Note:** By default, users with the Viewer role cannot edit and do not have access to Explore. Refer to [Organization roles](https://grafana.com/docs/grafana/latest/permissions/organization_roles/) for more information about what each role has access to.
There is an Explore icon on the menu bar to the left. This opens an empty Explore tab.
{{< docs-imagebox img="/img/docs/v65/explore_menu.png" class="docs-image--no-shadow" caption="Screenshot of the new Explore Icon" >}}
@@ -41,7 +39,7 @@ Choose your data source in the dropdown in the top left. Prometheus has a custom
The query field is where you can write your query and explore your data. There are three buttons beside the query field, a clear button (X), an add query button (+) and the remove query button (-). Just like the normal query editor, you can add and remove multiple queries.
## Split and Compare
## Split and compare
The Split feature is an easy way to compare graphs and tables side-by-side or to look at related data together on one page. Click the split button to duplicate the current query and split the page into two side-by-side queries. It is possible to select another data source for the new query which for example, allows you to compare the same query for two different servers or to compare the staging environment to the production environment.
@@ -51,17 +49,78 @@ In split view, timepickers for both panels can be linked (if you change one, the
You can close the newly created query by clicking on the Close Split button.
## Query history
> BETA: Query history is a beta feature.
Query history is a list of queries that you have used in Explore. The history is local to your browser and is not shared with others. To open and interact with your history, click the **Query history** button in Explore.
### View query history
Query history lets you view the history of your querying. For each individual query, you can:
- Run a query.
- Create and/or edit a comment.
- Copy a query to the clipboard.
- Copy a URL link with the query to the clipboard.
- Star a query.
### Manage favorite queries
All queries that have been starred in the Query history tab are displayed in the Starred. This allows you to access your favorite queries faster and to reuse these queries without typing them from scratch.
### Sort query history
By default, query history shows you the most recent queries. You can sort your history by date or by data source name in ascending or descending order.
1. Click the **Sort queries by** field.
2. Select one of the following options:
- Newest first
- Oldest first
- Data source A-Z
- Data source Z-A
> Note: If you are in split mode, then the chosen sorting mode applies only to the active panel.
### Filter query history
Filter query history in Query history and Starred tab by data source name:
1. Click the **Filter queries for specific data source(s)** field
2. Select the data source for which you would like to filter your history. You can select multiple data sources.
In **Query history** tab it is also possible to filter queries by date using the slider:
- Use vertical slider to filter queries by date.
- By dragging top handle, adjust start date.
- By dragging top handle, adjust end date.
> Note: If you are in split mode, filters are applied only to your currently active panel.
### Query history settings
You can customize the query history in the Settings tab. Options are described in the table below.
| Period of time for which Grafana will save your query history | 1 week |
| Change the default active tab | Query history tab |
| Only show queries for datasource currently active in Explore | False |
| Clear query history | Permanently deletes all stored queries. |
> Note: Query history settings are global, and applied to both panels in split mode.
## Prometheus-specific Features
The first version of Explore features a custom querying experience for Prometheus. When a query is executed, it actually executes two queries, a normal Prometheus query for the graph and an Instant Query for the table. An Instant Query returns the last value for each time series which shows a good summary of the data shown in the graph.
### Metrics Explorer
### Metrics explorer
On the left-hand side of the query field is a `Metrics` button, clicking on this opens the Metric Explorer. This shows a hierarchical menu with metrics grouped by their prefix. For example, all the Alert Manager metrics will be grouped under the `alertmanager` prefix. This is a good starting point if you just want to explore which metrics are available.
{{< docs-imagebox img="/img/docs/v65/explore_metric_explorer.png" class="docs-image--no-shadow" caption="Screenshot of the new Explore option in the panel menu" >}}
### Query Field
### Query field
The Query field supports autocomplete for metric names, function and works mostly the same way as the standard Prometheus query editor. Press the enter key to execute a query.
@@ -69,17 +128,18 @@ The autocomplete menu can be trigger by pressing Ctrl+Space. The Autocomplete me
Suggestions can appear under the query field - click on them to update your query with the suggested change.
* For counters (monotonically increasing metrics), a rate function will be suggested.
* For buckets, a histogram function will be suggested.
* For recording rules, possible to expand the rules.
- For counters (monotonically increasing metrics), a rate function will be suggested.
- For buckets, a histogram function will be suggested.
- For recording rules, possible to expand the rules.
### Table Filters
### Table filters
Click on the filter button <span title="Filter for label" class="logs-label__icon fa fa-search-plus"></span> in a labels column in the Table panel to add filters to the query expression. This works with multiple queries too - the filter will be added for all the queries.
## Logs Integration
## Logs integration
Along with metrics, Explore allows you to investigate your logs with the following data sources:
- [Loki](../datasources/loki)
- [InfluxDB](../datasources/influxdb)
- [Elasticsearch](../datasources/elasticsearch)
@@ -92,9 +152,9 @@ You can customize how logs are displayed and select which columns are shown.
Log data can be very repetitive and Explore can help by hiding duplicate log lines. There are a few different deduplication algorithms that you can use:
*`exact` Exact matches are done on the whole line, except for date fields.
*`numbers` Matches on the line after stripping out numbers (durations, IP addresses etc.).
*`signature` The most aggressive deduping - strips all letters and numbers, and matches on the remaining whitespace and punctuation.
-`exact` Exact matches are done on the whole line, except for date fields.
-`numbers` Matches on the line after stripping out numbers (durations, IP addresses etc.).
-`signature` The most aggressive deduping - strips all letters and numbers, and matches on the remaining whitespace and punctuation.
#### Time
@@ -108,7 +168,7 @@ Shows or hides the unique labels column that includes only non-common labels. Al
Set this to True if you want the display to use line wrapping. If set to False, it will result in horizontal scrolling.
### Labels and Parsed fields
### Labels and parsed fields
Each log row has an extendable area with its labels and parsed fields, for more robust interaction. For all labels we have added the ability to filter for (positive filter) and filter out (negative filter) selected labels. Each field or label also has a stats icon to display ad-hoc statistics in relation to all displayed logs.
@@ -118,7 +178,7 @@ As mentioned, one of the log integrations is for the new open source log aggrega
See [Loki's data source documentation](../datasources/loki) on how to query for log data.
#### Switching from Metrics to Logs
#### Switch from metrics to logs
If you switch from a Prometheus query to a logs query (you can do a split first to have your metrics and logs side by side) then it will keep the labels from your query that exist in the logs and use those to query the log streams. For example, the following Prometheus query:
@@ -33,7 +33,7 @@ The singlestat panel has a normal query editor to allow you define your exact me
* **diff** - The difference between 'current' (last value) and 'first'.
* **range** - The difference between 'min' and 'max'. Useful the show the range of change for a gauge.
2.**Prefix/Postfix**: The Prefix/Postfix fields let you define a custom label to appear *before/after* the value. The `$__name` variable can be used here to use the series name or alias from the metric query.
3.**Units**: Units are appended to the the Singlestat within the panel, and will respect the color and threshold settings for the value.
3.**Units**: Units are appended to the Singlestat within the panel, and will respect the color and threshold settings for the value.
4.**Decimals**: The Decimal field allows you to override the automatic decimal precision, and set it explicitly.
5.**Font Size**: You can use this section to select the font size of the different texts in the Singlestat Panel, i.e. prefix, value and postfix.
The stat panel is designed to show a big single stat values with an optional graph sparkline. You can control
The stat panel is designed to show a big single stat value with an optional graph sparkline. You can control
background or value color using thresholds.
## Display options
@@ -21,7 +21,7 @@ background or value color using thresholds.
*`All values` - Show a separate stat for every row.
* Calc
* Specify calculation / reducer function. Since this panel is designed to only show a single value Grafana needs to
know how to reduce a fields many values to a single value.
know how to reduce a field's many values to a single value.
* Orientation
* If your query returns multiple series or you have set **Show** to `All values` then the visualization will repeat for every series or row. This orientation option will control in what direction it will repeat.
* Color
@@ -39,7 +39,7 @@ background or value color using thresholds.
### Auto layout
The panel will try to auto adjust layout depending on width & height. The graph will also hide if the panel becomes
to small.
too small.
Example of stacked layout where graph is automatically hidden due to each stat being too small:
@@ -66,7 +66,7 @@ Example of value color mode:
### Thresholds
Define thresholds that will set the color of either the value or the background depending on your `Color` display option. The
thresholds are automatically sorted from lowerst value to highest. The `Base` value represents minus infinity.
thresholds are automatically sorted from lowest value to highest. The `Base` value represents minus infinity.
This guide will help you get started and acquainted with Grafana.
This guide will help you get started and acquainted with Grafana. To learn more about Grafana in general, refer to [What is Grafana?]({{< relref "what-is-grafana.md" >}}).
## Install Grafana
@@ -35,29 +35,9 @@ This step varies according to your computer operating system. Refer to the instr
Congratulations, you have gotten started with Grafana! You have a dashboard and are displaying results. Feel free to experiment with what you have built, continue on to add another data source, or explore [Next steps](#next-steps).
Before you create your first real dashboard, you need to add your data source.
First move your cursor to the cog on the side menu which will show you the configuration menu. If the side menu is not visible click the Grafana icon in the upper left corner. The first item on the configuration menu is data sources, click on that and you'll be taken to the data sources page where you can add and edit data sources. You can also simply click the cog.
Click Add data source and you will come to the settings page of your new data source.
First, give the data source a Name and then select which Type of data source you'll want to create, see [Supported data sources]({{< relref "../features/datasources/#supported-data-sources/" >}}) for more information and how to configure your data source.
After you have configured your data source you are ready to save and test.
## Next steps
There is so much you can do in Grafana, it can be hard to know where to begin. Your next steps will be different depending on whether you are using Grafana just for yourself or if you are an administrating Grafana for an organization.
Different user types will have different interests. Some suggestions are listed below, or refer to [What is Grafana?]({{< relref "what-is-grafana.md" >}}) for a general overview of Grafana features.
### All users
@@ -65,6 +45,7 @@ All users might want to learn about:
* [Data sources]({{< relref "../features/datasources/data-sources.md" >}}) and [Add a data source]({{< relref "../features/datasources/add-a-data-source.md" >}})
This topic provides a high-level look at Grafana, the Grafana process, and Grafana features. It's a good place to start if you want to learn more about Grafana software. To jump right in, refer to [Getting started]({{< relref "getting_started.md" >}}).
Grafana is open source visualization and analytics software. It allows you to query, visualize, alert on, and explore your metrics no matter where they are stored. In plain English, it provides you with tools to turn your time-series database (TSDB) data into beautiful graphs and visualizations.
After creating a dashboard like you do in [Getting started]({{< relref "getting_started.md" >}}), there are many possible things you might do next. It all depends on your needs and your use case.
For example, if you want to view weather data and statistics about your smart home, then you might create a playlist. If you are the administrator for a corporation and are managing Grafana for multiple teams, then you might need to set up provisioning and authentication.
The following sections provide an overview of things you might want to do with your Grafana database and links so you can learn more. For more guidance and ideas, check out the [Grafana Community forums](https://community.grafana.com/).
## Explore metrics and logs
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 "../features/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/notifications.md" >}}), 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/rules.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 "../reference/annotations.md" >}}) for more information.
## Dashboard variables
[Template variables]({{< relref "../reference/templating.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 "../installation/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]({{< relref "../permissions/overview.md" >}}) on folders, dashboards, and down to the [data source level]({{< relref "../enterprise/datasource_permissions.md" >}}) if you're using [Grafana Enterprise]({{< relref "../enterprise/_index.md" >}}).
## Grafana Cloud
Grafana Cloud is a highly available, fast, fully managed OpenSaaS logging and metrics platform. Everything you love about Grafana, but Grafana Labs hosts it for you and handles all the headaches.
[Learn more about Grafana Cloud.](https://grafana.com/cloud/)
## Grafana Enterprise
[Grafana Enterprise]({{< relref "../enterprise/_index.md" >}}) 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, Grafana Enterprise adds enterprise data sources, advanced authentication options, more permission controls, 24x7x365 support, and training from the core Grafana team.
[Learn more about Grafana Enterprise](https://grafana.com/enterprise). To purchase Enterprise or obtain a trial license, contact the Grafana Labs [Sales Team](https://grafana.com/contact?about=support&topic=Grafana%20Enterprise).
This topic includes the release notes for the Grafana v6.7, which is currently in beta. For all details, read the full [CHANGELOG.md](https://github.com/grafana/grafana/blob/master/CHANGELOG.md).
Grafana 6.7 comes with a lot of new features and enhancements:
- [**Enterprise:** Azure OAuth Team Sync support]({{< relref "#azure-oauth-team-sync-support" >}})
## General features
General features are included in all Grafana editions.
### Query history
> BETA: Query history is a beta feature. It is local to your browser and is not shared with others.
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 "../features/explore" >}}).
Grafana v6.7 comes with a new OAuth integration for Microsoft Azure Active Directory. You can now assign users and groups to Grafana roles from the Azure Portal. Learn how to enable and configure it in [Azure AD OAuth2 authentication]({{< relref "../auth/azuread/" >}}).
### Enforce minimum dashboard refresh interval
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 "../installation/configuration#min-refresh-interval" >}}) for more information and how to enable this feature.
### Stackdriver project selector
A Stackdriver data source in Grafana is configured for one service account only. That service account is always associated with a default project in Google Cloud Platform (GCP). Depending on your setup in GCP, the service account might be granted access to more projects than just the default project.
In Grafana 6.7, the query editor has been enhanced with a project selector that makes it possible to query different projects without changing datasource. Many thanks [Eraac](https://github.com/Eraac), [eliaslaouiti](https://github.com/eliaslaouiti), and [NaurisSadovskis](https://github.com/NaurisSadovskis) for making this happen!
## Grafana Enterprise features
General features are included in the Grafana Enterprise edition software.
### White labeling customizes application title
This release adds a new white labeling option to customize the application title. Learn how to configure it in [White labeling]({{< relref "../enterprise/white-labeling/" >}}).
```
[white_labeling]
# Set to your company name to override application title
app_title = Your Company
```
### Configure reporting for timeout and concurrency
This release adds more configuration for the reporting feature rendering requests. You can set the panel rendering request timeout and the maximum number of concurrent calls to the rendering service in your configuration. Learn how to do it in [Reporting]({{< relref "../enterprise/reporting/" >}}).
```
[reporting]
# Set timeout for each panel rendering request
rendering_timeout = 10s
# Set maximum number of concurrent calls to the rendering service
concurrent_render_limit = 10
```
### Export dashboard as PDF
This feature allows you to export a dashboard as a PDF document. All dashboard panels will be rendered as images and added into the PDF document. Learn more in [Export dashboard as PDF]({{< relref "../enterprise/export-pdf/" >}}).
### Report landscape mode
You can now use either portrait or landscape mode in your reports. Portrait will render three panels per page and landscape two.
@@ -28,7 +28,7 @@ that you cannot use this API for retrieving information about the General folder
`GET /api/folders`
Returns all folders that the authenticated user has permission to view.
Returns all folders that the authenticated user has permission to view. You can control the maximum number of folders returned through the `limit` query parameter, the default is 1000.
Default value for the `perpage` parameter is `1000` and for the `page` parameter is `1`. The `totalCount` field in the response can be used for pagination of the user list E.g. if `totalCount` is equal to 100 users and the `perpage` parameter is set to 10 then there are 10 pages of users. The `query` parameter is optional and it will return results where the query value is contained in one of the `name`, `login` or `email` fields. Query values with spaces need to be URL encoded e.g. `query=Jane%20Doe`.
```
Requires basic authentication and that the authenticated user is a Grafana Admin.
It should be straight forward to get Grafana up and running behind a reverse proxy. But here are some things that you might run into.
Links and redirects will not be rendered correctly unless you set the server.domain setting.
```bash
[server]
domain= foo.bar
```
To use sub *path* ex `http://foo.bar/grafana` make sure to include `/grafana` in the end of root_url.
Otherwise Grafana will not behave correctly. See example below.
## Examples
Here are some example configurations for running Grafana behind a reverse proxy.
### Grafana configuration (ex http://foo.bar)
```bash
[server]
domain= foo.bar
```
### Nginx configuration
Nginx is a high performance load balancer, web server and reverse proxy: https://www.nginx.com/
#### Nginx configuration with HTTP and Reverse Proxy enabled
```bash
server {
listen 80;
root /usr/share/nginx/html;
index index.html index.htm;
location / {
proxy_pass http://localhost:3000/;
}
}
```
### Grafana configuration with hosting HTTPS in Nginx (ex https://foo.bar)
```bash
[server]
domain= foo.bar
root_url= https://foo.bar
```
#### Nginx configuration with HTTPS, Reverse Proxy, HTTP to HTTPS redirect and URL re-writes enabled
Instead of http://foo.bar:3000/?orgId=1, this configuration will redirect all HTTP requests to HTTPS and re-write the URL so that port 3000 isn't visible and will result in https://foo.bar/?orgId=1
Set the name of the grafana-server instance. Used in logging and internal metrics and in
clustering info. Defaults to: `${HOSTNAME}`, which will be replaced with
Set the name of the grafana-server instance. Used in logging, internal metrics, and clustering info. Defaults to: `${HOSTNAME}`, which will be replaced with
environment variable `HOSTNAME`, if that is empty or does not exist Grafana will try to use
system calls to get the machine name.
@@ -450,6 +449,11 @@ Text used as placeholder text on login page for password input.
Grafana provides many ways to authenticate users. The docs for authentication has been split in to many different pages
below.
### oauth_state_cookie_max_age
How long the OAuth state cookie lives before being deleted. Default is `60` (seconds)
Administrators can increase it if they experience OAuth login state mismatch errors.
@@ -506,7 +510,7 @@ Number dashboard versions to keep (per dashboard). Default: `20`, Minimum: `1`.
> Only available in Grafana v6.7+.
When set, this will restrict users to set the refresh interval of a dashboard lower than given interval. Per default this is not set/unrestricted.
This will restrict users to set the refresh interval of a dashboard lower than given interval. Per default this is 5 seconds.
The interval string is a possibly signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. `30s` or `1m`.
## [dashboards.json]
@@ -639,6 +643,8 @@ Syslog tag. By default, the process's `argv[0]` is used.
## [metrics]
For detailed instructions, refer to [Internal Grafana metrics]({{< relref "../administration/metrics.md" >}}).
### enabled
Enable metrics reporting. defaults true. Available via HTTP API `/metrics`.
@@ -816,6 +822,11 @@ URL to a remote HTTP image renderer service, e.g. http://localhost:8081/render,
If the remote HTTP image renderer service runs on a different server than the Grafana server you may have to configure this to a URL where Grafana is reachable, e.g. http://grafana.domain/.
### concurrent_render_request_limit
Concurrent render request limit affects when the /render HTTP endpoint is used. Rendering many images at the same time can overload the server,
which this setting can help protect against by only allowing a certain amount of concurrent requests.
## [panels]
### disable_sanitize_html
@@ -844,7 +855,7 @@ for the full list. Environment variables will override any settings provided her
### address
The host:port destination for reporting spans. (ex: `localhost:6381`)
The host:port destination for reporting spans. (ex: `localhost:6831`)
Can be set with the environment variables `JAEGER_AGENT_HOST` and `JAEGER_AGENT_PORT`.
@@ -54,6 +54,8 @@ Grafana supports the following databases:
By default, Grafana installs with and uses SQLite, which is an embedded database stored in the Grafana installation location.
> NOTE: PostgreSQL versions 9.5.18, 9.4.23, 9.6.14, 10.9, 11.4, and 12-beta2 are affected by a bug (tracked by the PostgreSQL project as [bug #15865](https://www.postgresql.org/message-id/flat/15865-17940eacc8f8b081%40postgresql.org)) which prevents those versions from being used with Grafana. The bug has been fixed in more recent versions of PostgreSQL.
## Supported web browsers
Grafana is supported in the current version of the following browsers. Older versions of these browsers might not be supported, so you should always upgrade to the latest version when using Grafana.
We recommend that you upgrade Grafana often to stay up to date with the latest fixes and enhancements.
In order make this a reality, Grafana upgrades are backward compatible and the upgrade process is simple and quick.
In order to make this a reality, Grafana upgrades are backward compatible and the upgrade process is simple and quick.
Upgrading is generally safe (between many minor and one major version) and dashboards and graphs will look the same. There may be minor breaking changes in some edge cases, which are outlined in the [Release Notes](https://community.grafana.com/c/releases) and [Changelog](https://github.com/grafana/grafana/blob/master/CHANGELOG.md)
@@ -81,6 +81,7 @@ If you installed Grafana from our APT repository, then Grafana will automaticall
```bash
sudo apt-get update
sudo apt-get upgrade
```
#### Upgrade from binary .tar file
@@ -237,3 +238,13 @@ Due to this change in Chrome, the `[security]` setting `cookie_samesite` configu
This version of Chrome also rejects insecure `SameSite=None` cookies. See https://www.chromestatus.com/feature/5633521622188032 for more information. Make sure that you
change the `[security]` setting `cookie_secure` to `true` and use HTTPS when `cookie_samesite` is configured to `none`, otherwise authentication in Grafana won't work properly.
## Upgrading to v7.0
### PhantomJS removed
PhantomJS was deprecated in [Grafana v6.4](https://grafana.com/docs/grafana/latest/guides/whats-new-in-v6-4/#phantomjs-deprecation) and starting from Grafana v7.0.0, all PhantomJS support has been removed. This means that Grafana no longer ships with a built-in image renderer, and we adwise you to install the [Grafana Image Renderer plugin](https://grafana.com/grafana/plugins/grafana-image-renderer).
### Dashboard minimum refresh interval enforced
A global minimum dashboard refresh interval is now enforced and defaults to 5 seconds. Read more [here]({{< relref "configuration/#min-refresh-interval" >}}) about this setting.
@@ -27,9 +26,12 @@ A library containing most of the core functionality and data types used in Grafa
| [DataSourceApi](./datasourceapi/) | The main data source abstraction interface, represents an instance of a data source<!-- -->Although this is a class, datasource implementations do not \*yet\* need to extend it. As such, we can not yet add functions with default implementations. |
| [DataSourcePlugin](./datasourceplugin/) | |
| [FieldCache](./fieldcache/) | |
| [FieldConfigEditorBuilder](./fieldconfigeditorbuilder/) | Fluent API for declarative creation of field config option editors |
| [guessFieldTypeForField(field)](./guessfieldtypeforfield/) | Looks at the data to guess the column type. This ignores any existing setting |
| [guessFieldTypeFromNameAndValue(name, v)](./guessfieldtypefromnameandvalue/) | Given a name and value, this will pick a reasonable field type |
| [guessFieldTypeFromValue(v)](./guessfieldtypefromvalue/) | Given a value this will guess the best column type<!-- -->TODO: better Date/Time support! Look for standard date strings? |
| [locale(value, decimals)](./locale/) | |
| [parseFlags(text)](./parseflags/) | Converts any mode modifiers in the text to the Javascript equivalent flag |
@@ -131,35 +137,41 @@ A library containing most of the core functionality and data types used in Grafa
| [toNumberString(value)](./tonumberstring/) | |
| [transformDataFrame(options, data)](./transformdataframe/) | Apply configured transformations to the input data |
| [validateFieldConfig(config)](./validatefieldconfig/) | This checks that all options on FieldConfig make sense. It mutates any value that needs fixed. In particular this makes sure that the first threshold value is -Infinity (not valid in JSON) |
| [vectorator(vector)](./vectorator/) | Use functional programming with your vector |
| [AnnotationQueryRequest](./annotationqueryrequest/) | Options passed to the datasource.annotationQuery method. See docs/plugins/developing/datasource.md |
| [DataQuery](./dataquery/) | These are the common properties available to all queries in all datasources Specific implementations will extend this interface adding the required properties for the given context |
| [DataSourceInstanceSettings](./datasourceinstancesettings/) | Frontend settings model that is passed to Datasource constructor. This differs a bit from the model above as this data model is available to every user who has access to a data source (Viewers+). This is loaded in bootData (on page load), or from: /api/frontend/settings |
| [DataSourceJsonData](./datasourcejsondata/) | |
@@ -174,6 +186,9 @@ A library containing most of the core functionality and data types used in Grafa
| [FeatureToggles](./featuretoggles/) | Describes available feature toggles in Grafana. These can be configured via the <code>conf/custom.ini</code> to enable features under development or not yet available in stable version. |
| [Field](./field/) | |
| [FieldCalcs](./fieldcalcs/) | |
| [FieldColor](./fieldcolor/) | |
| [FieldConfig](./fieldconfig/) | Every property is optional<!-- -->Plugins may extend this with additional properties. Something like series overrides |
| [MutableVector](./mutablevector/) | Vector with standard manipulation functions |
| [NavModel](./navmodel/) | |
| [NavModel](./navmodel/) | Interface used to describe different kinds of page titles and page navigation. Navmodels are usually generated in the backend and stored in Redux. |
| [standardTransformersRegistry](./standardtransformersregistry/) | Registry of transformation options that can be driven by stored configuration files. |
| [PanelTypeChangedHandler](./paneltypechangedhandler/) | Called before a panel is initialized. Allows panel inspection for any updates before changing the panel type. |
| [ScaleCalculator](./scalecalculator/) | |
| [Subtract](./subtract/) | |
| [TimeFragment](./timefragment/) | |
@@ -382,7 +447,12 @@ A library containing most of the core functionality and data types used in Grafa
| [TimeSeriesValue](./timeseriesvalue/) | |
| [TimeZone](./timezone/) | |
| [TimeZoneBrowser](./timezonebrowser/) | |
| [TimeZoneResolver](./timezoneresolver/) | |
| [TimeZoneUtc](./timezoneutc/) | |
| [UrlQueryMap](./urlquerymap/) | Type to represent the values parsed from the query string. |
| [UrlQueryValue](./urlqueryvalue/) | Type to represent the value of a single query variable. |
| [ValueConverter](./valueconverter/) | |
| [ValueFormatter](./valueformatter/) | |
| [ValueMapping](./valuemapping/) | |
| [VariableType](./variabletype/) | |
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.