Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add grafana gitea-mixin #17758

Merged
merged 24 commits into from
Dec 20, 2021
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
7a32f37
add gitea mixin
v-zhuravlev Nov 8, 2021
9d7f1b6
remove alerts/rules
v-zhuravlev Nov 22, 2021
8d78b7a
gitea-mixin: add interval factor of 1/2 to remove duplicated change e…
v-zhuravlev Nov 24, 2021
1246988
gitea-mixin: fix changes panel, add aggregation interval for changes …
v-zhuravlev Dec 13, 2021
6f6622a
gitea-mixin: add totals singlestat
v-zhuravlev Dec 13, 2021
f4a07bd
gitea mixin: switch change graph to timeseries type
v-zhuravlev Dec 13, 2021
e70fd58
add color overrides for issue labels
v-zhuravlev Dec 13, 2021
7ccd873
bump grafonnet version
v-zhuravlev Dec 13, 2021
55023bd
gitea-mixin: convert graphs to timeseries
v-zhuravlev Dec 13, 2021
1dcc141
gitea-mixin: make fmt
v-zhuravlev Dec 14, 2021
dc51d8f
gitea-mixin: add .PHONE in Makefile
v-zhuravlev Dec 14, 2021
7739dcb
gitea-mixin: add time configration
v-zhuravlev Dec 14, 2021
15c17ac
gitea-mixin: make fmt and collapse addPanel grid
v-zhuravlev Dec 14, 2021
c8b305f
gitea-mixin: add static ids for shared panels
v-zhuravlev Dec 15, 2021
74c4a8d
gitea-mixin: add flags showIssuesByRepository, showIssuesByLabel to s…
v-zhuravlev Dec 15, 2021
3b32e19
gitea-mixin: update aggregation interval
v-zhuravlev Dec 15, 2021
e549661
gitea-mixin: update defaults
v-zhuravlev Dec 15, 2021
493b4d6
gitea-mixin: update panel names
v-zhuravlev Dec 15, 2021
8d44068
rename dir to gitea-monitoring-mixin
v-zhuravlev Dec 15, 2021
b7b822c
gitea-mixin: add gitea_issues_open, gitea_issues_closed metrics
v-zhuravlev Dec 15, 2021
2a14eba
gitea-mixin: update visible name for datasource
v-zhuravlev Dec 15, 2021
a75b139
gitea-mixin: update README
v-zhuravlev Dec 15, 2021
e628e20
Merge branch 'main' into main
lunny Dec 16, 2021
102de09
Merge branch 'main' into main
zeripath Dec 20, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions contrib/gitea-mixin/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
dashboards_out
vendor
25 changes: 25 additions & 0 deletions contrib/gitea-mixin/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
JSONNET_FMT := jsonnetfmt -n 2 --max-blank-lines 1 --string-style s --comment-style s

default: vendor build dashboards_out

all: fmt build

vendor:
jb install

fmt:
find . -name 'vendor' -prune -o -name '*.libsonnet' -print -o -name '*.jsonnet' -print | \
xargs -n 1 -- $(JSONNET_FMT) -i

lint: build
find . -name 'vendor' -prune -o -name '*.libsonnet' -print -o -name '*.jsonnet' -print | \
while read f; do \
$(JSONNET_FMT) "$$f" | diff -u "$$f" -; \
done
mixtool lint mixin.libsonnet

dashboards_out: mixin.libsonnet config.libsonnet $(wildcard dashboards/*)
@mkdir -p dashboards_out
jsonnet -J vendor -m dashboards_out lib/dashboards.jsonnet

build: vendor
Copy link
Member

@silverwind silverwind Nov 25, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This Makefile is missing declaration of .PHONY targets.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thanks, added .PHONY targets

33 changes: 33 additions & 0 deletions contrib/gitea-mixin/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Gitea Mixin

Gitea Mixin is a set of configurable Grafana dashboards based on the metrics exported by the Gitea built-in metrics endpoint.

## Generate config files

You can manually generate dashboards, but first you should install some tools:

```bash
go get github.com/jsonnet-bundler/jsonnet-bundler/cmd/jb
go get github.com/google/go-jsonnet/cmd/jsonnet
# or in brew: brew install go-jsonnet
```

For linting and formatting, you would also need `mixtool` and `jsonnetfmt` installed. If you
have a working Go development environment, it's easiest to run the following:

```bash
go get github.com/monitoring-mixins/mixtool/cmd/mixtool
go get github.com/google/go-jsonnet/cmd/jsonnetfmt
```

The files in `dashboards_out` need to be imported
into your Grafana server. The exact details will be depending on your environment.

Edit `config.libsonnet` if required and then build JSON dashboard files for Grafana:

```bash
make
```

For more advanced uses of mixins, see
https://github.com/monitoring-mixins/docs.
47 changes: 47 additions & 0 deletions contrib/gitea-mixin/config.libsonnet
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
{
_config+:: {
local c = self,
dashboardNamePrefix: 'Gitea',
dashboardTags: ['gitea'],

// add or remove metrics from dashboard
giteaStatMetrics: [
{
name: 'gitea_organizations',
description: 'Organizations',
},
{
name: 'gitea_teams',
description: 'Teams',
},
{
name: 'gitea_users',
description: 'Users',
},
{
name: 'gitea_repositories',
description: 'Repositories',
},
{
name: 'gitea_milestones',
description: 'Milestones',
},
{
name: 'gitea_stars',
description: 'Stars',
},
{
name: 'gitea_releases',
description: 'Releases',
},
{
name: 'gitea_issues',
description: 'Issues',
},
{
name: 'gitea_comments',
description: 'Comments',
},
],
},
}
1 change: 1 addition & 0 deletions contrib/gitea-mixin/dashboards/dashboards.libsonnet
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
(import 'overview.libsonnet')
228 changes: 228 additions & 0 deletions contrib/gitea-mixin/dashboards/overview.libsonnet
Original file line number Diff line number Diff line change
@@ -0,0 +1,228 @@
local grafana = import 'github.com/grafana/grafonnet-lib/grafonnet/grafana.libsonnet';
local prometheus = grafana.prometheus;

{

grafanaDashboards+:: {

local giteaSelector = 'job="$job", instance="$instance"',
local giteaStatsPanel = grafana.statPanel.new(
'Gitea stats',
Copy link
Member

@silverwind silverwind Nov 25, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Too much indentation? If libsonnet syntax does not require this, I would suggest follow 2-space indendation rule to make this much more readable.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agree, too much, it had been generated by jsonnetfmt so I made some adjustments to make suremake fmt stick 2-spcae indendation as much as possible.

datasource='$datasource',
reducerFunction='last',
graphMode='none',
colorMode='value',
)
.addTargets(
[
prometheus.target(expr='%s{%s}' % [metric.name, giteaSelector], legendFormat=metric.description, intervalFactor=10)
for metric in $._config.giteaStatMetrics
]
)
+ {
fieldConfig+: {
defaults+: {
color: {
fixedColor: 'blue',
mode: 'fixed',
},
},
},
},

local giteaUptimePanel = grafana.statPanel.new(
'Uptime',
datasource='$datasource',
reducerFunction='last',
graphMode='area',
colorMode='value',
)
.addTarget(prometheus.target(expr='time()-process_start_time_seconds{%s}' % giteaSelector, intervalFactor=1))
+ {
fieldConfig+: {
defaults+: {
color: {
fixedColor: 'blue',
mode: 'fixed',
},
unit: 's',
},
},
},

local giteaMemoryPanel = grafana.graphPanel.new(
'Memory(rss) usage',
datasource='$datasource',
format='decbytes',
lines=true,
fill=1,
legend_show=false
)
.addTarget(prometheus.target(expr='process_resident_memory_bytes{%s}' % giteaSelector, intervalFactor=2)),

local giteaCpuPanel = grafana.graphPanel.new(
'CPU usage',
datasource='$datasource',
format='percent',
lines=true,
fill=1,
legend_show=false
)
.addTarget(prometheus.target(expr='rate(process_cpu_seconds_total{%s}[$__rate_interval])*100' % giteaSelector, intervalFactor=2)),

local giteaFileDescriptorsPanel = grafana.graphPanel.new(
'File descriptors usage',
datasource='$datasource',
format='',
lines=true,
fill=1,
legend_show=false
)
.addTarget(prometheus.target(expr='process_open_fds{%s}' % giteaSelector, intervalFactor=2))
.addTarget(prometheus.target(expr='process_max_fds{%s}' % giteaSelector, intervalFactor=2))
.addSeriesOverride(
{
alias: '/process_max_fds.+/',
color: '#F2495C', // red
dashes: true,
fill: 0,
},
),

local giteaChangesPanel = grafana.graphPanel.new(
'Gitea changes',
datasource='$datasource',
lines=false,
points=true
)
.addTarget(prometheus.target(expr='changes(process_start_time_seconds{%s}[$__rate_interval]) > 0' % [giteaSelector], legendFormat='Restart', intervalFactor=1))
.addTargets(
[
prometheus.target(expr='changes(%s{%s}[$__rate_interval]) > 0' % [metric.name, giteaSelector], legendFormat=metric.description, intervalFactor=1)
for metric in $._config.giteaStatMetrics
]
),

'gitea-overview.json':
grafana.dashboard.new(
'%s Overview' % $._config.dashboardNamePrefix,
time_from='now-1h',
editable=false,
tags=($._config.dashboardTags),
timezone='utc',
refresh='1m',
graphTooltip='shared_crosshair',
uid='gitea-overview'
)
.addTemplate(
{
current: {
text: 'Prometheus',
value: 'Prometheus',
},
hide: 0,
label: null,
name: 'datasource',
options: [],
query: 'prometheus',
refresh: 1,
regex: '',
type: 'datasource',
},
)
.addTemplate(
{
hide: 0,
label: null,
name: 'job',
options: [],
query: 'label_values(gitea_organizations, job)',
refresh: 1,
regex: '',
type: 'query',
},
)
.addTemplate(
{
hide: 0,
label: null,
name: 'instance',
options: [],
query: 'label_values(gitea_organizations{job="$job"}, instance)',
refresh: 1,
regex: '',
type: 'query',
},
)
.addPanel(
grafana.row.new(title='General'), gridPos={
x: 0,
y: 0,
w: 0,
h: 0,
},
)
.addPanel(
giteaStatsPanel, gridPos={
x: 0,
y: 0,
w: 16,
h: 4,
}
)
.addPanel(
giteaUptimePanel, gridPos={
x: 16,
y: 0,
w: 8,
h: 4,
}
)
.addPanel(
giteaMemoryPanel, gridPos={
x: 0,
y: 4,
w: 8,
h: 6,
}
)
.addPanel(
giteaCpuPanel, gridPos={
x: 8,
y: 4,
w: 8,
h: 6,
}
)
.addPanel(
giteaFileDescriptorsPanel, gridPos={
x: 16,
y: 4,
w: 8,
h: 6,
}
)
.addPanel(
grafana.row.new(
title='Changes',
collapse=false
),
gridPos={
x: 0,
y: 10,
w: 24,
h: 8,
}
)
.addPanel(
giteaChangesPanel,
gridPos={
x: 0,
y: 10,
w: 24,
h: 8,
}
),

},
}
15 changes: 15 additions & 0 deletions contrib/gitea-mixin/jsonnetfile.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"version": 1,
"dependencies": [
{
"source": {
"git": {
"remote": "https://github.com/grafana/grafonnet-lib.git",
"subdir": "grafonnet"
}
},
"version": "master"
}
],
"legacyImports": false
}
16 changes: 16 additions & 0 deletions contrib/gitea-mixin/jsonnetfile.lock.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"version": 1,
"dependencies": [
{
"source": {
"git": {
"remote": "https://github.com/grafana/grafonnet-lib.git",
"subdir": "grafonnet"
}
},
"version": "55cf4ee53ced2b6d3ce96ecce9fb813b4465be98",
"sum": "4/sUV0Kk+o8I+wlYxL9R6EPhL/NiLfYHk+NXlU64RUk="
}
],
"legacyImports": false
}
1 change: 1 addition & 0 deletions contrib/gitea-mixin/lib/alerts.jsonnet
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
std.manifestYamlDoc((import '../mixin.libsonnet').prometheusAlerts)
6 changes: 6 additions & 0 deletions contrib/gitea-mixin/lib/dashboards.jsonnet
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
local dashboards = (import '../mixin.libsonnet').grafanaDashboards;

{
[name]: dashboards[name]
for name in std.objectFields(dashboards)
}
1 change: 1 addition & 0 deletions contrib/gitea-mixin/lib/rules.jsonnet
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
std.manifestYamlDoc((import '../mixin.libsonnet').prometheusRules)
2 changes: 2 additions & 0 deletions contrib/gitea-mixin/mixin.libsonnet
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
(import 'dashboards/dashboards.libsonnet') +
(import 'config.libsonnet')