aboutsummaryrefslogtreecommitdiff
path: root/data/grafana
diff options
context:
space:
mode:
authorSam Chudnick <sam@chudnick.com>2023-06-25 09:52:36 -0400
committerSam Chudnick <sam@chudnick.com>2023-06-25 09:52:36 -0400
commit95b73daa36b23565a8566f71f9b202d3459b685f (patch)
treecb17b021be70e7868d0ec235a761f0ecdc80f3f2 /data/grafana
Initial CommitHEADmaster
Diffstat (limited to 'data/grafana')
-rw-r--r--data/grafana/grafana.conf134
-rw-r--r--data/grafana/grafana.ini.j21268
-rw-r--r--data/grafana/main.json5176
3 files changed, 6578 insertions, 0 deletions
diff --git a/data/grafana/grafana.conf b/data/grafana/grafana.conf
new file mode 100644
index 0000000..9fcc1b0
--- /dev/null
+++ b/data/grafana/grafana.conf
@@ -0,0 +1,134 @@
1# this is required to proxy Grafana Live WebSocket connections.
2map $http_upgrade $connection_upgrade {
3 default upgrade;
4 '' close;
5}
6
7upstream grafana {
8 server localhost:3000;
9}
10
11server {
12 listen 443 ssl;
13 server_name monitoring.chudnick.com
14 root /usr/share/nginx/html;
15 index index.html index.htm;
16
17 ssl_certificate "/etc/nginx/tls/fullchain.pem";
18 ssl_certificate_key "/etc/nginx/tls/privkey.pem";
19
20 location /grafana {
21 proxy_set_header Host $http_host;
22 proxy_pass http://localhost:3000;
23 }
24
25 # Proxy Grafana Live WebSocket connections.
26 location /grafana/api/live/ {
27 proxy_http_version 1.1;
28 proxy_set_header Upgrade $http_upgrade;
29 proxy_set_header Connection $connection_upgrade;
30 proxy_set_header Host $http_host;
31 proxy_pass http://localhost:3000;
32 }
33
34 # Restrict access to metrics
35 location /grafana/metrics {
36 allow 127.0.0.1;
37 allow 192.168.20.32;
38 allow 192.168.10.254;
39 deny all;
40 proxy_set_header Host $http_host;
41 proxy_pass http://localhost:3000;
42 }
43
44
45 # Prometheus
46
47 set $upstream_authelia https://auth.chudnick.com/api/verify;
48 resolver 192.168.20.34;
49
50 ## Virtual endpoint created by nginx to forward auth requests.
51 location /authelia {
52 ## Essential Proxy Configuration
53 internal;
54 proxy_pass $upstream_authelia;
55
56 ## Headers
57 ## The headers starting with X-* are required.
58 proxy_set_header X-Original-URL $scheme://$http_host$request_uri;
59 proxy_set_header X-Original-Method $request_method;
60 proxy_set_header X-Forwarded-Method $request_method;
61 proxy_set_header X-Forwarded-Proto $scheme;
62 proxy_set_header X-Forwarded-Host $http_host;
63 proxy_set_header X-Forwarded-Uri $request_uri;
64 proxy_set_header X-Forwarded-For $remote_addr;
65 proxy_set_header Content-Length "";
66 proxy_set_header Connection "";
67
68 ## Basic Proxy Configuration
69 proxy_pass_request_body off;
70 proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
71 proxy_redirect http:// $scheme://;
72 proxy_http_version 1.1;
73 proxy_cache_bypass $cookie_session;
74 proxy_no_cache $cookie_session;
75 proxy_buffers 4 32k;
76 client_body_buffer_size 128k;
77
78 ## Advanced Proxy Configuration
79 send_timeout 5m;
80 proxy_read_timeout 240;
81 proxy_send_timeout 240;
82 proxy_connect_timeout 240;
83 }
84
85
86 location /prometheus {
87 # Authelia config
88 proxy_set_header Host $host;
89 proxy_set_header X-Original-URL $scheme://$http_host$request_uri;
90 proxy_set_header X-Forwarded-Proto $scheme;
91 proxy_set_header X-Forwarded-Host $http_host;
92 proxy_set_header X-Forwarded-Uri $request_uri;
93 proxy_set_header X-Forwarded-Ssl on;
94 proxy_set_header X-Forwarded-For $remote_addr;
95 proxy_set_header X-Real-IP $remote_addr;
96 proxy_set_header Connection "";
97 client_body_buffer_size 128k;
98 proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
99 proxy_redirect http:// $scheme://;
100 proxy_http_version 1.1;
101 proxy_cache_bypass $cookie_session;
102 proxy_no_cache $cookie_session;
103 proxy_buffers 64 256k;
104 real_ip_header X-Forwarded-For;
105 real_ip_recursive on;
106 send_timeout 5m;
107 proxy_read_timeout 360;
108 proxy_send_timeout 360;
109 proxy_connect_timeout 360;
110
111 # Authelia request
112 auth_request /authelia;
113 set $target_url $scheme://$http_host$request_uri;
114 auth_request_set $user $upstream_http_remote_user;
115 auth_request_set $groups $upstream_http_remote_groups;
116 auth_request_set $name $upstream_http_remote_name;
117 auth_request_set $email $upstream_http_remote_email;
118 proxy_set_header Remote-User $user;
119 proxy_set_header Remote-Groups $groups;
120 proxy_set_header Remote-Name $name;
121 proxy_set_header Remote-Email $email;
122 error_page 401 =302 https://auth.chudnick.com/?rd=$target_url;
123
124 proxy_pass http://127.0.0.1:9090/prometheus;
125 }
126
127}
128
129server {
130 listen 80;
131 return 301 https://$host$request_uri;
132 server_name monitoring.chudnick.com;
133 return 404;
134}
diff --git a/data/grafana/grafana.ini.j2 b/data/grafana/grafana.ini.j2
new file mode 100644
index 0000000..c24cc6a
--- /dev/null
+++ b/data/grafana/grafana.ini.j2
@@ -0,0 +1,1268 @@
1##################### Grafana Configuration Defaults #####################
2
3# possible values : production, development
4app_mode = production
5
6# instance name, defaults to HOSTNAME environment variable value or hostname if HOSTNAME var is empty
7instance_name = ${HOSTNAME}
8
9# force migration will run migrations that might cause dataloss
10force_migration = false
11
12#################################### Paths ###############################
13[paths]
14# Path to where grafana can store temp files, sessions, and the sqlite3 db (if that is used)
15data = /var/lib/grafana
16
17# Temporary files in `data` directory older than given duration will be removed
18temp_data_lifetime = 24h
19
20# Directory where grafana can store logs
21logs = /var/log/grafana
22
23# Directory where grafana will automatically scan and look for plugins
24plugins = /var/lib/grafana/plugins
25
26# folder that contains provisioning config files that grafana will apply on startup and while running.
27provisioning = /etc/grafana/provisioning
28
29#################################### Server ##############################
30[server]
31# Protocol (http, https, h2, socket)
32protocol = http
33
34# The ip address to bind to, empty will bind to all interfaces
35http_addr =
36
37# The http port to use
38http_port = 3000
39
40# The public facing domain name used to access grafana from a browser
41domain = monitoring.chudnick.com/grafana
42
43# Redirect to correct domain if host header does not match domain
44# Prevents DNS rebinding attacks
45enforce_domain = false
46
47# The full public facing url
48root_url = https://monitoring.chudnick.com/grafana
49
50# Serve Grafana from subpath specified in `root_url` setting. By default it is set to `false` for compatibility reasons.
51serve_from_sub_path = true
52
53# Log web requests
54router_logging = false
55
56# the path relative working path
57static_root_path = public
58
59# enable gzip
60enable_gzip = false
61
62# https certs & key file
63
64# Unix socket path
65socket = /tmp/grafana.sock
66
67# CDN Url
68cdn_url =
69
70# Sets the maximum time in minutes before timing out read of an incoming request and closing idle connections.
71# `0` means there is no timeout for reading the request.
72read_timeout = 0
73
74#################################### Database ############################
75[database]
76# You can configure the database connection by specifying type, host, name, user and password
77# as separate properties or as on string using the url property.
78
79# Either "mysql", "postgres" or "sqlite3", it's your choice
80type = sqlite3
81host = 127.0.0.1:3306
82name = grafana
83user = root
84# If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;"""
85password =
86# Use either URL or the previous fields to configure the database
87# Example: mysql://user:secret@host:port/database
88url =
89
90# Max idle conn setting default is 2
91max_idle_conn = 2
92
93# Max conn setting default is 0 (mean not set)
94max_open_conn =
95
96# Connection Max Lifetime default is 14400 (means 14400 seconds or 4 hours)
97conn_max_lifetime = 14400
98
99# Set to true to log the sql calls and execution times.
100log_queries =
101
102# For "postgres", use either "disable", "require" or "verify-full"
103# For "mysql", use either "true", "false", or "skip-verify".
104ssl_mode = disable
105
106# Database drivers may support different transaction isolation levels.
107# Currently, only "mysql" driver supports isolation levels.
108# If the value is empty - driver's default isolation level is applied.
109# For "mysql" use "READ-UNCOMMITTED", "READ-COMMITTED", "REPEATABLE-READ" or "SERIALIZABLE".
110isolation_level =
111
112ca_cert_path =
113client_key_path =
114client_cert_path =
115server_cert_name =
116
117# For "sqlite3" only, path relative to data_path setting
118path = grafana.db
119
120# For "sqlite3" only. cache mode setting used for connecting to the database
121cache_mode = private
122
123# For "mysql" only if migrationLocking feature toggle is set. How many seconds to wait before failing to lock the database for the migrations, default is 0.
124locking_attempt_timeout_sec = 0
125
126#################################### Cache server #############################
127[remote_cache]
128# Either "redis", "memcached" or "database" default is "database"
129type = database
130
131# cache connectionstring options
132# database: will use Grafana primary database.
133# redis: config like redis server e.g. `addr=127.0.0.1:6379,pool_size=100,db=0,ssl=false`. Only addr is required. ssl may be 'true', 'false', or 'insecure'.
134# memcache: 127.0.0.1:11211
135connstr =
136
137#################################### Data proxy ###########################
138[dataproxy]
139
140# This enables data proxy logging, default is false
141logging = false
142
143# How long the data proxy waits to read the headers of the response before timing out, default is 30 seconds.
144# This setting also applies to core backend HTTP data sources where query requests use an HTTP client with timeout set.
145timeout = 30
146
147# How long the data proxy waits to establish a TCP connection before timing out, default is 10 seconds.
148dialTimeout = 10
149
150# How many seconds the data proxy waits before sending a keepalive request.
151keep_alive_seconds = 30
152
153# How many seconds the data proxy waits for a successful TLS Handshake before timing out.
154tls_handshake_timeout_seconds = 10
155
156# How many seconds the data proxy will wait for a server's first response headers after
157# fully writing the request headers if the request has an "Expect: 100-continue"
158# header. A value of 0 will result in the body being sent immediately, without
159# waiting for the server to approve.
160expect_continue_timeout_seconds = 1
161
162# Optionally limits the total number of connections per host, including connections in the dialing,
163# active, and idle states. On limit violation, dials will block.
164# A value of zero (0) means no limit.
165max_conns_per_host = 0
166
167# The maximum number of idle connections that Grafana will keep alive.
168max_idle_connections = 100
169
170# How many seconds the data proxy keeps an idle connection open before timing out.
171idle_conn_timeout_seconds = 90
172
173# If enabled and user is not anonymous, data proxy will add X-Grafana-User header with username into the request.
174send_user_header = false
175
176# Limit the amount of bytes that will be read/accepted from responses of outgoing HTTP requests.
177response_limit = 0
178
179# Limits the number of rows that Grafana will process from SQL data sources.
180row_limit = 1000000
181
182#################################### Analytics ###########################
183[analytics]
184# Server reporting, sends usage counters to stats.grafana.org every 24 hours.
185# No ip addresses are being tracked, only simple counters to track
186# running instances, dashboard and error counts. It is very helpful to us.
187# Change this option to false to disable reporting.
188reporting_enabled = false
189
190# The name of the distributor of the Grafana instance. Ex hosted-grafana, grafana-labs
191reporting_distributor =
192
193# Set to false to disable all checks to https://grafana.com
194# for new versions of grafana. The check is used
195# in some UI views to notify that a grafana update exists.
196# This option does not cause any auto updates, nor send any information
197# only a GET request to https://raw.githubusercontent.com/grafana/grafana/main/latest.json to get the latest version.
198check_for_updates = false
199
200# Set to false to disable all checks to https://grafana.com
201# for new versions of plugins. The check is used
202# in some UI views to notify that a plugin update exists.
203# This option does not cause any auto updates, nor send any information
204# only a GET request to https://grafana.com to get the latest versions.
205check_for_plugin_updates = false
206
207# Google Analytics universal tracking code, only enabled if you specify an id here
208google_analytics_ua_id =
209
210# Google Tag Manager ID, only enabled if you specify an id here
211google_tag_manager_id =
212
213# Rudderstack write key, enabled only if rudderstack_data_plane_url is also set
214rudderstack_write_key =
215
216# Rudderstack data plane url, enabled only if rudderstack_write_key is also set
217rudderstack_data_plane_url =
218
219# Rudderstack SDK url, optional, only valid if rudderstack_write_key and rudderstack_data_plane_url is also set
220rudderstack_sdk_url =
221
222# Rudderstack Config url, optional, used by Rudderstack SDK to fetch source config
223rudderstack_config_url =
224
225# Application Insights connection string. Specify an URL string to enable this feature.
226application_insights_connection_string =
227
228# Optional. Specifies an Application Insights endpoint URL where the endpoint string is wrapped in backticks ``.
229application_insights_endpoint_url =
230
231# Controls if the UI contains any links to user feedback forms
232feedback_links_enabled = false
233
234#################################### Security ############################
235[security]
236# disable creation of admin user on first start of grafana
237disable_initial_admin_creation = true
238
239# used for signing
240secret_key = SW2YcwTIb9zpOOhoPsMm
241
242# current key provider used for envelope encryption, default to static value specified by secret_key
243encryption_provider = secretKey.v1
244
245# list of configured key providers, space separated (Enterprise only): e.g., awskms.v1 azurekv.v1
246available_encryption_providers =
247
248# disable gravatar profile images
249disable_gravatar = true
250
251# data source proxy whitelist (ip_or_domain:port separated by spaces)
252data_source_proxy_whitelist =
253
254# disable protection against brute force login attempts
255disable_brute_force_login_protection = true
256
257# set to true if you host Grafana behind HTTPS. default is false.
258cookie_secure = true
259
260# set cookie SameSite attribute. defaults to `lax`. can be set to "lax", "strict", "none" and "disabled"
261cookie_samesite = strict
262
263# set to true if you want to allow browsers to render Grafana in a <frame>, <iframe>, <embed> or <object>. default is false.
264allow_embedding = false
265
266# Set to true if you want to enable http strict transport security (HSTS) response header.
267# HSTS tells browsers that the site should only be accessed using HTTPS.
268strict_transport_security = false
269
270# Sets how long a browser should cache HSTS. Only applied if strict_transport_security is enabled.
271strict_transport_security_max_age_seconds = 86400
272
273# Set to true if to enable HSTS preloading option. Only applied if strict_transport_security is enabled.
274strict_transport_security_preload = false
275
276# Set to true if to enable the HSTS includeSubDomains option. Only applied if strict_transport_security is enabled.
277strict_transport_security_subdomains = false
278
279# Set to true to enable the X-Content-Type-Options response header.
280# The X-Content-Type-Options response HTTP header is a marker used by the server to indicate that the MIME types advertised
281# in the Content-Type headers should not be changed and be followed.
282x_content_type_options = true
283
284# Set to true to enable the X-XSS-Protection header, which tells browsers to stop pages from loading
285# when they detect reflected cross-site scripting (XSS) attacks.
286x_xss_protection = true
287
288# Enable adding the Content-Security-Policy header to your requests.
289# CSP allows to control resources the user agent is allowed to load and helps prevent XSS attacks.
290content_security_policy = false
291
292# Set Content Security Policy template used when adding the Content-Security-Policy header to your requests.
293# $NONCE in the template includes a random nonce.
294# $ROOT_PATH is server.root_url without the protocol.
295content_security_policy_template = """script-src 'self' 'unsafe-eval' 'unsafe-inline' 'strict-dynamic' $NONCE;object-src 'none';font-src 'self';style-src 'self' 'unsafe-inline' blob:;img-src * data:;base-uri 'self';connect-src 'self' grafana.com ws://$ROOT_PATH wss://$ROOT_PATH;manifest-src 'self';media-src 'none';form-action 'self';"""
296
297# Controls if old angular plugins are supported or not. This will be disabled by default in future release
298angular_support_enabled = true
299
300[security.encryption]
301# Defines the time-to-live (TTL) for decrypted data encryption keys stored in memory (cache).
302# Please note that small values may cause performance issues due to a high frequency decryption operations.
303data_keys_cache_ttl = 15m
304
305# Defines the frequency of data encryption keys cache cleanup interval.
306# On every interval, decrypted data encryption keys that reached the TTL are removed from the cache.
307data_keys_cache_cleanup_interval = 1m
308
309#################################### Snapshots ###########################
310[snapshots]
311# snapshot sharing options
312external_enabled = false
313external_snapshot_url =
314external_snapshot_name =
315
316# Set to true to enable this Grafana instance act as an external snapshot server and allow unauthenticated requests for
317# creating and deleting snapshots.
318public_mode = false
319
320# remove expired snapshot
321snapshot_remove_expired = true
322
323#################################### Dashboards ##################
324
325[dashboards]
326# Number dashboard versions to keep (per dashboard). Default: 20, Minimum: 1
327versions_to_keep = 20
328
329# Minimum dashboard refresh interval. When set, this will restrict users to set the refresh interval of a dashboard lower than given interval. Per default this is 5 seconds.
330# 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.
331min_refresh_interval = 5s
332
333# Path to the default home dashboard. If this value is empty, then Grafana uses StaticRootPath + "dashboards/home.json"
334default_home_dashboard_path =
335
336################################### Data sources #########################
337[datasources]
338# Upper limit of data sources that Grafana will return. This limit is a temporary configuration and it will be deprecated when pagination will be introduced on the list data sources API.
339datasource_limit = 5000
340
341#################################### Users ###############################
342[users]
343# disable user signup / registration
344allow_sign_up = false
345
346# Allow non admin users to create organizations
347allow_org_create = false
348
349# Set to true to automatically assign new users to the default organization (id 1)
350auto_assign_org = true
351
352# Set this value to automatically add new users to the provided organization (if auto_assign_org above is set to true)
353auto_assign_org_id = 1
354
355# Default role new users will be automatically assigned (if auto_assign_org above is set to true)
356auto_assign_org_role = Viewer
357
358# Require email validation before sign up completes
359verify_email_enabled = false
360
361# Background text for the user field on the login page
362login_hint = email or username
363password_hint = password
364
365# Default UI theme ("dark" or "light")
366default_theme = dark
367
368# Default locale (supported IETF language tag, such as en-US)
369default_locale = en-US
370
371# Path to a custom home page. Users are only redirected to this if the default home dashboard is used. It should match a frontend route and contain a leading slash.
372home_page =
373
374# External user management
375external_manage_link_url =
376external_manage_link_name =
377external_manage_info =
378
379# Viewers can edit/inspect dashboard settings in the browser. But not save the dashboard.
380viewers_can_edit = false
381
382# Editors can administrate dashboard, folders and teams they create
383editors_can_admin = false
384
385# The duration in time a user invitation remains valid before expiring. This setting should be expressed as a duration. Examples: 6h (hours), 2d (days), 1w (week). Default is 24h (24 hours). The minimum supported duration is 15m (15 minutes).
386user_invite_max_lifetime_duration = 24h
387
388# Enter a comma-separated list of usernames to hide them in the Grafana UI. These users are shown to Grafana admins and to themselves.
389hidden_users =
390
391[auth]
392# Login cookie name
393login_cookie_name = grafana_session
394
395# The maximum lifetime (duration) an authenticated user can be inactive before being required to login at next visit. Default is 7 days (7d). This setting should be expressed as a duration, e.g. 5m (minutes), 6h (hours), 10d (days), 2w (weeks), 1M (month). The lifetime resets at each successful token rotation (token_rotation_interval_minutes).
396login_maximum_inactive_lifetime_duration =
397
398# The maximum lifetime (duration) an authenticated user can be logged in since login time before being required to login. Default is 30 days (30d). This setting should be expressed as a duration, e.g. 5m (minutes), 6h (hours), 10d (days), 2w (weeks), 1M (month).
399login_maximum_lifetime_duration =
400
401# How often should auth tokens be rotated for authenticated users when being active. The default is each 10 minutes.
402token_rotation_interval_minutes = 10
403
404# Set to true to disable (hide) the login form, useful if you use OAuth
405disable_login_form = false
406
407# Set to true to disable the sign out link in the side menu. Useful if you use auth.proxy or auth.jwt.
408disable_signout_menu = false
409
410# URL to redirect the user to after sign out
411signout_redirect_url =
412
413# Set to true to attempt login with OAuth automatically, skipping the login screen.
414# This setting is ignored if multiple OAuth providers are configured.
415oauth_auto_login = false
416
417# OAuth state max age cookie duration in seconds. Defaults to 600 seconds.
418oauth_state_cookie_max_age = 600
419
420# Skip forced assignment of OrgID 1 or 'auto_assign_org_id' for social logins
421oauth_skip_org_role_update_sync = false
422
423# limit of api_key seconds to live before expiration
424api_key_max_seconds_to_live = -1
425
426# Set to true to enable SigV4 authentication option for HTTP-based datasources
427sigv4_auth_enabled = false
428
429# Set to true to enable verbose logging of SigV4 request signing
430sigv4_verbose_logging = false
431
432# Set to true to enable Azure authentication option for HTTP-based datasources
433azure_auth_enabled = false
434
435#################################### Anonymous Auth ######################
436[auth.anonymous]
437# enable anonymous access
438enabled = false
439
440# specify organization name that should be used for unauthenticated users
441org_name = Main Org.
442
443# specify role for unauthenticated users
444org_role = Viewer
445
446# mask the Grafana version number for unauthenticated users
447hide_version = false
448
449#################################### GitHub Auth #########################
450[auth.github]
451enabled = false
452allow_sign_up = true
453client_id = some_id
454client_secret =
455scopes = user:email,read:org
456auth_url = https://github.com/login/oauth/authorize
457token_url = https://github.com/login/oauth/access_token
458api_url = https://api.github.com/user
459allowed_domains =
460team_ids =
461allowed_organizations =
462role_attribute_path =
463role_attribute_strict = false
464
465#################################### GitLab Auth #########################
466[auth.gitlab]
467enabled = false
468allow_sign_up = true
469client_id = some_id
470client_secret =
471scopes = api
472auth_url = https://gitlab.com/oauth/authorize
473token_url = https://gitlab.com/oauth/token
474api_url = https://gitlab.com/api/v4
475allowed_domains =
476allowed_groups =
477role_attribute_path =
478role_attribute_strict = false
479
480#################################### Google Auth #########################
481[auth.google]
482enabled = false
483allow_sign_up = true
484client_id = some_client_id
485client_secret =
486scopes = https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email
487auth_url = https://accounts.google.com/o/oauth2/auth
488token_url = https://accounts.google.com/o/oauth2/token
489api_url = https://www.googleapis.com/oauth2/v1/userinfo
490allowed_domains =
491hosted_domain =
492
493#################################### Grafana.com Auth ####################
494# legacy key names (so they work in env variables)
495[auth.grafananet]
496enabled = false
497allow_sign_up = true
498client_id = some_id
499client_secret =
500scopes = user:email
501allowed_organizations =
502
503[auth.grafana_com]
504enabled = false
505allow_sign_up = true
506client_id = some_id
507client_secret =
508scopes = user:email
509allowed_organizations =
510
511#################################### Azure AD OAuth #######################
512[auth.azuread]
513name = Azure AD
514enabled = false
515allow_sign_up = true
516client_id = some_client_id
517client_secret =
518scopes = openid email profile
519auth_url = https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/authorize
520token_url = https://login.microsoftonline.com/<tenant-id>/oauth2/v2.0/token
521allowed_domains =
522allowed_groups =
523role_attribute_strict = false
524
525#################################### Okta OAuth #######################
526[auth.okta]
527name = Okta
528icon = okta
529enabled = false
530allow_sign_up = true
531client_id = some_id
532client_secret =
533scopes = openid profile email groups
534auth_url = https://<tenant-id>.okta.com/oauth2/v1/authorize
535token_url = https://<tenant-id>.okta.com/oauth2/v1/token
536api_url = https://<tenant-id>.okta.com/oauth2/v1/userinfo
537allowed_domains =
538allowed_groups =
539role_attribute_path =
540role_attribute_strict = false
541
542#################################### Generic OAuth #######################
543[auth.generic_oauth]
544name = OAuth
545icon = signin
546enabled = true
547allow_sign_up = true
548client_id = grafana
549client_secret = grafana_client_secret
550scopes = openid profile email groups
551empty_scopes = false
552auth_url = https://auth.chudnick.com/api/oidc/authorization
553token_url = https://auth.chudnick.com/api/oidc/token
554api_url = https://auth.chudnick.com/api/oidc/userinfo
555login_attribute_path = preferred_username
556groups_attribute_path = groups
557name_attribute_path = name
558use_pkce = false
559
560email_attribute_name =
561email_attribute_path =
562role_attribute_path =
563role_attribute_strict = false
564id_token_attribute_name =
565team_ids_attribute_path =
566teams_url =
567allowed_domains =
568team_ids =
569allowed_organizations =
570tls_skip_verify_insecure = false
571tls_client_cert =
572tls_client_key =
573tls_client_ca =
574auth_style =
575
576#################################### Basic Auth ##########################
577[auth.basic]
578enabled = true
579
580#################################### Auth Proxy ##########################
581[auth.proxy]
582enabled = false
583header_name = X-WEBAUTH-USER
584header_property = username
585auto_sign_up = true
586sync_ttl = 60
587whitelist =
588headers =
589headers_encoded = false
590enable_login_token = false
591
592#################################### Auth JWT ##########################
593[auth.jwt]
594enabled = false
595enable_login_token = false
596header_name =
597email_claim =
598username_claim =
599jwk_set_url =
600jwk_set_file =
601cache_ttl = 60m
602expected_claims = {}
603key_file =
604auto_sign_up = false
605
606#################################### Auth LDAP ###########################
607[auth.ldap]
608enabled = false
609config_file = /etc/grafana/ldap.toml
610allow_sign_up = true
611
612# LDAP background sync (Enterprise only)
613# At 1 am every day
614sync_cron = "0 1 * * *"
615active_sync_enabled = true
616
617#################################### AWS ###########################
618[aws]
619# Enter a comma-separated list of allowed AWS authentication providers.
620# Options are: default (AWS SDK Default), keys (Access && secret key), credentials (Credentials field), ec2_iam_role (EC2 IAM Role)
621allowed_auth_providers = default,keys,credentials
622
623# Allow AWS users to assume a role using temporary security credentials.
624# If true, assume role will be enabled for all AWS authentication providers that are specified in aws_auth_providers
625assume_role_enabled = true
626
627# Specify max no of pages to be returned by the ListMetricPages API
628list_metrics_page_limit = 500
629
630#################################### Azure ###############################
631[azure]
632# Azure cloud environment where Grafana is hosted
633# Possible values are AzureCloud, AzureChinaCloud, AzureUSGovernment and AzureGermanCloud
634# Default value is AzureCloud (i.e. public cloud)
635cloud = AzureCloud
636
637# Specifies whether Grafana hosted in Azure service with Managed Identity configured (e.g. Azure Virtual Machines instance)
638# If enabled, the managed identity can be used for authentication of Grafana in Azure services
639# Disabled by default, needs to be explicitly enabled
640managed_identity_enabled = false
641
642# Client ID to use for user-assigned managed identity
643# Should be set for user-assigned identity and should be empty for system-assigned identity
644managed_identity_client_id =
645
646#################################### Role-based Access Control ###########
647[rbac]
648# If enabled, cache permissions in a in memory cache (Enterprise only)
649permission_cache = true
650
651#################################### SMTP / Emailing #####################
652[smtp]
653enabled = true
654host = mail.chudnick.com:465
655user = monitoring@chudnick.com
656# If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;"""
657password = {{ grafana_smtp_password }}
658cert_file =
659key_file =
660skip_verify = false
661from_address = monitoring@chudnick.com
662from_name = Monitoring Alerts
663ehlo_identity = monitoring.chudnick.com
664startTLS_policy =
665
666[emails]
667welcome_email_on_sign_up = false
668templates_pattern = emails/*.html, emails/*.txt
669content_types = text/plain
670
671#################################### Logging ##########################
672[log]
673# Either "console", "file", "syslog". Default is console and file
674# Use space to separate multiple modes, e.g. "console file"
675mode = console file
676
677# Either "debug", "info", "warn", "error", "critical", default is "info"
678level = info
679
680# optional settings to set different levels for specific loggers. Ex filters = sqlstore:debug
681filters =
682
683# For "console" mode only
684[log.console]
685level =
686
687# log line format, valid options are text, console and json
688format = console
689
690# For "file" mode only
691[log.file]
692level =
693
694# log line format, valid options are text, console and json
695format = text
696
697# This enables automated log rotate(switch of following options), default is true
698log_rotate = true
699
700# Max line number of single file, default is 1000000
701max_lines = 1000000
702
703# Max size shift of single file, default is 28 means 1 << 28, 256MB
704max_size_shift = 28
705
706# Segment log daily, default is true
707daily_rotate = true
708
709# Expired days of log file(delete after max days), default is 7
710max_days = 7
711
712[log.syslog]
713level =
714
715# log line format, valid options are text, console and json
716format = text
717
718# Syslog network type and address. This can be udp, tcp, or unix. If left blank, the default unix endpoints will be used.
719network =
720address =
721
722# Syslog facility. user, daemon and local0 through local7 are valid.
723facility =
724
725# Syslog tag. By default, the process' argv[0] is used.
726tag =
727
728[log.frontend]
729# Should Sentry javascript agent be initialized
730enabled = false
731
732# Defines which provider to use sentry or grafana
733provider = sentry
734
735# Sentry DSN if you want to send events to Sentry.
736sentry_dsn =
737
738# Custom HTTP endpoint to send events to. Default will log the events to stdout.
739custom_endpoint =
740
741# Rate of events to be reported to Sentry between 0 (none) and 1 (all), float
742sample_rate = 1.0
743
744# Requests per second limit enforced per an extended period, for Grafana backend log ingestion endpoint (/log).
745log_endpoint_requests_per_second_limit = 3
746
747# Max requests accepted per short interval of time for Grafana backend log ingestion endpoint (/log)
748log_endpoint_burst_limit = 15
749
750# Should error instrumentation be enabled, only affects Grafana Javascript Agent
751instrumentations_errors_enabled = true
752
753# Should console instrumentation be enabled, only affects Grafana Javascript Agent
754instrumentations_console_enabled = false
755
756# Should webvitals instrumentation be enabled, only affects Grafana Javascript Agent
757instrumentations_webvitals_enabled = false
758
759# Api Key, only applies to Grafana Javascript Agent provider
760api_key =
761
762#################################### Usage Quotas ########################
763[quota]
764enabled = false
765
766#### set quotas to -1 to make unlimited. ####
767# limit number of users per Org.
768org_user = 10
769
770# limit number of dashboards per Org.
771org_dashboard = 100
772
773# limit number of data_sources per Org.
774org_data_source = 10
775
776# limit number of api_keys per Org.
777org_api_key = 10
778
779# limit number of alerts per Org.
780org_alert_rule = 100
781
782# limit number of orgs a user can create.
783user_org = 10
784
785# Global limit of users.
786global_user = -1
787
788# global limit of orgs.
789global_org = -1
790
791# global limit of dashboards
792global_dashboard = -1
793
794# global limit of api_keys
795global_api_key = -1
796
797# global limit on number of logged in users.
798global_session = -1
799
800# global limit of alerts
801global_alert_rule = -1
802
803# global limit of files uploaded to the SQL DB
804global_file = 1000
805
806#################################### Unified Alerting ####################
807[unified_alerting]
808# Enable the Unified Alerting sub-system and interface. When enabled we'll migrate all of your alert rules and notification channels to the new system. New alert rules will be created and your notification channels will be converted into an Alertmanager configuration. Previous data is preserved to enable backwards compatibility but new data is removed when switching. When this configuration section and flag are not defined, the state is defined at runtime. See the documentation for more details.
809enabled =
810
811# Comma-separated list of organization IDs for which to disable unified alerting. Only supported if unified alerting is enabled.
812disabled_orgs =
813
814# Specify the frequency of polling for admin config changes.
815# 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.
816admin_config_poll_interval = 60s
817
818# Specify the frequency of polling for Alertmanager config changes.
819# 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.
820alertmanager_config_poll_interval = 60s
821
822# Listen address/hostname and port to receive unified alerting messages for other Grafana instances. The port is used for both TCP and UDP. It is assumed other Grafana instances are also running on the same port.
823ha_listen_address = "0.0.0.0:9094"
824
825# Explicit address/hostname and port to advertise other Grafana instances. The port is used for both TCP and UDP.
826ha_advertise_address = ""
827
828# Comma-separated list of initial instances (in a format of host:port) that will form the HA cluster. Configuring this setting will enable High Availability mode for alerting.
829ha_peers = ""
830
831# Time to wait for an instance to send a notification via the Alertmanager. In HA, each Grafana instance will
832# be assigned a position (e.g. 0, 1). We then multiply this position with the timeout to indicate how long should
833# each instance wait before sending the notification to take into account replication lag.
834# 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.
835ha_peer_timeout = 15s
836
837# The interval between sending gossip messages. By lowering this value (more frequent) gossip messages are propagated
838# across cluster more quickly at the expense of increased bandwidth usage.
839# 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.
840ha_gossip_interval = 200ms
841
842# The interval between gossip full state syncs. Setting this interval lower (more frequent) will increase convergence speeds
843# across larger clusters at the expense of increased bandwidth usage.
844# 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.
845ha_push_pull_interval = 60s
846
847# Enable or disable alerting rule execution. The alerting UI remains visible. This option has a legacy version in the `[alerting]` section that takes precedence.
848execute_alerts = true
849
850# Alert evaluation timeout when fetching data from the datasource. This option has a legacy version in the `[alerting]` section that takes precedence.
851# The timeout string is a possibly signed sequence of decimal numbers, followed by a unit suffix (ms, s, m, h, d), e.g. 30s or 1m.
852evaluation_timeout = 30s
853
854# Number of times we'll attempt to evaluate an alert rule before giving up on that evaluation. This option has a legacy version in the `[alerting]` section that takes precedence.
855max_attempts = 3
856
857# Minimum interval to enforce between rule evaluations. 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 we'll schedule fewer evaluations over time. This option has a legacy version in the `[alerting]` section that takes precedence.
858# 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.
859min_interval = 10s
860
861[unified_alerting.screenshots]
862# Enable screenshots in notifications. This option requires the Grafana Image Renderer plugin.
863# For more information on configuration options, refer to [rendering].
864capture = false
865
866# The maximum number of screenshots that can be taken at the same time. This option is different from
867# concurrent_render_request_limit as max_concurrent_screenshots sets the number of concurrent screenshots
868# that can be taken at the same time for all firing alerts where as concurrent_render_request_limit sets
869# the total number of concurrent screenshots across all Grafana services.
870max_concurrent_screenshots = 5
871
872# Uploads screenshots to the local Grafana server or remote storage such as Azure, S3 and GCS. Please
873# see [external_image_storage] for further configuration options. If this option is false then
874# screenshots will be persisted to disk for up to temp_data_lifetime.
875upload_external_image_storage = false
876
877[unified_alerting.reserved_labels]
878# Comma-separated list of reserved labels added by the Grafana Alerting engine that should be disabled.
879# For example: `disabled_labels=grafana_folder`
880disabled_labels =
881
882#################################### Alerting ############################
883[alerting]
884# Enable the legacy alerting sub-system and interface. If Unified Alerting is already enabled and you try to go back to legacy alerting, all data that is part of Unified Alerting will be deleted. When this configuration section and flag are not defined, the state is defined at runtime. See the documentation for more details.
885enabled =
886
887# Makes it possible to turn off alert execution but alerting UI is visible
888execute_alerts = true
889
890# Default setting for new alert rules. Defaults to categorize error and timeouts as alerting. (alerting, keep_state)
891error_or_timeout = alerting
892
893# Default setting for how Grafana handles nodata or null values in alerting. (alerting, no_data, keep_state, ok)
894nodata_or_nullvalues = no_data
895
896# Alert notifications can include images, but rendering many images at the same time can overload the server
897# This limit will protect the server from render overloading and make sure notifications are sent out quickly
898concurrent_render_limit = 5
899
900# Default setting for alert calculation timeout. Default value is 30
901evaluation_timeout_seconds = 30
902
903# Default setting for alert notification timeout. Default value is 30
904notification_timeout_seconds = 30
905
906# Default setting for max attempts to sending alert notifications. Default value is 3
907max_attempts = 3
908
909# Makes it possible to enforce a minimal interval between evaluations, to reduce load on the backend
910min_interval_seconds = 1
911
912# Configures for how long alert annotations are stored. Default is 0, which keeps them forever.
913# This setting should be expressed as an duration. Ex 6h (hours), 10d (days), 2w (weeks), 1M (month).
914max_annotation_age =
915
916# Configures max number of alert annotations that Grafana stores. Default value is 0, which keeps all alert annotations.
917max_annotations_to_keep =
918
919#################################### Annotations #########################
920[annotations]
921# Configures the batch size for the annotation clean-up job. This setting is used for dashboard, API, and alert annotations.
922cleanupjob_batchsize = 100
923
924[annotations.dashboard]
925# Dashboard annotations means that annotations are associated with the dashboard they are created on.
926
927# Configures how long dashboard annotations are stored. Default is 0, which keeps them forever.
928# This setting should be expressed as a duration. Examples: 6h (hours), 10d (days), 2w (weeks), 1M (month).
929max_age =
930
931# Configures max number of dashboard annotations that Grafana stores. Default value is 0, which keeps all dashboard annotations.
932max_annotations_to_keep =
933
934[annotations.api]
935# API annotations means that the annotations have been created using the API without any
936# association with a dashboard.
937
938# Configures how long Grafana stores API annotations. Default is 0, which keeps them forever.
939# This setting should be expressed as a duration. Examples: 6h (hours), 10d (days), 2w (weeks), 1M (month).
940max_age =
941
942# Configures max number of API annotations that Grafana keeps. Default value is 0, which keeps all API annotations.
943max_annotations_to_keep =
944
945#################################### Explore #############################
946[explore]
947# Enable the Explore section
948enabled = true
949
950#################################### Help #############################
951[help]
952# Enable the Help section
953enabled = true
954
955#################################### Profile #############################
956[profile]
957# Enable the Profile section
958enabled = true
959
960#################################### Query History #############################
961[query_history]
962# Enable the Query history
963enabled = true
964
965#################################### Internal Grafana Metrics ############
966# Metrics available at HTTP URL /metrics and /metrics/plugins/:pluginId
967[metrics]
968enabled = true
969interval_seconds = 10
970# Disable total stats (stat_totals_*) metrics to be generated
971disable_total_stats = false
972
973#If both are set, basic auth will be required for the metrics endpoints.
974basic_auth_username =
975basic_auth_password =
976
977# Metrics environment info adds dimensions to the `grafana_environment_info` metric, which
978# can expose more information about the Grafana instance.
979[metrics.environment_info]
980#exampleLabel1 = exampleValue1
981#exampleLabel2 = exampleValue2
982
983# Send internal Grafana metrics to graphite
984[metrics.graphite]
985# Enable by setting the address setting (ex localhost:2003)
986address =
987prefix = prod.grafana.%(instance_name)s.
988
989#################################### Grafana.com integration ##########################
990[grafana_net]
991url = https://grafana.com
992
993[grafana_com]
994url = https://grafana.com
995
996#################################### Distributed tracing ############
997# Opentracing is deprecated use opentelemetry instead
998[tracing.jaeger]
999# jaeger destination (ex localhost:6831)
1000address =
1001# tag that will always be included in when creating new spans. ex (tag1:value1,tag2:value2)
1002always_included_tag =
1003# Type specifies the type of the sampler: const, probabilistic, rateLimiting, or remote
1004sampler_type = const
1005# jaeger samplerconfig param
1006# for "const" sampler, 0 or 1 for always false/true respectively
1007# for "probabilistic" sampler, a probability between 0 and 1
1008# for "rateLimiting" sampler, the number of spans per second
1009# for "remote" sampler, param is the same as for "probabilistic"
1010# and indicates the initial sampling rate before the actual one
1011# is received from the mothership
1012sampler_param = 1
1013# sampling_server_url is the URL of a sampling manager providing a sampling strategy.
1014sampling_server_url =
1015# Whether or not to use Zipkin span propagation (x-b3- HTTP headers).
1016zipkin_propagation = false
1017# Setting this to true disables shared RPC spans.
1018# Not disabling is the most common setting when using Zipkin elsewhere in your infrastructure.
1019disable_shared_zipkin_spans = false
1020
1021[tracing.opentelemetry.jaeger]
1022# jaeger destination (ex http://localhost:14268/api/traces)
1023address =
1024# Propagation specifies the text map propagation format: w3c, jaeger
1025propagation =
1026
1027# This is a configuration for OTLP exporter with GRPC protocol
1028[tracing.opentelemetry.otlp]
1029# otlp destination (ex localhost:4317)
1030address =
1031# Propagation specifies the text map propagation format: w3c, jaeger
1032propagation =
1033
1034#################################### External Image Storage ##############
1035[external_image_storage]
1036# Used for uploading images to public servers so they can be included in slack/email messages.
1037# You can choose between (s3, webdav, gcs, azure_blob, local)
1038provider =
1039
1040[external_image_storage.s3]
1041endpoint =
1042path_style_access =
1043bucket_url =
1044bucket =
1045region =
1046path =
1047access_key =
1048secret_key =
1049
1050[external_image_storage.webdav]
1051url =
1052username =
1053password =
1054public_url =
1055
1056[external_image_storage.gcs]
1057key_file =
1058bucket =
1059path =
1060enable_signed_urls = false
1061signed_url_expiration =
1062
1063[external_image_storage.azure_blob]
1064account_name =
1065account_key =
1066container_name =
1067
1068[external_image_storage.local]
1069# does not require any configuration
1070
1071[rendering]
1072# Options to configure a remote HTTP image rendering service, e.g. using https://github.com/grafana/grafana-image-renderer.
1073# URL to a remote HTTP image renderer service, e.g. http://localhost:8081/render, will enable Grafana to render panels and dashboards to PNG-images using HTTP requests to an external service.
1074server_url =
1075# If the remote HTTP image renderer service runs on a different server than the Grafana server you may have to configure this to a URL where Grafana is reachable, e.g. http://grafana.domain/.
1076callback_url =
1077# Concurrent render request limit affects when the /render HTTP endpoint is used. Rendering many images at the same time can overload the server,
1078# which this setting can help protect against by only allowing a certain amount of concurrent requests.
1079concurrent_render_request_limit = 30
1080
1081[panels]
1082# here for to support old env variables, can remove after a few months
1083enable_alpha = false
1084disable_sanitize_html = false
1085
1086[plugins]
1087enable_alpha = false
1088app_tls_skip_verify_insecure = false
1089# Enter a comma-separated list of plugin identifiers to identify plugins to load even if they are unsigned. Plugins with modified signatures are never loaded.
1090allow_loading_unsigned_plugins =
1091# Enable or disable installing / uninstalling / updating plugins directly from within Grafana.
1092plugin_admin_enabled = true
1093plugin_admin_external_manage_enabled = false
1094plugin_catalog_url = https://grafana.com/grafana/plugins/
1095# Enter a comma-separated list of plugin identifiers to hide in the plugin catalog.
1096plugin_catalog_hidden_plugins =
1097
1098#################################### Grafana Live ##########################################
1099[live]
1100# max_connections to Grafana Live WebSocket endpoint per Grafana server instance. See Grafana Live docs
1101# if you are planning to make it higher than default 100 since this can require some OS and infrastructure
1102# tuning. 0 disables Live, -1 means unlimited connections.
1103max_connections = 100
1104
1105# allowed_origins is a comma-separated list of origins that can establish connection with Grafana Live.
1106# If not set then origin will be matched over root_url. Supports wildcard symbol "*".
1107allowed_origins =
1108
1109# engine defines an HA (high availability) engine to use for Grafana Live. By default no engine used - in
1110# this case Live features work only on a single Grafana server.
1111# Available options: "redis".
1112# Setting ha_engine is an EXPERIMENTAL feature.
1113ha_engine =
1114
1115# ha_engine_address sets a connection address for Live HA engine. Depending on engine type address format can differ.
1116# For now we only support Redis connection address in "host:port" format.
1117# This option is EXPERIMENTAL.
1118ha_engine_address = "127.0.0.1:6379"
1119
1120#################################### Grafana Image Renderer Plugin ##########################
1121[plugin.grafana-image-renderer]
1122# Instruct headless browser instance to use a default timezone when not provided by Grafana, e.g. when rendering panel image of alert.
1123# See ICU’s metaZones.txt (https://cs.chromium.org/chromium/src/third_party/icu/source/data/misc/metaZones.txt) for a list of supported
1124# timezone IDs. Fallbacks to TZ environment variable if not set.
1125rendering_timezone =
1126
1127# Instruct headless browser instance to use a default language when not provided by Grafana, e.g. when rendering panel image of alert.
1128# Please refer to the HTTP header Accept-Language to understand how to format this value, e.g. 'fr-CH, fr;q=0.9, en;q=0.8, de;q=0.7, *;q=0.5'.
1129rendering_language =
1130
1131# Instruct headless browser instance to use a default device scale factor when not provided by Grafana, e.g. when rendering panel image of alert.
1132# Default is 1. Using a higher value will produce more detailed images (higher DPI), but will require more disk space to store an image.
1133rendering_viewport_device_scale_factor =
1134
1135# Instruct headless browser instance whether to ignore HTTPS errors during navigation. Per default HTTPS errors are not ignored. Due to
1136# the security risk it's not recommended to ignore HTTPS errors.
1137rendering_ignore_https_errors =
1138
1139# Instruct headless browser instance whether to capture and log verbose information when rendering an image. Default is false and will
1140# only capture and log error messages. When enabled, debug messages are captured and logged as well.
1141# For the verbose information to be included in the Grafana server log you have to adjust the rendering log level to debug, configure
1142# [log].filter = rendering:debug.
1143rendering_verbose_logging =
1144
1145# Instruct headless browser instance whether to output its debug and error messages into running process of remote rendering service.
1146# Default is false. This can be useful to enable (true) when troubleshooting.
1147rendering_dumpio =
1148
1149# Additional arguments to pass to the headless browser instance. Default is --no-sandbox. The list of Chromium flags can be found
1150# here (https://peter.sh/experiments/chromium-command-line-switches/). Multiple arguments is separated with comma-character.
1151rendering_args =
1152
1153# You can configure the plugin to use a different browser binary instead of the pre-packaged version of Chromium.
1154# Please note that this is not recommended, since you may encounter problems if the installed version of Chrome/Chromium is not
1155# compatible with the plugin.
1156rendering_chrome_bin =
1157
1158# Instruct how headless browser instances are created. Default is 'default' and will create a new browser instance on each request.
1159# Mode 'clustered' will make sure that only a maximum of browsers/incognito pages can execute concurrently.
1160# Mode 'reusable' will have one browser instance and will create a new incognito page on each request.
1161rendering_mode =
1162
1163# When rendering_mode = clustered, you can instruct how many browsers or incognito pages can execute concurrently. Default is 'browser'
1164# and will cluster using browser instances.
1165# Mode 'context' will cluster using incognito pages.
1166rendering_clustering_mode =
1167# When rendering_mode = clustered, you can define the maximum number of browser instances/incognito pages that can execute concurrently. Default is '5'.
1168rendering_clustering_max_concurrency =
1169# When rendering_mode = clustered, you can specify the duration a rendering request can take before it will time out. Default is `30` seconds.
1170rendering_clustering_timeout =
1171
1172# Limit the maximum viewport width, height and device scale factor that can be requested.
1173rendering_viewport_max_width =
1174rendering_viewport_max_height =
1175rendering_viewport_max_device_scale_factor =
1176
1177# Change the listening host and port of the gRPC server. Default host is 127.0.0.1 and default port is 0 and will automatically assign
1178# a port not in use.
1179grpc_host =
1180grpc_port =
1181
1182[enterprise]
1183license_path =
1184
1185[feature_toggles]
1186# there are currently two ways to enable feature toggles in the `grafana.ini`.
1187# you can either pass an array of feature you want to enable to the `enable` field or
1188# configure each toggle by setting the name of the toggle to true/false. Toggles set to true/false
1189# will take precedence over toggles in the `enable` list.
1190
1191# enable = feature1,feature2
1192enable =
1193
1194# The new prometheus visual query builder
1195promQueryBuilder = true
1196
1197# The new loki visual query builder
1198lokiQueryBuilder = true
1199
1200# Experimental Explore to Dashboard workflow
1201explore2Dashboard = true
1202
1203# Experimental Command Palette
1204commandPalette = true
1205
1206# Use dynamic labels in CloudWatch datasource
1207cloudWatchDynamicLabels = true
1208
1209# feature1 = true
1210# feature2 = false
1211
1212[date_formats]
1213# For information on what formatting patterns that are supported https://momentjs.com/docs/#/displaying/
1214
1215# Default system date format used in time range picker and other places where full time is displayed
1216full_date = YYYY-MM-DD HH:mm:ss
1217
1218# Used by graph and other places where we only show small intervals
1219interval_second = HH:mm:ss
1220interval_minute = HH:mm
1221interval_hour = MM/DD HH:mm
1222interval_day = MM/DD
1223interval_month = YYYY-MM
1224interval_year = YYYY
1225
1226# Experimental feature
1227use_browser_locale = false
1228
1229# Default timezone for user preferences. Options are 'browser' for the browser local timezone or a timezone name from IANA Time Zone database, e.g. 'UTC' or 'Europe/Amsterdam' etc.
1230default_timezone = browser
1231
1232[expressions]
1233# Enable or disable the expressions functionality.
1234enabled = true
1235
1236[geomap]
1237# Set the JSON configuration for the default basemap
1238default_baselayer_config =
1239
1240# Enable or disable loading other base map layers
1241enable_custom_baselayers = true
1242
1243#################################### Dashboard previews #####################################
1244
1245[dashboard_previews.crawler]
1246# Number of dashboards rendered in parallel. Default is 6.
1247thread_count =
1248
1249# Timeout passed down to the Image Renderer plugin. It is used in two separate places within a single rendering request:
1250# First during the initial navigation to the dashboard and then when waiting for all the panels to load. Default is 20s.
1251# This setting should be expressed as a duration. Examples: 10s (seconds), 1m (minutes).
1252rendering_timeout =
1253
1254# Maximum duration of a single crawl. Default is 1h.
1255# This setting should be expressed as a duration. Examples: 10s (seconds), 1m (minutes).
1256max_crawl_duration =
1257
1258# Minimum interval between two subsequent scheduler runs. Default is 12h.
1259# This setting should be expressed as a duration. Examples: 10s (seconds), 1m (minutes).
1260scheduler_interval =
1261
1262
1263#################################### Storage ################################################
1264
1265[storage]
1266# Allow uploading SVG files without sanitization.
1267allow_unsanitized_svg_upload = false
1268
diff --git a/data/grafana/main.json b/data/grafana/main.json
new file mode 100644
index 0000000..53a1adb
--- /dev/null
+++ b/data/grafana/main.json
@@ -0,0 +1,5176 @@
1{
2 "annotations": {
3 "list": [
4 {
5 "builtIn": 1,
6 "datasource": {
7 "type": "grafana",
8 "uid": "-- Grafana --"
9 },
10 "enable": true,
11 "hide": true,
12 "iconColor": "rgba(0, 211, 255, 1)",
13 "name": "Annotations & Alerts",
14 "target": {
15 "limit": 100,
16 "matchAny": false,
17 "tags": [],
18 "type": "dashboard"
19 },
20 "type": "dashboard"
21 }
22 ]
23 },
24 "editable": true,
25 "fiscalYearStartMonth": 0,
26 "graphTooltip": 0,
27 "id": 19,
28 "links": [],
29 "liveNow": false,
30 "panels": [
31 {
32 "collapsed": false,
33 "gridPos": {
34 "h": 1,
35 "w": 24,
36 "x": 0,
37 "y": 0
38 },
39 "id": 49,
40 "panels": [],
41 "title": "Infrastructure",
42 "type": "row"
43 },
44 {
45 "datasource": {
46 "type": "influxdb",
47 "uid": "1Y6tKgWVz"
48 },
49 "fieldConfig": {
50 "defaults": {
51 "color": {
52 "mode": "thresholds"
53 },
54 "mappings": [
55 {
56 "options": {
57 "match": "null",
58 "result": {
59 "text": "N/A"
60 }
61 },
62 "type": "special"
63 }
64 ],
65 "max": 1,
66 "min": 0,
67 "thresholds": {
68 "mode": "absolute",
69 "steps": [
70 {
71 "color": "#299c46"
72 },
73 {
74 "color": "rgba(237, 129, 40, 0.89)",
75 "value": 0.75
76 },
77 {
78 "color": "#d44a3a",
79 "value": 0.875
80 }
81 ]
82 },
83 "unit": "percentunit"
84 },
85 "overrides": []
86 },
87 "gridPos": {
88 "h": 8,
89 "w": 3,
90 "x": 0,
91 "y": 1
92 },
93 "id": 29,
94 "links": [],
95 "maxDataPoints": 100,
96 "options": {
97 "orientation": "horizontal",
98 "reduceOptions": {
99 "calcs": [
100 "lastNotNull"
101 ],
102 "fields": "",
103 "values": false
104 },
105 "showThresholdLabels": false,
106 "showThresholdMarkers": true
107 },
108 "pluginVersion": "10.0.0",
109 "targets": [
110 {
111 "datasource": {
112 "type": "influxdb",
113 "uid": "1Y6tKgWVz"
114 },
115 "groupBy": [
116 {
117 "params": [
118 "$__interval"
119 ],
120 "type": "time"
121 },
122 {
123 "params": [
124 "null"
125 ],
126 "type": "fill"
127 }
128 ],
129 "measurement": "system",
130 "orderByTime": "ASC",
131 "policy": "default",
132 "query": "SELECT last(\"used\") / last(\"total\") FROM \"system\" WHERE (\"host\" = 'fast-pool') AND $timeFilter GROUP BY time($__interval) fill(null)",
133 "rawQuery": true,
134 "refId": "A",
135 "resultFormat": "time_series",
136 "select": [
137 [
138 {
139 "params": [
140 "used"
141 ],
142 "type": "field"
143 },
144 {
145 "params": [
146 " /"
147 ],
148 "type": "math"
149 }
150 ],
151 [
152 {
153 "params": [
154 "total"
155 ],
156 "type": "field"
157 }
158 ],
159 [
160 {
161 "params": [
162 "used"
163 ],
164 "type": "field"
165 },
166 {
167 "params": [
168 " /"
169 ],
170 "type": "math"
171 }
172 ]
173 ],
174 "tags": [
175 {
176 "key": "host",
177 "operator": "=",
178 "value": "fast-pool"
179 }
180 ]
181 }
182 ],
183 "title": "fast-pool Usage",
184 "transparent": true,
185 "type": "gauge"
186 },
187 {
188 "datasource": {
189 "type": "influxdb",
190 "uid": "1Y6tKgWVz"
191 },
192 "fieldConfig": {
193 "defaults": {
194 "color": {
195 "mode": "thresholds"
196 },
197 "mappings": [
198 {
199 "options": {
200 "match": "null",
201 "result": {
202 "text": "N/A"
203 }
204 },
205 "type": "special"
206 }
207 ],
208 "max": 1,
209 "min": 0,
210 "thresholds": {
211 "mode": "absolute",
212 "steps": [
213 {
214 "color": "#299c46"
215 },
216 {
217 "color": "rgba(237, 129, 40, 0.89)",
218 "value": 0.75
219 },
220 {
221 "color": "#d44a3a",
222 "value": 0.875
223 }
224 ]
225 },
226 "unit": "percentunit"
227 },
228 "overrides": []
229 },
230 "gridPos": {
231 "h": 8,
232 "w": 3,
233 "x": 3,
234 "y": 1
235 },
236 "id": 31,
237 "links": [],
238 "maxDataPoints": 100,
239 "options": {
240 "orientation": "horizontal",
241 "reduceOptions": {
242 "calcs": [
243 "lastNotNull"
244 ],
245 "fields": "",
246 "values": false
247 },
248 "showThresholdLabels": false,
249 "showThresholdMarkers": true
250 },
251 "pluginVersion": "10.0.0",
252 "targets": [
253 {
254 "datasource": {
255 "type": "influxdb",
256 "uid": "1Y6tKgWVz"
257 },
258 "groupBy": [
259 {
260 "params": [
261 "$__interval"
262 ],
263 "type": "time"
264 },
265 {
266 "params": [
267 "null"
268 ],
269 "type": "fill"
270 }
271 ],
272 "orderByTime": "ASC",
273 "policy": "default",
274 "query": "SELECT last(\"used\") / last(\"total\") FROM \"system\" WHERE (\"host\" = 'slow-pool') AND $timeFilter GROUP BY time($__interval) fill(null)",
275 "rawQuery": true,
276 "refId": "A",
277 "resultFormat": "time_series",
278 "select": [
279 [
280 {
281 "params": [
282 "value"
283 ],
284 "type": "field"
285 },
286 {
287 "params": [],
288 "type": "mean"
289 }
290 ]
291 ],
292 "tags": []
293 }
294 ],
295 "title": "slow-pool Usage",
296 "transparent": true,
297 "type": "gauge"
298 },
299 {
300 "datasource": {
301 "type": "influxdb",
302 "uid": "1Y6tKgWVz"
303 },
304 "fieldConfig": {
305 "defaults": {
306 "color": {
307 "mode": "thresholds"
308 },
309 "mappings": [
310 {
311 "options": {
312 "match": "null",
313 "result": {
314 "text": "N/A"
315 }
316 },
317 "type": "special"
318 }
319 ],
320 "thresholds": {
321 "mode": "absolute",
322 "steps": [
323 {
324 "color": "green"
325 },
326 {
327 "color": "red",
328 "value": 80
329 }
330 ]
331 },
332 "unit": "none"
333 },
334 "overrides": []
335 },
336 "gridPos": {
337 "h": 3,
338 "w": 2,
339 "x": 6,
340 "y": 1
341 },
342 "id": 35,
343 "links": [],
344 "maxDataPoints": 100,
345 "options": {
346 "colorMode": "none",
347 "graphMode": "none",
348 "justifyMode": "auto",
349 "orientation": "horizontal",
350 "reduceOptions": {
351 "calcs": [
352 "lastNotNull"
353 ],
354 "fields": "",
355 "values": false
356 },
357 "textMode": "auto"
358 },
359 "pluginVersion": "10.0.0",
360 "targets": [
361 {
362 "datasource": {
363 "type": "influxdb",
364 "uid": "1Y6tKgWVz"
365 },
366 "groupBy": [],
367 "measurement": "cpustat",
368 "orderByTime": "ASC",
369 "policy": "default",
370 "query": "SELECT \"cpus\" FROM \"cpustat\" WHERE (\"host\" = 'proxmox') AND $timeFilter",
371 "rawQuery": true,
372 "refId": "A",
373 "resultFormat": "time_series",
374 "select": [
375 [
376 {
377 "params": [
378 "cpus"
379 ],
380 "type": "field"
381 }
382 ]
383 ],
384 "tags": [
385 {
386 "key": "host",
387 "operator": "=~",
388 "value": "/^$server$/"
389 }
390 ]
391 }
392 ],
393 "title": "Cores",
394 "type": "stat"
395 },
396 {
397 "columns": [],
398 "datasource": {
399 "type": "influxdb",
400 "uid": "1Y6tKgWVz"
401 },
402 "fontSize": "100%",
403 "gridPos": {
404 "h": 8,
405 "w": 4,
406 "x": 8,
407 "y": 1
408 },
409 "id": 39,
410 "interval": "",
411 "links": [],
412 "scroll": true,
413 "showHeader": true,
414 "sort": {
415 "col": 1,
416 "desc": false
417 },
418 "styles": [
419 {
420 "alias": "Time",
421 "align": "auto",
422 "colors": [
423 "rgba(245, 54, 54, 0.9)",
424 "rgba(237, 129, 40, 0.89)",
425 "rgba(50, 172, 45, 0.97)"
426 ],
427 "dateFormat": "YYYY-MM-DD HH:mm:ss",
428 "decimals": 2,
429 "mappingType": 1,
430 "pattern": "Time",
431 "thresholds": [],
432 "type": "hidden",
433 "unit": "short"
434 },
435 {
436 "alias": "Uptime",
437 "align": "auto",
438 "colors": [
439 "rgba(245, 54, 54, 0.9)",
440 "rgba(237, 129, 40, 0.89)",
441 "rgba(50, 172, 45, 0.97)"
442 ],
443 "dateFormat": "YYYY-MM-DD HH:mm:ss",
444 "decimals": 1,
445 "mappingType": 1,
446 "pattern": "uptime",
447 "rangeMaps": [
448 {
449 "from": "",
450 "text": "",
451 "to": ""
452 }
453 ],
454 "thresholds": [],
455 "type": "number",
456 "unit": "dtdurations",
457 "valueMaps": [
458 {
459 "text": "Offline",
460 "value": "0"
461 }
462 ]
463 },
464 {
465 "alias": "VM",
466 "align": "auto",
467 "colors": [
468 "rgba(245, 54, 54, 0.9)",
469 "rgba(237, 129, 40, 0.89)",
470 "rgba(50, 172, 45, 0.97)"
471 ],
472 "dateFormat": "YYYY-MM-DD HH:mm:ss",
473 "decimals": 2,
474 "mappingType": 1,
475 "pattern": "host",
476 "sanitize": true,
477 "thresholds": [],
478 "type": "string",
479 "unit": "short",
480 "valueMaps": []
481 }
482 ],
483 "targets": [
484 {
485 "datasource": {
486 "type": "influxdb",
487 "uid": "1Y6tKgWVz"
488 },
489 "groupBy": [
490 {
491 "params": [
492 "host"
493 ],
494 "type": "tag"
495 }
496 ],
497 "limit": "1",
498 "measurement": "system",
499 "orderByTime": "ASC",
500 "policy": "default",
501 "query": "SELECT last(uptime) AS \"uptime\" FROM \"system\" WHERE (\"object\" = 'qemu') AND time > (now() - 10m) AND uptime > 0 GROUP BY \"host\" limit 1",
502 "rawQuery": true,
503 "refId": "A",
504 "resultFormat": "table",
505 "select": [
506 [
507 {
508 "params": [
509 "uptime"
510 ],
511 "type": "field"
512 },
513 {
514 "params": [
515 "uptime"
516 ],
517 "type": "alias"
518 }
519 ]
520 ],
521 "tags": [
522 {
523 "key": "object",
524 "operator": "=",
525 "value": "qemu"
526 }
527 ]
528 }
529 ],
530 "title": "Running VMs",
531 "transform": "table",
532 "transparent": true,
533 "type": "table-old"
534 },
535 {
536 "datasource": {
537 "type": "prometheus",
538 "uid": "t-6Lw3i4z"
539 },
540 "fieldConfig": {
541 "defaults": {
542 "color": {
543 "mode": "palette-classic"
544 },
545 "custom": {
546 "axisCenteredZero": false,
547 "axisColorMode": "text",
548 "axisLabel": "temperature",
549 "axisPlacement": "auto",
550 "barAlignment": 0,
551 "drawStyle": "line",
552 "fillOpacity": 20,
553 "gradientMode": "none",
554 "hideFrom": {
555 "legend": false,
556 "tooltip": false,
557 "viz": false
558 },
559 "lineInterpolation": "linear",
560 "lineWidth": 1,
561 "pointSize": 5,
562 "scaleDistribution": {
563 "type": "linear"
564 },
565 "showPoints": "never",
566 "spanNulls": false,
567 "stacking": {
568 "group": "A",
569 "mode": "none"
570 },
571 "thresholdsStyle": {
572 "mode": "off"
573 }
574 },
575 "links": [],
576 "mappings": [],
577 "min": 0,
578 "thresholds": {
579 "mode": "absolute",
580 "steps": [
581 {
582 "color": "green"
583 },
584 {
585 "color": "red",
586 "value": 80
587 }
588 ]
589 },
590 "unit": "celsius"
591 },
592 "overrides": [
593 {
594 "matcher": {
595 "id": "byRegexp",
596 "options": "/.*Critical*./"
597 },
598 "properties": [
599 {
600 "id": "color",
601 "value": {
602 "fixedColor": "#E24D42",
603 "mode": "fixed"
604 }
605 },
606 {
607 "id": "custom.fillOpacity",
608 "value": 0
609 }
610 ]
611 },
612 {
613 "matcher": {
614 "id": "byRegexp",
615 "options": "/.*Max*./"
616 },
617 "properties": [
618 {
619 "id": "color",
620 "value": {
621 "fixedColor": "#EF843C",
622 "mode": "fixed"
623 }
624 },
625 {
626 "id": "custom.fillOpacity",
627 "value": 0
628 }
629 ]
630 }
631 ]
632 },
633 "gridPos": {
634 "h": 8,
635 "w": 12,
636 "x": 12,
637 "y": 1
638 },
639 "id": 18,
640 "links": [],
641 "options": {
642 "legend": {
643 "calcs": [
644 "mean",
645 "lastNotNull",
646 "max",
647 "min"
648 ],
649 "displayMode": "table",
650 "placement": "bottom",
651 "showLegend": true
652 },
653 "tooltip": {
654 "mode": "multi",
655 "sort": "none"
656 }
657 },
658 "pluginVersion": "9.1.1",
659 "targets": [
660 {
661 "datasource": {
662 "type": "prometheus",
663 "uid": "t-6Lw3i4z"
664 },
665 "editorMode": "code",
666 "expr": "node_hwmon_temp_celsius{instance=\"proxmox.home.local:9100\"}",
667 "format": "time_series",
668 "interval": "",
669 "intervalFactor": 1,
670 "legendFormat": "{{ chip }} {{ sensor }} temp",
671 "range": true,
672 "refId": "A",
673 "step": 240
674 },
675 {
676 "datasource": {
677 "type": "prometheus",
678 "uid": "t-6Lw3i4z"
679 },
680 "editorMode": "code",
681 "expr": "node_hwmon_temp_crit_alarm_celsius{instance=\"proxmox.home.local:9100\"}",
682 "format": "time_series",
683 "hide": true,
684 "interval": "",
685 "intervalFactor": 1,
686 "legendFormat": "{{ chip }} {{ sensor }} Critical Alarm",
687 "range": true,
688 "refId": "B",
689 "step": 240
690 },
691 {
692 "datasource": {
693 "type": "prometheus",
694 "uid": "t-6Lw3i4z"
695 },
696 "editorMode": "code",
697 "expr": "node_hwmon_temp_crit_celsius{instance=\"proxmox.home.local:9100\"}",
698 "format": "time_series",
699 "interval": "",
700 "intervalFactor": 1,
701 "legendFormat": "{{ chip }} {{ sensor }} Critical",
702 "range": true,
703 "refId": "C",
704 "step": 240
705 },
706 {
707 "datasource": {
708 "type": "prometheus",
709 "uid": "t-6Lw3i4z"
710 },
711 "editorMode": "code",
712 "expr": "node_hwmon_temp_crit_hyst_celsius{instance=\"proxmox.home.local:9100\"}",
713 "format": "time_series",
714 "hide": true,
715 "interval": "",
716 "intervalFactor": 1,
717 "legendFormat": "{{ chip }} {{ sensor }} Critical Historical",
718 "range": true,
719 "refId": "D",
720 "step": 240
721 },
722 {
723 "datasource": {
724 "type": "prometheus",
725 "uid": "t-6Lw3i4z"
726 },
727 "expr": "node_hwmon_temp_max_celsius{instance=\"$node\",job=\"$job\"}",
728 "format": "time_series",
729 "hide": true,
730 "interval": "",
731 "intervalFactor": 1,
732 "legendFormat": "{{ chip }} {{ sensor }} Max",
733 "refId": "E",
734 "step": 240
735 }
736 ],
737 "title": "Hardware temperature monitor",
738 "type": "timeseries"
739 },
740 {
741 "datasource": {
742 "type": "influxdb",
743 "uid": "1Y6tKgWVz"
744 },
745 "fieldConfig": {
746 "defaults": {
747 "color": {
748 "mode": "thresholds"
749 },
750 "mappings": [
751 {
752 "options": {
753 "match": "null",
754 "result": {
755 "text": "N/A"
756 }
757 },
758 "type": "special"
759 }
760 ],
761 "thresholds": {
762 "mode": "absolute",
763 "steps": [
764 {
765 "color": "green"
766 },
767 {
768 "color": "red",
769 "value": 80
770 }
771 ]
772 },
773 "unit": "bytes"
774 },
775 "overrides": []
776 },
777 "gridPos": {
778 "h": 3,
779 "w": 2,
780 "x": 6,
781 "y": 4
782 },
783 "id": 37,
784 "links": [],
785 "maxDataPoints": 100,
786 "options": {
787 "colorMode": "none",
788 "graphMode": "none",
789 "justifyMode": "auto",
790 "orientation": "horizontal",
791 "reduceOptions": {
792 "calcs": [
793 "lastNotNull"
794 ],
795 "fields": "",
796 "values": false
797 },
798 "textMode": "auto"
799 },
800 "pluginVersion": "10.0.0",
801 "targets": [
802 {
803 "datasource": {
804 "type": "influxdb",
805 "uid": "1Y6tKgWVz"
806 },
807 "groupBy": [],
808 "measurement": "memory",
809 "orderByTime": "ASC",
810 "policy": "default",
811 "query": "SELECT \"memtotal\" FROM \"memory\" WHERE (\"host\" = 'proxmox') AND $timeFilter",
812 "rawQuery": true,
813 "refId": "A",
814 "resultFormat": "time_series",
815 "select": [
816 [
817 {
818 "params": [
819 "memtotal"
820 ],
821 "type": "field"
822 }
823 ]
824 ],
825 "tags": [
826 {
827 "key": "host",
828 "operator": "=~",
829 "value": "/^$server$/"
830 }
831 ]
832 }
833 ],
834 "title": "Total Memory",
835 "type": "stat"
836 },
837 {
838 "datasource": {
839 "type": "influxdb",
840 "uid": "1Y6tKgWVz"
841 },
842 "fieldConfig": {
843 "defaults": {
844 "color": {
845 "mode": "palette-classic"
846 },
847 "custom": {
848 "axisCenteredZero": false,
849 "axisColorMode": "text",
850 "axisLabel": "Percent",
851 "axisPlacement": "auto",
852 "barAlignment": 0,
853 "drawStyle": "line",
854 "fillOpacity": 10,
855 "gradientMode": "none",
856 "hideFrom": {
857 "legend": false,
858 "tooltip": false,
859 "viz": false
860 },
861 "lineInterpolation": "linear",
862 "lineWidth": 2,
863 "pointSize": 5,
864 "scaleDistribution": {
865 "type": "linear"
866 },
867 "showPoints": "never",
868 "spanNulls": false,
869 "stacking": {
870 "group": "A",
871 "mode": "none"
872 },
873 "thresholdsStyle": {
874 "mode": "off"
875 }
876 },
877 "mappings": [],
878 "min": 0,
879 "thresholds": {
880 "mode": "absolute",
881 "steps": [
882 {
883 "color": "green"
884 },
885 {
886 "color": "red",
887 "value": 80
888 }
889 ]
890 },
891 "unit": "percent"
892 },
893 "overrides": [
894 {
895 "matcher": {
896 "id": "byName",
897 "options": "I/O Wait"
898 },
899 "properties": [
900 {
901 "id": "color",
902 "value": {
903 "fixedColor": "dark-blue",
904 "mode": "fixed"
905 }
906 }
907 ]
908 },
909 {
910 "matcher": {
911 "id": "byName",
912 "options": "Load Average (1 Min)"
913 },
914 "properties": [
915 {
916 "id": "color",
917 "value": {
918 "fixedColor": "dark-red",
919 "mode": "fixed"
920 }
921 }
922 ]
923 },
924 {
925 "matcher": {
926 "id": "byName",
927 "options": "Load Average (1 Min)"
928 },
929 "properties": [
930 {
931 "id": "unit",
932 "value": "short"
933 },
934 {
935 "id": "max",
936 "value": 10
937 },
938 {
939 "id": "custom.axisLabel",
940 "value": "Load"
941 }
942 ]
943 }
944 ]
945 },
946 "gridPos": {
947 "h": 7,
948 "w": 12,
949 "x": 0,
950 "y": 9
951 },
952 "id": 12,
953 "interval": "",
954 "links": [],
955 "options": {
956 "legend": {
957 "calcs": [
958 "mean",
959 "lastNotNull"
960 ],
961 "displayMode": "list",
962 "placement": "bottom",
963 "showLegend": true
964 },
965 "tooltip": {
966 "mode": "multi",
967 "sort": "none"
968 }
969 },
970 "pluginVersion": "9.1.1",
971 "targets": [
972 {
973 "alias": "CPU Usage",
974 "datasource": {
975 "type": "influxdb",
976 "uid": "1Y6tKgWVz"
977 },
978 "groupBy": [
979 {
980 "params": [
981 "1m"
982 ],
983 "type": "time"
984 },
985 {
986 "params": [
987 "null"
988 ],
989 "type": "fill"
990 }
991 ],
992 "hide": false,
993 "measurement": "cpustat",
994 "orderByTime": "ASC",
995 "policy": "default",
996 "query": "SELECT mean(\"cpu\") * 100 FROM \"cpustat\" WHERE (\"host\" =~ /^$server$/) AND $timeFilter GROUP BY time(1m) fill(null)",
997 "rawQuery": false,
998 "refId": "A",
999 "resultFormat": "time_series",
1000 "select": [
1001 [
1002 {
1003 "params": [
1004 "cpu"
1005 ],
1006 "type": "field"
1007 },
1008 {
1009 "params": [],
1010 "type": "mean"
1011 },
1012 {
1013 "params": [
1014 "* 100"
1015 ],
1016 "type": "math"
1017 }
1018 ]
1019 ],
1020 "tags": [
1021 {
1022 "key": "host",
1023 "operator": "=",
1024 "value": "proxmox"
1025 }
1026 ]
1027 },
1028 {
1029 "alias": "I/O Wait",
1030 "datasource": {
1031 "type": "influxdb",
1032 "uid": "1Y6tKgWVz"
1033 },
1034 "groupBy": [
1035 {
1036 "params": [
1037 "1m"
1038 ],
1039 "type": "time"
1040 },
1041 {
1042 "params": [
1043 "null"
1044 ],
1045 "type": "fill"
1046 }
1047 ],
1048 "measurement": "cpustat",
1049 "orderByTime": "ASC",
1050 "policy": "default",
1051 "query": "SELECT mean(\"wait\") * 100 FROM \"cpustat\" WHERE (\"host\" =~ /^$server$/) AND $timeFilter GROUP BY time(1m) fill(null)",
1052 "rawQuery": false,
1053 "refId": "B",
1054 "resultFormat": "time_series",
1055 "select": [
1056 [
1057 {
1058 "params": [
1059 "wait"
1060 ],
1061 "type": "field"
1062 },
1063 {
1064 "params": [],
1065 "type": "mean"
1066 },
1067 {
1068 "params": [
1069 " * 100"
1070 ],
1071 "type": "math"
1072 }
1073 ]
1074 ],
1075 "tags": [
1076 {
1077 "key": "host",
1078 "operator": "=",
1079 "value": "proxmox"
1080 }
1081 ]
1082 },
1083 {
1084 "alias": "Load Average (1 Min)",
1085 "datasource": {
1086 "type": "influxdb",
1087 "uid": "1Y6tKgWVz"
1088 },
1089 "groupBy": [
1090 {
1091 "params": [
1092 "1m"
1093 ],
1094 "type": "time"
1095 },
1096 {
1097 "params": [
1098 "null"
1099 ],
1100 "type": "fill"
1101 }
1102 ],
1103 "measurement": "cpustat",
1104 "orderByTime": "ASC",
1105 "policy": "default",
1106 "query": "SELECT mean(\"avg1\") FROM \"cpustat\" WHERE (\"host\" =~ /^$server$/) AND $timeFilter GROUP BY time(1m) fill(null)",
1107 "rawQuery": false,
1108 "refId": "C",
1109 "resultFormat": "time_series",
1110 "select": [
1111 [
1112 {
1113 "params": [
1114 "avg1"
1115 ],
1116 "type": "field"
1117 },
1118 {
1119 "params": [],
1120 "type": "mean"
1121 }
1122 ]
1123 ],
1124 "tags": [
1125 {
1126 "key": "host",
1127 "operator": "=",
1128 "value": "proxmox"
1129 }
1130 ]
1131 }
1132 ],
1133 "title": "Host CPU Usage",
1134 "type": "timeseries"
1135 },
1136 {
1137 "datasource": {
1138 "type": "influxdb",
1139 "uid": "1Y6tKgWVz"
1140 },
1141 "fieldConfig": {
1142 "defaults": {
1143 "color": {
1144 "mode": "palette-classic"
1145 },
1146 "custom": {
1147 "axisCenteredZero": false,
1148 "axisColorMode": "text",
1149 "axisLabel": "",
1150 "axisPlacement": "auto",
1151 "barAlignment": 0,
1152 "drawStyle": "line",
1153 "fillOpacity": 10,
1154 "gradientMode": "none",
1155 "hideFrom": {
1156 "legend": false,
1157 "tooltip": false,
1158 "viz": false
1159 },
1160 "lineInterpolation": "linear",
1161 "lineWidth": 2,
1162 "pointSize": 5,
1163 "scaleDistribution": {
1164 "type": "linear"
1165 },
1166 "showPoints": "never",
1167 "spanNulls": false,
1168 "stacking": {
1169 "group": "A",
1170 "mode": "none"
1171 },
1172 "thresholdsStyle": {
1173 "mode": "off"
1174 }
1175 },
1176 "mappings": [],
1177 "max": 100,
1178 "min": 0,
1179 "thresholds": {
1180 "mode": "absolute",
1181 "steps": [
1182 {
1183 "color": "green"
1184 },
1185 {
1186 "color": "red",
1187 "value": 80
1188 }
1189 ]
1190 },
1191 "unit": "percent"
1192 },
1193 "overrides": []
1194 },
1195 "gridPos": {
1196 "h": 7,
1197 "w": 12,
1198 "x": 12,
1199 "y": 9
1200 },
1201 "id": 14,
1202 "links": [],
1203 "options": {
1204 "legend": {
1205 "calcs": [
1206 "mean",
1207 "lastNotNull",
1208 "max",
1209 "min"
1210 ],
1211 "displayMode": "table",
1212 "placement": "bottom",
1213 "showLegend": true
1214 },
1215 "tooltip": {
1216 "mode": "multi",
1217 "sort": "none"
1218 }
1219 },
1220 "pluginVersion": "9.1.1",
1221 "targets": [
1222 {
1223 "alias": "Memory Use",
1224 "datasource": {
1225 "type": "influxdb",
1226 "uid": "1Y6tKgWVz"
1227 },
1228 "groupBy": [
1229 {
1230 "params": [
1231 "$__interval"
1232 ],
1233 "type": "time"
1234 },
1235 {
1236 "params": [
1237 "null"
1238 ],
1239 "type": "fill"
1240 }
1241 ],
1242 "measurement": "memory",
1243 "orderByTime": "ASC",
1244 "policy": "default",
1245 "query": "SELECT mean(\"memused\")/mean(\"memtotal\") * 100 FROM \"memory\" WHERE (\"host\" = 'proxmox') AND $timeFilter GROUP BY time(1m) fill(null)",
1246 "rawQuery": true,
1247 "refId": "A",
1248 "resultFormat": "time_series",
1249 "select": [
1250 [
1251 {
1252 "params": [
1253 "memused"
1254 ],
1255 "type": "field"
1256 },
1257 {
1258 "params": [],
1259 "type": "mean"
1260 }
1261 ]
1262 ],
1263 "tags": [
1264 {
1265 "key": "host",
1266 "operator": "=~",
1267 "value": "/^$server$/"
1268 }
1269 ]
1270 }
1271 ],
1272 "title": "Host Memory Usage",
1273 "type": "timeseries"
1274 },
1275 {
1276 "datasource": {
1277 "type": "prometheus",
1278 "uid": "t-6Lw3i4z"
1279 },
1280 "fieldConfig": {
1281 "defaults": {
1282 "color": {
1283 "mode": "palette-classic"
1284 },
1285 "custom": {
1286 "axisCenteredZero": false,
1287 "axisColorMode": "text",
1288 "axisLabel": "",
1289 "axisPlacement": "left",
1290 "barAlignment": 0,
1291 "drawStyle": "line",
1292 "fillOpacity": 10,
1293 "gradientMode": "opacity",
1294 "hideFrom": {
1295 "legend": false,
1296 "tooltip": false,
1297 "viz": false
1298 },
1299 "lineInterpolation": "linear",
1300 "lineStyle": {
1301 "fill": "solid"
1302 },
1303 "lineWidth": 2,
1304 "pointSize": 5,
1305 "scaleDistribution": {
1306 "type": "linear"
1307 },
1308 "showPoints": "auto",
1309 "spanNulls": false,
1310 "stacking": {
1311 "group": "A",
1312 "mode": "none"
1313 },
1314 "thresholdsStyle": {
1315 "mode": "off"
1316 }
1317 },
1318 "mappings": [],
1319 "thresholds": {
1320 "mode": "absolute",
1321 "steps": [
1322 {
1323 "color": "green"
1324 },
1325 {
1326 "color": "red",
1327 "value": 80
1328 }
1329 ]
1330 },
1331 "unit": "percent"
1332 },
1333 "overrides": []
1334 },
1335 "gridPos": {
1336 "h": 8,
1337 "w": 12,
1338 "x": 0,
1339 "y": 16
1340 },
1341 "id": 135,
1342 "options": {
1343 "legend": {
1344 "calcs": [
1345 "last"
1346 ],
1347 "displayMode": "list",
1348 "placement": "bottom",
1349 "showLegend": true
1350 },
1351 "tooltip": {
1352 "mode": "single",
1353 "sort": "none"
1354 }
1355 },
1356 "targets": [
1357 {
1358 "datasource": {
1359 "type": "prometheus",
1360 "uid": "t-6Lw3i4z"
1361 },
1362 "editorMode": "code",
1363 "expr": "100 - (avg by (instance) (rate(node_cpu_seconds_total{instance!=\"proxmox.home.local:9100\",mode=\"idle\"}[1m])) * 100)",
1364 "instant": false,
1365 "interval": "",
1366 "legendFormat": "{{instance}}",
1367 "range": true,
1368 "refId": "A"
1369 }
1370 ],
1371 "title": "VM CPU Usage",
1372 "type": "timeseries"
1373 },
1374 {
1375 "datasource": {
1376 "type": "prometheus",
1377 "uid": "t-6Lw3i4z"
1378 },
1379 "fieldConfig": {
1380 "defaults": {
1381 "color": {
1382 "mode": "palette-classic"
1383 },
1384 "custom": {
1385 "axisCenteredZero": false,
1386 "axisColorMode": "text",
1387 "axisLabel": "",
1388 "axisPlacement": "left",
1389 "barAlignment": 0,
1390 "drawStyle": "line",
1391 "fillOpacity": 10,
1392 "gradientMode": "opacity",
1393 "hideFrom": {
1394 "legend": false,
1395 "tooltip": false,
1396 "viz": false
1397 },
1398 "lineInterpolation": "linear",
1399 "lineStyle": {
1400 "fill": "solid"
1401 },
1402 "lineWidth": 2,
1403 "pointSize": 5,
1404 "scaleDistribution": {
1405 "type": "linear"
1406 },
1407 "showPoints": "auto",
1408 "spanNulls": false,
1409 "stacking": {
1410 "group": "A",
1411 "mode": "none"
1412 },
1413 "thresholdsStyle": {
1414 "mode": "off"
1415 }
1416 },
1417 "mappings": [],
1418 "thresholds": {
1419 "mode": "absolute",
1420 "steps": [
1421 {
1422 "color": "green"
1423 },
1424 {
1425 "color": "red",
1426 "value": 80
1427 }
1428 ]
1429 },
1430 "unit": "decbytes"
1431 },
1432 "overrides": []
1433 },
1434 "gridPos": {
1435 "h": 8,
1436 "w": 12,
1437 "x": 12,
1438 "y": 16
1439 },
1440 "id": 134,
1441 "options": {
1442 "legend": {
1443 "calcs": [
1444 "last"
1445 ],
1446 "displayMode": "list",
1447 "placement": "bottom",
1448 "showLegend": true
1449 },
1450 "tooltip": {
1451 "mode": "single",
1452 "sort": "none"
1453 }
1454 },
1455 "targets": [
1456 {
1457 "datasource": {
1458 "type": "prometheus",
1459 "uid": "t-6Lw3i4z"
1460 },
1461 "editorMode": "builder",
1462 "expr": "node_memory_MemTotal_bytes{instance!=\"proxmox.home.local:9100\"} - node_memory_MemFree_bytes{instance!=\"proxmox.home.local:9100\"} - (node_memory_Cached_bytes{instance!=\"proxmox.home.local:9100\"} + node_memory_Buffers_bytes{instance!=\"proxmox.home.local:9100\"} + node_memory_SReclaimable_bytes{instance!=\"proxmox.home.local:9100\"})",
1463 "instant": false,
1464 "interval": "",
1465 "legendFormat": "{{instance}}",
1466 "range": true,
1467 "refId": "A"
1468 }
1469 ],
1470 "title": "VM Memory Usage",
1471 "type": "timeseries"
1472 },
1473 {
1474 "datasource": {
1475 "type": "prometheus",
1476 "uid": "t-6Lw3i4z"
1477 },
1478 "description": "Disk space used of all filesystems mounted",
1479 "fieldConfig": {
1480 "defaults": {
1481 "color": {
1482 "mode": "palette-classic"
1483 },
1484 "custom": {
1485 "axisCenteredZero": false,
1486 "axisColorMode": "text",
1487 "axisLabel": "",
1488 "axisPlacement": "auto",
1489 "barAlignment": 0,
1490 "drawStyle": "line",
1491 "fillOpacity": 40,
1492 "gradientMode": "opacity",
1493 "hideFrom": {
1494 "legend": false,
1495 "tooltip": false,
1496 "viz": false
1497 },
1498 "lineInterpolation": "linear",
1499 "lineStyle": {
1500 "fill": "solid"
1501 },
1502 "lineWidth": 2,
1503 "pointSize": 5,
1504 "scaleDistribution": {
1505 "type": "linear"
1506 },
1507 "showPoints": "never",
1508 "spanNulls": true,
1509 "stacking": {
1510 "group": "A",
1511 "mode": "none"
1512 },
1513 "thresholdsStyle": {
1514 "mode": "off"
1515 }
1516 },
1517 "links": [],
1518 "mappings": [],
1519 "max": 100,
1520 "min": 0,
1521 "thresholds": {
1522 "mode": "absolute",
1523 "steps": [
1524 {
1525 "color": "green"
1526 },
1527 {
1528 "color": "red",
1529 "value": 80
1530 }
1531 ]
1532 },
1533 "unit": "percent"
1534 },
1535 "overrides": []
1536 },
1537 "gridPos": {
1538 "h": 7,
1539 "w": 24,
1540 "x": 0,
1541 "y": 24
1542 },
1543 "id": 125,
1544 "links": [],
1545 "options": {
1546 "legend": {
1547 "calcs": [
1548 "lastNotNull"
1549 ],
1550 "displayMode": "table",
1551 "placement": "right",
1552 "showLegend": true,
1553 "sortBy": "Last *",
1554 "sortDesc": true
1555 },
1556 "tooltip": {
1557 "mode": "multi",
1558 "sort": "none"
1559 }
1560 },
1561 "pluginVersion": "9.3.2",
1562 "targets": [
1563 {
1564 "datasource": {
1565 "type": "prometheus",
1566 "uid": "t-6Lw3i4z"
1567 },
1568 "editorMode": "code",
1569 "expr": "100 - ((node_filesystem_avail_bytes{instance=~\".+\",device!~'rootfs'} * 100) / node_filesystem_size_bytes{instance=~\".+\",device!~'rootfs'})",
1570 "format": "time_series",
1571 "interval": "",
1572 "intervalFactor": 1,
1573 "legendFormat": "{{instance}} - {{mountpoint}}",
1574 "range": true,
1575 "refId": "A",
1576 "step": 240
1577 }
1578 ],
1579 "title": "VMs Disk Space Used",
1580 "type": "timeseries"
1581 },
1582 {
1583 "datasource": {
1584 "type": "influxdb",
1585 "uid": "1Y6tKgWVz"
1586 },
1587 "fieldConfig": {
1588 "defaults": {
1589 "color": {
1590 "mode": "palette-classic"
1591 },
1592 "custom": {
1593 "axisCenteredZero": false,
1594 "axisColorMode": "text",
1595 "axisLabel": "",
1596 "axisPlacement": "auto",
1597 "barAlignment": 0,
1598 "drawStyle": "line",
1599 "fillOpacity": 10,
1600 "gradientMode": "none",
1601 "hideFrom": {
1602 "legend": false,
1603 "tooltip": false,
1604 "viz": false
1605 },
1606 "lineInterpolation": "linear",
1607 "lineWidth": 1,
1608 "pointSize": 5,
1609 "scaleDistribution": {
1610 "type": "linear"
1611 },
1612 "showPoints": "never",
1613 "spanNulls": false,
1614 "stacking": {
1615 "group": "A",
1616 "mode": "none"
1617 },
1618 "thresholdsStyle": {
1619 "mode": "off"
1620 }
1621 },
1622 "mappings": [],
1623 "thresholds": {
1624 "mode": "absolute",
1625 "steps": [
1626 {
1627 "color": "green"
1628 },
1629 {
1630 "color": "red",
1631 "value": 80
1632 }
1633 ]
1634 },
1635 "unit": "bps"
1636 },
1637 "overrides": []
1638 },
1639 "gridPos": {
1640 "h": 6,
1641 "w": 12,
1642 "x": 0,
1643 "y": 31
1644 },
1645 "id": 41,
1646 "interval": "",
1647 "links": [],
1648 "options": {
1649 "legend": {
1650 "calcs": [
1651 "mean",
1652 "lastNotNull"
1653 ],
1654 "displayMode": "table",
1655 "placement": "right",
1656 "showLegend": true,
1657 "sortBy": "Mean",
1658 "sortDesc": true
1659 },
1660 "tooltip": {
1661 "mode": "multi",
1662 "sort": "none"
1663 }
1664 },
1665 "pluginVersion": "9.3.2",
1666 "targets": [
1667 {
1668 "alias": "$tag_host",
1669 "datasource": {
1670 "type": "influxdb",
1671 "uid": "1Y6tKgWVz"
1672 },
1673 "groupBy": [
1674 {
1675 "params": [
1676 "$__interval"
1677 ],
1678 "type": "time"
1679 },
1680 {
1681 "params": [
1682 "host"
1683 ],
1684 "type": "tag"
1685 },
1686 {
1687 "params": [
1688 "null"
1689 ],
1690 "type": "fill"
1691 }
1692 ],
1693 "measurement": "system",
1694 "orderByTime": "ASC",
1695 "policy": "default",
1696 "query": "SELECT non_negative_derivative(mean(\"netin\"), 10s) FROM \"system\" WHERE (\"object\" = 'qemu') AND $timeFilter GROUP BY time($__interval), \"host\" fill(null)",
1697 "rawQuery": true,
1698 "refId": "A",
1699 "resultFormat": "time_series",
1700 "select": [
1701 [
1702 {
1703 "params": [
1704 "netin"
1705 ],
1706 "type": "field"
1707 },
1708 {
1709 "params": [],
1710 "type": "mean"
1711 },
1712 {
1713 "params": [
1714 "10s"
1715 ],
1716 "type": "non_negative_derivative"
1717 }
1718 ]
1719 ],
1720 "tags": [
1721 {
1722 "key": "nodename",
1723 "operator": "=~",
1724 "value": "/^$server$/"
1725 },
1726 {
1727 "condition": "AND",
1728 "key": "object",
1729 "operator": "=",
1730 "value": "qemu"
1731 }
1732 ]
1733 }
1734 ],
1735 "title": "VMs Traffic In",
1736 "type": "timeseries"
1737 },
1738 {
1739 "datasource": {
1740 "type": "influxdb",
1741 "uid": "1Y6tKgWVz"
1742 },
1743 "fieldConfig": {
1744 "defaults": {
1745 "color": {
1746 "mode": "palette-classic"
1747 },
1748 "custom": {
1749 "axisCenteredZero": false,
1750 "axisColorMode": "text",
1751 "axisLabel": "",
1752 "axisPlacement": "auto",
1753 "barAlignment": 0,
1754 "drawStyle": "line",
1755 "fillOpacity": 10,
1756 "gradientMode": "none",
1757 "hideFrom": {
1758 "legend": false,
1759 "tooltip": false,
1760 "viz": false
1761 },
1762 "lineInterpolation": "linear",
1763 "lineWidth": 1,
1764 "pointSize": 5,
1765 "scaleDistribution": {
1766 "type": "linear"
1767 },
1768 "showPoints": "never",
1769 "spanNulls": false,
1770 "stacking": {
1771 "group": "A",
1772 "mode": "none"
1773 },
1774 "thresholdsStyle": {
1775 "mode": "off"
1776 }
1777 },
1778 "mappings": [],
1779 "thresholds": {
1780 "mode": "absolute",
1781 "steps": [
1782 {
1783 "color": "green"
1784 },
1785 {
1786 "color": "red",
1787 "value": 80
1788 }
1789 ]
1790 },
1791 "unit": "bps"
1792 },
1793 "overrides": []
1794 },
1795 "gridPos": {
1796 "h": 6,
1797 "w": 12,
1798 "x": 12,
1799 "y": 31
1800 },
1801 "id": 43,
1802 "interval": "",
1803 "links": [],
1804 "options": {
1805 "legend": {
1806 "calcs": [
1807 "mean",
1808 "lastNotNull"
1809 ],
1810 "displayMode": "table",
1811 "placement": "right",
1812 "showLegend": true,
1813 "sortBy": "Mean",
1814 "sortDesc": true
1815 },
1816 "tooltip": {
1817 "mode": "multi",
1818 "sort": "none"
1819 }
1820 },
1821 "pluginVersion": "9.3.2",
1822 "targets": [
1823 {
1824 "alias": "$tag_host",
1825 "datasource": {
1826 "type": "influxdb",
1827 "uid": "1Y6tKgWVz"
1828 },
1829 "groupBy": [
1830 {
1831 "params": [
1832 "$__interval"
1833 ],
1834 "type": "time"
1835 },
1836 {
1837 "params": [
1838 "host"
1839 ],
1840 "type": "tag"
1841 },
1842 {
1843 "params": [
1844 "null"
1845 ],
1846 "type": "fill"
1847 }
1848 ],
1849 "measurement": "system",
1850 "orderByTime": "ASC",
1851 "policy": "default",
1852 "query": "SELECT non_negative_derivative(mean(\"netout\"), 10s) FROM \"system\" WHERE (\"object\" = 'qemu') AND $timeFilter GROUP BY time($__interval), \"host\" fill(null)",
1853 "rawQuery": true,
1854 "refId": "A",
1855 "resultFormat": "time_series",
1856 "select": [
1857 [
1858 {
1859 "params": [
1860 "netout"
1861 ],
1862 "type": "field"
1863 },
1864 {
1865 "params": [],
1866 "type": "mean"
1867 },
1868 {
1869 "params": [
1870 "10s"
1871 ],
1872 "type": "non_negative_derivative"
1873 }
1874 ]
1875 ],
1876 "tags": [
1877 {
1878 "key": "nodename",
1879 "operator": "=~",
1880 "value": "/^$server$/"
1881 },
1882 {
1883 "condition": "AND",
1884 "key": "object",
1885 "operator": "=",
1886 "value": "qemu"
1887 }
1888 ]
1889 }
1890 ],
1891 "title": "VMs Traffic Out",
1892 "type": "timeseries"
1893 },
1894 {
1895 "datasource": {
1896 "type": "prometheus",
1897 "uid": "t-6Lw3i4z"
1898 },
1899 "fieldConfig": {
1900 "defaults": {
1901 "color": {
1902 "mode": "palette-classic"
1903 },
1904 "custom": {
1905 "axisCenteredZero": false,
1906 "axisColorMode": "text",
1907 "axisLabel": "",
1908 "axisPlacement": "auto",
1909 "barAlignment": 0,
1910 "drawStyle": "line",
1911 "fillOpacity": 50,
1912 "gradientMode": "none",
1913 "hideFrom": {
1914 "legend": false,
1915 "tooltip": false,
1916 "viz": false
1917 },
1918 "lineInterpolation": "linear",
1919 "lineWidth": 1,
1920 "pointSize": 5,
1921 "scaleDistribution": {
1922 "type": "linear"
1923 },
1924 "showPoints": "never",
1925 "spanNulls": false,
1926 "stacking": {
1927 "group": "A",
1928 "mode": "normal"
1929 },
1930 "thresholdsStyle": {
1931 "mode": "off"
1932 }
1933 },
1934 "mappings": [],
1935 "thresholds": {
1936 "mode": "absolute",
1937 "steps": [
1938 {
1939 "color": "green"
1940 },
1941 {
1942 "color": "red",
1943 "value": 80
1944 }
1945 ]
1946 },
1947 "unit": "percent"
1948 },
1949 "overrides": []
1950 },
1951 "gridPos": {
1952 "h": 7,
1953 "w": 12,
1954 "x": 0,
1955 "y": 37
1956 },
1957 "id": 25,
1958 "links": [],
1959 "options": {
1960 "legend": {
1961 "calcs": [
1962 "mean",
1963 "last"
1964 ],
1965 "displayMode": "table",
1966 "placement": "right",
1967 "showLegend": true,
1968 "sortBy": "Mean",
1969 "sortDesc": true
1970 },
1971 "tooltip": {
1972 "mode": "multi",
1973 "sort": "none"
1974 }
1975 },
1976 "pluginVersion": "9.3.2",
1977 "targets": [
1978 {
1979 "datasource": {
1980 "type": "prometheus",
1981 "uid": "t-6Lw3i4z"
1982 },
1983 "editorMode": "code",
1984 "expr": "sum(rate(container_cpu_usage_seconds_total{name=~\".+\"}[$__interval])) by (name) * 100",
1985 "hide": false,
1986 "interval": "",
1987 "intervalFactor": 2,
1988 "legendFormat": "{{name}}",
1989 "metric": "",
1990 "range": true,
1991 "refId": "F",
1992 "step": 240
1993 }
1994 ],
1995 "title": "Container CPU Usage",
1996 "type": "timeseries"
1997 },
1998 {
1999 "datasource": {
2000 "type": "prometheus",
2001 "uid": "t-6Lw3i4z"
2002 },
2003 "fieldConfig": {
2004 "defaults": {
2005 "color": {
2006 "mode": "palette-classic"
2007 },
2008 "custom": {
2009 "axisCenteredZero": false,
2010 "axisColorMode": "text",
2011 "axisLabel": "",
2012 "axisPlacement": "auto",
2013 "barAlignment": 0,
2014 "drawStyle": "line",
2015 "fillOpacity": 30,
2016 "gradientMode": "none",
2017 "hideFrom": {
2018 "legend": false,
2019 "tooltip": false,
2020 "viz": false
2021 },
2022 "lineInterpolation": "linear",
2023 "lineWidth": 2,
2024 "pointSize": 5,
2025 "scaleDistribution": {
2026 "type": "linear"
2027 },
2028 "showPoints": "never",
2029 "spanNulls": false,
2030 "stacking": {
2031 "group": "A",
2032 "mode": "normal"
2033 },
2034 "thresholdsStyle": {
2035 "mode": "off"
2036 }
2037 },
2038 "mappings": [],
2039 "thresholds": {
2040 "mode": "absolute",
2041 "steps": [
2042 {
2043 "color": "green"
2044 },
2045 {
2046 "color": "red",
2047 "value": 80
2048 }
2049 ]
2050 },
2051 "unit": "bytes"
2052 },
2053 "overrides": []
2054 },
2055 "gridPos": {
2056 "h": 7,
2057 "w": 12,
2058 "x": 12,
2059 "y": 37
2060 },
2061 "id": 27,
2062 "links": [],
2063 "options": {
2064 "legend": {
2065 "calcs": [
2066 "mean",
2067 "last"
2068 ],
2069 "displayMode": "table",
2070 "placement": "right",
2071 "showLegend": true,
2072 "sortBy": "Last",
2073 "sortDesc": true
2074 },
2075 "tooltip": {
2076 "mode": "multi",
2077 "sort": "none"
2078 }
2079 },
2080 "pluginVersion": "9.3.2",
2081 "targets": [
2082 {
2083 "datasource": {
2084 "type": "prometheus",
2085 "uid": "t-6Lw3i4z"
2086 },
2087 "expr": "sum(container_memory_rss{name=~\".+\"}) by (name)",
2088 "hide": false,
2089 "intervalFactor": 2,
2090 "legendFormat": "{{name}}",
2091 "refId": "A",
2092 "step": 240
2093 },
2094 {
2095 "datasource": {
2096 "type": "prometheus",
2097 "uid": "t-6Lw3i4z"
2098 },
2099 "expr": "container_memory_usage_bytes{name=~\".+\"}",
2100 "hide": true,
2101 "intervalFactor": 2,
2102 "legendFormat": "{{name}}",
2103 "refId": "B",
2104 "step": 240
2105 }
2106 ],
2107 "title": "Container Memory Usage",
2108 "type": "timeseries"
2109 },
2110 {
2111 "datasource": {
2112 "type": "prometheus",
2113 "uid": "t-6Lw3i4z"
2114 },
2115 "fieldConfig": {
2116 "defaults": {
2117 "color": {
2118 "mode": "palette-classic"
2119 },
2120 "custom": {
2121 "axisCenteredZero": false,
2122 "axisColorMode": "text",
2123 "axisLabel": "",
2124 "axisPlacement": "auto",
2125 "barAlignment": 0,
2126 "drawStyle": "line",
2127 "fillOpacity": 10,
2128 "gradientMode": "none",
2129 "hideFrom": {
2130 "legend": false,
2131 "tooltip": false,
2132 "viz": false
2133 },
2134 "lineInterpolation": "linear",
2135 "lineWidth": 2,
2136 "pointSize": 5,
2137 "scaleDistribution": {
2138 "type": "linear"
2139 },
2140 "showPoints": "never",
2141 "spanNulls": false,
2142 "stacking": {
2143 "group": "A",
2144 "mode": "none"
2145 },
2146 "thresholdsStyle": {
2147 "mode": "off"
2148 }
2149 },
2150 "mappings": [],
2151 "thresholds": {
2152 "mode": "absolute",
2153 "steps": [
2154 {
2155 "color": "green"
2156 },
2157 {
2158 "color": "red",
2159 "value": 80
2160 }
2161 ]
2162 },
2163 "unit": "Bps"
2164 },
2165 "overrides": []
2166 },
2167 "gridPos": {
2168 "h": 7,
2169 "w": 12,
2170 "x": 0,
2171 "y": 44
2172 },
2173 "id": 45,
2174 "links": [],
2175 "options": {
2176 "legend": {
2177 "calcs": [
2178 "mean",
2179 "last"
2180 ],
2181 "displayMode": "table",
2182 "placement": "right",
2183 "showLegend": true
2184 },
2185 "tooltip": {
2186 "mode": "multi",
2187 "sort": "none"
2188 }
2189 },
2190 "pluginVersion": "9.3.2",
2191 "targets": [
2192 {
2193 "datasource": {
2194 "type": "prometheus",
2195 "uid": "t-6Lw3i4z"
2196 },
2197 "editorMode": "code",
2198 "expr": "sum(rate(container_network_receive_bytes_total{name=~\".+\"}[$__interval])) by (name)",
2199 "intervalFactor": 2,
2200 "legendFormat": "{{name}}",
2201 "range": true,
2202 "refId": "A",
2203 "step": 240
2204 },
2205 {
2206 "datasource": {
2207 "type": "prometheus",
2208 "uid": "t-6Lw3i4z"
2209 },
2210 "expr": "- rate(container_network_transmit_bytes_total{name=~\".+\"}[$interval])",
2211 "hide": true,
2212 "intervalFactor": 2,
2213 "legendFormat": "{{name}}",
2214 "refId": "B",
2215 "step": 10
2216 }
2217 ],
2218 "title": "Container Traffic In",
2219 "type": "timeseries"
2220 },
2221 {
2222 "datasource": {
2223 "type": "prometheus",
2224 "uid": "t-6Lw3i4z"
2225 },
2226 "fieldConfig": {
2227 "defaults": {
2228 "color": {
2229 "mode": "palette-classic"
2230 },
2231 "custom": {
2232 "axisCenteredZero": false,
2233 "axisColorMode": "text",
2234 "axisLabel": "",
2235 "axisPlacement": "auto",
2236 "barAlignment": 0,
2237 "drawStyle": "line",
2238 "fillOpacity": 10,
2239 "gradientMode": "none",
2240 "hideFrom": {
2241 "legend": false,
2242 "tooltip": false,
2243 "viz": false
2244 },
2245 "lineInterpolation": "linear",
2246 "lineWidth": 2,
2247 "pointSize": 5,
2248 "scaleDistribution": {
2249 "type": "linear"
2250 },
2251 "showPoints": "never",
2252 "spanNulls": false,
2253 "stacking": {
2254 "group": "A",
2255 "mode": "none"
2256 },
2257 "thresholdsStyle": {
2258 "mode": "off"
2259 }
2260 },
2261 "mappings": [],
2262 "thresholds": {
2263 "mode": "absolute",
2264 "steps": [
2265 {
2266 "color": "green"
2267 },
2268 {
2269 "color": "red",
2270 "value": 80
2271 }
2272 ]
2273 },
2274 "unit": "Bps"
2275 },
2276 "overrides": []
2277 },
2278 "gridPos": {
2279 "h": 7,
2280 "w": 12,
2281 "x": 12,
2282 "y": 44
2283 },
2284 "id": 47,
2285 "links": [],
2286 "options": {
2287 "legend": {
2288 "calcs": [
2289 "mean",
2290 "last"
2291 ],
2292 "displayMode": "table",
2293 "placement": "right",
2294 "showLegend": true
2295 },
2296 "tooltip": {
2297 "mode": "multi",
2298 "sort": "none"
2299 }
2300 },
2301 "pluginVersion": "9.3.2",
2302 "targets": [
2303 {
2304 "datasource": {
2305 "type": "prometheus",
2306 "uid": "t-6Lw3i4z"
2307 },
2308 "editorMode": "code",
2309 "expr": "sum(rate(container_network_transmit_bytes_total{name=~\".+\"}[$__interval])) by (name)",
2310 "intervalFactor": 2,
2311 "legendFormat": "{{name}}",
2312 "range": true,
2313 "refId": "A",
2314 "step": 240
2315 },
2316 {
2317 "datasource": {
2318 "type": "prometheus",
2319 "uid": "t-6Lw3i4z"
2320 },
2321 "expr": "rate(container_network_transmit_bytes_total{id=\"/\"}[$interval])",
2322 "hide": true,
2323 "intervalFactor": 2,
2324 "legendFormat": "",
2325 "refId": "B",
2326 "step": 10
2327 }
2328 ],
2329 "title": "Container Traffic Out",
2330 "type": "timeseries"
2331 },
2332 {
2333 "collapsed": true,
2334 "gridPos": {
2335 "h": 1,
2336 "w": 24,
2337 "x": 0,
2338 "y": 51
2339 },
2340 "id": 127,
2341 "panels": [
2342 {
2343 "datasource": {
2344 "type": "loki",
2345 "uid": "AzGHyE5Vz"
2346 },
2347 "gridPos": {
2348 "h": 15,
2349 "w": 24,
2350 "x": 0,
2351 "y": 11
2352 },
2353 "id": 131,
2354 "options": {
2355 "dedupStrategy": "signature",
2356 "enableLogDetails": true,
2357 "prettifyLogMessage": false,
2358 "showCommonLabels": false,
2359 "showLabels": true,
2360 "showTime": false,
2361 "sortOrder": "Ascending",
2362 "wrapLogMessage": false
2363 },
2364 "targets": [
2365 {
2366 "datasource": {
2367 "type": "loki",
2368 "uid": "AzGHyE5Vz"
2369 },
2370 "editorMode": "code",
2371 "expr": "{container_name=~\"$container_name\"}",
2372 "queryType": "range",
2373 "refId": "A"
2374 }
2375 ],
2376 "title": "Container Logs - \"$container_name\"",
2377 "type": "logs"
2378 }
2379 ],
2380 "title": "Container Logs",
2381 "type": "row"
2382 },
2383 {
2384 "collapsed": true,
2385 "gridPos": {
2386 "h": 1,
2387 "w": 24,
2388 "x": 0,
2389 "y": 52
2390 },
2391 "id": 133,
2392 "panels": [
2393 {
2394 "datasource": {
2395 "type": "loki",
2396 "uid": "AzGHyE5Vz"
2397 },
2398 "gridPos": {
2399 "h": 14,
2400 "w": 24,
2401 "x": 0,
2402 "y": 9
2403 },
2404 "id": 130,
2405 "options": {
2406 "dedupStrategy": "signature",
2407 "enableLogDetails": true,
2408 "prettifyLogMessage": true,
2409 "showCommonLabels": false,
2410 "showLabels": false,
2411 "showTime": true,
2412 "sortOrder": "Ascending",
2413 "wrapLogMessage": false
2414 },
2415 "targets": [
2416 {
2417 "datasource": {
2418 "type": "loki",
2419 "uid": "AzGHyE5Vz"
2420 },
2421 "editorMode": "code",
2422 "expr": "{job=\"systemd-journal\",hostname=~\"$vm_name\",unit=~\"$vm_service\"} | logfmt | level = `error`",
2423 "queryType": "range",
2424 "refId": "A"
2425 }
2426 ],
2427 "title": "VM Errors - \"$vm_name\" - \"$vm_service\"",
2428 "type": "logs"
2429 }
2430 ],
2431 "title": "VM Logs",
2432 "type": "row"
2433 },
2434 {
2435 "collapsed": true,
2436 "gridPos": {
2437 "h": 1,
2438 "w": 24,
2439 "x": 0,
2440 "y": 53
2441 },
2442 "id": 51,
2443 "panels": [
2444 {
2445 "datasource": {
2446 "type": "prometheus",
2447 "uid": "t-6Lw3i4z"
2448 },
2449 "fieldConfig": {
2450 "defaults": {
2451 "color": {
2452 "mode": "palette-classic"
2453 },
2454 "custom": {
2455 "axisCenteredZero": false,
2456 "axisColorMode": "text",
2457 "axisLabel": "",
2458 "axisPlacement": "auto",
2459 "barAlignment": 0,
2460 "drawStyle": "line",
2461 "fillOpacity": 10,
2462 "gradientMode": "none",
2463 "hideFrom": {
2464 "legend": false,
2465 "tooltip": false,
2466 "viz": false
2467 },
2468 "lineInterpolation": "linear",
2469 "lineWidth": 1,
2470 "pointSize": 5,
2471 "scaleDistribution": {
2472 "type": "linear"
2473 },
2474 "showPoints": "never",
2475 "spanNulls": false,
2476 "stacking": {
2477 "group": "A",
2478 "mode": "none"
2479 },
2480 "thresholdsStyle": {
2481 "mode": "off"
2482 }
2483 },
2484 "mappings": [],
2485 "thresholds": {
2486 "mode": "absolute",
2487 "steps": [
2488 {
2489 "color": "green"
2490 },
2491 {
2492 "color": "red",
2493 "value": 80
2494 }
2495 ]
2496 },
2497 "unit": "short"
2498 },
2499 "overrides": [
2500 {
2501 "matcher": {
2502 "id": "byName",
2503 "options": "pihole"
2504 },
2505 "properties": [
2506 {
2507 "id": "color",
2508 "value": {
2509 "fixedColor": "super-light-blue",
2510 "mode": "fixed"
2511 }
2512 }
2513 ]
2514 }
2515 ]
2516 },
2517 "gridPos": {
2518 "h": 5,
2519 "w": 8,
2520 "x": 0,
2521 "y": 50
2522 },
2523 "id": 53,
2524 "links": [],
2525 "options": {
2526 "legend": {
2527 "calcs": [],
2528 "displayMode": "list",
2529 "placement": "bottom",
2530 "showLegend": false
2531 },
2532 "tooltip": {
2533 "mode": "multi",
2534 "sort": "none"
2535 }
2536 },
2537 "pluginVersion": "9.3.2",
2538 "targets": [
2539 {
2540 "datasource": {
2541 "type": "prometheus",
2542 "uid": "t-6Lw3i4z"
2543 },
2544 "editorMode": "builder",
2545 "expr": "pihole_dns_queries_all_types{hostname=~\"192.168.20.34\"}",
2546 "interval": "",
2547 "legendFormat": "{{ job }}",
2548 "range": true,
2549 "refId": "A"
2550 }
2551 ],
2552 "title": "DNS queries all of types",
2553 "transparent": true,
2554 "type": "timeseries"
2555 },
2556 {
2557 "datasource": {
2558 "type": "prometheus",
2559 "uid": "t-6Lw3i4z"
2560 },
2561 "fieldConfig": {
2562 "defaults": {
2563 "color": {
2564 "mode": "palette-classic"
2565 },
2566 "custom": {
2567 "axisCenteredZero": false,
2568 "axisColorMode": "text",
2569 "axisLabel": "",
2570 "axisPlacement": "auto",
2571 "barAlignment": 0,
2572 "drawStyle": "line",
2573 "fillOpacity": 10,
2574 "gradientMode": "none",
2575 "hideFrom": {
2576 "legend": false,
2577 "tooltip": false,
2578 "viz": false
2579 },
2580 "lineInterpolation": "linear",
2581 "lineWidth": 1,
2582 "pointSize": 5,
2583 "scaleDistribution": {
2584 "type": "linear"
2585 },
2586 "showPoints": "never",
2587 "spanNulls": false,
2588 "stacking": {
2589 "group": "A",
2590 "mode": "none"
2591 },
2592 "thresholdsStyle": {
2593 "mode": "off"
2594 }
2595 },
2596 "mappings": [],
2597 "thresholds": {
2598 "mode": "absolute",
2599 "steps": [
2600 {
2601 "color": "green"
2602 },
2603 {
2604 "color": "red",
2605 "value": 80
2606 }
2607 ]
2608 },
2609 "unit": "short"
2610 },
2611 "overrides": [
2612 {
2613 "matcher": {
2614 "id": "byName",
2615 "options": "pihole"
2616 },
2617 "properties": [
2618 {
2619 "id": "color",
2620 "value": {
2621 "fixedColor": "light-red",
2622 "mode": "fixed"
2623 }
2624 }
2625 ]
2626 }
2627 ]
2628 },
2629 "gridPos": {
2630 "h": 5,
2631 "w": 8,
2632 "x": 8,
2633 "y": 50
2634 },
2635 "id": 55,
2636 "links": [],
2637 "options": {
2638 "legend": {
2639 "calcs": [],
2640 "displayMode": "list",
2641 "placement": "bottom",
2642 "showLegend": false
2643 },
2644 "tooltip": {
2645 "mode": "multi",
2646 "sort": "none"
2647 }
2648 },
2649 "pluginVersion": "9.3.2",
2650 "targets": [
2651 {
2652 "datasource": {
2653 "type": "prometheus",
2654 "uid": "t-6Lw3i4z"
2655 },
2656 "editorMode": "builder",
2657 "expr": "pihole_ads_blocked_today{hostname=~\"192.168.20.34\"}",
2658 "instant": false,
2659 "interval": "",
2660 "legendFormat": "{{ job }}",
2661 "refId": "A"
2662 }
2663 ],
2664 "title": "Ads blocked (today)",
2665 "transparent": true,
2666 "type": "timeseries"
2667 },
2668 {
2669 "aliasColors": {
2670 "pihole": "super-light-red"
2671 },
2672 "bars": false,
2673 "dashLength": 10,
2674 "dashes": false,
2675 "datasource": {
2676 "type": "prometheus",
2677 "uid": "t-6Lw3i4z"
2678 },
2679 "fill": 1,
2680 "fillGradient": 0,
2681 "gridPos": {
2682 "h": 5,
2683 "w": 8,
2684 "x": 16,
2685 "y": 50
2686 },
2687 "hiddenSeries": false,
2688 "id": 57,
2689 "legend": {
2690 "avg": false,
2691 "current": false,
2692 "max": false,
2693 "min": false,
2694 "show": true,
2695 "total": false,
2696 "values": false
2697 },
2698 "lines": true,
2699 "linewidth": 1,
2700 "links": [],
2701 "nullPointMode": "null",
2702 "options": {
2703 "alertThreshold": true
2704 },
2705 "percentage": false,
2706 "pluginVersion": "9.3.2",
2707 "pointradius": 2,
2708 "points": false,
2709 "renderer": "flot",
2710 "seriesOverrides": [],
2711 "spaceLength": 10,
2712 "stack": false,
2713 "steppedLine": false,
2714 "targets": [
2715 {
2716 "datasource": {
2717 "type": "prometheus",
2718 "uid": "t-6Lw3i4z"
2719 },
2720 "expr": "pihole_ads_percentage_today",
2721 "interval": "",
2722 "legendFormat": "{{ job }}",
2723 "refId": "A"
2724 }
2725 ],
2726 "thresholds": [],
2727 "timeRegions": [],
2728 "title": "% of ads blocked",
2729 "tooltip": {
2730 "shared": true,
2731 "sort": 0,
2732 "value_type": "individual"
2733 },
2734 "transparent": true,
2735 "type": "graph",
2736 "xaxis": {
2737 "mode": "time",
2738 "show": true,
2739 "values": []
2740 },
2741 "yaxes": [
2742 {
2743 "format": "percent",
2744 "logBase": 1,
2745 "show": true
2746 },
2747 {
2748 "format": "short",
2749 "logBase": 1,
2750 "show": true
2751 }
2752 ],
2753 "yaxis": {
2754 "align": false
2755 }
2756 },
2757 {
2758 "aliasColors": {},
2759 "bars": false,
2760 "dashLength": 10,
2761 "dashes": false,
2762 "datasource": {
2763 "type": "prometheus",
2764 "uid": "t-6Lw3i4z"
2765 },
2766 "fill": 1,
2767 "fillGradient": 0,
2768 "gridPos": {
2769 "h": 7,
2770 "w": 8,
2771 "x": 0,
2772 "y": 55
2773 },
2774 "hiddenSeries": false,
2775 "id": 71,
2776 "legend": {
2777 "avg": false,
2778 "current": false,
2779 "max": false,
2780 "min": false,
2781 "show": true,
2782 "total": false,
2783 "values": false
2784 },
2785 "lines": true,
2786 "linewidth": 1,
2787 "links": [],
2788 "nullPointMode": "null",
2789 "options": {
2790 "alertThreshold": true
2791 },
2792 "percentage": false,
2793 "pluginVersion": "9.3.2",
2794 "pointradius": 2,
2795 "points": false,
2796 "renderer": "flot",
2797 "seriesOverrides": [],
2798 "spaceLength": 10,
2799 "stack": false,
2800 "steppedLine": false,
2801 "targets": [
2802 {
2803 "datasource": {
2804 "type": "prometheus",
2805 "uid": "t-6Lw3i4z"
2806 },
2807 "expr": "pihole_querytypes",
2808 "interval": "",
2809 "legendFormat": "{{ type }}",
2810 "refId": "A"
2811 }
2812 ],
2813 "thresholds": [],
2814 "timeRegions": [],
2815 "title": "DNS Query types",
2816 "tooltip": {
2817 "shared": true,
2818 "sort": 0,
2819 "value_type": "individual"
2820 },
2821 "transparent": true,
2822 "type": "graph",
2823 "xaxis": {
2824 "mode": "time",
2825 "show": true,
2826 "values": []
2827 },
2828 "yaxes": [
2829 {
2830 "format": "percent",
2831 "logBase": 1,
2832 "show": true
2833 },
2834 {
2835 "format": "short",
2836 "logBase": 1,
2837 "show": true
2838 }
2839 ],
2840 "yaxis": {
2841 "align": false
2842 }
2843 },
2844 {
2845 "datasource": {
2846 "type": "prometheus",
2847 "uid": "t-6Lw3i4z"
2848 },
2849 "fieldConfig": {
2850 "defaults": {
2851 "color": {
2852 "mode": "palette-classic"
2853 },
2854 "custom": {
2855 "hideFrom": {
2856 "legend": false,
2857 "tooltip": false,
2858 "viz": false
2859 }
2860 },
2861 "mappings": []
2862 },
2863 "overrides": [
2864 {
2865 "__systemRef": "hideSeriesFrom",
2866 "matcher": {
2867 "id": "byNames",
2868 "options": {
2869 "mode": "exclude",
2870 "names": [
2871 "auth.chudnick.com",
2872 "chudnick.com",
2873 "drawio.chudnick.com",
2874 "git.chudnick.com",
2875 "ipasrv.home.local",
2876 "mail.chudnick.com",
2877 "monitoring.chudnick.com",
2878 "music.chudnick.com",
2879 "pihole.chudnick.com",
2880 "searxng.chudnick.com"
2881 ],
2882 "prefix": "All except:",
2883 "readOnly": true
2884 }
2885 },
2886 "properties": [
2887 {
2888 "id": "custom.hideFrom",
2889 "value": {
2890 "legend": false,
2891 "tooltip": false,
2892 "viz": true
2893 }
2894 }
2895 ]
2896 }
2897 ]
2898 },
2899 "gridPos": {
2900 "h": 7,
2901 "w": 4,
2902 "x": 8,
2903 "y": 55
2904 },
2905 "id": 59,
2906 "links": [],
2907 "maxDataPoints": 3,
2908 "options": {
2909 "legend": {
2910 "displayMode": "list",
2911 "placement": "bottom",
2912 "showLegend": true
2913 },
2914 "pieType": "pie",
2915 "reduceOptions": {
2916 "calcs": [
2917 "lastNotNull"
2918 ],
2919 "fields": "",
2920 "values": false
2921 },
2922 "tooltip": {
2923 "mode": "single",
2924 "sort": "none"
2925 }
2926 },
2927 "targets": [
2928 {
2929 "datasource": {
2930 "type": "prometheus",
2931 "uid": "t-6Lw3i4z"
2932 },
2933 "editorMode": "builder",
2934 "expr": "pihole_top_queries{hostname=~\"192.168.20.34\"}",
2935 "instant": true,
2936 "interval": "",
2937 "legendFormat": "{{ domain }}",
2938 "refId": "A"
2939 }
2940 ],
2941 "title": "Top queries by domain",
2942 "transparent": true,
2943 "type": "piechart"
2944 },
2945 {
2946 "datasource": {
2947 "type": "prometheus",
2948 "uid": "t-6Lw3i4z"
2949 },
2950 "fieldConfig": {
2951 "defaults": {
2952 "color": {
2953 "mode": "palette-classic"
2954 },
2955 "custom": {
2956 "hideFrom": {
2957 "legend": false,
2958 "tooltip": false,
2959 "viz": false
2960 }
2961 },
2962 "mappings": []
2963 },
2964 "overrides": []
2965 },
2966 "gridPos": {
2967 "h": 7,
2968 "w": 4,
2969 "x": 12,
2970 "y": 55
2971 },
2972 "id": 61,
2973 "links": [],
2974 "maxDataPoints": 3,
2975 "options": {
2976 "legend": {
2977 "displayMode": "list",
2978 "placement": "bottom",
2979 "showLegend": true
2980 },
2981 "pieType": "pie",
2982 "reduceOptions": {
2983 "calcs": [
2984 "lastNotNull"
2985 ],
2986 "fields": "",
2987 "values": false
2988 },
2989 "tooltip": {
2990 "mode": "single",
2991 "sort": "none"
2992 }
2993 },
2994 "targets": [
2995 {
2996 "datasource": {
2997 "type": "prometheus",
2998 "uid": "t-6Lw3i4z"
2999 },
3000 "editorMode": "builder",
3001 "expr": "pihole_top_ads{hostname=~\"192.168.20.34\"}",
3002 "interval": "",
3003 "legendFormat": "{{ domain }}",
3004 "range": true,
3005 "refId": "A"
3006 }
3007 ],
3008 "title": "Top ads by domain",
3009 "transparent": true,
3010 "type": "piechart"
3011 },
3012 {
3013 "datasource": {
3014 "type": "prometheus",
3015 "uid": "t-6Lw3i4z"
3016 },
3017 "fieldConfig": {
3018 "defaults": {
3019 "color": {
3020 "mode": "palette-classic"
3021 },
3022 "custom": {
3023 "hideFrom": {
3024 "legend": false,
3025 "tooltip": false,
3026 "viz": false
3027 }
3028 },
3029 "mappings": []
3030 },
3031 "overrides": []
3032 },
3033 "gridPos": {
3034 "h": 7,
3035 "w": 4,
3036 "x": 16,
3037 "y": 55
3038 },
3039 "id": 63,
3040 "links": [],
3041 "maxDataPoints": 3,
3042 "options": {
3043 "legend": {
3044 "displayMode": "list",
3045 "placement": "bottom",
3046 "showLegend": true
3047 },
3048 "pieType": "pie",
3049 "reduceOptions": {
3050 "calcs": [
3051 "lastNotNull"
3052 ],
3053 "fields": "",
3054 "values": false
3055 },
3056 "tooltip": {
3057 "mode": "single",
3058 "sort": "none"
3059 }
3060 },
3061 "pluginVersion": "6.1.4",
3062 "targets": [
3063 {
3064 "datasource": {
3065 "type": "prometheus",
3066 "uid": "t-6Lw3i4z"
3067 },
3068 "editorMode": "builder",
3069 "expr": "pihole_reply{hostname=\"192.168.20.34\"}",
3070 "interval": "",
3071 "legendFormat": "{{ type }}",
3072 "range": true,
3073 "refId": "A"
3074 }
3075 ],
3076 "title": "Replies by type",
3077 "transparent": true,
3078 "type": "piechart"
3079 },
3080 {
3081 "datasource": {
3082 "type": "prometheus",
3083 "uid": "t-6Lw3i4z"
3084 },
3085 "fieldConfig": {
3086 "defaults": {
3087 "color": {
3088 "mode": "thresholds"
3089 },
3090 "mappings": [
3091 {
3092 "options": {
3093 "0": {
3094 "text": "Disabled"
3095 },
3096 "1": {
3097 "text": "Enabled"
3098 }
3099 },
3100 "type": "value"
3101 }
3102 ],
3103 "thresholds": {
3104 "mode": "absolute",
3105 "steps": [
3106 {
3107 "color": "#d44a3a"
3108 },
3109 {
3110 "color": "rgba(237, 129, 40, 0.89)",
3111 "value": 0
3112 },
3113 {
3114 "color": "#299c46",
3115 "value": 1
3116 }
3117 ]
3118 },
3119 "unit": "none"
3120 },
3121 "overrides": []
3122 },
3123 "gridPos": {
3124 "h": 2,
3125 "w": 4,
3126 "x": 20,
3127 "y": 55
3128 },
3129 "id": 77,
3130 "links": [],
3131 "maxDataPoints": 100,
3132 "options": {
3133 "colorMode": "background",
3134 "graphMode": "none",
3135 "justifyMode": "auto",
3136 "orientation": "horizontal",
3137 "reduceOptions": {
3138 "calcs": [
3139 "lastNotNull"
3140 ],
3141 "fields": "",
3142 "values": false
3143 },
3144 "textMode": "auto"
3145 },
3146 "pluginVersion": "9.3.2",
3147 "targets": [
3148 {
3149 "datasource": {
3150 "type": "prometheus",
3151 "uid": "t-6Lw3i4z"
3152 },
3153 "editorMode": "builder",
3154 "expr": "pihole_status{hostname=~\"192.168.20.34\"}",
3155 "instant": true,
3156 "interval": "",
3157 "legendFormat": "{{ legend }}",
3158 "refId": "A"
3159 }
3160 ],
3161 "title": "Status",
3162 "transparent": true,
3163 "type": "stat"
3164 },
3165 {
3166 "datasource": {
3167 "type": "prometheus",
3168 "uid": "t-6Lw3i4z"
3169 },
3170 "fieldConfig": {
3171 "defaults": {
3172 "color": {
3173 "mode": "thresholds"
3174 },
3175 "mappings": [
3176 {
3177 "options": {
3178 "match": "null",
3179 "result": {
3180 "text": "N/A"
3181 }
3182 },
3183 "type": "special"
3184 }
3185 ],
3186 "thresholds": {
3187 "mode": "absolute",
3188 "steps": [
3189 {
3190 "color": "green"
3191 },
3192 {
3193 "color": "red",
3194 "value": 80
3195 }
3196 ]
3197 },
3198 "unit": "none"
3199 },
3200 "overrides": []
3201 },
3202 "gridPos": {
3203 "h": 2,
3204 "w": 4,
3205 "x": 20,
3206 "y": 57
3207 },
3208 "id": 67,
3209 "links": [],
3210 "maxDataPoints": 100,
3211 "options": {
3212 "colorMode": "none",
3213 "graphMode": "none",
3214 "justifyMode": "auto",
3215 "orientation": "horizontal",
3216 "reduceOptions": {
3217 "calcs": [
3218 "mean"
3219 ],
3220 "fields": "",
3221 "values": false
3222 },
3223 "textMode": "auto"
3224 },
3225 "pluginVersion": "9.3.2",
3226 "targets": [
3227 {
3228 "datasource": {
3229 "type": "prometheus",
3230 "uid": "t-6Lw3i4z"
3231 },
3232 "editorMode": "builder",
3233 "expr": "pihole_unique_domains{hostname=~\"192.168.20.34\"}",
3234 "interval": "",
3235 "legendFormat": "",
3236 "range": true,
3237 "refId": "A"
3238 }
3239 ],
3240 "title": "Unique domains",
3241 "transparent": true,
3242 "type": "stat"
3243 },
3244 {
3245 "datasource": {
3246 "type": "prometheus",
3247 "uid": "t-6Lw3i4z"
3248 },
3249 "fieldConfig": {
3250 "defaults": {
3251 "color": {
3252 "mode": "thresholds"
3253 },
3254 "mappings": [
3255 {
3256 "options": {
3257 "match": "null",
3258 "result": {
3259 "text": "N/A"
3260 }
3261 },
3262 "type": "special"
3263 }
3264 ],
3265 "thresholds": {
3266 "mode": "absolute",
3267 "steps": [
3268 {
3269 "color": "green"
3270 },
3271 {
3272 "color": "red",
3273 "value": 80
3274 }
3275 ]
3276 },
3277 "unit": "none"
3278 },
3279 "overrides": []
3280 },
3281 "gridPos": {
3282 "h": 2,
3283 "w": 4,
3284 "x": 20,
3285 "y": 59
3286 },
3287 "id": 65,
3288 "links": [],
3289 "maxDataPoints": 100,
3290 "options": {
3291 "colorMode": "none",
3292 "graphMode": "none",
3293 "justifyMode": "auto",
3294 "orientation": "horizontal",
3295 "reduceOptions": {
3296 "calcs": [
3297 "mean"
3298 ],
3299 "fields": "",
3300 "values": false
3301 },
3302 "textMode": "auto"
3303 },
3304 "pluginVersion": "9.3.2",
3305 "targets": [
3306 {
3307 "datasource": {
3308 "type": "prometheus",
3309 "uid": "t-6Lw3i4z"
3310 },
3311 "editorMode": "builder",
3312 "expr": "pihole_domains_being_blocked{hostname=~\"192.168.20.34\"}",
3313 "instant": false,
3314 "interval": "",
3315 "legendFormat": "",
3316 "refId": "A"
3317 }
3318 ],
3319 "title": "Domains being blocked",
3320 "transparent": true,
3321 "type": "stat"
3322 },
3323 {
3324 "datasource": {
3325 "type": "prometheus",
3326 "uid": "t-6Lw3i4z"
3327 },
3328 "fieldConfig": {
3329 "defaults": {
3330 "color": {
3331 "mode": "palette-classic"
3332 },
3333 "custom": {
3334 "axisCenteredZero": false,
3335 "axisColorMode": "text",
3336 "axisLabel": "",
3337 "axisPlacement": "auto",
3338 "barAlignment": 0,
3339 "drawStyle": "line",
3340 "fillOpacity": 10,
3341 "gradientMode": "none",
3342 "hideFrom": {
3343 "legend": false,
3344 "tooltip": false,
3345 "viz": false
3346 },
3347 "lineInterpolation": "linear",
3348 "lineWidth": 1,
3349 "pointSize": 5,
3350 "scaleDistribution": {
3351 "type": "linear"
3352 },
3353 "showPoints": "never",
3354 "spanNulls": false,
3355 "stacking": {
3356 "group": "A",
3357 "mode": "none"
3358 },
3359 "thresholdsStyle": {
3360 "mode": "off"
3361 }
3362 },
3363 "mappings": [],
3364 "thresholds": {
3365 "mode": "absolute",
3366 "steps": [
3367 {
3368 "color": "green"
3369 },
3370 {
3371 "color": "red",
3372 "value": 80
3373 }
3374 ]
3375 },
3376 "unit": "short"
3377 },
3378 "overrides": []
3379 },
3380 "gridPos": {
3381 "h": 5,
3382 "w": 12,
3383 "x": 0,
3384 "y": 62
3385 },
3386 "id": 73,
3387 "links": [],
3388 "options": {
3389 "legend": {
3390 "calcs": [],
3391 "displayMode": "list",
3392 "placement": "bottom",
3393 "showLegend": true
3394 },
3395 "tooltip": {
3396 "mode": "multi",
3397 "sort": "none"
3398 }
3399 },
3400 "pluginVersion": "9.3.2",
3401 "targets": [
3402 {
3403 "datasource": {
3404 "type": "prometheus",
3405 "uid": "t-6Lw3i4z"
3406 },
3407 "editorMode": "builder",
3408 "expr": "pihole_unique_clients{hostname=~\"192.168.20.34\"}",
3409 "interval": "",
3410 "legendFormat": "{{ hostname }}",
3411 "range": true,
3412 "refId": "A"
3413 }
3414 ],
3415 "title": "Unique clients",
3416 "transparent": true,
3417 "type": "timeseries"
3418 },
3419 {
3420 "datasource": {
3421 "type": "prometheus",
3422 "uid": "t-6Lw3i4z"
3423 },
3424 "fieldConfig": {
3425 "defaults": {
3426 "color": {
3427 "mode": "palette-classic"
3428 },
3429 "custom": {
3430 "axisCenteredZero": false,
3431 "axisColorMode": "text",
3432 "axisLabel": "",
3433 "axisPlacement": "auto",
3434 "barAlignment": 0,
3435 "drawStyle": "line",
3436 "fillOpacity": 10,
3437 "gradientMode": "none",
3438 "hideFrom": {
3439 "legend": false,
3440 "tooltip": false,
3441 "viz": false
3442 },
3443 "lineInterpolation": "linear",
3444 "lineWidth": 1,
3445 "pointSize": 5,
3446 "scaleDistribution": {
3447 "type": "linear"
3448 },
3449 "showPoints": "never",
3450 "spanNulls": false,
3451 "stacking": {
3452 "group": "A",
3453 "mode": "none"
3454 },
3455 "thresholdsStyle": {
3456 "mode": "off"
3457 }
3458 },
3459 "mappings": [],
3460 "thresholds": {
3461 "mode": "absolute",
3462 "steps": [
3463 {
3464 "color": "green"
3465 },
3466 {
3467 "color": "red",
3468 "value": 80
3469 }
3470 ]
3471 },
3472 "unit": "percent"
3473 },
3474 "overrides": [
3475 {
3476 "matcher": {
3477 "id": "byName",
3478 "options": "pihole_unique_clients{hostname=\\\"127.0.0.1\\\",instance=\\\"localhost:9311\\\",job=\\\"pihole\\\"}"
3479 },
3480 "properties": [
3481 {
3482 "id": "color",
3483 "value": {
3484 "fixedColor": "#E0B400",
3485 "mode": "fixed"
3486 }
3487 }
3488 ]
3489 }
3490 ]
3491 },
3492 "gridPos": {
3493 "h": 5,
3494 "w": 12,
3495 "x": 12,
3496 "y": 62
3497 },
3498 "id": 75,
3499 "links": [],
3500 "options": {
3501 "legend": {
3502 "calcs": [],
3503 "displayMode": "list",
3504 "placement": "bottom",
3505 "showLegend": false
3506 },
3507 "tooltip": {
3508 "mode": "multi",
3509 "sort": "desc"
3510 }
3511 },
3512 "pluginVersion": "9.3.2",
3513 "targets": [
3514 {
3515 "datasource": {
3516 "type": "prometheus",
3517 "uid": "t-6Lw3i4z"
3518 },
3519 "editorMode": "builder",
3520 "expr": "pihole_forward_destinations{hostname=~\"192.168.20.34\"}",
3521 "interval": "",
3522 "legendFormat": "{{ destination }}",
3523 "range": true,
3524 "refId": "A"
3525 }
3526 ],
3527 "title": "Forward destinations",
3528 "transparent": true,
3529 "type": "timeseries"
3530 }
3531 ],
3532 "title": "Pihole",
3533 "type": "row"
3534 },
3535 {
3536 "collapsed": true,
3537 "gridPos": {
3538 "h": 1,
3539 "w": 24,
3540 "x": 0,
3541 "y": 54
3542 },
3543 "id": 79,
3544 "panels": [
3545 {
3546 "datasource": {
3547 "type": "prometheus",
3548 "uid": "t-6Lw3i4z"
3549 },
3550 "description": "",
3551 "fieldConfig": {
3552 "defaults": {
3553 "color": {
3554 "mode": "palette-classic"
3555 },
3556 "custom": {
3557 "axisCenteredZero": false,
3558 "axisColorMode": "text",
3559 "axisLabel": "Connections (rate)",
3560 "axisPlacement": "auto",
3561 "barAlignment": 0,
3562 "drawStyle": "line",
3563 "fillOpacity": 10,
3564 "gradientMode": "none",
3565 "hideFrom": {
3566 "legend": false,
3567 "tooltip": false,
3568 "viz": false
3569 },
3570 "lineInterpolation": "linear",
3571 "lineWidth": 1,
3572 "pointSize": 5,
3573 "scaleDistribution": {
3574 "type": "linear"
3575 },
3576 "showPoints": "never",
3577 "spanNulls": false,
3578 "stacking": {
3579 "group": "A",
3580 "mode": "none"
3581 },
3582 "thresholdsStyle": {
3583 "mode": "off"
3584 }
3585 },
3586 "decimals": 1,
3587 "mappings": [],
3588 "thresholds": {
3589 "mode": "absolute",
3590 "steps": [
3591 {
3592 "color": "green"
3593 },
3594 {
3595 "color": "red",
3596 "value": 80
3597 }
3598 ]
3599 },
3600 "unit": "short"
3601 },
3602 "overrides": []
3603 },
3604 "gridPos": {
3605 "h": 10,
3606 "w": 12,
3607 "x": 0,
3608 "y": 111
3609 },
3610 "id": 81,
3611 "links": [],
3612 "options": {
3613 "legend": {
3614 "calcs": [],
3615 "displayMode": "list",
3616 "placement": "bottom",
3617 "showLegend": true
3618 },
3619 "tooltip": {
3620 "mode": "multi",
3621 "sort": "none"
3622 }
3623 },
3624 "pluginVersion": "9.3.2",
3625 "targets": [
3626 {
3627 "datasource": {
3628 "type": "prometheus",
3629 "uid": "t-6Lw3i4z"
3630 },
3631 "editorMode": "builder",
3632 "expr": "irate(nginx_connections_accepted{instance=~\".+\"}[5m])",
3633 "format": "time_series",
3634 "instant": false,
3635 "intervalFactor": 1,
3636 "legendFormat": "{{instance}} accepted",
3637 "refId": "A"
3638 },
3639 {
3640 "datasource": {
3641 "type": "prometheus",
3642 "uid": "t-6Lw3i4z"
3643 },
3644 "editorMode": "code",
3645 "expr": "irate(nginx_connections_handled{instance=~\".+\"}[5m])",
3646 "format": "time_series",
3647 "instant": false,
3648 "intervalFactor": 1,
3649 "legendFormat": "{{instance}} handled",
3650 "refId": "B"
3651 }
3652 ],
3653 "title": "Processed connections",
3654 "type": "timeseries"
3655 },
3656 {
3657 "datasource": {
3658 "type": "prometheus",
3659 "uid": "t-6Lw3i4z"
3660 },
3661 "fieldConfig": {
3662 "defaults": {
3663 "color": {
3664 "mode": "palette-classic"
3665 },
3666 "custom": {
3667 "axisCenteredZero": false,
3668 "axisColorMode": "text",
3669 "axisLabel": "Connections",
3670 "axisPlacement": "auto",
3671 "barAlignment": 0,
3672 "drawStyle": "line",
3673 "fillOpacity": 10,
3674 "gradientMode": "none",
3675 "hideFrom": {
3676 "legend": false,
3677 "tooltip": false,
3678 "viz": false
3679 },
3680 "lineInterpolation": "linear",
3681 "lineWidth": 1,
3682 "pointSize": 5,
3683 "scaleDistribution": {
3684 "type": "linear"
3685 },
3686 "showPoints": "never",
3687 "spanNulls": false,
3688 "stacking": {
3689 "group": "A",
3690 "mode": "none"
3691 },
3692 "thresholdsStyle": {
3693 "mode": "off"
3694 }
3695 },
3696 "decimals": 0,
3697 "mappings": [],
3698 "thresholds": {
3699 "mode": "absolute",
3700 "steps": [
3701 {
3702 "color": "green"
3703 },
3704 {
3705 "color": "red",
3706 "value": 80
3707 }
3708 ]
3709 },
3710 "unit": "short"
3711 },
3712 "overrides": []
3713 },
3714 "gridPos": {
3715 "h": 10,
3716 "w": 12,
3717 "x": 12,
3718 "y": 111
3719 },
3720 "id": 83,
3721 "links": [],
3722 "options": {
3723 "legend": {
3724 "calcs": [],
3725 "displayMode": "list",
3726 "placement": "bottom",
3727 "showLegend": true
3728 },
3729 "tooltip": {
3730 "mode": "multi",
3731 "sort": "none"
3732 }
3733 },
3734 "pluginVersion": "9.3.2",
3735 "targets": [
3736 {
3737 "datasource": {
3738 "type": "prometheus",
3739 "uid": "t-6Lw3i4z"
3740 },
3741 "editorMode": "code",
3742 "expr": "nginx_connections_active{instance=~\".+\"}",
3743 "format": "time_series",
3744 "intervalFactor": 1,
3745 "legendFormat": "{{instance}} active",
3746 "range": true,
3747 "refId": "A"
3748 },
3749 {
3750 "datasource": {
3751 "type": "prometheus",
3752 "uid": "t-6Lw3i4z"
3753 },
3754 "editorMode": "code",
3755 "expr": "nginx_connections_reading{instance=~\".+\"}",
3756 "format": "time_series",
3757 "intervalFactor": 1,
3758 "legendFormat": "{{instance}} reading",
3759 "range": true,
3760 "refId": "B"
3761 },
3762 {
3763 "datasource": {
3764 "type": "prometheus",
3765 "uid": "t-6Lw3i4z"
3766 },
3767 "editorMode": "code",
3768 "expr": "nginx_connections_waiting{instance=~\".+\"}",
3769 "format": "time_series",
3770 "intervalFactor": 1,
3771 "legendFormat": "{{instance}} waiting",
3772 "range": true,
3773 "refId": "C"
3774 },
3775 {
3776 "datasource": {
3777 "type": "prometheus",
3778 "uid": "t-6Lw3i4z"
3779 },
3780 "editorMode": "code",
3781 "expr": "nginx_connections_writing{instance=~\".+\"}",
3782 "format": "time_series",
3783 "intervalFactor": 1,
3784 "legendFormat": "{{instance}} writing",
3785 "range": true,
3786 "refId": "D"
3787 }
3788 ],
3789 "title": "Active Connections",
3790 "type": "timeseries"
3791 },
3792 {
3793 "datasource": {
3794 "type": "prometheus",
3795 "uid": "t-6Lw3i4z"
3796 },
3797 "fieldConfig": {
3798 "defaults": {
3799 "color": {
3800 "mode": "palette-classic"
3801 },
3802 "custom": {
3803 "axisCenteredZero": false,
3804 "axisColorMode": "text",
3805 "axisLabel": "",
3806 "axisPlacement": "auto",
3807 "barAlignment": 0,
3808 "drawStyle": "line",
3809 "fillOpacity": 10,
3810 "gradientMode": "none",
3811 "hideFrom": {
3812 "legend": false,
3813 "tooltip": false,
3814 "viz": false
3815 },
3816 "lineInterpolation": "linear",
3817 "lineWidth": 1,
3818 "pointSize": 5,
3819 "scaleDistribution": {
3820 "type": "linear"
3821 },
3822 "showPoints": "never",
3823 "spanNulls": false,
3824 "stacking": {
3825 "group": "A",
3826 "mode": "none"
3827 },
3828 "thresholdsStyle": {
3829 "mode": "off"
3830 }
3831 },
3832 "mappings": [],
3833 "thresholds": {
3834 "mode": "absolute",
3835 "steps": [
3836 {
3837 "color": "green"
3838 },
3839 {
3840 "color": "red",
3841 "value": 80
3842 }
3843 ]
3844 },
3845 "unit": "short"
3846 },
3847 "overrides": []
3848 },
3849 "gridPos": {
3850 "h": 8,
3851 "w": 24,
3852 "x": 0,
3853 "y": 121
3854 },
3855 "id": 85,
3856 "links": [],
3857 "options": {
3858 "legend": {
3859 "calcs": [],
3860 "displayMode": "list",
3861 "placement": "bottom",
3862 "showLegend": true
3863 },
3864 "tooltip": {
3865 "mode": "multi",
3866 "sort": "none"
3867 }
3868 },
3869 "pluginVersion": "9.3.2",
3870 "targets": [
3871 {
3872 "datasource": {
3873 "type": "prometheus",
3874 "uid": "t-6Lw3i4z"
3875 },
3876 "editorMode": "code",
3877 "expr": "irate(nginx_http_requests_total{instance=~\".+\"}[5m])",
3878 "format": "time_series",
3879 "intervalFactor": 1,
3880 "legendFormat": "{{instance}} total requests",
3881 "range": true,
3882 "refId": "A"
3883 }
3884 ],
3885 "title": "Total requests",
3886 "type": "timeseries"
3887 }
3888 ],
3889 "title": "Nginx Monitoring",
3890 "type": "row"
3891 },
3892 {
3893 "collapsed": true,
3894 "gridPos": {
3895 "h": 1,
3896 "w": 24,
3897 "x": 0,
3898 "y": 55
3899 },
3900 "id": 87,
3901 "panels": [
3902 {
3903 "datasource": {
3904 "type": "prometheus",
3905 "uid": "t-6Lw3i4z"
3906 },
3907 "fieldConfig": {
3908 "defaults": {
3909 "mappings": [],
3910 "thresholds": {
3911 "mode": "absolute",
3912 "steps": [
3913 {
3914 "color": "dark-blue"
3915 }
3916 ]
3917 }
3918 },
3919 "overrides": []
3920 },
3921 "gridPos": {
3922 "h": 4,
3923 "w": 6,
3924 "x": 0,
3925 "y": 130
3926 },
3927 "id": 99,
3928 "options": {
3929 "colorMode": "value",
3930 "graphMode": "none",
3931 "justifyMode": "center",
3932 "orientation": "auto",
3933 "reduceOptions": {
3934 "calcs": [
3935 "lastNotNull"
3936 ],
3937 "fields": "",
3938 "values": false
3939 },
3940 "textMode": "auto"
3941 },
3942 "pluginVersion": "9.3.2",
3943 "targets": [
3944 {
3945 "datasource": {
3946 "type": "prometheus",
3947 "uid": "t-6Lw3i4z"
3948 },
3949 "expr": "gitea_accesses",
3950 "interval": "",
3951 "legendFormat": "",
3952 "refId": "A"
3953 }
3954 ],
3955 "title": "Number of Accesses",
3956 "type": "stat"
3957 },
3958 {
3959 "datasource": {
3960 "type": "prometheus",
3961 "uid": "t-6Lw3i4z"
3962 },
3963 "fieldConfig": {
3964 "defaults": {
3965 "mappings": [],
3966 "thresholds": {
3967 "mode": "absolute",
3968 "steps": [
3969 {
3970 "color": "dark-blue"
3971 }
3972 ]
3973 }
3974 },
3975 "overrides": []
3976 },
3977 "gridPos": {
3978 "h": 4,
3979 "w": 6,
3980 "x": 6,
3981 "y": 130
3982 },
3983 "id": 89,
3984 "options": {
3985 "colorMode": "value",
3986 "graphMode": "none",
3987 "justifyMode": "center",
3988 "orientation": "auto",
3989 "reduceOptions": {
3990 "calcs": [
3991 "lastNotNull"
3992 ],
3993 "fields": "",
3994 "values": false
3995 },
3996 "textMode": "auto"
3997 },
3998 "pluginVersion": "9.3.2",
3999 "targets": [
4000 {
4001 "datasource": {
4002 "type": "prometheus",
4003 "uid": "t-6Lw3i4z"
4004 },
4005 "expr": "gitea_repositories",
4006 "interval": "",
4007 "legendFormat": "",
4008 "refId": "A"
4009 }
4010 ],
4011 "title": "Number of Repositories",
4012 "type": "stat"
4013 },
4014 {
4015 "datasource": {
4016 "type": "prometheus",
4017 "uid": "t-6Lw3i4z"
4018 },
4019 "fieldConfig": {
4020 "defaults": {
4021 "mappings": [],
4022 "thresholds": {
4023 "mode": "absolute",
4024 "steps": [
4025 {
4026 "color": "dark-blue"
4027 }
4028 ]
4029 }
4030 },
4031 "overrides": []
4032 },
4033 "gridPos": {
4034 "h": 4,
4035 "w": 6,
4036 "x": 12,
4037 "y": 130
4038 },
4039 "id": 91,
4040 "options": {
4041 "colorMode": "value",
4042 "graphMode": "none",
4043 "justifyMode": "center",
4044 "orientation": "auto",
4045 "reduceOptions": {
4046 "calcs": [
4047 "lastNotNull"
4048 ],
4049 "fields": "",
4050 "values": false
4051 },
4052 "textMode": "auto"
4053 },
4054 "pluginVersion": "9.3.2",
4055 "targets": [
4056 {
4057 "datasource": {
4058 "type": "prometheus",
4059 "uid": "t-6Lw3i4z"
4060 },
4061 "expr": "gitea_users",
4062 "interval": "",
4063 "legendFormat": "",
4064 "refId": "A"
4065 }
4066 ],
4067 "title": "Number of Users",
4068 "type": "stat"
4069 },
4070 {
4071 "datasource": {
4072 "type": "prometheus",
4073 "uid": "t-6Lw3i4z"
4074 },
4075 "fieldConfig": {
4076 "defaults": {
4077 "mappings": [],
4078 "thresholds": {
4079 "mode": "absolute",
4080 "steps": [
4081 {
4082 "color": "dark-blue"
4083 }
4084 ]
4085 }
4086 },
4087 "overrides": []
4088 },
4089 "gridPos": {
4090 "h": 4,
4091 "w": 6,
4092 "x": 18,
4093 "y": 130
4094 },
4095 "id": 101,
4096 "options": {
4097 "colorMode": "value",
4098 "graphMode": "none",
4099 "justifyMode": "center",
4100 "orientation": "auto",
4101 "reduceOptions": {
4102 "calcs": [
4103 "lastNotNull"
4104 ],
4105 "fields": "",
4106 "values": false
4107 },
4108 "textMode": "auto"
4109 },
4110 "pluginVersion": "9.3.2",
4111 "targets": [
4112 {
4113 "datasource": {
4114 "type": "prometheus",
4115 "uid": "t-6Lw3i4z"
4116 },
4117 "expr": "gitea_issues",
4118 "interval": "",
4119 "legendFormat": "",
4120 "refId": "A"
4121 }
4122 ],
4123 "title": "Number of Issues",
4124 "type": "stat"
4125 },
4126 {
4127 "datasource": {
4128 "type": "prometheus",
4129 "uid": "t-6Lw3i4z"
4130 },
4131 "fieldConfig": {
4132 "defaults": {
4133 "mappings": [],
4134 "thresholds": {
4135 "mode": "absolute",
4136 "steps": [
4137 {
4138 "color": "dark-purple"
4139 }
4140 ]
4141 }
4142 },
4143 "overrides": []
4144 },
4145 "gridPos": {
4146 "h": 4,
4147 "w": 4,
4148 "x": 0,
4149 "y": 134
4150 },
4151 "id": 93,
4152 "options": {
4153 "colorMode": "value",
4154 "graphMode": "none",
4155 "justifyMode": "center",
4156 "orientation": "auto",
4157 "reduceOptions": {
4158 "calcs": [
4159 "lastNotNull"
4160 ],
4161 "fields": "",
4162 "values": false
4163 },
4164 "textMode": "auto"
4165 },
4166 "pluginVersion": "9.3.2",
4167 "targets": [
4168 {
4169 "datasource": {
4170 "type": "prometheus",
4171 "uid": "t-6Lw3i4z"
4172 },
4173 "expr": "gitea_webhooks",
4174 "interval": "",
4175 "legendFormat": "",
4176 "refId": "A"
4177 }
4178 ],
4179 "title": "Number of Webhooks",
4180 "type": "stat"
4181 },
4182 {
4183 "datasource": {
4184 "type": "prometheus",
4185 "uid": "t-6Lw3i4z"
4186 },
4187 "fieldConfig": {
4188 "defaults": {
4189 "mappings": [],
4190 "thresholds": {
4191 "mode": "absolute",
4192 "steps": [
4193 {
4194 "color": "dark-purple"
4195 }
4196 ]
4197 }
4198 },
4199 "overrides": []
4200 },
4201 "gridPos": {
4202 "h": 4,
4203 "w": 4,
4204 "x": 4,
4205 "y": 134
4206 },
4207 "id": 103,
4208 "options": {
4209 "colorMode": "value",
4210 "graphMode": "none",
4211 "justifyMode": "center",
4212 "orientation": "auto",
4213 "reduceOptions": {
4214 "calcs": [
4215 "lastNotNull"
4216 ],
4217 "fields": "",
4218 "values": false
4219 },
4220 "textMode": "auto"
4221 },
4222 "pluginVersion": "9.3.2",
4223 "targets": [
4224 {
4225 "datasource": {
4226 "type": "prometheus",
4227 "uid": "t-6Lw3i4z"
4228 },
4229 "editorMode": "code",
4230 "expr": "gitea_hooktasks",
4231 "interval": "",
4232 "legendFormat": "",
4233 "range": true,
4234 "refId": "A"
4235 }
4236 ],
4237 "title": "Number of Webhook Tasks",
4238 "type": "stat"
4239 },
4240 {
4241 "datasource": {
4242 "type": "prometheus",
4243 "uid": "t-6Lw3i4z"
4244 },
4245 "fieldConfig": {
4246 "defaults": {
4247 "mappings": [],
4248 "thresholds": {
4249 "mode": "absolute",
4250 "steps": [
4251 {
4252 "color": "dark-purple"
4253 }
4254 ]
4255 }
4256 },
4257 "overrides": []
4258 },
4259 "gridPos": {
4260 "h": 4,
4261 "w": 4,
4262 "x": 8,
4263 "y": 134
4264 },
4265 "id": 97,
4266 "options": {
4267 "colorMode": "value",
4268 "graphMode": "none",
4269 "justifyMode": "center",
4270 "orientation": "auto",
4271 "reduceOptions": {
4272 "calcs": [
4273 "lastNotNull"
4274 ],
4275 "fields": "",
4276 "values": false
4277 },
4278 "textMode": "auto"
4279 },
4280 "pluginVersion": "9.3.2",
4281 "targets": [
4282 {
4283 "datasource": {
4284 "type": "prometheus",
4285 "uid": "t-6Lw3i4z"
4286 },
4287 "expr": "gitea_releases",
4288 "interval": "",
4289 "legendFormat": "",
4290 "refId": "A"
4291 }
4292 ],
4293 "title": "Number of Releases",
4294 "type": "stat"
4295 },
4296 {
4297 "datasource": {
4298 "type": "prometheus",
4299 "uid": "t-6Lw3i4z"
4300 },
4301 "fieldConfig": {
4302 "defaults": {
4303 "mappings": [],
4304 "thresholds": {
4305 "mode": "absolute",
4306 "steps": [
4307 {
4308 "color": "dark-yellow"
4309 }
4310 ]
4311 }
4312 },
4313 "overrides": []
4314 },
4315 "gridPos": {
4316 "h": 4,
4317 "w": 4,
4318 "x": 12,
4319 "y": 134
4320 },
4321 "id": 95,
4322 "options": {
4323 "colorMode": "value",
4324 "graphMode": "none",
4325 "justifyMode": "center",
4326 "orientation": "auto",
4327 "reduceOptions": {
4328 "calcs": [
4329 "lastNotNull"
4330 ],
4331 "fields": "",
4332 "values": false
4333 },
4334 "textMode": "auto"
4335 },
4336 "pluginVersion": "9.3.2",
4337 "targets": [
4338 {
4339 "datasource": {
4340 "type": "prometheus",
4341 "uid": "t-6Lw3i4z"
4342 },
4343 "expr": "gitea_publickeys",
4344 "interval": "",
4345 "legendFormat": "",
4346 "refId": "A"
4347 }
4348 ],
4349 "title": "Number of PublicKeys",
4350 "type": "stat"
4351 },
4352 {
4353 "datasource": {
4354 "type": "prometheus",
4355 "uid": "t-6Lw3i4z"
4356 },
4357 "fieldConfig": {
4358 "defaults": {
4359 "mappings": [],
4360 "thresholds": {
4361 "mode": "absolute",
4362 "steps": [
4363 {
4364 "color": "dark-yellow"
4365 }
4366 ]
4367 }
4368 },
4369 "overrides": []
4370 },
4371 "gridPos": {
4372 "h": 4,
4373 "w": 4,
4374 "x": 16,
4375 "y": 134
4376 },
4377 "id": 105,
4378 "options": {
4379 "colorMode": "value",
4380 "graphMode": "none",
4381 "justifyMode": "center",
4382 "orientation": "auto",
4383 "reduceOptions": {
4384 "calcs": [
4385 "lastNotNull"
4386 ],
4387 "fields": "",
4388 "values": false
4389 },
4390 "textMode": "auto"
4391 },
4392 "pluginVersion": "9.3.2",
4393 "targets": [
4394 {
4395 "datasource": {
4396 "type": "prometheus",
4397 "uid": "t-6Lw3i4z"
4398 },
4399 "expr": "gitea_organizations",
4400 "interval": "",
4401 "legendFormat": "",
4402 "refId": "A"
4403 }
4404 ],
4405 "title": "Number of Organizations",
4406 "type": "stat"
4407 },
4408 {
4409 "datasource": {
4410 "type": "prometheus",
4411 "uid": "t-6Lw3i4z"
4412 },
4413 "fieldConfig": {
4414 "defaults": {
4415 "mappings": [],
4416 "thresholds": {
4417 "mode": "absolute",
4418 "steps": [
4419 {
4420 "color": "dark-yellow"
4421 }
4422 ]
4423 }
4424 },
4425 "overrides": []
4426 },
4427 "gridPos": {
4428 "h": 4,
4429 "w": 4,
4430 "x": 20,
4431 "y": 134
4432 },
4433 "id": 107,
4434 "options": {
4435 "colorMode": "value",
4436 "graphMode": "none",
4437 "justifyMode": "center",
4438 "orientation": "auto",
4439 "reduceOptions": {
4440 "calcs": [
4441 "lastNotNull"
4442 ],
4443 "fields": "",
4444 "values": false
4445 },
4446 "textMode": "auto"
4447 },
4448 "pluginVersion": "9.3.2",
4449 "targets": [
4450 {
4451 "datasource": {
4452 "type": "prometheus",
4453 "uid": "t-6Lw3i4z"
4454 },
4455 "expr": "gitea_labels",
4456 "interval": "",
4457 "legendFormat": "",
4458 "refId": "A"
4459 }
4460 ],
4461 "title": "Number of Labels",
4462 "type": "stat"
4463 }
4464 ],
4465 "title": "Gitea",
4466 "type": "row"
4467 },
4468 {
4469 "collapsed": true,
4470 "gridPos": {
4471 "h": 1,
4472 "w": 24,
4473 "x": 0,
4474 "y": 56
4475 },
4476 "id": 109,
4477 "panels": [
4478 {
4479 "datasource": {
4480 "type": "prometheus",
4481 "uid": "t-6Lw3i4z"
4482 },
4483 "fieldConfig": {
4484 "defaults": {
4485 "color": {
4486 "mode": "thresholds"
4487 },
4488 "mappings": [
4489 {
4490 "options": {
4491 "match": "null",
4492 "result": {
4493 "index": 0,
4494 "text": "0"
4495 }
4496 },
4497 "type": "special"
4498 }
4499 ],
4500 "thresholds": {
4501 "mode": "absolute",
4502 "steps": [
4503 {
4504 "color": "#37872D"
4505 },
4506 {
4507 "color": "#F2CC0C",
4508 "value": 1
4509 },
4510 {
4511 "color": "#F2CC0C",
4512 "value": 2
4513 }
4514 ]
4515 },
4516 "unit": "none"
4517 },
4518 "overrides": []
4519 },
4520 "gridPos": {
4521 "h": 4,
4522 "w": 4,
4523 "x": 0,
4524 "y": 131
4525 },
4526 "id": 121,
4527 "links": [],
4528 "maxDataPoints": 100,
4529 "options": {
4530 "colorMode": "value",
4531 "graphMode": "area",
4532 "justifyMode": "auto",
4533 "orientation": "horizontal",
4534 "reduceOptions": {
4535 "calcs": [
4536 "lastNotNull"
4537 ],
4538 "fields": "/^__name__$/",
4539 "values": false
4540 },
4541 "textMode": "auto"
4542 },
4543 "pluginVersion": "9.3.2",
4544 "targets": [
4545 {
4546 "datasource": {
4547 "type": "prometheus",
4548 "uid": "t-6Lw3i4z"
4549 },
4550 "editorMode": "code",
4551 "expr": "jenkins_node_builds_count",
4552 "format": "time_series",
4553 "instant": false,
4554 "intervalFactor": 1,
4555 "refId": "A",
4556 "textEditor": false
4557 }
4558 ],
4559 "title": "Total Jobs",
4560 "type": "stat"
4561 },
4562 {
4563 "datasource": {
4564 "type": "prometheus",
4565 "uid": "t-6Lw3i4z"
4566 },
4567 "fieldConfig": {
4568 "defaults": {
4569 "color": {
4570 "mode": "thresholds"
4571 },
4572 "mappings": [
4573 {
4574 "options": {
4575 "0": {
4576 "text": "None!"
4577 }
4578 },
4579 "type": "value"
4580 }
4581 ],
4582 "thresholds": {
4583 "mode": "absolute",
4584 "steps": [
4585 {
4586 "color": "rgba(245, 54, 54, 0.9)"
4587 },
4588 {
4589 "color": "rgba(237, 129, 40, 0.89)",
4590 "value": 0
4591 },
4592 {
4593 "color": "rgba(50, 172, 45, 0.97)",
4594 "value": 0
4595 }
4596 ]
4597 },
4598 "unit": "none"
4599 },
4600 "overrides": []
4601 },
4602 "gridPos": {
4603 "h": 4,
4604 "w": 4,
4605 "x": 4,
4606 "y": 131
4607 },
4608 "id": 111,
4609 "links": [],
4610 "maxDataPoints": 100,
4611 "options": {
4612 "colorMode": "value",
4613 "graphMode": "area",
4614 "justifyMode": "auto",
4615 "orientation": "horizontal",
4616 "reduceOptions": {
4617 "calcs": [
4618 "lastNotNull"
4619 ],
4620 "fields": "",
4621 "values": false
4622 },
4623 "textMode": "auto"
4624 },
4625 "pluginVersion": "9.3.2",
4626 "targets": [
4627 {
4628 "datasource": {
4629 "type": "prometheus",
4630 "uid": "t-6Lw3i4z"
4631 },
4632 "expr": "jenkins_runs_success_total",
4633 "format": "time_series",
4634 "intervalFactor": 1,
4635 "refId": "A",
4636 "textEditor": false
4637 }
4638 ],
4639 "title": "Sucessful Jobs",
4640 "type": "stat"
4641 },
4642 {
4643 "datasource": {
4644 "type": "prometheus",
4645 "uid": "t-6Lw3i4z"
4646 },
4647 "fieldConfig": {
4648 "defaults": {
4649 "color": {
4650 "mode": "thresholds"
4651 },
4652 "mappings": [
4653 {
4654 "options": {
4655 "0": {
4656 "index": 0,
4657 "text": "0"
4658 }
4659 },
4660 "type": "value"
4661 }
4662 ],
4663 "thresholds": {
4664 "mode": "absolute",
4665 "steps": [
4666 {
4667 "color": "#37872D"
4668 },
4669 {
4670 "color": "#C4162A",
4671 "value": 0
4672 },
4673 {
4674 "color": "rgb(217, 213, 213)",
4675 "value": 0
4676 }
4677 ]
4678 },
4679 "unit": "none"
4680 },
4681 "overrides": []
4682 },
4683 "gridPos": {
4684 "h": 4,
4685 "w": 4,
4686 "x": 8,
4687 "y": 131
4688 },
4689 "id": 113,
4690 "links": [],
4691 "maxDataPoints": 100,
4692 "options": {
4693 "colorMode": "value",
4694 "graphMode": "area",
4695 "justifyMode": "auto",
4696 "orientation": "horizontal",
4697 "reduceOptions": {
4698 "calcs": [
4699 "lastNotNull"
4700 ],
4701 "fields": "/^__name__$/",
4702 "values": false
4703 },
4704 "textMode": "auto"
4705 },
4706 "pluginVersion": "9.3.2",
4707 "targets": [
4708 {
4709 "datasource": {
4710 "type": "prometheus",
4711 "uid": "t-6Lw3i4z"
4712 },
4713 "editorMode": "code",
4714 "expr": "rate(jenkins_runs_failure_total[$__rate_interval])",
4715 "format": "time_series",
4716 "instant": false,
4717 "intervalFactor": 1,
4718 "refId": "A",
4719 "textEditor": false
4720 }
4721 ],
4722 "title": "Aborted Jobs",
4723 "type": "stat"
4724 },
4725 {
4726 "datasource": {
4727 "type": "prometheus",
4728 "uid": "t-6Lw3i4z"
4729 },
4730 "fieldConfig": {
4731 "defaults": {
4732 "color": {
4733 "mode": "thresholds"
4734 },
4735 "mappings": [
4736 {
4737 "options": {
4738 "0": {
4739 "text": "None!"
4740 }
4741 },
4742 "type": "value"
4743 }
4744 ],
4745 "thresholds": {
4746 "mode": "absolute",
4747 "steps": [
4748 {
4749 "color": "#37872D"
4750 },
4751 {
4752 "color": "#C4162A",
4753 "value": 0
4754 },
4755 {
4756 "color": "#FA6400",
4757 "value": 0
4758 }
4759 ]
4760 },
4761 "unit": "none"
4762 },
4763 "overrides": []
4764 },
4765 "gridPos": {
4766 "h": 4,
4767 "w": 4,
4768 "x": 12,
4769 "y": 131
4770 },
4771 "id": 115,
4772 "links": [],
4773 "maxDataPoints": 100,
4774 "options": {
4775 "colorMode": "value",
4776 "graphMode": "area",
4777 "justifyMode": "auto",
4778 "orientation": "horizontal",
4779 "reduceOptions": {
4780 "calcs": [
4781 "lastNotNull"
4782 ],
4783 "fields": "/^__name__$/",
4784 "values": false
4785 },
4786 "textMode": "auto"
4787 },
4788 "pluginVersion": "9.3.2",
4789 "targets": [
4790 {
4791 "datasource": {
4792 "type": "prometheus",
4793 "uid": "t-6Lw3i4z"
4794 },
4795 "expr": "jenkins_runs_unstable_total",
4796 "format": "time_series",
4797 "instant": false,
4798 "intervalFactor": 1,
4799 "refId": "A",
4800 "textEditor": false
4801 }
4802 ],
4803 "title": "Unstable Jobs",
4804 "type": "stat"
4805 },
4806 {
4807 "datasource": {
4808 "type": "prometheus",
4809 "uid": "t-6Lw3i4z"
4810 },
4811 "fieldConfig": {
4812 "defaults": {
4813 "color": {
4814 "mode": "thresholds"
4815 },
4816 "mappings": [],
4817 "thresholds": {
4818 "mode": "absolute",
4819 "steps": [
4820 {
4821 "color": "rgba(50, 172, 45, 0.97)"
4822 },
4823 {
4824 "color": "#37872D",
4825 "value": 0
4826 },
4827 {
4828 "color": "rgba(245, 54, 54, 0.9)",
4829 "value": 1
4830 }
4831 ]
4832 },
4833 "unit": "none"
4834 },
4835 "overrides": []
4836 },
4837 "gridPos": {
4838 "h": 4,
4839 "w": 4,
4840 "x": 16,
4841 "y": 131
4842 },
4843 "id": 117,
4844 "links": [],
4845 "maxDataPoints": 100,
4846 "options": {
4847 "colorMode": "value",
4848 "graphMode": "area",
4849 "justifyMode": "auto",
4850 "orientation": "horizontal",
4851 "reduceOptions": {
4852 "calcs": [
4853 "lastNotNull"
4854 ],
4855 "fields": "",
4856 "values": false
4857 },
4858 "textMode": "auto"
4859 },
4860 "pluginVersion": "9.3.2",
4861 "targets": [
4862 {
4863 "datasource": {
4864 "type": "prometheus",
4865 "uid": "t-6Lw3i4z"
4866 },
4867 "expr": "jenkins_runs_failure_total",
4868 "format": "time_series",
4869 "intervalFactor": 1,
4870 "refId": "A",
4871 "textEditor": false
4872 }
4873 ],
4874 "title": "Failed Jobs",
4875 "type": "stat"
4876 },
4877 {
4878 "datasource": {
4879 "type": "prometheus",
4880 "uid": "t-6Lw3i4z"
4881 },
4882 "fieldConfig": {
4883 "defaults": {
4884 "color": {
4885 "mode": "thresholds"
4886 },
4887 "mappings": [
4888 {
4889 "options": {
4890 "match": "null",
4891 "result": {
4892 "text": "None!"
4893 }
4894 },
4895 "type": "special"
4896 }
4897 ],
4898 "thresholds": {
4899 "mode": "absolute",
4900 "steps": [
4901 {
4902 "color": "rgba(50, 172, 45, 0.97)"
4903 },
4904 {
4905 "color": "#37872D",
4906 "value": 0
4907 },
4908 {
4909 "color": "#FA6400",
4910 "value": 1
4911 }
4912 ]
4913 },
4914 "unit": "none"
4915 },
4916 "overrides": []
4917 },
4918 "gridPos": {
4919 "h": 4,
4920 "w": 4,
4921 "x": 20,
4922 "y": 131
4923 },
4924 "id": 119,
4925 "links": [],
4926 "maxDataPoints": 100,
4927 "options": {
4928 "colorMode": "value",
4929 "graphMode": "area",
4930 "justifyMode": "auto",
4931 "orientation": "horizontal",
4932 "reduceOptions": {
4933 "calcs": [
4934 "lastNotNull"
4935 ],
4936 "fields": "",
4937 "values": false
4938 },
4939 "textMode": "auto"
4940 },
4941 "pluginVersion": "9.3.2",
4942 "targets": [
4943 {
4944 "datasource": {
4945 "type": "prometheus",
4946 "uid": "t-6Lw3i4z"
4947 },
4948 "expr": "jenkins_queue_size_value",
4949 "format": "time_series",
4950 "intervalFactor": 1,
4951 "refId": "A",
4952 "textEditor": false
4953 }
4954 ],
4955 "title": "Jenkins queue size",
4956 "type": "stat"
4957 },
4958 {
4959 "aliasColors": {},
4960 "bars": false,
4961 "dashLength": 10,
4962 "dashes": false,
4963 "datasource": {
4964 "type": "prometheus",
4965 "uid": "t-6Lw3i4z"
4966 },
4967 "editable": true,
4968 "error": false,
4969 "fill": 1,
4970 "fillGradient": 0,
4971 "grid": {},
4972 "gridPos": {
4973 "h": 7,
4974 "w": 24,
4975 "x": 0,
4976 "y": 135
4977 },
4978 "hiddenSeries": false,
4979 "id": 123,
4980 "isNew": true,
4981 "legend": {
4982 "alignAsTable": false,
4983 "avg": false,
4984 "current": false,
4985 "hideEmpty": false,
4986 "hideZero": false,
4987 "max": false,
4988 "min": false,
4989 "rightSide": false,
4990 "show": false,
4991 "total": false,
4992 "values": false
4993 },
4994 "lines": true,
4995 "linewidth": 2,
4996 "links": [],
4997 "nullPointMode": "connected",
4998 "options": {
4999 "alertThreshold": true
5000 },
5001 "paceLength": 10,
5002 "percentage": false,
5003 "pluginVersion": "9.3.2",
5004 "pointradius": 5,
5005 "points": false,
5006 "renderer": "flot",
5007 "seriesOverrides": [],
5008 "spaceLength": 10,
5009 "stack": false,
5010 "steppedLine": false,
5011 "targets": [
5012 {
5013 "datasource": {
5014 "type": "prometheus",
5015 "uid": "t-6Lw3i4z"
5016 },
5017 "expr": "default_jenkins_builds_last_build_duration_milliseconds",
5018 "format": "time_series",
5019 "intervalFactor": 1,
5020 "legendFormat": "",
5021 "refId": "A"
5022 }
5023 ],
5024 "thresholds": [],
5025 "timeRegions": [],
5026 "title": "Job Duration",
5027 "tooltip": {
5028 "msResolution": false,
5029 "shared": true,
5030 "sort": 0,
5031 "value_type": "cumulative"
5032 },
5033 "type": "graph",
5034 "xaxis": {
5035 "mode": "time",
5036 "show": true,
5037 "values": []
5038 },
5039 "yaxes": [
5040 {
5041 "format": "ms",
5042 "label": "",
5043 "logBase": 2,
5044 "show": true
5045 },
5046 {
5047 "format": "short",
5048 "label": "",
5049 "logBase": 1,
5050 "show": false
5051 }
5052 ],
5053 "yaxis": {
5054 "align": false
5055 }
5056 }
5057 ],
5058 "title": "Jenkins",
5059 "type": "row"
5060 }
5061 ],
5062 "refresh": "30s",
5063 "schemaVersion": 38,
5064 "style": "dark",
5065 "tags": [],
5066 "templating": {
5067 "list": [
5068 {
5069 "current": {
5070 "selected": true,
5071 "text": [
5072 "All"
5073 ],
5074 "value": [
5075 "$__all"
5076 ]
5077 },
5078 "datasource": {
5079 "type": "loki",
5080 "uid": "AzGHyE5Vz"
5081 },
5082 "definition": "",
5083 "hide": 0,
5084 "includeAll": true,
5085 "multi": true,
5086 "name": "container_name",
5087 "options": [],
5088 "query": {
5089 "label": "container_name",
5090 "refId": "LokiVariableQueryEditor-VariableQuery",
5091 "stream": "",
5092 "type": 1
5093 },
5094 "refresh": 1,
5095 "regex": "",
5096 "skipUrlSync": false,
5097 "sort": 2,
5098 "type": "query"
5099 },
5100 {
5101 "current": {
5102 "selected": true,
5103 "text": [
5104 "All"
5105 ],
5106 "value": [
5107 "$__all"
5108 ]
5109 },
5110 "datasource": {
5111 "type": "loki",
5112 "uid": "AzGHyE5Vz"
5113 },
5114 "definition": "",
5115 "hide": 0,
5116 "includeAll": true,
5117 "multi": true,
5118 "name": "vm_name",
5119 "options": [],
5120 "query": {
5121 "label": "hostname",
5122 "refId": "LokiVariableQueryEditor-VariableQuery",
5123 "stream": "",
5124 "type": 1
5125 },
5126 "refresh": 1,
5127 "regex": "",
5128 "skipUrlSync": false,
5129 "sort": 0,
5130 "type": "query"
5131 },
5132 {
5133 "current": {
5134 "selected": true,
5135 "text": [
5136 "All"
5137 ],
5138 "value": [
5139 "$__all"
5140 ]
5141 },
5142 "datasource": {
5143 "type": "loki",
5144 "uid": "AzGHyE5Vz"
5145 },
5146 "definition": "",
5147 "hide": 0,
5148 "includeAll": true,
5149 "multi": true,
5150 "name": "vm_service",
5151 "options": [],
5152 "query": {
5153 "label": "unit",
5154 "refId": "LokiVariableQueryEditor-VariableQuery",
5155 "stream": "",
5156 "type": 1
5157 },
5158 "refresh": 1,
5159 "regex": "",
5160 "skipUrlSync": false,
5161 "sort": 0,
5162 "type": "query"
5163 }
5164 ]
5165 },
5166 "time": {
5167 "from": "now-6h",
5168 "to": "now"
5169 },
5170 "timepicker": {},
5171 "timezone": "",
5172 "title": "Main",
5173 "uid": "kXjiNPWVk",
5174 "version": 39,
5175 "weekStart": ""
5176}