Compare commits
471 Commits
sriram/SQL
...
v10.0.2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b2bbe10fbc | ||
|
|
ff35f2efcf | ||
|
|
a8dfb05e27 | ||
|
|
1ffe379129 | ||
|
|
3354d196fb | ||
|
|
bde576f3e5 | ||
|
|
ad5ffd7ed3 | ||
|
|
30255fd4bd | ||
|
|
b2d43decb3 | ||
|
|
bf80197015 | ||
|
|
05154b8d06 | ||
|
|
1f2276e6d0 | ||
|
|
c69f7d1ec4 | ||
|
|
e250d51857 | ||
|
|
c81813a9a2 | ||
|
|
8e218bbac4 | ||
|
|
7b8ae9f476 | ||
|
|
2501cbbf9d | ||
|
|
646b840924 | ||
|
|
ead5e970db | ||
|
|
93c2e36d07 | ||
|
|
d90b80d993 | ||
|
|
61afe6ed0f | ||
|
|
7f268e8823 | ||
|
|
7499db7060 | ||
|
|
b78a4d7d39 | ||
|
|
8fe1ba23e5 | ||
|
|
1732aa42ef | ||
|
|
095d8fd66e | ||
|
|
ca2d7d521c | ||
|
|
db22d545ba | ||
|
|
ab087d2a02 | ||
|
|
83cd2900a7 | ||
|
|
4f42ce8755 | ||
|
|
5e42db4703 | ||
|
|
77f06f29f9 | ||
|
|
cb535a406a | ||
|
|
2341b66209 | ||
|
|
b97ae61d93 | ||
|
|
a398f79757 | ||
|
|
02336ed796 | ||
|
|
8c181bfb5f | ||
|
|
5f0e2a592e | ||
|
|
3568a0cf05 | ||
|
|
b129045679 | ||
|
|
f06c6ea694 | ||
|
|
5a11b456a5 | ||
|
|
780df38cd4 | ||
|
|
10415ed301 | ||
|
|
c179225efe | ||
|
|
9403066b06 | ||
|
|
66137ce087 | ||
|
|
25875a7c00 | ||
|
|
478b3640eb | ||
|
|
24b0319328 | ||
|
|
d63243cba6 | ||
|
|
d7b7e47f6c | ||
|
|
c87b7233b8 | ||
|
|
f5404286be | ||
|
|
c364c8dc0b | ||
|
|
ddd6b2803c | ||
|
|
007f95f1fa | ||
|
|
dbd7fe1cc7 | ||
|
|
e301139f10 | ||
|
|
f7b4f70151 | ||
|
|
0cc97f63b1 | ||
|
|
ceaf7dcdef | ||
|
|
435a6284d5 | ||
|
|
706d2d4ca9 | ||
|
|
4bd873f2f7 | ||
|
|
c6cfae6b97 | ||
|
|
73feec5910 | ||
|
|
499e3af846 | ||
|
|
3afcc5215e | ||
|
|
a8c52947ae | ||
|
|
d9b189e5b6 | ||
|
|
6c846786ae | ||
|
|
092b7506e1 | ||
|
|
77b024bbc3 | ||
|
|
080c56b128 | ||
|
|
cba55752b9 | ||
|
|
7d013dc236 | ||
|
|
baf8e6389d | ||
|
|
0759ac1a52 | ||
|
|
264fdb9e8b | ||
|
|
af98396285 | ||
|
|
edd4faf064 | ||
|
|
f145c251d1 | ||
|
|
3a977f9ea9 | ||
|
|
15ae80757b | ||
|
|
2209deb0bf | ||
|
|
91ef2045bc | ||
|
|
a47fa6f30d | ||
|
|
30363dbc34 | ||
|
|
225f6f8298 | ||
|
|
18303f09b3 | ||
|
|
e9a8bc8b2e | ||
|
|
734e8c4f9c | ||
|
|
01b07571b2 | ||
|
|
9e6811995d | ||
|
|
4f90970027 | ||
|
|
0a3c39b8d4 | ||
|
|
115766e717 | ||
|
|
411a7a9cf7 | ||
|
|
a319efb964 | ||
|
|
c7315074b2 | ||
|
|
f60097b5e8 | ||
|
|
39cd2f19e5 | ||
|
|
20916f597c | ||
|
|
3322d7f06e | ||
|
|
2de7d96b46 | ||
|
|
0a369df512 | ||
|
|
0a68a30724 | ||
|
|
514db9a9e4 | ||
|
|
100e7f1c80 | ||
|
|
4f552bba85 | ||
|
|
9c8d884dc0 | ||
|
|
2569ab8d71 | ||
|
|
c5bfe516df | ||
|
|
d55bee35df | ||
|
|
717859a1f4 | ||
|
|
26c7cabef5 | ||
|
|
5d556b697b | ||
|
|
1b2e96e385 | ||
|
|
da1061a0c0 | ||
|
|
fb5b3377ba | ||
|
|
ba6fe9d9a9 | ||
|
|
8a10a07a5b | ||
|
|
9abb6187a4 | ||
|
|
53ecafb399 | ||
|
|
661245223d | ||
|
|
a136d275af | ||
|
|
287a3e545e | ||
|
|
bae2511c2e | ||
|
|
4cbdabdbdf | ||
|
|
98dd7b9d98 | ||
|
|
cb5d3c8ffd | ||
|
|
6f023b3d3c | ||
|
|
8111a4268b | ||
|
|
7297540729 | ||
|
|
32be98b061 | ||
|
|
f06f812509 | ||
|
|
f3c0bc0749 | ||
|
|
9288017ffe | ||
|
|
f7766f73b8 | ||
|
|
4184cd09f4 | ||
|
|
bbe52eea97 | ||
|
|
2c7f295cf4 | ||
|
|
f3fab4078d | ||
|
|
62c7aec839 | ||
|
|
e05505b09a | ||
|
|
c90c8d88dc | ||
|
|
5dacbb97e0 | ||
|
|
d9995996e7 | ||
|
|
7d9015cfb8 | ||
|
|
d9cc7ba3b8 | ||
|
|
0cdb85af0b | ||
|
|
665430bafb | ||
|
|
bd6526c278 | ||
|
|
589a2b6e68 | ||
|
|
0dfcf4346a | ||
|
|
a1576b83d2 | ||
|
|
20a24dff7c | ||
|
|
838f52ec44 | ||
|
|
85f514d6cc | ||
|
|
4591d305ed | ||
|
|
e1466bf47e | ||
|
|
45694ea55b | ||
|
|
dac19cba9c | ||
|
|
9ec1100289 | ||
|
|
7d33beacf3 | ||
|
|
f0fd0f50bb | ||
|
|
781a531137 | ||
|
|
71eda16c12 | ||
|
|
02411bc29f | ||
|
|
2b8a416c51 | ||
|
|
242f4e04c0 | ||
|
|
302aa2f838 | ||
|
|
04330a0a4d | ||
|
|
1d5f90b720 | ||
|
|
903856aa6c | ||
|
|
4f4f3a99c1 | ||
|
|
6148dfc3d9 | ||
|
|
9b05220e4e | ||
|
|
7cf2733e12 | ||
|
|
6aee75291a | ||
|
|
778d9690d2 | ||
|
|
6210def1bc | ||
|
|
c41eb07a63 | ||
|
|
600ff36f62 | ||
|
|
4fc9648845 | ||
|
|
9f9e4453bc | ||
|
|
4665a01827 | ||
|
|
0a6e80c6cf | ||
|
|
f6a00efeee | ||
|
|
50f321b939 | ||
|
|
631e55c5b7 | ||
|
|
eb4d486525 | ||
|
|
de7805dbed | ||
|
|
04e461b560 | ||
|
|
c8912b1b9e | ||
|
|
cdfff3e10a | ||
|
|
5ca02fa184 | ||
|
|
58886bb850 | ||
|
|
d335b326e8 | ||
|
|
77a6dc7de9 | ||
|
|
6d9ed6ee71 | ||
|
|
46955e6ada | ||
|
|
2c7c61a08e | ||
|
|
c0627d8a16 | ||
|
|
e5f99bf7e5 | ||
|
|
70f9bcd177 | ||
|
|
5b95726203 | ||
|
|
2b653f3ae5 | ||
|
|
ae50b74046 | ||
|
|
2b95f85f29 | ||
|
|
23f2f9b816 | ||
|
|
6f11409f79 | ||
|
|
e436872496 | ||
|
|
2a321a5c0d | ||
|
|
a81452b437 | ||
|
|
9df2e093b1 | ||
|
|
41ec10f49f | ||
|
|
9710e15316 | ||
|
|
2b9e4b0c15 | ||
|
|
a94a5bcf10 | ||
|
|
54dcc66a25 | ||
|
|
b3b6188074 | ||
|
|
ed0089bcb8 | ||
|
|
f2f9b7f47c | ||
|
|
082b7c9d44 | ||
|
|
7d7a799574 | ||
|
|
e97a2f0482 | ||
|
|
0b846e7f1f | ||
|
|
21f45c85d9 | ||
|
|
e5a71e81aa | ||
|
|
e1f00558cd | ||
|
|
c511c37756 | ||
|
|
0e37044bc3 | ||
|
|
f1d9b6b636 | ||
|
|
d841e2c09b | ||
|
|
2b7b737390 | ||
|
|
0b9cb47dd7 | ||
|
|
085adb57ce | ||
|
|
e5153d7bf3 | ||
|
|
95726f1530 | ||
|
|
dc6fb6d7a4 | ||
|
|
8c8ecef1ca | ||
|
|
1320d12aa7 | ||
|
|
c774f055d5 | ||
|
|
f5220c12ba | ||
|
|
9757c337fb | ||
|
|
dfa3b0912c | ||
|
|
261ba03efe | ||
|
|
a25b103c2f | ||
|
|
094223d854 | ||
|
|
981dfd9dba | ||
|
|
54010b47f7 | ||
|
|
2f866cda62 | ||
|
|
0946897262 | ||
|
|
d73bf1838e | ||
|
|
d1f6d46edd | ||
|
|
74af6f9343 | ||
|
|
b160f1a92a | ||
|
|
ec1989b850 | ||
|
|
36d8798355 | ||
|
|
1e8c28eff4 | ||
|
|
defce65315 | ||
|
|
615641f095 | ||
|
|
dba7dcb99d | ||
|
|
6683193aa9 | ||
|
|
d6e07d7715 | ||
|
|
fd0878cf30 | ||
|
|
05e0745d6b | ||
|
|
05e896c8f7 | ||
|
|
8ff5718782 | ||
|
|
dd4419568d | ||
|
|
5a6e6624e0 | ||
|
|
e21236b55e | ||
|
|
4b66d1286e | ||
|
|
d62f2989a8 | ||
|
|
c6714730b8 | ||
|
|
1a736942ae | ||
|
|
d5e62fa348 | ||
|
|
d0b45d87fe | ||
|
|
89ade6043d | ||
|
|
7d4da5cf5e | ||
|
|
fc013825d8 | ||
|
|
9fb6dcdeb8 | ||
|
|
996b4c30c2 | ||
|
|
a8acaa3681 | ||
|
|
5ef56b2843 | ||
|
|
e4d5fb99ca | ||
|
|
69d19f6aea | ||
|
|
162b6c7db0 | ||
|
|
1bc31120dd | ||
|
|
1740dba8f3 | ||
|
|
1e9f73df62 | ||
|
|
4cb0fb9c92 | ||
|
|
eb658a26a1 | ||
|
|
330e64867f | ||
|
|
fb679a0f85 | ||
|
|
6f803efb63 | ||
|
|
21e2ac6d8a | ||
|
|
3c1b5dda40 | ||
|
|
e7131470cd | ||
|
|
e2fbb6ef97 | ||
|
|
feb94ac72f | ||
|
|
b57f0aaf78 | ||
|
|
1c4645c1de | ||
|
|
cd1fffe054 | ||
|
|
bd533a2246 | ||
|
|
bc5674cdee | ||
|
|
303bb6c5a8 | ||
|
|
714f9b5e7a | ||
|
|
4dc76672d3 | ||
|
|
feae460c48 | ||
|
|
fde1e6f028 | ||
|
|
09c68763ff | ||
|
|
18ef15e2b8 | ||
|
|
5940138ddc | ||
|
|
d0cf3d1b48 | ||
|
|
2641637106 | ||
|
|
c3c68d2aa2 | ||
|
|
2712008ca1 | ||
|
|
61c237a25e | ||
|
|
dd27c4e854 | ||
|
|
9d162ef3f6 | ||
|
|
4d1a71f589 | ||
|
|
797298555c | ||
|
|
c4ec980527 | ||
|
|
d2f74c4942 | ||
|
|
67ad2032df | ||
|
|
27059d710b | ||
|
|
050b7e5e7b | ||
|
|
ff574e707d | ||
|
|
7e253d37c3 | ||
|
|
531b6f29fd | ||
|
|
189f2879c0 | ||
|
|
9172ff35ed | ||
|
|
f7047afa5c | ||
|
|
9c76665998 | ||
|
|
d63c7caad5 | ||
|
|
f2593ec7af | ||
|
|
0a4f4c1951 | ||
|
|
5f0f4ab417 | ||
|
|
86195d1937 | ||
|
|
1654b7abed | ||
|
|
2cf876d8f8 | ||
|
|
d5fd652f83 | ||
|
|
c126ea976f | ||
|
|
42ad031585 | ||
|
|
fe15f75256 | ||
|
|
573491e685 | ||
|
|
032b615de2 | ||
|
|
c1e8c3b2c4 | ||
|
|
7e0d4ae355 | ||
|
|
691248d8e4 | ||
|
|
2fb5bc3a15 | ||
|
|
77f7e8b84e | ||
|
|
c0473f492c | ||
|
|
b811e9c517 | ||
|
|
c88819b0d7 | ||
|
|
783d667968 | ||
|
|
ea62d2d8e2 | ||
|
|
54b65f8a74 | ||
|
|
d116f634a1 | ||
|
|
b02a4bf178 | ||
|
|
6138f96396 | ||
|
|
2ee5a009cd | ||
|
|
14be55f682 | ||
|
|
fdbe99b48a | ||
|
|
869a693bcf | ||
|
|
298542e353 | ||
|
|
f62ebe5971 | ||
|
|
1f0a68f5ed | ||
|
|
ecc1cd64ad | ||
|
|
d9718fb3f0 | ||
|
|
cefc1bf224 | ||
|
|
af2276d31f | ||
|
|
0c44250bcb | ||
|
|
1a066c7859 | ||
|
|
cc2e352c03 | ||
|
|
e77a9c1269 | ||
|
|
65aad4912b | ||
|
|
92454e65c3 | ||
|
|
45bbc22900 | ||
|
|
5c052684fb | ||
|
|
9cb18aefd9 | ||
|
|
de142614c7 | ||
|
|
fffb133003 | ||
|
|
d5844c35f8 | ||
|
|
758dfbdbfd | ||
|
|
85096b0404 | ||
|
|
6b356a52b9 | ||
|
|
36d6a9bd1f | ||
|
|
40ac2a6c4f | ||
|
|
e49234613d | ||
|
|
8242dec55f | ||
|
|
8139833afd | ||
|
|
58efebbf14 | ||
|
|
fe9b529c25 | ||
|
|
a39c486f31 | ||
|
|
3bb9f46330 | ||
|
|
9ea772d5a2 | ||
|
|
f710ed05b6 | ||
|
|
530c575606 | ||
|
|
49c2ac52d1 | ||
|
|
a39299e1ee | ||
|
|
35d99993bd | ||
|
|
99555dd11d | ||
|
|
583d3aa6dc | ||
|
|
81c5fbba05 | ||
|
|
4a0fb87eaf | ||
|
|
340d5a5080 | ||
|
|
1ee2c97951 | ||
|
|
8f26909611 | ||
|
|
c53daad41e | ||
|
|
98fa7aee3f | ||
|
|
8c2a74147b | ||
|
|
11d9f040be | ||
|
|
3c7d096e26 | ||
|
|
855d537230 | ||
|
|
30b42a427a | ||
|
|
d53599bdce | ||
|
|
5b2175f958 | ||
|
|
1a1dc023b6 | ||
|
|
21e082447c | ||
|
|
25a9d90d9e | ||
|
|
8a8d796c1f | ||
|
|
9a1e114009 | ||
|
|
53b31fa719 | ||
|
|
1958a1649c | ||
|
|
9153c38519 | ||
|
|
be5df6f59a | ||
|
|
907c378cdf | ||
|
|
2ae5c3dd78 | ||
|
|
4a62fee1b5 | ||
|
|
096344a2f1 | ||
|
|
9e83b6081d | ||
|
|
c67e84358c | ||
|
|
6f4f540e10 | ||
|
|
9a665a216b | ||
|
|
1f78546ba1 | ||
|
|
d05ba80080 | ||
|
|
a219338afd | ||
|
|
1f6436529e | ||
|
|
7f1cf3fa74 | ||
|
|
4fde55d85d | ||
|
|
52037fb145 | ||
|
|
2e8a32ab6e | ||
|
|
98952d72c9 | ||
|
|
c206cf8320 | ||
|
|
0ae459bd8f | ||
|
|
95a4047d9f | ||
|
|
8905356e8a | ||
|
|
1894440368 | ||
|
|
d63a746b05 | ||
|
|
b5e8e391a4 | ||
|
|
fea39881f5 | ||
|
|
e45b2953de | ||
|
|
319eed9d5e | ||
|
|
8e35a156be | ||
|
|
b0f5b6c5f0 | ||
|
|
2cf4691d1a | ||
|
|
3bb2e8a248 | ||
|
|
41d456840f | ||
|
|
bd7cbc5ba0 | ||
|
|
d174427f41 | ||
|
|
f729979da4 | ||
|
|
d151276b0c |
@@ -775,8 +775,7 @@ exports[`better eslint`] = {
|
|||||||
[0, 0, 0, "Unexpected any. Specify a different type.", "0"]
|
[0, 0, 0, "Unexpected any. Specify a different type.", "0"]
|
||||||
],
|
],
|
||||||
"packages/grafana-runtime/src/components/DataSourcePicker.tsx:5381": [
|
"packages/grafana-runtime/src/components/DataSourcePicker.tsx:5381": [
|
||||||
[0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"],
|
[0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"]
|
||||||
[0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "1"]
|
|
||||||
],
|
],
|
||||||
"packages/grafana-runtime/src/components/PanelRenderer.tsx:5381": [
|
"packages/grafana-runtime/src/components/PanelRenderer.tsx:5381": [
|
||||||
[0, 0, 0, "Unexpected any. Specify a different type.", "0"],
|
[0, 0, 0, "Unexpected any. Specify a different type.", "0"],
|
||||||
@@ -863,7 +862,7 @@ exports[`better eslint`] = {
|
|||||||
"packages/grafana-schema/src/veneer/dashboard.types.ts:5381": [
|
"packages/grafana-schema/src/veneer/dashboard.types.ts:5381": [
|
||||||
[0, 0, 0, "Unexpected any. Specify a different type.", "0"],
|
[0, 0, 0, "Unexpected any. Specify a different type.", "0"],
|
||||||
[0, 0, 0, "Unexpected any. Specify a different type.", "1"],
|
[0, 0, 0, "Unexpected any. Specify a different type.", "1"],
|
||||||
[0, 0, 0, "Unexpected any. Specify a different type.", "2"],
|
[0, 0, 0, "Do not use any type assertions.", "2"],
|
||||||
[0, 0, 0, "Do not use any type assertions.", "3"],
|
[0, 0, 0, "Do not use any type assertions.", "3"],
|
||||||
[0, 0, 0, "Do not use any type assertions.", "4"],
|
[0, 0, 0, "Do not use any type assertions.", "4"],
|
||||||
[0, 0, 0, "Do not use any type assertions.", "5"],
|
[0, 0, 0, "Do not use any type assertions.", "5"],
|
||||||
@@ -941,9 +940,7 @@ exports[`better eslint`] = {
|
|||||||
[0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "2"]
|
[0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "2"]
|
||||||
],
|
],
|
||||||
"packages/grafana-ui/src/components/Drawer/Drawer.tsx:5381": [
|
"packages/grafana-ui/src/components/Drawer/Drawer.tsx:5381": [
|
||||||
[0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"],
|
[0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"]
|
||||||
[0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "1"],
|
|
||||||
[0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "2"]
|
|
||||||
],
|
],
|
||||||
"packages/grafana-ui/src/components/Dropdown/ButtonSelect.tsx:5381": [
|
"packages/grafana-ui/src/components/Dropdown/ButtonSelect.tsx:5381": [
|
||||||
[0, 0, 0, "Do not use any type assertions.", "0"]
|
[0, 0, 0, "Do not use any type assertions.", "0"]
|
||||||
@@ -1464,6 +1461,9 @@ exports[`better eslint`] = {
|
|||||||
[0, 0, 0, "Unexpected any. Specify a different type.", "5"],
|
[0, 0, 0, "Unexpected any. Specify a different type.", "5"],
|
||||||
[0, 0, 0, "Unexpected any. Specify a different type.", "6"]
|
[0, 0, 0, "Unexpected any. Specify a different type.", "6"]
|
||||||
],
|
],
|
||||||
|
"public/app/core/components/AppChrome/News/NewsContainer.tsx:5381": [
|
||||||
|
[0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"]
|
||||||
|
],
|
||||||
"public/app/core/components/AppChrome/SectionNav/SectionNavItem.tsx:5381": [
|
"public/app/core/components/AppChrome/SectionNav/SectionNavItem.tsx:5381": [
|
||||||
[0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"]
|
[0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"]
|
||||||
],
|
],
|
||||||
@@ -2233,10 +2233,6 @@ exports[`better eslint`] = {
|
|||||||
[0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "2"],
|
[0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "2"],
|
||||||
[0, 0, 0, "Do not use any type assertions.", "3"]
|
[0, 0, 0, "Do not use any type assertions.", "3"]
|
||||||
],
|
],
|
||||||
"public/app/features/dashboard/components/PanelEditor/VisualizationButton.tsx:5381": [
|
|
||||||
[0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"],
|
|
||||||
[0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "1"]
|
|
||||||
],
|
|
||||||
"public/app/features/dashboard/components/PanelEditor/VisualizationSelectPane.tsx:5381": [
|
"public/app/features/dashboard/components/PanelEditor/VisualizationSelectPane.tsx:5381": [
|
||||||
[0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"]
|
[0, 0, 0, "Use data-testid for E2E selectors instead of aria-label", "0"]
|
||||||
],
|
],
|
||||||
@@ -2373,8 +2369,7 @@ exports[`better eslint`] = {
|
|||||||
[0, 0, 0, "Unexpected any. Specify a different type.", "1"],
|
[0, 0, 0, "Unexpected any. Specify a different type.", "1"],
|
||||||
[0, 0, 0, "Unexpected any. Specify a different type.", "2"],
|
[0, 0, 0, "Unexpected any. Specify a different type.", "2"],
|
||||||
[0, 0, 0, "Unexpected any. Specify a different type.", "3"],
|
[0, 0, 0, "Unexpected any. Specify a different type.", "3"],
|
||||||
[0, 0, 0, "Unexpected any. Specify a different type.", "4"],
|
[0, 0, 0, "Unexpected any. Specify a different type.", "4"]
|
||||||
[0, 0, 0, "Unexpected any. Specify a different type.", "5"]
|
|
||||||
],
|
],
|
||||||
"public/app/features/dashboard/state/DashboardMigrator.test.ts:5381": [
|
"public/app/features/dashboard/state/DashboardMigrator.test.ts:5381": [
|
||||||
[0, 0, 0, "Unexpected any. Specify a different type.", "0"],
|
[0, 0, 0, "Unexpected any. Specify a different type.", "0"],
|
||||||
@@ -2653,8 +2648,7 @@ exports[`better eslint`] = {
|
|||||||
[0, 0, 0, "Unexpected any. Specify a different type.", "1"]
|
[0, 0, 0, "Unexpected any. Specify a different type.", "1"]
|
||||||
],
|
],
|
||||||
"public/app/features/dimensions/types.ts:5381": [
|
"public/app/features/dimensions/types.ts:5381": [
|
||||||
[0, 0, 0, "Unexpected any. Specify a different type.", "0"],
|
[0, 0, 0, "Unexpected any. Specify a different type.", "0"]
|
||||||
[0, 0, 0, "Unexpected any. Specify a different type.", "1"]
|
|
||||||
],
|
],
|
||||||
"public/app/features/dimensions/utils.ts:5381": [
|
"public/app/features/dimensions/utils.ts:5381": [
|
||||||
[0, 0, 0, "Do not use any type assertions.", "0"],
|
[0, 0, 0, "Do not use any type assertions.", "0"],
|
||||||
@@ -3639,11 +3633,13 @@ exports[`better eslint`] = {
|
|||||||
[0, 0, 0, "Do not use any type assertions.", "6"],
|
[0, 0, 0, "Do not use any type assertions.", "6"],
|
||||||
[0, 0, 0, "Do not use any type assertions.", "7"],
|
[0, 0, 0, "Do not use any type assertions.", "7"],
|
||||||
[0, 0, 0, "Do not use any type assertions.", "8"],
|
[0, 0, 0, "Do not use any type assertions.", "8"],
|
||||||
[0, 0, 0, "Unexpected any. Specify a different type.", "9"],
|
[0, 0, 0, "Do not use any type assertions.", "9"],
|
||||||
[0, 0, 0, "Unexpected any. Specify a different type.", "10"],
|
[0, 0, 0, "Do not use any type assertions.", "10"],
|
||||||
[0, 0, 0, "Do not use any type assertions.", "11"],
|
[0, 0, 0, "Unexpected any. Specify a different type.", "11"],
|
||||||
[0, 0, 0, "Unexpected any. Specify a different type.", "12"],
|
[0, 0, 0, "Unexpected any. Specify a different type.", "12"],
|
||||||
[0, 0, 0, "Unexpected any. Specify a different type.", "13"]
|
[0, 0, 0, "Do not use any type assertions.", "13"],
|
||||||
|
[0, 0, 0, "Unexpected any. Specify a different type.", "14"],
|
||||||
|
[0, 0, 0, "Unexpected any. Specify a different type.", "15"]
|
||||||
],
|
],
|
||||||
"public/app/features/variables/state/keyedVariablesReducer.ts:5381": [
|
"public/app/features/variables/state/keyedVariablesReducer.ts:5381": [
|
||||||
[0, 0, 0, "Unexpected any. Specify a different type.", "0"],
|
[0, 0, 0, "Unexpected any. Specify a different type.", "0"],
|
||||||
@@ -4894,9 +4890,7 @@ exports[`better eslint`] = {
|
|||||||
[0, 0, 0, "Unexpected any. Specify a different type.", "11"],
|
[0, 0, 0, "Unexpected any. Specify a different type.", "11"],
|
||||||
[0, 0, 0, "Unexpected any. Specify a different type.", "12"],
|
[0, 0, 0, "Unexpected any. Specify a different type.", "12"],
|
||||||
[0, 0, 0, "Unexpected any. Specify a different type.", "13"],
|
[0, 0, 0, "Unexpected any. Specify a different type.", "13"],
|
||||||
[0, 0, 0, "Unexpected any. Specify a different type.", "14"],
|
[0, 0, 0, "Unexpected any. Specify a different type.", "14"]
|
||||||
[0, 0, 0, "Unexpected any. Specify a different type.", "15"],
|
|
||||||
[0, 0, 0, "Unexpected any. Specify a different type.", "16"]
|
|
||||||
],
|
],
|
||||||
"public/app/plugins/datasource/tempo/datasource.ts:5381": [
|
"public/app/plugins/datasource/tempo/datasource.ts:5381": [
|
||||||
[0, 0, 0, "Do not use any type assertions.", "0"],
|
[0, 0, 0, "Do not use any type assertions.", "0"],
|
||||||
@@ -5580,8 +5574,7 @@ exports[`better eslint`] = {
|
|||||||
[0, 0, 0, "Do not use any type assertions.", "0"],
|
[0, 0, 0, "Do not use any type assertions.", "0"],
|
||||||
[0, 0, 0, "Unexpected any. Specify a different type.", "1"],
|
[0, 0, 0, "Unexpected any. Specify a different type.", "1"],
|
||||||
[0, 0, 0, "Do not use any type assertions.", "2"],
|
[0, 0, 0, "Do not use any type assertions.", "2"],
|
||||||
[0, 0, 0, "Unexpected any. Specify a different type.", "3"],
|
[0, 0, 0, "Unexpected any. Specify a different type.", "3"]
|
||||||
[0, 0, 0, "Do not use any type assertions.", "4"]
|
|
||||||
],
|
],
|
||||||
"public/app/plugins/panel/heatmap/palettes.ts:5381": [
|
"public/app/plugins/panel/heatmap/palettes.ts:5381": [
|
||||||
[0, 0, 0, "Do not use any type assertions.", "0"],
|
[0, 0, 0, "Do not use any type assertions.", "0"],
|
||||||
@@ -5946,11 +5939,7 @@ exports[`better eslint`] = {
|
|||||||
[0, 0, 0, "Do not use any type assertions.", "8"],
|
[0, 0, 0, "Do not use any type assertions.", "8"],
|
||||||
[0, 0, 0, "Unexpected any. Specify a different type.", "9"],
|
[0, 0, 0, "Unexpected any. Specify a different type.", "9"],
|
||||||
[0, 0, 0, "Do not use any type assertions.", "10"],
|
[0, 0, 0, "Do not use any type assertions.", "10"],
|
||||||
[0, 0, 0, "Unexpected any. Specify a different type.", "11"],
|
[0, 0, 0, "Do not use any type assertions.", "11"]
|
||||||
[0, 0, 0, "Do not use any type assertions.", "12"],
|
|
||||||
[0, 0, 0, "Do not use any type assertions.", "13"],
|
|
||||||
[0, 0, 0, "Do not use any type assertions.", "14"],
|
|
||||||
[0, 0, 0, "Do not use any type assertions.", "15"]
|
|
||||||
],
|
],
|
||||||
"public/app/polyfills/old-mediaquerylist.ts:5381": [
|
"public/app/polyfills/old-mediaquerylist.ts:5381": [
|
||||||
[0, 0, 0, "Unexpected any. Specify a different type.", "0"]
|
[0, 0, 0, "Unexpected any. Specify a different type.", "0"]
|
||||||
|
|||||||
23
.drone.star
23
.drone.star
@@ -11,7 +11,6 @@ load("scripts/drone/events/pr.star", "pr_pipelines")
|
|||||||
load("scripts/drone/events/main.star", "main_pipelines")
|
load("scripts/drone/events/main.star", "main_pipelines")
|
||||||
load(
|
load(
|
||||||
"scripts/drone/events/release.star",
|
"scripts/drone/events/release.star",
|
||||||
"artifacts_page_pipeline",
|
|
||||||
"enterprise2_pipelines",
|
"enterprise2_pipelines",
|
||||||
"enterprise_pipelines",
|
"enterprise_pipelines",
|
||||||
"integration_test_pipelines",
|
"integration_test_pipelines",
|
||||||
@@ -19,14 +18,22 @@ load(
|
|||||||
"publish_artifacts_pipelines",
|
"publish_artifacts_pipelines",
|
||||||
"publish_npm_pipelines",
|
"publish_npm_pipelines",
|
||||||
"publish_packages_pipeline",
|
"publish_packages_pipeline",
|
||||||
|
"verify_release_pipeline",
|
||||||
)
|
)
|
||||||
load(
|
load(
|
||||||
"scripts/drone/pipelines/publish_images.star",
|
"scripts/drone/pipelines/publish_images.star",
|
||||||
"publish_image_pipelines_public",
|
"publish_image_pipelines_public",
|
||||||
"publish_image_pipelines_security",
|
)
|
||||||
|
load(
|
||||||
|
"scripts/drone/pipelines/ci_images.star",
|
||||||
|
"publish_ci_windows_test_image_pipeline",
|
||||||
)
|
)
|
||||||
load("scripts/drone/pipelines/github.star", "publish_github_pipeline")
|
load("scripts/drone/pipelines/github.star", "publish_github_pipeline")
|
||||||
load("scripts/drone/pipelines/aws_marketplace.star", "publish_aws_marketplace_pipeline")
|
load("scripts/drone/pipelines/aws_marketplace.star", "publish_aws_marketplace_pipeline")
|
||||||
|
load(
|
||||||
|
"scripts/drone/pipelines/windows.star",
|
||||||
|
"windows_test_backend",
|
||||||
|
)
|
||||||
load("scripts/drone/version.star", "version_branch_pipelines")
|
load("scripts/drone/version.star", "version_branch_pipelines")
|
||||||
load("scripts/drone/events/cron.star", "cronjobs")
|
load("scripts/drone/events/cron.star", "cronjobs")
|
||||||
load("scripts/drone/vault.star", "secrets")
|
load("scripts/drone/vault.star", "secrets")
|
||||||
@@ -38,12 +45,7 @@ def main(_ctx):
|
|||||||
oss_pipelines() +
|
oss_pipelines() +
|
||||||
enterprise_pipelines() +
|
enterprise_pipelines() +
|
||||||
enterprise2_pipelines() +
|
enterprise2_pipelines() +
|
||||||
enterprise2_pipelines(
|
|
||||||
prefix = "custom-",
|
|
||||||
trigger = {"event": ["custom"]},
|
|
||||||
) +
|
|
||||||
publish_image_pipelines_public() +
|
publish_image_pipelines_public() +
|
||||||
publish_image_pipelines_security() +
|
|
||||||
publish_github_pipeline("public") +
|
publish_github_pipeline("public") +
|
||||||
publish_github_pipeline("security") +
|
publish_github_pipeline("security") +
|
||||||
publish_aws_marketplace_pipeline("public") +
|
publish_aws_marketplace_pipeline("public") +
|
||||||
@@ -51,9 +53,14 @@ def main(_ctx):
|
|||||||
publish_artifacts_pipelines("public") +
|
publish_artifacts_pipelines("public") +
|
||||||
publish_npm_pipelines() +
|
publish_npm_pipelines() +
|
||||||
publish_packages_pipeline() +
|
publish_packages_pipeline() +
|
||||||
artifacts_page_pipeline() +
|
[verify_release_pipeline()] +
|
||||||
|
[windows_test_backend({
|
||||||
|
"event": ["promote"],
|
||||||
|
"target": ["test-windows"],
|
||||||
|
}, "oss", "testing")] +
|
||||||
version_branch_pipelines() +
|
version_branch_pipelines() +
|
||||||
integration_test_pipelines() +
|
integration_test_pipelines() +
|
||||||
|
publish_ci_windows_test_image_pipeline() +
|
||||||
cronjobs() +
|
cronjobs() +
|
||||||
secrets()
|
secrets()
|
||||||
)
|
)
|
||||||
|
|||||||
1408
.drone.yml
1408
.drone.yml
File diff suppressed because it is too large
Load Diff
4
.github/CODEOWNERS
vendored
4
.github/CODEOWNERS
vendored
@@ -229,6 +229,7 @@
|
|||||||
/Dockerfile @grafana/grafana-delivery
|
/Dockerfile @grafana/grafana-delivery
|
||||||
/Makefile @grafana/grafana-delivery
|
/Makefile @grafana/grafana-delivery
|
||||||
/scripts/build/ @grafana/grafana-delivery
|
/scripts/build/ @grafana/grafana-delivery
|
||||||
|
/scripts/list-release-artifacts.sh @grafana/grafana-delivery
|
||||||
|
|
||||||
# OSS Plugin Partnerships backend code
|
# OSS Plugin Partnerships backend code
|
||||||
/pkg/tsdb/cloudwatch/ @grafana/aws-datasources
|
/pkg/tsdb/cloudwatch/ @grafana/aws-datasources
|
||||||
@@ -433,10 +434,10 @@ lerna.json @grafana/frontend-ops
|
|||||||
/public/app/types/ @grafana/grafana-frontend-platform
|
/public/app/types/ @grafana/grafana-frontend-platform
|
||||||
/public/dashboards/ @grafana/dashboards-squad
|
/public/dashboards/ @grafana/dashboards-squad
|
||||||
/public/fonts/ @grafana/alerting-squad-frontend
|
/public/fonts/ @grafana/alerting-squad-frontend
|
||||||
/public/emails/ @grafana/grafana-frontend-platform
|
|
||||||
/public/gazetteer/ @ryantxu
|
/public/gazetteer/ @ryantxu
|
||||||
/public/img/ @grafana/grafana-frontend-platform
|
/public/img/ @grafana/grafana-frontend-platform
|
||||||
/public/lib/ @grafana/grafana-frontend-platform
|
/public/lib/ @grafana/grafana-frontend-platform
|
||||||
|
/public/lib/monaco-languages/kusto.ts @grafana/partner-datasources
|
||||||
/public/maps/ @ryantxu
|
/public/maps/ @ryantxu
|
||||||
/public/robots.txt @grafana/frontend-ops
|
/public/robots.txt @grafana/frontend-ops
|
||||||
/public/sass/ @grafana/grafana-frontend-platform
|
/public/sass/ @grafana/grafana-frontend-platform
|
||||||
@@ -618,6 +619,7 @@ embed.go @grafana/grafana-as-code
|
|||||||
/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md @grafanabot
|
/docs/sources/setup-grafana/configure-grafana/feature-toggles/index.md @grafanabot
|
||||||
/pkg/services/featuremgmt/toggles_gen.csv @grafanabot
|
/pkg/services/featuremgmt/toggles_gen.csv @grafanabot
|
||||||
/pkg/services/featuremgmt/toggles_gen.go @grafanabot
|
/pkg/services/featuremgmt/toggles_gen.go @grafanabot
|
||||||
|
/public/emails/ @grafanabot
|
||||||
|
|
||||||
# Conf
|
# Conf
|
||||||
/conf/defaults.ini @torkelo
|
/conf/defaults.ini @torkelo
|
||||||
|
|||||||
8
.github/workflows/backport.yml
vendored
8
.github/workflows/backport.yml
vendored
@@ -17,10 +17,16 @@ jobs:
|
|||||||
ref: main
|
ref: main
|
||||||
- name: Install Actions
|
- name: Install Actions
|
||||||
run: npm install --production --prefix ./actions
|
run: npm install --production --prefix ./actions
|
||||||
|
- name: "Generate token"
|
||||||
|
id: generate_token
|
||||||
|
uses: tibdex/github-app-token@b62528385c34dbc9f38e5f4225ac829252d1ea92
|
||||||
|
with:
|
||||||
|
app_id: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_ID }}
|
||||||
|
private_key: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_PEM }}
|
||||||
- name: Run backport
|
- name: Run backport
|
||||||
uses: ./actions/backport
|
uses: ./actions/backport
|
||||||
with:
|
with:
|
||||||
metricsWriteAPIKey: ${{secrets.GRAFANA_MISC_STATS_API_KEY}}
|
metricsWriteAPIKey: ${{secrets.GRAFANA_MISC_STATS_API_KEY}}
|
||||||
token: ${{secrets.GH_BOT_ACCESS_TOKEN}}
|
token: ${{ steps.generate_token.outputs.token }}
|
||||||
labelsToAdd: "backport,no-changelog"
|
labelsToAdd: "backport,no-changelog"
|
||||||
title: "[{{base}}] {{originalTitle}}"
|
title: "[{{base}}] {{originalTitle}}"
|
||||||
|
|||||||
22
.github/workflows/bump-version.yml
vendored
22
.github/workflows/bump-version.yml
vendored
@@ -6,12 +6,12 @@ on:
|
|||||||
description: 'Needs to match, exactly, the name of a milestone. The version to be released please respect: major.minor.patch or major.minor.patch-beta<number> format. example: 7.4.3 or 7.4.3-beta1'
|
description: 'Needs to match, exactly, the name of a milestone. The version to be released please respect: major.minor.patch or major.minor.patch-beta<number> format. example: 7.4.3 or 7.4.3-beta1'
|
||||||
required: true
|
required: true
|
||||||
env:
|
env:
|
||||||
YARN_ENABLE_IMMUTABLE_INSTALLS: false
|
YARN_ENABLE_IMMUTABLE_INSTALLS: false
|
||||||
jobs:
|
jobs:
|
||||||
main:
|
main:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
# This is a basic workflow to help you get started with Actions
|
# This is a basic workflow to help you get started with Actions
|
||||||
- uses: actions-ecosystem/action-regex-match@v2.0.2
|
- uses: actions-ecosystem/action-regex-match@v2.0.2
|
||||||
if: ${{ github.event.inputs.version != '' }}
|
if: ${{ github.event.inputs.version != '' }}
|
||||||
id: regex-match
|
id: regex-match
|
||||||
@@ -49,14 +49,6 @@ jobs:
|
|||||||
echo "branch_name=v${{steps.regex-match.outputs.group1}}" >> $GITHUB_OUTPUT
|
echo "branch_name=v${{steps.regex-match.outputs.group1}}" >> $GITHUB_OUTPUT
|
||||||
echo "branch_exist=$(git ls-remote --heads https://github.com/grafana/grafana.git v${{ steps.regex-match.outputs.group1 }}.x | wc -l)" >> $GITHUB_OUTPUT
|
echo "branch_exist=$(git ls-remote --heads https://github.com/grafana/grafana.git v${{ steps.regex-match.outputs.group1 }}.x | wc -l)" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Check input version is aligned with branch(main)
|
|
||||||
if: ${{ github.event.inputs.version != '' && steps.intermedia.outputs.branch_exist == '0' && !contains(github.event.inputs.version, 'pre') && !contains(steps.intermedia.outputs.short_ref, 'main') }}
|
|
||||||
run: |
|
|
||||||
echo "When you want to deliver a new new minor version, you might want to create a new branch first \
|
|
||||||
with naming convention v[major].[minor].x, and just run the workflow on that branch. \
|
|
||||||
Run the workflow on main only when needed"
|
|
||||||
exit 1
|
|
||||||
|
|
||||||
- name: Checkout Actions
|
- name: Checkout Actions
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
@@ -68,8 +60,14 @@ jobs:
|
|||||||
node-version: '16'
|
node-version: '16'
|
||||||
- name: Install Actions
|
- name: Install Actions
|
||||||
run: npm install --production --prefix ./actions
|
run: npm install --production --prefix ./actions
|
||||||
- name: Run bump version (manually invoked)
|
- name: "Generate token"
|
||||||
|
id: generate_token
|
||||||
|
uses: tibdex/github-app-token@b62528385c34dbc9f38e5f4225ac829252d1ea92
|
||||||
|
with:
|
||||||
|
app_id: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_ID }}
|
||||||
|
private_key: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_PEM }}
|
||||||
|
- name: Run bump version (manually invoked)
|
||||||
uses: ./actions/bump-version
|
uses: ./actions/bump-version
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.GH_BOT_ACCESS_TOKEN }}
|
token: ${{ steps.generate_token.outputs.token }}
|
||||||
metricsWriteAPIKey: ${{ secrets.GRAFANA_MISC_STATS_API_KEY }}
|
metricsWriteAPIKey: ${{ secrets.GRAFANA_MISC_STATS_API_KEY }}
|
||||||
|
|||||||
14
.github/workflows/close-milestone.yml
vendored
14
.github/workflows/close-milestone.yml
vendored
@@ -11,9 +11,7 @@ on:
|
|||||||
description: Needs to match, exactly, the name of a milestone
|
description: Needs to match, exactly, the name of a milestone
|
||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
secrets:
|
|
||||||
token:
|
|
||||||
required: true
|
|
||||||
jobs:
|
jobs:
|
||||||
main:
|
main:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@@ -26,14 +24,20 @@ jobs:
|
|||||||
ref: main
|
ref: main
|
||||||
- name: Install Actions
|
- name: Install Actions
|
||||||
run: npm install --production --prefix ./actions
|
run: npm install --production --prefix ./actions
|
||||||
|
- name: "Generate token"
|
||||||
|
id: generate_token
|
||||||
|
uses: tibdex/github-app-token@b62528385c34dbc9f38e5f4225ac829252d1ea92
|
||||||
|
with:
|
||||||
|
app_id: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_ID }}
|
||||||
|
private_key: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_PEM }}
|
||||||
- name: Close milestone (manually invoked)
|
- name: Close milestone (manually invoked)
|
||||||
if: ${{ github.event.inputs.version != '' }}
|
if: ${{ github.event.inputs.version != '' }}
|
||||||
uses: ./actions/close-milestone
|
uses: ./actions/close-milestone
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.GH_BOT_ACCESS_TOKEN }}
|
token: ${{ steps.generate_token.outputs.token }}
|
||||||
- name: Close milestone (workflow invoked)
|
- name: Close milestone (workflow invoked)
|
||||||
if: ${{ inputs.version_call != '' }}
|
if: ${{ inputs.version_call != '' }}
|
||||||
uses: ./actions/close-milestone
|
uses: ./actions/close-milestone
|
||||||
with:
|
with:
|
||||||
version_call: ${{ inputs.version_call }}
|
version_call: ${{ inputs.version_call }}
|
||||||
token: ${{ secrets.token }}
|
token: ${{ steps.generate_token.outputs.token }}
|
||||||
|
|||||||
19
.github/workflows/doc-validator.yml
vendored
19
.github/workflows/doc-validator.yml
vendored
@@ -7,10 +7,23 @@ jobs:
|
|||||||
doc-validator:
|
doc-validator:
|
||||||
runs-on: "ubuntu-latest"
|
runs-on: "ubuntu-latest"
|
||||||
container:
|
container:
|
||||||
image: "grafana/doc-validator:v1.10.0"
|
image: "grafana/doc-validator:v3.0.0"
|
||||||
steps:
|
steps:
|
||||||
- name: "Checkout code"
|
- name: "Checkout code"
|
||||||
uses: "actions/checkout@v3"
|
uses: "actions/checkout@v3"
|
||||||
- name: "Run doc-validator tool"
|
- name: "Run doc-validator tool"
|
||||||
# Ensure that the CI always passes until all errors are resolved.
|
# Only run doc-validator on specific directories.
|
||||||
run: "doc-validator --skip-image-validation ./docs/sources /docs/grafana/latest || true"
|
run: >
|
||||||
|
doc-validator
|
||||||
|
'--include=^docs/sources/(?:alerting|fundamentals|getting-started|introduction|setup-grafana|upgrade-guide|whatsnew/whats-new-in-v(?:9|10))/.+\.md$'
|
||||||
|
'--skip-checks=^(?:image.+|canonical-does-not-match-pretty-URL)$'
|
||||||
|
./docs/sources
|
||||||
|
/docs/grafana/latest
|
||||||
|
| reviewdog
|
||||||
|
-f=rdjsonl
|
||||||
|
--fail-on-error
|
||||||
|
--filter-mode=nofilter
|
||||||
|
--name=doc-validator
|
||||||
|
--reporter=github-pr-review
|
||||||
|
env:
|
||||||
|
REVIEWDOG_GITHUB_API_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
|
||||||
|
|||||||
12
.github/workflows/github-release.yml
vendored
12
.github/workflows/github-release.yml
vendored
@@ -3,7 +3,7 @@ on:
|
|||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
inputs:
|
inputs:
|
||||||
version:
|
version:
|
||||||
required: true
|
required: true
|
||||||
description: Needs to match, exactly, the name of a milestone (NO v prefix)
|
description: Needs to match, exactly, the name of a milestone (NO v prefix)
|
||||||
jobs:
|
jobs:
|
||||||
main:
|
main:
|
||||||
@@ -14,11 +14,17 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
repository: "grafana/grafana-github-actions"
|
repository: "grafana/grafana-github-actions"
|
||||||
path: ./actions
|
path: ./actions
|
||||||
ref: main
|
ref: main
|
||||||
- name: Install Actions
|
- name: Install Actions
|
||||||
run: npm install --production --prefix ./actions
|
run: npm install --production --prefix ./actions
|
||||||
|
- name: "Generate token"
|
||||||
|
id: generate_token
|
||||||
|
uses: tibdex/github-app-token@b62528385c34dbc9f38e5f4225ac829252d1ea92
|
||||||
|
with:
|
||||||
|
app_id: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_ID }}
|
||||||
|
private_key: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_PEM }}
|
||||||
- name: Run github release action
|
- name: Run github release action
|
||||||
uses: ./actions/github-release
|
uses: ./actions/github-release
|
||||||
with:
|
with:
|
||||||
token: ${{secrets.GH_BOT_ACCESS_TOKEN}}
|
token: ${{ steps.generate_token.outputs.token }}
|
||||||
metricsWriteAPIKey: ${{secrets.GRAFANA_MISC_STATS_API_KEY}}
|
metricsWriteAPIKey: ${{secrets.GRAFANA_MISC_STATS_API_KEY}}
|
||||||
|
|||||||
10
.github/workflows/milestone.yml
vendored
10
.github/workflows/milestone.yml
vendored
@@ -3,19 +3,17 @@ on:
|
|||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
inputs:
|
inputs:
|
||||||
version_input:
|
version_input:
|
||||||
description: 'The version to be released please respect: major.minor.patch or major.minor.patch-beta<number> format. example: 7.4.3 or 7.4.3-beta1'
|
description: 'The version to be released please respect: major.minor.patch, major.minor.patch-preview or major.minor.patch-preview<number> format. example: 7.4.3, 7.4.3-preview or 7.4.3-preview1'
|
||||||
required: true
|
required: true
|
||||||
jobs:
|
jobs:
|
||||||
call-remove-milestone:
|
call-remove-milestone:
|
||||||
uses: grafana/grafana/.github/workflows/remove-milestone.yml@main
|
uses: grafana/grafana/.github/workflows/remove-milestone.yml@main
|
||||||
with:
|
with:
|
||||||
version_call: ${{ github.event.inputs.version_input }}
|
version_call: ${{ github.event.inputs.version_input }}
|
||||||
secrets:
|
secrets: inherit
|
||||||
token: ${{ secrets.GH_BOT_ACCESS_TOKEN }}
|
|
||||||
call-close-milestone:
|
call-close-milestone:
|
||||||
uses: grafana/grafana/.github/workflows/close-milestone.yml@main
|
uses: grafana/grafana/.github/workflows/close-milestone.yml@main
|
||||||
with:
|
with:
|
||||||
version_call: ${{ github.event.inputs.version_input }}
|
version_call: ${{ github.event.inputs.version_input }}
|
||||||
secrets:
|
secrets: inherit
|
||||||
token: ${{ secrets.GH_BOT_ACCESS_TOKEN }}
|
needs: call-remove-milestone
|
||||||
needs: call-remove-milestone
|
|
||||||
|
|||||||
@@ -28,23 +28,13 @@ jobs:
|
|||||||
- name: "Install Actions from library"
|
- name: "Install Actions from library"
|
||||||
run: "npm install --production --prefix ./actions"
|
run: "npm install --production --prefix ./actions"
|
||||||
|
|
||||||
- name: "Determine if there is a matching release tag"
|
|
||||||
id: "has-matching-release-tag"
|
|
||||||
uses: "./actions/has-matching-release-tag"
|
|
||||||
with:
|
|
||||||
ref_name: "${{ github.ref_name }}"
|
|
||||||
release_tag_regexp: "^v(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)$"
|
|
||||||
release_branch_regexp: "^v(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.x$"
|
|
||||||
|
|
||||||
- name: "Determine technical documentation version"
|
- name: "Determine technical documentation version"
|
||||||
if: "steps.has-matching-release-tag.outputs.bool == 'true'"
|
|
||||||
uses: "./actions/docs-target"
|
uses: "./actions/docs-target"
|
||||||
id: "target"
|
id: "target"
|
||||||
with:
|
with:
|
||||||
ref_name: "${{ github.ref_name }}"
|
ref_name: "${{ github.ref_name }}"
|
||||||
|
|
||||||
- name: "Clone website-sync Action"
|
- name: "Clone website-sync Action"
|
||||||
if: "steps.has-matching-release-tag.outputs.bool == 'true'"
|
|
||||||
# WEBSITE_SYNC_TOKEN is a fine-grained GitHub Personal Access Token that expires.
|
# WEBSITE_SYNC_TOKEN is a fine-grained GitHub Personal Access Token that expires.
|
||||||
# It must be regenerated in the grafanabot GitHub account and requires a Grafana organization
|
# It must be regenerated in the grafanabot GitHub account and requires a Grafana organization
|
||||||
# GitHub administrator to update the organization secret.
|
# GitHub administrator to update the organization secret.
|
||||||
@@ -52,7 +42,6 @@ jobs:
|
|||||||
run: "git clone --single-branch --no-tags --depth 1 -b master https://grafanabot:${{ secrets.WEBSITE_SYNC_TOKEN }}@github.com/grafana/website-sync ./.github/actions/website-sync"
|
run: "git clone --single-branch --no-tags --depth 1 -b master https://grafanabot:${{ secrets.WEBSITE_SYNC_TOKEN }}@github.com/grafana/website-sync ./.github/actions/website-sync"
|
||||||
|
|
||||||
- name: "Publish to website repository (release)"
|
- name: "Publish to website repository (release)"
|
||||||
if: "steps.has-matching-release-tag.outputs.bool == 'true'"
|
|
||||||
uses: "./.github/actions/website-sync"
|
uses: "./.github/actions/website-sync"
|
||||||
id: "publish-release"
|
id: "publish-release"
|
||||||
with:
|
with:
|
||||||
|
|||||||
14
.github/workflows/remove-milestone.yml
vendored
14
.github/workflows/remove-milestone.yml
vendored
@@ -11,9 +11,7 @@ on:
|
|||||||
description: Needs to match, exactly, the name of a milestone
|
description: Needs to match, exactly, the name of a milestone
|
||||||
required: true
|
required: true
|
||||||
type: string
|
type: string
|
||||||
secrets:
|
|
||||||
token:
|
|
||||||
required: true
|
|
||||||
jobs:
|
jobs:
|
||||||
main:
|
main:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
@@ -26,14 +24,20 @@ jobs:
|
|||||||
ref: main
|
ref: main
|
||||||
- name: Install Actions
|
- name: Install Actions
|
||||||
run: npm install --production --prefix ./actions
|
run: npm install --production --prefix ./actions
|
||||||
|
- name: "Generate token"
|
||||||
|
id: generate_token
|
||||||
|
uses: tibdex/github-app-token@b62528385c34dbc9f38e5f4225ac829252d1ea92
|
||||||
|
with:
|
||||||
|
app_id: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_ID }}
|
||||||
|
private_key: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_PEM }}
|
||||||
- name: Remove milestone from open issues (manually invoked)
|
- name: Remove milestone from open issues (manually invoked)
|
||||||
if: ${{ github.event.inputs.version != '' }}
|
if: ${{ github.event.inputs.version != '' }}
|
||||||
uses: ./actions/remove-milestone
|
uses: ./actions/remove-milestone
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.GH_BOT_ACCESS_TOKEN }}
|
token: ${{ steps.generate_token.outputs.token }}
|
||||||
- name: Remove milestone from open issues (workflow invoked)
|
- name: Remove milestone from open issues (workflow invoked)
|
||||||
if: ${{ inputs.version_call != '' }}
|
if: ${{ inputs.version_call != '' }}
|
||||||
uses: ./actions/remove-milestone
|
uses: ./actions/remove-milestone
|
||||||
with:
|
with:
|
||||||
version_call: ${{ inputs.version_call }}
|
version_call: ${{ inputs.version_call }}
|
||||||
token: ${{ secrets.token }}
|
token: ${{ steps.generate_token.outputs.token }}
|
||||||
|
|||||||
8
.github/workflows/update-changelog.yml
vendored
8
.github/workflows/update-changelog.yml
vendored
@@ -15,10 +15,16 @@ jobs:
|
|||||||
main:
|
main:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
|
- name: "Generate token"
|
||||||
|
id: generate_token
|
||||||
|
uses: tibdex/github-app-token@b62528385c34dbc9f38e5f4225ac829252d1ea92
|
||||||
|
with:
|
||||||
|
app_id: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_ID }}
|
||||||
|
private_key: ${{ secrets.GRAFANA_DELIVERY_BOT_APP_PEM }}
|
||||||
- name: Run update changelog (manually invoked)
|
- name: Run update changelog (manually invoked)
|
||||||
uses: grafana/grafana-github-actions-go/update-changelog@main
|
uses: grafana/grafana-github-actions-go/update-changelog@main
|
||||||
with:
|
with:
|
||||||
token: ${{ secrets.GH_BOT_ACCESS_TOKEN }}
|
token: ${{ steps.generate_token.outputs.token }}
|
||||||
version: ${{ inputs.version }}
|
version: ${{ inputs.version }}
|
||||||
metrics_api_key: ${{ secrets.GRAFANA_MISC_STATS_API_KEY }}
|
metrics_api_key: ${{ secrets.GRAFANA_MISC_STATS_API_KEY }}
|
||||||
community_api_key: ${{ secrets.GRAFANABOT_FORUM_KEY }}
|
community_api_key: ${{ secrets.GRAFANABOT_FORUM_KEY }}
|
||||||
|
|||||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -191,3 +191,6 @@ public/api-spec.json
|
|||||||
deployment_tools_config.json
|
deployment_tools_config.json
|
||||||
|
|
||||||
.betterer.cache
|
.betterer.cache
|
||||||
|
|
||||||
|
# Temporary file for backporting PRs
|
||||||
|
.pr-body.txt
|
||||||
|
|||||||
398
CHANGELOG.md
398
CHANGELOG.md
@@ -1,3 +1,401 @@
|
|||||||
|
<!-- 10.0.1 START -->
|
||||||
|
|
||||||
|
# 10.0.1 (2023-06-22)
|
||||||
|
|
||||||
|
### Features and enhancements
|
||||||
|
|
||||||
|
- **Schema:** Improve Dashboard kind docs and remove deprecated props. [#69652](https://github.com/grafana/grafana/issues/69652), [@ivanortegaalba](https://github.com/ivanortegaalba)
|
||||||
|
- **Alerting:** Update alerting module to 20230524181453-a8e75e4dfdda. [#69011](https://github.com/grafana/grafana/issues/69011), [@yuri-tceretian](https://github.com/yuri-tceretian)
|
||||||
|
- **Caching:** Update labels for cache insertions counter. (Enterprise)
|
||||||
|
|
||||||
|
### Bug fixes
|
||||||
|
|
||||||
|
- **Auth:** Fixed CVE-2023-3128. [#70581](https://github.com/grafana/grafana/issues/70581), [@zerok](https://github.com/zerok)
|
||||||
|
- **Command palette:** Include help links. [#70322](https://github.com/grafana/grafana/issues/70322), [@ashharrison90](https://github.com/ashharrison90)
|
||||||
|
- **Tempo:** Use pipe in TraceQL by default for multi-value variables. [#70321](https://github.com/grafana/grafana/issues/70321), [@joey-grafana](https://github.com/joey-grafana)
|
||||||
|
- **XYChart/Trend:** Fix min/max and units/decimals X field overrides. [#70261](https://github.com/grafana/grafana/issues/70261), [@leeoniya](https://github.com/leeoniya)
|
||||||
|
- **Explore:** Improve logs volume panel empty state. [#70255](https://github.com/grafana/grafana/issues/70255), [@Elfo404](https://github.com/Elfo404)
|
||||||
|
- **Plugins:** Wrap original check health error. [#70227](https://github.com/grafana/grafana/issues/70227), [@kousikmitra](https://github.com/kousikmitra)
|
||||||
|
- **XYChart:** Fix variable interpolation in datalinks/toggletip. [#70210](https://github.com/grafana/grafana/issues/70210), [@leeoniya](https://github.com/leeoniya)
|
||||||
|
- **XYChart:** Fix formatting of axis ticks (units, decimals). [#70193](https://github.com/grafana/grafana/issues/70193), [@leeoniya](https://github.com/leeoniya)
|
||||||
|
- **Auth:** Show invite button if disable login form is set to false. [#70155](https://github.com/grafana/grafana/issues/70155), [@IevaVasiljeva](https://github.com/IevaVasiljeva)
|
||||||
|
- **TextPanel:** Fix <summary> styling missing the disclosure triangle. [#70138](https://github.com/grafana/grafana/issues/70138), [@joshhunt](https://github.com/joshhunt)
|
||||||
|
- **Alerting:** Fix email template for text/plain emails. [#70111](https://github.com/grafana/grafana/issues/70111), [@grobinson-grafana](https://github.com/grobinson-grafana)
|
||||||
|
- **Explore:** Fixed Starred query history tab to show all starred queries. [#70092](https://github.com/grafana/grafana/issues/70092), [@harisrozajac](https://github.com/harisrozajac)
|
||||||
|
- **CodeEditor:** Ensure suggestions only apply to the instance of the edit…. [#70067](https://github.com/grafana/grafana/issues/70067), [@ashharrison90](https://github.com/ashharrison90)
|
||||||
|
- **Command Palette:** Links opened in a new tab now route correctly when Grafana is served under a subpath. [#69925](https://github.com/grafana/grafana/issues/69925), [@ashharrison90](https://github.com/ashharrison90)
|
||||||
|
- **Heatmap:** Sort fields by numeric names when single frame. [#69880](https://github.com/grafana/grafana/issues/69880), [@leeoniya](https://github.com/leeoniya)
|
||||||
|
- **CloudMonitoring:** Improve parsing of GCM labels. [#69812](https://github.com/grafana/grafana/issues/69812), [@aangelisc](https://github.com/aangelisc)
|
||||||
|
- **NestedFolders:** Fix select all in folder view selecting items out of folder. [#69783](https://github.com/grafana/grafana/issues/69783), [@joshhunt](https://github.com/joshhunt)
|
||||||
|
- **Alerting:** Fix notification policies inheritance algorithm (#69304). [#69782](https://github.com/grafana/grafana/issues/69782), [@gillesdemey](https://github.com/gillesdemey)
|
||||||
|
- **Templating:** Fix updating of definition to empty string. [#69767](https://github.com/grafana/grafana/issues/69767), [@ivanahuckova](https://github.com/ivanahuckova)
|
||||||
|
- **Alerting:** Support newer http_config struct. [#69719](https://github.com/grafana/grafana/issues/69719), [@gillesdemey](https://github.com/gillesdemey)
|
||||||
|
- **Loki:** Fix including of template variables in variable query editor. [#69709](https://github.com/grafana/grafana/issues/69709), [@ivanahuckova](https://github.com/ivanahuckova)
|
||||||
|
- **Azure:** Fix Kusto auto-completion for Azure datasources (#69685). [#69695](https://github.com/grafana/grafana/issues/69695), [@aangelisc](https://github.com/aangelisc)
|
||||||
|
- **Alerting:** Fix broken UI because of query being optional for some ExpressionQuer…. [#69683](https://github.com/grafana/grafana/issues/69683), [@soniaAguilarPeiron](https://github.com/soniaAguilarPeiron)
|
||||||
|
- **Explore:** Run remaining queries when one is removed from a pane. [#69670](https://github.com/grafana/grafana/issues/69670), [@Elfo404](https://github.com/Elfo404)
|
||||||
|
- **Dashboards:** Variables - Improve slow template variable loading due same variable loaded multiple times on time range change. [#69641](https://github.com/grafana/grafana/issues/69641), [@axelavargas](https://github.com/axelavargas)
|
||||||
|
- **Loki:** Fix error when empty template variables response. [#69559](https://github.com/grafana/grafana/issues/69559), [@ivanahuckova](https://github.com/ivanahuckova)
|
||||||
|
- **Alerting:** Add heuristics back to datasource healthchecks. [#69541](https://github.com/grafana/grafana/issues/69541), [@grobinson-grafana](https://github.com/grobinson-grafana)
|
||||||
|
- **Util:** Fix panic when generating UIDs concurrently. [#69538](https://github.com/grafana/grafana/issues/69538), [@JohnnyQQQQ](https://github.com/JohnnyQQQQ)
|
||||||
|
- **Alerting:** Fix provisioned templates being ignored by alertmanager. [#69488](https://github.com/grafana/grafana/issues/69488), [@JacobsonMT](https://github.com/JacobsonMT)
|
||||||
|
- **Log Context:** Fix split view button using the wrong query. [#69416](https://github.com/grafana/grafana/issues/69416), [@svennergr](https://github.com/svennergr)
|
||||||
|
- **Pyroscope:** Fix wrong defaults when importing query from different datasource. [#69366](https://github.com/grafana/grafana/issues/69366), [@aocenas](https://github.com/aocenas)
|
||||||
|
- **InfluxDB:** Interpolate retention policies. [#69300](https://github.com/grafana/grafana/issues/69300), [@itsmylife](https://github.com/itsmylife)
|
||||||
|
- **SQLStore:** Align SQLite IsUniqueConstraintViolation() with other backend implementations. [#69227](https://github.com/grafana/grafana/issues/69227), [@papagian](https://github.com/papagian)
|
||||||
|
- **Dashboards:** Remove Explore option from panel menu when panel's datasource uid is "-- Dashboard --". [#69173](https://github.com/grafana/grafana/issues/69173), [@harisrozajac](https://github.com/harisrozajac)
|
||||||
|
- **Alerting:** Fix "show all instances". [#67837](https://github.com/grafana/grafana/issues/67837), [@gillesdemey](https://github.com/gillesdemey)
|
||||||
|
- **Usage Insights:** Fix last viewed date. (Enterprise)
|
||||||
|
- **Caching:** Fix issue in which caching can cause HTTP resource response bodies to be written twice. (Enterprise)
|
||||||
|
|
||||||
|
<!-- 10.0.1 END -->
|
||||||
|
<!-- 10.0.0 START -->
|
||||||
|
|
||||||
|
# 10.0.0 (2023-06-12)
|
||||||
|
|
||||||
|
### Features and enhancements
|
||||||
|
|
||||||
|
- **Themes:** Unify secondary button and ToolbarButton. [#69049](https://github.com/grafana/grafana/issues/69049), [@torkelo](https://github.com/torkelo)
|
||||||
|
- **PublicDashboards:** Email sharing users with active sessions added in Users list . (Enterprise)
|
||||||
|
- **Caching:** Ensure context-canceled are not reported as errors . (Enterprise)
|
||||||
|
- **SAML:** Configuration UI. (Enterprise)
|
||||||
|
|
||||||
|
### Bug fixes
|
||||||
|
|
||||||
|
- **Query Editor:** Ensure dropdown menus position correctly. [#69131](https://github.com/grafana/grafana/issues/69131), [@grafanabot](https://github.com/grafanabot)
|
||||||
|
- **Drawer:** Fixes closeOnMaskClick false issue. [#69103](https://github.com/grafana/grafana/issues/69103), [@grafanabot](https://github.com/grafanabot)
|
||||||
|
- **SAML:** Fix IdP metadata caching so that invalid metadata doesn't get cached. (Enterprise)
|
||||||
|
|
||||||
|
<!-- 10.0.0 END -->
|
||||||
|
<!-- 10.0.0-preview START -->
|
||||||
|
|
||||||
|
# 10.0.0-preview (2023-05-31)
|
||||||
|
|
||||||
|
### Features and enhancements
|
||||||
|
|
||||||
|
- **Alerting:** Migrate unknown NoData\Error settings to the default. [#69010](https://github.com/grafana/grafana/issues/69010), [@grafanabot](https://github.com/grafanabot)
|
||||||
|
- **Drawer:** Position under nav & minor redesign . [#68396](https://github.com/grafana/grafana/issues/68396), [@grafanabot](https://github.com/grafanabot)
|
||||||
|
- **Navigation:** Add keyboard shortcut to navigate directly to Dashboards. [#68374](https://github.com/grafana/grafana/issues/68374), [@grafanabot](https://github.com/grafanabot)
|
||||||
|
- **Explore:** Promote exploreMixedDatasource to Stable & enable by default. [#68353](https://github.com/grafana/grafana/issues/68353), [@Elfo404](https://github.com/Elfo404)
|
||||||
|
- **Tempo:** Escape regex-sensitive characters in span name before building promql query. [#68313](https://github.com/grafana/grafana/issues/68313), [@grafanabot](https://github.com/grafanabot)
|
||||||
|
- **Drawer:** Introduce a size property that set's width percentage and minWidth . [#68128](https://github.com/grafana/grafana/issues/68128), [@grafanabot](https://github.com/grafanabot)
|
||||||
|
- **AngularDeprecation:** Show warnings in panel edit for angular panels. [#68083](https://github.com/grafana/grafana/issues/68083), [@grafanabot](https://github.com/grafanabot)
|
||||||
|
- **Dashboard:** Change add panel button to fill to remove outline border. [#68017](https://github.com/grafana/grafana/issues/68017), [@grafanabot](https://github.com/grafanabot)
|
||||||
|
- **Query History:** Remove migration. [#67470](https://github.com/grafana/grafana/issues/67470), [@Elfo404](https://github.com/Elfo404)
|
||||||
|
- **Alerting:** Implement template testing endpoint. [#67450](https://github.com/grafana/grafana/issues/67450), [@JacobsonMT](https://github.com/JacobsonMT)
|
||||||
|
- **Trace View:** Export trace button . [#67368](https://github.com/grafana/grafana/issues/67368), [@adrapereira](https://github.com/adrapereira)
|
||||||
|
- **Alerting:** Update grafana/alerting to 4f09f51. [#67329](https://github.com/grafana/grafana/issues/67329), [@grobinson-grafana](https://github.com/grobinson-grafana)
|
||||||
|
- **Cloudwatch:** Add FraudDetector namespace with metrics and dimensions. [#67318](https://github.com/grafana/grafana/issues/67318), [@ffje](https://github.com/ffje)
|
||||||
|
- **Timeseries:** Migrate legend hideFrom. [#67305](https://github.com/grafana/grafana/issues/67305), [@adela-almasan](https://github.com/adela-almasan)
|
||||||
|
- **CloudWatch:** Deprecate dynamic labels feature toggle, remove support for Alias in frontend. [#67222](https://github.com/grafana/grafana/issues/67222), [@fridgepoet](https://github.com/fridgepoet)
|
||||||
|
- **Docs:** Create documentation for enterprise caching HTTP API. [#67169](https://github.com/grafana/grafana/issues/67169), [@mmandrus](https://github.com/mmandrus)
|
||||||
|
- **Cloudwatch Logs:** Update Cheatsheet. [#67161](https://github.com/grafana/grafana/issues/67161), [@sarahzinger](https://github.com/sarahzinger)
|
||||||
|
- **Alerting:** Add alert instance picker. [#67138](https://github.com/grafana/grafana/issues/67138), [@VikaCep](https://github.com/VikaCep)
|
||||||
|
- **Loki:** Enable dataplane-compliant metric data by default. [#67137](https://github.com/grafana/grafana/issues/67137), [@gabor](https://github.com/gabor)
|
||||||
|
- **Loki:** Enable new log context query editor. [#67131](https://github.com/grafana/grafana/issues/67131), [@ivanahuckova](https://github.com/ivanahuckova)
|
||||||
|
- **Elasticsearch:** Deprecate index setting for annotation queries. [#67046](https://github.com/grafana/grafana/issues/67046), [@ivanahuckova](https://github.com/ivanahuckova)
|
||||||
|
- **Search:** Preserves search filters when navigating to another page. [#67021](https://github.com/grafana/grafana/issues/67021), [@khushijain21](https://github.com/khushijain21)
|
||||||
|
- **PanelContext:** Add functionality to update data from panel. [#66993](https://github.com/grafana/grafana/issues/66993), [@torkelo](https://github.com/torkelo)
|
||||||
|
- **Phlare:** Support both Phlare and Pyroscope backends and rename to Grafana Pyroscope. [#66989](https://github.com/grafana/grafana/issues/66989), [@aocenas](https://github.com/aocenas)
|
||||||
|
- **Packaging:** Added deprecation warnings when running `grafana-cli` or `grafana-server`; the `grafana` command should be used instead. [#66976](https://github.com/grafana/grafana/issues/66976), [@kminehart](https://github.com/kminehart)
|
||||||
|
- **Elasticsearch:** Update required database version to 7.16. [#66928](https://github.com/grafana/grafana/issues/66928), [@gabor](https://github.com/gabor)
|
||||||
|
- **Alert:** Redesign with tinted background . [#66918](https://github.com/grafana/grafana/issues/66918), [@torkelo](https://github.com/torkelo)
|
||||||
|
- **Auth:** Make GitHub auth's allowed_organizations be case insensitive. [#66879](https://github.com/grafana/grafana/issues/66879), [@consideRatio](https://github.com/consideRatio)
|
||||||
|
- **Elasticsearch:** Deprecate the usage of the database field in provisioning. [#66828](https://github.com/grafana/grafana/issues/66828), [@gwdawson](https://github.com/gwdawson)
|
||||||
|
- **CSRF middleware:** Add flag to skip login cookie check. [#66806](https://github.com/grafana/grafana/issues/66806), [@PoorlyDefinedBehaviour](https://github.com/PoorlyDefinedBehaviour)
|
||||||
|
- **Alerting:** Use URLs in image annotations. [#66804](https://github.com/grafana/grafana/issues/66804), [@santihernandezc](https://github.com/santihernandezc)
|
||||||
|
- **AppRootPage:** Reduce flickering while loading plugin. [#66799](https://github.com/grafana/grafana/issues/66799), [@torkelo](https://github.com/torkelo)
|
||||||
|
- **Alerting:** Make Loki & Prometheus instant vector by default. [#66797](https://github.com/grafana/grafana/issues/66797), [@gillesdemey](https://github.com/gillesdemey)
|
||||||
|
- **Log Context:** Add button to open the context query in a split view. [#66777](https://github.com/grafana/grafana/issues/66777), [@svennergr](https://github.com/svennergr)
|
||||||
|
- **APIkeys:** Add metrics for apikey endpoints. [#66732](https://github.com/grafana/grafana/issues/66732), [@eleijonmarck](https://github.com/eleijonmarck)
|
||||||
|
- **ServeFromSubPath:** Redirect to URL with subpath when subpath missing. [#66724](https://github.com/grafana/grafana/issues/66724), [@torkelo](https://github.com/torkelo)
|
||||||
|
- **RBAC:** Remove the option to disable RBAC and add automated permission migrations for instances that had RBAC disabled. [#66652](https://github.com/grafana/grafana/issues/66652), [@IevaVasiljeva](https://github.com/IevaVasiljeva)
|
||||||
|
- **Plugins:** Remove secure socks proxy feature toggle. [#66611](https://github.com/grafana/grafana/issues/66611), [@stephaniehingtgen](https://github.com/stephaniehingtgen)
|
||||||
|
- **Alerting:** Loki-based alert state history modal. [#66595](https://github.com/grafana/grafana/issues/66595), [@konrad147](https://github.com/konrad147)
|
||||||
|
- **Explore:** Promote exploreMixedDatasource feature toggle to beta. [#66552](https://github.com/grafana/grafana/issues/66552), [@ifrost](https://github.com/ifrost)
|
||||||
|
- **Chore:** Clean up NavModel interface. [#66548](https://github.com/grafana/grafana/issues/66548), [@ashharrison90](https://github.com/ashharrison90)
|
||||||
|
- **Alerting:** Scheduler use rule fingerprint instead of version. [#66531](https://github.com/grafana/grafana/issues/66531), [@yuri-tceretian](https://github.com/yuri-tceretian)
|
||||||
|
- **CloudWatch:** Deprecate dynamic labels feature toggle, remove support for Alias in backend. [#66494](https://github.com/grafana/grafana/issues/66494), [@fridgepoet](https://github.com/fridgepoet)
|
||||||
|
- **RBAC:** Make access control metadata for folders work with nested folders. [#66464](https://github.com/grafana/grafana/issues/66464), [@IevaVasiljeva](https://github.com/IevaVasiljeva)
|
||||||
|
- **Tracing:** Add links to documentation in config pages. [#66442](https://github.com/grafana/grafana/issues/66442), [@joey-grafana](https://github.com/joey-grafana)
|
||||||
|
- **Loki:** Always display log context toggle. [#66379](https://github.com/grafana/grafana/issues/66379), [@matyax](https://github.com/matyax)
|
||||||
|
- **Datagrid Panel:** Edit data within your dashboards. [#66353](https://github.com/grafana/grafana/issues/66353), [@mdvictor](https://github.com/mdvictor)
|
||||||
|
- **Annotations:** Support filtering the target panels. [#66325](https://github.com/grafana/grafana/issues/66325), [@ryantxu](https://github.com/ryantxu)
|
||||||
|
- **Alerting:** Use default page size of 5000 when querying Loki for state history. [#66315](https://github.com/grafana/grafana/issues/66315), [@alexweav](https://github.com/alexweav)
|
||||||
|
- **GrafanaData:** Remove obsolete logs exports. [#66271](https://github.com/grafana/grafana/issues/66271), [@gabor](https://github.com/gabor)
|
||||||
|
- **Alerting:** Update legacy alerting warning. [#66269](https://github.com/grafana/grafana/issues/66269), [@armandgrillet](https://github.com/armandgrillet)
|
||||||
|
- **GrafanaUI:** Remove obsolete logs exports. [#66268](https://github.com/grafana/grafana/issues/66268), [@gabor](https://github.com/gabor)
|
||||||
|
- **Explore:** Remove deprecated DataSourceWithLogsVolumeSupport. [#66266](https://github.com/grafana/grafana/issues/66266), [@ivanahuckova](https://github.com/ivanahuckova)
|
||||||
|
- **Chore:** Upgrade Go to 1.20.3. [#66264](https://github.com/grafana/grafana/issues/66264), [@sakjur](https://github.com/sakjur)
|
||||||
|
- **Design System:** Set TextArea to display: block in order to remove spacing below. [#66262](https://github.com/grafana/grafana/issues/66262), [@L-M-K-B](https://github.com/L-M-K-B)
|
||||||
|
- **Elasticsearch:** Add feature toggle to disable running queries trough backend. [#66260](https://github.com/grafana/grafana/issues/66260), [@ivanahuckova](https://github.com/ivanahuckova)
|
||||||
|
- **Correlations:** Add transformation editor. [#66217](https://github.com/grafana/grafana/issues/66217), [@gelicia](https://github.com/gelicia)
|
||||||
|
- **Logs Navigation:** Scroll to first log when using pagination. [#66214](https://github.com/grafana/grafana/issues/66214), [@matyax](https://github.com/matyax)
|
||||||
|
- **Search:** Add clear search button to the input bar. [#66204](https://github.com/grafana/grafana/issues/66204), [@khushijain21](https://github.com/khushijain21)
|
||||||
|
- **Visualizations:** Choose color based on series name. [#66197](https://github.com/grafana/grafana/issues/66197), [@lukepalmer](https://github.com/lukepalmer)
|
||||||
|
- **FieldValues:** Use plain arrays instead of Vector (part 1 of 2). [#66187](https://github.com/grafana/grafana/issues/66187), [@ryantxu](https://github.com/ryantxu)
|
||||||
|
- **Users:** Enable case insensitive login by default. [#66134](https://github.com/grafana/grafana/issues/66134), [@Jguer](https://github.com/Jguer)
|
||||||
|
- **Loki Query Editor:** Increase autocomplete suggestions window with to 50%. [#66041](https://github.com/grafana/grafana/issues/66041), [@matyax](https://github.com/matyax)
|
||||||
|
- **Instrumentation:** Add support for instrumenting database queries. [#66022](https://github.com/grafana/grafana/issues/66022), [@bergquist](https://github.com/bergquist)
|
||||||
|
- **Loki:** Add feature flag to enable dataplane-compliant metric frames. [#66017](https://github.com/grafana/grafana/issues/66017), [@gabor](https://github.com/gabor)
|
||||||
|
- **Tempo:** Encode IDs as hexadecimal when downloading traces. [#66001](https://github.com/grafana/grafana/issues/66001), [@kousikmitra](https://github.com/kousikmitra)
|
||||||
|
- **Cloudwatch:** Add missing AWS/IVS namespace metrics. [#65985](https://github.com/grafana/grafana/issues/65985), [@idastambuk](https://github.com/idastambuk)
|
||||||
|
- **Alerting:** Remove and revert flag alertingBigTransactions. [#65976](https://github.com/grafana/grafana/issues/65976), [@JacobsonMT](https://github.com/JacobsonMT)
|
||||||
|
- **Alerting:** Attach hash of instance labels to state history log lines. [#65968](https://github.com/grafana/grafana/issues/65968), [@alexweav](https://github.com/alexweav)
|
||||||
|
- **API keys:** Add deprecation to api keys. [#65948](https://github.com/grafana/grafana/issues/65948), [@eleijonmarck](https://github.com/eleijonmarck)
|
||||||
|
- **Logs:** Redesign and improve LogContext. [#65939](https://github.com/grafana/grafana/issues/65939), [@svennergr](https://github.com/svennergr)
|
||||||
|
- **Loki:** Remove alpha feature toggle lokiDataframeApi. [#65918](https://github.com/grafana/grafana/issues/65918), [@gabor](https://github.com/gabor)
|
||||||
|
- **Packaging:** Remove chkconfig dependency. [#65887](https://github.com/grafana/grafana/issues/65887), [@DanCech](https://github.com/DanCech)
|
||||||
|
- **Explore:** Run test datasource default selection when mounted. [#65864](https://github.com/grafana/grafana/issues/65864), [@gelicia](https://github.com/gelicia)
|
||||||
|
- **Service Accounts:** Allow unsetting token expiry date. [#65862](https://github.com/grafana/grafana/issues/65862), [@kousikmitra](https://github.com/kousikmitra)
|
||||||
|
- **SQL Datasources:** Update Max Connection and Max Idle Connection Defaults to 100 and add auto mode. [#65834](https://github.com/grafana/grafana/issues/65834), [@codeincarnate](https://github.com/codeincarnate)
|
||||||
|
- **DashlistPanel:** Add options to include time range and variable values. [#65757](https://github.com/grafana/grafana/issues/65757), [@VictorColomb](https://github.com/VictorColomb)
|
||||||
|
- **Alerting:** Add endpoint to revert to a previous alertmanager configuration. [#65751](https://github.com/grafana/grafana/issues/65751), [@JacobsonMT](https://github.com/JacobsonMT)
|
||||||
|
- **Alerting:** Document state history config options in default and sample configuration files. [#65748](https://github.com/grafana/grafana/issues/65748), [@alexweav](https://github.com/alexweav)
|
||||||
|
- **Alerting:** Choose a previous valid AM configuration in case of error. [#65746](https://github.com/grafana/grafana/issues/65746), [@VikaCep](https://github.com/VikaCep)
|
||||||
|
- **Traces:** Span filtering. [#65725](https://github.com/grafana/grafana/issues/65725), [@joey-grafana](https://github.com/joey-grafana)
|
||||||
|
- **Caching:** Refactor enterprise query caching middleware to a wire service. [#65616](https://github.com/grafana/grafana/issues/65616), [@mmandrus](https://github.com/mmandrus)
|
||||||
|
- **Alerting:** Implement template preview for Grafana AlertManager. [#65530](https://github.com/grafana/grafana/issues/65530), [@soniaAguilarPeiron](https://github.com/soniaAguilarPeiron)
|
||||||
|
- **Dropdown:** Stop Dropdown accepting a function as children. [#65467](https://github.com/grafana/grafana/issues/65467), [@ashharrison90](https://github.com/ashharrison90)
|
||||||
|
- **GrafanaDS:** Add support for annotation time regions. [#65462](https://github.com/grafana/grafana/issues/65462), [@leeoniya](https://github.com/leeoniya)
|
||||||
|
- **Alerting:** Add support for running HA using Redis. [#65267](https://github.com/grafana/grafana/issues/65267), [@JohnnyQQQQ](https://github.com/JohnnyQQQQ)
|
||||||
|
- **Tempo:** Add kind to TraceQL intrinsics. [#65111](https://github.com/grafana/grafana/issues/65111), [@adrapereira](https://github.com/adrapereira)
|
||||||
|
- **Feature:** Trusted Types support. [#64975](https://github.com/grafana/grafana/issues/64975), [@KristianGrafana](https://github.com/KristianGrafana)
|
||||||
|
- **AzureMonitor:** Application Insights Traces. [#64859](https://github.com/grafana/grafana/issues/64859), [@aangelisc](https://github.com/aangelisc)
|
||||||
|
- **Chore:** Remove deprecated dashboardId from panel query runner. [#64786](https://github.com/grafana/grafana/issues/64786), [@ryantxu](https://github.com/ryantxu)
|
||||||
|
- **DataFrame:** Handle nanosecond-precision timestamp fields. [#64529](https://github.com/grafana/grafana/issues/64529), [@gabor](https://github.com/gabor)
|
||||||
|
- **EditDataSources:** Add EditDataSourceActions to EditDataSourcePages. [#64487](https://github.com/grafana/grafana/issues/64487), [@mikkancso](https://github.com/mikkancso)
|
||||||
|
- **Chore:** Upgrade to react 18. [#64428](https://github.com/grafana/grafana/issues/64428), [@ashharrison90](https://github.com/ashharrison90)
|
||||||
|
- **Canvas:** Connection properties based on data. [#64360](https://github.com/grafana/grafana/issues/64360), [@adela-almasan](https://github.com/adela-almasan)
|
||||||
|
- **Explore:** Align multiple log volumes. [#64356](https://github.com/grafana/grafana/issues/64356), [@ifrost](https://github.com/ifrost)
|
||||||
|
- **Explore:** Clear live logs. [#64237](https://github.com/grafana/grafana/issues/64237), [@abdulhdr1](https://github.com/abdulhdr1)
|
||||||
|
- **TimeSeries:** Explicitly add transformer when timeseries-long exists. [#64092](https://github.com/grafana/grafana/issues/64092), [@ryantxu](https://github.com/ryantxu)
|
||||||
|
- **SAML:** Configuration UI. [#64054](https://github.com/grafana/grafana/issues/64054), [@alexanderzobnin](https://github.com/alexanderzobnin)
|
||||||
|
- **Alerting:** Use configured headers for external alertmanager. [#63819](https://github.com/grafana/grafana/issues/63819), [@JohnnyQQQQ](https://github.com/JohnnyQQQQ)
|
||||||
|
- **Prometheus:** Incremental querying option for `to: now` dashboards. [#62932](https://github.com/grafana/grafana/issues/62932), [@leeoniya](https://github.com/leeoniya)
|
||||||
|
- **Dashboard:** Add series color shades. [#61300](https://github.com/grafana/grafana/issues/61300), [@jkraml-staffbase](https://github.com/jkraml-staffbase)
|
||||||
|
|
||||||
|
### Bug fixes
|
||||||
|
|
||||||
|
- **ResourcePicker:** Fix missing border bug on cancel button. [#69113](https://github.com/grafana/grafana/issues/69113), [@nmarrs](https://github.com/nmarrs)
|
||||||
|
- **TimeSeries:** Fix centeredZero y axis ranging when all values are 0. [#69112](https://github.com/grafana/grafana/issues/69112), [@grafanabot](https://github.com/grafanabot)
|
||||||
|
- **StatusHistory:** Fix rendering of value-mapped null. [#69108](https://github.com/grafana/grafana/issues/69108), [@grafanabot](https://github.com/grafanabot)
|
||||||
|
- **Alerting:** Fix provenance guard checks for Alertmanager configuration to not cause panic when compared nested objects. [#69094](https://github.com/grafana/grafana/issues/69094), [@grafanabot](https://github.com/grafanabot)
|
||||||
|
- **Alerting:** Add support for Alert State History Loki primary. [#69077](https://github.com/grafana/grafana/issues/69077), [@grafanabot](https://github.com/grafanabot)
|
||||||
|
- **Dashboards:** Fix undefined aria labels in Annotation Checkboxes for Programmatic Access. [#68873](https://github.com/grafana/grafana/issues/68873), [@grafanabot](https://github.com/grafanabot)
|
||||||
|
- **Alerting:** Fix stale query preview error. [#68836](https://github.com/grafana/grafana/issues/68836), [@grafanabot](https://github.com/grafanabot)
|
||||||
|
- **AnonymousAuth:** Fix concurrent read-write crash. [#68803](https://github.com/grafana/grafana/issues/68803), [@grafanabot](https://github.com/grafanabot)
|
||||||
|
- **AzureMonitor:** Ensure legacy properties containing template variables are correctly migrated. [#68792](https://github.com/grafana/grafana/issues/68792), [@grafanabot](https://github.com/grafanabot)
|
||||||
|
- **Alerting:** Add additional contact points for external AM. [#68778](https://github.com/grafana/grafana/issues/68778), [@grafanabot](https://github.com/grafanabot)
|
||||||
|
- **RBAC:** Remove legacy AC editor and admin role on new dashboard route. [#68777](https://github.com/grafana/grafana/issues/68777), [@grafanabot](https://github.com/grafanabot)
|
||||||
|
- **Azure Monitor:** Fix bug with top value so more than 10 resources can be shown . [#68725](https://github.com/grafana/grafana/issues/68725), [@grafanabot](https://github.com/grafanabot)
|
||||||
|
- **NodeGraph:** Fix overlaps preventing opening an edge context menu when nodes were too close. [#68628](https://github.com/grafana/grafana/issues/68628), [@grafanabot](https://github.com/grafanabot)
|
||||||
|
- **Plugins:** Correct the usage of mutex for gRPC plugin implementation. [#68609](https://github.com/grafana/grafana/issues/68609), [@grafanabot](https://github.com/grafanabot)
|
||||||
|
- **Azure Monitor:** Fix bug that did not show alert rule preview. [#68581](https://github.com/grafana/grafana/issues/68581), [@grafanabot](https://github.com/grafanabot)
|
||||||
|
- **FlameGraph:** Fix table sort being reset when search changes. [#68454](https://github.com/grafana/grafana/issues/68454), [@grafanabot](https://github.com/grafanabot)
|
||||||
|
- **Command Palette:** Prevent stale search results from overwriting newer results. [#68392](https://github.com/grafana/grafana/issues/68392), [@grafanabot](https://github.com/grafanabot)
|
||||||
|
- **Search:** Fix Search returning results out of order. [#68387](https://github.com/grafana/grafana/issues/68387), [@joshhunt](https://github.com/joshhunt)
|
||||||
|
- **Explore:** Remove data source onboarding page. [#68381](https://github.com/grafana/grafana/issues/68381), [@grafanabot](https://github.com/grafanabot)
|
||||||
|
- **Flamegraph:** Fix tooltip positioning. [#68312](https://github.com/grafana/grafana/issues/68312), [@grafanabot](https://github.com/grafanabot)
|
||||||
|
- **Pyroscope:** Add authentication when calling backendType resource API. [#68311](https://github.com/grafana/grafana/issues/68311), [@grafanabot](https://github.com/grafanabot)
|
||||||
|
- **Histogram:** Respect min/max panel settings for x-axis. [#68245](https://github.com/grafana/grafana/issues/68245), [@grafanabot](https://github.com/grafanabot)
|
||||||
|
- **QueryRow:** Make toggle actions screen-readers accessible. [#68210](https://github.com/grafana/grafana/issues/68210), [@grafanabot](https://github.com/grafanabot)
|
||||||
|
- **Heatmap:** Fix color rendering for value ranges < 1. [#68164](https://github.com/grafana/grafana/issues/68164), [@grafanabot](https://github.com/grafanabot)
|
||||||
|
- **Heatmap:** Handle unsorted timestamps in calculate mode. [#68151](https://github.com/grafana/grafana/issues/68151), [@grafanabot](https://github.com/grafanabot)
|
||||||
|
- **Alerting:** Fixes Alert list panel "ungrouped" regression. [#68090](https://github.com/grafana/grafana/issues/68090), [@grafanabot](https://github.com/grafanabot)
|
||||||
|
- **Alerting:** Show export button for org admins. [#67995](https://github.com/grafana/grafana/issues/67995), [@grafanabot](https://github.com/grafanabot)
|
||||||
|
- **Navigation:** Fix 'Page not found' when sending or going back from 'Invitate user' page. [#67972](https://github.com/grafana/grafana/issues/67972), [@grafanabot](https://github.com/grafanabot)
|
||||||
|
- **InspectDrawer:** Fixes issue with double scrollbars. [#67888](https://github.com/grafana/grafana/issues/67888), [@grafanabot](https://github.com/grafanabot)
|
||||||
|
- **Connections:** Show core datasource plugins as well. [#67886](https://github.com/grafana/grafana/issues/67886), [@grafanabot](https://github.com/grafanabot)
|
||||||
|
- **Gauge:** Set min and max for percent unit. [#67719](https://github.com/grafana/grafana/issues/67719), [@grafanabot](https://github.com/grafanabot)
|
||||||
|
- **TimeSeries:** Fix leading null-fill for missing intervals. [#67570](https://github.com/grafana/grafana/issues/67570), [@leeoniya](https://github.com/leeoniya)
|
||||||
|
- **Pyroscope:** Fix autodetection in case of using Phlare backend. [#67536](https://github.com/grafana/grafana/issues/67536), [@aocenas](https://github.com/aocenas)
|
||||||
|
- **Dashboard:** Revert fixed header shown on mobile devices in the new panel header. [#67510](https://github.com/grafana/grafana/issues/67510), [@axelavargas](https://github.com/axelavargas)
|
||||||
|
- **PostgreSQL:** Fix tls certificate issue by downgrading lib/pq. [#67372](https://github.com/grafana/grafana/issues/67372), [@zoltanbedi](https://github.com/zoltanbedi)
|
||||||
|
- **Alerting:** Fix misleading status code in provisioning API. [#67331](https://github.com/grafana/grafana/issues/67331), [@usommerl](https://github.com/usommerl)
|
||||||
|
- **Explore:** Update table min height . [#67321](https://github.com/grafana/grafana/issues/67321), [@adrapereira](https://github.com/adrapereira)
|
||||||
|
- **Provisioning:** Fix provisioning issues with legacy alerting and data source permissions. [#67308](https://github.com/grafana/grafana/issues/67308), [@IevaVasiljeva](https://github.com/IevaVasiljeva)
|
||||||
|
- **Proxy:** Improve header handling for reverse proxy. [#67279](https://github.com/grafana/grafana/issues/67279), [@sakjur](https://github.com/sakjur)
|
||||||
|
- **Loki:** Fix log samples using `instant` queries. [#67271](https://github.com/grafana/grafana/issues/67271), [@svennergr](https://github.com/svennergr)
|
||||||
|
- **Alerting:** Fix panic when reparenting receivers to groups following an attempted rename via Provisioning. [#67167](https://github.com/grafana/grafana/issues/67167), [@alexweav](https://github.com/alexweav)
|
||||||
|
- **Loki:** Fix incorrect evaluation of real and extracted labels in context. [#67112](https://github.com/grafana/grafana/issues/67112), [@ivanahuckova](https://github.com/ivanahuckova)
|
||||||
|
- **Cloudwatch Logs:** Clarify Cloudwatch Logs Limits. [#67072](https://github.com/grafana/grafana/issues/67072), [@sarahzinger](https://github.com/sarahzinger)
|
||||||
|
- **Rendering:** Fix panel rendered count on error. [#67027](https://github.com/grafana/grafana/issues/67027), [@AgnesToulet](https://github.com/AgnesToulet)
|
||||||
|
- **Elasticsearch:** Fix processing of duplicated metric types and field. [#66973](https://github.com/grafana/grafana/issues/66973), [@ivanahuckova](https://github.com/ivanahuckova)
|
||||||
|
- **Plugins:** Fix width for README pages with tables. [#66872](https://github.com/grafana/grafana/issues/66872), [@andresmgot](https://github.com/andresmgot)
|
||||||
|
- **Tempo:** TraceQL query builder QoL improvements. [#66865](https://github.com/grafana/grafana/issues/66865), [@adrapereira](https://github.com/adrapereira)
|
||||||
|
- **Expressions/threshold:** Fix incorrect thresholds args length. [#66859](https://github.com/grafana/grafana/issues/66859), [@gillesdemey](https://github.com/gillesdemey)
|
||||||
|
- **Panel Header Fix:** Implement new Panel Header on Angular Panels . [#66826](https://github.com/grafana/grafana/issues/66826), [@axelavargas](https://github.com/axelavargas)
|
||||||
|
- **Elasticsearch:** Handle multiple annotation structures. [#66762](https://github.com/grafana/grafana/issues/66762), [@gabor](https://github.com/gabor)
|
||||||
|
- **Alerting:** Fix share URL for Prometheus rules on subpath. [#66752](https://github.com/grafana/grafana/issues/66752), [@gillesdemey](https://github.com/gillesdemey)
|
||||||
|
- **Alerting:** Fix DatasourceUID and RefID missing for DatasourceNoData alerts. [#66733](https://github.com/grafana/grafana/issues/66733), [@grobinson-grafana](https://github.com/grobinson-grafana)
|
||||||
|
- **Plugins:** Fix plugin catalog filtering. [#66663](https://github.com/grafana/grafana/issues/66663), [@leventebalogh](https://github.com/leventebalogh)
|
||||||
|
- **Navigation:** Redirect to root page when switching organization. [#66655](https://github.com/grafana/grafana/issues/66655), [@ashharrison90](https://github.com/ashharrison90)
|
||||||
|
- **Trace View:** Update the queryType to traceql for checking if same trace when clicking span link. [#66645](https://github.com/grafana/grafana/issues/66645), [@ericmustin](https://github.com/ericmustin)
|
||||||
|
- **Explore:** Fix using data source line limit when opening logs sample in split view. [#66601](https://github.com/grafana/grafana/issues/66601), [@ivanahuckova](https://github.com/ivanahuckova)
|
||||||
|
- **Loki:** Fix ad hoc filters when used with number and > and < operators. [#66579](https://github.com/grafana/grafana/issues/66579), [@ivanahuckova](https://github.com/ivanahuckova)
|
||||||
|
- **Dashboards:** Fix broken internal data links. [#66567](https://github.com/grafana/grafana/issues/66567), [@ifrost](https://github.com/ifrost)
|
||||||
|
- **Google Cloud Monitoring:** Fix project variable. [#66524](https://github.com/grafana/grafana/issues/66524), [@asimpson](https://github.com/asimpson)
|
||||||
|
- **Azure Monitor:** Fix bug that was not showing resources for certain locations. [#66502](https://github.com/grafana/grafana/issues/66502), [@alyssabull](https://github.com/alyssabull)
|
||||||
|
- **Plugins:** Fs: Add option to access unallowed files in dev mode. [#66492](https://github.com/grafana/grafana/issues/66492), [@xnyo](https://github.com/xnyo)
|
||||||
|
- **Dashboard:** New panel in a dashboard is not deleted after "Discard"-ing changes in Panel Edit. [#66476](https://github.com/grafana/grafana/issues/66476), [@polibb](https://github.com/polibb)
|
||||||
|
- **InfluxDB:** Fix querying with hardcoded retention policy. [#66466](https://github.com/grafana/grafana/issues/66466), [@itsmylife](https://github.com/itsmylife)
|
||||||
|
- **Alerting:** Hide mute timing actions when dealing with vanilla prometheus. [#66457](https://github.com/grafana/grafana/issues/66457), [@gillesdemey](https://github.com/gillesdemey)
|
||||||
|
- **Alerting:** Fix creating a recording rule when having multiple datasources. [#66415](https://github.com/grafana/grafana/issues/66415), [@VikaCep](https://github.com/VikaCep)
|
||||||
|
- **AccessControl:** Allow editors to access GET /api/datasources. [#66343](https://github.com/grafana/grafana/issues/66343), [@mgyongyosi](https://github.com/mgyongyosi)
|
||||||
|
- **Table Panel:** Fix panel migration for options cell type. [#66305](https://github.com/grafana/grafana/issues/66305), [@ryantxu](https://github.com/ryantxu)
|
||||||
|
- **Navigation:** Scrolled hamburger menu links now navigate correctly in Safari. [#66261](https://github.com/grafana/grafana/issues/66261), [@ashharrison90](https://github.com/ashharrison90)
|
||||||
|
- **Cloudwatch:** Fix ui bug in template variable editor. [#66207](https://github.com/grafana/grafana/issues/66207), [@iSatVeerSingh](https://github.com/iSatVeerSingh)
|
||||||
|
- **Annotations:** Improve get tags query performance. [#66182](https://github.com/grafana/grafana/issues/66182), [@papagian](https://github.com/papagian)
|
||||||
|
- **Query Splitting:** Fix for handling queries with no requestId. [#66161](https://github.com/grafana/grafana/issues/66161), [@domasx2](https://github.com/domasx2)
|
||||||
|
- **Cloudwatch:** Pass refId from query for expression queries. [#66147](https://github.com/grafana/grafana/issues/66147), [@idastambuk](https://github.com/idastambuk)
|
||||||
|
- **Alerting:** Fix explore link in alert detail view. [#66106](https://github.com/grafana/grafana/issues/66106), [@gillesdemey](https://github.com/gillesdemey)
|
||||||
|
- **Plugins:** Skip instrumenting plugin build info for core and bundled plugins. [#66105](https://github.com/grafana/grafana/issues/66105), [@wbrowne](https://github.com/wbrowne)
|
||||||
|
- **Alerting:** Fix silences preview. [#66000](https://github.com/grafana/grafana/issues/66000), [@konrad147](https://github.com/konrad147)
|
||||||
|
- **Fix:** DataLinks from data sources override user defined data link. [#65996](https://github.com/grafana/grafana/issues/65996), [@axelavargas](https://github.com/axelavargas)
|
||||||
|
- **Auth:** Remove the session cookie only if it's invalid or revoked. [#65984](https://github.com/grafana/grafana/issues/65984), [@mgyongyosi](https://github.com/mgyongyosi)
|
||||||
|
- **Transformations:** Improve UX and fix refId issues. [#65982](https://github.com/grafana/grafana/issues/65982), [@torkelo](https://github.com/torkelo)
|
||||||
|
- **SQL Datasources:** Fix variable throwing error if query returns no data. [#65937](https://github.com/grafana/grafana/issues/65937), [@mdvictor](https://github.com/mdvictor)
|
||||||
|
- **Annotations:** Ignore unique constraint violations for tags. [#65935](https://github.com/grafana/grafana/issues/65935), [@sakjur](https://github.com/sakjur)
|
||||||
|
- **PluginExtensions:** Fixed issue with incorrect type being exposed when configuring an extension. [#65910](https://github.com/grafana/grafana/issues/65910), [@mckn](https://github.com/mckn)
|
||||||
|
- **Annotation List:** Fix panel not updating when variable is changed. [#65899](https://github.com/grafana/grafana/issues/65899), [@JoaoSilvaGrafana](https://github.com/JoaoSilvaGrafana)
|
||||||
|
- **Table:** Fix migrations from old angular table for cell color modes . [#65760](https://github.com/grafana/grafana/issues/65760), [@torkelo](https://github.com/torkelo)
|
||||||
|
- **PieChart:** Show long labels properly. [#65699](https://github.com/grafana/grafana/issues/65699), [@mdvictor](https://github.com/mdvictor)
|
||||||
|
- **Library panels:** Ensure pagination controls are always correctly displayed. [#65283](https://github.com/grafana/grafana/issues/65283), [@ashharrison90](https://github.com/ashharrison90)
|
||||||
|
- **Catalog:** Show install error with incompatible version. [#65059](https://github.com/grafana/grafana/issues/65059), [@andresmgot](https://github.com/andresmgot)
|
||||||
|
- **XYChart:** Add all dataset columns in tooltip. [#65027](https://github.com/grafana/grafana/issues/65027), [@mdvictor](https://github.com/mdvictor)
|
||||||
|
- **Alerting:** Use a completely isolated context for state history writes. [#64989](https://github.com/grafana/grafana/issues/64989), [@alexweav](https://github.com/alexweav)
|
||||||
|
- **Utils:** Reimplement util.GetRandomString to avoid modulo bias. [#64481](https://github.com/grafana/grafana/issues/64481), [@DanCech](https://github.com/DanCech)
|
||||||
|
- **Reports:** Add empty UID to not found dashboard. (Enterprise)
|
||||||
|
|
||||||
|
### Breaking changes
|
||||||
|
|
||||||
|
The deprecated `plugin:build` command in the Grafana Toolkit have been removed in this release. The replacement [`create-plugin`](https://github.com/grafana/plugin-tools/tree/main/packages/create-plugin/) tool is recommended for plugin development. Issue [#67485](https://github.com/grafana/grafana/issues/67485)
|
||||||
|
|
||||||
|
The deprecated `package:build`, `node-version-check` and `toolkit:build` commands in the Grafana Toolkit have been removed in this release. Issue [#67475](https://github.com/grafana/grafana/issues/67475)
|
||||||
|
|
||||||
|
The deprecated `plugin:github-publish` command in the Grafana Toolkit have been removed in this release. Issue [#67471](https://github.com/grafana/grafana/issues/67471)
|
||||||
|
|
||||||
|
The `/query-history/migrate` endpoint has been removed and query history entries will not be automatically migrated when switching from local storage to remote storage. Issue [#67470](https://github.com/grafana/grafana/issues/67470)
|
||||||
|
|
||||||
|
The deprecated `plugin:ci-build`, `plugin:ci-package`, `plugin:ci-report`, `plugin:update-circleci` and `plugin:bundle-managed` commands in the Grafana Toolkit have been removed in this release. Issue [#67212](https://github.com/grafana/grafana/issues/67212)
|
||||||
|
|
||||||
|
The data-format used by the Loki data source for metric (graph producing) queries was changed to be compliant with the recommended Grafana format. The change is very small, we do not expect it to cause problems: for instant-queries the dataframe-type changed from `timeseries-multi` to `numeric-multi`, the dataframe-name attribute is not used anymore. If you are affected by this, you can revert back to the old format by setting the feature flag `lokiMetricDataplane` to `false`. We recommend migrating to the new format, because the feature-flag will be removed at some point in the future. Issue [#67137](https://github.com/grafana/grafana/issues/67137)
|
||||||
|
|
||||||
|
The deprecated `plugin:sign` command in the Grafana Toolkit have been removed in this release. The replacement `sign-plugin` tool is recommended for [plugin signing](https://github.com/grafana/plugin-tools/tree/main/packages/sign-plugin). Issue [#67130](https://github.com/grafana/grafana/issues/67130)
|
||||||
|
|
||||||
|
The deprecated `plugin:test` and `plugin:dev` commands in the Grafana Toolkit have been removed in this release. Issue [#67125](https://github.com/grafana/grafana/issues/67125)
|
||||||
|
|
||||||
|
The type signature of the `testDatasource()` method on the `DataSourceWithBackend` class [has changed](https://github.com/grafana/grafana/pull/67014/files/a5608dc4f27ab4459e725b22ff60b8fc05390c08#diff-c58fc1a09e9b9b17e5f45efbfb646273e69145f7687facb134440da4edafc745R263), the returned Promise is now typed stricter, which is probably going to cause type-errors while building plugins against the latest Grafana versions.
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
// Before
|
||||||
|
abstract testDatasource(): Promise<any>;
|
||||||
|
|
||||||
|
// After
|
||||||
|
abstract testDatasource(): Promise<TestDataSourceResponse>;
|
||||||
|
```
|
||||||
|
|
||||||
|
Issue [#67014](https://github.com/grafana/grafana/issues/67014)
|
||||||
|
|
||||||
|
Grafana requires an Elasticsearch version of 7.16 or newer. If you use an older Elasticsearch version, you will get warnings in the query editor and on the datasource configuration page. Issue [#66928](https://github.com/grafana/grafana/issues/66928)
|
||||||
|
|
||||||
|
The deprecated `plugin:create` and `component:create` commands in the Grafana Toolkit have been removed in this release. The replacement `create-plugin` tool is recommended for [scaffolding new plugins](https://grafana.github.io/plugin-tools/docs/creating-a-plugin) and a migration guide for moving from the toolkit is available [here](https://grafana.github.io/plugin-tools/docs/migrating-from-toolkit). Issue [#66729](https://github.com/grafana/grafana/issues/66729)
|
||||||
|
|
||||||
|
We've removed some now unused properties from the `NavModel` interface. Issue [#66548](https://github.com/grafana/grafana/issues/66548)
|
||||||
|
|
||||||
|
`default` named retention policies won't be used to query. Users who have a `default` named retention policy in their `influxdb` database, have to rename it to something else. Having `default` named retention policy is not breaking anything. We will make sure to use the actual default retention policy under the hood. To change the hardcoded retention policy in the `dashboard.json`, users must they select the right retention policy from dropdown and save the panel/dashboard. Issue [#66466](https://github.com/grafana/grafana/issues/66466)
|
||||||
|
|
||||||
|
We removed previously deprecated components from `@grafana/data` : `getLogLevel`, `getLogLevelFromKey`, `addLogLevelToSeries`, `LogsParser`, `LogsParsers`, `calculateFieldStats`, `calculateLogsLabelStats`, `calculateStats`, `getParser`, `sortInAscendingOrder`, `sortInDescendingOrder`, `sortLogsResult`, `sortLogRows`, `checkLogsError`, `escapeUnescapedString`. Issue [#66271](https://github.com/grafana/grafana/issues/66271)
|
||||||
|
|
||||||
|
We removed previously deprecated components from `@grafana/ui` : `LogLabels`, `LogMessageAnsi`, `LogRows`, `getLogRowStyles`. Issue [#66268](https://github.com/grafana/grafana/issues/66268)
|
||||||
|
|
||||||
|
We removed previously deprecated `DataSourceWithLogsVolumeSupport` that was replaced with `DataSourceWithSupplementaryQueriesSupport`. Both APIs are for internal use only. Issue [#66266](https://github.com/grafana/grafana/issues/66266)
|
||||||
|
|
||||||
|
Additional functions (map/filter/forEach/iterator) have been added to the root Vector interface. Any code using vectors will continue to work unchanged, but in the rare case that you have implemented Vector directly, it be missing these functions. The easiest fix is to extend [FunctionalVector](https://github.com/grafana/grafana/blob/main/packages/grafana-data/src/vector/FunctionalVector.ts).
|
||||||
|
|
||||||
|
The `ArrayVector` class now extends the native JavaScript `Array` and gains all of its prototype/instance methods as a result. Issue [#66187](https://github.com/grafana/grafana/issues/66187)
|
||||||
|
|
||||||
|
We've removed the ability for functions to be passed as children to the `Dropdown` component. Previously, this was used to access the `isOpen` state of the dropdown. This can be now be achieved with the `onVisibleChange` prop.
|
||||||
|
|
||||||
|
Before:
|
||||||
|
|
||||||
|
```
|
||||||
|
return (
|
||||||
|
<Dropdown overlay={MenuActions} placement="bottom-end">
|
||||||
|
{(isOpen) =>
|
||||||
|
<ToolbarButton iconOnly icon="plus" isOpen={isOpen} aria-label="New" />
|
||||||
|
}
|
||||||
|
</Dropdown>
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
After:
|
||||||
|
|
||||||
|
```
|
||||||
|
const [isOpen, setIsOpen] = useState(false);
|
||||||
|
|
||||||
|
...
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Dropdown overlay={MenuActions} placement="bottom-end" onVisibleChange={setIsOpen}>
|
||||||
|
<ToolbarButton iconOnly icon="plus" isOpen={isOpen} aria-label="New" />
|
||||||
|
</Dropdown>
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
Issue [#65467](https://github.com/grafana/grafana/issues/65467)
|
||||||
|
|
||||||
|
(relevant for plugin developers) The deprecated internal `dashboardId` is now removed from the request context. For usage tracking use the `dashboardUid` Issue [#64786](https://github.com/grafana/grafana/issues/64786)
|
||||||
|
|
||||||
|
Grafana has been upgraded to React 18 and now leverages the new React client rendering API. Plugin authors in particular should be aware, as there could be unintended side effects due to the changes around automatic batching of state updates and consistent `useEffect` timings. Be sure to test your plugins and reference the React 18 upgrade docs here: https://react.dev/blog/2022/03/08/react-18-upgrade-guide Issue [#64428](https://github.com/grafana/grafana/issues/64428)
|
||||||
|
|
||||||
|
### Deprecations
|
||||||
|
|
||||||
|
For Elasticsearch annotation queries we are deprecating index field. Possibility to customise index for newly created annotations has already been removed in version 2.6.0 and since then we supported updating of index only for queries that customised index before 2.6.0. For users who would like to specify index for annotation queries we recommend to create a new Elasticsearch data source with specified index, and use that data source for annotations. Issue [#67046](https://github.com/grafana/grafana/issues/67046)
|
||||||
|
|
||||||
|
Scripts, systemd unit files and etc should stop using the `grafana-cli` and `grafana-server` programs, and instead use the `grafana` program. Uses of `grafana-server` should become `grafana server`, and uses of `grafana-cli` should become `grafana cli`. Issue [#66976](https://github.com/grafana/grafana/issues/66976)
|
||||||
|
|
||||||
|
The `database` field has been deprecated in the Elasticsearch datasource provisioning files, please use the `index` field in `jsonData` instead. Issue [#66828](https://github.com/grafana/grafana/issues/66828)
|
||||||
|
|
||||||
|
### Plugin development fixes & changes
|
||||||
|
|
||||||
|
- **Toolkit:** Remove deprecated `plugin:build`. [#67485](https://github.com/grafana/grafana/issues/67485), [@academo](https://github.com/academo)
|
||||||
|
- **Toolkit:** Remove deprecated `package:build`, `node-version-check` and `toolkit:build` commands. [#67475](https://github.com/grafana/grafana/issues/67475), [@academo](https://github.com/academo)
|
||||||
|
- **Toolkit:** Remove deprecated `plugin:github-publish` command. [#67471](https://github.com/grafana/grafana/issues/67471), [@academo](https://github.com/academo)
|
||||||
|
- **GrafanaUI:** Add indeterminate state to Checkbox. [#67312](https://github.com/grafana/grafana/issues/67312), [@JoaoSilvaGrafana](https://github.com/JoaoSilvaGrafana)
|
||||||
|
- **Toolkit:** Remove `plugin:ci-build` `plugin:ci-package` `plugin:ci-report` and related files. [#67212](https://github.com/grafana/grafana/issues/67212), [@academo](https://github.com/academo)
|
||||||
|
- **Toolkit:** Remove deprecated `plugin:sign` command. [#67130](https://github.com/grafana/grafana/issues/67130), [@academo](https://github.com/academo)
|
||||||
|
- **Toolkit:** Remove `plugin:dev` and `plugin:test`. [#67125](https://github.com/grafana/grafana/issues/67125), [@academo](https://github.com/academo)
|
||||||
|
- **Datasource:** Overhaul plugin error handling and action buttons. [#67014](https://github.com/grafana/grafana/issues/67014), [@sasklacz](https://github.com/sasklacz)
|
||||||
|
- **Toolkit:** Remove plugin:create and component:create commands. [#66729](https://github.com/grafana/grafana/issues/66729), [@academo](https://github.com/academo)
|
||||||
|
- **InteractiveTable:** Updated design and minor tweak to Correlactions page. [#66443](https://github.com/grafana/grafana/issues/66443), [@torkelo](https://github.com/torkelo)
|
||||||
|
|
||||||
|
<!-- 10.0.0-preview END -->
|
||||||
|
<!-- 9.5.3 START -->
|
||||||
|
|
||||||
|
# 9.5.3 (2023-06-06)
|
||||||
|
|
||||||
|
### Bug fixes
|
||||||
|
|
||||||
|
- **Query:** Prevent crash while executing concurrent mixed queries
|
||||||
|
- **Alerting:** Require alert.notifications:write permissions to test receivers and templates
|
||||||
|
|
||||||
|
<!-- 9.5.3 END -->
|
||||||
|
<!-- 9.5.2 START -->
|
||||||
|
|
||||||
|
# 9.5.2 (2023-05-03)
|
||||||
|
|
||||||
|
### Features and enhancements
|
||||||
|
|
||||||
|
- **Chore:** Upgrade Go to 1.20.4. [#67757](https://github.com/grafana/grafana/issues/67757), [@papagian](https://github.com/papagian)
|
||||||
|
|
||||||
|
### Bug fixes
|
||||||
|
|
||||||
|
- **Explore:** Update table min height (#67321). [#67332](https://github.com/grafana/grafana/issues/67332), [@adrapereira](https://github.com/adrapereira)
|
||||||
|
- **DataLinks:** Encoded URL fixed. [#67291](https://github.com/grafana/grafana/issues/67291), [@juanicabanas](https://github.com/juanicabanas)
|
||||||
|
|
||||||
|
<!-- 9.5.2 END -->
|
||||||
<!-- 9.5.1 START -->
|
<!-- 9.5.1 START -->
|
||||||
|
|
||||||
# 9.5.1 (2023-04-26)
|
# 9.5.1 (2023-04-26)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
ARG BASE_IMAGE=alpine:3.17
|
ARG BASE_IMAGE=alpine:3.17
|
||||||
ARG JS_IMAGE=node:18-alpine3.17
|
ARG JS_IMAGE=node:18-alpine3.17
|
||||||
ARG JS_PLATFORM=linux/amd64
|
ARG JS_PLATFORM=linux/amd64
|
||||||
ARG GO_IMAGE=golang:1.20.3-alpine3.17
|
ARG GO_IMAGE=golang:1.20.4-alpine3.17
|
||||||
|
|
||||||
ARG GO_SRC=go-builder
|
ARG GO_SRC=go-builder
|
||||||
ARG JS_SRC=js-builder
|
ARG JS_SRC=js-builder
|
||||||
|
|||||||
2
Makefile
2
Makefile
@@ -207,7 +207,7 @@ build-docker-full-ubuntu: ## Build Docker image based on Ubuntu for development.
|
|||||||
--build-arg COMMIT_SHA=$$(git rev-parse --short HEAD) \
|
--build-arg COMMIT_SHA=$$(git rev-parse --short HEAD) \
|
||||||
--build-arg BUILD_BRANCH=$$(git rev-parse --abbrev-ref HEAD) \
|
--build-arg BUILD_BRANCH=$$(git rev-parse --abbrev-ref HEAD) \
|
||||||
--build-arg BASE_IMAGE=ubuntu:20.04 \
|
--build-arg BASE_IMAGE=ubuntu:20.04 \
|
||||||
--build-arg GO_IMAGE=golang:1.20.3 \
|
--build-arg GO_IMAGE=golang:1.20.4 \
|
||||||
--tag grafana/grafana$(TAG_SUFFIX):dev-ubuntu \
|
--tag grafana/grafana$(TAG_SUFFIX):dev-ubuntu \
|
||||||
$(DOCKER_BUILD_ARGS)
|
$(DOCKER_BUILD_ARGS)
|
||||||
|
|
||||||
|
|||||||
@@ -422,7 +422,7 @@ datasource_limit = 5000
|
|||||||
|
|
||||||
################################### SQL Data Sources #####################
|
################################### SQL Data Sources #####################
|
||||||
[sql_datasources]
|
[sql_datasources]
|
||||||
# Default maximum number of open connections maintained in the connection pool
|
# Default maximum number of open connections maintained in the connection pool
|
||||||
# when connecting to SQL based data sources
|
# when connecting to SQL based data sources
|
||||||
max_open_conns_default = 100
|
max_open_conns_default = 100
|
||||||
|
|
||||||
@@ -431,7 +431,7 @@ max_open_conns_default = 100
|
|||||||
max_idle_conns_default = 100
|
max_idle_conns_default = 100
|
||||||
|
|
||||||
# Default maximum connection lifetime used when connecting
|
# Default maximum connection lifetime used when connecting
|
||||||
# to SQL based data sources.
|
# to SQL based data sources.
|
||||||
max_conn_lifetime_default = 14400
|
max_conn_lifetime_default = 14400
|
||||||
|
|
||||||
#################################### Users ###############################
|
#################################### Users ###############################
|
||||||
@@ -484,6 +484,22 @@ user_invite_max_lifetime_duration = 24h
|
|||||||
# Enter a comma-separated list of usernames to hide them in the Grafana UI. These users are shown to Grafana admins and to themselves.
|
# Enter a comma-separated list of usernames to hide them in the Grafana UI. These users are shown to Grafana admins and to themselves.
|
||||||
hidden_users =
|
hidden_users =
|
||||||
|
|
||||||
|
[secretscan]
|
||||||
|
# Enable secretscan feature
|
||||||
|
enabled = false
|
||||||
|
|
||||||
|
# Interval to check for token leaks
|
||||||
|
interval = 5m
|
||||||
|
|
||||||
|
# base URL of the grafana token leak check service
|
||||||
|
base_url = https://secret-scanning.grafana.net
|
||||||
|
|
||||||
|
# URL to send outgoing webhooks to in case of detection
|
||||||
|
oncall_url =
|
||||||
|
|
||||||
|
# Whether to revoke the token if a leak is detected or just send a notification
|
||||||
|
revoke = true
|
||||||
|
|
||||||
[service_accounts]
|
[service_accounts]
|
||||||
# When set, Grafana will not allow the creation of tokens with expiry greater than this setting.
|
# When set, Grafana will not allow the creation of tokens with expiry greater than this setting.
|
||||||
token_expiration_day_limit =
|
token_expiration_day_limit =
|
||||||
@@ -537,6 +553,9 @@ sigv4_verbose_logging = false
|
|||||||
# Set to true to enable Azure authentication option for HTTP-based datasources
|
# Set to true to enable Azure authentication option for HTTP-based datasources
|
||||||
azure_auth_enabled = false
|
azure_auth_enabled = false
|
||||||
|
|
||||||
|
# Use email lookup in addition to the unique ID provided by the IdP
|
||||||
|
oauth_allow_insecure_email_lookup = false
|
||||||
|
|
||||||
#################################### Anonymous Auth ######################
|
#################################### Anonymous Auth ######################
|
||||||
[auth.anonymous]
|
[auth.anonymous]
|
||||||
# enable anonymous access
|
# enable anonymous access
|
||||||
@@ -647,6 +666,7 @@ auth_url = https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/authorize
|
|||||||
token_url = https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/token
|
token_url = https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/token
|
||||||
allowed_domains =
|
allowed_domains =
|
||||||
allowed_groups =
|
allowed_groups =
|
||||||
|
allowed_organizations =
|
||||||
role_attribute_strict = false
|
role_attribute_strict = false
|
||||||
allow_assign_grafana_admin = false
|
allow_assign_grafana_admin = false
|
||||||
force_use_graph_api = false
|
force_use_graph_api = false
|
||||||
@@ -1027,6 +1047,11 @@ max_attempts = 3
|
|||||||
# 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.
|
# 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.
|
||||||
min_interval = 10s
|
min_interval = 10s
|
||||||
|
|
||||||
|
# This is an experimental option to add parallelization to saving alert states in the database.
|
||||||
|
# It configures the maximum number of concurrent queries per rule evaluated. The default value is 1
|
||||||
|
# (concurrent queries per rule disabled).
|
||||||
|
max_state_save_concurrency = 1
|
||||||
|
|
||||||
[unified_alerting.screenshots]
|
[unified_alerting.screenshots]
|
||||||
# Enable screenshots in notifications. You must have either installed the Grafana image rendering
|
# Enable screenshots in notifications. You must have either installed the Grafana image rendering
|
||||||
# plugin, or set up Grafana to use a remote rendering service.
|
# plugin, or set up Grafana to use a remote rendering service.
|
||||||
|
|||||||
@@ -469,6 +469,22 @@
|
|||||||
# Enter a comma-separated list of users login to hide them in the Grafana UI. These users are shown to Grafana admins and themselves.
|
# Enter a comma-separated list of users login to hide them in the Grafana UI. These users are shown to Grafana admins and themselves.
|
||||||
; hidden_users =
|
; hidden_users =
|
||||||
|
|
||||||
|
[secretscan]
|
||||||
|
# Enable secretscan feature
|
||||||
|
;enabled = false
|
||||||
|
|
||||||
|
# Interval to check for token leaks
|
||||||
|
;interval = 5m
|
||||||
|
|
||||||
|
# base URL of the grafana token leak check service
|
||||||
|
;base_url = https://secret-scanning.grafana.net
|
||||||
|
|
||||||
|
# URL to send outgoing webhooks to in case of detection
|
||||||
|
;oncall_url =
|
||||||
|
|
||||||
|
# Whether to revoke the token if a leak is detected or just send a notification
|
||||||
|
;revoke = true
|
||||||
|
|
||||||
[service_accounts]
|
[service_accounts]
|
||||||
# Service account maximum expiration date in days.
|
# Service account maximum expiration date in days.
|
||||||
# When set, Grafana will not allow the creation of tokens with expiry greater than this setting.
|
# When set, Grafana will not allow the creation of tokens with expiry greater than this setting.
|
||||||
@@ -526,6 +542,9 @@
|
|||||||
# Set to skip the organization role from JWT login and use system's role assignment instead.
|
# Set to skip the organization role from JWT login and use system's role assignment instead.
|
||||||
; skip_org_role_sync = false
|
; skip_org_role_sync = false
|
||||||
|
|
||||||
|
# Use email lookup in addition to the unique ID provided by the IdP
|
||||||
|
;oauth_allow_insecure_email_lookup = false
|
||||||
|
|
||||||
#################################### Anonymous Auth ######################
|
#################################### Anonymous Auth ######################
|
||||||
[auth.anonymous]
|
[auth.anonymous]
|
||||||
# enable anonymous access
|
# enable anonymous access
|
||||||
@@ -624,6 +643,7 @@
|
|||||||
;token_url = https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/token
|
;token_url = https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/token
|
||||||
;allowed_domains =
|
;allowed_domains =
|
||||||
;allowed_groups =
|
;allowed_groups =
|
||||||
|
;allowed_organizations =
|
||||||
;role_attribute_strict = false
|
;role_attribute_strict = false
|
||||||
;allow_assign_grafana_admin = false
|
;allow_assign_grafana_admin = false
|
||||||
# prevent synchronizing users organization roles
|
# prevent synchronizing users organization roles
|
||||||
|
|||||||
594
devenv/dev-dashboards/panel-barchart/barchart-tooltips.json
Normal file
594
devenv/dev-dashboards/panel-barchart/barchart-tooltips.json
Normal file
@@ -0,0 +1,594 @@
|
|||||||
|
{
|
||||||
|
"annotations": {
|
||||||
|
"list": [
|
||||||
|
{
|
||||||
|
"builtIn": 1,
|
||||||
|
"datasource": {
|
||||||
|
"type": "grafana",
|
||||||
|
"uid": "-- Grafana --"
|
||||||
|
},
|
||||||
|
"enable": true,
|
||||||
|
"hide": true,
|
||||||
|
"iconColor": "rgba(0, 211, 255, 1)",
|
||||||
|
"name": "Annotations & Alerts",
|
||||||
|
"type": "dashboard"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"editable": true,
|
||||||
|
"fiscalYearStartMonth": 0,
|
||||||
|
"graphTooltip": 0,
|
||||||
|
"id": 301,
|
||||||
|
"links": [],
|
||||||
|
"liveNow": false,
|
||||||
|
"panels": [
|
||||||
|
{
|
||||||
|
"collapsed": false,
|
||||||
|
"gridPos": {
|
||||||
|
"h": 1,
|
||||||
|
"w": 24,
|
||||||
|
"x": 0,
|
||||||
|
"y": 0
|
||||||
|
},
|
||||||
|
"id": 4,
|
||||||
|
"panels": [],
|
||||||
|
"title": "Field Override - Data Links",
|
||||||
|
"type": "row"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"datasource": {},
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"color": {
|
||||||
|
"mode": "palette-classic"
|
||||||
|
},
|
||||||
|
"custom": {
|
||||||
|
"axisCenteredZero": false,
|
||||||
|
"axisColorMode": "text",
|
||||||
|
"axisLabel": "",
|
||||||
|
"axisPlacement": "auto",
|
||||||
|
"fillOpacity": 80,
|
||||||
|
"gradientMode": "none",
|
||||||
|
"hideFrom": {
|
||||||
|
"legend": false,
|
||||||
|
"tooltip": false,
|
||||||
|
"viz": false
|
||||||
|
},
|
||||||
|
"lineWidth": 1,
|
||||||
|
"scaleDistribution": {
|
||||||
|
"type": "linear"
|
||||||
|
},
|
||||||
|
"thresholdsStyle": {
|
||||||
|
"mode": "off"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mappings": [],
|
||||||
|
"thresholds": {
|
||||||
|
"mode": "absolute",
|
||||||
|
"steps": [
|
||||||
|
{
|
||||||
|
"color": "green",
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"color": "red",
|
||||||
|
"value": 80
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byName",
|
||||||
|
"options": "column1"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "links",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"title": "google",
|
||||||
|
"url": "google.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"targetBlank": true,
|
||||||
|
"title": "youtube",
|
||||||
|
"url": "youtube.com"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "custom.fillOpacity",
|
||||||
|
"value": 14
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byName",
|
||||||
|
"options": "column2"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "links",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"title": "datalink column 2",
|
||||||
|
"url": "grafana.com"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "color",
|
||||||
|
"value": {
|
||||||
|
"fixedColor": "purple",
|
||||||
|
"mode": "shades"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 6,
|
||||||
|
"w": 9,
|
||||||
|
"x": 0,
|
||||||
|
"y": 1
|
||||||
|
},
|
||||||
|
"id": 1,
|
||||||
|
"options": {
|
||||||
|
"barRadius": 0,
|
||||||
|
"barWidth": 0.97,
|
||||||
|
"fullHighlight": false,
|
||||||
|
"groupWidth": 0.7,
|
||||||
|
"legend": {
|
||||||
|
"calcs": [],
|
||||||
|
"displayMode": "list",
|
||||||
|
"placement": "bottom",
|
||||||
|
"showLegend": true
|
||||||
|
},
|
||||||
|
"orientation": "auto",
|
||||||
|
"showValue": "auto",
|
||||||
|
"stacking": "none",
|
||||||
|
"tooltip": {
|
||||||
|
"mode": "single",
|
||||||
|
"sort": "none"
|
||||||
|
},
|
||||||
|
"xTickLabelRotation": 0,
|
||||||
|
"xTickLabelSpacing": 0
|
||||||
|
},
|
||||||
|
"pluginVersion": "9.5.0-cloud.4.a016665c",
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"csvContent": "id,column1,column2\r\nA,1,2",
|
||||||
|
"datasource": {
|
||||||
|
"type": "testdata",
|
||||||
|
"uid": "o63ntNT4z"
|
||||||
|
},
|
||||||
|
"refId": "A",
|
||||||
|
"scenarioId": "csv_content"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"csvContent": "id,column1,column2\r\nB,2,1",
|
||||||
|
"datasource": {
|
||||||
|
"type": "testdata",
|
||||||
|
"uid": "o63ntNT4z"
|
||||||
|
},
|
||||||
|
"hide": false,
|
||||||
|
"refId": "B",
|
||||||
|
"scenarioId": "csv_content"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "Tooltip mode: Single",
|
||||||
|
"transformations": [
|
||||||
|
{
|
||||||
|
"id": "merge",
|
||||||
|
"options": {}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type": "barchart"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"datasource": {},
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"color": {
|
||||||
|
"mode": "palette-classic"
|
||||||
|
},
|
||||||
|
"custom": {
|
||||||
|
"axisCenteredZero": false,
|
||||||
|
"axisColorMode": "text",
|
||||||
|
"axisLabel": "",
|
||||||
|
"axisPlacement": "auto",
|
||||||
|
"fillOpacity": 80,
|
||||||
|
"gradientMode": "none",
|
||||||
|
"hideFrom": {
|
||||||
|
"legend": false,
|
||||||
|
"tooltip": false,
|
||||||
|
"viz": false
|
||||||
|
},
|
||||||
|
"lineWidth": 1,
|
||||||
|
"scaleDistribution": {
|
||||||
|
"type": "linear"
|
||||||
|
},
|
||||||
|
"thresholdsStyle": {
|
||||||
|
"mode": "off"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mappings": [],
|
||||||
|
"thresholds": {
|
||||||
|
"mode": "absolute",
|
||||||
|
"steps": [
|
||||||
|
{
|
||||||
|
"color": "green",
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"color": "red",
|
||||||
|
"value": 80
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byName",
|
||||||
|
"options": "column1"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "links",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"title": "google",
|
||||||
|
"url": "google.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"targetBlank": true,
|
||||||
|
"title": "youtube",
|
||||||
|
"url": "youtube.com"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "custom.fillOpacity",
|
||||||
|
"value": 14
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byName",
|
||||||
|
"options": "column2"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "links",
|
||||||
|
"value": [
|
||||||
|
{
|
||||||
|
"title": "datalink column 2",
|
||||||
|
"url": "grafana.com"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "color",
|
||||||
|
"value": {
|
||||||
|
"fixedColor": "purple",
|
||||||
|
"mode": "shades"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 6,
|
||||||
|
"w": 9,
|
||||||
|
"x": 9,
|
||||||
|
"y": 1
|
||||||
|
},
|
||||||
|
"id": 6,
|
||||||
|
"options": {
|
||||||
|
"barRadius": 0,
|
||||||
|
"barWidth": 0.97,
|
||||||
|
"fullHighlight": false,
|
||||||
|
"groupWidth": 0.7,
|
||||||
|
"legend": {
|
||||||
|
"calcs": [],
|
||||||
|
"displayMode": "list",
|
||||||
|
"placement": "bottom",
|
||||||
|
"showLegend": true
|
||||||
|
},
|
||||||
|
"orientation": "auto",
|
||||||
|
"showValue": "auto",
|
||||||
|
"stacking": "none",
|
||||||
|
"tooltip": {
|
||||||
|
"mode": "multi",
|
||||||
|
"sort": "none"
|
||||||
|
},
|
||||||
|
"xTickLabelRotation": 0,
|
||||||
|
"xTickLabelSpacing": 0
|
||||||
|
},
|
||||||
|
"pluginVersion": "9.5.0-cloud.4.a016665c",
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"csvContent": "id,column1,column2\r\nA,1,2",
|
||||||
|
"datasource": {
|
||||||
|
"type": "testdata",
|
||||||
|
"uid": "o63ntNT4z"
|
||||||
|
},
|
||||||
|
"refId": "A",
|
||||||
|
"scenarioId": "csv_content"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"csvContent": "id,column1,column2\r\nB,2,1",
|
||||||
|
"datasource": {
|
||||||
|
"type": "testdata",
|
||||||
|
"uid": "o63ntNT4z"
|
||||||
|
},
|
||||||
|
"hide": false,
|
||||||
|
"refId": "B",
|
||||||
|
"scenarioId": "csv_content"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "Tooltip mode: All",
|
||||||
|
"transformations": [
|
||||||
|
{
|
||||||
|
"id": "merge",
|
||||||
|
"options": {}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"type": "barchart"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"collapsed": false,
|
||||||
|
"gridPos": {
|
||||||
|
"h": 1,
|
||||||
|
"w": 24,
|
||||||
|
"x": 0,
|
||||||
|
"y": 7
|
||||||
|
},
|
||||||
|
"id": 3,
|
||||||
|
"panels": [],
|
||||||
|
"title": "Field Override - Hide Tooltip",
|
||||||
|
"type": "row"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "testdata",
|
||||||
|
"uid": "PD8C576611E62080A"
|
||||||
|
},
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"color": {
|
||||||
|
"mode": "palette-classic"
|
||||||
|
},
|
||||||
|
"custom": {
|
||||||
|
"axisCenteredZero": false,
|
||||||
|
"axisColorMode": "text",
|
||||||
|
"axisLabel": "",
|
||||||
|
"axisPlacement": "auto",
|
||||||
|
"fillOpacity": 80,
|
||||||
|
"gradientMode": "none",
|
||||||
|
"hideFrom": {
|
||||||
|
"legend": false,
|
||||||
|
"tooltip": false,
|
||||||
|
"viz": false
|
||||||
|
},
|
||||||
|
"lineWidth": 1,
|
||||||
|
"scaleDistribution": {
|
||||||
|
"type": "linear"
|
||||||
|
},
|
||||||
|
"thresholdsStyle": {
|
||||||
|
"mode": "off"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mappings": [],
|
||||||
|
"thresholds": {
|
||||||
|
"mode": "absolute",
|
||||||
|
"steps": [
|
||||||
|
{
|
||||||
|
"color": "green",
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"color": "red",
|
||||||
|
"value": 80
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byName",
|
||||||
|
"options": "field 3"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "custom.hideFrom",
|
||||||
|
"value": {
|
||||||
|
"legend": false,
|
||||||
|
"tooltip": true,
|
||||||
|
"viz": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 6,
|
||||||
|
"w": 9,
|
||||||
|
"x": 0,
|
||||||
|
"y": 8
|
||||||
|
},
|
||||||
|
"id": 5,
|
||||||
|
"options": {
|
||||||
|
"barRadius": 0,
|
||||||
|
"barWidth": 0.97,
|
||||||
|
"fullHighlight": false,
|
||||||
|
"groupWidth": 0.7,
|
||||||
|
"legend": {
|
||||||
|
"calcs": [],
|
||||||
|
"displayMode": "list",
|
||||||
|
"placement": "bottom",
|
||||||
|
"showLegend": true
|
||||||
|
},
|
||||||
|
"orientation": "auto",
|
||||||
|
"showValue": "auto",
|
||||||
|
"stacking": "none",
|
||||||
|
"tooltip": {
|
||||||
|
"mode": "multi",
|
||||||
|
"sort": "none"
|
||||||
|
},
|
||||||
|
"xTickLabelRotation": 0,
|
||||||
|
"xTickLabelSpacing": 0
|
||||||
|
},
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"csvContent": "id, field 1, field 2, field 3\na, 20, 30, 40\nb, 40, 50, 60",
|
||||||
|
"datasource": {
|
||||||
|
"type": "testdata",
|
||||||
|
"uid": "PD8C576611E62080A"
|
||||||
|
},
|
||||||
|
"refId": "A",
|
||||||
|
"scenarioId": "csv_content"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "Hide 'field 3'",
|
||||||
|
"type": "barchart"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"datasource": {
|
||||||
|
"type": "testdata",
|
||||||
|
"uid": "PD8C576611E62080A"
|
||||||
|
},
|
||||||
|
"fieldConfig": {
|
||||||
|
"defaults": {
|
||||||
|
"color": {
|
||||||
|
"mode": "palette-classic"
|
||||||
|
},
|
||||||
|
"custom": {
|
||||||
|
"axisCenteredZero": false,
|
||||||
|
"axisColorMode": "text",
|
||||||
|
"axisLabel": "",
|
||||||
|
"axisPlacement": "auto",
|
||||||
|
"fillOpacity": 80,
|
||||||
|
"gradientMode": "none",
|
||||||
|
"hideFrom": {
|
||||||
|
"legend": false,
|
||||||
|
"tooltip": false,
|
||||||
|
"viz": false
|
||||||
|
},
|
||||||
|
"lineWidth": 1,
|
||||||
|
"scaleDistribution": {
|
||||||
|
"type": "linear"
|
||||||
|
},
|
||||||
|
"thresholdsStyle": {
|
||||||
|
"mode": "off"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"mappings": [],
|
||||||
|
"thresholds": {
|
||||||
|
"mode": "absolute",
|
||||||
|
"steps": [
|
||||||
|
{
|
||||||
|
"color": "green",
|
||||||
|
"value": null
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"color": "red",
|
||||||
|
"value": 80
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"overrides": [
|
||||||
|
{
|
||||||
|
"matcher": {
|
||||||
|
"id": "byName",
|
||||||
|
"options": "id"
|
||||||
|
},
|
||||||
|
"properties": [
|
||||||
|
{
|
||||||
|
"id": "custom.hideFrom",
|
||||||
|
"value": {
|
||||||
|
"legend": false,
|
||||||
|
"tooltip": true,
|
||||||
|
"viz": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"gridPos": {
|
||||||
|
"h": 6,
|
||||||
|
"w": 9,
|
||||||
|
"x": 9,
|
||||||
|
"y": 8
|
||||||
|
},
|
||||||
|
"id": 7,
|
||||||
|
"options": {
|
||||||
|
"barRadius": 0,
|
||||||
|
"barWidth": 0.97,
|
||||||
|
"fullHighlight": false,
|
||||||
|
"groupWidth": 0.7,
|
||||||
|
"legend": {
|
||||||
|
"calcs": [],
|
||||||
|
"displayMode": "list",
|
||||||
|
"placement": "bottom",
|
||||||
|
"showLegend": true
|
||||||
|
},
|
||||||
|
"orientation": "auto",
|
||||||
|
"showValue": "auto",
|
||||||
|
"stacking": "none",
|
||||||
|
"tooltip": {
|
||||||
|
"mode": "multi",
|
||||||
|
"sort": "none"
|
||||||
|
},
|
||||||
|
"xTickLabelRotation": 0,
|
||||||
|
"xTickLabelSpacing": 0
|
||||||
|
},
|
||||||
|
"targets": [
|
||||||
|
{
|
||||||
|
"csvContent": "id, field 1, field 2, field 3\na, 20, 30, 40\nb, 40, 50, 60",
|
||||||
|
"datasource": {
|
||||||
|
"type": "testdata",
|
||||||
|
"uid": "PD8C576611E62080A"
|
||||||
|
},
|
||||||
|
"refId": "A",
|
||||||
|
"scenarioId": "csv_content"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"title": "Hide 'id'",
|
||||||
|
"type": "barchart"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"refresh": "",
|
||||||
|
"schemaVersion": 38,
|
||||||
|
"style": "dark",
|
||||||
|
"tags": [
|
||||||
|
"gdev",
|
||||||
|
"panel-tests",
|
||||||
|
"barchart",
|
||||||
|
"graph-ng"
|
||||||
|
],
|
||||||
|
"templating": {
|
||||||
|
"list": []
|
||||||
|
},
|
||||||
|
"time": {
|
||||||
|
"from": "now-6h",
|
||||||
|
"to": "now"
|
||||||
|
},
|
||||||
|
"timepicker": {},
|
||||||
|
"timezone": "",
|
||||||
|
"title": "Panel Tests - Bar Chart Tooltip",
|
||||||
|
"uid": "ea33320b-bd97-4fe1-a27c-24bc61a48b41",
|
||||||
|
"version": 12,
|
||||||
|
"weekStart": ""
|
||||||
|
}
|
||||||
@@ -64,6 +64,18 @@ async function elasticSetupIndexTemplate() {
|
|||||||
'@timestamp': {
|
'@timestamp': {
|
||||||
type: 'date',
|
type: 'date',
|
||||||
},
|
},
|
||||||
|
'@timestamp_custom': {
|
||||||
|
type: 'date',
|
||||||
|
format: 'yyyy_MM_dd_HH_mm_ss'
|
||||||
|
},
|
||||||
|
'@timestamp_unix': {
|
||||||
|
type: 'date',
|
||||||
|
format: 'epoch_millis'
|
||||||
|
},
|
||||||
|
'@timestamp_nanos': {
|
||||||
|
type: 'date_nanos',
|
||||||
|
format: 'strict_date_optional_time_nanos'
|
||||||
|
},
|
||||||
counter: {
|
counter: {
|
||||||
type: 'integer',
|
type: 'integer',
|
||||||
},
|
},
|
||||||
@@ -115,6 +127,9 @@ function getRandomLogItem(counter, timestamp) {
|
|||||||
const maybeAnsiText = Math.random() < 0.5 ? 'with ANSI \u001b[31mpart of the text\u001b[0m' : '';
|
const maybeAnsiText = Math.random() < 0.5 ? 'with ANSI \u001b[31mpart of the text\u001b[0m' : '';
|
||||||
return {
|
return {
|
||||||
'@timestamp': timestamp.toISOString(),
|
'@timestamp': timestamp.toISOString(),
|
||||||
|
'@timestamp_custom': timestamp.toISOString().split('.')[0].replace(/[T:-]/g,'_'),
|
||||||
|
'@timestamp_unix': timestamp.getTime(),
|
||||||
|
'@timestamp_nanos': timestamp.toISOString().slice(0,-1) + '123Z',
|
||||||
line: `log text ${maybeAnsiText} [${randomText}]`,
|
line: `log text ${maybeAnsiText} [${randomText}]`,
|
||||||
counter: counter.toString(),
|
counter: counter.toString(),
|
||||||
float: 100 * Math.random().toString(),
|
float: 100 * Math.random().toString(),
|
||||||
|
|||||||
@@ -128,6 +128,13 @@ local dashboard = grafana.dashboard;
|
|||||||
id: 0,
|
id: 0,
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
dashboard.new('barchart-tooltips', import '../dev-dashboards/panel-barchart/barchart-tooltips.json') +
|
||||||
|
resource.addMetadata('folder', 'dev-dashboards') +
|
||||||
|
{
|
||||||
|
spec+: {
|
||||||
|
id: 0,
|
||||||
|
}
|
||||||
|
},
|
||||||
dashboard.new('candlestick', import '../dev-dashboards/panel-candlestick/candlestick.json') +
|
dashboard.new('candlestick', import '../dev-dashboards/panel-candlestick/candlestick.json') +
|
||||||
resource.addMetadata('folder', 'dev-dashboards') +
|
resource.addMetadata('folder', 'dev-dashboards') +
|
||||||
{
|
{
|
||||||
|
|||||||
19
docs/docs.mk
19
docs/docs.mk
@@ -1,3 +1,5 @@
|
|||||||
|
# The source of this file is https://raw.githubusercontent.com/grafana/writers-toolkit/main/docs/docs.mk.
|
||||||
|
# 4.0.0 (2023-06-06)
|
||||||
include variables.mk
|
include variables.mk
|
||||||
-include variables.mk.local
|
-include variables.mk.local
|
||||||
|
|
||||||
@@ -52,6 +54,11 @@ ifeq ($(origin DOC_VALIDATOR_IMAGE), undefined)
|
|||||||
export DOC_VALIDATOR_IMAGE := grafana/doc-validator:latest
|
export DOC_VALIDATOR_IMAGE := grafana/doc-validator:latest
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
# Container image used for vale linting.
|
||||||
|
ifeq ($(origin VALE_IMAGE), undefined)
|
||||||
|
export VALE_IMAGE := grafana/vale:latest
|
||||||
|
endif
|
||||||
|
|
||||||
# PATH-like list of directories within which to find projects.
|
# PATH-like list of directories within which to find projects.
|
||||||
# If all projects are checked out into the same directory, ~/repos/ for example, then the default should work.
|
# If all projects are checked out into the same directory, ~/repos/ for example, then the default should work.
|
||||||
ifeq ($(origin REPOS_PATH), undefined)
|
ifeq ($(origin REPOS_PATH), undefined)
|
||||||
@@ -91,17 +98,17 @@ docs-no-pull: make-docs
|
|||||||
.PHONY: docs-debug
|
.PHONY: docs-debug
|
||||||
docs-debug: ## Run Hugo web server with debugging enabled. TODO: support all SERVER_FLAGS defined in website Makefile.
|
docs-debug: ## Run Hugo web server with debugging enabled. TODO: support all SERVER_FLAGS defined in website Makefile.
|
||||||
docs-debug: make-docs
|
docs-debug: make-docs
|
||||||
WEBSITE_EXEC='hugo server --debug' $(PWD)/make-docs $(PROJECTS)
|
WEBSITE_EXEC='hugo server --bind 0.0.0.0 --port 3002 --debug' $(PWD)/make-docs $(PROJECTS)
|
||||||
|
|
||||||
.PHONY: doc-validator
|
.PHONY: doc-validator
|
||||||
doc-validator: ## Run docs-validator on the entire docs folder.
|
doc-validator: ## Run doc-validator on the entire docs folder.
|
||||||
doc-validator: make-docs
|
doc-validator: make-docs
|
||||||
DOCS_IMAGE=$(DOC_VALIDATOR_IMAGE) $(PWD)/make-docs $(PROJECTS)
|
DOCS_IMAGE=$(DOC_VALIDATOR_IMAGE) $(PWD)/make-docs $(PROJECTS)
|
||||||
|
|
||||||
.PHONY: doc-validator/%
|
.PHONY: vale
|
||||||
doc-validator/%: ## Run doc-validator on a specific path. To lint the path /docs/sources/administration, run 'make doc-validator/administration'.
|
vale: ## Run vale on the entire docs folder.
|
||||||
doc-validator/%: make-docs
|
vale: make-docs
|
||||||
DOCS_IMAGE=$(DOC_VALIDATOR_IMAGE) DOC_VALIDATOR_INCLUDE=$(subst doc-validator/,,$@) $(PWD)/make-docs $(PROJECTS)
|
DOCS_IMAGE=$(VALE_IMAGE) $(PWD)/make-docs $(PROJECTS)
|
||||||
|
|
||||||
.PHONY: update
|
.PHONY: update
|
||||||
update: ## Fetch the latest version of this Makefile and the `make-docs` script from Writers' Toolkit.
|
update: ## Fetch the latest version of this Makefile and the `make-docs` script from Writers' Toolkit.
|
||||||
|
|||||||
218
docs/make-docs
218
docs/make-docs
@@ -1,5 +1,6 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# The source of this file is https://raw.githubusercontent.com/grafana/writers-toolkit/main/docs/make-docs.
|
# The source of this file is https://raw.githubusercontent.com/grafana/writers-toolkit/main/docs/make-docs.
|
||||||
|
# 4.1.0 (2023-06-16)
|
||||||
|
|
||||||
set -ef
|
set -ef
|
||||||
|
|
||||||
@@ -8,9 +9,11 @@ readonly DOCS_HOST_PORT="${DOCS_HOST_PORT:-3002}"
|
|||||||
readonly DOCS_IMAGE="${DOCS_IMAGE:-grafana/docs-base:latest}"
|
readonly DOCS_IMAGE="${DOCS_IMAGE:-grafana/docs-base:latest}"
|
||||||
|
|
||||||
readonly DOC_VALIDATOR_INCLUDE="${DOC_VALIDATOR_INCLUDE:-.+\.md$}"
|
readonly DOC_VALIDATOR_INCLUDE="${DOC_VALIDATOR_INCLUDE:-.+\.md$}"
|
||||||
|
readonly DOC_VALIDATOR_SKIP_CHECKS="${DOC_VALIDATOR_SKIP_CHECKS:-^image-}"
|
||||||
|
|
||||||
readonly HUGO_REFLINKSERRORLEVEL="${HUGO_REFLINKSERRORLEVEL:-WARNING}"
|
readonly HUGO_REFLINKSERRORLEVEL="${HUGO_REFLINKSERRORLEVEL:-WARNING}"
|
||||||
readonly WEBSITE_EXEC="${WEBSITE_EXEC:-make server}"
|
readonly VALE_MINALERTLEVEL="${VALE_MINALERTLEVEL:-error}"
|
||||||
|
readonly WEBSITE_EXEC="${WEBSITE_EXEC:-make server-docs}"
|
||||||
# If set, the docs-base image will run a prebuild script that sets up Hugo mounts.
|
# If set, the docs-base image will run a prebuild script that sets up Hugo mounts.
|
||||||
readonly WEBSITE_MOUNTS="${WEBSITE_MOUNTS:-}"
|
readonly WEBSITE_MOUNTS="${WEBSITE_MOUNTS:-}"
|
||||||
|
|
||||||
@@ -59,8 +62,11 @@ fi
|
|||||||
SOURCES_as_code='as-code-docs'
|
SOURCES_as_code='as-code-docs'
|
||||||
SOURCES_enterprise_metrics='backend-enterprise'
|
SOURCES_enterprise_metrics='backend-enterprise'
|
||||||
SOURCES_enterprise_metrics_='backend-enterprise'
|
SOURCES_enterprise_metrics_='backend-enterprise'
|
||||||
SOURCES_grafana_cloud='cloud-docs'
|
SOURCES_grafana_cloud='website'
|
||||||
SOURCES_grafana_cloud_k6='k6-docs'
|
SOURCES_grafana_cloud_k6='k6-docs'
|
||||||
|
SOURCES_grafana_cloud_data_configuration_integrations='cloud-onboarding'
|
||||||
|
SOURCES_grafana_cloud_frontend_observability_faro_web_sdk='faro-web-sdk'
|
||||||
|
SOURCES_grafana_cloud_machine_learning='machine-learning'
|
||||||
SOURCES_helm_charts_mimir_distributed='mimir'
|
SOURCES_helm_charts_mimir_distributed='mimir'
|
||||||
SOURCES_helm_charts_tempo_distributed='tempo'
|
SOURCES_helm_charts_tempo_distributed='tempo'
|
||||||
SOURCES_opentelemetry='opentelemetry-docs'
|
SOURCES_opentelemetry='opentelemetry-docs'
|
||||||
@@ -68,14 +74,20 @@ SOURCES_opentelemetry='opentelemetry-docs'
|
|||||||
VERSIONS_as_code='UNVERSIONED'
|
VERSIONS_as_code='UNVERSIONED'
|
||||||
VERSIONS_grafana_cloud='UNVERSIONED'
|
VERSIONS_grafana_cloud='UNVERSIONED'
|
||||||
VERSIONS_grafana_cloud_k6='UNVERSIONED'
|
VERSIONS_grafana_cloud_k6='UNVERSIONED'
|
||||||
|
VERSIONS_grafana_cloud_data_configuration_integrations='UNVERSIONED'
|
||||||
|
VERSIONS_grafana_cloud_frontend_observability_faro_web_sdk='UNVERSIONED'
|
||||||
|
VERSIONS_grafana_cloud_machine_learning='UNVERSIONED'
|
||||||
VERSIONS_opentelemetry='UNVERSIONED'
|
VERSIONS_opentelemetry='UNVERSIONED'
|
||||||
VERSIONS_technical_documentation='UNVERSIONED'
|
VERSIONS_technical_documentation='UNVERSIONED'
|
||||||
|
VERSIONS_website='UNVERSIONED'
|
||||||
VERSIONS_writers_toolkit='UNVERSIONED'
|
VERSIONS_writers_toolkit='UNVERSIONED'
|
||||||
|
|
||||||
|
PATHS_grafana_cloud='content/docs/grafana-cloud'
|
||||||
PATHS_helm_charts_mimir_distributed='docs/sources/helm-charts/mimir-distributed'
|
PATHS_helm_charts_mimir_distributed='docs/sources/helm-charts/mimir-distributed'
|
||||||
PATHS_helm_charts_tempo_distributed='docs/sources/helm-charts/tempo-distributed'
|
PATHS_helm_charts_tempo_distributed='docs/sources/helm-charts/tempo-distributed'
|
||||||
PATHS_mimir='docs/sources/mimir'
|
PATHS_mimir='docs/sources/mimir'
|
||||||
PATHS_tempo='docs/sources/tempo'
|
PATHS_tempo='docs/sources/tempo'
|
||||||
|
PATHS_website='content/docs'
|
||||||
|
|
||||||
# identifier STR
|
# identifier STR
|
||||||
# Replace characters that are not valid in an identifier with underscores.
|
# Replace characters that are not valid in an identifier with underscores.
|
||||||
@@ -138,6 +150,13 @@ proj_url() {
|
|||||||
$1
|
$1
|
||||||
POSIX_HERESTRING
|
POSIX_HERESTRING
|
||||||
|
|
||||||
|
if [ "${_project}" = 'website' ]; then
|
||||||
|
echo "http://localhost:${DOCS_HOST_PORT}/docs/"
|
||||||
|
|
||||||
|
unset _project _version
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
if [ -z "${_version}" ] || [ "${_version}" = 'UNVERSIONED' ]; then
|
if [ -z "${_version}" ] || [ "${_version}" = 'UNVERSIONED' ]; then
|
||||||
echo "http://localhost:${DOCS_HOST_PORT}/docs/${_project}/"
|
echo "http://localhost:${DOCS_HOST_PORT}/docs/${_project}/"
|
||||||
else
|
else
|
||||||
@@ -165,14 +184,43 @@ proj_dst() {
|
|||||||
$1
|
$1
|
||||||
POSIX_HERESTRING
|
POSIX_HERESTRING
|
||||||
|
|
||||||
|
if [ "${_project}" = 'website' ]; then
|
||||||
|
echo '/hugo/content/docs'
|
||||||
|
|
||||||
|
unset _project _version
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
if [ -z "${_version}" ] || [ "${_version}" = 'UNVERSIONED' ]; then
|
if [ -z "${_version}" ] || [ "${_version}" = 'UNVERSIONED' ]; then
|
||||||
echo "/hugo/content/docs/${_project}"
|
echo "/hugo/content/docs/${_project}"
|
||||||
else
|
else
|
||||||
echo "/hugo/content/docs/${_project}/${_version}"
|
echo "/hugo/content/docs/${_project}/${_version}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
unset _project _version
|
unset _project _version
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# repo_path returns the host path to the project repository.
|
||||||
|
# It looks for the provided repository name in each of the paths specified in the REPOS_PATH environment variable.
|
||||||
|
repo_path() {
|
||||||
|
_repo="$1"
|
||||||
|
IFS=:
|
||||||
|
for lookup in ${REPOS_PATH}; do
|
||||||
|
if [ -d "${lookup}/${_repo}" ]; then
|
||||||
|
echo "${lookup}/${_repo}"
|
||||||
|
unset _path _repo
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
unset IFS
|
||||||
|
|
||||||
|
echo "ERRR: could not find project '${_repo}' in any of the paths in REPOS_PATH '${REPOS_PATH}'." >&2
|
||||||
|
echo "NOTE: you must have a checkout of the project '${_repo}' at '${REPOS_PATH##:*}/${_repo}'." >&2
|
||||||
|
echo "NOTE: if you have cloned the repository into a directory with a different name, consider changing it to ${_repo}." >&2
|
||||||
|
unset _repo
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
# proj_src returns the host path to content source for a project.
|
# proj_src returns the host path to content source for a project.
|
||||||
# It expects a complete project structure as input.
|
# It expects a complete project structure as input.
|
||||||
# It looks for the provided repository name in each of the paths specified in the REPOS_PATH environment variable.
|
# It looks for the provided repository name in each of the paths specified in the REPOS_PATH environment variable.
|
||||||
@@ -181,21 +229,10 @@ proj_src() {
|
|||||||
$1
|
$1
|
||||||
POSIX_HERESTRING
|
POSIX_HERESTRING
|
||||||
|
|
||||||
IFS=:
|
_repo="$(repo_path "${_repo}")"
|
||||||
for lookup in ${REPOS_PATH}; do
|
echo "${_repo}/${_path}"
|
||||||
if [ -d "${lookup}/${_repo}" ]; then
|
|
||||||
echo "${lookup}/${_repo}/${_path}"
|
|
||||||
unset _path _repo
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
unset IFS
|
|
||||||
|
|
||||||
echo "ERRR: could not find project '${_repo}' in any of the paths in REPOS_PATH '${REPOS_PATH}'." >&2
|
|
||||||
echo "NOTE: you must have a checkout of the project '${_repo}' at '${REPOS_PATH##:*}/${_repo}'." >&2
|
|
||||||
echo "NOTE: if you have cloned the repository into a directory with a different name, consider changing it to ${_repo}." >&2
|
|
||||||
unset _path _repo
|
unset _path _repo
|
||||||
exit 1
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# proj_canonical returns the canonical absolute path partial URI for a project.
|
# proj_canonical returns the canonical absolute path partial URI for a project.
|
||||||
@@ -205,11 +242,19 @@ proj_canonical() {
|
|||||||
$1
|
$1
|
||||||
POSIX_HERESTRING
|
POSIX_HERESTRING
|
||||||
|
|
||||||
|
if [ "${_project}" = 'website' ]; then
|
||||||
|
echo '/docs'
|
||||||
|
|
||||||
|
unset _project _version
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
if [ -z "${_version}" ] || [ "${_version}" = 'UNVERSIONED' ]; then
|
if [ -z "${_version}" ] || [ "${_version}" = 'UNVERSIONED' ]; then
|
||||||
echo "/docs/${_project}"
|
echo "/docs/${_project}"
|
||||||
else
|
else
|
||||||
echo "/docs/${_project}/${_version}"
|
echo "/docs/${_project}/${_version}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
unset _project _version
|
unset _project _version
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -262,6 +307,19 @@ url_src_dst_vers="$(url_src_dst_vers "$@")"
|
|||||||
volumes=""
|
volumes=""
|
||||||
redirects=""
|
redirects=""
|
||||||
|
|
||||||
|
for arg in "$@"; do
|
||||||
|
IFS=: read -r _project _ _repo _ <<POSIX_HERESTRING
|
||||||
|
${arg}
|
||||||
|
POSIX_HERESTRING
|
||||||
|
if [ "${_project}" = website ]; then
|
||||||
|
_repo="$(repo_path website)"
|
||||||
|
volumes="--volume=${_repo}/config:/hugo/config"
|
||||||
|
volumes="${volumes} --volume=${_repo}/layouts/partials:/hugo/layouts/partials"
|
||||||
|
volumes="${volumes} --volume=${_repo}/layouts/shortcodes:/hugo/layouts/shortcodes"
|
||||||
|
fi
|
||||||
|
unset _project _repo
|
||||||
|
done
|
||||||
|
|
||||||
for x in ${url_src_dst_vers}; do
|
for x in ${url_src_dst_vers}; do
|
||||||
IFS='^' read -r _url _src _dst _ver <<POSIX_HERESTRING
|
IFS='^' read -r _url _src _dst _ver <<POSIX_HERESTRING
|
||||||
$x
|
$x
|
||||||
@@ -296,64 +354,96 @@ IFS=':' read -r image _ <<POSIX_HERESTRING
|
|||||||
${DOCS_IMAGE}
|
${DOCS_IMAGE}
|
||||||
POSIX_HERESTRING
|
POSIX_HERESTRING
|
||||||
|
|
||||||
if [ "${image}" = "grafana/doc-validator" ]; then
|
case "${image}" in
|
||||||
echo
|
'grafana/doc-validator')
|
||||||
"${PODMAN}" run \
|
proj="$(new_proj "$1")"
|
||||||
--init \
|
echo
|
||||||
--interactive \
|
"${PODMAN}" run \
|
||||||
--name "${DOCS_CONTAINER}" \
|
--init \
|
||||||
--platform linux/amd64 \
|
--interactive \
|
||||||
--rm \
|
--name "${DOCS_CONTAINER}" \
|
||||||
--tty \
|
--platform linux/amd64 \
|
||||||
${volumes} \
|
--rm \
|
||||||
"${DOCS_IMAGE}" \
|
--tty \
|
||||||
--skip-image-validation \
|
${volumes} \
|
||||||
--include="${DOC_VALIDATOR_INCLUDE}" \
|
"${DOCS_IMAGE}" \
|
||||||
/hugo/content/docs \
|
"--include=${DOC_VALIDATOR_INCLUDE}" \
|
||||||
"$(proj_canonical "$(new_proj "$1")")"
|
"--skip-checks=${DOC_VALIDATOR_SKIP_CHECKS}" \
|
||||||
else
|
/hugo/content/docs \
|
||||||
|
"$(proj_canonical "${proj}")" | sed "s#$(proj_dst "${proj}")#sources#"
|
||||||
cat <<EOF >/tmp/make-docs-entrypoint
|
;;
|
||||||
|
'grafana/vale')
|
||||||
|
proj="$(new_proj "$1")"
|
||||||
|
echo
|
||||||
|
"${PODMAN}" run \
|
||||||
|
--init \
|
||||||
|
--interactive \
|
||||||
|
--name "${DOCS_CONTAINER}" \
|
||||||
|
--platform linux/amd64 \
|
||||||
|
--rm \
|
||||||
|
--tty \
|
||||||
|
${volumes} \
|
||||||
|
"${DOCS_IMAGE}" \
|
||||||
|
"--minAlertLevel=${VALE_MINALERTLEVEL}" \
|
||||||
|
--config=/etc/vale/.vale.ini \
|
||||||
|
--output=line \
|
||||||
|
/hugo/content/docs | sed "s#$(proj_dst "${proj}")#sources#"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
tempfile="$(mktemp -t make-docs.XXX)"
|
||||||
|
cat <<EOF >"${tempfile}"
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
for redirect in ${redirects}; do
|
for redirect in ${redirects}; do
|
||||||
IFS='^' read -r path ver <<<"\${redirect}"
|
IFS='^' read -r path ver <<<"\${redirect}"
|
||||||
echo -e "---\\nredirectURL: \"\${path/\/hugo\/content/}\"\\ntype: redirect\\n---\\n" > "\${path/\${ver}/_index.md}"
|
echo -e "---\\nredirectURL: \"\${path/\/hugo\/content/}\"\\ntype: redirect\\nversioned: true\\n---\\n" > "\${path/\${ver}/_index.md}"
|
||||||
|
|
||||||
if [[ -n "${WEBSITE_MOUNTS}" ]]; then
|
|
||||||
unset WEBSITE_SKIP_MOUNTS
|
|
||||||
fi
|
|
||||||
done
|
done
|
||||||
|
|
||||||
|
for x in "${url_src_dst_vers}"; do
|
||||||
|
IFS='^' read -r _ _ dst _ <<<"\${x}"
|
||||||
|
|
||||||
|
while [[ -n "\${dst}" ]]; do
|
||||||
|
touch "\${dst}/_index.md"
|
||||||
|
dst="\${dst%/*}"
|
||||||
|
done
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ -n "${WEBSITE_MOUNTS}" ]]; then
|
||||||
|
unset WEBSITE_SKIP_MOUNTS
|
||||||
|
fi
|
||||||
|
|
||||||
${WEBSITE_EXEC}
|
${WEBSITE_EXEC}
|
||||||
EOF
|
EOF
|
||||||
chmod +x /tmp/make-docs-entrypoint
|
chmod +x "${tempfile}"
|
||||||
volumes="${volumes} --volume=/tmp/make-docs-entrypoint:/entrypoint"
|
volumes="${volumes} --volume=$(realpath "${tempfile}"):/entrypoint"
|
||||||
readonly volumes
|
readonly volumes
|
||||||
|
|
||||||
echo
|
echo
|
||||||
echo "Documentation will be served at the following URLs:"
|
echo "Documentation will be served at the following URLs:"
|
||||||
for x in ${url_src_dst_vers}; do
|
for x in ${url_src_dst_vers}; do
|
||||||
IFS='^' read -r url _ _ <<POSIX_HERESTRING
|
IFS='^' read -r url _ _ <<POSIX_HERESTRING
|
||||||
$x
|
$x
|
||||||
POSIX_HERESTRING
|
POSIX_HERESTRING
|
||||||
|
|
||||||
if [ -n "${url}" ]; then
|
if [ -n "${url}" ]; then
|
||||||
echo " ${url}"
|
if [ "${_url}" != "arbitrary" ]; then
|
||||||
fi
|
echo " ${url}"
|
||||||
done
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
echo
|
echo
|
||||||
"${PODMAN}" run \
|
"${PODMAN}" run \
|
||||||
--env "HUGO_REFLINKSERRORLEVEL=${HUGO_REFLINKSERRORLEVEL}" \
|
--env "HUGO_REFLINKSERRORLEVEL=${HUGO_REFLINKSERRORLEVEL}" \
|
||||||
--init \
|
--init \
|
||||||
--interactive \
|
--interactive \
|
||||||
--name "${DOCS_CONTAINER}" \
|
--name "${DOCS_CONTAINER}" \
|
||||||
--platform linux/amd64 \
|
--platform linux/amd64 \
|
||||||
--publish "${DOCS_HOST_PORT}:3002" \
|
--publish "${DOCS_HOST_PORT}:3002" \
|
||||||
--publish "3003:3003" \
|
--publish "3003:3003" \
|
||||||
--rm \
|
--rm \
|
||||||
--tty \
|
--tty \
|
||||||
${volumes} \
|
${volumes} \
|
||||||
"${DOCS_IMAGE}" \
|
"${DOCS_IMAGE}" \
|
||||||
/entrypoint
|
/entrypoint
|
||||||
fi
|
;;
|
||||||
|
esac
|
||||||
|
|||||||
@@ -3,6 +3,199 @@ aliases:
|
|||||||
- /docs/grafana/v1.1/
|
- /docs/grafana/v1.1/
|
||||||
- /docs/grafana/v3.1/
|
- /docs/grafana/v3.1/
|
||||||
- guides/reference/admin/
|
- guides/reference/admin/
|
||||||
|
cascade:
|
||||||
|
# Until a better mechanism for arrangement is thought of, the following sequence should be ordered alphabetically by the `_target.path` value.
|
||||||
|
- _target: { path: /docs/grafana/** } # Default to every page having "Enterprise" and "Open source" labels.
|
||||||
|
labels:
|
||||||
|
products:
|
||||||
|
- enterprise
|
||||||
|
- oss
|
||||||
|
|
||||||
|
- _target: { path: /docs/grafana/** }
|
||||||
|
labels:
|
||||||
|
products:
|
||||||
|
- enterprise
|
||||||
|
- oss
|
||||||
|
|
||||||
|
- _target: { path: /docs/grafana/*/administration/** }
|
||||||
|
labels:
|
||||||
|
products:
|
||||||
|
- cloud
|
||||||
|
- enterprise
|
||||||
|
- oss
|
||||||
|
|
||||||
|
- _target: { path: /docs/grafana/*/administration/enterprise-licensing/** }
|
||||||
|
labels:
|
||||||
|
products:
|
||||||
|
- enterprise
|
||||||
|
|
||||||
|
- _target: { path: /docs/grafana/*/administration/organization-management/** }
|
||||||
|
labels:
|
||||||
|
products:
|
||||||
|
- enterprise
|
||||||
|
- oss
|
||||||
|
|
||||||
|
- _target: { path: /docs/grafana/*/administration/provisioning/** }
|
||||||
|
labels:
|
||||||
|
products:
|
||||||
|
- enterprise
|
||||||
|
- oss
|
||||||
|
|
||||||
|
- _target: { path: /docs/grafana/*/administration/recorded-queries/** }
|
||||||
|
labels:
|
||||||
|
products:
|
||||||
|
- cloud
|
||||||
|
- enterprise
|
||||||
|
|
||||||
|
- _target: { path: /docs/grafana/*/administration/roles-and-permissions/access-control/** }
|
||||||
|
labels:
|
||||||
|
products:
|
||||||
|
- cloud
|
||||||
|
- enterprise
|
||||||
|
|
||||||
|
- _target: { path: /docs/grafana/*/administration/stats-and-license/** }
|
||||||
|
labels:
|
||||||
|
products:
|
||||||
|
- enterprise
|
||||||
|
- oss
|
||||||
|
|
||||||
|
- _target: { path: /docs/grafana/*/alerting/** }
|
||||||
|
labels:
|
||||||
|
products:
|
||||||
|
- cloud
|
||||||
|
- enterprise
|
||||||
|
- oss
|
||||||
|
|
||||||
|
- _target: { path: /docs/grafana/*/breaking-changes/** }
|
||||||
|
labels:
|
||||||
|
products:
|
||||||
|
- cloud
|
||||||
|
- enterprise
|
||||||
|
- oss
|
||||||
|
|
||||||
|
- _target: { path: /docs/grafana/*/dashboards/** }
|
||||||
|
labels:
|
||||||
|
products:
|
||||||
|
- cloud
|
||||||
|
- enterprise
|
||||||
|
- oss
|
||||||
|
|
||||||
|
- _target: { path: /docs/grafana/*/datasources/** }
|
||||||
|
labels:
|
||||||
|
products:
|
||||||
|
- cloud
|
||||||
|
- enterprise
|
||||||
|
- oss
|
||||||
|
|
||||||
|
- _target: { path: /docs/grafana/*/explore/** }
|
||||||
|
labels:
|
||||||
|
products:
|
||||||
|
- cloud
|
||||||
|
- enterprise
|
||||||
|
- oss
|
||||||
|
|
||||||
|
- _target: { path: /docs/grafana/*/fundamentals/** }
|
||||||
|
labels:
|
||||||
|
products:
|
||||||
|
- cloud
|
||||||
|
- enterprise
|
||||||
|
- oss
|
||||||
|
|
||||||
|
- _target: { path: /docs/grafana/*/introduction/grafana-cloud/** }
|
||||||
|
labels:
|
||||||
|
products:
|
||||||
|
- cloud
|
||||||
|
|
||||||
|
- _target: { path: /docs/grafana/*/introduction/grafana-enterprise/** }
|
||||||
|
labels:
|
||||||
|
products:
|
||||||
|
- enterprise
|
||||||
|
|
||||||
|
- _target: { path: /docs/grafana/*/panels-visualizations/** }
|
||||||
|
labels:
|
||||||
|
products:
|
||||||
|
- cloud
|
||||||
|
- enterprise
|
||||||
|
- oss
|
||||||
|
|
||||||
|
- _target: { path: /docs/grafana/*/release-notes/** }
|
||||||
|
labels:
|
||||||
|
products:
|
||||||
|
- cloud
|
||||||
|
- enterprise
|
||||||
|
- oss
|
||||||
|
|
||||||
|
- _target: { path: /docs/grafana/*/search/** }
|
||||||
|
labels:
|
||||||
|
products:
|
||||||
|
- cloud
|
||||||
|
- enterprise
|
||||||
|
- oss
|
||||||
|
|
||||||
|
- _target: { path: /docs/grafana/*/setup-grafana/configure-security/audit-grafana/** }
|
||||||
|
labels:
|
||||||
|
products:
|
||||||
|
- cloud
|
||||||
|
- enterprise
|
||||||
|
|
||||||
|
- _target: { path: /docs/grafana/*/setup-grafana/configure-security/configure-authentication/** }
|
||||||
|
labels:
|
||||||
|
products:
|
||||||
|
- cloud
|
||||||
|
- enterprise
|
||||||
|
- oss
|
||||||
|
|
||||||
|
- _target: { path: /docs/grafana/*/setup-grafana/configure-security/configure-authentication/enhanced-ldap/** }
|
||||||
|
labels:
|
||||||
|
products:
|
||||||
|
- cloud
|
||||||
|
- enterprise
|
||||||
|
|
||||||
|
- _target: { path: /docs/grafana/*/setup-grafana/configure-security/configure-authentication/saml/** }
|
||||||
|
labels:
|
||||||
|
products:
|
||||||
|
- cloud
|
||||||
|
- enterprise
|
||||||
|
|
||||||
|
- _target:
|
||||||
|
path: /docs/grafana/*/setup-grafana/configure-security/configure-database-encryption/encrypt-secrets-using-hashicorp-key-vault/**
|
||||||
|
labels:
|
||||||
|
products:
|
||||||
|
- cloud
|
||||||
|
- enterprise
|
||||||
|
|
||||||
|
- _target: { path: /docs/grafana/*/setup-grafana/configure-security/configure-request-security/** }
|
||||||
|
labels:
|
||||||
|
products:
|
||||||
|
- cloud
|
||||||
|
- enterprise
|
||||||
|
- oss
|
||||||
|
|
||||||
|
- _target: { path: /docs/grafana/*/setup-grafana/configure-security/configure-team-sync/** }
|
||||||
|
labels:
|
||||||
|
products:
|
||||||
|
- cloud
|
||||||
|
- enterprise
|
||||||
|
|
||||||
|
- _target: { path: /docs/grafana/*/setup-grafana/configure-security/export-logs/** }
|
||||||
|
labels:
|
||||||
|
products:
|
||||||
|
- cloud
|
||||||
|
- oss
|
||||||
|
|
||||||
|
- _target: { path: /docs/grafana/*/troubleshooting/** }
|
||||||
|
labels:
|
||||||
|
products:
|
||||||
|
- cloud
|
||||||
|
- enterprise
|
||||||
|
- oss
|
||||||
|
|
||||||
|
- _target: { path: /docs/grafana/*/whatsnew/** }
|
||||||
|
labels:
|
||||||
|
products:
|
||||||
|
- cloud
|
||||||
|
- enterprise
|
||||||
|
- oss
|
||||||
description: Guides, installation, and feature documentation
|
description: Guides, installation, and feature documentation
|
||||||
keywords:
|
keywords:
|
||||||
- grafana
|
- grafana
|
||||||
@@ -70,8 +263,8 @@ title: Grafana documentation
|
|||||||
<h4>Provisioning</h4>
|
<h4>Provisioning</h4>
|
||||||
<p>Learn how to automate your Grafana configuration.</p>
|
<p>Learn how to automate your Grafana configuration.</p>
|
||||||
</a>
|
</a>
|
||||||
<a href="{{< relref "whatsnew/whats-new-in-v9-5/" >}}" class="nav-cards__item nav-cards__item--guide">
|
<a href="{{< relref "whatsnew/whats-new-in-v10-0/" >}}" class="nav-cards__item nav-cards__item--guide">
|
||||||
<h4>What's new in v9.5</h4>
|
<h4>What's new in v10</h4>
|
||||||
<p>Explore the features and enhancements in the latest release.</p>
|
<p>Explore the features and enhancements in the latest release.</p>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,4 @@
|
|||||||
---
|
---
|
||||||
cascade:
|
|
||||||
labels:
|
|
||||||
products:
|
|
||||||
- cloud
|
|
||||||
- enterprise
|
|
||||||
- oss
|
|
||||||
description: Administration
|
description: Administration
|
||||||
title: Administration
|
title: Administration
|
||||||
weight: 40
|
weight: 40
|
||||||
|
|||||||
@@ -17,7 +17,9 @@ An API key is a randomly generated string that external systems use to interact
|
|||||||
|
|
||||||
When you create an API key, you specify a **Role** that determines the permissions associated with the API key. Role permissions control that actions the API key can perform on Grafana resources.
|
When you create an API key, you specify a **Role** that determines the permissions associated with the API key. Role permissions control that actions the API key can perform on Grafana resources.
|
||||||
|
|
||||||
> **Note:** If you use Grafana v9.1 or newer, use service accounts instead of API keys. For more information, refer to [Grafana service accounts]({{< relref "../service-accounts/" >}}).
|
{{% admonition type="note" %}}
|
||||||
|
If you use Grafana v9.1 or newer, use service accounts instead of API keys. For more information, refer to [Grafana service accounts]({{< relref "../service-accounts/" >}}).
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
{{< section >}}
|
{{< section >}}
|
||||||
|
|
||||||
@@ -61,7 +63,9 @@ For more information about the benefits of service accounts, refer to [Grafana s
|
|||||||
|
|
||||||
The service account endpoints generate a machine user for authentication instead of using API keys. When you migrate an API key to a service account, a service account will be created with a service account token.
|
The service account endpoints generate a machine user for authentication instead of using API keys. When you migrate an API key to a service account, a service account will be created with a service account token.
|
||||||
|
|
||||||
> **Note:** If you are using API keys for authentication, we recommend that you migrate your integration to the service account authentication method. The API key will continue to work. You can locate the API key in the [Grafana service account tokens]({{< relref "../service-accounts/#service-account-tokens" >}}) details.
|
{{% admonition type="note" %}}
|
||||||
|
If you're currently using API keys for authentication, we strongly recommend to use Grafana Service Accounts instead. Rest assured, when migrating to Service Accounts, your existing API keys will continue working as before. To find the migrated API keys, navigate to the Service Accounts section and select the Service Account Tokens tab. For more information, please refer to the [Grafana service account tokens]({{< relref "../service-accounts/#service-account-tokens" >}}) details.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
## Ways of migrating API keys to service accounts
|
## Ways of migrating API keys to service accounts
|
||||||
|
|
||||||
@@ -256,7 +260,9 @@ resource "grafana_service_account_token" "sat-foo" {
|
|||||||
|
|
||||||
This section shows you how to migrate your Terraform configuration for Grafana cloud stack API keys to Grafana cloud stack service accounts. For migration your cloud stack api keys, use the `grafana_cloud_stack_service_account` and `gafana_cloud_stack_service_account_token` resources see [Grafana Cloud Stack Service Accounts in Terraform](https://registry.terraform.io/providers/grafana/grafana/latest/docs/resources/cloud_stack_service_account).
|
This section shows you how to migrate your Terraform configuration for Grafana cloud stack API keys to Grafana cloud stack service accounts. For migration your cloud stack api keys, use the `grafana_cloud_stack_service_account` and `gafana_cloud_stack_service_account_token` resources see [Grafana Cloud Stack Service Accounts in Terraform](https://registry.terraform.io/providers/grafana/grafana/latest/docs/resources/cloud_stack_service_account).
|
||||||
|
|
||||||
> **Note:** This is only relevant for Grafana Cloud **Stack** API keys `grafana_cloud_stack_api_key`. Grafana Cloud API keys resource `grafana_cloud_api_key` are not deprecated and should be used for authentication for managing your Grafana cloud.
|
{{% admonition type="note" %}}
|
||||||
|
This is only relevant for Grafana Cloud **Stack** API keys `grafana_cloud_stack_api_key`. Grafana Cloud API keys resource `grafana_cloud_api_key` are not deprecated and should be used for authentication for managing your Grafana cloud.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
#### Steps
|
#### Steps
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,9 @@ Only users with the organization admin role can add data sources.
|
|||||||
|
|
||||||
Before you can create your first dashboard, you need to add your data source.
|
Before you can create your first dashboard, you need to add your data source.
|
||||||
|
|
||||||
> **Note:** Only users with the organization admin role can add data sources.
|
{{% admonition type="note" %}}
|
||||||
|
Only users with the organization admin role can add data sources.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
**To add a data source:**
|
**To add a data source:**
|
||||||
|
|
||||||
@@ -36,7 +38,9 @@ Before you can create your first dashboard, you need to add your data source.
|
|||||||
|
|
||||||
You can configure data source permissions to allow or deny certain users the ability to query or edit a data source. Each data source’s configuration includes a Permissions tab where you can restrict data source permissions to specific users, teams, or roles.
|
You can configure data source permissions to allow or deny certain users the ability to query or edit a data source. Each data source’s configuration includes a Permissions tab where you can restrict data source permissions to specific users, teams, or roles.
|
||||||
|
|
||||||
> **Note:** Available in [Grafana Enterprise]({{< relref "../../introduction/grafana-enterprise/" >}}) and [Grafana Cloud Pro and Advanced](/docs/grafana-cloud).
|
{{% admonition type="note" %}}
|
||||||
|
Available in [Grafana Enterprise]({{< relref "../../introduction/grafana-enterprise/" >}}) and [Grafana Cloud Pro and Advanced](/docs/grafana-cloud).
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
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 to which they have access. Additionally, by default, data sources can be edited by the user who created the data source, as well as users with the `Admin` role.
|
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 to which they have access. Additionally, by default, data sources can be edited by the user who created the data source, as well as users with the `Admin` role.
|
||||||
|
|
||||||
@@ -83,11 +87,15 @@ When query caching is enabled, Grafana temporarily stores the results of data so
|
|||||||
|
|
||||||
Query caching works for all backend data sources. You can enable the cache globally and configure the cache duration (also called Time to Live, or TTL).
|
Query caching works for all backend data sources. You can enable the cache globally and configure the cache duration (also called Time to Live, or TTL).
|
||||||
|
|
||||||
> **Note:** Available in [Grafana Enterprise]({{< relref "../../introduction/grafana-enterprise/" >}}) and [Grafana Cloud Pro and Advanced](/docs/grafana-cloud/).
|
{{% admonition type="note" %}}
|
||||||
|
Available in [Grafana Enterprise]({{< relref "../../introduction/grafana-enterprise/" >}}) and [Grafana Cloud Pro and Advanced](/docs/grafana-cloud/).
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
The following cache backends are available: in-memory, Redis, and Memcached.
|
The following cache backends are available: in-memory, Redis, and Memcached.
|
||||||
|
|
||||||
> **Note:** Storing cached queries in-memory can increase Grafana's memory footprint. In production environments, a Redis or Memcached backend is highly recommended.
|
{{% admonition type="note" %}}
|
||||||
|
Storing cached queries in-memory can increase Grafana's memory footprint. In production environments, a Redis or Memcached backend is highly recommended.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
When a panel queries a cached data source, the time until this query fetches fresh data is determined by the panel's **interval.** This means that wider panels and dashboards with shorter time ranges fetch new data more frequently than narrower panels and dashboards with longer time ranges.
|
When a panel queries a cached data source, the time until this query fetches fresh data is determined by the panel's **interval.** This means that wider panels and dashboards with shorter time ranges fetch new data more frequently than narrower panels and dashboards with longer time ranges.
|
||||||
|
|
||||||
@@ -136,7 +144,9 @@ You can optionally override a data source's configured TTL for individual dashbo
|
|||||||
|
|
||||||
{{< figure max-width="500px" src="/media/docs/grafana/per-panel-cache-ttl-9-4.png" caption="Set Cache TTL for a single panel" >}}
|
{{< figure max-width="500px" src="/media/docs/grafana/per-panel-cache-ttl-9-4.png" caption="Set Cache TTL for a single panel" >}}
|
||||||
|
|
||||||
> **Note:** If query caching is enabled and the Cache tab is not visible in a data source's settings, then query caching is not available for that data source.
|
{{% admonition type="note" %}}
|
||||||
|
If query caching is enabled and the Cache tab is not visible in a data source's settings, then query caching is not available for that data source.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
To configure global settings for query caching, refer to the [Query caching section of Enterprise Configuration]({{< relref "../../setup-grafana/configure-grafana/enterprise-configuration/#caching" >}}).
|
To configure global settings for query caching, refer to the [Query caching section of Enterprise Configuration]({{< relref "../../setup-grafana/configure-grafana/enterprise-configuration/#caching" >}}).
|
||||||
|
|
||||||
@@ -155,7 +165,9 @@ To disable query caching for an entire Grafana instance, set the `enabled` flag
|
|||||||
|
|
||||||
If you experience performance issues or repeated queries become slower to execute, consider clearing your cache.
|
If you experience performance issues or repeated queries become slower to execute, consider clearing your cache.
|
||||||
|
|
||||||
> **Note:** This action impacts all cache-enabled data sources. If you are using Memcached, the system clears all data from the Memcached instance.
|
{{% admonition type="note" %}}
|
||||||
|
This action impacts all cache-enabled data sources. If you are using Memcached, the system clears all data from the Memcached instance.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
1. Click **Connections** in the left-side menu.
|
1. Click **Connections** in the left-side menu.
|
||||||
1. Under Your Connections, click **Data sources**.
|
1. Under Your Connections, click **Data sources**.
|
||||||
|
|||||||
@@ -8,10 +8,6 @@ aliases:
|
|||||||
- ../enterprise/license/license-expiration/
|
- ../enterprise/license/license-expiration/
|
||||||
- ../enterprise/license/license-restrictions/
|
- ../enterprise/license/license-restrictions/
|
||||||
- license-restrictions/
|
- license-restrictions/
|
||||||
cascade:
|
|
||||||
labels:
|
|
||||||
products:
|
|
||||||
- enterprise
|
|
||||||
description: Activate and manage a Grafana Enterprise license
|
description: Activate and manage a Grafana Enterprise license
|
||||||
keywords:
|
keywords:
|
||||||
- grafana
|
- grafana
|
||||||
|
|||||||
@@ -8,10 +8,6 @@ description: Describes how to use organizations to isolate dashboard to users an
|
|||||||
keywords:
|
keywords:
|
||||||
- organizations
|
- organizations
|
||||||
- dashboards
|
- dashboards
|
||||||
labels:
|
|
||||||
products:
|
|
||||||
- enterprise
|
|
||||||
- oss
|
|
||||||
menuTitle: Manage organizations
|
menuTitle: Manage organizations
|
||||||
title: Manage organizations
|
title: Manage organizations
|
||||||
weight: 200
|
weight: 200
|
||||||
@@ -88,7 +84,9 @@ For more information about adding users to an organization, refer to [Add a user
|
|||||||
|
|
||||||
This action permanently removes an organization from your Grafana server.
|
This action permanently removes an organization from your Grafana server.
|
||||||
|
|
||||||
> **Warning:** Deleting the organization also deletes all teams and dashboards associated the organization.
|
{{% admonition type="warning" %}}
|
||||||
|
Deleting the organization also deletes all teams and dashboards associated the organization.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
### Before you begin
|
### Before you begin
|
||||||
|
|
||||||
|
|||||||
@@ -194,7 +194,9 @@ Users with the Grafana Server Admin flag on their account or access to the confi
|
|||||||
default_home_dashboard_path = data/main-dashboard.json
|
default_home_dashboard_path = data/main-dashboard.json
|
||||||
```
|
```
|
||||||
|
|
||||||
> **Note:** On Linux, Grafana uses `/usr/share/grafana/public/dashboards/home.json` as the default home dashboard location.
|
{{% admonition type="note" %}}
|
||||||
|
On Linux, Grafana uses `/usr/share/grafana/public/dashboards/home.json` as the default home dashboard location.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
### Set the home dashboard for your organization
|
### Set the home dashboard for your organization
|
||||||
|
|
||||||
|
|||||||
@@ -49,7 +49,9 @@ With [RBAC]({{< relref "../roles-and-permissions/access-control/#about-rbac" >}}
|
|||||||
|
|
||||||
By default, Viewers, Editors and Admins have access to all App Plugins that their organization role allows them to access, thanks to the `fixed:plugins.app:reader` role.
|
By default, Viewers, Editors and Admins have access to all App Plugins that their organization role allows them to access, thanks to the `fixed:plugins.app:reader` role.
|
||||||
|
|
||||||
> **Note:** Revoking this RBAC role from some users, will prevent them from accessing app plugins. But granting this RBAC role to users will only allow them to see app plugins their organization role allows them to see.
|
{{% admonition type="note" %}}
|
||||||
|
Revoking this RBAC role from some users, will prevent them from accessing app plugins. But granting this RBAC role to users will only allow them to see app plugins their organization role allows them to see.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
To prevent users from seeing an app plugin, refer to [this permissions scenarios]({{< relref "../roles-and-permissions/access-control/plan-rbac-rollout-strategy#prevent-viewers-from-accessing-an-app-plugin" >}}).
|
To prevent users from seeing an app plugin, refer to [this permissions scenarios]({{< relref "../roles-and-permissions/access-control/plan-rbac-rollout-strategy#prevent-viewers-from-accessing-an-app-plugin" >}}).
|
||||||
|
|
||||||
@@ -197,7 +199,9 @@ If you've allowed loading of an unsigned plugin, then Grafana writes a warning m
|
|||||||
WARN[06-01|16:45:59] Running an unsigned plugin pluginID=<plugin id>
|
WARN[06-01|16:45:59] Running an unsigned plugin pluginID=<plugin id>
|
||||||
```
|
```
|
||||||
|
|
||||||
> **Note:** If you're developing a plugin, then you can enable development mode to allow all unsigned plugins.
|
{{% admonition type="note" %}}
|
||||||
|
If you're developing a plugin, then you can enable development mode to allow all unsigned plugins.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
## Learn more
|
## Learn more
|
||||||
|
|
||||||
|
|||||||
@@ -5,10 +5,6 @@ description: Describes provisioning settings for Grafana using configuration fil
|
|||||||
keywords:
|
keywords:
|
||||||
- grafana
|
- grafana
|
||||||
- provisioning
|
- provisioning
|
||||||
labels:
|
|
||||||
products:
|
|
||||||
- enterprise
|
|
||||||
- oss
|
|
||||||
title: Provision Grafana
|
title: Provision Grafana
|
||||||
weight: 600
|
weight: 600
|
||||||
---
|
---
|
||||||
@@ -27,10 +23,12 @@ See [Configuration]({{< relref "../../setup-grafana/configure-grafana/" >}}) for
|
|||||||
- Custom configuration from `$WORKING_DIR/conf/custom.ini`
|
- Custom configuration from `$WORKING_DIR/conf/custom.ini`
|
||||||
- The custom configuration file path can be overridden using the `--config` parameter
|
- The custom configuration file path can be overridden using the `--config` parameter
|
||||||
|
|
||||||
> **Note:** If you have installed Grafana using the `deb` or `rpm`
|
{{% admonition type="note" %}}
|
||||||
> packages, then your configuration file is located at
|
If you have installed Grafana using the `deb` or `rpm`
|
||||||
> `/etc/grafana/grafana.ini`. This path is specified in the Grafana
|
packages, then your configuration file is located at
|
||||||
> init.d script using `--config` file parameter.
|
`/etc/grafana/grafana.ini`. This path is specified in the Grafana
|
||||||
|
init.d script using `--config` file parameter.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
### Using Environment Variables
|
### Using Environment Variables
|
||||||
|
|
||||||
@@ -61,13 +59,15 @@ Currently we do not provide any scripts/manifests for configuring Grafana. Rathe
|
|||||||
| --------- | -------------------------------------------------------------------------------------------------------------- |
|
| --------- | -------------------------------------------------------------------------------------------------------------- |
|
||||||
| Puppet | [https://forge.puppet.com/puppet/grafana](https://forge.puppet.com/puppet/grafana) |
|
| Puppet | [https://forge.puppet.com/puppet/grafana](https://forge.puppet.com/puppet/grafana) |
|
||||||
| Ansible | [https://github.com/cloudalchemy/ansible-grafana](https://github.com/cloudalchemy/ansible-grafana) |
|
| Ansible | [https://github.com/cloudalchemy/ansible-grafana](https://github.com/cloudalchemy/ansible-grafana) |
|
||||||
| Chef | [https://github.com/JonathanTron/chef-grafana](https://github.com/JonathanTron/chef-grafana) |
|
| Chef | [https://github.com/sous-chefs/chef-grafana](https://github.com/sous-chefs/chef-grafana) |
|
||||||
| Saltstack | [https://github.com/salt-formulas/salt-formula-grafana](https://github.com/salt-formulas/salt-formula-grafana) |
|
| Saltstack | [https://github.com/salt-formulas/salt-formula-grafana](https://github.com/salt-formulas/salt-formula-grafana) |
|
||||||
| Jsonnet | [https://github.com/grafana/grafonnet-lib/](https://github.com/grafana/grafonnet-lib/) |
|
| Jsonnet | [https://github.com/grafana/grafonnet-lib/](https://github.com/grafana/grafonnet-lib/) |
|
||||||
|
|
||||||
## Data sources
|
## Data sources
|
||||||
|
|
||||||
> **Note:** Available in Grafana v5.0 and higher.
|
{{% admonition type="note" %}}
|
||||||
|
Available in Grafana v5.0 and higher.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
You can manage data sources in Grafana by adding YAML configuration files in the [`provisioning/datasources`]({{< relref "../../setup-grafana/configure-grafana#provisioning" >}}) directory.
|
You can manage data sources in Grafana by adding YAML configuration files in the [`provisioning/datasources`]({{< relref "../../setup-grafana/configure-grafana#provisioning" >}}) directory.
|
||||||
Each config file can contain a list of `datasources` to add or update during startup.
|
Each config file can contain a list of `datasources` to add or update during startup.
|
||||||
@@ -167,7 +167,9 @@ To provision the rest of a data source's settings, include them as a JSON blob i
|
|||||||
|
|
||||||
Common settings in the [built-in core data sources]({{< relref "../../datasources#built-in-core-data-sources" >}}) include:
|
Common settings in the [built-in core data sources]({{< relref "../../datasources#built-in-core-data-sources" >}}) include:
|
||||||
|
|
||||||
> **Note:** Data sources tagged with _HTTP\*_ communicate using the HTTP protocol, which includes all core data source plugins except MySQL, PostgreSQL, and MSSQL.
|
{{% admonition type="note" %}}
|
||||||
|
Data sources tagged with _HTTP\*_ communicate using the HTTP protocol, which includes all core data source plugins except MySQL, PostgreSQL, and MSSQL.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
| Name | Type | Data source | Description |
|
| Name | Type | Data source | Description |
|
||||||
| ----------------------------- | ------- | ---------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
| ----------------------------- | ------- | ---------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
@@ -229,7 +231,9 @@ For examples of specific data sources' JSON data, refer to that [data source's d
|
|||||||
|
|
||||||
Secure JSON data is a map of settings that will be encrypted with [secret key]({{< relref "../../setup-grafana/configure-grafana#secret_key" >}}) from the Grafana config. The purpose of this is only to hide content from the users of the application. This should be used for storing TLS Cert and password that Grafana will append to the request on the server side. All of these settings are optional.
|
Secure JSON data is a map of settings that will be encrypted with [secret key]({{< relref "../../setup-grafana/configure-grafana#secret_key" >}}) from the Grafana config. The purpose of this is only to hide content from the users of the application. This should be used for storing TLS Cert and password that Grafana will append to the request on the server side. All of these settings are optional.
|
||||||
|
|
||||||
> **Note:** The _HTTP\*_ tag denotes data sources that communicate using the HTTP protocol, including all core data source plugins except MySQL, PostgreSQL, and MSSQL.
|
{{% admonition type="note" %}}
|
||||||
|
The _HTTP\*_ tag denotes data sources that communicate using the HTTP protocol, including all core data source plugins except MySQL, PostgreSQL, and MSSQL.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
| Name | Type | Data source | Description |
|
| Name | Type | Data source | Description |
|
||||||
| ----------------- | ------ | ---------------------------------- | -------------------------------------------------------- |
|
| ----------------- | ------ | ---------------------------------- | -------------------------------------------------------- |
|
||||||
@@ -264,12 +268,16 @@ datasources:
|
|||||||
|
|
||||||
## Plugins
|
## Plugins
|
||||||
|
|
||||||
> **Note:** Available in Grafana v7.1 and higher.
|
{{% admonition type="note" %}}
|
||||||
|
Available in Grafana v7.1 and higher.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
You can manage plugin applications in Grafana by adding one or more YAML config files in the [`provisioning/plugins`]({{< relref "../../setup-grafana/configure-grafana#provisioning" >}}) directory. Each config file can contain a list of `apps` that will be updated during start up. Grafana updates each app to match the configuration file.
|
You can manage plugin applications in Grafana by adding one or more YAML config files in the [`provisioning/plugins`]({{< relref "../../setup-grafana/configure-grafana#provisioning" >}}) directory. Each config file can contain a list of `apps` that will be updated during start up. Grafana updates each app to match the configuration file.
|
||||||
|
|
||||||
> **Note:** This feature enables you to provision plugin configurations, not the plugins themselves.
|
{{% admonition type="note" %}}
|
||||||
> The plugins must already be installed on the Grafana instance.
|
This feature enables you to provision plugin configurations, not the plugins themselves.
|
||||||
|
The plugins must already be installed on the Grafana instance.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
### Example plugin configuration file
|
### Example plugin configuration file
|
||||||
|
|
||||||
@@ -356,10 +364,12 @@ If the dashboard in the JSON file contains an [UID]({{< relref "../../dashboards
|
|||||||
When Grafana starts, it updates/inserts all dashboards available in the configured folders. If you modify the file, then the dashboard is also updated.
|
When Grafana starts, it updates/inserts all dashboards available in the configured folders. If you modify the file, then the dashboard is also updated.
|
||||||
By default, Grafana deletes dashboards in the database if the file is removed. You can disable this behavior using the `disableDeletion` setting.
|
By default, Grafana deletes dashboards in the database if the file is removed. You can disable this behavior using the `disableDeletion` setting.
|
||||||
|
|
||||||
> **Note:** Provisioning allows you to overwrite existing dashboards
|
{{% admonition type="note" %}}
|
||||||
> which leads to problems if you re-use settings that are supposed to be unique.
|
Provisioning allows you to overwrite existing dashboards
|
||||||
> Be careful not to re-use the same `title` multiple times within a folder
|
which leads to problems if you re-use settings that are supposed to be unique.
|
||||||
> or `uid` within the same installation as this will cause weird behaviors.
|
Be careful not to re-use the same `title` multiple times within a folder
|
||||||
|
or `uid` within the same installation as this will cause weird behaviors.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
### Provision folders structure from filesystem to Grafana
|
### Provision folders structure from filesystem to Grafana
|
||||||
|
|
||||||
@@ -393,9 +403,13 @@ providers:
|
|||||||
|
|
||||||
`server` and `application` will become new folders in Grafana menu.
|
`server` and `application` will become new folders in Grafana menu.
|
||||||
|
|
||||||
> **Note:** `folder` and `folderUid` options should be empty or missing to make `foldersFromFilesStructure` work.
|
{{% admonition type="note" %}}
|
||||||
|
`folder` and `folderUid` options should be empty or missing to make `foldersFromFilesStructure` work.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
> **Note:** To provision dashboards to the General folder, store them in the root of your `path`.
|
{{% admonition type="note" %}}
|
||||||
|
To provision dashboards to the General folder, store them in the root of your `path`.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
## Alerting
|
## Alerting
|
||||||
|
|
||||||
@@ -403,7 +417,9 @@ For information on provisioning Grafana Alerting, refer to [Provision Grafana Al
|
|||||||
|
|
||||||
## Alert Notification Channels
|
## Alert Notification Channels
|
||||||
|
|
||||||
> **Note:** Alert Notification Channels are part of legacy alerting, which is deprecated and will be removed in Grafana 10. Use the Provision contact points section in [Create and manage alerting resources using file provisioning]({{< relref "../../alerting/set-up/provision-alerting-resources/file-provisioning" >}}).
|
{{% admonition type="note" %}}
|
||||||
|
Alert Notification Channels are part of legacy alerting, which is deprecated and will be removed in Grafana 10. Use the Provision contact points section in [Create and manage alerting resources using file provisioning]({{< relref "../../alerting/set-up/provision-alerting-resources/file-provisioning" >}}).
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
Alert Notification Channels can be provisioned by adding one or more YAML config files in the [`provisioning/notifiers`](/administration/configuration/#provisioning) directory.
|
Alert Notification Channels can be provisioned by adding one or more YAML config files in the [`provisioning/notifiers`](/administration/configuration/#provisioning) directory.
|
||||||
|
|
||||||
@@ -475,7 +491,9 @@ delete_notifiers:
|
|||||||
|
|
||||||
The following sections detail the supported settings and secure settings for each alert notification type. Secure settings are stored encrypted in the database and you add them to `secure_settings` in the YAML file instead of `settings`.
|
The following sections detail the supported settings and secure settings for each alert notification type. Secure settings are stored encrypted in the database and you add them to `secure_settings` in the YAML file instead of `settings`.
|
||||||
|
|
||||||
> **Note:** Secure settings is supported since Grafana v7.2.
|
{{% admonition type="note" %}}
|
||||||
|
Secure settings is supported since Grafana v7.2.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
#### Alert notification `pushover`
|
#### Alert notification `pushover`
|
||||||
|
|
||||||
|
|||||||
@@ -7,10 +7,6 @@ keywords:
|
|||||||
- query
|
- query
|
||||||
- queries
|
- queries
|
||||||
- recorded
|
- recorded
|
||||||
labels:
|
|
||||||
products:
|
|
||||||
- cloud
|
|
||||||
- enterprise
|
|
||||||
title: Recorded queries
|
title: Recorded queries
|
||||||
weight: 300
|
weight: 300
|
||||||
---
|
---
|
||||||
@@ -21,11 +17,15 @@ Recorded queries allow you to see trends over time by taking a snapshot of a dat
|
|||||||
|
|
||||||
For our plugins that do not return time series, it might be useful to plot historical data. For example, you might want to query ServiceNow to see a history of request response times but it can only return current point-in-time metrics.
|
For our plugins that do not return time series, it might be useful to plot historical data. For example, you might want to query ServiceNow to see a history of request response times but it can only return current point-in-time metrics.
|
||||||
|
|
||||||
> **Note:** Available in [Grafana Enterprise]({{< relref "../../introduction/grafana-enterprise/" >}}).
|
{{% admonition type="note" %}}
|
||||||
|
Available in [Grafana Enterprise]({{< relref "../../introduction/grafana-enterprise/" >}}).
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
## How recorded queries work
|
## How recorded queries work
|
||||||
|
|
||||||
> **Note:** An administrator must configure a Prometheus data source and associate it with a [Remote write target](#remote-write-target) before recorded queries can be used.
|
{{% admonition type="note" %}}
|
||||||
|
An administrator must configure a Prometheus data source and associate it with a [Remote write target](#remote-write-target) before recorded queries can be used.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
Recorded queries only work with backend data source plugins. Refer to [Backend data source plugin](/tutorials/build-a-data-source-backend-plugin/) for more information about backend data source plugins. You can recorded three types of queries:
|
Recorded queries only work with backend data source plugins. Refer to [Backend data source plugin](/tutorials/build-a-data-source-backend-plugin/) for more information about backend data source plugins. You can recorded three types of queries:
|
||||||
|
|
||||||
|
|||||||
@@ -20,13 +20,17 @@ You can assign a user one of three types of permissions:
|
|||||||
- Organization permissions: Manage access to dashboards, alerts, plugins, teams, playlists, and other resources for an entire organization. The available roles are Viewer, Editor, and Admin.
|
- Organization permissions: Manage access to dashboards, alerts, plugins, teams, playlists, and other resources for an entire organization. The available roles are Viewer, Editor, and Admin.
|
||||||
- Dashboard and folder permission: Manage access to dashboards and folders
|
- Dashboard and folder permission: Manage access to dashboards and folders
|
||||||
|
|
||||||
> **Note**: If you are running Grafana Enterprise, you can also control access to data sources and use role-based access control to grant user access to read and write permissions to specific Grafana resources. For more information about access control options available with Grafana Enterprise, refer to [Grafana Enterprise user permissions features](#grafana-enterprise-user-permissions-features).
|
{{% admonition type="note" %}}
|
||||||
|
If you are running Grafana Enterprise, you can also control access to data sources and use role-based access control to grant user access to read and write permissions to specific Grafana resources. For more information about access control options available with Grafana Enterprise, refer to [Grafana Enterprise user permissions features](#grafana-enterprise-user-permissions-features).
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
## Grafana server administrators
|
## Grafana server administrators
|
||||||
|
|
||||||
A Grafana server administrator manages server-wide settings and access to resources such as organizations, users, and licenses. Grafana includes a default server administrator that you can use to manage all of Grafana, or you can divide that responsibility among other server administrators that you create.
|
A Grafana server administrator manages server-wide settings and access to resources such as organizations, users, and licenses. Grafana includes a default server administrator that you can use to manage all of Grafana, or you can divide that responsibility among other server administrators that you create.
|
||||||
|
|
||||||
> **Note:** The server administrator role does not mean that the user is also a Grafana [organization administrator]({{< relref "#organization-roles" >}}).
|
{{% admonition type="note" %}}
|
||||||
|
The server administrator role does not mean that the user is also a Grafana [organization administrator]({{< relref "#organization-roles" >}}).
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
A server administrator can perform the following tasks:
|
A server administrator can perform the following tasks:
|
||||||
|
|
||||||
@@ -36,7 +40,9 @@ A server administrator can perform the following tasks:
|
|||||||
- View Grafana server statistics, including total users and active sessions
|
- View Grafana server statistics, including total users and active sessions
|
||||||
- Upgrade the server to Grafana Enterprise.
|
- Upgrade the server to Grafana Enterprise.
|
||||||
|
|
||||||
> **Note:** The server administrator role does not exist in Grafana Cloud.
|
{{% admonition type="note" %}}
|
||||||
|
The server administrator role does not exist in Grafana Cloud.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
To assign or remove server administrator privileges, see [Server user management]({{< relref "../user-management/server-user-management/assign-remove-server-admin-privileges/" >}}).
|
To assign or remove server administrator privileges, see [Server user management]({{< relref "../user-management/server-user-management/assign-remove-server-admin-privileges/" >}}).
|
||||||
|
|
||||||
@@ -112,7 +118,9 @@ For more information about assigning dashboard permissions, refer to [Grant dash
|
|||||||
|
|
||||||
If you have access to the Grafana server, you can modify the default editor role so that editors can use administrator permissions to manage dashboard folders, dashboards, and teams that they create.
|
If you have access to the Grafana server, you can modify the default editor role so that editors can use administrator permissions to manage dashboard folders, dashboards, and teams that they create.
|
||||||
|
|
||||||
> **Note**: This permission does not allow editors to manage folders, dashboards, and teams that they do not create.
|
{{% admonition type="note" %}}
|
||||||
|
This permission does not allow editors to manage folders, dashboards, and teams that they do not create.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
This setting can be used to enable self-organizing teams to administer their own dashboards.
|
This setting can be used to enable self-organizing teams to administer their own dashboards.
|
||||||
|
|
||||||
|
|||||||
@@ -3,11 +3,6 @@ aliases:
|
|||||||
- ../../enterprise/access-control/
|
- ../../enterprise/access-control/
|
||||||
- ../../enterprise/access-control/about-rbac/
|
- ../../enterprise/access-control/about-rbac/
|
||||||
- ../../enterprise/access-control/roles/
|
- ../../enterprise/access-control/roles/
|
||||||
cascade:
|
|
||||||
labels:
|
|
||||||
products:
|
|
||||||
- cloud
|
|
||||||
- enterprise
|
|
||||||
description: Role-based access control (RBAC) provides a standardized way of granting,
|
description: Role-based access control (RBAC) provides a standardized way of granting,
|
||||||
changing, and revoking access so that users can view and modify Grafana resources,
|
changing, and revoking access so that users can view and modify Grafana resources,
|
||||||
such as users and reports.
|
such as users and reports.
|
||||||
@@ -18,7 +13,9 @@ weight: 120
|
|||||||
|
|
||||||
# Role-based access control (RBAC)
|
# Role-based access control (RBAC)
|
||||||
|
|
||||||
> **Note:** Available in [Grafana Enterprise]({{< relref "../../../introduction/grafana-enterprise/" >}}) and [Grafana Cloud Advanced](/docs/grafana-cloud).
|
{{% admonition type="note" %}}
|
||||||
|
Available in [Grafana Enterprise]({{< relref "../../../introduction/grafana-enterprise/" >}}) and [Grafana Cloud](/docs/grafana-cloud).
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
RBAC provides a standardized way of granting, changing, and revoking access when it comes to viewing and modifying Grafana resources, such as dashboards, reports, and administrative settings.
|
RBAC provides a standardized way of granting, changing, and revoking access when it comes to viewing and modifying Grafana resources, such as dashboards, reports, and administrative settings.
|
||||||
|
|
||||||
@@ -62,7 +59,9 @@ Each basic role is comprised of a number of _permissions_. For example, the view
|
|||||||
- `Action: annotations:write, Scope: annotations:type:dashboard`: Enables the viewer to modify annotations of a dashboard.
|
- `Action: annotations:write, Scope: annotations:type:dashboard`: Enables the viewer to modify annotations of a dashboard.
|
||||||
- `Action: annotations:delete, Scope: annotations:type:dashboard`: Enables the viewer to remove annotations from a dashboard.
|
- `Action: annotations:delete, Scope: annotations:type:dashboard`: Enables the viewer to remove annotations from a dashboard.
|
||||||
|
|
||||||
> **Note:** You can't have a Grafana user without a basic role assigned.
|
{{% admonition type="note" %}}
|
||||||
|
You can't have a Grafana user without a basic role assigned.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
#### Basic role modification
|
#### Basic role modification
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,9 @@ weight: 40
|
|||||||
|
|
||||||
# Assign RBAC roles
|
# Assign RBAC roles
|
||||||
|
|
||||||
> **Note:** Available in [Grafana Enterprise]({{< relref "../../../../introduction/grafana-enterprise/" >}}) and [Grafana Cloud Advanced](/docs/grafana-cloud).
|
{{% admonition type="note" %}}
|
||||||
|
Available in [Grafana Enterprise]({{< relref "../../../../introduction/grafana-enterprise/" >}}) and [Grafana Cloud](/docs/grafana-cloud).
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
In this topic you'll learn how to use the role picker, provisioning, and the HTTP API to assign fixed and custom roles to users and teams.
|
In this topic you'll learn how to use the role picker, provisioning, and the HTTP API to assign fixed and custom roles to users and teams.
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,9 @@ weight: 30
|
|||||||
|
|
||||||
# Configure RBAC in Grafana
|
# Configure RBAC in Grafana
|
||||||
|
|
||||||
> **Note:** Available in [Grafana Enterprise]({{< relref "../../../../introduction/grafana-enterprise/" >}}) and [Grafana Cloud Advanced](/docs/grafana-cloud).
|
{{% admonition type="note" %}}
|
||||||
|
Available in [Grafana Enterprise]({{< relref "../../../../introduction/grafana-enterprise/" >}}) and [Grafana Cloud](/docs/grafana-cloud).
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
The table below describes all RBAC configuration options. Like any other Grafana configuration, you can apply these options as [environment variables]({{< relref "../../../../setup-grafana/configure-grafana/#configure-with-environment-variables" >}}).
|
The table below describes all RBAC configuration options. Like any other Grafana configuration, you can apply these options as [environment variables]({{< relref "../../../../setup-grafana/configure-grafana/#configure-with-environment-variables" >}}).
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,9 @@ weight: 80
|
|||||||
|
|
||||||
# RBAC permissions, actions, and scopes
|
# RBAC permissions, actions, and scopes
|
||||||
|
|
||||||
> **Note:** Available in [Grafana Enterprise]({{< relref "../../../../introduction/grafana-enterprise/" >}}) and [Grafana Cloud Advanced](/docs/grafana-cloud).
|
{{% admonition type="note" %}}
|
||||||
|
Available in [Grafana Enterprise]({{< relref "../../../../introduction/grafana-enterprise/" >}}) and [Grafana Cloud](/docs/grafana-cloud).
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
A permission is comprised of an action and a scope. When creating a custom role, consider the actions the user can perform and the resource(s) on which they can perform those actions.
|
A permission is comprised of an action and a scope. When creating a custom role, consider the actions the user can perform and the resource(s) on which they can perform those actions.
|
||||||
|
|
||||||
@@ -120,8 +122,8 @@ The following list contains role-based access control actions.
|
|||||||
| `settings:read` | `settings:*`<br>`settings:auth.saml:*`<br>`settings:auth.saml:enabled` (property level) | Read the [Grafana configuration settings]({{< relref "../../../../setup-grafana/configure-grafana/" >}}) |
|
| `settings:read` | `settings:*`<br>`settings:auth.saml:*`<br>`settings:auth.saml:enabled` (property level) | Read the [Grafana configuration settings]({{< relref "../../../../setup-grafana/configure-grafana/" >}}) |
|
||||||
| `settings:write` | `settings:*`<br>`settings:auth.saml:*`<br>`settings:auth.saml:enabled` (property level) | Update any Grafana configuration settings that can be [updated at runtime]({{< relref "../../../../setup-grafana/configure-grafana/settings-updates-at-runtime" >}}). |
|
| `settings:write` | `settings:*`<br>`settings:auth.saml:*`<br>`settings:auth.saml:enabled` (property level) | Update any Grafana configuration settings that can be [updated at runtime]({{< relref "../../../../setup-grafana/configure-grafana/settings-updates-at-runtime" >}}). |
|
||||||
| `status:accesscontrol` | `services:accesscontrol` | Get access-control enabled status. |
|
| `status:accesscontrol` | `services:accesscontrol` | Get access-control enabled status. |
|
||||||
| `teams.permissions:read` | `teams:*`<br>`teams:id:*` | Read members and External Group Synchronization setup for teams. |
|
| `teams.permissions:read` | `teams:*`<br>`teams:id:*` | Read members and Team Sync setup for teams. |
|
||||||
| `teams.permissions:write` | `teams:*`<br>`teams:id:*` | Add, remove and update members and manage External Group Synchronization setup for teams. |
|
| `teams.permissions:write` | `teams:*`<br>`teams:id:*` | Add, remove and update members and manage Team Sync setup for teams. |
|
||||||
| `teams.roles:add` | `permissions:type:delegate` | Assign a role to a team. |
|
| `teams.roles:add` | `permissions:type:delegate` | Assign a role to a team. |
|
||||||
| `teams.roles:read` | `teams:*` | List roles assigned directly to a team. |
|
| `teams.roles:read` | `teams:*` | List roles assigned directly to a team. |
|
||||||
| `teams.roles:remove` | `permissions:type:delegate` | Unassign a role from a team. |
|
| `teams.roles:remove` | `permissions:type:delegate` | Unassign a role from a team. |
|
||||||
|
|||||||
@@ -12,7 +12,9 @@ weight: 50
|
|||||||
|
|
||||||
# Manage RBAC roles
|
# Manage RBAC roles
|
||||||
|
|
||||||
> **Note:** Available in [Grafana Enterprise]({{< relref "../../../../introduction/grafana-enterprise/" >}}) and [Grafana Cloud Advanced](/docs/grafana-cloud).
|
{{% admonition type="note" %}}
|
||||||
|
Available in [Grafana Enterprise]({{< relref "../../../../introduction/grafana-enterprise/" >}}) and [Grafana Cloud](/docs/grafana-cloud).
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
This section includes instructions for how to view permissions associated with roles, create custom roles, and update and delete roles.
|
This section includes instructions for how to view permissions associated with roles, create custom roles, and update and delete roles.
|
||||||
|
|
||||||
@@ -192,7 +194,9 @@ roles:
|
|||||||
|
|
||||||
The following examples show you how to create a custom role using the Grafana HTTP API. For more information about the HTTP API, refer to [Create a new custom role]({{< relref "../../../../developers/http_api/access_control/#create-a-new-custom-role" >}}).
|
The following examples show you how to create a custom role using the Grafana HTTP API. For more information about the HTTP API, refer to [Create a new custom role]({{< relref "../../../../developers/http_api/access_control/#create-a-new-custom-role" >}}).
|
||||||
|
|
||||||
> **Note:** You cannot create a custom role with permissions that you do not have. For example, if you only have `users:create` permissions, then you cannot create a role that includes other permissions.
|
{{% admonition type="note" %}}
|
||||||
|
You cannot create a custom role with permissions that you do not have. For example, if you only have `users:create` permissions, then you cannot create a role that includes other permissions.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
The following example creates a `custom:users:admin` role and assigns the `users:create` action to it.
|
The following example creates a `custom:users:admin` role and assigns the `users:create` action to it.
|
||||||
|
|
||||||
@@ -301,8 +305,10 @@ roles:
|
|||||||
scope: 'folder:*'
|
scope: 'folder:*'
|
||||||
```
|
```
|
||||||
|
|
||||||
> **Note**: You can add multiple `fixed`, `basic` or `custom` roles to the `from` section. Their permissions will be copied and added to the basic role.
|
{{% admonition type="note" %}}
|
||||||
> <br/> **Note**: Make sure to **increment** the role version for the changes to be accounted for.
|
You can add multiple `fixed`, `basic` or `custom` roles to the `from` section. Their permissions will be copied and added to the basic role.
|
||||||
|
Make sure to **increment** the role version for the changes to be accounted for.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
You can also change basic roles' permissions using the API. Refer to the [RBAC HTTP API]({{< relref "../../../../developers/http_api/access_control/#update-a-role" >}}) for more details.
|
You can also change basic roles' permissions using the API. Refer to the [RBAC HTTP API]({{< relref "../../../../developers/http_api/access_control/#update-a-role" >}}) for more details.
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,9 @@ weight: 20
|
|||||||
|
|
||||||
# Plan your RBAC rollout strategy
|
# Plan your RBAC rollout strategy
|
||||||
|
|
||||||
> **Note:** Available in [Grafana Enterprise]({{< relref "../../../../introduction/grafana-enterprise/" >}}) and [Grafana Cloud Advanced](/docs/grafana-cloud).
|
{{% admonition type="note" %}}
|
||||||
|
Available in [Grafana Enterprise]({{< relref "../../../../introduction/grafana-enterprise/" >}}) and [Grafana Cloud](/docs/grafana-cloud).
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
An RBAC rollout strategy helps you determine _how_ you want to implement RBAC prior to assigning RBAC roles to users and teams.
|
An RBAC rollout strategy helps you determine _how_ you want to implement RBAC prior to assigning RBAC roles to users and teams.
|
||||||
|
|
||||||
@@ -60,7 +62,9 @@ Consider the following guidelines when you determine if you should modify basic
|
|||||||
|
|
||||||
- **Modify basic roles** when Grafana's definitions of what viewers, editors, and admins can do does not match your definition of these roles. You can add or remove permissions from any basic role.
|
- **Modify basic roles** when Grafana's definitions of what viewers, editors, and admins can do does not match your definition of these roles. You can add or remove permissions from any basic role.
|
||||||
|
|
||||||
> **Note:** Changes that you make to basic roles impact the role definition for all [organizations]({{< relref "../../../organization-management/" >}}) in the Grafana instance. For example, when you add the `fixed:users:writer` role's permissions to the viewer basic role, all viewers in any org in the Grafana instance can create users within that org.
|
{{% admonition type="note" %}}
|
||||||
|
Changes that you make to basic roles impact the role definition for all [organizations]({{< relref "../../../organization-management/" >}}) in the Grafana instance. For example, when you add the `fixed:users:writer` role's permissions to the viewer basic role, all viewers in any org in the Grafana instance can create users within that org.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
- **Create custom roles** when fixed role definitions don't meet you permissions requirements. For example, the `fixed:dashboards:writer` role allows users to delete dashboards. If you want some users or teams to be able to create and update but not delete dashboards, you can create a custom role with a name like `custom:dashboards:creator` that lacks the `dashboards:delete` permission.
|
- **Create custom roles** when fixed role definitions don't meet you permissions requirements. For example, the `fixed:dashboards:writer` role allows users to delete dashboards. If you want some users or teams to be able to create and update but not delete dashboards, you can create a custom role with a name like `custom:dashboards:creator` that lacks the `dashboards:delete` permission.
|
||||||
|
|
||||||
@@ -77,7 +81,9 @@ Use any of the following methods to assign RBAC roles to users and teams.
|
|||||||
|
|
||||||
We've compiled the following permissions rollout scenarios based on current Grafana implementations.
|
We've compiled the following permissions rollout scenarios based on current Grafana implementations.
|
||||||
|
|
||||||
> **Note:** If you have a use case that you'd like to share, feel free to contribute to this docs page. We'd love to hear from you!
|
{{% admonition type="note" %}}
|
||||||
|
If you have a use case that you'd like to share, feel free to contribute to this docs page. We'd love to hear from you!
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
### Provide internal viewer employees with the ability to use Explore, but prevent external viewer contractors from using Explore
|
### Provide internal viewer employees with the ability to use Explore, but prevent external viewer contractors from using Explore
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,9 @@ weight: 70
|
|||||||
|
|
||||||
# RBAC role definitions
|
# RBAC role definitions
|
||||||
|
|
||||||
> **Note:** Available in [Grafana Enterprise]({{< relref "../../../../introduction/grafana-enterprise/" >}}) and [Grafana Cloud Advanced](/docs/grafana-cloud).
|
{{% admonition type="note" %}}
|
||||||
|
Available in [Grafana Enterprise]({{< relref "../../../../introduction/grafana-enterprise/" >}}) and [Grafana Cloud](/docs/grafana-cloud).
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
The following tables list permissions associated with basic and fixed roles.
|
The following tables list permissions associated with basic and fixed roles.
|
||||||
|
|
||||||
@@ -95,7 +97,7 @@ The following tables list permissions associated with basic and fixed roles.
|
|||||||
|
|
||||||
### Alerting roles
|
### Alerting roles
|
||||||
|
|
||||||
If alerting is [enabled]({{< relref "../../../../alerting/migrating-alerts/opt-out/" >}}), you can use predefined roles to manage user access to alert rules, alert instances, and alert notification settings and create custom roles to limit user access to alert rules in a folder.
|
If alerting is [enabled]({{< relref "../../../../alerting/set-up/migrating-alerts/opt-out/" >}}), you can use predefined roles to manage user access to alert rules, alert instances, and alert notification settings and create custom roles to limit user access to alert rules in a folder.
|
||||||
|
|
||||||
Access to Grafana alert rules is an intersection of many permissions:
|
Access to Grafana alert rules is an intersection of many permissions:
|
||||||
|
|
||||||
@@ -108,10 +110,14 @@ For more information about the permissions required to access alert rules, refer
|
|||||||
|
|
||||||
### Grafana OnCall roles (beta)
|
### Grafana OnCall roles (beta)
|
||||||
|
|
||||||
> **Note:** Available from Grafana 9.4 in early access.
|
{{% admonition type="note" %}}
|
||||||
|
Available from Grafana 9.4 in early access.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
> **Note:** This feature is behind the `accessControlOnCall` feature toggle.
|
{{% admonition type="note" %}}
|
||||||
> You can enable feature toggles through configuration file or environment variables. See configuration [docs]({{< relref "../../../../setup-grafana/configure-grafana/#feature_toggles" >}}) for details.
|
This feature is behind the `accessControlOnCall` feature toggle.
|
||||||
|
You can enable feature toggles through configuration file or environment variables. See configuration [docs]({{< relref "../../../../setup-grafana/configure-grafana/#feature_toggles" >}}) for details.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
If you are using [Grafana OnCall](https://grafana.com/docs/oncall/latest/get-started/), you can try out the integration between Grafana OnCall and RBAC.
|
If you are using [Grafana OnCall](https://grafana.com/docs/oncall/latest/get-started/), you can try out the integration between Grafana OnCall and RBAC.
|
||||||
This will allow you to control access to different OnCall features using the following RBAC roles:
|
This will allow you to control access to different OnCall features using the following RBAC roles:
|
||||||
|
|||||||
@@ -11,7 +11,9 @@ weight: 60
|
|||||||
|
|
||||||
# Provisioning RBAC with Grafana
|
# Provisioning RBAC with Grafana
|
||||||
|
|
||||||
> **Note:** Available in [Grafana Enterprise]({{< relref "../../../../introduction/grafana-enterprise/" >}}) and [Grafana Cloud Advanced](/docs/grafana-cloud).
|
{{% admonition type="note" %}}
|
||||||
|
Available in [Grafana Enterprise]({{< relref "../../../../introduction/grafana-enterprise/" >}}) and [Grafana Cloud](/docs/grafana-cloud).
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
You can create, change or remove [Custom roles]({{< relref "./manage-rbac-roles/#create-custom-roles-using-provisioning" >}}) and create or remove [basic role assignments]({{< relref "./assign-rbac-roles/#assign-a-fixed-role-to-a-basic-role-using-provisioning" >}}), by adding one or more YAML configuration files in the `provisioning/access-control/` directory.
|
You can create, change or remove [Custom roles]({{< relref "./manage-rbac-roles/#create-custom-roles-using-provisioning" >}}) and create or remove [basic role assignments]({{< relref "./assign-rbac-roles/#assign-a-fixed-role-to-a-basic-role-using-provisioning" >}}), by adding one or more YAML configuration files in the `provisioning/access-control/` directory.
|
||||||
|
|
||||||
|
|||||||
@@ -10,7 +10,9 @@ weight: 60
|
|||||||
|
|
||||||
# Provisioning RBAC with Terraform
|
# Provisioning RBAC with Terraform
|
||||||
|
|
||||||
> **Note:** Available in [Grafana Enterprise]({{< relref "../../../../introduction/grafana-enterprise/" >}}) and [Grafana Cloud Advanced](/docs/grafana-cloud).
|
{{% admonition type="note" %}}
|
||||||
|
Available in [Grafana Enterprise]({{< relref "../../../../introduction/grafana-enterprise/" >}}) and [Grafana Cloud](/docs/grafana-cloud).
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
You can create, change or remove [Custom roles](https://registry.terraform.io/providers/grafana/grafana/latest/docs/resources/role) and create or remove [basic and custom role assignments](https://registry.terraform.io/providers/grafana/grafana/latest/docs/resources/role_assignment), by using [Terraform's Grafana provider](https://registry.terraform.io/providers/grafana/grafana/latest/docs).
|
You can create, change or remove [Custom roles](https://registry.terraform.io/providers/grafana/grafana/latest/docs/resources/role) and create or remove [basic and custom role assignments](https://registry.terraform.io/providers/grafana/grafana/latest/docs/resources/role_assignment), by using [Terraform's Grafana provider](https://registry.terraform.io/providers/grafana/grafana/latest/docs).
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,9 @@ filters = accesscontrol:debug accesscontrol.evaluator:debug dashboard.permission
|
|||||||
|
|
||||||
## Enable audit logging
|
## Enable audit logging
|
||||||
|
|
||||||
> **Note:** Available in [Grafana Enterprise]({{< relref "../../introduction/grafana-enterprise/" >}}) version 7.3 and later, and [Grafana Cloud Advanced](/docs/grafana-cloud).
|
{{% admonition type="note" %}}
|
||||||
|
Available in [Grafana Enterprise]({{< relref "../../introduction/grafana-enterprise/" >}}) version 7.3 and later, and [Grafana Cloud](/docs/grafana-cloud).
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
You can enable auditing in the Grafana configuration file.
|
You can enable auditing in the Grafana configuration file.
|
||||||
|
|
||||||
@@ -45,8 +47,10 @@ Learn more about [access control audit logs]({{< relref "../../../../setup-grafa
|
|||||||
This happens when an instance is downgraded from a version that uses RBAC to a version that uses the legacy access control, and dashboard, folder or data source permissions are updated.
|
This happens when an instance is downgraded from a version that uses RBAC to a version that uses the legacy access control, and dashboard, folder or data source permissions are updated.
|
||||||
These permission updates will not be applied to RBAC, so permissions will be out of sync when the instance is next upgraded to a version with RBAC.
|
These permission updates will not be applied to RBAC, so permissions will be out of sync when the instance is next upgraded to a version with RBAC.
|
||||||
|
|
||||||
> **Note:** the steps provided below will set all dashboard, folder and data source permissions to what they are set to with the legacy access control.
|
{{% admonition type="note" %}}
|
||||||
> If you have made dashboard, folder or data source permission updates with RBAC enabled, these updates will be wiped.
|
the steps provided below will set all dashboard, folder and data source permissions to what they are set to with the legacy access control.
|
||||||
|
If you have made dashboard, folder or data source permission updates with RBAC enabled, these updates will be wiped.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
To resynchronize the permissions:
|
To resynchronize the permissions:
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,9 @@ weight: 800
|
|||||||
|
|
||||||
You can use a service account to run automated workloads in Grafana, such as dashboard provisioning, configuration, or report generation. Create service accounts and tokens to authenticate applications, such as Terraform, with the Grafana API.
|
You can use a service account to run automated workloads in Grafana, such as dashboard provisioning, configuration, or report generation. Create service accounts and tokens to authenticate applications, such as Terraform, with the Grafana API.
|
||||||
|
|
||||||
> **Note:** Service accounts will eventually replace [API keys]({{< relref "../api-keys/" >}}) as the primary way to authenticate applications that interact with Grafana.
|
{{% admonition type="note" %}}
|
||||||
|
Service accounts will eventually replace [API keys]({{< relref "../api-keys/" >}}) as the primary way to authenticate applications that interact with Grafana.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
A common use case for creating a service account is to perform operations on automated or triggered tasks. You can use service accounts to:
|
A common use case for creating a service account is to perform operations on automated or triggered tasks. You can use service accounts to:
|
||||||
|
|
||||||
@@ -28,7 +30,9 @@ A common use case for creating a service account is to perform operations on aut
|
|||||||
|
|
||||||
In [Grafana Enterprise]({{< relref "../../introduction/grafana-enterprise/" >}}), you can also use service accounts in combination with [role-based access control]({{< relref "../roles-and-permissions/access-control/" >}}) to grant very specific permissions to applications that interact with Grafana.
|
In [Grafana Enterprise]({{< relref "../../introduction/grafana-enterprise/" >}}), you can also use service accounts in combination with [role-based access control]({{< relref "../roles-and-permissions/access-control/" >}}) to grant very specific permissions to applications that interact with Grafana.
|
||||||
|
|
||||||
> **Note:** Service accounts can only act in the organization they are created for. If you have the same task that is needed for multiple organizations, we recommend creating service accounts in each organization.
|
{{% admonition type="note" %}}
|
||||||
|
Service accounts can only act in the organization they are created for. If you have the same task that is needed for multiple organizations, we recommend creating service accounts in each organization.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
{{< vimeo 742056367 >}}
|
{{< vimeo 742056367 >}}
|
||||||
|
|
||||||
@@ -174,8 +178,10 @@ To list your token's permissions, use the `/api/access-control/user/permissions`
|
|||||||
|
|
||||||
#### Example
|
#### Example
|
||||||
|
|
||||||
> **Note:** The following command output is shortened to show only the relevant content.
|
{{% admonition type="note" %}}
|
||||||
> Authorize your request with the token whose permissions you want to check.
|
The following command output is shortened to show only the relevant content.
|
||||||
|
Authorize your request with the token whose permissions you want to check.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
curl -H "Authorization: Bearer glsa_HOruNAb7SOiCdshU9algkrq7FDsNSLAa_54e2f8be" -X GET '<grafana_url>/api/access-control/user/permissions' | jq
|
curl -H "Authorization: Bearer glsa_HOruNAb7SOiCdshU9algkrq7FDsNSLAa_54e2f8be" -X GET '<grafana_url>/api/access-control/user/permissions' | jq
|
||||||
|
|||||||
@@ -11,11 +11,7 @@ keywords:
|
|||||||
- configuration
|
- configuration
|
||||||
- server
|
- server
|
||||||
- settings
|
- settings
|
||||||
labels:
|
title: View server statistics and license
|
||||||
products:
|
|
||||||
- enterprise
|
|
||||||
- oss
|
|
||||||
title: Stats and license
|
|
||||||
weight: 400
|
weight: 400
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -25,11 +21,11 @@ This setting contains information about tools that Grafana Server Admins can use
|
|||||||
|
|
||||||
## View Grafana server settings
|
## View Grafana server settings
|
||||||
|
|
||||||
> Refer to [Role-based access control]({{< relref "../roles-and-permissions/access-control/" >}}) in Grafana Enterprise to understand how you can control access with RBAC permissions.
|
> Refer to [Role-based access control]({{< relref "../roles-and-permissions/access-control" >}}) in Grafana Enterprise to understand how you can control access with RBAC permissions.
|
||||||
|
|
||||||
If you are a Grafana server administrator, use the Settings tab to view the settings that are applied to your Grafana server via the [Configuration]({{< relref "../../setup-grafana/configure-grafana/#config-file-locations" >}}) file and any environmental variables.
|
If you are a Grafana server administrator, use the Settings tab to view the settings that are applied to your Grafana server via the [Configuration]({{< relref "../../setup-grafana/configure-grafana#configuration-file-location" >}}) file and any environmental variables.
|
||||||
|
|
||||||
> **Note:** Only Grafana server administrators can access the **Server Admin** menu. For more information about about administrative permissions, refer to [Roles and permissions]({{< relref "../roles-and-permissions/#grafana-server-administrators" >}}).
|
> **Note:** Only Grafana server administrators can access the **Server Admin** menu. For more information about about administrative permissions, refer to [Roles and permissions]({{< relref "../roles-and-permissions#grafana-server-administrators" >}}).
|
||||||
|
|
||||||
### View server settings
|
### View server settings
|
||||||
|
|
||||||
@@ -38,15 +34,15 @@ If you are a Grafana server administrator, use the Settings tab to view the sett
|
|||||||
|
|
||||||
### Available settings
|
### Available settings
|
||||||
|
|
||||||
For a full list of server settings, refer to [Configuration]({{< relref "../../setup-grafana/configure-grafana/" >}}).
|
For a full list of server settings, refer to [Configuration]({{< relref "../../setup-grafana/configure-grafana#server" >}}).
|
||||||
|
|
||||||
## View Grafana server stats
|
## View Grafana server stats
|
||||||
|
|
||||||
> Refer to [Role-based access control]({{< relref "../roles-and-permissions/access-control/" >}}) in Grafana Enterprise to understand how you can control access with RBAC permissions.
|
> Refer to [Role-based access control]({{< relref "../roles-and-permissions/access-control" >}}) in Grafana Enterprise to understand how you can control access with RBAC permissions.
|
||||||
|
|
||||||
If you are a Grafana server admin, then you can view useful statistics about your Grafana server in the Stats & Licensing tab.
|
If you are a Grafana server admin, then you can view useful statistics about your Grafana server in the Stats & Licensing tab.
|
||||||
|
|
||||||
> **Note:** Only Grafana server administrators can access the **Server Admin** menu. For more information about about administrative permissions, refer to [Roles and permissions]({{< relref "../roles-and-permissions/#grafana-server-administrators" >}}).
|
> **Note:** Only Grafana server administrators can access the **Server Admin** menu. For more information about about administrative permissions, refer to [Roles and permissions]({{< relref "../roles-and-permissions#grafana-server-administrators" >}}).
|
||||||
|
|
||||||
### View server stats
|
### View server stats
|
||||||
|
|
||||||
|
|||||||
@@ -37,7 +37,9 @@ When you grant folder permissions, that setting applies to all dashboards and su
|
|||||||
|
|
||||||
For example, if a user with the viewer organization role requires editor (or admin) access to a dashboard, you can assign those elevated permissions on an individual basis.
|
For example, if a user with the viewer organization role requires editor (or admin) access to a dashboard, you can assign those elevated permissions on an individual basis.
|
||||||
|
|
||||||
> **Note**: If you have assigned a user dashboard folder permissions, you cannot also assign the user permission to dashboards contained in the folder.
|
{{% admonition type="note" %}}
|
||||||
|
If you have assigned a user dashboard folder permissions, you cannot also assign the user permission to dashboards contained in the folder.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
Grant dashboard permissions when you want to restrict or enhance dashboard access for users who do not have permissions defined in the associated folder.
|
Grant dashboard permissions when you want to restrict or enhance dashboard access for users who do not have permissions defined in the associated folder.
|
||||||
|
|
||||||
@@ -63,7 +65,9 @@ By default, the viewer organization role does not allow viewers to create dashbo
|
|||||||
|
|
||||||
This modification is useful for public Grafana installations where you want anonymous users to be able to edit panels and queries but not save or create new dashboards.
|
This modification is useful for public Grafana installations where you want anonymous users to be able to edit panels and queries but not save or create new dashboards.
|
||||||
|
|
||||||
> **Note**: If you use Grafana Enterprise and customize users' permissions using RBAC, the RBAC permissions override the functionality enabled by the `viewers_can_edit` flag.
|
{{% admonition type="note" %}}
|
||||||
|
If you use Grafana Enterprise and customize users' permissions using RBAC, the RBAC permissions override the functionality enabled by the `viewers_can_edit` flag.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
### Before you begin
|
### Before you begin
|
||||||
|
|
||||||
|
|||||||
@@ -32,13 +32,17 @@ You can see a list of users with accounts in your Grafana organization. If neces
|
|||||||
1. Sign in to Grafana as an organization administrator.
|
1. Sign in to Grafana as an organization administrator.
|
||||||
1. Navigate to **Administration > Users**.
|
1. Navigate to **Administration > Users**.
|
||||||
|
|
||||||
> **Note:** If you have [server administrator]({{< relref "../../roles-and-permissions/#grafana-server-administrators" >}}) permissions, you can also [view a global list of users]({{< relref "../server-user-management#view-a-list-of-users" >}}) in the Server Admin section of Grafana.
|
{{% admonition type="note" %}}
|
||||||
|
If you have [server administrator]({{< relref "../../roles-and-permissions/#grafana-server-administrators" >}}) permissions, you can also [view a global list of users]({{< relref "../server-user-management#view-a-list-of-users" >}}) in the Server Admin section of Grafana.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
## Change a user's organization permissions
|
## Change a user's organization permissions
|
||||||
|
|
||||||
Update user permissions when you want to enhance or restrict a user's access to organization resources. For more information about organization permissions, refer to [Organization roles]({{< relref "../../roles-and-permissions/#organization-roles" >}}).
|
Update user permissions when you want to enhance or restrict a user's access to organization resources. For more information about organization permissions, refer to [Organization roles]({{< relref "../../roles-and-permissions/#organization-roles" >}}).
|
||||||
|
|
||||||
> **Note:** Organization roles sync from the authentication provider on user sign-in. To prevent synchronization of organization roles from the authentication provider regardless of their role in the authentication provider, then refer to the `skip_org_role_sync` setting in your Grafana configuration. Refer to [skip org role sync]({{< relref "../../../setup-grafana/configure-grafana/#authgrafana_com-skip_org_role_sync" >}}) for more information.
|
{{% admonition type="note" %}}
|
||||||
|
Organization roles sync from the authentication provider on user sign-in. To prevent synchronization of organization roles from the authentication provider regardless of their role in the authentication provider, then refer to the `skip_org_role_sync` setting in your Grafana configuration. Refer to [skip org role sync]({{< relref "../../../setup-grafana/configure-grafana/#authgrafana_com-skip_org_role_sync" >}}) for more information.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
### Before you begin
|
### Before you begin
|
||||||
|
|
||||||
@@ -56,7 +60,9 @@ Update user permissions when you want to enhance or restrict a user's access to
|
|||||||
1. Select the role that you want to assign.
|
1. Select the role that you want to assign.
|
||||||
1. Click **Update**.
|
1. Click **Update**.
|
||||||
|
|
||||||
> **Note:** If you have [server administrator]({{< relref "../../roles-and-permissions/#grafana-server-administrators" >}}) permissions, you can also [change a user's organization permissions]({{< relref "../server-user-management/change-user-org-permissions/" >}}) in the Server Admin section.
|
{{% admonition type="note" %}}
|
||||||
|
If you have [server administrator]({{< relref "../../roles-and-permissions/#grafana-server-administrators" >}}) permissions, you can also [change a user's organization permissions]({{< relref "../server-user-management/change-user-org-permissions/" >}}) in the Server Admin section.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
## Invite a user to join an organization
|
## Invite a user to join an organization
|
||||||
|
|
||||||
@@ -65,7 +71,9 @@ When you invite users to join an organization, you assign the **Admin**, **Edito
|
|||||||
- If you know that the user already has access Grafana and you know their user name, then you issue an invitation by entering their user name.
|
- If you know that the user already has access Grafana and you know their user name, then you issue an invitation by entering their user name.
|
||||||
- If the user is new to Grafana, then use their email address to issue an invitation. The system automatically creates the user account on first sign in.
|
- If the user is new to Grafana, then use their email address to issue an invitation. The system automatically creates the user account on first sign in.
|
||||||
|
|
||||||
> **Note:** If you have [server administrator]({{< relref "../../roles-and-permissions/#grafana-server-administrators" >}}) permissions, you can also manually [add a user to an organization]({{< relref "../server-user-management/add-remove-user-to-org/" >}}).
|
{{% admonition type="note" %}}
|
||||||
|
If you have [server administrator]({{< relref "../../roles-and-permissions/#grafana-server-administrators" >}}) permissions, you can also manually [add a user to an organization]({{< relref "../server-user-management/add-remove-user-to-org/" >}}).
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
### Before you begin
|
### Before you begin
|
||||||
|
|
||||||
@@ -81,6 +89,7 @@ When you invite users to join an organization, you assign the **Admin**, **Edito
|
|||||||
> **Note**: It might be that you are currently in the proper organization and don't need to switch organizations.
|
> **Note**: It might be that you are currently in the proper organization and don't need to switch organizations.
|
||||||
|
|
||||||
1. Navigate to **Administration > Users**.
|
1. Navigate to **Administration > Users**.
|
||||||
|
1. Click **Organization users**.
|
||||||
1. Click **Invite**.
|
1. Click **Invite**.
|
||||||
1. Enter the following information:
|
1. Enter the following information:
|
||||||
|
|
||||||
@@ -99,7 +108,9 @@ If the invitee is not already a user, the system adds them.
|
|||||||
|
|
||||||
Periodically review invitations you have sent so that you can see a list of users that have not yet accepted the invitation or cancel a pending invitation.
|
Periodically review invitations you have sent so that you can see a list of users that have not yet accepted the invitation or cancel a pending invitation.
|
||||||
|
|
||||||
> **Note:** The **Pending Invites** button is only visible if there are unanswered invitations.
|
{{% admonition type="note" %}}
|
||||||
|
The **Pending Invites** button is only visible if there are unanswered invitations.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
### Before you begin
|
### Before you begin
|
||||||
|
|
||||||
|
|||||||
@@ -37,7 +37,9 @@ You can see a list of users with accounts on your Grafana server. This action mi
|
|||||||
1. Sign in to Grafana as a server administrator.
|
1. Sign in to Grafana as a server administrator.
|
||||||
1. Click **Administration** in the left-side menu, and then **Users**.
|
1. Click **Administration** in the left-side menu, and then **Users**.
|
||||||
|
|
||||||
> **Note:** If you have [organization administrator]({{< relref "../../roles-and-permissions/#organization-roles" >}}) permissions and _not_ [server administrator]({{< relref "../../roles-and-permissions/#grafana-server-administrators" >}}) permissions, you can still [view of list of users in a given organization]({{< relref "../manage-org-users/#view-a-list-of-organization-users" >}}).
|
{{% admonition type="note" %}}
|
||||||
|
If you have [organization administrator]({{< relref "../../roles-and-permissions/#organization-roles" >}}) permissions and _not_ [server administrator]({{< relref "../../roles-and-permissions/#grafana-server-administrators" >}}) permissions, you can still [view of list of users in a given organization]({{< relref "../manage-org-users/#view-a-list-of-organization-users" >}}).
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
## View user details
|
## View user details
|
||||||
|
|
||||||
@@ -115,7 +117,9 @@ When you configure advanced authentication using Oauth, SAML, LDAP, or the Auth
|
|||||||
|
|
||||||
When you create a user, the system assigns the user viewer permissions in a default organization, which you can change. You can now [add a user to a second organization]({{< relref "add-remove-user-to-org/" >}}).
|
When you create a user, the system assigns the user viewer permissions in a default organization, which you can change. You can now [add a user to a second organization]({{< relref "add-remove-user-to-org/" >}}).
|
||||||
|
|
||||||
> **Note:** If you have [organization administrator]({{< relref "../../roles-and-permissions/#organization-roles" >}}) permissions and _not_ [server administrator]({{< relref "../../roles-and-permissions/#grafana-server-administrators" >}}) permissions, you can still add users by [inviting a user to join an organization]({{< relref "../manage-org-users#invite-a-user-to-join-an-organization" >}}).
|
{{% admonition type="note" %}}
|
||||||
|
If you have [organization administrator]({{< relref "../../roles-and-permissions/#organization-roles" >}}) permissions and _not_ [server administrator]({{< relref "../../roles-and-permissions/#grafana-server-administrators" >}}) permissions, you can still add users by [inviting a user to join an organization]({{< relref "../manage-org-users#invite-a-user-to-join-an-organization" >}}).
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
## Force a user to log out of Grafana
|
## Force a user to log out of Grafana
|
||||||
|
|
||||||
|
|||||||
@@ -38,7 +38,9 @@ You are required to specify an Admin role for each organization. The first user
|
|||||||
|
|
||||||
The next time the user signs in, they will be able to navigate to their new organization using the Switch Organizations option in the user profile menu.
|
The next time the user signs in, they will be able to navigate to their new organization using the Switch Organizations option in the user profile menu.
|
||||||
|
|
||||||
> **Note:** If you have [organization administrator]({{< relref "../../../roles-and-permissions#organization-roles" >}}) permissions and _not_ [server administrator]({{< relref "../../../roles-and-permissions#grafana-server-administrators" >}}) permissions, you can still [invite a user to join an organization]({{< relref "../../manage-org-users#invite-a-user-to-join-an-organization" >}}).
|
{{% admonition type="note" %}}
|
||||||
|
If you have [organization administrator]({{< relref "../../../roles-and-permissions#organization-roles" >}}) permissions and _not_ [server administrator]({{< relref "../../../roles-and-permissions#grafana-server-administrators" >}}) permissions, you can still [invite a user to join an organization]({{< relref "../../manage-org-users#invite-a-user-to-join-an-organization" >}}).
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
## Remove a user from an organization
|
## Remove a user from an organization
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,9 @@ weight: 20
|
|||||||
|
|
||||||
Grafana server administrators are responsible for creating users, organizations, and managing permissions. For more information about the server administration role, refer to [Grafana server administrators]({{< relref "../../../roles-and-permissions#grafana-server-administrators" >}}).
|
Grafana server administrators are responsible for creating users, organizations, and managing permissions. For more information about the server administration role, refer to [Grafana server administrators]({{< relref "../../../roles-and-permissions#grafana-server-administrators" >}}).
|
||||||
|
|
||||||
> **Note:** Server administrators are "super-admins" with full permissions to create, read, update, and delete all resources and users in all organizations, as well as update global settings such as licenses. Only grant this permission to trusted users.
|
{{% admonition type="note" %}}
|
||||||
|
Server administrators are "super-admins" with full permissions to create, read, update, and delete all resources and users in all organizations, as well as update global settings such as licenses. Only grant this permission to trusted users.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
## Before you begin
|
## Before you begin
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,9 @@ When `editors_can_admin` is enabled:
|
|||||||
- Users with the Editor role in an organization are Administrators for new dashboards and folders they create, meaning they can edit dashboard permissions. To learn more about dashboard permissions, refer to [Manage dashboard permissions]({{< relref "../../manage-dashboard-permissions/" >}}).
|
- Users with the Editor role in an organization are Administrators for new dashboards and folders they create, meaning they can edit dashboard permissions. To learn more about dashboard permissions, refer to [Manage dashboard permissions]({{< relref "../../manage-dashboard-permissions/" >}}).
|
||||||
- Users with the Editor role in an organization can create teams, and they are Administrators of the teams they create. To learn more about team permissions, refer to [Team management]({{< relref "../../../team-management/" >}}).
|
- Users with the Editor role in an organization can create teams, and they are Administrators of the teams they create. To learn more about team permissions, refer to [Team management]({{< relref "../../../team-management/" >}}).
|
||||||
|
|
||||||
> **Note**: If you use Grafana Enterprise and customize users' permissions using RBAC, the RBAC permissions override the functionality enabled by the `editors_can_admin` flag.
|
{{% admonition type="note" %}}
|
||||||
|
If you use Grafana Enterprise and customize users' permissions using RBAC, the RBAC permissions override the functionality enabled by the `editors_can_admin` flag.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
## Before you begin
|
## Before you begin
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,9 @@ You can also view important information about your account, such as the organiza
|
|||||||
|
|
||||||
You can change your Grafana password at any time.
|
You can change your Grafana password at any time.
|
||||||
|
|
||||||
> **Note**: If your Grafana instance uses an <!--[external authentication provider]({{< relref "../../../setup-grafana/configure-security/configure-authentication/" >}})--> external authentication provider, then you might not be able to change your password in Grafana. Contact your Grafana administrator for more information.
|
{{% admonition type="note" %}}
|
||||||
|
If your Grafana instance uses an external authentication provider, then you might not be able to change your password in Grafana. Contact your Grafana administrator for more information.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
**To change your password**:
|
**To change your password**:
|
||||||
|
|
||||||
|
|||||||
@@ -2,11 +2,7 @@
|
|||||||
aliases:
|
aliases:
|
||||||
- about-alerting/
|
- about-alerting/
|
||||||
- unified-alerting/alerting/
|
- unified-alerting/alerting/
|
||||||
cascade:
|
description: Intro to key benefits and features of Grafana Alerting
|
||||||
labels:
|
|
||||||
products:
|
|
||||||
- cloud
|
|
||||||
- oss
|
|
||||||
title: Alerting
|
title: Alerting
|
||||||
weight: 114
|
weight: 114
|
||||||
---
|
---
|
||||||
@@ -25,7 +21,7 @@ Grafana Alerting is available for Grafana OSS, Grafana Enterprise, or Grafana Cl
|
|||||||
|
|
||||||
Watch this video to learn more about Grafana Alerting: {{< vimeo 720001629 >}}
|
Watch this video to learn more about Grafana Alerting: {{< vimeo 720001629 >}}
|
||||||
|
|
||||||
_Refer to [Manage your alert rules]({{< relref "../alerting/alerting-rules/" >}}) for current instructions._
|
_Refer to [Manage your alert rules]({{< relref "../alerting/alerting-rules" >}}) for current instructions._
|
||||||
|
|
||||||
## Key features and benefits
|
## Key features and benefits
|
||||||
|
|
||||||
@@ -86,4 +82,4 @@ Here are some tips on how to create an effective alert management set up for you
|
|||||||
|
|
||||||
## Useful links
|
## Useful links
|
||||||
|
|
||||||
- [Introduction to Alerting]({{< relref "/docs/grafana/latest/alerting/fundamentals" >}})
|
- [Introduction to Alerting]({{< relref "./fundamentals" >}})
|
||||||
|
|||||||
@@ -1,13 +1,19 @@
|
|||||||
---
|
---
|
||||||
|
menuTitle: Configure
|
||||||
aliases:
|
aliases:
|
||||||
- old-alerting/create-alerts/
|
- old-alerting/create-alerts/
|
||||||
- rules/
|
- rules/
|
||||||
- unified-alerting/alerting-rules/
|
- unified-alerting/alerting-rules/
|
||||||
title: Manage your alert rules
|
description: Configure alerting
|
||||||
|
title: Configure Alerting
|
||||||
weight: 130
|
weight: 130
|
||||||
---
|
---
|
||||||
|
|
||||||
# Manage your alert rules
|
# Configure Alerting
|
||||||
|
|
||||||
|
Configure the features and integrations that you need to create and manage your alerts.
|
||||||
|
|
||||||
|
**Configure alert rules**
|
||||||
|
|
||||||
An alert rule is a set of evaluation criteria that determines whether an alert will fire. The alert rule consists of one or more queries and expressions, a condition, the frequency of evaluation, and optionally, the duration over which the condition is met.
|
An alert rule is a set of evaluation criteria that determines whether an alert will fire. The alert rule consists of one or more queries and expressions, a condition, the frequency of evaluation, and optionally, the duration over which the condition is met.
|
||||||
|
|
||||||
@@ -15,12 +21,20 @@ While queries and expressions select the data set to evaluate, a condition sets
|
|||||||
|
|
||||||
You can:
|
You can:
|
||||||
|
|
||||||
- [Create Grafana Mimir or Loki managed alert rules]({{< relref "create-mimir-loki-managed-rule/" >}})
|
- [Create Grafana Mimir or Loki managed alert rules]({{< relref "./create-mimir-loki-managed-rule" >}})
|
||||||
- [Create Grafana Mimir or Loki managed recording rules]({{< relref "create-mimir-loki-managed-recording-rule/" >}})
|
- [Create Grafana Mimir or Loki managed recording rules]({{< relref "./create-mimir-loki-managed-recording-rule" >}})
|
||||||
- [Edit Grafana Mimir or Loki rule groups and namespaces]({{< relref "edit-mimir-loki-namespace-group/" >}})
|
- [Edit Grafana Mimir or Loki rule groups and namespaces]({{< relref "./edit-mimir-loki-namespace-group" >}})
|
||||||
- [Create Grafana managed alert rules]({{< relref "create-grafana-managed-rule/" >}})
|
- [Create Grafana managed alert rules]({{< relref "./create-grafana-managed-rule" >}})
|
||||||
|
|
||||||
**Note:**
|
**Note:**
|
||||||
Grafana managed alert rules can only be edited or deleted by users with Edit permissions for the folder storing the rules.
|
Grafana managed alert rules can only be edited or deleted by users with Edit permissions for the folder storing the rules.
|
||||||
|
|
||||||
Alert rules for an external Grafana Mimir or Loki instance can be edited or deleted by users with Editor or Admin roles.
|
Alert rules for an external Grafana Mimir or Loki instance can be edited or deleted by users with Editor or Admin roles.
|
||||||
|
|
||||||
|
**Configure contact points**
|
||||||
|
|
||||||
|
For information on how to configure contact points, see [Configure contact points]({{< relref "./manage-contact-points/_index.md" >}})
|
||||||
|
|
||||||
|
**Configure notification policies**
|
||||||
|
|
||||||
|
For information on how to configure notification policies, see [Configure notification policies]({{< relref "./create-notification-policy" >}})
|
||||||
|
|||||||
@@ -18,12 +18,10 @@ Grafana-managed rules are the most flexible alert rule type. They allow you to c
|
|||||||
|
|
||||||
Multiple alert instances can be created as a result of one alert rule (also known as a multi-dimensional alerting).
|
Multiple alert instances can be created as a result of one alert rule (also known as a multi-dimensional alerting).
|
||||||
|
|
||||||
For information on Grafana Alerting, see [Introduction to Grafana Alerting](/docs/grafana/next/alerting/fundamentals/), which explains the key concepts and features of Grafana Alerting.
|
For information on Grafana Alerting, see [Introduction to Grafana Alerting]({{< relref "../fundamentals" >}}), which explains the key concepts and features of Grafana Alerting.
|
||||||
|
|
||||||
Watch this video to learn more about creating alerts: {{< vimeo 720001934 >}}
|
Watch this video to learn more about creating alerts: {{< vimeo 720001934 >}}
|
||||||
|
|
||||||
_Refer to [Add Grafana managed rule]({{< relref "#add-grafana-managed-rule" >}}) (following) for current instructions._
|
|
||||||
|
|
||||||
To create a Grafana-managed alert rule, complete the following steps.
|
To create a Grafana-managed alert rule, complete the following steps.
|
||||||
|
|
||||||
1. In the left-side menu, click **Alerts & IRM** and then **Alerting**.
|
1. In the left-side menu, click **Alerts & IRM** and then **Alerting**.
|
||||||
@@ -34,14 +32,14 @@ To create a Grafana-managed alert rule, complete the following steps.
|
|||||||
5. In Step 2, add queries and expressions to evaluate, and then select the alert condition.
|
5. In Step 2, add queries and expressions to evaluate, and then select the alert condition.
|
||||||
|
|
||||||
- For queries, select a data source from the dropdown.
|
- For queries, select a data source from the dropdown.
|
||||||
- Specify a [time range](/docs/grafana/latest/dashboards/use-dashboards/?pg=blog&plcmt=body-txt#time-units-and-relative-ranges).
|
- Specify a [time range]({{< relref "../../dashboards/use-dashboards#time-units-and-relative-ranges" >}}).
|
||||||
|
|
||||||
**Note:**
|
**Note:**
|
||||||
Grafana Alerting only supports fixed relative time ranges, for example, `now-24hr: now`.
|
Grafana Alerting only supports fixed relative time ranges, for example, `now-24hr: now`.
|
||||||
|
|
||||||
It does not support absolute time ranges: `2021-12-02 00:00:00 to 2021-12-05 23:59:592` or semi-relative time ranges: `now/d to: now`.
|
It does not support absolute time ranges: `2021-12-02 00:00:00 to 2021-12-05 23:59:592` or semi-relative time ranges: `now/d to: now`.
|
||||||
|
|
||||||
- Add one or more [queries]({{< relref "/docs/grafana/latest/panels-visualizations/query-transform-data#add-a-query" >}}) or [expressions]({{< relref "/docs/grafana/latest/panels-visualizations/query-transform-data/expression-queries" >}}).
|
- Add one or more [queries]({{< relref "../../panels-visualizations/query-transform-data#add-a-query" >}}) or [expressions]({{< relref "../../panels-visualizations/query-transform-data/expression-queries" >}}).
|
||||||
- For each expression, select either **Classic condition** to create a single alert rule, or choose from the **Math**, **Reduce**, and **Resample** options to generate separate alert for each series. For details on these options, see [Single and multi dimensional rule](#single-and-multi-dimensional-rule).
|
- For each expression, select either **Classic condition** to create a single alert rule, or choose from the **Math**, **Reduce**, and **Resample** options to generate separate alert for each series. For details on these options, see [Single and multi dimensional rule](#single-and-multi-dimensional-rule).
|
||||||
- Click **Run queries** to verify that the query is successful.
|
- Click **Run queries** to verify that the query is successful.
|
||||||
- Next, select the query or expression for your alert condition.
|
- Next, select the query or expression for your alert condition.
|
||||||
@@ -52,7 +50,7 @@ To create a Grafana-managed alert rule, complete the following steps.
|
|||||||
- For **Evaluate every**, specify the frequency of evaluation. Must be a multiple of 10 seconds. For examples, `1m`, `30s`.
|
- For **Evaluate every**, specify the frequency of evaluation. Must be a multiple of 10 seconds. For examples, `1m`, `30s`.
|
||||||
- For **Evaluate for**, specify the duration for which the condition must be true before an alert fires.
|
- For **Evaluate for**, specify the duration for which the condition must be true before an alert fires.
|
||||||
> **Note:** Once a condition is breached, the alert goes into the Pending state. If the condition remains breached for the duration specified, the alert transitions to the `Firing` state, otherwise it reverts back to the `Normal` state.
|
> **Note:** Once a condition is breached, the alert goes into the Pending state. If the condition remains breached for the duration specified, the alert transitions to the `Firing` state, otherwise it reverts back to the `Normal` state.
|
||||||
- In **Configure no data and error handling**, configure alerting behavior in the absence of data. Use the guidelines in [No data and error handling](#no-data-and-error-handling).
|
- In **Configure no data and error handling**, configure alerting behavior in the absence of data. Use the guidelines in [No data and error handling](#configure-no-data-and-error-handling).
|
||||||
- Click **Preview** to check the result of running the query at this moment. Preview excludes no data and error handling.
|
- Click **Preview** to check the result of running the query at this moment. Preview excludes no data and error handling.
|
||||||
|
|
||||||
**Note:**
|
**Note:**
|
||||||
@@ -62,7 +60,7 @@ To create a Grafana-managed alert rule, complete the following steps.
|
|||||||
7. In Step 4, add the storage location, rule group, as well as additional metadata associated with the rule.
|
7. In Step 4, add the storage location, rule group, as well as additional metadata associated with the rule.
|
||||||
- From the **Folder** dropdown, select the folder where you want to store the rule.
|
- From the **Folder** dropdown, select the folder where you want to store the rule.
|
||||||
- For **Group**, specify a pre-defined group. Newly created rules are appended to the end of the group. Rules within a group are run sequentially at a regular interval, with the same evaluation time.
|
- For **Group**, specify a pre-defined group. Newly created rules are appended to the end of the group. Rules within a group are run sequentially at a regular interval, with the same evaluation time.
|
||||||
- Add a description and summary to customize alert messages. Use the guidelines in [Annotations and labels for alerting]({{< relref "../fundamentals/annotation-label/" >}}).
|
- Add a description and summary to customize alert messages. Use the guidelines in [Annotations and labels for alerting]({{< relref "../fundamentals/annotation-label" >}}).
|
||||||
- Add Runbook URL, panel, dashboard, and alert IDs.
|
- Add Runbook URL, panel, dashboard, and alert IDs.
|
||||||
8. In Step 5, add custom labels.
|
8. In Step 5, add custom labels.
|
||||||
- Add custom labels selecting existing key-value pairs from the drop down, or add new labels by entering the new key or value .
|
- Add custom labels selecting existing key-value pairs from the drop down, or add new labels by entering the new key or value .
|
||||||
@@ -77,13 +75,13 @@ For Grafana managed alerts, you can create a rule with a classic condition or yo
|
|||||||
|
|
||||||
Use the classic condition expression to create a rule that triggers a single alert when its condition is met. For a query that returns multiple series, Grafana does not track the alert state of each series. As a result, Grafana sends only a single alert even when alert conditions are met for multiple series.
|
Use the classic condition expression to create a rule that triggers a single alert when its condition is met. For a query that returns multiple series, Grafana does not track the alert state of each series. As a result, Grafana sends only a single alert even when alert conditions are met for multiple series.
|
||||||
|
|
||||||
For more information, see [expressions documentation]({{< relref "/docs/grafana/latest/panels-visualizations/query-transform-data/expression-queries" >}}).
|
For more information, see [expressions documentation]({{< relref "../../panels-visualizations/query-transform-data/expression-queries" >}}).
|
||||||
|
|
||||||
**Multi-dimensional rule**
|
**Multi-dimensional rule**
|
||||||
|
|
||||||
To generate a separate alert for each series, create a multi-dimensional rule. Use `Math`, `Reduce`, or `Resample` expressions to create a multi-dimensional rule. For example:
|
To generate a separate alert for each series, create a multi-dimensional rule. Use `Math`, `Reduce`, or `Resample` expressions to create a multi-dimensional rule. For example:
|
||||||
|
|
||||||
- Add a `Reduce` expression for each query to aggregate values in the selected time range into a single value. (Not needed for [rules using numeric data]({{< relref "../fundamentals/evaluate-grafana-alerts/#alerting-on-numeric-data-1" >}})).
|
- Add a `Reduce` expression for each query to aggregate values in the selected time range into a single value. (Not needed for [rules using numeric data]({{< relref "../fundamentals/evaluate-grafana-alerts#alerting-on-numeric-data-1" >}})).
|
||||||
- Add a `Math` expression with the condition for the rule. Not needed in case a query or a reduce expression already returns 0 if rule should not fire, or a positive number if it should fire. Some examples: `$B > 70` if it should fire in case value of B query/expression is more than 70. `$B < $C * 100` in case it should fire if value of B is less than value of C multiplied by 100. If queries being compared have multiple series in their results, series from different queries are matched if they have the same labels or one is a subset of the other.
|
- Add a `Math` expression with the condition for the rule. Not needed in case a query or a reduce expression already returns 0 if rule should not fire, or a positive number if it should fire. Some examples: `$B > 70` if it should fire in case value of B query/expression is more than 70. `$B < $C * 100` in case it should fire if value of B is less than value of C multiplied by 100. If queries being compared have multiple series in their results, series from different queries are matched if they have the same labels or one is a subset of the other.
|
||||||
|
|
||||||

|

|
||||||
|
|||||||
@@ -18,6 +18,14 @@ weight: 400
|
|||||||
|
|
||||||
You can create and manage recording rules for an external Grafana Mimir or Loki instance. Recording rules calculate frequently needed expressions or computationally expensive expressions in advance and save the result as a new set of time series. Querying this new time series is faster, especially for dashboards since they query the same expression every time the dashboards refresh.
|
You can create and manage recording rules for an external Grafana Mimir or Loki instance. Recording rules calculate frequently needed expressions or computationally expensive expressions in advance and save the result as a new set of time series. Querying this new time series is faster, especially for dashboards since they query the same expression every time the dashboards refresh.
|
||||||
|
|
||||||
|
**Note:**
|
||||||
|
|
||||||
|
Recording rules are run as instant rules, which means that they run every 10s. To overwrite this configuration, update the min_interval in your custom configuration file.
|
||||||
|
|
||||||
|
[min_interval]({{< relref "../../setup-grafana/configure-grafana" >}}) sets the minimum interval to enforce between rule evaluations. The default value is 10s which equals the scheduler interval. Rules will be adjusted if they are less than this value or if they are not multiple of the scheduler interval (10s). Higher values can help with resource management as fewer evaluations are scheduled over time.
|
||||||
|
|
||||||
|
This setting has precedence over each individual rule frequency. If a rule frequency is lower than this value, then this value is enforced.
|
||||||
|
|
||||||
## Before you begin
|
## Before you begin
|
||||||
|
|
||||||
- Verify that you have write permission to the Prometheus or Loki data source. Otherwise, you will not be able to create or update Grafana Mimir managed alerting rules.
|
- Verify that you have write permission to the Prometheus or Loki data source. Otherwise, you will not be able to create or update Grafana Mimir managed alerting rules.
|
||||||
@@ -26,9 +34,11 @@ You can create and manage recording rules for an external Grafana Mimir or Loki
|
|||||||
|
|
||||||
- **Loki** - The `local` rule storage type, default for the Loki data source, supports only viewing of rules. To edit rules, configure one of the other rule storage types.
|
- **Loki** - The `local` rule storage type, default for the Loki data source, supports only viewing of rules. To edit rules, configure one of the other rule storage types.
|
||||||
|
|
||||||
- **Grafana Mimir** - use the `/prometheus` prefix. The Prometheus data source supports both Grafana Mimir and Prometheus, and Grafana expects that both the [Query API](https://grafana.com/docs/mimir/latest/operators-guide/reference-http-api/#querier--query-frontend) and [Ruler API](https://grafana.com/docs/mimir/latest/operators-guide/reference-http-api/#ruler) are under the same URL. You cannot provide a separate URL for the Ruler API.
|
- **Grafana Mimir** - use the `/prometheus` prefix. The Prometheus data source supports both Grafana Mimir and Prometheus, and Grafana expects that both the [Query API](/docs/mimir/latest/operators-guide/reference-http-api/#querier--query-frontend) and [Ruler API](/docs/mimir/latest/operators-guide/reference-http-api/#ruler) are under the same URL. You cannot provide a separate URL for the Ruler API.
|
||||||
|
|
||||||
> **Note:** If you do not want to manage alerting rules for a particular Loki or Prometheus data source, go to its settings and clear the **Manage alerts via Alerting UI** checkbox.
|
{{% admonition type="note" %}}
|
||||||
|
If you do not want to manage alerting rules for a particular Loki or Prometheus data source, go to its settings and clear the **Manage alerts via Alerting UI** checkbox.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
## Add a Grafana Mimir or Loki managed recording rule
|
## Add a Grafana Mimir or Loki managed recording rule
|
||||||
|
|
||||||
@@ -42,30 +52,12 @@ To create a Grafana Mimir or Loki managed recording rule
|
|||||||
1. In Step 2, select **Mimir or Loki recording rule** option.
|
1. In Step 2, select **Mimir or Loki recording rule** option.
|
||||||
- Select your Loki or Prometheus data source.
|
- Select your Loki or Prometheus data source.
|
||||||
- Enter a PromQL or LogQL query.
|
- Enter a PromQL or LogQL query.
|
||||||
1. In Step 3, add the namespace and the group.
|
1. In Step 3, add alert evaluation behavior.
|
||||||
- From the **Namespace** dropdown, select an existing rule namespace. Otherwise, click Add new and enter a name to create a new one. Namespaces can contain one or more rule groups and only have an organizational purpose. For more information, see [Grafana Mimir or Loki rule groups and namespaces]({{< relref "edit-mimir-loki-namespace-group/" >}}).
|
|
||||||
- From the **Group** dropdown, select an existing group within the selected namespace. Otherwise, click **Add new** and enter a name to create a new one.
|
|
||||||
1. In Step 4, add the custom labels.
|
|
||||||
- Add custom labels selecting existing key-value pairs from the drop down, or add new labels by entering the new key or value.
|
|
||||||
1. Click **Save** to save the recording rule or **Save and exit** to save the recording rule and go back to the Alerting page.
|
|
||||||
|
|
||||||
<!-- delete next steps? -->
|
|
||||||
|
|
||||||
1. In the left-side menu, click **Alerts & IRM** and then **Alerting**.
|
|
||||||
1. Click **Alert rules**.
|
|
||||||
1. Click **+ Create alert rule**.
|
|
||||||
1. In Step 1, add the rule name.
|
|
||||||
- In **Rule name**, add a descriptive name. This name is displayed in the alert rule list. It is also the `alertname` label for every alert instance that is created from this rule.
|
|
||||||
1. In Step 2, add the type, and storage location.
|
|
||||||
- From the **Rule type** dropdown, select **Mimir / Loki managed alert**.
|
|
||||||
- From the **Select data source** dropdown, select an external Prometheus, an external Loki, or a Grafana Cloud data source.
|
|
||||||
- Enter a PromQL or LogQL expression. The rule fires if the evaluation result has at least one series with a value that is greater than 0. An alert is created for each series.
|
|
||||||
1. In Step 3, add evaluation behavior.
|
|
||||||
- Enter a valid **For** duration. The expression has to be true for this long for the alert to be fired.
|
- Enter a valid **For** duration. The expression has to be true for this long for the alert to be fired.
|
||||||
1. In Step 4, add additional metadata associated with the rule.
|
1. In Step 4, add additional metadata associated with the rule.
|
||||||
- From the **Namespace** dropdown, select an existing rule namespace. Otherwise, click Add new and enter a name to create a new one. Namespaces can contain one or more rule groups and only have an organizational purpose. For more information, see [Grafana Mimir or Loki rule groups and namespaces]({{< relref "edit-mimir-loki-namespace-group/" >}}).
|
- From the **Namespace** dropdown, select an existing rule namespace or add a new one. Namespaces can contain one or more rule groups and only have an organizational purpose. For more information, see [Grafana Mimir or Loki rule groups and namespaces]({{< relref "./edit-mimir-loki-namespace-group" >}}).
|
||||||
- From the **Group** dropdown, select an existing group within the selected namespace. Otherwise, click **Add new** and enter a name to create a new one. Newly created rules are appended to the end of the group. Rules within a group are run sequentially at a regular interval, with the same evaluation time.
|
- From the **Group** dropdown, select an existing group within the selected namespace or add a new one. Newly created rules are appended to the end of the group. Rules within a group are run sequentially at a regular interval, with the same evaluation time.
|
||||||
- Add a description and summary to customize alert messages. Use the guidelines in [Annotations and labels for alerting]({{< relref "../fundamentals/annotation-label/" >}}).
|
- Add a description and summary to customize alert messages. Use the guidelines in [Annotations and labels for alerting]({{< relref "../fundamentals/annotation-label" >}}).
|
||||||
- Add Runbook URL, panel, dashboard, and alert IDs.
|
- Add Runbook URL, panel, dashboard, and alert IDs.
|
||||||
1. In Step 5, add custom labels.
|
1. In Step 5, add custom labels.
|
||||||
- Add custom labels selecting existing key-value pairs from the drop down, or add new labels by entering the new key or value .
|
- Add custom labels selecting existing key-value pairs from the drop down, or add new labels by entering the new key or value .
|
||||||
|
|||||||
@@ -14,9 +14,9 @@ title: Create Grafana Mimir or Loki managed alert rules
|
|||||||
weight: 400
|
weight: 400
|
||||||
---
|
---
|
||||||
|
|
||||||
# Create a Grafana Mimir or Loki managed alerting rules
|
# Create Grafana Mimir or Loki managed alert rules
|
||||||
|
|
||||||
Grafana allows you to create alerting rules for an external Grafana Mimir or Loki instance that has ruler API enabled. For information on Grafana Alerting, see [About Grafana Alerting]({{< relref "../" >}}) which explains the various components of Grafana Alerting. We also recommend that you familiarize yourself with some of the [fundamental concepts]({{< relref "../fundamentals/" >}}) of Grafana Alerting.
|
Grafana allows you to create alerting rules for an external Grafana Mimir or Loki instance that has ruler API enabled. For information on Grafana Alerting, see [About Grafana Alerting]({{< relref "../../alerting" >}}) which explains the various components of Grafana Alerting. We also recommend that you familiarize yourself with some of the [fundamental concepts]({{< relref "../fundamentals" >}}) of Grafana Alerting.
|
||||||
|
|
||||||
## Before you begin
|
## Before you begin
|
||||||
|
|
||||||
@@ -26,13 +26,15 @@ Grafana allows you to create alerting rules for an external Grafana Mimir or Lok
|
|||||||
|
|
||||||
- **Loki** - The `local` rule storage type, default for the Loki data source, supports only viewing of rules. To edit rules, configure one of the other rule storage types.
|
- **Loki** - The `local` rule storage type, default for the Loki data source, supports only viewing of rules. To edit rules, configure one of the other rule storage types.
|
||||||
|
|
||||||
- **Grafana Mimir** - use the `/prometheus` prefix. The Prometheus data source supports both Grafana Mimir and Prometheus, and Grafana expects that both the [Query API](https://grafana.com/docs/mimir/latest/operators-guide/reference-http-api/#querier--query-frontend) and [Ruler API](https://grafana.com/docs/mimir/latest/operators-guide/reference-http-api/#ruler) are under the same URL. You cannot provide a separate URL for the Ruler API.
|
- **Grafana Mimir** - use the `/prometheus` prefix. The Prometheus data source supports both Grafana Mimir and Prometheus, and Grafana expects that both the [Query API](/docs/mimir/latest/operators-guide/reference-http-api/#querier--query-frontend) and [Ruler API](/docs/mimir/latest/operators-guide/reference-http-api/#ruler) are under the same URL. You cannot provide a separate URL for the Ruler API.
|
||||||
|
|
||||||
Watch this video to learn more about how to create a Mimir managed alert rule: {{< vimeo 720001865 >}}
|
Watch this video to learn more about how to create a Mimir managed alert rule: {{< vimeo 720001865 >}}
|
||||||
|
|
||||||
_Refer to [Add a Grafana Mimir or Loki managed alerting rule]({{< relref "#add-a-grafana-mimir-or-loki-managed-alerting-rule" >}}) (following) for current instructions._
|
_Refer to [Add a Grafana Mimir or Loki managed alerting rule]({{< relref "#add-a-grafana-mimir-or-loki-managed-alerting-rule" >}}) (following) for current instructions._
|
||||||
|
|
||||||
> **Note:** If you do not want to manage alerting rules for a particular Loki or Prometheus data source, go to its settings and clear the **Manage alerts via Alerting UI** checkbox.
|
{{% admonition type="note" %}}
|
||||||
|
If you do not want to manage alerting rules for a particular Loki or Prometheus data source, go to its settings and clear the **Manage alerts via Alerting UI** checkbox.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
## Add a Grafana Mimir or Loki managed alerting rule
|
## Add a Grafana Mimir or Loki managed alerting rule
|
||||||
|
|
||||||
@@ -48,9 +50,9 @@ _Refer to [Add a Grafana Mimir or Loki managed alerting rule]({{< relref "#add-a
|
|||||||
- In the **For** text box, specify the duration for which the condition must be true before an alert fires. If you specify `5m`, the condition must be true for 5 minutes before the alert fires.
|
- In the **For** text box, specify the duration for which the condition must be true before an alert fires. If you specify `5m`, the condition must be true for 5 minutes before the alert fires.
|
||||||
> **Note:** Once a condition is met, the alert goes into the `Pending` state. If the condition remains active for the duration specified, the alert transitions to the `Firing` state, else it reverts to the `Normal` state.
|
> **Note:** Once a condition is met, the alert goes into the `Pending` state. If the condition remains active for the duration specified, the alert transitions to the `Firing` state, else it reverts to the `Normal` state.
|
||||||
1. In Step 4, add the namespace, rule group, as well as additional metadata associated with the rule.
|
1. In Step 4, add the namespace, rule group, as well as additional metadata associated with the rule.
|
||||||
- From the **Namespace** dropdown, select an existing rule namespace. Otherwise, click **Add new** and enter a name to create a new one. Namespaces can contain one or more rule groups and only have an organizational purpose. For more information, see [Grafana Mimir or Loki rule groups and namespaces]({{< relref "edit-mimir-loki-namespace-group/" >}}).
|
- From the **Namespace** dropdown, select an existing rule namespace. Otherwise, click **Add new** and enter a name to create a new one. Namespaces can contain one or more rule groups and only have an organizational purpose. For more information, see [Grafana Mimir or Loki rule groups and namespaces]({{< relref "./edit-mimir-loki-namespace-group" >}}).
|
||||||
- From the **Group** dropdown, select an existing group within the selected namespace. Otherwise, click **Add new** and enter a name to create a new one. Newly created rules are appended to the end of the group. Rules within a group are run sequentially at a regular interval, with the same evaluation time.
|
- From the **Group** dropdown, select an existing group within the selected namespace. Otherwise, click **Add new** and enter a name to create a new one. Newly created rules are appended to the end of the group. Rules within a group are run sequentially at a regular interval, with the same evaluation time.
|
||||||
- Add a description and summary to customize alert messages. Use the guidelines in [Annotations and labels for alerting]({{< relref "../fundamentals/annotation-label/" >}}).
|
- Add a description and summary to customize alert messages. Use the guidelines in [Annotations and labels for alerting]({{< relref "../fundamentals/annotation-label" >}}).
|
||||||
- Add Runbook URL, panel, dashboard, and alert IDs.
|
- Add Runbook URL, panel, dashboard, and alert IDs.
|
||||||
1. In Step 5, add custom labels.
|
1. In Step 5, add custom labels.
|
||||||
- Add custom labels selecting existing key-value pairs from the drop down, or add new labels by entering the new key or value .
|
- Add custom labels selecting existing key-value pairs from the drop down, or add new labels by entering the new key or value .
|
||||||
|
|||||||
@@ -10,31 +10,29 @@ keywords:
|
|||||||
- guide
|
- guide
|
||||||
- notification policies
|
- notification policies
|
||||||
- routes
|
- routes
|
||||||
title: Manage notification policies
|
title: Configure notification policies
|
||||||
weight: 300
|
weight: 420
|
||||||
---
|
---
|
||||||
|
|
||||||
# Manage notification policies
|
# Configure notification policies
|
||||||
|
|
||||||
Notification policies determine how alerts are routed to contact points. Policies have a tree structure, where each policy can have one or more nested policies. Each policy, except for the default policy, can also match specific alert labels. Each alert is evaluated by the default policy and subsequently by each nested policy. If the **Continue matching subsequent sibling nodes** option is enabled for a nested policy, then evaluation continues even after one or more matches. A parent policy’s configuration settings and contact point information govern the behavior of an alert that does not match any of the nested policies. A default policy governs any alert that does not match a nested policy.
|
Notification policies determine how alerts are routed to contact points.
|
||||||
|
|
||||||
You can configure Grafana managed notification policies as well as notification policies for an external Alertmanager data source.
|
Policies have a tree structure, where each policy can have one or more nested policies. Each policy, except for the default policy, can also match specific alert labels.
|
||||||
|
|
||||||
## Grouping
|
Each alert is evaluated by the default policy and subsequently by each nested policy.
|
||||||
|
|
||||||
Grouping is a new and key concept of Grafana Alerting that categorizes alert notifications of similar nature into a single funnel. This allows you to properly route alert notifications during larger outages when many parts of a system fail at once causing a high number of alerts to fire simultaneously.
|
If the **Continue matching subsequent sibling nodes** option is enabled for a nested policy, then evaluation continues even after one or more matches. A parent policy’s configuration settings and contact point information govern the behavior of an alert that does not match any of the nested policies. A default policy governs any alert that does not match a nested policy.
|
||||||
|
|
||||||
For example, suppose you have 100 services connected to a database in different environments. These services are differentiated by the label `env=environmentname`. An alert rule is in place to monitor whether your services can reach the database named `alertname=DatabaseUnreachable`.
|
You can configure Grafana-managed notification policies as well as notification policies for an external Alertmanager data source.
|
||||||
|
|
||||||
When a network partition occurs, half of your services can no longer reach the database. As a result, 50 different alerts (assuming half of your services) are fired. For this situation, you want to receive a single-page notification (as opposed to 50) with a list of the environments that are affected.
|
For more information on notification policies, see [fundamentals of Notification Policies]({{< relref "../fundamentals/notification-policies" >}}).
|
||||||
|
|
||||||
You can configure grouping to be `group_by: [alertname]` (take note that the `env` label is omitted). With this configuration in place, Grafana sends a single compact notification that has all the affected environments for this alert rule.
|
|
||||||
|
|
||||||
> **Note:** Grafana also has a special label named `...` that you can use to group all alerts by all labels (effectively disabling grouping), therefore each alert will go into its own group. It is different from the default of `group_by: null` where **all** alerts go into a single group.
|
|
||||||
|
|
||||||
## Edit default notification policy
|
## Edit default notification policy
|
||||||
|
|
||||||
> **Note:** Before Grafana v8.2, the configuration of the embedded Alertmanager was shared across organizations. Users of Grafana 8.0 and 8.1 are advised to use the new Grafana 8 Alerts only if they have one organization. Otherwise, silences for the Grafana managed alerts will be visible by all organizations.
|
{{% admonition type="note" %}}
|
||||||
|
Before Grafana v8.2, the configuration of the embedded Alertmanager was shared across organizations. Users of Grafana 8.0 and 8.1 are advised to use the new Grafana 8 Alerts only if they have one organization. Otherwise, silences for the Grafana managed alerts will be visible by all organizations.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
1. In the left-side menu, click **Alerts & IRM** and then **Alerting**.
|
1. In the left-side menu, click **Alerts & IRM** and then **Alerting**.
|
||||||
1. Click **Notification policies**.
|
1. Click **Notification policies**.
|
||||||
@@ -53,7 +51,7 @@ You can configure grouping to be `group_by: [alertname]` (take note that the `en
|
|||||||
1. In the left-side menu, click **Alerts & IRM** and then **Alerting**.
|
1. In the left-side menu, click **Alerts & IRM** and then **Alerting**.
|
||||||
1. Click **Notification policies**.
|
1. Click **Notification policies**.
|
||||||
1. From the **Choose Alertmanager** dropdown, select an Alertmanager. By default, the **Grafana Alertmanager** is selected.
|
1. From the **Choose Alertmanager** dropdown, select an Alertmanager. By default, the **Grafana Alertmanager** is selected.
|
||||||
1. To add a top level specific policy, go to the Specific routing section and click **+ New specific policy**.
|
1. To add a top level specific policy, go to the Specific routing section and click **+New specific policy**.
|
||||||
1. In the Matching labels section, add one or more rules for matching alert labels.
|
1. In the Matching labels section, add one or more rules for matching alert labels.
|
||||||
1. In the **Contact point** dropdown, select the contact point to send notification to if alert matches only this specific policy and not any of the nested policies.
|
1. In the **Contact point** dropdown, select the contact point to send notification to if alert matches only this specific policy and not any of the nested policies.
|
||||||
1. Optionally, enable **Continue matching subsequent sibling nodes** to continue matching sibling policies even after the alert matched the current policy. When this option is enabled, you can get more than one notification for one alert.
|
1. Optionally, enable **Continue matching subsequent sibling nodes** to continue matching sibling policies even after the alert matched the current policy. When this option is enabled, you can get more than one notification for one alert.
|
||||||
@@ -66,7 +64,7 @@ You can configure grouping to be `group_by: [alertname]` (take note that the `en
|
|||||||
1. In the left-side menu, click **Alerts & IRM** and then **Alerting**.
|
1. In the left-side menu, click **Alerts & IRM** and then **Alerting**.
|
||||||
1. Click **Notification policies**.
|
1. Click **Notification policies**.
|
||||||
1. Expand the specific policy you want to update.
|
1. Expand the specific policy you want to update.
|
||||||
1. Click **+ Add nested policy**, then add the details using information in [Add new specific policy](#add-new-specific-policy).
|
1. Click **+ Add nested policy**, then add the details using information in [Add new specific policy](#add-new-nested-policy).
|
||||||
1. Click **Save policy** to save your changes.
|
1. Click **Save policy** to save your changes.
|
||||||
|
|
||||||
## Edit specific policy
|
## Edit specific policy
|
||||||
@@ -74,7 +72,7 @@ You can configure grouping to be `group_by: [alertname]` (take note that the `en
|
|||||||
1. In the left-side menu, click **Alerts & IRM**, and then **Alerting**.
|
1. In the left-side menu, click **Alerts & IRM**, and then **Alerting**.
|
||||||
1. Click **Notification policies**.
|
1. Click **Notification policies**.
|
||||||
1. Find the policy you want to edit, then click **Edit**.
|
1. Find the policy you want to edit, then click **Edit**.
|
||||||
1. Make any changes using instructions in [Add new specific policy](#add-new-specific-policy).
|
1. Make any changes using instructions in [Add new specific policy](#add-new-nested-policy).
|
||||||
1. Click **Save policy**.
|
1. Click **Save policy**.
|
||||||
|
|
||||||
## Searching for policies
|
## Searching for policies
|
||||||
@@ -5,17 +5,19 @@ aliases:
|
|||||||
- ../../contact-points/edit-contact-point/
|
- ../../contact-points/edit-contact-point/
|
||||||
- ../../contact-points/test-contact-point/
|
- ../../contact-points/test-contact-point/
|
||||||
- ../create-contact-point/
|
- ../create-contact-point/
|
||||||
|
- alerting/manage-notifications/manage-contact-points/
|
||||||
|
description: How to manage your contact points
|
||||||
keywords:
|
keywords:
|
||||||
- grafana
|
- grafana
|
||||||
- alerting
|
- alerting
|
||||||
- guide
|
- guide
|
||||||
- contact point
|
- contact point
|
||||||
- templating
|
- templating
|
||||||
title: Manage contact points
|
title: Configure contact points
|
||||||
weight: 200
|
weight: 410
|
||||||
---
|
---
|
||||||
|
|
||||||
# Manage contact points
|
# Configure contact points
|
||||||
|
|
||||||
Use contact points to define how your contacts are notified when an alert rule fires. You can create, edit, delete, and test a contact point.
|
Use contact points to define how your contacts are notified when an alert rule fires. You can create, edit, delete, and test a contact point.
|
||||||
|
|
||||||
@@ -52,7 +54,9 @@ Complete the following steps to delete a contact point.
|
|||||||
1. Find the contact point to delete, and then click **Delete** (trash icon).
|
1. Find the contact point to delete, and then click **Delete** (trash icon).
|
||||||
1. In the confirmation dialog, click **Yes, delete**.
|
1. In the confirmation dialog, click **Yes, delete**.
|
||||||
|
|
||||||
> **Note:** You cannot delete contact points that are in use by a notification policy. You will have to either delete the notification policy or update it to use another contact point.
|
{{% admonition type="note" %}}
|
||||||
|
You cannot delete contact points that are in use by a notification policy. You will have to either delete the notification policy or update it to use another contact point.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
## Test a contact point
|
## Test a contact point
|
||||||
|
|
||||||
@@ -1,4 +1,6 @@
|
|||||||
---
|
---
|
||||||
|
aliases:
|
||||||
|
- alerting/manage-notifications/manage-contact-points/configure-integrations/
|
||||||
description: Configure integrations
|
description: Configure integrations
|
||||||
keywords:
|
keywords:
|
||||||
- Grafana
|
- Grafana
|
||||||
@@ -2,6 +2,8 @@
|
|||||||
aliases:
|
aliases:
|
||||||
- ../contact-points/notifiers/webhook-notifier/
|
- ../contact-points/notifiers/webhook-notifier/
|
||||||
- ../fundamentals/contact-points/webhook-notifier/
|
- ../fundamentals/contact-points/webhook-notifier/
|
||||||
|
- alerting/manage-notifications/manage-contact-points/webhook-notifier/
|
||||||
|
description: Configure the webhook notifier for notifications
|
||||||
keywords:
|
keywords:
|
||||||
- grafana
|
- grafana
|
||||||
- alerting
|
- alerting
|
||||||
@@ -9,7 +11,7 @@ keywords:
|
|||||||
- contact point
|
- contact point
|
||||||
- templating
|
- templating
|
||||||
title: Configure the webhook notifier
|
title: Configure the webhook notifier
|
||||||
weight: 1000
|
weight: 200
|
||||||
---
|
---
|
||||||
|
|
||||||
### Configure the webhook notifier
|
### Configure the webhook notifier
|
||||||
@@ -1,7 +1,9 @@
|
|||||||
---
|
---
|
||||||
|
menuTitle: Introduction
|
||||||
aliases:
|
aliases:
|
||||||
- metrics/
|
- metrics/
|
||||||
- unified-alerting/fundamentals/
|
- unified-alerting/fundamentals/
|
||||||
|
description: Intro to the key concepts in Alerting and how it works
|
||||||
title: Introduction to Alerting
|
title: Introduction to Alerting
|
||||||
weight: 105
|
weight: 105
|
||||||
---
|
---
|
||||||
@@ -44,6 +46,14 @@ Set where, when, and how firing alert instances get routed.
|
|||||||
|
|
||||||
Each notification policy contains a set of label matchers to indicate which alerts rules or instances it is responsible for. It also has a contact point assigned to it that consists of one or more contact point types, such as Slack or email. Contact points define how your contacts are notified when an alert instance fires.
|
Each notification policy contains a set of label matchers to indicate which alerts rules or instances it is responsible for. It also has a contact point assigned to it that consists of one or more contact point types, such as Slack or email. Contact points define how your contacts are notified when an alert instance fires.
|
||||||
|
|
||||||
|
For more information on notification policies, see [fundamentals of Notification Policies]({{< relref "../fundamentals/notification-policies" >}}).
|
||||||
|
|
||||||
|
**Message templates**
|
||||||
|
|
||||||
Use message templates for your notifications to create reusable custom templates and use them in contact points.
|
Use message templates for your notifications to create reusable custom templates and use them in contact points.
|
||||||
|
|
||||||
Add silences to stop notifications from one or more alert instances or use mute timings to specify time intervals when you don’t want new notifications to be generated or sent out. The difference between the two being that a silence only lasts for only a specified window of time whereas a mute timing recurs on a schedule, for example, during a maintenance period.
|
**Silences and mute timings**
|
||||||
|
|
||||||
|
Add silences to stop notifications from one or more alert instances or use mute timings to specify time intervals when you don’t want new notifications to be generated or sent out.
|
||||||
|
|
||||||
|
The difference between the two being that a silence only lasts for only a specified window of time whereas a mute timing recurs on a schedule, for example, during a maintenance period.
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ keywords:
|
|||||||
- alerting
|
- alerting
|
||||||
- rules
|
- rules
|
||||||
title: Alert rules
|
title: Alert rules
|
||||||
weight: 101
|
weight: 105
|
||||||
---
|
---
|
||||||
|
|
||||||
# Alert rules
|
# Alert rules
|
||||||
@@ -16,7 +16,7 @@ While queries and expressions select the data set to evaluate, a condition sets
|
|||||||
|
|
||||||
An interval specifies how frequently an alerting rule is evaluated. Duration, when configured, indicates how long a condition must be met. The alert rules can also define alerting behavior in the absence of data.
|
An interval specifies how frequently an alerting rule is evaluated. Duration, when configured, indicates how long a condition must be met. The alert rules can also define alerting behavior in the absence of data.
|
||||||
|
|
||||||
- [Alert rule types]({{< relref "alert-rule-types/" >}})
|
- [Alert rule types]({{< relref "./alert-rule-types" >}})
|
||||||
- [Alert instances]({{< relref "alert-instances/" >}})
|
- [Alert instances]({{< relref "./alert-instances" >}})
|
||||||
- [Organising alert rules]({{< relref "organising-alerts/" >}})
|
- [Organising alert rules]({{< relref "./organising-alerts" >}})
|
||||||
- [Annotation and labels]({{< relref "../annotation-label/" >}})
|
- [Annotation and labels]({{< relref "../annotation-label" >}})
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ keywords:
|
|||||||
- alerting
|
- alerting
|
||||||
- instances
|
- instances
|
||||||
title: Alert instances
|
title: Alert instances
|
||||||
weight: 103
|
weight: 104
|
||||||
---
|
---
|
||||||
|
|
||||||
# Alert instances
|
# Alert instances
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ To create Grafana Mimir or Grafana Loki-managed alert rules, you must have a com
|
|||||||
|
|
||||||
You can check if your data source supports rule creation via Grafana by testing the data source and observing if the Ruler API is supported.
|
You can check if your data source supports rule creation via Grafana by testing the data source and observing if the Ruler API is supported.
|
||||||
|
|
||||||
For more information on the Ruler API, refer to [Ruler API](docs/loki/latest/api/#ruler).
|
For more information on the Ruler API, refer to [Ruler API](/docs/loki/latest/api/#ruler).
|
||||||
|
|
||||||
The following diagram shows how Grafana Mimir or Grafana Loki-managed alerting works.
|
The following diagram shows how Grafana Mimir or Grafana Loki-managed alerting works.
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ keywords:
|
|||||||
- alerting
|
- alerting
|
||||||
- organization
|
- organization
|
||||||
title: Organising alert rules
|
title: Organising alert rules
|
||||||
weight: 104
|
weight: 105
|
||||||
---
|
---
|
||||||
|
|
||||||
## Namespaces and groups
|
## Namespaces and groups
|
||||||
|
|||||||
@@ -0,0 +1,102 @@
|
|||||||
|
---
|
||||||
|
title: Queries and conditions
|
||||||
|
description: Introduction to queries and conditions
|
||||||
|
weight: 103
|
||||||
|
keywords:
|
||||||
|
- grafana
|
||||||
|
- alerting
|
||||||
|
- queries
|
||||||
|
- conditions
|
||||||
|
---
|
||||||
|
|
||||||
|
# Queries and conditions
|
||||||
|
|
||||||
|
In Grafana, queries play a vital role in fetching and transforming data from supported data sources, which include databases like MySQL and PostgreSQL, time series databases like Prometheus, InfluxDB and Graphite, and services like Elasticsearch, AWS CloudWatch, Azure Monitor and Google Cloud Monitoring.
|
||||||
|
|
||||||
|
For more information on supported data sources, see [Data sources]({{< relref "../../data-source-alerting.md" >}}).
|
||||||
|
|
||||||
|
The process of executing a query involves defining the data source, specifying the desired data to retrieve, and applying relevant filters or transformations. Query languages or syntaxes specific to the chosen data source are utilized for constructing these queries.
|
||||||
|
|
||||||
|
In Alerting, you define a query to get the data you want to measure and a condition that needs to be met before an alert rule fires.
|
||||||
|
|
||||||
|
An alert rule consists of one or more queries and expressions that select the data you want to measure.
|
||||||
|
|
||||||
|
For more information on queries and expressions, see [Query and transform data]({{< relref "../../../../panels-visualizations/query-transform-data" >}}).
|
||||||
|
|
||||||
|
## Data source queries
|
||||||
|
|
||||||
|
Queries in Grafana can be applied in various ways, depending on the data source and query language being used. Each data source’s query editor provides a customized user interface that helps you write queries that take advantage of its unique capabilities.
|
||||||
|
|
||||||
|
Because of the differences between query languages, each data source query editor looks and functions differently. Depending on your data source, the query editor might provide auto-completion features, metric names, variable suggestions, or a visual query-building interface.
|
||||||
|
|
||||||
|
Some common types of query components include:
|
||||||
|
|
||||||
|
**Metrics or data fields**: Specify the specific metrics or data fields you want to retrieve, such as CPU usage, network traffic, or sensor readings.
|
||||||
|
|
||||||
|
**Time range**: Define the time range for which you want to fetch data, such as the last hour, a specific day, or a custom time range.
|
||||||
|
|
||||||
|
**Filters**: Apply filters to narrow down the data based on specific criteria, such as filtering data by a specific tag, host, or application.
|
||||||
|
|
||||||
|
**Aggregations**: Perform aggregations on the data to calculate metrics like averages, sums, or counts over a given time period.
|
||||||
|
|
||||||
|
**Grouping**: Group the data by specific dimensions or tags to create aggregated views or breakdowns.
|
||||||
|
|
||||||
|
**Note**:
|
||||||
|
|
||||||
|
Grafana does not support alert queries with template variables. More information is available [here](https://community.grafana.com/t/template-variables-are-not-supported-in-alert-queries-while-setting-up-alert/2514).
|
||||||
|
|
||||||
|
## Expression queries
|
||||||
|
|
||||||
|
In Grafana, an expression is used to perform calculations, transformations, or aggregations on the data source queried data. It allows you to create custom metrics or modify existing metrics based on mathematical operations, functions, or logical expressions.
|
||||||
|
|
||||||
|
By leveraging expression queries, users can perform tasks such as calculating the percentage change between two values, applying functions like logarithmic or trigonometric functions, aggregating data over specific time ranges or dimensions, and implementing conditional logic to handle different scenarios.
|
||||||
|
|
||||||
|
In Alerting, you can only use expressions for Grafana-managed alert rules. For each expression, you can choose from the math, reduce, and resample expressions. These are called multi-dimensional rules, because they generate a separate alert for each series.
|
||||||
|
|
||||||
|
You can also use classic condition, which creates an alert rule that triggers a single alert when its condition is met. As a result, Grafana sends only a single alert even when alert conditions are met for multiple series.
|
||||||
|
|
||||||
|
**Note:**
|
||||||
|
|
||||||
|
Classic conditions exist mainly for compatibility reasons and should be avoided if possible.
|
||||||
|
|
||||||
|
**Reduce**
|
||||||
|
|
||||||
|
Aggregates time series values in the selected time range into a single value.
|
||||||
|
|
||||||
|
**Math**
|
||||||
|
|
||||||
|
Performs free-form math functions/operations on time series and number data. Can be used to preprocess time series data or to define an alert condition for number data.
|
||||||
|
|
||||||
|
**Resample**
|
||||||
|
|
||||||
|
Realigns a time range to a new set of timestamps, this is useful when comparing time series data from different data sources where the timestamps would otherwise not align.
|
||||||
|
|
||||||
|
**Threshold**
|
||||||
|
|
||||||
|
Checks if any time series data matches the threshold condition.
|
||||||
|
|
||||||
|
The threshold expression allows you to compare two single values. It returns `0` when the condition is false and `1` if the condition is true. The following threshold functions are available:
|
||||||
|
|
||||||
|
- Is above (x > y)
|
||||||
|
- Is below (x < y)
|
||||||
|
- Is within range (x > y1 AND x < y2)
|
||||||
|
- Is outside range (x < y1 AND x > y2)
|
||||||
|
|
||||||
|
**Classic condition**
|
||||||
|
|
||||||
|
Checks if any time series data matches the alert condition.
|
||||||
|
|
||||||
|
**Note**:
|
||||||
|
|
||||||
|
Classic condition expression queries always produce one alert instance only, no matter how many time series meet the condition.
|
||||||
|
Classic conditions exist mainly for compatibility reasons and should be avoided if possible.
|
||||||
|
|
||||||
|
## Alert condition
|
||||||
|
|
||||||
|
An alert condition is the query or expression that determines whether the alert will fire or not depending on the value it yields. There can be only one condition which will determine the triggering of the alert.
|
||||||
|
|
||||||
|
After you have defined your queries and/or expressions, choose one of them as the alert rule condition.
|
||||||
|
|
||||||
|
When the queried data satisfies the defined condition, Grafana triggers the associated alert, which can be configured to send notifications through various channels like email, Slack, or PagerDuty. The notifications inform you about the condition being met, allowing you to take appropriate actions or investigate the underlying issue.
|
||||||
|
|
||||||
|
By default, the last expression added is used as the alert condition.
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
---
|
||||||
|
title: Alert rule evaluation
|
||||||
|
description: Introduction to alert rule evaluation
|
||||||
|
weight: 106
|
||||||
|
keywords:
|
||||||
|
- grafana
|
||||||
|
- alerting
|
||||||
|
- evaluation
|
||||||
|
---
|
||||||
|
|
||||||
|
# Alert rule evaluation
|
||||||
|
|
||||||
|
Use alert rule evaluation to determine how frequently an alert rule should be evaluated and how quickly it should change its state.
|
||||||
|
|
||||||
|
To do this, you need to make sure that your alert rule is in the right evaluation group and set a pending period time that works best for your use case.
|
||||||
|
|
||||||
|
## Evaluation group
|
||||||
|
|
||||||
|
Every alert rule is part of an evaluation group. Each evaluation group contains an evaluation interval that determines how frequently the alert rule is checked. Alert rules within the same group are evaluated one after the other, while alert rules in different groups can be evaluated simultaneously.
|
||||||
|
|
||||||
|
This feature is especially useful for Prometheus/Mimir rules when you want to ensure that recording rules are evaluated before any alert rules.
|
||||||
|
|
||||||
|
**Note:**
|
||||||
|
|
||||||
|
Evaluation groups and alerts grouping in notification policies are two separate things. Grouping in notification policies allows multiple alerts sharing the same labels to be sent in the same time message.
|
||||||
|
|
||||||
|
## Pending period
|
||||||
|
|
||||||
|
By setting a pending period, you can avoid unnecessary alerts for temporary problems.
|
||||||
|
|
||||||
|
In the pending period, you select the period in which an alert rule can be in breach of the condition until it fires.
|
||||||
|
|
||||||
|
**Example**
|
||||||
|
|
||||||
|
Imagine you have an alert rule evaluation interval set at every 30 seconds and the pending period to 90 seconds.
|
||||||
|
|
||||||
|
Evaluation will occur as follows:
|
||||||
|
|
||||||
|
[00:30] First evaluation - condition not met.
|
||||||
|
|
||||||
|
[01:00] Second evaluation - condition breached.
|
||||||
|
Pending counter starts. **Alert stars pending.**
|
||||||
|
|
||||||
|
[01:30] Third evaluation - condition breached. Pending counter = 30s. **Pending state.**
|
||||||
|
|
||||||
|
[02:00] Fourth evaluation - condition breached. Pending counter = 60s **Pending state.**
|
||||||
|
|
||||||
|
[02:30] Fifth evaluation - condition breached. Pending counter = 90s. **Alert starts firing**
|
||||||
|
|
||||||
|
If the alert rule has a condition that needs to be in breach for a certain amount of time before it takes action, then its state changes as follows:
|
||||||
|
|
||||||
|
- When the condition is first breached, the rule goes into a "pending" state.
|
||||||
|
|
||||||
|
- The rule stays in the "pending" state until the condition has been broken for the required amount of time - pending period.
|
||||||
|
|
||||||
|
- Once the required time has passed, the rule goes into a "firing" state.
|
||||||
|
|
||||||
|
- If the condition is no longer broken during the pending period, the rule goes back to its normal state.
|
||||||
|
|
||||||
|
**Note:**
|
||||||
|
|
||||||
|
If you want to skip the pending state, you can simply set the pending period to 0. This effectively skips the pending period and your alert rule will start firing as soon as the condition is breached.
|
||||||
|
|
||||||
|
When an alert rule fires, alert instances are produced, which are then sent to the Alertmanager.
|
||||||
@@ -27,7 +27,9 @@ An alert rule can be in either of the following states:
|
|||||||
| **Pending** | At least one time series returned by the evaluation engine is `Pending`. |
|
| **Pending** | At least one time series returned by the evaluation engine is `Pending`. |
|
||||||
| **Firing** | At least one time series returned by the evaluation engine is `Firing`. |
|
| **Firing** | At least one time series returned by the evaluation engine is `Firing`. |
|
||||||
|
|
||||||
> **Note:** Alerts will transition first to `pending` and then `firing`, thus it will take at least two evaluation cycles before an alert is fired.
|
{{% admonition type="note" %}}
|
||||||
|
Alerts will transition first to `pending` and then `firing`, thus it will take at least two evaluation cycles before an alert is fired.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
## Alert instance state
|
## Alert instance state
|
||||||
|
|
||||||
@@ -3,15 +3,17 @@ aliases:
|
|||||||
- ../fundamentals/alertmanager/
|
- ../fundamentals/alertmanager/
|
||||||
- ../metrics/
|
- ../metrics/
|
||||||
- ../unified-alerting/fundamentals/alertmanager/
|
- ../unified-alerting/fundamentals/alertmanager/
|
||||||
|
- alerting/manage-notifications/alertmanager/
|
||||||
|
description: Intro to the different Alertmanagers
|
||||||
title: Alertmanager
|
title: Alertmanager
|
||||||
weight: 100
|
weight: 103
|
||||||
---
|
---
|
||||||
|
|
||||||
# Alertmanager
|
# Alertmanager
|
||||||
|
|
||||||
Alertmanager enables you to quickly and efficiently manage and respond to alerts. It receives alerts, handles silencing, inhibition, grouping, and routing by sending notifications out via your channel of choice, for example, email or Slack.
|
Alertmanager enables you to quickly and efficiently manage and respond to alerts. It receives alerts, handles silencing, inhibition, grouping, and routing by sending notifications out via your channel of choice, for example, email or Slack.
|
||||||
|
|
||||||
In Grafana, you can use the Cloud Alertmanager, Grafana Alertmanager, or an external Alertmanager. You can also run multiple alertmanagers; your decision depends on your set up and where your alerts are being generated.
|
In Grafana, you can use the Cloud Alertmanager, Grafana Alertmanager, or an external Alertmanager. You can also run multiple Alertmanagers; your decision depends on your set up and where your alerts are being generated.
|
||||||
|
|
||||||
**Cloud Alertmanager**
|
**Cloud Alertmanager**
|
||||||
|
|
||||||
@@ -19,7 +21,7 @@ Cloud Alertmanager runs in Grafana Cloud and it can receive alerts from Grafana,
|
|||||||
|
|
||||||
**Grafana Alertmanager**
|
**Grafana Alertmanager**
|
||||||
|
|
||||||
Grafana Alertmanager is an internal Alertmanager that is pre-configured and available for selection by default if you run Grafana on-premise or open-source.
|
Grafana Alertmanager is an internal Alertmanager that is pre-configured and available for selection by default if you run Grafana on-premises or open-source.
|
||||||
|
|
||||||
The Grafana Alertmanager can receive alerts from Grafana, but it cannot receive alerts from outside Grafana, for example, from Mimir or Loki.
|
The Grafana Alertmanager can receive alerts from Grafana, but it cannot receive alerts from outside Grafana, for example, from Mimir or Loki.
|
||||||
|
|
||||||
@@ -27,13 +29,13 @@ The Grafana Alertmanager can receive alerts from Grafana, but it cannot receive
|
|||||||
|
|
||||||
**External Alertmanager**
|
**External Alertmanager**
|
||||||
|
|
||||||
If you want to use a single alertmanager to receive all your Grafana, Loki, Mimir, and Prometheus alerts, you can set up Grafana to use an external Alertmanager. This external Alertmanager can be configured and administered from within Grafana itself.
|
If you want to use a single Alertmanager to receive all your Grafana, Loki, Mimir, and Prometheus alerts, you can set up Grafana to use an external Alertmanager. This external Alertmanager can be configured and administered from within Grafana itself.
|
||||||
|
|
||||||
Here are two examples of when you may want to configure your own external alertmanager and send your alerts there instead of the Grafana Alertmanager:
|
Here are two examples of when you may want to configure your own external alertmanager and send your alerts there instead of the Grafana Alertmanager:
|
||||||
|
|
||||||
1. You may already have alertmanagers on-premise in your own Cloud infrastructure that you have set up and still want to use, because you have other alert generators, such as Prometheus.
|
1. You may already have Alertmanagers on-premises in your own Cloud infrastructure that you have set up and still want to use, because you have other alert generators, such as Prometheus.
|
||||||
|
|
||||||
2. You want to use both Prometheus on-premise and hosted Grafana to send alerts to the same alertmanager that runs in your Cloud infrastructure.
|
2. You want to use both Prometheus on-premises and hosted Grafana to send alerts to the same Alertmanager that runs in your Cloud infrastructure.
|
||||||
|
|
||||||
Alertmanagers are visible from the drop-down menu on the Alerting Contact Points, Notification Policies, and Silences pages.
|
Alertmanagers are visible from the drop-down menu on the Alerting Contact Points, Notification Policies, and Silences pages.
|
||||||
|
|
||||||
@@ -43,4 +45,4 @@ If you are provisioning your data source, set the flag `handleGrafanaManagedAler
|
|||||||
|
|
||||||
[Prometheus Alertmanager documentation](https://prometheus.io/docs/alerting/latest/alertmanager/)
|
[Prometheus Alertmanager documentation](https://prometheus.io/docs/alerting/latest/alertmanager/)
|
||||||
|
|
||||||
[Add an external Alertmanager](https://grafana.com/docs/grafana/latest/alerting/set-up/configure-alertmanager/)
|
[Add an external Alertmanager]({{< relref "../set-up/configure-alertmanager" >}})
|
||||||
@@ -10,7 +10,7 @@ keywords:
|
|||||||
- rules
|
- rules
|
||||||
- create
|
- create
|
||||||
title: Labels and annotations
|
title: Labels and annotations
|
||||||
weight: 401
|
weight: 110
|
||||||
---
|
---
|
||||||
|
|
||||||
# Labels and annotations
|
# Labels and annotations
|
||||||
|
|||||||
@@ -17,11 +17,11 @@ This topic explains why labels are a fundamental component of alerting.
|
|||||||
- The Alertmanager uses labels to match alerts for silences and alert groups in notification policies.
|
- The Alertmanager uses labels to match alerts for silences and alert groups in notification policies.
|
||||||
- The alerting UI shows labels for every alert instance generated during evaluation of that rule.
|
- The alerting UI shows labels for every alert instance generated during evaluation of that rule.
|
||||||
- Contact points can access labels to dynamically generate notifications that contain information specific to the alert that is resulting in a notification.
|
- Contact points can access labels to dynamically generate notifications that contain information specific to the alert that is resulting in a notification.
|
||||||
- You can add labels to an [alerting rule]({{< relref "/docs/grafana/latest/alerting/alerting-rules" >}}). Labels are manually configurable, use template functions, and can reference other labels. Labels added to an alerting rule take precedence in the event of a collision between labels (except in the case of [Grafana reserved labels](#grafana-reserved-labels)).
|
- You can add labels to an [alerting rule]({{< relref "../../alerting-rules" >}}). Labels are manually configurable, use template functions, and can reference other labels. Labels added to an alerting rule take precedence in the event of a collision between labels (except in the case of [Grafana reserved labels](#grafana-reserved-labels)).
|
||||||
|
|
||||||
{{< figure src="/static/img/docs/alerting/unified/rule-edit-details-8-0.png" max-width="550px" caption="Alert details" >}}
|
{{< figure src="/static/img/docs/alerting/unified/rule-edit-details-8-0.png" max-width="550px" caption="Alert details" >}}
|
||||||
|
|
||||||
# External Alertmanager Compatibility
|
## External Alertmanager Compatibility
|
||||||
|
|
||||||
Grafana's built-in Alertmanager supports both Unicode label keys and values. If you are using an external Prometheus Alertmanager, label keys must be compatible with their [data model](https://prometheus.io/docs/concepts/data_model/#metric-names-and-labels).
|
Grafana's built-in Alertmanager supports both Unicode label keys and values. If you are using an external Prometheus Alertmanager, label keys must be compatible with their [data model](https://prometheus.io/docs/concepts/data_model/#metric-names-and-labels).
|
||||||
This means that label keys must only contain **ASCII letters**, **numbers**, as well as **underscores** and match the regex `[a-zA-Z_][a-zA-Z0-9_]*`.
|
This means that label keys must only contain **ASCII letters**, **numbers**, as well as **underscores** and match the regex `[a-zA-Z_][a-zA-Z0-9_]*`.
|
||||||
@@ -35,10 +35,12 @@ Example: A label key/value pair `Alert! 🔔="🔥"` will become `Alert_0x1f514=
|
|||||||
|
|
||||||
**Note** If multiple label keys are sanitized to the same value, the duplicates will have a short hash of the original label appended as a suffix.
|
**Note** If multiple label keys are sanitized to the same value, the duplicates will have a short hash of the original label appended as a suffix.
|
||||||
|
|
||||||
# Grafana reserved labels
|
## Grafana reserved labels
|
||||||
|
|
||||||
> **Note:** Labels prefixed with `grafana_` are reserved by Grafana for special use. If a manually configured label is added beginning with `grafana_` it may be overwritten in case of collision.
|
{{% admonition type="note" %}}
|
||||||
> To stop the Grafana Alerting engine from adding a reserved label, you can disable it via the `disabled_labels` option in [unified_alerting.reserved_labels]({{< relref "/docs/grafana/latest/setup-grafana/configure-grafana#unified_alertingreserved_labels" >}}) configuration.
|
Labels prefixed with `grafana_` are reserved by Grafana for special use. If a manually configured label is added beginning with `grafana_` it may be overwritten in case of collision.
|
||||||
|
To stop the Grafana Alerting engine from adding a reserved label, you can disable it via the `disabled_labels` option in [unified_alerting.reserved_labels]({{< relref "../../../setup-grafana/configure-grafana#unified_alertingreserved_labels" >}}) configuration.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
Grafana reserved labels can be used in the same way as manually configured labels. The current list of available reserved labels are:
|
Grafana reserved labels can be used in the same way as manually configured labels. The current list of available reserved labels are:
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,8 @@ keywords:
|
|||||||
- alerting
|
- alerting
|
||||||
- guide
|
- guide
|
||||||
- fundamentals
|
- fundamentals
|
||||||
title: Label matchers
|
title: How label matching works
|
||||||
|
menuTitle: Label matchers
|
||||||
weight: 117
|
weight: 117
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -122,6 +122,14 @@ If the rule uses Classic Conditions instead of Threshold, Reduce and Math expres
|
|||||||
The first condition is {{ $values.B0 }}, and the second condition is {{ $values.B1 }}
|
The first condition is {{ $values.B0 }}, and the second condition is {{ $values.B1 }}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
With classic conditions, labels from the query are not available in `$labels` variable, because single alert instance are generated. Instead, you can retrieve the labels from the `$values` variable.
|
||||||
|
|
||||||
|
```
|
||||||
|
{{ range $k, $v := $values }}
|
||||||
|
The value is {{ $v }} and the labels are {{ $v.Labels }}
|
||||||
|
{{ end }}
|
||||||
|
```
|
||||||
|
|
||||||
## Functions
|
## Functions
|
||||||
|
|
||||||
The following functions are also available when expanding labels and annotations:
|
The following functions are also available when expanding labels and annotations:
|
||||||
@@ -156,7 +164,7 @@ https://example.com/grafana
|
|||||||
|
|
||||||
### graphLink
|
### graphLink
|
||||||
|
|
||||||
The `graphLink` function returns the path to the graphical view in [Explore](https://grafana.com/docs/grafana/latest/explore/) for the given expression and data source.
|
The `graphLink` function returns the path to the graphical view in [Explore]({{< relref "../../../explore" >}}) for the given expression and data source.
|
||||||
|
|
||||||
#### Example
|
#### Example
|
||||||
|
|
||||||
@@ -268,7 +276,7 @@ The `pathPrefix` function returns the path of the Grafana server as configured i
|
|||||||
|
|
||||||
### tableLink
|
### tableLink
|
||||||
|
|
||||||
The `tableLink` function returns the path to the tabular view in [Explore](https://grafana.com/docs/grafana/latest/explore/) for the given expression and data source.
|
The `tableLink` function returns the path to the tabular view in [Explore]({{< relref "../../../explore" >}}) for the given expression and data source.
|
||||||
|
|
||||||
#### Example
|
#### Example
|
||||||
|
|
||||||
|
|||||||
@@ -12,14 +12,18 @@ keywords:
|
|||||||
- notification channel
|
- notification channel
|
||||||
- create
|
- create
|
||||||
title: Contact points
|
title: Contact points
|
||||||
weight: 410
|
weight: 106
|
||||||
---
|
---
|
||||||
|
|
||||||
# Contact points
|
# Contact points
|
||||||
|
|
||||||
Use contact points to define how your contacts are notified when an alert rule fires. A contact point can have one or more contact point types, for example, email, slack, webhook, and so on. When an alert rule fires, a notification is sent to all contact point types listed for a contact point. Contact points can be configured for the Grafana Alertmanager as well as external alertmanagers.
|
Contact points contain the configuration for sending notifications. A contact point is a list of integrations, each of which sends a notification to a particular email address, service or URL. Contact points can have multiple integrations of the same kind, or a combination of integrations of different kinds. For example, a contact point could contain a Pagerduty integration; an email and Slack integration; or a Pagerduty integration, a Slack integration, and two email integrations. You can also configure a contact point with no integrations; in which case no notifications are sent.
|
||||||
|
|
||||||
You can also use notification templating to customize notification messages for contact point types.
|
A contact point cannot send notifications until it has been added to a notification policy. A notification policy can only send alerts to one contact point, but a contact point can be added to a number of notification policies at the same time. When an alert matches a notification policy, the alert is sent to the contact point in that notification policy, which then sends a notification to each integration in its configuration.
|
||||||
|
|
||||||
|
Contact points can be configured for the Grafana Alertmanager as well as external alertmanagers.
|
||||||
|
|
||||||
|
You can also use notification templating to customize notification messages for contact point integrations.
|
||||||
|
|
||||||
**Note:**
|
**Note:**
|
||||||
|
|
||||||
@@ -33,7 +37,7 @@ The following table lists the contact point integrations supported by Grafana.
|
|||||||
| ------------------------------------------------ | ------------------------- | -------------------- | -------------------------------------------------------------------------------------------------------- |
|
| ------------------------------------------------ | ------------------------- | -------------------- | -------------------------------------------------------------------------------------------------------- |
|
||||||
| [DingDing](https://www.dingtalk.com/en) | `dingding` | Supported | N/A |
|
| [DingDing](https://www.dingtalk.com/en) | `dingding` | Supported | N/A |
|
||||||
| [Discord](https://discord.com/) | `discord` | Supported | N/A |
|
| [Discord](https://discord.com/) | `discord` | Supported | N/A |
|
||||||
| [Email](#email) | `email` | Supported | Supported |
|
| Email | `email` | Supported | Supported |
|
||||||
| [Google Hangouts](https://hangouts.google.com/) | `googlechat` | Supported | N/A |
|
| [Google Hangouts](https://hangouts.google.com/) | `googlechat` | Supported | N/A |
|
||||||
| [Kafka](https://kafka.apache.org/) | `kafka` | Supported | N/A |
|
| [Kafka](https://kafka.apache.org/) | `kafka` | Supported | N/A |
|
||||||
| [Line](https://line.me/en/) | `line` | Supported | N/A |
|
| [Line](https://line.me/en/) | `line` | Supported | N/A |
|
||||||
@@ -47,13 +51,7 @@ The following table lists the contact point integrations supported by Grafana.
|
|||||||
| [Telegram](https://telegram.org/) | `telegram` | Supported | N/A |
|
| [Telegram](https://telegram.org/) | `telegram` | Supported | N/A |
|
||||||
| [Threema](https://threema.ch/) | `threema` | Supported | N/A |
|
| [Threema](https://threema.ch/) | `threema` | Supported | N/A |
|
||||||
| [VictorOps](https://help.victorops.com/) | `victorops` | Supported | Supported |
|
| [VictorOps](https://help.victorops.com/) | `victorops` | Supported | Supported |
|
||||||
| [Webhook](#webhook) | `webhook` | Supported | Supported ([different format](https://prometheus.io/docs/alerting/latest/configuration/#webhook_config)) |
|
| Webhook | `webhook` | Supported | Supported ([different format](https://prometheus.io/docs/alerting/latest/configuration/#webhook_config)) |
|
||||||
| [Cisco Webex Teams](#webex) | `webex` | Supported | Supported |
|
| Cisco Webex Teams | `webex` | Supported | Supported |
|
||||||
| [WeCom](#wecom) | `wecom` | Supported | N/A |
|
| WeCom | `wecom` | Supported | N/A |
|
||||||
| [Zenduty](https://www.zenduty.com/) | `webhook` | Supported | N/A |
|
| [Zenduty](https://www.zenduty.com/) | `webhook` | Supported | N/A |
|
||||||
|
|
||||||
## Useful links
|
|
||||||
|
|
||||||
[Manage contact points](/docs/grafana/latest/alerting/manage-notifications/create-contact-point/)
|
|
||||||
|
|
||||||
[Create and edit notification templates](/docs/grafana/latest/alerting/manage-notifications/template-notifications/create-notification-templates/)
|
|
||||||
|
|||||||
@@ -6,32 +6,31 @@ weight: 100
|
|||||||
|
|
||||||
# Data sources
|
# Data sources
|
||||||
|
|
||||||
There are a number of data sources that are compatible with Grafana Alerting. Each data source is supported by a plugin. You can use one of the built-in data sources listed below, use [external data source plugins](https://grafana.com/grafana/plugins/?type=datasource), or create your own data source plugin.
|
There are a number of data sources that are compatible with Grafana Alerting. Each data source is supported by a plugin. You can use one of the built-in data sources listed below, use [external data source plugins](/grafana/plugins/?type=datasource), or create your own data source plugin.
|
||||||
|
|
||||||
If you are creating your own data source plugin, make sure it is a backend plugin as Grafana Alerting requires this in order to be able to evaluate rules using the data source. Frontend data sources are not supported, because the evaluation engine runs on the backend.
|
If you are creating your own data source plugin, make sure it is a backend plugin as Grafana Alerting requires this in order to be able to evaluate rules using the data source. Frontend data sources are not supported, because the evaluation engine runs on the backend.
|
||||||
|
|
||||||
Specifying { "alerting": true, “backend”: true } in the plugin.json file indicates that the data source plugin is compatible with Grafana Alerting and includes the backend data-fetching code. For more information, refer to [Build a data source backend plugin](https://grafana.com/tutorials/build-a-data-source-backend-plugin/).
|
Specifying `{ "alerting": true, “backend”: true }` in the plugin.json file indicates that the data source plugin is compatible with Grafana Alerting and includes the backend data-fetching code. For more information, refer to [Build a data source backend plugin](/tutorials/build-a-data-source-backend-plugin/).
|
||||||
|
|
||||||
These are the data sources that are compatible with and supported by Grafana Alerting.
|
These are the data sources that are compatible with and supported by Grafana Alerting.
|
||||||
|
|
||||||
- [AWS CloudWatch](https://grafana.com/docs/grafana/latest/datasources/aws-cloudwatch/)
|
- [AWS CloudWatch]({{< relref "../../datasources/aws-cloudwatch" >}})
|
||||||
- [Azure Monitor](https://grafana.com/docs/grafana/latest/datasources/azuremonitor/)
|
- [Azure Monitor]({{< relref "../../datasources/azure-monitor" >}})
|
||||||
- [Elasticsearch](https://grafana.com/docs/grafana/latest/datasources/elasticsearch/)
|
- [Elasticsearch]({{< relref "../../datasources/elasticsearch" >}})
|
||||||
- [Google Cloud Monitoring](https://grafana.com/docs/grafana/latest/datasources/google-cloud-monitoring/)
|
- [Google Cloud Monitoring]({{< relref "../../datasources/google-cloud-monitoring" >}})
|
||||||
- [Graphite](https://grafana.com/docs/grafana/latest/datasources/graphite/)
|
- [Graphite]({{< relref "../../datasources/graphite" >}})
|
||||||
- [InfluxDB](https://grafana.com/docs/grafana/latest/datasources/influxdb/)
|
- [InfluxDB]({{< relref "../../datasources/influxdb" >}})
|
||||||
- [Loki](https://grafana.com/docs/grafana/latest/datasources/loki/)
|
- [Loki]({{< relref "../../datasources/loki" >}})
|
||||||
- [Microsoft SQL Server MSSQL](https://grafana.com/docs/grafana/latest/datasources/mssql/)
|
- [Microsoft SQL Server MSSQL]({{< relref "../../datasources/mssql" >}})
|
||||||
- [MySQL](https://grafana.com/docs/grafana/latest/datasources/mysql/)
|
- [MySQL]({{< relref "../../datasources/mysql" >}})
|
||||||
- [Open TSDB](https://grafana.com/docs/grafana/latest/datasources/opentsdb/)
|
- [Open TSDB]({{< relref "../../datasources/opentsdb" >}})
|
||||||
- [PostgreSQL](https://grafana.com/docs/grafana/latest/datasources/postgres/)
|
- [PostgreSQL]({{< relref "../../datasources/postgres" >}})
|
||||||
- [Prometheus](https://grafana.com/docs/grafana/latest/datasources/prometheus/)
|
- [Prometheus]({{< relref "../../datasources/prometheus" >}})
|
||||||
- [Jaeger](https://grafana.com/docs/grafana/latest/datasources/jaeger/)
|
- [Jaeger]({{< relref "../../datasources/jaeger" >}})
|
||||||
- [Zipkin](https://grafana.com/docs/grafana/latest/datasources/zipkin/)
|
- [Zipkin]({{< relref "../../datasources/zipkin" >}})
|
||||||
- [Tempo](https://grafana.com/docs/grafana/latest/datasources/tempo/)
|
- [Tempo]({{< relref "../../datasources/tempo" >}})
|
||||||
- [Testdata](https://grafana.com/docs/grafana/latest/datasources/testdata/)
|
- [Testdata]({{< relref "../../datasources/testdata" >}})
|
||||||
|
|
||||||
## Useful links
|
## Useful links
|
||||||
|
|
||||||
- [Grafana data sources](https://grafana.com/docs/grafana/latest/datasources/)
|
- [Grafana data sources]({{< relref "../../datasources" >}})
|
||||||
- [Add a data source](https://grafana.com/docs/grafana/latest/datasources/add-a-data-source/)
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
aliases:
|
aliases:
|
||||||
- ../metrics/
|
- ../metrics/
|
||||||
- ../unified-alerting/fundamentals/evaluate-grafana-alerts/
|
- ../unified-alerting/fundamentals/evaluate-grafana-alerts/
|
||||||
|
description: How to alert on numeric data
|
||||||
title: Alerting on numeric data
|
title: Alerting on numeric data
|
||||||
weight: 116
|
weight: 116
|
||||||
---
|
---
|
||||||
@@ -23,11 +24,11 @@ Grafana managed alerts query the following backend data sources that have alerti
|
|||||||
|
|
||||||
- built-in data sources or those developed and maintained by Grafana: `Graphite`, `Prometheus`, `Loki`, `InfluxDB`, `Elasticsearch`,
|
- built-in data sources or those developed and maintained by Grafana: `Graphite`, `Prometheus`, `Loki`, `InfluxDB`, `Elasticsearch`,
|
||||||
`Google Cloud Monitoring`, `Cloudwatch`, `Azure Monitor`, `MySQL`, `PostgreSQL`, `MSSQL`, `OpenTSDB`, `Oracle`, and `Azure Monitor`
|
`Google Cloud Monitoring`, `Cloudwatch`, `Azure Monitor`, `MySQL`, `PostgreSQL`, `MSSQL`, `OpenTSDB`, `Oracle`, and `Azure Monitor`
|
||||||
- community developed backend data sources with alerting enabled (`backend` and `alerting` properties are set in the [plugin.json]({{< relref "/docs/grafana/latest/developers/plugins/metadata" >}}))
|
- community developed backend data sources with alerting enabled (`backend` and `alerting` properties are set in the [plugin.json]({{< relref "../../developers/plugins/metadata" >}}))
|
||||||
|
|
||||||
### Metrics from the alerting engine
|
### Metrics from the alerting engine
|
||||||
|
|
||||||
The alerting engine publishes some internal metrics about itself. You can read more about how Grafana publishes [internal metrics]({{< relref "/docs/grafana/latest/setup-grafana/set-up-grafana-monitoring" >}}).
|
The alerting engine publishes some internal metrics about itself. You can read more about how Grafana publishes [internal metrics]({{< relref "../../setup-grafana/set-up-grafana-monitoring" >}}).
|
||||||
|
|
||||||
| Metric Name | Type | Description |
|
| Metric Name | Type | Description |
|
||||||
| ------------------------------------------------- | --------- | ---------------------------------------------------------------------------------------- |
|
| ------------------------------------------------- | --------- | ---------------------------------------------------------------------------------------- |
|
||||||
|
|||||||
@@ -32,4 +32,4 @@ The notification logs and silences are persisted in the database periodically an
|
|||||||
|
|
||||||
## Useful links
|
## Useful links
|
||||||
|
|
||||||
[Configure alerting high availability](https://grafana.com/docs/grafana/next/alerting/set-up/configure-high-availability)
|
[Configure alerting high availability]({{< relref "../../set-up/configure-high-availability" >}})
|
||||||
|
|||||||
@@ -0,0 +1,47 @@
|
|||||||
|
---
|
||||||
|
title: Notifications
|
||||||
|
description: Introduction to notifications Policies
|
||||||
|
weight: 107
|
||||||
|
keywords:
|
||||||
|
- grafana
|
||||||
|
- alerting
|
||||||
|
- notification policies
|
||||||
|
---
|
||||||
|
|
||||||
|
# Notifications
|
||||||
|
|
||||||
|
Choosing how, when, and where to send your alert notifications is an important part of setting up your alerting system. These decisions will have a direct impact on your ability to resolve issues quickly and not miss anything important.
|
||||||
|
|
||||||
|
As a first step, define your contact points; where to send your alert notifications to. A contact point is a set of one or more integrations that are used to deliver notifications. Add notification templates to contact points for reuse and consistent messaging in your notifications.
|
||||||
|
|
||||||
|
Next, create a notification policy which is a set of rules for where, when and how your alerts are routed to contact points. In a notification policy, you define where to send your alert notifications by choosing one of the contact points you created.
|
||||||
|
|
||||||
|
## Alertmanagers
|
||||||
|
|
||||||
|
Grafana uses Alertmanagers to send notifications for firing and resolved alerts. Grafana has its own Alertmanager, referred to as "Grafana" in the user interface, but also supports sending notifications from other Alertmanagers too, such as the [Prometheus Alertmanager](https://prometheus.io/docs/alerting/latest/alertmanager/). The Grafana Alertmanager uses notification policies and contact points to configure how and where a notification is sent; how often a notification should be sent; and whether alerts should all be sent in the same notification, sent in grouped notifications based on a set of labels, or as separate notifications.
|
||||||
|
|
||||||
|
## Notification policies
|
||||||
|
|
||||||
|
Notification policies control when and where notifications are sent. A notification policy can choose to send all alerts together in the same notification, send alerts in grouped notifications based on a set of labels, or send alerts as separate notifications. You can configure each notification policy to control how often notifications should be sent as well as having one or more mute timings to inhibit notifications at certain times of the day and on certain days of the week.
|
||||||
|
|
||||||
|
Notification policies are organized in a tree structure where at the root of the tree there is a notification policy called the default policy. There can be only one default policy and the default policy cannot be deleted.
|
||||||
|
|
||||||
|
Specific routing policies are children of the default policy and can be used to match either all alerts or a subset of alerts based on a set of matching labels. A notification policy matches an alert when its matching labels match the labels in the alert.
|
||||||
|
|
||||||
|
A nested policy can have its own nested policies, which allow for additional matching of alerts. An example of a nested policy could be sending infrastructure alerts to the Ops team; while a nested policy might send high priority alerts to Pagerduty and low priority alerts as emails.
|
||||||
|
|
||||||
|
All alerts, irrespective of their labels, match the default policy. However, when the default policy receives an alert it looks at each nested policy and sends the alert to the first nested policy that matches the alert. If the nested policy has further nested policies, then it can attempt to the match the alert against one of its nested policies. If no nested policies match the alert then the policy itself is the matching policy. If there are no nested policies, or no nested policies match the alert, then the default policy is the matching policy.
|
||||||
|
|
||||||
|
<!-- This definitely needs a diagram and some examples (Gilles) -->
|
||||||
|
|
||||||
|
## Notification templates
|
||||||
|
|
||||||
|
You can customize notifications with templates. For example, templates can be used to change the subject and message of an email, or the title and message of notifications sent to Slack.
|
||||||
|
|
||||||
|
Templates are not limited to an individual integration or contact point, but instead can be used in a number of integrations in the same contact point and even integrations across different contact points. For example, a Grafana user can create a template called `custom_subject_or_title` and use it for both templating subjects in emails and titles of Slack messages without having to create two separate templates.
|
||||||
|
|
||||||
|
All notifications templates are written in [Go's templating language](https://pkg.go.dev/text/template), and are in the Contact points tab on the Alerting page.
|
||||||
|
|
||||||
|
## Silences
|
||||||
|
|
||||||
|
You can use silences to mute notifications from one or more firing rules. Silences do not stop alerts from firing or being resolved, or hide firing alerts in the user interface. A silence lasts as long as its duration which can be configured in minutes, hours, days, months or years.
|
||||||
@@ -0,0 +1,138 @@
|
|||||||
|
---
|
||||||
|
aliases:
|
||||||
|
- ../notifications/
|
||||||
|
- alerting/manage-notifications/create-notification-policy/
|
||||||
|
description: Notification policies
|
||||||
|
keywords:
|
||||||
|
- grafana
|
||||||
|
- alerting
|
||||||
|
- alertmanager
|
||||||
|
- notification policies
|
||||||
|
- contact points
|
||||||
|
- silences
|
||||||
|
title: Notification policies
|
||||||
|
weight: 410
|
||||||
|
---
|
||||||
|
|
||||||
|
# Notification policies
|
||||||
|
|
||||||
|
Notification policies provide you with a flexible way of routing alerts to various different receivers. Using label matchers, you can modify alert notification delivery without having to update every individual alert rule.
|
||||||
|
|
||||||
|
Learn more about how notification policies work and are structured, so that you can make the most out of setting up your notification policies.
|
||||||
|
|
||||||
|
## Policy tree
|
||||||
|
|
||||||
|
Notification policies are _not_ a list, but rather are structured according to a [tree structure](https://en.wikipedia.org/wiki/Tree_structure). This means that each policy can have child policies, and so on. The root of the notification policy tree is called the **Default notification policy**.
|
||||||
|
|
||||||
|
Each policy consists of a set of label matchers (0 or more) that specify which labels they are or aren't interested in handling.
|
||||||
|
|
||||||
|
For more information on label matching, see [how label matching works]({{< relref "../annotation-label/labels-and-label-matchers.md" >}}).
|
||||||
|
|
||||||
|
{{% admonition type="note" %}}
|
||||||
|
If you haven't configured any label matchers for your notification policy, your notification policy will match _all_ alert instances. This may prevent child policies from being evaluated unless you have enabled **Continue matching siblings** on the notification policy.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
|
## Routing
|
||||||
|
|
||||||
|
To determine which notification policy will handle which alert instances, you have to start by looking at the existing set of notification policies, starting with the default notification policy.
|
||||||
|
|
||||||
|
If no policies other than the default policy are configured, the default policy will handle the alert instance.
|
||||||
|
|
||||||
|
If policies other than the default policy are defined, it will inspect those notification policies in descending order.
|
||||||
|
|
||||||
|
If a notification policy has label matchers that match the labels of the alert instance, it will descend in to its child policies and, if there are any, will continue to look for any child policies that might have label matchers that further narrow down the set of labels, and so forth until no more child policies have been found.
|
||||||
|
|
||||||
|
If no child policies are defined in a notification policy or if none of the child policies have any label matchers that match the alert instance's labels, the default notification policy is used.
|
||||||
|
|
||||||
|
As soon as a matching policy is found, the system does not continue to look for other matching policies. If you want to continue to look for other policies that may match, enable **Continue matching siblings** on that particular policy.
|
||||||
|
|
||||||
|
Lastly, if none of the notification policies are selected the default notification policy is used.
|
||||||
|
|
||||||
|
### Routing example
|
||||||
|
|
||||||
|
Here is an example of a relatively simple notification policy tree and some alert instances.
|
||||||
|
|
||||||
|
{{< figure src="/media/docs/alerting/notification-routing.png" max-width="750px" caption="Notification policy routing" >}}
|
||||||
|
|
||||||
|
Here's a breakdown of how these policies are selected:
|
||||||
|
|
||||||
|
**Pod stuck in CrashLoop** does not have a `severity` label, so none of its child policies are matched. It does have a `team=operations` label, so the first policy is matched.
|
||||||
|
|
||||||
|
The `team=security` policy is not evaluated since we already found a match and **Continue matching siblings** was not configured for that policy.
|
||||||
|
|
||||||
|
**Disk Usage – 80%** has both a `team` and `severity` label, and matches a child policy of the operations team.
|
||||||
|
|
||||||
|
**Unauthorized log entry** has a `team` label but does not match the first policy (`team=operations`) since the values are not the same, so it will continue searching and match the `team=security` policy. It does not have any child policies, so the additional `severity=high` label is ignored.
|
||||||
|
|
||||||
|
## Inheritance
|
||||||
|
|
||||||
|
In addition to child policies being a useful concept for routing alert instances, they also inherit properties from their parent policy. This also applies to any policies that are child policies of the default notification policy.
|
||||||
|
|
||||||
|
The following properties are inherited by child policies:
|
||||||
|
|
||||||
|
- Contact point
|
||||||
|
- Grouping options
|
||||||
|
- Timing options
|
||||||
|
- Mute timings
|
||||||
|
|
||||||
|
Each of these properties can be overwritten by an individual policy should you wish to override the inherited properties.
|
||||||
|
|
||||||
|
To inherit a contact point from the parent policy, leave it blank. To override the inherited grouping options, enable **Override grouping**. To override the inherited timing options, enable **Override general timings**.
|
||||||
|
|
||||||
|
### Inheritance example
|
||||||
|
|
||||||
|
The example below shows how the notification policy tree from our previous example allows the child policies of the `team=operations` to inherit its contact point.
|
||||||
|
|
||||||
|
In this way, we can avoid having to specify the same contact point multiple times for each child policy.
|
||||||
|
|
||||||
|
{{< figure src="/media/docs/alerting/notification-inheritance.png" max-width="750px" caption="Notification policy inheritance" >}}
|
||||||
|
|
||||||
|
## Additional configuration options
|
||||||
|
|
||||||
|
### Grouping
|
||||||
|
|
||||||
|
Grouping is a key concept in Grafana Alerting that categorizes alert instances of similar nature into a single funnel. This allows you to properly route alert notifications during larger outages when many parts of a system fail at once causing a high number of alerts to fire simultaneously.
|
||||||
|
|
||||||
|
Grouping options determine _which_ alert instances are bundled together.
|
||||||
|
|
||||||
|
When an alert instance is matched to a specific notification policy, it no longer has any association with its alert rule.
|
||||||
|
|
||||||
|
To group alert instances by the original alert rule, set the grouping using `alertname` and `grafana_folder` (since alert names are not unique across multiple folders).
|
||||||
|
|
||||||
|
This is also the default setting for the built-in Grafana Alertmanager.
|
||||||
|
|
||||||
|
Should you wish to group alert instances by something other than the alert rule, check the grouping to any other combination of label keys.
|
||||||
|
|
||||||
|
#### Turn off grouping
|
||||||
|
|
||||||
|
Should you wish to receive every alert instance as a separate notification, choose to do so by grouping by a special label called `...`.
|
||||||
|
|
||||||
|
#### Everything in a single group
|
||||||
|
|
||||||
|
Should you wish to receive all alert instance in a single notification, create an empty list of labels to group by.
|
||||||
|
|
||||||
|
### Timing options
|
||||||
|
|
||||||
|
Timing options can be updated and affect _when_ a group of notifications are sent to their corresponding contact point.
|
||||||
|
|
||||||
|
#### Group wait
|
||||||
|
|
||||||
|
The waiting time until the initial notification is sent for a **new group** created by an incoming alert.
|
||||||
|
|
||||||
|
**Default** 30 seconds
|
||||||
|
|
||||||
|
#### Group interval
|
||||||
|
|
||||||
|
The waiting time to send a batch of alert instances for **existing groups**.
|
||||||
|
|
||||||
|
{{% admonition type="note" %}}
|
||||||
|
This means that notifications will **not** be sent any sooner than 5 minutes (default) since the last batch of updates were delivered, regardless of whether the alert rule interval for those alert instances was lower.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
|
**Default** 5 minutes
|
||||||
|
|
||||||
|
#### Repeat interval
|
||||||
|
|
||||||
|
The waiting time to resend an alert after they have successfully been sent. This means notifications for **firing** alerts will be re-delivered every 4 hours (default).
|
||||||
|
|
||||||
|
**Default** 4 hours
|
||||||
@@ -1,77 +0,0 @@
|
|||||||
---
|
|
||||||
aliases:
|
|
||||||
- ../notifications/
|
|
||||||
description: Notifications
|
|
||||||
keywords:
|
|
||||||
- grafana
|
|
||||||
- alerting
|
|
||||||
- alertmanager
|
|
||||||
- notification policies
|
|
||||||
- contact points
|
|
||||||
- silences
|
|
||||||
title: Notifications
|
|
||||||
weight: 410
|
|
||||||
---
|
|
||||||
|
|
||||||
# Notifications
|
|
||||||
|
|
||||||
Grafana uses Alertmanagers to send notifications for firing and resolved alerts. Grafana has its own Alertmanager, referred to as "Grafana" in the user interface, but also supports sending notifications from other Alertmanagers too, such as the [Prometheus Alertmanager](https://prometheus.io/docs/alerting/latest/alertmanager/). The Grafana Alertmanager uses notification policies and contact points to configure how and where a notification is sent; how often a notification should be sent; and whether alerts should all be sent in the same notification, sent in grouped notifications based on a set of labels, or as separate notifications.
|
|
||||||
|
|
||||||
## Notification policies
|
|
||||||
|
|
||||||
Notification policies control when and where notifications are sent. A notification policy can choose to send all alerts together in the same notification, send alerts in grouped notifications based on a set of labels, or send alerts as separate notifications. You can configure each notification policy to control how often notifications should be sent as well as having one or more mute timings to inhibit notifications at certain times of the day and on certain days of the week.
|
|
||||||
|
|
||||||
Notification policies are organized in a tree structure where at the root of the tree there is a notification policy called the default policy. There can be only one default policy and the default policy cannot be deleted.
|
|
||||||
|
|
||||||
Specific routing policies are children of the default policy and can be used to match either all alerts or a subset of alerts based on a set of matching labels. A notification policy matches an alert when its matching labels match the labels in the alert.
|
|
||||||
|
|
||||||
A nested policy can have its own nested policies, which allow for additional matching of alerts. An example of a nested policy could be sending infrastructure alerts to the Ops team; while a nested policy might send high priority alerts to Pagerduty and low priority alerts as emails.
|
|
||||||
|
|
||||||
All alerts, irrespective of their labels, match the default policy. However, when the default policy receives an alert it looks at each nested policy and sends the alert to the first nested policy that matches the alert. If the nested policy has further nested policies, then it can attempt to the match the alert against one of its nested policies. If no nested policies match the alert then the policy itself is the matching policy. If there are no nested policies, or no nested policies match the alert, then the default policy is the matching policy.
|
|
||||||
|
|
||||||
<!-- This definitely needs a diagram and some examples (Gilles) -->
|
|
||||||
|
|
||||||
## Contact points
|
|
||||||
|
|
||||||
Contact points contain the configuration for sending notifications. A contact point is a list of integrations, each of which sends a notification to a particular email address, service or URL. Contact points can have multiple integrations of the same kind, or a combination of integrations of different kinds. For example, a contact point could contain a Pagerduty integration; an email and Slack integration; or a Pagerduty integration, a Slack integration, and two email integrations. You can also configure a contact point with no integrations; in which case no notifications are sent.
|
|
||||||
|
|
||||||
A contact point cannot send notifications until it has been added to a notification policy. A notification policy can only send alerts to one contact point, but a contact point can be added to a number of notification policies at the same time. When an alert matches a notification policy, the alert is sent to the contact point in that notification policy, which then sends a notification to each integration in its configuration.
|
|
||||||
|
|
||||||
### Supported integrations
|
|
||||||
|
|
||||||
The following table contains the integrations supported in Grafana:
|
|
||||||
|
|
||||||
| Name | Type | Grafana Alertmanager | Other Alertmanagers |
|
|
||||||
| ------------------------------------------------ | ------------------------- | -------------------- | -------------------------------------------------------------------------------------------------------- |
|
|
||||||
| [DingDing](https://www.dingtalk.com/en) | `dingding` | Supported | N/A |
|
|
||||||
| [Discord](https://discord.com/) | `discord` | Supported | N/A |
|
|
||||||
| [Email](#email) | `email` | Supported | Supported |
|
|
||||||
| [Google Hangouts](https://hangouts.google.com/) | `googlechat` | Supported | N/A |
|
|
||||||
| [Kafka](https://kafka.apache.org/) | `kafka` | Supported | N/A |
|
|
||||||
| [Line](https://line.me/en/) | `line` | Supported | N/A |
|
|
||||||
| [Microsoft Teams](https://teams.microsoft.com/) | `teams` | Supported | N/A |
|
|
||||||
| [Opsgenie](https://atlassian.com/opsgenie/) | `opsgenie` | Supported | Supported |
|
|
||||||
| [Pagerduty](https://www.pagerduty.com/) | `pagerduty` | Supported | Supported |
|
|
||||||
| [Prometheus Alertmanager](https://prometheus.io) | `prometheus-alertmanager` | Supported | N/A |
|
|
||||||
| [Pushover](https://pushover.net/) | `pushover` | Supported | Supported |
|
|
||||||
| [Sensu Go](https://docs.sensu.io/sensu-go/) | `sensugo` | Supported | N/A |
|
|
||||||
| [Slack](https://slack.com/) | `slack` | Supported | Supported |
|
|
||||||
| [Telegram](https://telegram.org/) | `telegram` | Supported | N/A |
|
|
||||||
| [Threema](https://threema.ch/) | `threema` | Supported | N/A |
|
|
||||||
| [VictorOps](https://help.victorops.com/) | `victorops` | Supported | Supported |
|
|
||||||
| [Webhook](#webhook) | `webhook` | Supported | Supported ([different format](https://prometheus.io/docs/alerting/latest/configuration/#webhook_config)) |
|
|
||||||
| [Cisco Webex Teams](#webex) | `webex` | Supported | Supported |
|
|
||||||
| [WeCom](#wecom) | `wecom` | Supported | N/A |
|
|
||||||
| [Zenduty](https://www.zenduty.com/) | `webhook` | Supported | N/A |
|
|
||||||
|
|
||||||
## Templating notifications
|
|
||||||
|
|
||||||
You can customize notifications with templates. For example, templates can be used to change the subject and message of an email, or the title and message of notifications sent to Slack.
|
|
||||||
|
|
||||||
Templates are not limited to an individual integration or contact point, but instead can be used in a number of integrations in the same contact point and even integrations across different contact points. For example, a Grafana user can create a template called `custom_subject_or_title` and use it for both templating subjects in emails and titles of Slack messages without having to create two separate templates.
|
|
||||||
|
|
||||||
All notifications templates are written in [Go's templating language](https://pkg.go.dev/text/template), and are in the Contact points tab on the Alerting page.
|
|
||||||
|
|
||||||
## Silences
|
|
||||||
|
|
||||||
You can use silences to mute notifications from one or more firing rules. Silences do not stop alerts from firing or being resolved, or hide firing alerts in the user interface. A silence lasts as long as its duration which can be configured in minutes, hours, days, months or years.
|
|
||||||
@@ -1,23 +1,24 @@
|
|||||||
---
|
---
|
||||||
|
menuTitle: Manage
|
||||||
description: Manage alert notifications
|
description: Manage alert notifications
|
||||||
keywords:
|
keywords:
|
||||||
- grafana
|
- grafana
|
||||||
- alert
|
- alert
|
||||||
- notifications
|
- notifications
|
||||||
title: Manage your alert notifications
|
title: Manage your alerts
|
||||||
weight: 160
|
weight: 160
|
||||||
---
|
---
|
||||||
|
|
||||||
# Manage your alert notifications
|
# Manage your alerts
|
||||||
|
|
||||||
Choosing how, when, and where to send your alert notifications is an important part of setting up your alerting system. These decisions will have a direct impact on your ability to resolve issues quickly and not miss anything important.
|
Once you have set up your alert rules, contact points, and notification policies, you can use Grafana Alerting to:
|
||||||
|
|
||||||
As a first step, define your contact points; where to send your alert notifications to. A contact point can be a set of destinations for matching notifications. Add notification templates to contact points for reuse and consistent messaging in your notifications.
|
[Create silences]({{< relref "./create-silence" >}})
|
||||||
|
|
||||||
Next, create a notification policy which is a set of rules for where, when and how your alerts are routed to contact points. In a notification policy, you define where to send your alert notifications by choosing one of the contact points you created.Add mute timings to your notification policy. A mute timing is a recurring interval of time during which you don’t want any notifications to be sent out.
|
[Create mute timings]({{< relref "./mute-timings" >}})
|
||||||
|
|
||||||
You can also add silences to stop notifications from one or more alert rules. The difference between a silence and a mute timing is that a silence only lasts for only a specified window of time.
|
[Declare incidents from firing alerts]({{< relref "./declare-incident-from-alert" >}})
|
||||||
|
|
||||||
When an alert rule fires, the alert ruler sends alert instances to the Alertmanager; one alert rule can trigger multiple individual alert instances.
|
[View the state and health of alert rules]({{< relref "./view-state-health" >}})
|
||||||
|
|
||||||
The Alertmanager receives these alert instances and then handles silences, groups alerts, and sends notifications to your contact points as defined in the notification policy.
|
[View and filter alert rules]({{< relref "./view-alert-rules" >}})
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ keywords:
|
|||||||
- silence
|
- silence
|
||||||
- mute
|
- mute
|
||||||
title: Manage silences
|
title: Manage silences
|
||||||
weight: 600
|
weight: 410
|
||||||
---
|
---
|
||||||
|
|
||||||
# Manage silences
|
# Manage silences
|
||||||
@@ -61,3 +61,7 @@ To remove a silence, complete the following steps.
|
|||||||
1. Select the silence you want to end, then click **Unsilence**.
|
1. Select the silence you want to end, then click **Unsilence**.
|
||||||
|
|
||||||
> **Note:** You cannot remove a silence manually. Silences that have ended are retained and listed for five days.
|
> **Note:** You cannot remove a silence manually. Silences that have ended are retained and listed for five days.
|
||||||
|
|
||||||
|
## Useful links
|
||||||
|
|
||||||
|
[Aggregation operators](/docs/prometheus/latest/querying/operators/#aggregation-operators)
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
---
|
---
|
||||||
aliases:
|
aliases:
|
||||||
|
- alerting/alerting-rules/declare-incident-from-alert/
|
||||||
description: Declare an incident from a firing alert
|
description: Declare an incident from a firing alert
|
||||||
keywords:
|
keywords:
|
||||||
- grafana
|
- grafana
|
||||||
- alert rules
|
- alert rules
|
||||||
- incident
|
- incident
|
||||||
title: Declare an incident from a firing alert
|
title: Declare incidents from firing alerts
|
||||||
weight: 430
|
weight: 1010
|
||||||
---
|
---
|
||||||
|
|
||||||
# Declare incidents from firing alerts
|
# Declare incidents from firing alerts
|
||||||
@@ -46,4 +47,4 @@ To declare an incident from a firing alert, complete the following steps.
|
|||||||
|
|
||||||
View and track the incident in the Grafana Incident application.
|
View and track the incident in the Grafana Incident application.
|
||||||
|
|
||||||
For more information, refer to [Grafana Incident documentation.](https://grafana.com/docs/grafana-cloud/incident/configure-settings/)
|
For more information, refer to [Grafana Incident documentation.](/docs/grafana-cloud/incident/configure-settings/)
|
||||||
@@ -1,19 +1,21 @@
|
|||||||
---
|
---
|
||||||
description:
|
description: How to use images in notifications
|
||||||
keywords:
|
keywords:
|
||||||
- grafana
|
- grafana
|
||||||
- alerting
|
- alerting
|
||||||
- images
|
- images
|
||||||
- notifications
|
- notifications
|
||||||
title: Use images in notifications
|
title: Use images in notifications
|
||||||
weight: 500
|
weight: 405
|
||||||
---
|
---
|
||||||
|
|
||||||
# Use images in notifications
|
# Use images in notifications
|
||||||
|
|
||||||
Images in notifications helps recipients of alert notifications better understand why an alert has fired or resolved by including a screenshot of the panel associated with the alert.
|
Images in notifications helps recipients of alert notifications better understand why an alert has fired or resolved by including a screenshot of the panel associated with the alert.
|
||||||
|
|
||||||
> **Note**: This feature is not supported in Mimir or Loki, or when Grafana is configured to send alerts to other Alertmanagers such as the Prometheus Alertmanager
|
{{% admonition type="note" %}}
|
||||||
|
This feature is not supported in Mimir or Loki, or when Grafana is configured to send alerts to other Alertmanagers such as the Prometheus Alertmanager
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
When an alert is fired or resolved Grafana takes a screenshot of the panel associated with the alert. This is determined via the Dashboard UID and Panel ID annotations of the rule. Grafana cannot take a screenshot for alerts that are not associated with a panel.
|
When an alert is fired or resolved Grafana takes a screenshot of the panel associated with the alert. This is determined via the Dashboard UID and Panel ID annotations of the rule. Grafana cannot take a screenshot for alerts that are not associated with a panel.
|
||||||
|
|
||||||
@@ -25,25 +27,27 @@ Refer to the table at the end of this page for a list of contact points and thei
|
|||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
|
|
||||||
1. To use images in notifications, Grafana must be set up to use [image rendering]({{< relref "/docs/grafana/latest/setup-grafana/image-rendering" >}}). You can either install the image rendering plugin or run it as a remote rendering service.
|
1. To use images in notifications, Grafana must be set up to use [image rendering]({{< relref "../../setup-grafana/image-rendering" >}}). You can either install the image rendering plugin or run it as a remote rendering service.
|
||||||
|
|
||||||
2. When a screenshot is taken it is saved to the [data]({{< relref "/docs/grafana/latest/setup-grafana/configure-grafana#paths" >}}) folder, even if Grafana is configured to upload screenshots to a cloud storage service. Grafana must have write-access to this folder otherwise screenshots cannot be saved to disk and an error will be logged for each failed screenshot attempt.
|
2. When a screenshot is taken it is saved to the [data]({{< relref "../../setup-grafana/configure-grafana#paths" >}}) folder, even if Grafana is configured to upload screenshots to a cloud storage service. Grafana must have write-access to this folder otherwise screenshots cannot be saved to disk and an error will be logged for each failed screenshot attempt.
|
||||||
|
|
||||||
3. You should use a cloud storage service unless sending alerts to Discord, Email, Pushover, Slack or Telegram. These integrations support either embedding screenshots in the email or attaching screenshots to the notification, while other integrations must link screenshots uploaded to a cloud storage bucket. If a cloud storage service has been configured then integrations that support both will link screenshots from the cloud storage bucket instead of embedding or attaching screenshots to the notification.
|
3. You should use a cloud storage service unless sending alerts to Discord, Email, Pushover, Slack or Telegram. These integrations support either embedding screenshots in the email or attaching screenshots to the notification, while other integrations must link screenshots uploaded to a cloud storage bucket. If a cloud storage service has been configured then integrations that support both will link screenshots from the cloud storage bucket instead of embedding or attaching screenshots to the notification.
|
||||||
|
|
||||||
4. If uploading screenshots to a cloud storage service such as Amazon S3, Azure Blob Storage or Google Cloud Storage; and accessing screenshots in the bucket requires authentication, logging into a VPN or corporate network; then image previews might not work in all instant messaging and communication platforms as some services rewrite URLs to use their CDN. If this happens we recommend using [integrations which support uploading images]({{<relref "#supported-contact-points">}}) or [disabling images in notifications]({{<relref "#configuration">}}) altogether.
|
4. If uploading screenshots to a cloud storage service such as Amazon S3, Azure Blob Storage or Google Cloud Storage; and accessing screenshots in the bucket requires authentication, logging into a VPN or corporate network; then image previews might not work in all instant messaging and communication platforms as some services rewrite URLs to use their CDN. If this happens we recommend using [integrations which support uploading images]({{< relref "#supported-contact-points" >}}) or [disabling images in notifications]({{< relref "#configuration" >}}) altogether.
|
||||||
|
|
||||||
5. When uploading screenshots to a cloud storage service Grafana uses a random 20 character (30 characters for Azure Blob Storage) filename for each image. This makes URLs hard to guess but not impossible.
|
5. When uploading screenshots to a cloud storage service Grafana uses a random 20 character (30 characters for Azure Blob Storage) filename for each image. This makes URLs hard to guess but not impossible.
|
||||||
|
|
||||||
6. Grafana does not delete screenshots from cloud storage. We recommend configuring a retention policy with your cloud storage service to delete screenshots older than 1 month.
|
6. Grafana does not delete screenshots from cloud storage. We recommend configuring a retention policy with your cloud storage service to delete screenshots older than 1 month.
|
||||||
|
|
||||||
7. If Grafana is configured to upload screenshots to its internal web server, and accessing Grafana requires logging into a VPN or corporate network; image previews might not work in all instant messaging and communication platforms as some services rewrite URLs to use their CDN. If this happens we recommend using [integrations which support uploading images]({{<relref "#supported-contact-points">}}) or [disabling images in notifications]({{<relref "#configuration">}}) altogether.
|
7. If Grafana is configured to upload screenshots to its internal web server, and accessing Grafana requires logging into a VPN or corporate network; image previews might not work in all instant messaging and communication platforms as some services rewrite URLs to use their CDN. If this happens we recommend using [integrations which support uploading images]({{< relref "#supported-contact-points" >}}) or [disabling images in notifications]({{< relref "#configuration" >}}) altogether.
|
||||||
|
|
||||||
8. Grafana does not delete screenshots uploaded to its internal web server. To delete screenshots from `static_root_path/images/attachments` after a certain amount of time we recommend setting up a CRON job.
|
8. Grafana does not delete screenshots uploaded to its internal web server. To delete screenshots from `static_root_path/images/attachments` after a certain amount of time we recommend setting up a CRON job.
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
> **Note:** Grafana Cloud users can request this feature by [opening a support ticket in the Cloud Portal](/profile/org#support).
|
{{% admonition type="note" %}}
|
||||||
|
Grafana Cloud users can request this feature by [opening a support ticket in the Cloud Portal](/profile/org#support).
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
Having installed either the image rendering plugin, or set up Grafana to use a remote rendering service, set `capture` in `[unified_alerting.screenshots]` to `true`:
|
Having installed either the image rendering plugin, or set up Grafana to use a remote rendering service, set `capture` in `[unified_alerting.screenshots]` to `true`:
|
||||||
|
|
||||||
@@ -59,9 +63,9 @@ If screenshots should be uploaded to cloud storage then `upload_external_image_s
|
|||||||
# will be persisted to disk for up to temp_data_lifetime.
|
# will be persisted to disk for up to temp_data_lifetime.
|
||||||
upload_external_image_storage = false
|
upload_external_image_storage = false
|
||||||
|
|
||||||
Please see [`[external_image_storage]`]({{< relref "/docs/grafana/latest/setup-grafana/configure-grafana#external_image_storage" >}}) for instructions on how to configure cloud storage. Grafana will not start if `upload_external_image_storage` is `true` and `[external_image_storage]` contains missing or invalid configuration.
|
Please see [`[external_image_storage]`]({{< relref "../../setup-grafana/configure-grafana#external_image_storage" >}}) for instructions on how to configure cloud storage. Grafana will not start if `upload_external_image_storage` is `true` and `[external_image_storage]` contains missing or invalid configuration.
|
||||||
|
|
||||||
If Grafana is acting as its own cloud storage then `[upload_external_image_storage]` should be set to `true` and the `local` provider should be set in [`[external_image_storage]`]({{< relref "/docs/grafana/latest/setup-grafana/configure-grafana#external_image_storage" >}}).
|
If Grafana is acting as its own cloud storage then `[upload_external_image_storage]` should be set to `true` and the `local` provider should be set in [`[external_image_storage]`]({{< relref "../../setup-grafana/configure-grafana#external_image_storage" >}}).
|
||||||
|
|
||||||
Restart Grafana for the changes to take effect.
|
Restart Grafana for the changes to take effect.
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ keywords:
|
|||||||
- mute timings
|
- mute timings
|
||||||
- mute time interval
|
- mute time interval
|
||||||
title: Create mute timings
|
title: Create mute timings
|
||||||
weight: 700
|
weight: 420
|
||||||
---
|
---
|
||||||
|
|
||||||
# Create mute timings
|
# Create mute timings
|
||||||
@@ -20,7 +20,7 @@ A mute timing is a recurring interval of time when no new notifications for a po
|
|||||||
|
|
||||||
Similar to silences, mute timings do not prevent alert rules from being evaluated, nor do they stop alert instances from being shown in the user interface. They only prevent notifications from being created.
|
Similar to silences, mute timings do not prevent alert rules from being evaluated, nor do they stop alert instances from being shown in the user interface. They only prevent notifications from being created.
|
||||||
|
|
||||||
You can configure Grafana managed mute timings as well as mute timings for an [external Alertmanager data source]({{< relref "/docs/grafana/latest/datasources/alertmanager" >}}). For more information, refer to [Alertmanager documentation]({{< relref "/docs/grafana/latest/alerting/manage-notifications/alertmanager" >}}).
|
You can configure Grafana managed mute timings as well as mute timings for an [external Alertmanager data source]({{< relref "../../datasources/alertmanager" >}}). For more information, refer to [Alertmanager documentation]({{< relref "../fundamentals/alertmanager" >}}).
|
||||||
|
|
||||||
## Mute timings vs silences
|
## Mute timings vs silences
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
---
|
---
|
||||||
aliases:
|
|
||||||
keywords:
|
keywords:
|
||||||
- grafana
|
- grafana
|
||||||
- alerting
|
- alerting
|
||||||
- notifications
|
- notifications
|
||||||
- templates
|
- templates
|
||||||
|
description: How to customize your notifications using templating
|
||||||
title: Customize notifications
|
title: Customize notifications
|
||||||
weight: 400
|
weight: 400
|
||||||
---
|
---
|
||||||
@@ -33,8 +33,6 @@ You cannot use notification templates to:
|
|||||||
|
|
||||||
Learn how to write the content of your notification templates in Go’s templating language.
|
Learn how to write the content of your notification templates in Go’s templating language.
|
||||||
|
|
||||||
[Create notification templates]({{< relref "./create-notification-templates" >}})
|
|
||||||
|
|
||||||
Create reusable notification templates for your contact points.
|
Create reusable notification templates for your contact points.
|
||||||
|
|
||||||
[Use notification templates]({{< relref "./use-notification-templates" >}})
|
[Use notification templates]({{< relref "./use-notification-templates" >}})
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
---
|
---
|
||||||
aliases:
|
|
||||||
keywords:
|
keywords:
|
||||||
- grafana
|
- grafana
|
||||||
- alerting
|
- alerting
|
||||||
@@ -8,6 +7,7 @@ keywords:
|
|||||||
- create templates
|
- create templates
|
||||||
- edit templates
|
- edit templates
|
||||||
- delete templates
|
- delete templates
|
||||||
|
description: How to create notification templates
|
||||||
title: Create notification templates
|
title: Create notification templates
|
||||||
weight: 200
|
weight: 200
|
||||||
---
|
---
|
||||||
@@ -30,14 +30,10 @@ To create a template, complete the following steps.
|
|||||||
|
|
||||||
3. Write the content of the template in the content field.
|
3. Write the content of the template in the content field.
|
||||||
|
|
||||||
{{< figure max-width="940px" src="/static/img/docs/alerting/unified/new-notification-template-email-subject-9-4.png" caption="New notification template email.subject" >}}
|
4. Click **Save**.
|
||||||
|
|
||||||
4. Click Save.
|
|
||||||
|
|
||||||
`{{ define "email.subject" }}` and `{{ end }}` is automatically added to the start and end of the content:
|
`{{ define "email.subject" }}` and `{{ end }}` is automatically added to the start and end of the content:
|
||||||
|
|
||||||
{{< figure max-width="940px" src="/static/img/docs/alerting/unified/edit-notification-template-email-subject-9-4.png" caption="Edit notification template email.subject" >}}
|
|
||||||
|
|
||||||
To create a notification template that contains more than one template:
|
To create a notification template that contains more than one template:
|
||||||
|
|
||||||
1. Click **Add Template**.
|
1. Click **Add Template**.
|
||||||
@@ -46,9 +42,43 @@ To create a notification template that contains more than one template:
|
|||||||
|
|
||||||
3. Write each template in the Content field, including `{{ define "name-of-template" }}` and `{{ end }}` at the start and end of each template.
|
3. Write each template in the Content field, including `{{ define "name-of-template" }}` and `{{ end }}` at the start and end of each template.
|
||||||
|
|
||||||
{{< figure max-width="940px" src="/static/img/docs/alerting/unified/new-notification-template-email-9-4.png" caption="New notification template" >}}
|
4. Click **Save**.
|
||||||
|
|
||||||
4. Click Save.
|
## Preview notification templates
|
||||||
|
|
||||||
|
Preview how your notification templates will look before using them in your contact points, helping you understand the result of the template you are creating as well as enabling you to fix any errors before saving it.
|
||||||
|
|
||||||
|
**Note:** This feature is only for Grafana Alertmanager.
|
||||||
|
|
||||||
|
To preview your notification templates:
|
||||||
|
|
||||||
|
1. Navigate to **Alerts&IRM** -> **Alerting** -> **Contact points**.
|
||||||
|
1. Click **+Add template** or edit an existing template.
|
||||||
|
1. Add or update your template content.
|
||||||
|
|
||||||
|
Default data is provided and you can add or edit alert data to it as well as alert instances. You can add alert data directly in the Payload data window itself or click **Choose alert instances** or **Add alert data**.
|
||||||
|
|
||||||
|
1. [Optional] To add alert data from existing alert instances:
|
||||||
|
|
||||||
|
a. Click **Choose alert instances**.
|
||||||
|
|
||||||
|
b. Hover over the alert instances to view more information on each alert instance.
|
||||||
|
|
||||||
|
c. Click **Confirm** to add the alert instance(s) to the payload.
|
||||||
|
|
||||||
|
1. [Optional] To add alert data using the Alert data editor, click **Add alert data:**
|
||||||
|
|
||||||
|
a. Add annotations, custom labels and/or set a dashboard or a panel.
|
||||||
|
|
||||||
|
b. Toggle Firing/resolved depending on whether you want to add firing or resolved alerts to your notification.
|
||||||
|
|
||||||
|
c. Click **Add alert data to payload**.
|
||||||
|
|
||||||
|
d. Click **Refresh preview** to see what your template content will look like and the corresponding payload data.
|
||||||
|
|
||||||
|
If there are any errors in your template, they are displayed in the Preview and you can correct them before saving.
|
||||||
|
|
||||||
|
1. Click **Save.**
|
||||||
|
|
||||||
## Template the subject of an email
|
## Template the subject of an email
|
||||||
|
|
||||||
@@ -149,7 +179,13 @@ Template the title of a Slack message to contain the number of firing and resolv
|
|||||||
|
|
||||||
## Template the content of a Slack message
|
## Template the content of a Slack message
|
||||||
|
|
||||||
Template the content of a Slack message to contain a description of all firing and resolved alerts, including their labels, annotations, Silence URL and Dashboard URL:
|
Template the content of a Slack message to contain a description of all firing and resolved alerts, including their labels, annotations, Silence URL and Dashboard URL.
|
||||||
|
|
||||||
|
**Note:**
|
||||||
|
|
||||||
|
This template is for Grafana-managed alerts only.
|
||||||
|
To use the template for Grafana Mimir/Loki-managed alerts, delete the references to DashboardURL and SilenceURL.
|
||||||
|
For more information, see the [Prometheus documentation on notifications](https://prometheus.io/docs/alerting/latest/notifications/).
|
||||||
|
|
||||||
```
|
```
|
||||||
1 firing alert(s):
|
1 firing alert(s):
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
---
|
---
|
||||||
aliases:
|
|
||||||
keywords:
|
keywords:
|
||||||
- grafana
|
- grafana
|
||||||
- alerting
|
- alerting
|
||||||
- notifications
|
- notifications
|
||||||
- templates
|
- templates
|
||||||
|
description: Reference for templating notifications
|
||||||
title: Reference
|
title: Reference
|
||||||
weight: 400
|
weight: 400
|
||||||
---
|
---
|
||||||
@@ -41,7 +41,7 @@ weight: 400
|
|||||||
| Resolved alerts | `[]Alert` | List of all resolved alerts in this notification | `There are {{ len .Alerts.Resolved }} resolved alerts` |
|
| Resolved alerts | `[]Alert` | List of all resolved alerts in this notification | `There are {{ len .Alerts.Resolved }} resolved alerts` |
|
||||||
| GroupLabels | `KV` | The labels that group these alerts in this | `{{ .GroupLabels }}` |
|
| GroupLabels | `KV` | The labels that group these alerts in this | `{{ .GroupLabels }}` |
|
||||||
| CommonLabels | `KV` | The labels common to all alerts in this notification | `{{ .CommonLabels }}` |
|
| CommonLabels | `KV` | The labels common to all alerts in this notification | `{{ .CommonLabels }}` |
|
||||||
| CommonAnnotations | `KV` | The annotations common to all alerts i this notification | `{{ .CommonAnnotations }}` |
|
| CommonAnnotations | `KV` | The annotations common to all alerts in this notification | `{{ .CommonAnnotations }}` |
|
||||||
| ExternalURL | `string` | A link to Grafana, or the Alertmanager that sent this notification if using an external Alertmanager | `{{ .ExternalURL }}` |
|
| ExternalURL | `string` | A link to Grafana, or the Alertmanager that sent this notification if using an external Alertmanager | `{{ .ExternalURL }}` |
|
||||||
|
|
||||||
### KV
|
### KV
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
---
|
---
|
||||||
aliases:
|
|
||||||
keywords:
|
keywords:
|
||||||
- grafana
|
- grafana
|
||||||
- alerting
|
- alerting
|
||||||
- notifications
|
- notifications
|
||||||
- templates
|
- templates
|
||||||
- use templates
|
- use templates
|
||||||
|
description: Use notification templates in contact points
|
||||||
title: Use notification templates
|
title: Use notification templates
|
||||||
weight: 300
|
weight: 300
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
---
|
---
|
||||||
aliases:
|
|
||||||
keywords:
|
keywords:
|
||||||
- grafana
|
- grafana
|
||||||
- alerting
|
- alerting
|
||||||
- notifications
|
- notifications
|
||||||
- templates
|
- templates
|
||||||
- write templates
|
- write templates
|
||||||
|
description: Use Go's templating language in notifications
|
||||||
title: Using Go's templating language
|
title: Using Go's templating language
|
||||||
weight: 100
|
weight: 100
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ When managing large volumes of alerts, you can use extended alert rule search ca
|
|||||||
To view alerting details:
|
To view alerting details:
|
||||||
|
|
||||||
1. In the Grafana menu, click the **Alerting** (bell) icon to open the Alerting page. By default, the List view displays.
|
1. In the Grafana menu, click the **Alerting** (bell) icon to open the Alerting page. By default, the List view displays.
|
||||||
1. In **View as**, toggle between Grouped or State views by clicking the relevant option. See [Group view](#group-view) and [State view](#state-view) for more information.
|
1. In **View as**, toggle between Grouped or State views by clicking the relevant option. See [Grouped view](#grouped-view) and [State view](#state-view) for more information.
|
||||||
1. Expand the rule row to view the rule labels, annotations, data sources the rule queries, and a list of alert instances resulting from this rule.
|
1. Expand the rule row to view the rule labels, annotations, data sources the rule queries, and a list of alert instances resulting from this rule.
|
||||||
|
|
||||||
{{< figure src="/static/img/docs/alerting/unified/rule-details-8-0.png" max-width="650px" caption="Alerting rule details" >}}
|
{{< figure src="/static/img/docs/alerting/unified/rule-details-8-0.png" max-width="650px" caption="Alerting rule details" >}}
|
||||||
@@ -5,6 +5,7 @@ keywords:
|
|||||||
- notification
|
- notification
|
||||||
- errors
|
- errors
|
||||||
- contact points
|
- contact points
|
||||||
|
description: View notification errors to find out why they weren't sent or received
|
||||||
title: View notification errors
|
title: View notification errors
|
||||||
weight: 900
|
weight: 900
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -36,7 +36,9 @@ An alert rule can be in either of the following states:
|
|||||||
| **Pending** | At least one time series returned by the evaluation engine is `Pending`. |
|
| **Pending** | At least one time series returned by the evaluation engine is `Pending`. |
|
||||||
| **Firing** | At least one time series returned by the evaluation engine is `Firing`. |
|
| **Firing** | At least one time series returned by the evaluation engine is `Firing`. |
|
||||||
|
|
||||||
> **Note:** Alerts will transition first to `pending` and then `firing`, thus it will take at least two evaluation cycles before an alert is fired.
|
{{% admonition type="note" %}}
|
||||||
|
Alerts will transition first to `pending` and then `firing`, thus it will take at least two evaluation cycles before an alert is fired.
|
||||||
|
{{% /admonition %}}
|
||||||
|
|
||||||
## Alert instance state
|
## Alert instance state
|
||||||
|
|
||||||
@@ -70,3 +72,56 @@ When evaluation of an alerting rule produces state `NoData` or `Error`, Grafana
|
|||||||
| **datasource_uid** | The UID of the data source that caused the state. |
|
| **datasource_uid** | The UID of the data source that caused the state. |
|
||||||
|
|
||||||
You can handle these alerts the same way as regular alerts by adding a silence, route to a contact point, and so on.
|
You can handle these alerts the same way as regular alerts by adding a silence, route to a contact point, and so on.
|
||||||
|
|
||||||
|
## State history view
|
||||||
|
|
||||||
|
Use the State history view to get insight into how your alert instances behave over time. View information on when a state change occurred, what the previous state was, the current state, any other alert instances that changed their state at the same time as well as what the query value was that triggered the change.
|
||||||
|
|
||||||
|
### Configure the state history view
|
||||||
|
|
||||||
|
**Note:** This applies to Open Source only. There is no configuration required if you are using Grafana Cloud.
|
||||||
|
|
||||||
|
To enable the state history view, complete the following steps.
|
||||||
|
|
||||||
|
1. Ensure you have a Loki instance running to save your history to.
|
||||||
|
1. Configure the following settings in your Grafana configuration:
|
||||||
|
|
||||||
|
a. Enable the Loki backend and Loki remote URL.
|
||||||
|
|
||||||
|
b. Enable the three feature toggles for alert state history.
|
||||||
|
|
||||||
|
**Example:**
|
||||||
|
|
||||||
|
```
|
||||||
|
[unified_alerting.state_history]
|
||||||
|
enabled = true
|
||||||
|
backend = loki
|
||||||
|
loki_remote_url = http://localhost:3100
|
||||||
|
|
||||||
|
[feature_toggles]
|
||||||
|
enable = alertStateHistoryLokiSecondary, alertStateHistoryLokiPrimary, alertStateHistoryLokiOnly
|
||||||
|
```
|
||||||
|
|
||||||
|
### View state history
|
||||||
|
|
||||||
|
To use the State history view, complete the following steps.
|
||||||
|
|
||||||
|
1. Navigate to **Alerts&IRM** -> **Alerting** -> **Alert rules**.
|
||||||
|
1. Click an alert rule.
|
||||||
|
1. Select **Show state history**.
|
||||||
|
|
||||||
|
The State history view opens.
|
||||||
|
|
||||||
|
The timeline view at the top displays a timeline of changes for the past hour, so you can track how your alert instances are behaving over time.
|
||||||
|
|
||||||
|
The bottom part shows the alert instances, their previous and current state, the value of each part of the expression and a unique set of labels.
|
||||||
|
|
||||||
|
Common labels are displayed at the top to make it easier to identify different alert instances.
|
||||||
|
|
||||||
|
1. From the timeline view, hover over a time to get an automatic display of all the changes that happened at that particular moment.
|
||||||
|
|
||||||
|
These changes are displayed in real time in the timestamp view at the bottom of the page. The timestamp view is a list of all the alert instances that changed state at that point in time. The visualization only displays 12 instances by default.
|
||||||
|
|
||||||
|
The value shown for each instance is for each part of the expression that was evaluated.
|
||||||
|
|
||||||
|
1. Click the labels to filter and narrow down the results.
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
---
|
|
||||||
aliases:
|
|
||||||
- difference-old-new/
|
|
||||||
- unified-alerting/
|
|
||||||
- unified-alerting/difference-old-new/
|
|
||||||
description: Upgrade Grafana alerts
|
|
||||||
title: Upgrade Alerting
|
|
||||||
weight: 110
|
|
||||||
---
|
|
||||||
|
|
||||||
# Upgrade Alerting
|
|
||||||
|
|
||||||
Grafana Alerting is enabled by default for new installations or existing installations whether or not legacy alerting is configured.
|
|
||||||
|
|
||||||
> **Note**: When upgrading, your dashboard alerts are migrated to a new format. This migration can be rolled back easily by [opting out]({{< relref "opt-out/" >}}). If you have any questions regarding this migration, please contact us.
|
|
||||||
|
|
||||||
Existing installations that do not use legacy alerting will have Grafana Alerting enabled by default unless alerting is disabled in the configuration.
|
|
||||||
|
|
||||||
Likewise, existing installations that use legacy alerting will be automatically upgraded to Grafana Alerting unless you have [opted out]({{< relref "opt-out/" >}}) of Grafana Alerting before migration takes place. During the upgrade, legacy alerts are migrated to the new alerts type and no alerts or alerting data are lost.
|
|
||||||
|
|
||||||
Once the upgrade has taken place, you still have the option to [roll back]({{< relref "roll-back/" >}}) to legacy alerting. However, we do not recommend choosing this option. If you do choose to roll back, Grafana will restore your alerts to the alerts you had at the point in time when the upgrade took place. All new alerts and changes made exclusively in Grafana Alerting will be deleted.
|
|
||||||
|
|
||||||
> **Note**: Cloud customers, who do not want to upgrade to Grafana Alerting, should contact customer support.
|
|
||||||
|
|
||||||
If you have opted out or rolled back, you can always choose to [opt in]({{< relref "opt-in/" >}}) to Grafana Alerting at a later point in time.
|
|
||||||
|
|
||||||
The following table provides details on the upgrade for Cloud, Enterprise, and OSS installations and the new Grafana Alerting UI.
|
|
||||||
|
|
||||||
| Grafana instance upgraded to 9.0 | |
|
|
||||||
| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
||||||
| Cloud | Existing Cloud installations with legacy dashboard alerting will have two alerting icons in the left navigation panel - the old alerting plugin icon and the new Grafana Alerting icon. During upgrade, existing alerts from the Cloud alerting plugin are migrated to Grafana Alerting. Once migration is complete, you can access and manage the older alerts from the new alerting Grafana Alerting icon in the navigation panel. The (older) Cloud alerting plugin is uninstalled from your cloud instance. Contact customer support if you **do not wish** to migrate to Grafana Alerting for your Cloud stack. If you choose to use legacy alerting, use the You will see the new Grafana Alerting icon as well as the old Cloud alerting plugin in the left navigation panel. |
|
|
||||||
| Enterprise | Existing Enterprise instances using legacy alerting will have both the old (marked as legacy) and the new alerting icons in the navigation panel. During upgrade, existing legacy alerts are migrated to Grafana Alerting. If you wish, you can [opt-out]({{< relref "opt-out/" >}}) of Grafana Alerting and roll back to legacy alerting. In that case, you can manage your legacy alerts from the alerting icon marked as legacy. |
|
|
||||||
| OSS | Existing OSS installations with legacy dashboard alerting will have two alerting icons in the left navigation panel - the old alerting icon (marked as legacy) and the new Grafana Alerting icon. During upgrade, existing legacy alerts are migrated to Grafana Alerting. If you wish, you can [opt-out]({{< relref "opt-out/" >}}) of Grafana Alerting and roll back to legacy alerting. In that case, you can manage your legacy alerts from the alerting icon marked as legacy. |
|
|
||||||
|
|
||||||
> **Note:** Legacy alerting will be deprecated in a future release (v10).
|
|
||||||
@@ -1,22 +0,0 @@
|
|||||||
---
|
|
||||||
aliases:
|
|
||||||
- ../disable-alerting/
|
|
||||||
- ../unified-alerting/disable-alerting/
|
|
||||||
description: Disable alerting in Grafana
|
|
||||||
title: Disable alerting in Grafana
|
|
||||||
weight: 105
|
|
||||||
---
|
|
||||||
|
|
||||||
# Disable alerting in Grafana
|
|
||||||
|
|
||||||
To disable alerting in Grafana entirely (including both legacy and Grafana Alerting), enter the following in your configuration:
|
|
||||||
|
|
||||||
```
|
|
||||||
[alerting]
|
|
||||||
enabled = false
|
|
||||||
|
|
||||||
[unified_alerting]
|
|
||||||
enabled = false
|
|
||||||
```
|
|
||||||
|
|
||||||
If at any time you want to turn alerting back on, you can opt in.
|
|
||||||
@@ -1,37 +0,0 @@
|
|||||||
---
|
|
||||||
aliases:
|
|
||||||
- ../migrating-legacy-alerts/
|
|
||||||
- ../unified-alerting/opt-in/
|
|
||||||
- differences-and-limitations/
|
|
||||||
description: Migrate legacy dashboard alerts
|
|
||||||
title: Differences and limitations
|
|
||||||
weight: 106
|
|
||||||
---
|
|
||||||
|
|
||||||
# Differences and limitations
|
|
||||||
|
|
||||||
There are some differences between Grafana Alerting and legacy dashboard alerts, and a number of features that are no
|
|
||||||
longer supported. We refer to these as [Differences]({{< relref "#differences" >}}) and [Limitations]({{< relref "#limitations" >}}).
|
|
||||||
|
|
||||||
## Differences
|
|
||||||
|
|
||||||
1. When Grafana Alerting is enabled or upgraded to Grafana 9.0 or later, existing legacy dashboard alerts migrate in a format compatible with the Grafana Alerting. In the Alerting page of your Grafana instance, you can view the migrated alerts alongside any new alerts.
|
|
||||||
This topic explains how legacy dashboard alerts are migrated and some limitations of the migration.
|
|
||||||
|
|
||||||
2. Read and write access to legacy dashboard alerts and Grafana alerts are governed by the permissions of the folders storing them. During migration, legacy dashboard alert permissions are matched to the new rules permissions as follows:
|
|
||||||
|
|
||||||
- If alert's dashboard has permissions, it will create a folder named like `Migrated {"dashboardUid": "UID", "panelId": 1, "alertId": 1}` to match permissions of the dashboard (including the inherited permissions from the folder).
|
|
||||||
- If there are no dashboard permissions and the dashboard is under a folder, then the rule is linked to this folder and inherits its permissions.
|
|
||||||
- If there are no dashboard permissions and the dashboard is under the General folder, then the rule is linked to the `General Alerting` folder, and the rule inherits the default permissions.
|
|
||||||
|
|
||||||
3. Since there is no `Keep Last State` option for [`No Data`]({{< relref "../alerting-rules/create-grafana-managed-rule/#no-data--error-handling" >}}) in Grafana Alerting, this option becomes `NoData` during the legacy rules migration. Option "Keep Last State" for [`Error handling`]({{< relref "../alerting-rules/create-grafana-managed-rule/#no-data--error-handling" >}}) is migrated to a new option `Error`. To match the behavior of the `Keep Last State`, in both cases, during the migration Grafana automatically creates a silence for each alert rule with a duration of 1 year.
|
|
||||||
|
|
||||||
4. Notification channels are migrated to an Alertmanager configuration with the appropriate routes and receivers. Default notification channels are added as contact points to the default route. Notification channels not associated with any Dashboard alert go to the `autogen-unlinked-channel-recv` route.
|
|
||||||
|
|
||||||
5. Unlike legacy dashboard alerts where images in notifications are enabled per contact point, images in notifications for Grafana Alerting must be enabled in the Grafana configuration, either in the configuration file or environment variables, and are enabled for either all or no contact points. Refer to [images in notifications](https://grafana.com/docs/grafana/latest/alerting/manage-notifications/images-in-notifications/).
|
|
||||||
6. Grafana Alerting does not support pausing the evaluation of alert rules. After migration, all paused alert rules will become active, which may cause unexpected notifications to be sent.
|
|
||||||
|
|
||||||
## Limitations
|
|
||||||
|
|
||||||
1. Since `Hipchat` and `Sensu` notification channels are no longer supported, legacy alerts associated with these channels are not automatically migrated to Grafana Alerting. Assign the legacy alerts to a supported notification channel so that you continue to receive notifications for those alerts.
|
|
||||||
Silences (expiring after one year) are created for all paused dashboard alerts.
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
---
|
|
||||||
aliases:
|
|
||||||
- ../opt-in/
|
|
||||||
- ../unified-alerting/opt-in/
|
|
||||||
description: Opt in to Grafana Alerting
|
|
||||||
title: Opt in to Grafana Alerting
|
|
||||||
weight: 104
|
|
||||||
---
|
|
||||||
|
|
||||||
# Opt in to Grafana Alerting
|
|
||||||
|
|
||||||
If you have previously disabled alerting in Grafana, or opted out of Grafana Alerting and have decided that you would now like to use Grafana Alerting, you can choose to opt in at any time.
|
|
||||||
|
|
||||||
If you have been using legacy alerting up until now your existing alerts will be migrated to the new alerts type and no alerts or alerting data are lost. Even if you choose to opt in to Grafana Alerting, you can roll back to legacy alerting at any time.
|
|
||||||
|
|
||||||
To opt in to Grafana Alerting, enter the following in your configuration:
|
|
||||||
|
|
||||||
```
|
|
||||||
[alerting]
|
|
||||||
enabled = false
|
|
||||||
|
|
||||||
[unified_alerting]
|
|
||||||
enabled = true
|
|
||||||
```
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user