Skip to content

Commit 308c5a8

Browse files
committed
Merge branch 'master' of github.com:grafana/jsonnet-libs into chore/redis-enterprise-modernization
2 parents f1ad374 + 1dab040 commit 308c5a8

29 files changed

+723
-393
lines changed

.github/workflows/build.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ jobs:
1919
cache-hit: ${{ steps.tools-cache.outputs.cache-hit }}
2020
steps:
2121
- name: Checkout
22-
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
22+
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
2323
with:
2424
fetch-depth: 0
2525
persist-credentials: false
@@ -45,7 +45,7 @@ jobs:
4545
runs-on: ubuntu-latest
4646
steps:
4747
- name: Checkout
48-
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
48+
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
4949
with:
5050
fetch-depth: 0
5151
persist-credentials: false
@@ -69,7 +69,7 @@ jobs:
6969
runs-on: ubuntu-latest
7070
steps:
7171
- name: Checkout
72-
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
72+
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
7373
with:
7474
fetch-depth: 0
7575
persist-credentials: false

.github/workflows/test-mixins.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ jobs:
1818
cache-hit: ${{ steps.tools-cache.outputs.cache-hit }}
1919
steps:
2020
- name: Checkout
21-
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
21+
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
2222
with:
2323
fetch-depth: 0
2424
persist-credentials: false
@@ -46,7 +46,7 @@ jobs:
4646
changed-mixins: ${{ steps.changed-mixins.outputs.all_changed_files }}
4747
steps:
4848
- name: Checkout
49-
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
49+
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
5050
with:
5151
fetch-depth: 0
5252
persist-credentials: false
@@ -82,7 +82,7 @@ jobs:
8282
fail-fast: false
8383
services:
8484
grafana:
85-
image: grafana/grafana:12.2.1@sha256:35c41e0fd0295f5d0ee5db7e780cf33506abfaf47686196f825364889dee878b
85+
image: grafana/grafana:12.3.0@sha256:70d9599b186ce287be0d2c5ba9a78acb2e86c1a68c9c41449454d0fc3eeb84e8
8686
ports:
8787
- 3000:3000
8888
env:
@@ -91,7 +91,7 @@ jobs:
9191
GF_AUTH_ANONYMOUS_ORG_ROLE: "Admin"
9292
steps:
9393
- name: Checkout
94-
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5
94+
uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd # v5
9595
with:
9696
fetch-depth: 0
9797
persist-credentials: false

Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,4 +87,5 @@ update-mixins:
8787

8888
tests:
8989
pushd . && cd ./common-lib && make vendor && make tests
90+
pushd . && cd ./grafana-builder/test && make tests
9091
pushd . && cd ./mixin-utils/test && make tests

csp-mixin/alerts/azure-alerts.yml

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,3 +199,50 @@ groups:
199199
summary: 'Azure VNet Peering Connection Issues.'
200200
description: 'The success rate of Virtual Network {{ $labels.resourceName }} peering connections has fallen below the defined threshold, indicating possible connectivity failures. Investigate potential misconfigurations, network latency, or service disruptions affecting peering communication.'
201201
dashboard_url: '/a/grafana-csp-app/azure/dashboards/vnet'
202+
203+
- name: azure.flexibleserverspostgresql
204+
rules:
205+
- alert: AzureFlexibleServerHighCpuUtilization
206+
expr: |
207+
azure_microsoft_dbforpostgresql_flexibleservers_cpu_percent_average_percent{resourceName!=""} > 90
208+
for: 5m
209+
keep_firing_for: 10m
210+
labels:
211+
severity: critical
212+
service: 'Azure PostgreSQL Flexible Servers'
213+
serviceId: 'microsoft.dbforpostgresql/flexibleservers'
214+
namespace: cloud-provider-azure
215+
annotations:
216+
summary: 'Flexible Server CPU utilization is too high.'
217+
description: 'The Flexible Server {{ $labels.resourceName }} is under heavy load and may become unresponsive.'
218+
dashboard_url: '/a/grafana-csp-app/azure/dashboards/postgresql-flexible-servers'
219+
220+
- alert: AzureFlexibleServerHighMemoryUsage
221+
expr: |
222+
azure_microsoft_dbforpostgresql_flexibleservers_memory_percent_average_percent{resourceName!=""} > 90
223+
for: 5m
224+
keep_firing_for: 10m
225+
labels:
226+
severity: critical
227+
service: 'Azure PostgreSQL Flexible Servers'
228+
serviceId: 'microsoft.dbforpostgresql/flexibleservers'
229+
namespace: cloud-provider-azure
230+
annotations:
231+
summary: 'Flexible Server Memory usage is too high.'
232+
description: 'The Flexible Server {{ $labels.resourceName }} is experiencing high memory usage, which may lead to performance degradation.'
233+
dashboard_url: '/a/grafana-csp-app/azure/dashboards/postgresql-flexible-servers'
234+
235+
- alert: AzureFlexibleServerHighStorageUsage
236+
expr: |
237+
azure_microsoft_dbforpostgresql_flexibleservers_storage_percent_maximum_percent{resourceName!=""} > 90
238+
for: 5m
239+
keep_firing_for: 10m
240+
labels:
241+
severity: critical
242+
service: 'Azure PostgreSQL Flexible Servers'
243+
serviceId: 'microsoft.dbforpostgresql/flexibleservers'
244+
namespace: cloud-provider-azure
245+
annotations:
246+
summary: 'Flexible Server Storage usage is too high.'
247+
description: 'The Flexible Server {{ $labels.resourceName }} is running low on storage space, which may impact database operations.'
248+
dashboard_url: '/a/grafana-csp-app/azure/dashboards/postgresql-flexible-servers'

csp-mixin/prometheus_rules_out/prometheus_alerts.yaml

Lines changed: 44 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

grafana-builder/grafana.libsonnet

Lines changed: 42 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -508,35 +508,7 @@ local utils = import 'mixin-utils/utils.libsonnet';
508508
native: template % { metricQuery: nativeClassicQuery.native, label: statusLabelName },
509509
classic: template % { metricQuery: nativeClassicQuery.classic, label: statusLabelName },
510510
},
511-
fieldConfig+: {
512-
defaults+: {
513-
custom+: {
514-
lineWidth: 0,
515-
fillOpacity: 100, // Get solid fill.
516-
stacking: {
517-
mode: 'normal',
518-
group: 'A',
519-
},
520-
},
521-
unit: 'reqps',
522-
min: 0,
523-
},
524-
overrides+: [{
525-
matcher: {
526-
id: 'byName',
527-
options: status,
528-
},
529-
properties: [
530-
{
531-
id: 'color',
532-
value: {
533-
mode: 'fixed',
534-
fixedColor: $.httpStatusColors[status],
535-
},
536-
},
537-
],
538-
} for status in std.objectFieldsAll($.httpStatusColors)],
539-
},
511+
aliasColors: $.httpStatusColors,
540512
targets: [
541513
{
542514
expr: utils.showClassicHistogramQuery(sumByStatus(utils.ncHistogramCountRate(metricName, selector))),
@@ -579,7 +551,8 @@ local utils = import 'mixin-utils/utils.libsonnet';
579551
},
580552

581553
// Assumes that there is a dashboard variable named latency_metrics, values are -1 (native) or 1 (classic)
582-
latencyPanelNativeHistogram(metricName, selector, multiplier='1e3'):: {
554+
// By default it shows the 99th and 50th quantile.
555+
latencyPanelNativeHistogram(metricName, selector, multiplier='1e3', quantile=[99, 50]):: {
583556
nullPointMode: 'null as zero',
584557
fieldConfig+: {
585558
defaults+: {
@@ -589,44 +562,45 @@ local utils = import 'mixin-utils/utils.libsonnet';
589562
unit: 'ms',
590563
},
591564
},
592-
targets: [
593-
{
594-
expr: utils.showNativeHistogramQuery(utils.ncHistogramQuantile('0.99', metricName, selector, multiplier=multiplier)),
595-
format: 'time_series',
596-
legendFormat: '99th percentile',
597-
refId: 'A',
598-
},
599-
{
600-
expr: utils.showClassicHistogramQuery(utils.ncHistogramQuantile('0.99', metricName, selector, multiplier=multiplier)),
601-
format: 'time_series',
602-
legendFormat: '99th percentile',
603-
refId: 'A_classic',
604-
},
605-
{
606-
expr: utils.showNativeHistogramQuery(utils.ncHistogramQuantile('0.50', metricName, selector, multiplier=multiplier)),
607-
format: 'time_series',
608-
legendFormat: '50th percentile',
609-
refId: 'B',
610-
},
611-
{
612-
expr: utils.showClassicHistogramQuery(utils.ncHistogramQuantile('0.50', metricName, selector, multiplier=multiplier)),
613-
format: 'time_series',
614-
legendFormat: '50th percentile',
615-
refId: 'B_classic',
616-
},
617-
{
618-
expr: utils.showNativeHistogramQuery(utils.ncHistogramAverageRate(metricName, selector, multiplier=multiplier)),
619-
format: 'time_series',
620-
legendFormat: 'Average',
621-
refId: 'C',
622-
},
623-
{
624-
expr: utils.showClassicHistogramQuery(utils.ncHistogramAverageRate(metricName, selector, multiplier=multiplier)),
625-
format: 'time_series',
626-
legendFormat: 'Average',
627-
refId: 'C_classic',
628-
},
629-
],
565+
targets:
566+
local getNextRefId(targets) = std.char(std.codepoint('A') + std.length(targets) / 2);
567+
local qTargets =
568+
std.foldl(
569+
function(acc, q)
570+
local qStr = std.toString(q);
571+
acc + [
572+
{
573+
expr: utils.showNativeHistogramQuery(utils.ncHistogramQuantile('0.' + qStr, metricName, selector, multiplier=multiplier)),
574+
format: 'time_series',
575+
legendFormat: qStr + 'th percentile',
576+
refId: getNextRefId(acc),
577+
},
578+
{
579+
expr: utils.showClassicHistogramQuery(utils.ncHistogramQuantile('0.' + qStr, metricName, selector, multiplier=multiplier)),
580+
format: 'time_series',
581+
legendFormat: qStr + 'th percentile',
582+
refId: getNextRefId(acc) + '_classic',
583+
},
584+
]
585+
,
586+
quantile,
587+
[]
588+
);
589+
qTargets +
590+
[
591+
{
592+
expr: utils.showNativeHistogramQuery(utils.ncHistogramAverageRate(metricName, selector, multiplier=multiplier)),
593+
format: 'time_series',
594+
legendFormat: 'Average',
595+
refId: getNextRefId(qTargets),
596+
},
597+
{
598+
expr: utils.showClassicHistogramQuery(utils.ncHistogramAverageRate(metricName, selector, multiplier=multiplier)),
599+
format: 'time_series',
600+
legendFormat: 'Average',
601+
refId: getNextRefId(qTargets) + '_classic',
602+
},
603+
],
630604
yaxes: $.yaxes('ms'),
631605
},
632606

grafana-builder/test/.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
vendor/
2+
jsonnetfile.lock.json

grafana-builder/test/Makefile

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
.PHONY: tests
2+
3+
vendor jsonnetfile.lock.json: jsonnetfile.json
4+
jb install
5+
6+
tests: jsonnetfile.lock.json vendor
7+
jsonnet -J vendor/ ./test_native-classic-histogram.libsonnet
8+
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
{
2+
"version": 1,
3+
"dependencies": [
4+
{
5+
"source": {
6+
"git": {
7+
"remote": "https://github.com/jsonnet-libs/testonnet.git"
8+
}
9+
},
10+
"version": "master"
11+
},
12+
{
13+
"source": {
14+
"local": {
15+
"directory": "../../mixin-utils"
16+
}
17+
}
18+
}
19+
],
20+
"legacyImports": true
21+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
local builder = import '../grafana.libsonnet';
2+
local test = import 'github.com/jsonnet-libs/testonnet/main.libsonnet';
3+
4+
test.new(std.thisFile)
5+
6+
+ test.case.new(
7+
name='LatencyPanel fieldConfig',
8+
test=test.expect.eq(
9+
actual=std.get(builder.latencyPanelNativeHistogram('request_duration_seconds', 'cluster="cluster1", job="job1"'), 'targets', []),
10+
expected=[
11+
{
12+
expr: '(histogram_quantile(0.99, sum (rate(request_duration_seconds{cluster="cluster1", job="job1"}[$__rate_interval]))) * 1e3) and on() (vector($latency_metrics) == -1)',
13+
format: 'time_series',
14+
legendFormat: '99th percentile',
15+
refId: 'A',
16+
},
17+
{
18+
expr: '(histogram_quantile(0.99, sum by (le) (rate(request_duration_seconds_bucket{cluster="cluster1", job="job1"}[$__rate_interval]))) * 1e3) and on() (vector($latency_metrics) == 1)',
19+
format: 'time_series',
20+
legendFormat: '99th percentile',
21+
refId: 'A_classic',
22+
},
23+
{
24+
expr: '(histogram_quantile(0.50, sum (rate(request_duration_seconds{cluster="cluster1", job="job1"}[$__rate_interval]))) * 1e3) and on() (vector($latency_metrics) == -1)',
25+
format: 'time_series',
26+
legendFormat: '50th percentile',
27+
refId: 'B',
28+
},
29+
{
30+
expr: '(histogram_quantile(0.50, sum by (le) (rate(request_duration_seconds_bucket{cluster="cluster1", job="job1"}[$__rate_interval]))) * 1e3) and on() (vector($latency_metrics) == 1)',
31+
format: 'time_series',
32+
legendFormat: '50th percentile',
33+
refId: 'B_classic',
34+
},
35+
{
36+
expr: '(1e3 * sum(histogram_sum(rate(request_duration_seconds{cluster="cluster1", job="job1"}[$__rate_interval]))) /\nsum(histogram_count(rate(request_duration_seconds{cluster="cluster1", job="job1"}[$__rate_interval])))\n) and on() (vector($latency_metrics) == -1)',
37+
format: 'time_series',
38+
legendFormat: 'Average',
39+
refId: 'C',
40+
},
41+
{
42+
expr: '(1e3 * sum(rate(request_duration_seconds_sum{cluster="cluster1", job="job1"}[$__rate_interval])) /\nsum(rate(request_duration_seconds_count{cluster="cluster1", job="job1"}[$__rate_interval]))\n) and on() (vector($latency_metrics) == 1)',
43+
format: 'time_series',
44+
legendFormat: 'Average',
45+
refId: 'C_classic',
46+
},
47+
],
48+
)
49+
)

0 commit comments

Comments
 (0)