├── .env.sample
├── .gitignore
├── LICENSE
├── README.md
├── docker-compose.yml
├── fa-grafana-graphs.png
├── fa-grafana-system-metrics.png
├── grafana
├── dashboards
│ ├── adsb-dashboard.json
│ └── system-information.json
├── grafana.ini
└── provisioning
│ ├── dashboards
│ └── dashboards.yml
│ └── datasources
│ └── datasources.yml
├── install.sh
└── prometheus
└── prometheus.yml
/.env.sample:
--------------------------------------------------------------------------------
1 | # This file contains environment variables referenced in the docker-compose.yml
2 |
3 | # Set HOST_IP to your Pi's local IP (no quotes)
4 | HOST_IP=
5 |
6 | ######## Grafana Settings - configurable settings #########
7 |
8 | # enable/disable login
9 | DISABLE_LOGIN=false
10 |
11 | # default Grafana port
12 | GRAFANA_PORT=3000
13 |
14 | # username and password
15 | GRAFANA_USERNAME=admin
16 | GRAFANA_PASSWORD=flightaware
17 |
18 | # light or dark mode
19 | GRAFANA_THEME=dark
20 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .env
2 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 FlightAware
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # fa-grafana
2 | Suite of Grafana dashboards for PiAware
3 |
4 | This is a multi-container Docker application that runs Grafana, Prometheus, and the Prometheus exporter containers below to monitor your PiAware's flight tracking and system health
5 | - [Claws's dump1090-exporter](https://github.com/claws/dump1090-exporter)
6 | - [piaware_exporter](https://github.com/flightaware/piaware-exporter)
7 | - [node_exporter](https://github.com/prometheus/node_exporter)
8 |
9 |
10 | ### **Minimum System Requirements:**
11 | - Raspberry Pi 3B+ or Pi 4
12 | - Raspberry Pi Zero 2 W
13 |
14 | The docker containers used in this application are built for ARMv7 CPU architectures.
15 |
16 | 
17 |
18 | 
19 |
20 |
21 | ## Setup ##
22 |
23 |
24 | New Installations
25 |
26 |
27 | These steps will install required dependencies, pull all the Docker images from Docker Hub, and start up the containers
28 |
29 | #### 1. Install pre-requisite programs:
30 |
31 | Convenient script to install git, docker compose, and docker.
32 |
33 | ```
34 | sudo bash -c "$(curl -sS https://raw.githubusercontent.com/flightaware/fa-grafana/master/install.sh)"
35 | ```
36 |
37 | #### 2. Checkout the fa-grafana git repository and cd into the directory
38 |
39 | ```
40 | git clone https://github.com/flightaware/fa-grafana.git
41 | cd fa-grafana
42 | ```
43 |
44 | #### 3. Rename the .env.sample file to .env
45 |
46 | ```
47 | mv .env.sample .env
48 | ```
49 |
50 | #### 4. Set the HOST_IP to your Pi's local IP address (required) and set other Grafana configuration if desired
51 |
52 | ```
53 | nano .env
54 | HOST_IP=
55 | ```
56 |
57 | #### 5. Start up containers
58 |
59 | ```
60 | sudo docker compose up -d
61 | ```
62 |
63 | #### 6. Open Grafana in a web browser by entering your Pi's local IP address and the configured Grafana port number
64 | ```
65 | :3000
66 | ```
67 |
68 |
69 |
70 |
71 |
72 |
73 | Updating Existing Installations
74 |
75 |
76 | These steps will stop the running fa-grafana containers, pull the latest images from Docker Hub, clean up volumes, and start up the new containers
77 |
78 | #### 1. Stop fa-grafana docker containers
79 | ```
80 | cd fa-grafana
81 | sudo docker compose down
82 | ```
83 | #### 2. Pull latest source code
84 | ```
85 | git pull
86 | ```
87 | #### 3. Make sure the .env file has HOST_IP and other configuration variables set. Rename the provided .env.sample file to .env if needed.
88 |
89 | #### 4. Delete existing fa-grafana_grafana_data Docker volume
90 | ```
91 | sudo docker volume rm fa-grafana_grafana_data
92 | ```
93 | #### 5. Start up containers
94 | ```
95 | sudo docker compose up -d
96 | ```
97 |
98 |
99 |
100 |
101 | ## Configuration
102 |
103 | You configure the Grafana interface using the .env file shown below. This is what Grafana will use when you start its container.
104 |
105 | ```
106 | # This file contains environment variables referenced in the docker-compose.yml
107 |
108 | # Set HOST_IP to your Pi's local IP (no quotes)
109 | HOST_IP=
110 |
111 | ######## Grafana Settings - configurable settings #########
112 |
113 | # enable/disable login
114 | DISABLE_LOGIN=false
115 |
116 | # default Grafana port
117 | GRAFANA_PORT=3000
118 |
119 | # username and password
120 | GRAFANA_USERNAME=admin
121 | GRAFANA_PASSWORD=flightaware
122 |
123 | # light or dark mode
124 | GRAFANA_THEME=dark
125 | ```
126 |
127 |
128 | ## Reference ##
129 |
130 |
131 |
132 |
133 | Cleaning up unused Docker images to free up disk space
134 |
135 |
136 | ```
137 | sudo docker image prune -a
138 | ```
139 |
140 |
141 |
142 |
143 |
144 | Useful Docker commands
145 |
146 | #### To stop all Docker containers, cd into the fa-grafana directory and use the following command:
147 | ```
148 | sudo docker compose down
149 | ```
150 | #### List all running Docker containers
151 | ```
152 | sudo docker ps
153 | ```
154 | #### List all Docker images installed
155 | ```
156 | sudo docker images
157 | ```
158 | #### Delete a Docker image
159 | ```
160 | sudo docker rmi
161 | ```
162 |
163 | #### Delete unused and dangling Docker images
164 | ```
165 | sudo docker image prune -a
166 | ```
167 |
168 |
169 |
--------------------------------------------------------------------------------
/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: '3'
2 |
3 | volumes:
4 | prometheus_data: {}
5 | grafana_data: {}
6 |
7 | services:
8 |
9 | dump1090exporter:
10 | container_name: dump1090exporter
11 | image: flightawareadsb/dump1090exporter:2.0
12 | ports:
13 | - "9105:9105"
14 | restart: always
15 | stop_signal: SIGINT
16 | command: [
17 | "--resource-path=http://${HOST_IP:?IP_ADDRESS_UNSET_ERROR}:8080/data",
18 | ]
19 |
20 | prometheus:
21 | container_name: prometheus
22 | image: prom/prometheus
23 | depends_on:
24 | - dump1090exporter
25 | volumes:
26 | - ./prometheus/:/etc/prometheus/
27 | - prometheus_data:/prometheus
28 | command: [
29 | "--config.file=/etc/prometheus/prometheus.yml",
30 | "--web.listen-address=:9090"
31 | ]
32 | ports:
33 | - 9090:9090
34 | restart: always
35 |
36 | grafana:
37 | container_name: grafana
38 | image: grafana/grafana:8.4.3-armv7
39 | volumes:
40 | - ./grafana/provisioning/:/etc/grafana/provisioning/
41 | - ./grafana/dashboards/:/var/lib/grafana/dashboards/
42 | - ./grafana/grafana.ini:/etc/grafana/grafana.ini
43 | - grafana_data:/var/lib/grafana
44 | depends_on:
45 | - prometheus
46 | ports:
47 | - ${GRAFANA_PORT}:${GRAFANA_PORT}
48 | restart: always
49 | environment:
50 | - GF_AUTH_ANONYMOUS_ENABLED=${DISABLE_LOGIN}
51 | - GF_SECURITY_ADMIN_USER=${GRAFANA_USERNAME}
52 | - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD}
53 | - GF_USERS_DEFAULT_THEME=${GRAFANA_THEME}
54 | - GF_SERVER_GRAFANA_PORT=${GRAFANA_PORT}
55 |
56 | node-exporter:
57 | container_name: node_exporter
58 | image: quay.io/prometheus/node-exporter:latest
59 | command: [
60 | "--path.rootfs=/host",
61 | "--web.listen-address=:9100",
62 | ]
63 | ports:
64 | - 9100:9100
65 | volumes:
66 | - "/:/host:ro,rslave"
67 | restart: always
68 |
69 | piaware-exporter:
70 | container_name: piaware_exporter
71 | image: flightawareadsb/piaware_exporter:1.0
72 | ports:
73 | - 9101:9101
74 | restart: always
75 | command: [
76 | "--piaware_host",
77 | "${HOST_IP}"
78 | ]
--------------------------------------------------------------------------------
/fa-grafana-graphs.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/flightaware/fa-grafana/9dcfe71f42374b17092ed97b657738ecb4d2388e/fa-grafana-graphs.png
--------------------------------------------------------------------------------
/fa-grafana-system-metrics.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/flightaware/fa-grafana/9dcfe71f42374b17092ed97b657738ecb4d2388e/fa-grafana-system-metrics.png
--------------------------------------------------------------------------------
/grafana/dashboards/adsb-dashboard.json:
--------------------------------------------------------------------------------
1 | {
2 | "annotations": {
3 | "list": [
4 | {
5 | "builtIn": 1,
6 | "datasource": "-- Grafana --",
7 | "enable": true,
8 | "hide": true,
9 | "iconColor": "rgba(0, 211, 255, 1)",
10 | "name": "Annotations & Alerts",
11 | "target": {
12 | "limit": 100,
13 | "matchAny": false,
14 | "tags": [],
15 | "type": "dashboard"
16 | },
17 | "type": "dashboard"
18 | }
19 | ]
20 | },
21 | "editable": true,
22 | "fiscalYearStartMonth": 0,
23 | "graphTooltip": 0,
24 | "id": 1,
25 | "links": [],
26 | "liveNow": false,
27 | "panels": [
28 | {
29 | "gridPos": {
30 | "h": 1,
31 | "w": 24,
32 | "x": 0,
33 | "y": 0
34 | },
35 | "id": 34,
36 | "title": "PiAware Status",
37 | "type": "row"
38 | },
39 | {
40 | "datasource": {
41 | "type": "prometheus",
42 | "uid": "P1809F7CD0C75ACF3"
43 | },
44 | "fieldConfig": {
45 | "defaults": {
46 | "color": {
47 | "mode": "thresholds"
48 | },
49 | "mappings": [
50 | {
51 | "options": {
52 | "None": {
53 | "index": 0,
54 | "text": "Test"
55 | }
56 | },
57 | "type": "value"
58 | }
59 | ],
60 | "thresholds": {
61 | "mode": "absolute",
62 | "steps": [
63 | {
64 | "color": "transparent",
65 | "value": null
66 | }
67 | ]
68 | }
69 | },
70 | "overrides": [
71 | {
72 | "matcher": {
73 | "id": "byRegexp",
74 | "options": "red"
75 | },
76 | "properties": [
77 | {
78 | "id": "displayName",
79 | "value": "PiAware"
80 | },
81 | {
82 | "id": "color",
83 | "value": {
84 | "fixedColor": "red",
85 | "mode": "fixed"
86 | }
87 | }
88 | ]
89 | },
90 | {
91 | "matcher": {
92 | "id": "byRegexp",
93 | "options": "green"
94 | },
95 | "properties": [
96 | {
97 | "id": "displayName",
98 | "value": "PiAware"
99 | },
100 | {
101 | "id": "color",
102 | "value": {
103 | "fixedColor": "green",
104 | "mode": "fixed"
105 | }
106 | }
107 | ]
108 | },
109 | {
110 | "matcher": {
111 | "id": "byRegexp",
112 | "options": "amber"
113 | },
114 | "properties": [
115 | {
116 | "id": "displayName",
117 | "value": "PiAware"
118 | },
119 | {
120 | "id": "color",
121 | "value": {
122 | "fixedColor": "yellow",
123 | "mode": "fixed"
124 | }
125 | }
126 | ]
127 | },
128 | {
129 | "matcher": {
130 | "id": "byRegexp",
131 | "options": "N/A"
132 | },
133 | "properties": [
134 | {
135 | "id": "displayName",
136 | "value": "PiAware"
137 | },
138 | {
139 | "id": "color",
140 | "value": {
141 | "mode": "fixed"
142 | }
143 | }
144 | ]
145 | },
146 | {
147 | "matcher": {
148 | "id": "byRegexp",
149 | "options": ""
150 | },
151 | "properties": [
152 | {
153 | "id": "displayName",
154 | "value": "N/A"
155 | },
156 | {
157 | "id": "color",
158 | "value": {
159 | "mode": "fixed"
160 | }
161 | }
162 | ]
163 | }
164 | ]
165 | },
166 | "gridPos": {
167 | "h": 3,
168 | "w": 6,
169 | "x": 0,
170 | "y": 1
171 | },
172 | "id": 36,
173 | "options": {
174 | "colorMode": "background",
175 | "graphMode": "none",
176 | "justifyMode": "auto",
177 | "orientation": "auto",
178 | "reduceOptions": {
179 | "calcs": [
180 | "lastNotNull"
181 | ],
182 | "fields": "",
183 | "values": false
184 | },
185 | "text": {
186 | "valueSize": 50
187 | },
188 | "textMode": "name"
189 | },
190 | "pluginVersion": "8.4.3",
191 | "targets": [
192 | {
193 | "datasource": {
194 | "type": "prometheus",
195 | "uid": "P1809F7CD0C75ACF3"
196 | },
197 | "exemplar": false,
198 | "expr": "piaware_service_state{job=\"piaware_exporter\"} == 1",
199 | "instant": true,
200 | "interval": "",
201 | "legendFormat": "{{piaware_service_state}}",
202 | "refId": "A"
203 | }
204 | ],
205 | "type": "stat"
206 | },
207 | {
208 | "datasource": {
209 | "type": "prometheus",
210 | "uid": "P1809F7CD0C75ACF3"
211 | },
212 | "fieldConfig": {
213 | "defaults": {
214 | "color": {
215 | "mode": "thresholds"
216 | },
217 | "mappings": [],
218 | "thresholds": {
219 | "mode": "absolute",
220 | "steps": [
221 | {
222 | "color": "transparent",
223 | "value": null
224 | }
225 | ]
226 | }
227 | },
228 | "overrides": [
229 | {
230 | "matcher": {
231 | "id": "byRegexp",
232 | "options": "green"
233 | },
234 | "properties": [
235 | {
236 | "id": "displayName",
237 | "value": "Radio"
238 | },
239 | {
240 | "id": "color",
241 | "value": {
242 | "fixedColor": "green",
243 | "mode": "fixed"
244 | }
245 | }
246 | ]
247 | },
248 | {
249 | "matcher": {
250 | "id": "byRegexp",
251 | "options": "red"
252 | },
253 | "properties": [
254 | {
255 | "id": "color",
256 | "value": {
257 | "fixedColor": "red",
258 | "mode": "fixed"
259 | }
260 | },
261 | {
262 | "id": "displayName",
263 | "value": "Radio"
264 | }
265 | ]
266 | },
267 | {
268 | "matcher": {
269 | "id": "byRegexp",
270 | "options": "amber"
271 | },
272 | "properties": [
273 | {
274 | "id": "color",
275 | "value": {
276 | "fixedColor": "yellow",
277 | "mode": "fixed"
278 | }
279 | },
280 | {
281 | "id": "displayName",
282 | "value": "Radio"
283 | }
284 | ]
285 | },
286 | {
287 | "matcher": {
288 | "id": "byRegexp",
289 | "options": "N/A"
290 | },
291 | "properties": [
292 | {
293 | "id": "displayName",
294 | "value": "Radio"
295 | },
296 | {
297 | "id": "color",
298 | "value": {
299 | "mode": "fixed"
300 | }
301 | }
302 | ]
303 | }
304 | ]
305 | },
306 | "gridPos": {
307 | "h": 3,
308 | "w": 6,
309 | "x": 6,
310 | "y": 1
311 | },
312 | "id": 38,
313 | "options": {
314 | "colorMode": "background",
315 | "graphMode": "none",
316 | "justifyMode": "auto",
317 | "orientation": "auto",
318 | "reduceOptions": {
319 | "calcs": [
320 | "lastNotNull"
321 | ],
322 | "fields": "",
323 | "values": false
324 | },
325 | "text": {
326 | "valueSize": 50
327 | },
328 | "textMode": "name"
329 | },
330 | "pluginVersion": "8.4.3",
331 | "targets": [
332 | {
333 | "datasource": {
334 | "type": "prometheus",
335 | "uid": "P1809F7CD0C75ACF3"
336 | },
337 | "exemplar": false,
338 | "expr": "piaware_radio_state{job=\"piaware_exporter\"} == 1",
339 | "instant": true,
340 | "interval": "",
341 | "legendFormat": "{{piaware_radio_state}}",
342 | "refId": "A"
343 | }
344 | ],
345 | "type": "stat"
346 | },
347 | {
348 | "datasource": {
349 | "type": "prometheus",
350 | "uid": "P1809F7CD0C75ACF3"
351 | },
352 | "fieldConfig": {
353 | "defaults": {
354 | "color": {
355 | "mode": "thresholds"
356 | },
357 | "mappings": [],
358 | "thresholds": {
359 | "mode": "absolute",
360 | "steps": [
361 | {
362 | "color": "transparent",
363 | "value": null
364 | }
365 | ]
366 | }
367 | },
368 | "overrides": [
369 | {
370 | "matcher": {
371 | "id": "byRegexp",
372 | "options": "green"
373 | },
374 | "properties": [
375 | {
376 | "id": "displayName",
377 | "value": "FlightAware"
378 | },
379 | {
380 | "id": "color",
381 | "value": {
382 | "fixedColor": "green",
383 | "mode": "fixed"
384 | }
385 | }
386 | ]
387 | },
388 | {
389 | "matcher": {
390 | "id": "byRegexp",
391 | "options": "red"
392 | },
393 | "properties": [
394 | {
395 | "id": "displayName",
396 | "value": "FlightAware"
397 | },
398 | {
399 | "id": "color",
400 | "value": {
401 | "fixedColor": "red",
402 | "mode": "fixed"
403 | }
404 | }
405 | ]
406 | },
407 | {
408 | "matcher": {
409 | "id": "byRegexp",
410 | "options": "amber"
411 | },
412 | "properties": [
413 | {
414 | "id": "displayName",
415 | "value": "FlightAware"
416 | },
417 | {
418 | "id": "color",
419 | "value": {
420 | "fixedColor": "yellow",
421 | "mode": "fixed"
422 | }
423 | }
424 | ]
425 | },
426 | {
427 | "matcher": {
428 | "id": "byRegexp",
429 | "options": "N/A"
430 | },
431 | "properties": [
432 | {
433 | "id": "displayName",
434 | "value": "FlightAware"
435 | },
436 | {
437 | "id": "color",
438 | "value": {
439 | "mode": "fixed"
440 | }
441 | }
442 | ]
443 | }
444 | ]
445 | },
446 | "gridPos": {
447 | "h": 3,
448 | "w": 6,
449 | "x": 12,
450 | "y": 1
451 | },
452 | "id": 40,
453 | "options": {
454 | "colorMode": "background",
455 | "graphMode": "none",
456 | "justifyMode": "auto",
457 | "orientation": "auto",
458 | "reduceOptions": {
459 | "calcs": [
460 | "lastNotNull"
461 | ],
462 | "fields": "",
463 | "values": false
464 | },
465 | "text": {
466 | "valueSize": 50
467 | },
468 | "textMode": "name"
469 | },
470 | "pluginVersion": "8.4.3",
471 | "targets": [
472 | {
473 | "datasource": {
474 | "type": "prometheus",
475 | "uid": "P1809F7CD0C75ACF3"
476 | },
477 | "exemplar": false,
478 | "expr": "piaware_connect_to_flightaware_state{job=\"piaware_exporter\"} == 1",
479 | "instant": true,
480 | "interval": "",
481 | "legendFormat": "{{piaware_connect_to_flightaware_state}}",
482 | "refId": "A"
483 | }
484 | ],
485 | "type": "stat"
486 | },
487 | {
488 | "datasource": {
489 | "type": "prometheus",
490 | "uid": "P1809F7CD0C75ACF3"
491 | },
492 | "fieldConfig": {
493 | "defaults": {
494 | "color": {
495 | "mode": "thresholds"
496 | },
497 | "mappings": [],
498 | "thresholds": {
499 | "mode": "absolute",
500 | "steps": [
501 | {
502 | "color": "transparent",
503 | "value": null
504 | }
505 | ]
506 | }
507 | },
508 | "overrides": [
509 | {
510 | "matcher": {
511 | "id": "byRegexp",
512 | "options": "green"
513 | },
514 | "properties": [
515 | {
516 | "id": "color",
517 | "value": {
518 | "fixedColor": "green",
519 | "mode": "fixed"
520 | }
521 | },
522 | {
523 | "id": "displayName",
524 | "value": "MLAT"
525 | }
526 | ]
527 | },
528 | {
529 | "matcher": {
530 | "id": "byRegexp",
531 | "options": "red"
532 | },
533 | "properties": [
534 | {
535 | "id": "displayName",
536 | "value": "MLAT"
537 | },
538 | {
539 | "id": "color",
540 | "value": {
541 | "fixedColor": "red",
542 | "mode": "fixed"
543 | }
544 | }
545 | ]
546 | },
547 | {
548 | "matcher": {
549 | "id": "byRegexp",
550 | "options": "amber"
551 | },
552 | "properties": [
553 | {
554 | "id": "displayName",
555 | "value": "MLAT"
556 | },
557 | {
558 | "id": "color",
559 | "value": {
560 | "fixedColor": "yellow",
561 | "mode": "fixed"
562 | }
563 | }
564 | ]
565 | },
566 | {
567 | "matcher": {
568 | "id": "byRegexp",
569 | "options": "N/A"
570 | },
571 | "properties": [
572 | {
573 | "id": "displayName",
574 | "value": "MLAT"
575 | },
576 | {
577 | "id": "color",
578 | "value": {
579 | "mode": "fixed"
580 | }
581 | }
582 | ]
583 | }
584 | ]
585 | },
586 | "gridPos": {
587 | "h": 3,
588 | "w": 6,
589 | "x": 18,
590 | "y": 1
591 | },
592 | "id": 42,
593 | "options": {
594 | "colorMode": "background",
595 | "graphMode": "area",
596 | "justifyMode": "center",
597 | "orientation": "auto",
598 | "reduceOptions": {
599 | "calcs": [
600 | "lastNotNull"
601 | ],
602 | "fields": "",
603 | "values": false
604 | },
605 | "text": {
606 | "valueSize": 50
607 | },
608 | "textMode": "name"
609 | },
610 | "pluginVersion": "8.4.3",
611 | "targets": [
612 | {
613 | "datasource": {
614 | "type": "prometheus",
615 | "uid": "P1809F7CD0C75ACF3"
616 | },
617 | "exemplar": false,
618 | "expr": "piaware_mlat_state{job=\"piaware_exporter\"} == 1",
619 | "instant": true,
620 | "interval": "",
621 | "legendFormat": "{{piaware_mlat_state}}",
622 | "refId": "A"
623 | }
624 | ],
625 | "type": "stat"
626 | },
627 | {
628 | "collapsed": false,
629 | "gridPos": {
630 | "h": 1,
631 | "w": 24,
632 | "x": 0,
633 | "y": 4
634 | },
635 | "id": 22,
636 | "panels": [],
637 | "title": "Current dump1090-fa Aircraft Tracking",
638 | "type": "row"
639 | },
640 | {
641 | "datasource": {
642 | "type": "prometheus",
643 | "uid": "P1809F7CD0C75ACF3"
644 | },
645 | "fieldConfig": {
646 | "defaults": {
647 | "color": {
648 | "mode": "thresholds"
649 | },
650 | "decimals": 0,
651 | "mappings": [
652 | {
653 | "options": {
654 | "match": "null",
655 | "result": {
656 | "text": "N/A"
657 | }
658 | },
659 | "type": "special"
660 | }
661 | ],
662 | "thresholds": {
663 | "mode": "absolute",
664 | "steps": [
665 | {
666 | "color": "green",
667 | "value": null
668 | },
669 | {
670 | "color": "red",
671 | "value": 80
672 | }
673 | ]
674 | },
675 | "unit": "none"
676 | },
677 | "overrides": []
678 | },
679 | "gridPos": {
680 | "h": 3,
681 | "w": 4,
682 | "x": 0,
683 | "y": 5
684 | },
685 | "hideTimeOverride": false,
686 | "id": 24,
687 | "interval": "5s",
688 | "links": [],
689 | "maxDataPoints": 100,
690 | "options": {
691 | "colorMode": "none",
692 | "graphMode": "none",
693 | "justifyMode": "auto",
694 | "orientation": "horizontal",
695 | "reduceOptions": {
696 | "calcs": [
697 | "mean"
698 | ],
699 | "fields": "",
700 | "values": false
701 | },
702 | "textMode": "auto"
703 | },
704 | "pluginVersion": "8.4.3",
705 | "targets": [
706 | {
707 | "datasource": {
708 | "type": "prometheus",
709 | "uid": "P1809F7CD0C75ACF3"
710 | },
711 | "exemplar": true,
712 | "expr": "dump1090_recent_aircraft_observed{job=\"dump1090\", time_period=\"latest\"}",
713 | "instant": false,
714 | "interval": "",
715 | "intervalFactor": 2,
716 | "legendFormat": "",
717 | "refId": "A"
718 | }
719 | ],
720 | "timeFrom": "1s",
721 | "title": "Current Aircraft Total",
722 | "type": "stat"
723 | },
724 | {
725 | "datasource": {
726 | "type": "prometheus",
727 | "uid": "P1809F7CD0C75ACF3"
728 | },
729 | "fieldConfig": {
730 | "defaults": {
731 | "color": {
732 | "mode": "thresholds"
733 | },
734 | "decimals": 0,
735 | "mappings": [
736 | {
737 | "options": {
738 | "match": "null",
739 | "result": {
740 | "text": "N/A"
741 | }
742 | },
743 | "type": "special"
744 | }
745 | ],
746 | "thresholds": {
747 | "mode": "absolute",
748 | "steps": [
749 | {
750 | "color": "green",
751 | "value": null
752 | },
753 | {
754 | "color": "red",
755 | "value": 80
756 | }
757 | ]
758 | },
759 | "unit": "none"
760 | },
761 | "overrides": []
762 | },
763 | "gridPos": {
764 | "h": 3,
765 | "w": 4,
766 | "x": 4,
767 | "y": 5
768 | },
769 | "hideTimeOverride": false,
770 | "id": 25,
771 | "interval": "5s",
772 | "links": [],
773 | "maxDataPoints": 100,
774 | "options": {
775 | "colorMode": "none",
776 | "graphMode": "none",
777 | "justifyMode": "auto",
778 | "orientation": "horizontal",
779 | "reduceOptions": {
780 | "calcs": [
781 | "mean"
782 | ],
783 | "fields": "",
784 | "values": false
785 | },
786 | "textMode": "auto"
787 | },
788 | "pluginVersion": "8.4.3",
789 | "targets": [
790 | {
791 | "expr": "dump1090_recent_aircraft_with_position{job=\"dump1090\", time_period=\"latest\"}",
792 | "interval": "",
793 | "intervalFactor": 2,
794 | "legendFormat": "",
795 | "refId": "A"
796 | }
797 | ],
798 | "timeFrom": "1s",
799 | "title": "Aircraft W/ Position",
800 | "type": "stat"
801 | },
802 | {
803 | "datasource": {
804 | "type": "prometheus",
805 | "uid": "P1809F7CD0C75ACF3"
806 | },
807 | "fieldConfig": {
808 | "defaults": {
809 | "color": {
810 | "mode": "thresholds"
811 | },
812 | "decimals": 1,
813 | "mappings": [
814 | {
815 | "options": {
816 | "match": "null",
817 | "result": {
818 | "text": "N/A"
819 | }
820 | },
821 | "type": "special"
822 | }
823 | ],
824 | "thresholds": {
825 | "mode": "absolute",
826 | "steps": [
827 | {
828 | "color": "green",
829 | "value": null
830 | },
831 | {
832 | "color": "red",
833 | "value": 80
834 | }
835 | ]
836 | },
837 | "unit": "NM"
838 | },
839 | "overrides": []
840 | },
841 | "gridPos": {
842 | "h": 3,
843 | "w": 4,
844 | "x": 8,
845 | "y": 5
846 | },
847 | "hideTimeOverride": false,
848 | "id": 26,
849 | "interval": "5s",
850 | "links": [],
851 | "maxDataPoints": 100,
852 | "options": {
853 | "colorMode": "none",
854 | "graphMode": "none",
855 | "justifyMode": "auto",
856 | "orientation": "horizontal",
857 | "reduceOptions": {
858 | "calcs": [
859 | "mean"
860 | ],
861 | "fields": "",
862 | "values": false
863 | },
864 | "textMode": "auto"
865 | },
866 | "pluginVersion": "8.4.3",
867 | "targets": [
868 | {
869 | "expr": "dump1090_recent_aircraft_max_range{job=\"dump1090\", time_period=\"latest\"} / 1852",
870 | "interval": "",
871 | "intervalFactor": 2,
872 | "legendFormat": "",
873 | "refId": "A"
874 | }
875 | ],
876 | "timeFrom": "1s",
877 | "title": "Maximum Range",
878 | "type": "stat"
879 | },
880 | {
881 | "datasource": {
882 | "type": "prometheus",
883 | "uid": "P1809F7CD0C75ACF3"
884 | },
885 | "fieldConfig": {
886 | "defaults": {
887 | "color": {
888 | "mode": "thresholds"
889 | },
890 | "mappings": [
891 | {
892 | "options": {
893 | "match": "null",
894 | "result": {
895 | "text": "N/A"
896 | }
897 | },
898 | "type": "special"
899 | }
900 | ],
901 | "thresholds": {
902 | "mode": "absolute",
903 | "steps": [
904 | {
905 | "color": "green",
906 | "value": null
907 | },
908 | {
909 | "color": "red",
910 | "value": 80
911 | }
912 | ]
913 | },
914 | "unit": "none"
915 | },
916 | "overrides": []
917 | },
918 | "gridPos": {
919 | "h": 3,
920 | "w": 4,
921 | "x": 12,
922 | "y": 5
923 | },
924 | "hideTimeOverride": false,
925 | "id": 27,
926 | "interval": "5s",
927 | "links": [],
928 | "maxDataPoints": 100,
929 | "options": {
930 | "colorMode": "none",
931 | "graphMode": "none",
932 | "justifyMode": "auto",
933 | "orientation": "horizontal",
934 | "reduceOptions": {
935 | "calcs": [
936 | "mean"
937 | ],
938 | "fields": "",
939 | "values": false
940 | },
941 | "textMode": "auto"
942 | },
943 | "pluginVersion": "8.4.3",
944 | "targets": [
945 | {
946 | "datasource": {
947 | "type": "prometheus",
948 | "uid": "P1809F7CD0C75ACF3"
949 | },
950 | "exemplar": true,
951 | "expr": "rate(dump1090_messages_total{job=\"dump1090\", time_period=\"latest\"}[1m])",
952 | "interval": "",
953 | "intervalFactor": 2,
954 | "legendFormat": "",
955 | "refId": "A"
956 | }
957 | ],
958 | "timeFrom": "1s",
959 | "title": "Messages Received / Second",
960 | "type": "stat"
961 | },
962 | {
963 | "datasource": {
964 | "type": "prometheus",
965 | "uid": "P1809F7CD0C75ACF3"
966 | },
967 | "fieldConfig": {
968 | "defaults": {
969 | "color": {
970 | "mode": "thresholds"
971 | },
972 | "mappings": [
973 | {
974 | "options": {
975 | "match": "null",
976 | "result": {
977 | "text": "N/A"
978 | }
979 | },
980 | "type": "special"
981 | }
982 | ],
983 | "thresholds": {
984 | "mode": "absolute",
985 | "steps": [
986 | {
987 | "color": "green",
988 | "value": null
989 | },
990 | {
991 | "color": "red",
992 | "value": 80
993 | }
994 | ]
995 | },
996 | "unit": "dbFS"
997 | },
998 | "overrides": []
999 | },
1000 | "gridPos": {
1001 | "h": 3,
1002 | "w": 4,
1003 | "x": 16,
1004 | "y": 5
1005 | },
1006 | "id": 29,
1007 | "interval": "5s",
1008 | "links": [],
1009 | "maxDataPoints": 100,
1010 | "options": {
1011 | "colorMode": "none",
1012 | "graphMode": "none",
1013 | "justifyMode": "auto",
1014 | "orientation": "horizontal",
1015 | "reduceOptions": {
1016 | "calcs": [
1017 | "mean"
1018 | ],
1019 | "fields": "",
1020 | "values": false
1021 | },
1022 | "textMode": "auto"
1023 | },
1024 | "pluginVersion": "8.4.3",
1025 | "targets": [
1026 | {
1027 | "expr": "dump1090_stats_local_peak_signal_strength_dbFS{job=\"dump1090\", time_period=\"last1min\"}",
1028 | "interval": "",
1029 | "intervalFactor": 2,
1030 | "legendFormat": "",
1031 | "refId": "A"
1032 | }
1033 | ],
1034 | "timeFrom": "1s",
1035 | "title": "Signal Peak",
1036 | "type": "stat"
1037 | },
1038 | {
1039 | "datasource": {
1040 | "type": "prometheus",
1041 | "uid": "P1809F7CD0C75ACF3"
1042 | },
1043 | "fieldConfig": {
1044 | "defaults": {
1045 | "color": {
1046 | "mode": "thresholds"
1047 | },
1048 | "mappings": [
1049 | {
1050 | "options": {
1051 | "match": "null",
1052 | "result": {
1053 | "text": "N/A"
1054 | }
1055 | },
1056 | "type": "special"
1057 | }
1058 | ],
1059 | "thresholds": {
1060 | "mode": "absolute",
1061 | "steps": [
1062 | {
1063 | "color": "green",
1064 | "value": null
1065 | },
1066 | {
1067 | "color": "red",
1068 | "value": 80
1069 | }
1070 | ]
1071 | },
1072 | "unit": "dbFS"
1073 | },
1074 | "overrides": []
1075 | },
1076 | "gridPos": {
1077 | "h": 3,
1078 | "w": 4,
1079 | "x": 20,
1080 | "y": 5
1081 | },
1082 | "id": 30,
1083 | "interval": "5s",
1084 | "links": [],
1085 | "maxDataPoints": 100,
1086 | "options": {
1087 | "colorMode": "none",
1088 | "graphMode": "none",
1089 | "justifyMode": "auto",
1090 | "orientation": "horizontal",
1091 | "reduceOptions": {
1092 | "calcs": [
1093 | "mean"
1094 | ],
1095 | "fields": "",
1096 | "values": false
1097 | },
1098 | "textMode": "auto"
1099 | },
1100 | "pluginVersion": "8.4.3",
1101 | "targets": [
1102 | {
1103 | "expr": "dump1090_stats_local_signal_strength_dbFS{job=\"dump1090\", time_period=\"last1min\"}",
1104 | "interval": "",
1105 | "intervalFactor": 2,
1106 | "legendFormat": "",
1107 | "refId": "A"
1108 | }
1109 | ],
1110 | "timeFrom": "1s",
1111 | "title": "Signal Mean",
1112 | "type": "stat"
1113 | },
1114 | {
1115 | "collapsed": false,
1116 | "gridPos": {
1117 | "h": 1,
1118 | "w": 24,
1119 | "x": 0,
1120 | "y": 8
1121 | },
1122 | "id": 20,
1123 | "panels": [],
1124 | "title": "dump1090-fa Historical Monitoring",
1125 | "type": "row"
1126 | },
1127 | {
1128 | "datasource": {
1129 | "type": "prometheus",
1130 | "uid": "P1809F7CD0C75ACF3"
1131 | },
1132 | "description": "Total aircraft seen by the receiver at the given point in time. Filtered aircraft to only those that have been seen within the last 15 seconds to minimize contributions from stale aircraft. ",
1133 | "fieldConfig": {
1134 | "defaults": {
1135 | "color": {
1136 | "mode": "palette-classic"
1137 | },
1138 | "custom": {
1139 | "axisLabel": "Aircraft",
1140 | "axisPlacement": "auto",
1141 | "barAlignment": 0,
1142 | "drawStyle": "bars",
1143 | "fillOpacity": 75,
1144 | "gradientMode": "opacity",
1145 | "hideFrom": {
1146 | "legend": false,
1147 | "tooltip": false,
1148 | "viz": false
1149 | },
1150 | "lineInterpolation": "stepAfter",
1151 | "lineWidth": 1,
1152 | "pointSize": 5,
1153 | "scaleDistribution": {
1154 | "type": "linear"
1155 | },
1156 | "showPoints": "never",
1157 | "spanNulls": true,
1158 | "stacking": {
1159 | "group": "A",
1160 | "mode": "none"
1161 | },
1162 | "thresholdsStyle": {
1163 | "mode": "off"
1164 | }
1165 | },
1166 | "links": [],
1167 | "mappings": [],
1168 | "thresholds": {
1169 | "mode": "absolute",
1170 | "steps": [
1171 | {
1172 | "color": "green",
1173 | "value": null
1174 | },
1175 | {
1176 | "color": "red",
1177 | "value": 80
1178 | }
1179 | ]
1180 | },
1181 | "unit": "short"
1182 | },
1183 | "overrides": [
1184 | {
1185 | "matcher": {
1186 | "id": "byName",
1187 | "options": "Aircraft with ADS-B Position"
1188 | },
1189 | "properties": [
1190 | {
1191 | "id": "color",
1192 | "value": {
1193 | "fixedColor": "super-light-blue",
1194 | "mode": "fixed"
1195 | }
1196 | }
1197 | ]
1198 | },
1199 | {
1200 | "matcher": {
1201 | "id": "byName",
1202 | "options": "Aircraft with MLAT Position"
1203 | },
1204 | "properties": [
1205 | {
1206 | "id": "color",
1207 | "value": {
1208 | "fixedColor": "super-light-green",
1209 | "mode": "fixed"
1210 | }
1211 | }
1212 | ]
1213 | },
1214 | {
1215 | "matcher": {
1216 | "id": "byName",
1217 | "options": "Aircraft with no Position"
1218 | },
1219 | "properties": [
1220 | {
1221 | "id": "color",
1222 | "value": {
1223 | "fixedColor": "light-red",
1224 | "mode": "fixed"
1225 | }
1226 | }
1227 | ]
1228 | },
1229 | {
1230 | "matcher": {
1231 | "id": "byName",
1232 | "options": "Aircraft without Position"
1233 | },
1234 | "properties": [
1235 | {
1236 | "id": "color",
1237 | "value": {
1238 | "fixedColor": "semi-dark-orange",
1239 | "mode": "fixed"
1240 | }
1241 | }
1242 | ]
1243 | },
1244 | {
1245 | "matcher": {
1246 | "id": "byName",
1247 | "options": "Total Aircraft"
1248 | },
1249 | "properties": [
1250 | {
1251 | "id": "color",
1252 | "value": {
1253 | "fixedColor": "dark-blue",
1254 | "mode": "fixed"
1255 | }
1256 | }
1257 | ]
1258 | }
1259 | ]
1260 | },
1261 | "gridPos": {
1262 | "h": 7,
1263 | "w": 24,
1264 | "x": 0,
1265 | "y": 9
1266 | },
1267 | "id": 4,
1268 | "options": {
1269 | "legend": {
1270 | "calcs": [
1271 | "lastNotNull"
1272 | ],
1273 | "displayMode": "table",
1274 | "placement": "right"
1275 | },
1276 | "tooltip": {
1277 | "mode": "multi",
1278 | "sort": "none"
1279 | }
1280 | },
1281 | "pluginVersion": "8.4.3",
1282 | "targets": [
1283 | {
1284 | "expr": "dump1090_recent_aircraft_observed{time_period=\"latest\"}",
1285 | "interval": "",
1286 | "intervalFactor": 2,
1287 | "legendFormat": "Total Aircraft",
1288 | "refId": "A"
1289 | },
1290 | {
1291 | "expr": "dump1090_recent_aircraft_with_position{time_period=\"latest\"}",
1292 | "instant": false,
1293 | "interval": "",
1294 | "intervalFactor": 2,
1295 | "legendFormat": "Aircraft with ADS-B Position",
1296 | "refId": "B"
1297 | },
1298 | {
1299 | "expr": "dump1090_recent_aircraft_with_multilateration{time_period=\"latest\"}",
1300 | "interval": "",
1301 | "legendFormat": "Aircraft with MLAT Position",
1302 | "refId": "C"
1303 | },
1304 | {
1305 | "expr": "dump1090_recent_aircraft_observed{time_period=\"latest\"} - dump1090_recent_aircraft_with_position{time_period=\"latest\"}",
1306 | "interval": "",
1307 | "intervalFactor": 2,
1308 | "legendFormat": "Aircraft without Position",
1309 | "refId": "D"
1310 | }
1311 | ],
1312 | "title": "Aircraft Seen",
1313 | "type": "timeseries"
1314 | },
1315 | {
1316 | "datasource": {
1317 | "type": "prometheus",
1318 | "uid": "P1809F7CD0C75ACF3"
1319 | },
1320 | "description": "Messages received per second",
1321 | "fieldConfig": {
1322 | "defaults": {
1323 | "color": {
1324 | "mode": "palette-classic"
1325 | },
1326 | "custom": {
1327 | "axisLabel": "Messages / Second",
1328 | "axisPlacement": "auto",
1329 | "barAlignment": 0,
1330 | "drawStyle": "line",
1331 | "fillOpacity": 100,
1332 | "gradientMode": "hue",
1333 | "hideFrom": {
1334 | "legend": false,
1335 | "tooltip": false,
1336 | "viz": false
1337 | },
1338 | "lineInterpolation": "linear",
1339 | "lineWidth": 1,
1340 | "pointSize": 5,
1341 | "scaleDistribution": {
1342 | "type": "linear"
1343 | },
1344 | "showPoints": "never",
1345 | "spanNulls": true,
1346 | "stacking": {
1347 | "group": "A",
1348 | "mode": "none"
1349 | },
1350 | "thresholdsStyle": {
1351 | "mode": "off"
1352 | }
1353 | },
1354 | "links": [],
1355 | "mappings": [],
1356 | "thresholds": {
1357 | "mode": "absolute",
1358 | "steps": [
1359 | {
1360 | "color": "green",
1361 | "value": null
1362 | },
1363 | {
1364 | "color": "red",
1365 | "value": 80
1366 | }
1367 | ]
1368 | },
1369 | "unit": "short"
1370 | },
1371 | "overrides": [
1372 | {
1373 | "matcher": {
1374 | "id": "byName",
1375 | "options": " "
1376 | },
1377 | "properties": [
1378 | {
1379 | "id": "color",
1380 | "value": {
1381 | "fixedColor": "semi-dark-orange",
1382 | "mode": "fixed"
1383 | }
1384 | }
1385 | ]
1386 | },
1387 | {
1388 | "matcher": {
1389 | "id": "byName",
1390 | "options": "Message/Second"
1391 | },
1392 | "properties": [
1393 | {
1394 | "id": "color",
1395 | "value": {
1396 | "fixedColor": "light-blue",
1397 | "mode": "fixed"
1398 | }
1399 | }
1400 | ]
1401 | }
1402 | ]
1403 | },
1404 | "gridPos": {
1405 | "h": 7,
1406 | "w": 24,
1407 | "x": 0,
1408 | "y": 16
1409 | },
1410 | "id": 14,
1411 | "options": {
1412 | "legend": {
1413 | "calcs": [
1414 | "min",
1415 | "mean",
1416 | "max"
1417 | ],
1418 | "displayMode": "list",
1419 | "placement": "right"
1420 | },
1421 | "tooltip": {
1422 | "mode": "multi",
1423 | "sort": "none"
1424 | }
1425 | },
1426 | "pluginVersion": "8.4.3",
1427 | "targets": [
1428 | {
1429 | "expr": "dump1090_stats_messages_total{job=\"dump1090\", time_period=\"last1min\"} / 60",
1430 | "interval": "",
1431 | "intervalFactor": 2,
1432 | "legendFormat": " ",
1433 | "refId": "A"
1434 | }
1435 | ],
1436 | "title": "Message Rate Received",
1437 | "transparent": true,
1438 | "type": "timeseries"
1439 | },
1440 | {
1441 | "datasource": {
1442 | "type": "prometheus",
1443 | "uid": "P1809F7CD0C75ACF3"
1444 | },
1445 | "description": "Maximum range of the currently observed aircraft at the given time",
1446 | "fieldConfig": {
1447 | "defaults": {
1448 | "color": {
1449 | "mode": "palette-classic"
1450 | },
1451 | "custom": {
1452 | "axisLabel": "Nautical Miles",
1453 | "axisPlacement": "auto",
1454 | "barAlignment": 0,
1455 | "drawStyle": "line",
1456 | "fillOpacity": 75,
1457 | "gradientMode": "hue",
1458 | "hideFrom": {
1459 | "legend": false,
1460 | "tooltip": false,
1461 | "viz": false
1462 | },
1463 | "lineInterpolation": "linear",
1464 | "lineStyle": {
1465 | "fill": "solid"
1466 | },
1467 | "lineWidth": 1,
1468 | "pointSize": 5,
1469 | "scaleDistribution": {
1470 | "type": "linear"
1471 | },
1472 | "showPoints": "never",
1473 | "spanNulls": true,
1474 | "stacking": {
1475 | "group": "A",
1476 | "mode": "none"
1477 | },
1478 | "thresholdsStyle": {
1479 | "mode": "off"
1480 | }
1481 | },
1482 | "links": [],
1483 | "mappings": [],
1484 | "thresholds": {
1485 | "mode": "absolute",
1486 | "steps": [
1487 | {
1488 | "color": "green",
1489 | "value": null
1490 | }
1491 | ]
1492 | },
1493 | "unit": "none"
1494 | },
1495 | "overrides": [
1496 | {
1497 | "matcher": {
1498 | "id": "byName",
1499 | "options": " "
1500 | },
1501 | "properties": [
1502 | {
1503 | "id": "color",
1504 | "value": {
1505 | "fixedColor": "semi-dark-blue",
1506 | "mode": "fixed"
1507 | }
1508 | }
1509 | ]
1510 | },
1511 | {
1512 | "matcher": {
1513 | "id": "byName",
1514 | "options": "Distance"
1515 | },
1516 | "properties": [
1517 | {
1518 | "id": "color",
1519 | "value": {
1520 | "fixedColor": "light-blue",
1521 | "mode": "fixed"
1522 | }
1523 | }
1524 | ]
1525 | }
1526 | ]
1527 | },
1528 | "gridPos": {
1529 | "h": 8,
1530 | "w": 24,
1531 | "x": 0,
1532 | "y": 23
1533 | },
1534 | "id": 13,
1535 | "options": {
1536 | "legend": {
1537 | "calcs": [
1538 | "min",
1539 | "mean",
1540 | "max"
1541 | ],
1542 | "displayMode": "list",
1543 | "placement": "right"
1544 | },
1545 | "tooltip": {
1546 | "mode": "multi",
1547 | "sort": "none"
1548 | }
1549 | },
1550 | "pluginVersion": "8.4.3",
1551 | "targets": [
1552 | {
1553 | "expr": "dump1090_recent_aircraft_max_range{job=\"dump1090\", time_period=\"latest\"} / 1852",
1554 | "instant": false,
1555 | "interval": "",
1556 | "intervalFactor": 2,
1557 | "legendFormat": " ",
1558 | "refId": "A"
1559 | }
1560 | ],
1561 | "title": "Maximum Range",
1562 | "transparent": true,
1563 | "type": "timeseries"
1564 | },
1565 | {
1566 | "datasource": {
1567 | "type": "prometheus",
1568 | "uid": "P1809F7CD0C75ACF3"
1569 | },
1570 | "description": "",
1571 | "fieldConfig": {
1572 | "defaults": {
1573 | "color": {
1574 | "mode": "palette-classic"
1575 | },
1576 | "custom": {
1577 | "axisLabel": "dbFS",
1578 | "axisPlacement": "auto",
1579 | "barAlignment": 0,
1580 | "drawStyle": "line",
1581 | "fillOpacity": 0,
1582 | "gradientMode": "none",
1583 | "hideFrom": {
1584 | "legend": false,
1585 | "tooltip": false,
1586 | "viz": false
1587 | },
1588 | "lineInterpolation": "linear",
1589 | "lineWidth": 1,
1590 | "pointSize": 5,
1591 | "scaleDistribution": {
1592 | "type": "linear"
1593 | },
1594 | "showPoints": "never",
1595 | "spanNulls": true,
1596 | "stacking": {
1597 | "group": "A",
1598 | "mode": "none"
1599 | },
1600 | "thresholdsStyle": {
1601 | "mode": "off"
1602 | }
1603 | },
1604 | "decimals": 1,
1605 | "links": [],
1606 | "mappings": [],
1607 | "thresholds": {
1608 | "mode": "absolute",
1609 | "steps": [
1610 | {
1611 | "color": "green",
1612 | "value": null
1613 | },
1614 | {
1615 | "color": "red",
1616 | "value": 80
1617 | }
1618 | ]
1619 | },
1620 | "unit": "dB"
1621 | },
1622 | "overrides": [
1623 | {
1624 | "matcher": {
1625 | "id": "byName",
1626 | "options": "Mean Signal"
1627 | },
1628 | "properties": [
1629 | {
1630 | "id": "color",
1631 | "value": {
1632 | "fixedColor": "semi-dark-orange",
1633 | "mode": "fixed"
1634 | }
1635 | }
1636 | ]
1637 | },
1638 | {
1639 | "matcher": {
1640 | "id": "byName",
1641 | "options": "Mean Signal"
1642 | },
1643 | "properties": [
1644 | {
1645 | "id": "color",
1646 | "value": {
1647 | "fixedColor": "light-orange",
1648 | "mode": "fixed"
1649 | }
1650 | }
1651 | ]
1652 | },
1653 | {
1654 | "matcher": {
1655 | "id": "byName",
1656 | "options": "Noise"
1657 | },
1658 | "properties": [
1659 | {
1660 | "id": "color",
1661 | "value": {
1662 | "fixedColor": "semi-dark-blue",
1663 | "mode": "fixed"
1664 | }
1665 | }
1666 | ]
1667 | }
1668 | ]
1669 | },
1670 | "gridPos": {
1671 | "h": 8,
1672 | "w": 24,
1673 | "x": 0,
1674 | "y": 31
1675 | },
1676 | "id": 17,
1677 | "options": {
1678 | "legend": {
1679 | "calcs": [
1680 | "min",
1681 | "max",
1682 | "last"
1683 | ],
1684 | "displayMode": "list",
1685 | "placement": "right"
1686 | },
1687 | "tooltip": {
1688 | "mode": "multi",
1689 | "sort": "none"
1690 | }
1691 | },
1692 | "pluginVersion": "8.4.3",
1693 | "targets": [
1694 | {
1695 | "datasource": {
1696 | "type": "prometheus",
1697 | "uid": "P1809F7CD0C75ACF3"
1698 | },
1699 | "exemplar": true,
1700 | "expr": "dump1090_stats_local_peak_signal_strength_dbFS{job=\"dump1090\", time_period=\"last1min\"}",
1701 | "interval": "",
1702 | "intervalFactor": 2,
1703 | "legendFormat": "Peak Signal",
1704 | "refId": "A"
1705 | },
1706 | {
1707 | "datasource": {
1708 | "type": "prometheus",
1709 | "uid": "P1809F7CD0C75ACF3"
1710 | },
1711 | "exemplar": true,
1712 | "expr": "dump1090_stats_local_signal_strength_dbFS{job=\"dump1090\", time_period=\"last1min\"}",
1713 | "interval": "",
1714 | "intervalFactor": 2,
1715 | "legendFormat": "Mean Signal",
1716 | "refId": "B"
1717 | },
1718 | {
1719 | "datasource": {
1720 | "type": "prometheus",
1721 | "uid": "P1809F7CD0C75ACF3"
1722 | },
1723 | "exemplar": true,
1724 | "expr": "dump1090_stats_local_noise_level_dbFS{job=\"dump1090\", time_period=\"last1min\"}",
1725 | "instant": false,
1726 | "interval": "",
1727 | "intervalFactor": 1,
1728 | "legendFormat": "Noise Level",
1729 | "refId": "C"
1730 | }
1731 | ],
1732 | "title": "Signal Level",
1733 | "transparent": true,
1734 | "type": "timeseries"
1735 | },
1736 | {
1737 | "datasource": {
1738 | "type": "prometheus",
1739 | "uid": "P1809F7CD0C75ACF3"
1740 | },
1741 | "description": "Demodulator - Time spent demodulating and decoding data from the USB SDR dongle. \n\nUSB - Time spent reading sample data from the USB SDR dongle. \n\nOther - Time spent doing network I/O, processing network messages, and periodic tasks.",
1742 | "fieldConfig": {
1743 | "defaults": {
1744 | "color": {
1745 | "mode": "palette-classic"
1746 | },
1747 | "custom": {
1748 | "axisLabel": "Time",
1749 | "axisPlacement": "auto",
1750 | "barAlignment": 0,
1751 | "drawStyle": "line",
1752 | "fillOpacity": 50,
1753 | "gradientMode": "hue",
1754 | "hideFrom": {
1755 | "legend": false,
1756 | "tooltip": false,
1757 | "viz": false
1758 | },
1759 | "lineInterpolation": "linear",
1760 | "lineWidth": 1,
1761 | "pointSize": 5,
1762 | "scaleDistribution": {
1763 | "type": "linear"
1764 | },
1765 | "showPoints": "never",
1766 | "spanNulls": true,
1767 | "stacking": {
1768 | "group": "A",
1769 | "mode": "none"
1770 | },
1771 | "thresholdsStyle": {
1772 | "mode": "off"
1773 | }
1774 | },
1775 | "links": [],
1776 | "mappings": [],
1777 | "thresholds": {
1778 | "mode": "absolute",
1779 | "steps": [
1780 | {
1781 | "color": "green",
1782 | "value": null
1783 | },
1784 | {
1785 | "color": "red",
1786 | "value": 80
1787 | }
1788 | ]
1789 | },
1790 | "unit": "ms"
1791 | },
1792 | "overrides": [
1793 | {
1794 | "matcher": {
1795 | "id": "byName",
1796 | "options": "Aircraft with ADS-B Position"
1797 | },
1798 | "properties": [
1799 | {
1800 | "id": "color",
1801 | "value": {
1802 | "fixedColor": "super-light-blue",
1803 | "mode": "fixed"
1804 | }
1805 | }
1806 | ]
1807 | },
1808 | {
1809 | "matcher": {
1810 | "id": "byName",
1811 | "options": "Aircraft with MLAT Position"
1812 | },
1813 | "properties": [
1814 | {
1815 | "id": "color",
1816 | "value": {
1817 | "fixedColor": "light-green",
1818 | "mode": "fixed"
1819 | }
1820 | }
1821 | ]
1822 | },
1823 | {
1824 | "matcher": {
1825 | "id": "byName",
1826 | "options": "Aircraft with no Position"
1827 | },
1828 | "properties": [
1829 | {
1830 | "id": "color",
1831 | "value": {
1832 | "fixedColor": "light-red",
1833 | "mode": "fixed"
1834 | }
1835 | }
1836 | ]
1837 | },
1838 | {
1839 | "matcher": {
1840 | "id": "byName",
1841 | "options": "Demodulator"
1842 | },
1843 | "properties": [
1844 | {
1845 | "id": "color",
1846 | "value": {
1847 | "fixedColor": "rgb(34, 255, 0)",
1848 | "mode": "fixed"
1849 | }
1850 | }
1851 | ]
1852 | },
1853 | {
1854 | "matcher": {
1855 | "id": "byName",
1856 | "options": "Other (Network I/O, periodic tasks, etc)"
1857 | },
1858 | "properties": [
1859 | {
1860 | "id": "color",
1861 | "value": {
1862 | "fixedColor": "blue",
1863 | "mode": "fixed"
1864 | }
1865 | }
1866 | ]
1867 | },
1868 | {
1869 | "matcher": {
1870 | "id": "byName",
1871 | "options": "Total Aircraft"
1872 | },
1873 | "properties": [
1874 | {
1875 | "id": "color",
1876 | "value": {
1877 | "fixedColor": "dark-blue",
1878 | "mode": "fixed"
1879 | }
1880 | }
1881 | ]
1882 | },
1883 | {
1884 | "matcher": {
1885 | "id": "byName",
1886 | "options": "USB"
1887 | },
1888 | "properties": [
1889 | {
1890 | "id": "color",
1891 | "value": {
1892 | "fixedColor": "orange",
1893 | "mode": "fixed"
1894 | }
1895 | }
1896 | ]
1897 | }
1898 | ]
1899 | },
1900 | "gridPos": {
1901 | "h": 7,
1902 | "w": 24,
1903 | "x": 0,
1904 | "y": 39
1905 | },
1906 | "id": 18,
1907 | "options": {
1908 | "legend": {
1909 | "calcs": [
1910 | "mean"
1911 | ],
1912 | "displayMode": "list",
1913 | "placement": "right"
1914 | },
1915 | "tooltip": {
1916 | "mode": "multi",
1917 | "sort": "none"
1918 | }
1919 | },
1920 | "pluginVersion": "8.4.3",
1921 | "targets": [
1922 | {
1923 | "expr": "dump1090_stats_cpu_demod_milliseconds{job=\"dump1090\", time_period=\"last1min\"}",
1924 | "interval": "",
1925 | "intervalFactor": 2,
1926 | "legendFormat": "Demodulator",
1927 | "refId": "A"
1928 | },
1929 | {
1930 | "expr": "dump1090_stats_cpu_reader_milliseconds{job=\"dump1090\", time_period=\"last1min\"}",
1931 | "interval": "",
1932 | "intervalFactor": 2,
1933 | "legendFormat": "USB",
1934 | "refId": "B"
1935 | },
1936 | {
1937 | "expr": "dump1090_stats_cpu_background_milliseconds{job=\"dump1090\", time_period=\"last1min\"}",
1938 | "interval": "",
1939 | "intervalFactor": 2,
1940 | "legendFormat": "Other (Network I/O, periodic tasks, etc)",
1941 | "refId": "C"
1942 | }
1943 | ],
1944 | "title": "CPU Utilization",
1945 | "transparent": true,
1946 | "type": "timeseries"
1947 | }
1948 | ],
1949 | "refresh": "10s",
1950 | "schemaVersion": 35,
1951 | "style": "dark",
1952 | "tags": [],
1953 | "templating": {
1954 | "list": []
1955 | },
1956 | "time": {
1957 | "from": "now-3h",
1958 | "to": "now"
1959 | },
1960 | "timepicker": {
1961 | "refresh_intervals": [
1962 | "5s",
1963 | "10s",
1964 | "30s",
1965 | "1m",
1966 | "5m",
1967 | "15m",
1968 | "30m",
1969 | "1h",
1970 | "2h",
1971 | "1d"
1972 | ]
1973 | },
1974 | "timezone": "",
1975 | "title": "Flight Tracking Dashboard",
1976 | "uid": "dqoDE-gRz",
1977 | "version": 1,
1978 | "weekStart": ""
1979 | }
--------------------------------------------------------------------------------
/grafana/dashboards/system-information.json:
--------------------------------------------------------------------------------
1 | {
2 | "annotations": {
3 | "list": [
4 | {
5 | "builtIn": 1,
6 | "datasource": "-- Grafana --",
7 | "enable": true,
8 | "hide": true,
9 | "iconColor": "rgba(0, 211, 255, 1)",
10 | "name": "Annotations & Alerts",
11 | "target": {
12 | "limit": 100,
13 | "matchAny": false,
14 | "tags": [],
15 | "type": "dashboard"
16 | },
17 | "type": "dashboard"
18 | }
19 | ]
20 | },
21 | "editable": true,
22 | "fiscalYearStartMonth": 0,
23 | "graphTooltip": 2,
24 | "id": 1,
25 | "links": [],
26 | "liveNow": false,
27 | "panels": [
28 | {
29 | "collapsed": false,
30 | "gridPos": {
31 | "h": 1,
32 | "w": 24,
33 | "x": 0,
34 | "y": 0
35 | },
36 | "id": 4,
37 | "panels": [],
38 | "title": "System Information",
39 | "type": "row"
40 | },
41 | {
42 | "datasource": {
43 | "type": "prometheus",
44 | "uid": "P1809F7CD0C75ACF3"
45 | },
46 | "fieldConfig": {
47 | "defaults": {
48 | "color": {
49 | "mode": "thresholds"
50 | },
51 | "mappings": [],
52 | "thresholds": {
53 | "mode": "absolute",
54 | "steps": [
55 | {
56 | "color": "green",
57 | "value": null
58 | }
59 | ]
60 | }
61 | },
62 | "overrides": []
63 | },
64 | "gridPos": {
65 | "h": 4,
66 | "w": 7,
67 | "x": 0,
68 | "y": 1
69 | },
70 | "id": 8,
71 | "options": {
72 | "colorMode": "value",
73 | "graphMode": "none",
74 | "justifyMode": "auto",
75 | "orientation": "auto",
76 | "reduceOptions": {
77 | "calcs": [
78 | "lastNotNull"
79 | ],
80 | "fields": "",
81 | "values": false
82 | },
83 | "textMode": "auto"
84 | },
85 | "pluginVersion": "8.4.3",
86 | "targets": [
87 | {
88 | "datasource": {
89 | "type": "prometheus",
90 | "uid": "P1809F7CD0C75ACF3"
91 | },
92 | "exemplar": true,
93 | "expr": "count(count(node_cpu_seconds_total{job=\"node_exporter\"}) by (cpu))",
94 | "interval": "",
95 | "legendFormat": "",
96 | "refId": "A"
97 | }
98 | ],
99 | "title": "CPU Cores",
100 | "type": "stat"
101 | },
102 | {
103 | "datasource": {
104 | "type": "prometheus",
105 | "uid": "P1809F7CD0C75ACF3"
106 | },
107 | "fieldConfig": {
108 | "defaults": {
109 | "color": {
110 | "mode": "thresholds"
111 | },
112 | "mappings": [],
113 | "thresholds": {
114 | "mode": "absolute",
115 | "steps": [
116 | {
117 | "color": "green",
118 | "value": null
119 | }
120 | ]
121 | },
122 | "unit": "dtdhms"
123 | },
124 | "overrides": []
125 | },
126 | "gridPos": {
127 | "h": 4,
128 | "w": 9,
129 | "x": 7,
130 | "y": 1
131 | },
132 | "id": 10,
133 | "options": {
134 | "colorMode": "value",
135 | "graphMode": "none",
136 | "justifyMode": "auto",
137 | "orientation": "auto",
138 | "reduceOptions": {
139 | "calcs": [
140 | "lastNotNull"
141 | ],
142 | "fields": "",
143 | "values": false
144 | },
145 | "textMode": "auto"
146 | },
147 | "pluginVersion": "8.4.3",
148 | "targets": [
149 | {
150 | "datasource": {
151 | "type": "prometheus",
152 | "uid": "P1809F7CD0C75ACF3"
153 | },
154 | "exemplar": true,
155 | "expr": "node_time_seconds{job=\"node_exporter\"} - node_boot_time_seconds{job=\"node_exporter\"}",
156 | "interval": "",
157 | "legendFormat": "",
158 | "refId": "A"
159 | }
160 | ],
161 | "title": "System Uptime",
162 | "type": "stat"
163 | },
164 | {
165 | "datasource": {
166 | "type": "prometheus",
167 | "uid": "P1809F7CD0C75ACF3"
168 | },
169 | "fieldConfig": {
170 | "defaults": {
171 | "color": {
172 | "mode": "thresholds"
173 | },
174 | "mappings": [],
175 | "thresholds": {
176 | "mode": "absolute",
177 | "steps": [
178 | {
179 | "color": "green",
180 | "value": null
181 | }
182 | ]
183 | },
184 | "unit": "decbytes"
185 | },
186 | "overrides": []
187 | },
188 | "gridPos": {
189 | "h": 4,
190 | "w": 8,
191 | "x": 16,
192 | "y": 1
193 | },
194 | "id": 30,
195 | "options": {
196 | "colorMode": "value",
197 | "graphMode": "none",
198 | "justifyMode": "auto",
199 | "orientation": "auto",
200 | "reduceOptions": {
201 | "calcs": [
202 | "lastNotNull"
203 | ],
204 | "fields": "",
205 | "values": false
206 | },
207 | "textMode": "auto"
208 | },
209 | "pluginVersion": "8.4.3",
210 | "targets": [
211 | {
212 | "datasource": {
213 | "type": "prometheus",
214 | "uid": "P1809F7CD0C75ACF3"
215 | },
216 | "exemplar": true,
217 | "expr": "node_filesystem_size_bytes{device=\"/dev/root\", mountpoint=\"/\"}",
218 | "interval": "",
219 | "legendFormat": "",
220 | "refId": "A"
221 | }
222 | ],
223 | "title": "Total Storage",
224 | "type": "stat"
225 | },
226 | {
227 | "datasource": {
228 | "type": "prometheus",
229 | "uid": "P1809F7CD0C75ACF3"
230 | },
231 | "fieldConfig": {
232 | "defaults": {
233 | "color": {
234 | "mode": "thresholds"
235 | },
236 | "mappings": [],
237 | "max": 100,
238 | "min": 0,
239 | "thresholds": {
240 | "mode": "absolute",
241 | "steps": [
242 | {
243 | "color": "green",
244 | "value": null
245 | }
246 | ]
247 | },
248 | "unit": "percent"
249 | },
250 | "overrides": []
251 | },
252 | "gridPos": {
253 | "h": 8,
254 | "w": 5,
255 | "x": 0,
256 | "y": 5
257 | },
258 | "id": 22,
259 | "options": {
260 | "orientation": "vertical",
261 | "reduceOptions": {
262 | "calcs": [
263 | "last"
264 | ],
265 | "fields": "",
266 | "values": false
267 | },
268 | "showThresholdLabels": true,
269 | "showThresholdMarkers": true
270 | },
271 | "pluginVersion": "8.4.3",
272 | "targets": [
273 | {
274 | "datasource": {
275 | "type": "prometheus",
276 | "uid": "P1809F7CD0C75ACF3"
277 | },
278 | "exemplar": false,
279 | "expr": "100 - (node_filesystem_avail_bytes{device=\"/dev/root\", mountpoint=\"/\"}/node_filesystem_size_bytes{device=\"/dev/root\", mountpoint=\"/\"} * 100)",
280 | "instant": true,
281 | "interval": "",
282 | "legendFormat": "",
283 | "refId": "A"
284 | }
285 | ],
286 | "title": "File System Usage",
287 | "type": "gauge"
288 | },
289 | {
290 | "datasource": {
291 | "type": "prometheus",
292 | "uid": "P1809F7CD0C75ACF3"
293 | },
294 | "fieldConfig": {
295 | "defaults": {
296 | "color": {
297 | "mode": "palette-classic"
298 | },
299 | "custom": {
300 | "axisLabel": "",
301 | "axisPlacement": "auto",
302 | "barAlignment": 0,
303 | "drawStyle": "line",
304 | "fillOpacity": 12,
305 | "gradientMode": "none",
306 | "hideFrom": {
307 | "legend": false,
308 | "tooltip": false,
309 | "viz": false
310 | },
311 | "lineInterpolation": "linear",
312 | "lineWidth": 1,
313 | "pointSize": 5,
314 | "scaleDistribution": {
315 | "type": "linear"
316 | },
317 | "showPoints": "never",
318 | "spanNulls": false,
319 | "stacking": {
320 | "group": "A",
321 | "mode": "none"
322 | },
323 | "thresholdsStyle": {
324 | "mode": "off"
325 | }
326 | },
327 | "mappings": [],
328 | "thresholds": {
329 | "mode": "absolute",
330 | "steps": [
331 | {
332 | "color": "green",
333 | "value": null
334 | },
335 | {
336 | "color": "red",
337 | "value": 80
338 | }
339 | ]
340 | },
341 | "unit": "decbytes"
342 | },
343 | "overrides": [
344 | {
345 | "matcher": {
346 | "id": "byName",
347 | "options": "Used"
348 | },
349 | "properties": [
350 | {
351 | "id": "color",
352 | "value": {
353 | "fixedColor": "semi-dark-yellow",
354 | "mode": "fixed"
355 | }
356 | },
357 | {
358 | "id": "custom.fillOpacity",
359 | "value": 75
360 | }
361 | ]
362 | }
363 | ]
364 | },
365 | "gridPos": {
366 | "h": 8,
367 | "w": 19,
368 | "x": 5,
369 | "y": 5
370 | },
371 | "id": 24,
372 | "options": {
373 | "legend": {
374 | "calcs": [
375 | "min",
376 | "last",
377 | "max"
378 | ],
379 | "displayMode": "table",
380 | "placement": "right"
381 | },
382 | "tooltip": {
383 | "mode": "single",
384 | "sort": "none"
385 | }
386 | },
387 | "targets": [
388 | {
389 | "datasource": {
390 | "type": "prometheus",
391 | "uid": "P1809F7CD0C75ACF3"
392 | },
393 | "exemplar": true,
394 | "expr": "node_filesystem_size_bytes{device=\"/dev/root\", mountpoint=\"/\"}",
395 | "interval": "",
396 | "legendFormat": "Total",
397 | "refId": "A"
398 | },
399 | {
400 | "datasource": {
401 | "type": "prometheus",
402 | "uid": "P1809F7CD0C75ACF3"
403 | },
404 | "exemplar": true,
405 | "expr": "node_filesystem_size_bytes{device=\"/dev/root\", mountpoint=\"/\"} - node_filesystem_avail_bytes{device=\"/dev/root\", mountpoint=\"/\"}",
406 | "hide": false,
407 | "interval": "",
408 | "legendFormat": "Used",
409 | "refId": "B"
410 | },
411 | {
412 | "datasource": {
413 | "type": "prometheus",
414 | "uid": "P1809F7CD0C75ACF3"
415 | },
416 | "exemplar": true,
417 | "expr": "node_filesystem_avail_bytes{device=\"/dev/root\", mountpoint=\"/\"}",
418 | "hide": false,
419 | "interval": "",
420 | "legendFormat": "Available",
421 | "refId": "C"
422 | }
423 | ],
424 | "title": "File System Monitor",
425 | "type": "timeseries"
426 | },
427 | {
428 | "collapsed": false,
429 | "gridPos": {
430 | "h": 1,
431 | "w": 24,
432 | "x": 0,
433 | "y": 13
434 | },
435 | "id": 28,
436 | "panels": [],
437 | "title": "CPU",
438 | "type": "row"
439 | },
440 | {
441 | "datasource": {
442 | "type": "prometheus",
443 | "uid": "P1809F7CD0C75ACF3"
444 | },
445 | "description": "",
446 | "fieldConfig": {
447 | "defaults": {
448 | "color": {
449 | "mode": "thresholds"
450 | },
451 | "mappings": [],
452 | "max": 100,
453 | "min": 0,
454 | "thresholds": {
455 | "mode": "percentage",
456 | "steps": [
457 | {
458 | "color": "green",
459 | "value": null
460 | },
461 | {
462 | "color": "yellow",
463 | "value": 75
464 | },
465 | {
466 | "color": "red",
467 | "value": 90
468 | }
469 | ]
470 | },
471 | "unit": "percent"
472 | },
473 | "overrides": []
474 | },
475 | "gridPos": {
476 | "h": 8,
477 | "w": 5,
478 | "x": 0,
479 | "y": 14
480 | },
481 | "id": 6,
482 | "options": {
483 | "orientation": "auto",
484 | "reduceOptions": {
485 | "calcs": [
486 | "lastNotNull"
487 | ],
488 | "fields": "",
489 | "values": false
490 | },
491 | "showThresholdLabels": true,
492 | "showThresholdMarkers": true,
493 | "text": {}
494 | },
495 | "pluginVersion": "8.4.3",
496 | "targets": [
497 | {
498 | "datasource": {
499 | "type": "prometheus",
500 | "uid": "P1809F7CD0C75ACF3"
501 | },
502 | "exemplar": false,
503 | "expr": "100 - (avg (irate(node_cpu_seconds_total{job=\"node_exporter\",mode=\"idle\"}[5m])) * 100)",
504 | "instant": true,
505 | "interval": "",
506 | "legendFormat": "",
507 | "refId": "A"
508 | }
509 | ],
510 | "title": "Current CPU Usage",
511 | "type": "gauge"
512 | },
513 | {
514 | "datasource": {
515 | "type": "prometheus",
516 | "uid": "P1809F7CD0C75ACF3"
517 | },
518 | "fieldConfig": {
519 | "defaults": {
520 | "color": {
521 | "mode": "palette-classic"
522 | },
523 | "custom": {
524 | "axisLabel": "",
525 | "axisPlacement": "auto",
526 | "barAlignment": 0,
527 | "drawStyle": "line",
528 | "fillOpacity": 10,
529 | "gradientMode": "none",
530 | "hideFrom": {
531 | "legend": false,
532 | "tooltip": false,
533 | "viz": false
534 | },
535 | "lineInterpolation": "linear",
536 | "lineStyle": {
537 | "fill": "solid"
538 | },
539 | "lineWidth": 1,
540 | "pointSize": 5,
541 | "scaleDistribution": {
542 | "type": "linear"
543 | },
544 | "showPoints": "never",
545 | "spanNulls": false,
546 | "stacking": {
547 | "group": "A",
548 | "mode": "none"
549 | },
550 | "thresholdsStyle": {
551 | "mode": "area"
552 | }
553 | },
554 | "mappings": [],
555 | "thresholds": {
556 | "mode": "percentage",
557 | "steps": [
558 | {
559 | "color": "green",
560 | "value": null
561 | },
562 | {
563 | "color": "light-red",
564 | "value": 85
565 | }
566 | ]
567 | },
568 | "unit": "percent"
569 | },
570 | "overrides": []
571 | },
572 | "gridPos": {
573 | "h": 8,
574 | "w": 19,
575 | "x": 5,
576 | "y": 14
577 | },
578 | "id": 16,
579 | "options": {
580 | "legend": {
581 | "calcs": [
582 | "min",
583 | "last",
584 | "max"
585 | ],
586 | "displayMode": "table",
587 | "placement": "right"
588 | },
589 | "tooltip": {
590 | "mode": "single",
591 | "sort": "none"
592 | }
593 | },
594 | "pluginVersion": "8.4.3",
595 | "targets": [
596 | {
597 | "datasource": {
598 | "type": "prometheus",
599 | "uid": "P1809F7CD0C75ACF3"
600 | },
601 | "exemplar": true,
602 | "expr": "100 - (avg(irate(node_cpu_seconds_total{mode=\"idle\"}[30m])) * 100)",
603 | "interval": "",
604 | "legendFormat": "CPU Utilization",
605 | "refId": "A"
606 | }
607 | ],
608 | "title": "CPU Usage Monitor",
609 | "type": "timeseries"
610 | },
611 | {
612 | "datasource": {
613 | "type": "prometheus",
614 | "uid": "P1809F7CD0C75ACF3"
615 | },
616 | "fieldConfig": {
617 | "defaults": {
618 | "color": {
619 | "mode": "thresholds"
620 | },
621 | "mappings": [],
622 | "max": 100,
623 | "min": 0,
624 | "thresholds": {
625 | "mode": "absolute",
626 | "steps": [
627 | {
628 | "color": "green",
629 | "value": null
630 | },
631 | {
632 | "color": "#EAB839",
633 | "value": 75
634 | },
635 | {
636 | "color": "red",
637 | "value": 85
638 | }
639 | ]
640 | },
641 | "unit": "celsius"
642 | },
643 | "overrides": []
644 | },
645 | "gridPos": {
646 | "h": 8,
647 | "w": 5,
648 | "x": 0,
649 | "y": 22
650 | },
651 | "id": 20,
652 | "options": {
653 | "orientation": "auto",
654 | "reduceOptions": {
655 | "calcs": [
656 | "lastNotNull"
657 | ],
658 | "fields": "",
659 | "values": false
660 | },
661 | "showThresholdLabels": true,
662 | "showThresholdMarkers": true
663 | },
664 | "pluginVersion": "8.4.3",
665 | "targets": [
666 | {
667 | "datasource": {
668 | "type": "prometheus",
669 | "uid": "P1809F7CD0C75ACF3"
670 | },
671 | "exemplar": false,
672 | "expr": "max(node_hwmon_temp_celsius{job=\"node_exporter\"})",
673 | "instant": true,
674 | "interval": "",
675 | "legendFormat": "",
676 | "refId": "A"
677 | }
678 | ],
679 | "title": "Current CPU Temperature",
680 | "type": "gauge"
681 | },
682 | {
683 | "datasource": {
684 | "type": "prometheus",
685 | "uid": "P1809F7CD0C75ACF3"
686 | },
687 | "fieldConfig": {
688 | "defaults": {
689 | "color": {
690 | "mode": "palette-classic"
691 | },
692 | "custom": {
693 | "axisLabel": "",
694 | "axisPlacement": "auto",
695 | "barAlignment": 0,
696 | "drawStyle": "line",
697 | "fillOpacity": 0,
698 | "gradientMode": "none",
699 | "hideFrom": {
700 | "legend": false,
701 | "tooltip": false,
702 | "viz": false
703 | },
704 | "lineInterpolation": "linear",
705 | "lineStyle": {
706 | "fill": "solid"
707 | },
708 | "lineWidth": 2,
709 | "pointSize": 5,
710 | "scaleDistribution": {
711 | "type": "linear"
712 | },
713 | "showPoints": "never",
714 | "spanNulls": false,
715 | "stacking": {
716 | "group": "A",
717 | "mode": "none"
718 | },
719 | "thresholdsStyle": {
720 | "mode": "area"
721 | }
722 | },
723 | "mappings": [],
724 | "max": 95,
725 | "min": 30,
726 | "thresholds": {
727 | "mode": "absolute",
728 | "steps": [
729 | {
730 | "color": "green",
731 | "value": null
732 | },
733 | {
734 | "color": "light-red",
735 | "value": 85
736 | }
737 | ]
738 | },
739 | "unit": "celsius"
740 | },
741 | "overrides": [
742 | {
743 | "__systemRef": "hideSeriesFrom",
744 | "matcher": {
745 | "id": "byNames",
746 | "options": {
747 | "mode": "exclude",
748 | "names": [
749 | "CPU Temperature"
750 | ],
751 | "prefix": "All except:",
752 | "readOnly": true
753 | }
754 | },
755 | "properties": [
756 | {
757 | "id": "custom.hideFrom",
758 | "value": {
759 | "legend": false,
760 | "tooltip": false,
761 | "viz": false
762 | }
763 | }
764 | ]
765 | }
766 | ]
767 | },
768 | "gridPos": {
769 | "h": 8,
770 | "w": 19,
771 | "x": 5,
772 | "y": 22
773 | },
774 | "id": 14,
775 | "options": {
776 | "legend": {
777 | "calcs": [
778 | "min",
779 | "last",
780 | "max"
781 | ],
782 | "displayMode": "table",
783 | "placement": "right"
784 | },
785 | "tooltip": {
786 | "mode": "single",
787 | "sort": "none"
788 | }
789 | },
790 | "pluginVersion": "8.4.3",
791 | "targets": [
792 | {
793 | "datasource": {
794 | "type": "prometheus",
795 | "uid": "P1809F7CD0C75ACF3"
796 | },
797 | "exemplar": true,
798 | "expr": "max(node_hwmon_temp_celsius{job=\"node_exporter\"})",
799 | "interval": "",
800 | "legendFormat": "Temperature",
801 | "refId": "A"
802 | }
803 | ],
804 | "title": "CPU Temperature Monitor",
805 | "type": "timeseries"
806 | },
807 | {
808 | "collapsed": false,
809 | "gridPos": {
810 | "h": 1,
811 | "w": 24,
812 | "x": 0,
813 | "y": 30
814 | },
815 | "id": 26,
816 | "panels": [],
817 | "title": "Memory",
818 | "type": "row"
819 | },
820 | {
821 | "datasource": {
822 | "type": "prometheus",
823 | "uid": "P1809F7CD0C75ACF3"
824 | },
825 | "fieldConfig": {
826 | "defaults": {
827 | "color": {
828 | "mode": "palette-classic"
829 | },
830 | "custom": {
831 | "axisLabel": "",
832 | "axisPlacement": "auto",
833 | "barAlignment": 0,
834 | "drawStyle": "line",
835 | "fillOpacity": 12,
836 | "gradientMode": "none",
837 | "hideFrom": {
838 | "legend": false,
839 | "tooltip": false,
840 | "viz": false
841 | },
842 | "lineInterpolation": "linear",
843 | "lineWidth": 1,
844 | "pointSize": 5,
845 | "scaleDistribution": {
846 | "type": "linear"
847 | },
848 | "showPoints": "never",
849 | "spanNulls": false,
850 | "stacking": {
851 | "group": "A",
852 | "mode": "none"
853 | },
854 | "thresholdsStyle": {
855 | "mode": "off"
856 | }
857 | },
858 | "mappings": [],
859 | "thresholds": {
860 | "mode": "absolute",
861 | "steps": [
862 | {
863 | "color": "green",
864 | "value": null
865 | },
866 | {
867 | "color": "red",
868 | "value": 80
869 | }
870 | ]
871 | },
872 | "unit": "decbytes"
873 | },
874 | "overrides": [
875 | {
876 | "matcher": {
877 | "id": "byName",
878 | "options": "Used"
879 | },
880 | "properties": [
881 | {
882 | "id": "custom.fillOpacity",
883 | "value": 75
884 | }
885 | ]
886 | }
887 | ]
888 | },
889 | "gridPos": {
890 | "h": 9,
891 | "w": 24,
892 | "x": 0,
893 | "y": 31
894 | },
895 | "id": 18,
896 | "options": {
897 | "legend": {
898 | "calcs": [
899 | "min",
900 | "last",
901 | "max"
902 | ],
903 | "displayMode": "table",
904 | "placement": "right"
905 | },
906 | "tooltip": {
907 | "mode": "single",
908 | "sort": "none"
909 | }
910 | },
911 | "targets": [
912 | {
913 | "datasource": {
914 | "type": "prometheus",
915 | "uid": "P1809F7CD0C75ACF3"
916 | },
917 | "exemplar": true,
918 | "expr": "node_memory_MemTotal_bytes{job=\"node_exporter\"}",
919 | "instant": false,
920 | "interval": "",
921 | "legendFormat": "Total",
922 | "refId": "A"
923 | },
924 | {
925 | "datasource": {
926 | "type": "prometheus",
927 | "uid": "P1809F7CD0C75ACF3"
928 | },
929 | "exemplar": true,
930 | "expr": "node_memory_MemTotal_bytes{job=\"node_exporter\"} - node_memory_MemFree_bytes{job=\"node_exporter\"} - node_memory_Buffers_bytes{job=\"node_exporter\"} - node_memory_Cached_bytes{job=\"node_exporter\"} - node_memory_SReclaimable_bytes{job=\"node_exporter\"}",
931 | "hide": false,
932 | "instant": false,
933 | "interval": "",
934 | "legendFormat": "Used",
935 | "refId": "B"
936 | },
937 | {
938 | "datasource": {
939 | "type": "prometheus",
940 | "uid": "P1809F7CD0C75ACF3"
941 | },
942 | "exemplar": true,
943 | "expr": "node_memory_MemAvailable_bytes{job=\"node_exporter\"}",
944 | "hide": false,
945 | "instant": false,
946 | "interval": "",
947 | "legendFormat": "Available",
948 | "refId": "C"
949 | }
950 | ],
951 | "title": "Memory Usage Monitor",
952 | "type": "timeseries"
953 | }
954 | ],
955 | "refresh": "10s",
956 | "schemaVersion": 35,
957 | "style": "dark",
958 | "tags": [],
959 | "templating": {
960 | "list": []
961 | },
962 | "time": {
963 | "from": "now-15m",
964 | "to": "now"
965 | },
966 | "timepicker": {},
967 | "timezone": "",
968 | "title": "Raspberry Pi System Dashboard",
969 | "uid": "Kt-ERbgRk",
970 | "version": 3,
971 | "weekStart": ""
972 | }
--------------------------------------------------------------------------------
/grafana/grafana.ini:
--------------------------------------------------------------------------------
1 | ##################### Grafana Configuration Example #####################
2 | #
3 | # Everything has defaults so you only need to uncomment things you want to
4 | # change
5 |
6 | # possible values : production, development
7 | ;app_mode = production
8 |
9 | # instance name, defaults to HOSTNAME environment variable value or hostname if HOSTNAME var is empty
10 | ;instance_name = ${HOSTNAME}
11 |
12 | #################################### Paths ####################################
13 | [paths]
14 | # Path to where grafana can store temp files, sessions, and the sqlite3 db (if that is used)
15 | ;data = /var/lib/grafana
16 |
17 | # Temporary files in `data` directory older than given duration will be removed
18 | ;temp_data_lifetime = 24h
19 |
20 | # Directory where grafana can store logs
21 | ;logs = /var/log/grafana
22 |
23 | # Directory where grafana will automatically scan and look for plugins
24 | ;plugins = /var/lib/grafana/plugins
25 |
26 | # folder that contains provisioning config files that grafana will apply on startup and while running.
27 | provisioning = /etc/grafana/provisioning
28 |
29 | #################################### Server ####################################
30 | [server]
31 | # Protocol (http, https, h2, socket)
32 | ;protocol = http
33 |
34 | # The ip address to bind to, empty will bind to all interfaces
35 | ;http_addr =
36 |
37 | # The http port to use
38 | ;http_port = 3000
39 |
40 | # The public facing domain name used to access grafana from a browser
41 | ;domain = localhost
42 |
43 | # Redirect to correct domain if host header does not match domain
44 | # Prevents DNS rebinding attacks
45 | ;enforce_domain = false
46 |
47 | # The full public facing url you use in browser, used for redirects and emails
48 | # If you use reverse proxy and sub path specify full url (with sub path)
49 | ;root_url = %(protocol)s://%(domain)s:%(http_port)s/
50 |
51 | # Serve Grafana from subpath specified in `root_url` setting. By default it is set to `false` for compatibility reasons.
52 | ;serve_from_sub_path = false
53 |
54 | # Log web requests
55 | ;router_logging = false
56 |
57 | # the path relative working path
58 | ;static_root_path = public
59 |
60 | # enable gzip
61 | ;enable_gzip = false
62 |
63 | # https certs & key file
64 | ;cert_file =
65 | ;cert_key =
66 |
67 | # Unix socket path
68 | ;socket =
69 |
70 | #################################### Database ####################################
71 | [database]
72 | # You can configure the database connection by specifying type, host, name, user and password
73 | # as separate properties or as on string using the url properties.
74 |
75 | # Either "mysql", "postgres" or "sqlite3", it's your choice
76 | ;type = sqlite3
77 | ;host = 127.0.0.1:3306
78 | ;name = grafana
79 | ;user = root
80 | # If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;"""
81 | ;password =
82 |
83 | # Use either URL or the previous fields to configure the database
84 | # Example: mysql://user:secret@host:port/database
85 | ;url =
86 |
87 | # For "postgres" only, either "disable", "require" or "verify-full"
88 | ;ssl_mode = disable
89 |
90 | ;ca_cert_path =
91 | ;client_key_path =
92 | ;client_cert_path =
93 | ;server_cert_name =
94 |
95 | # For "sqlite3" only, path relative to data_path setting
96 | ;path = grafana.db
97 |
98 | # Max idle conn setting default is 2
99 | ;max_idle_conn = 2
100 |
101 | # Max conn setting default is 0 (mean not set)
102 | ;max_open_conn =
103 |
104 | # Connection Max Lifetime default is 14400 (means 14400 seconds or 4 hours)
105 | ;conn_max_lifetime = 14400
106 |
107 | # Set to true to log the sql calls and execution times.
108 | ;log_queries =
109 |
110 | # For "sqlite3" only. cache mode setting used for connecting to the database. (private, shared)
111 | ;cache_mode = private
112 |
113 | #################################### Cache server #############################
114 | [remote_cache]
115 | # Either "redis", "memcached" or "database" default is "database"
116 | ;type = database
117 |
118 | # cache connectionstring options
119 | # database: will use Grafana primary database.
120 | # 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'.
121 | # memcache: 127.0.0.1:11211
122 | ;connstr =
123 |
124 | #################################### Data proxy ###########################
125 | [dataproxy]
126 |
127 | # This enables data proxy logging, default is false
128 | ;logging = false
129 |
130 | # How long the data proxy should wait before timing out default is 30 (seconds)
131 | ;timeout = 30
132 |
133 | # If enabled and user is not anonymous, data proxy will add X-Grafana-User header with username into the request, default is false.
134 | ;send_user_header = false
135 |
136 | #################################### Analytics ####################################
137 | [analytics]
138 | # Server reporting, sends usage counters to stats.grafana.org every 24 hours.
139 | # No ip addresses are being tracked, only simple counters to track
140 | # running instances, dashboard and error counts. It is very helpful to us.
141 | # Change this option to false to disable reporting.
142 | ;reporting_enabled = true
143 |
144 | # Set to false to disable all checks to https://grafana.net
145 | # for new vesions (grafana itself and plugins), check is used
146 | # in some UI views to notify that grafana or plugin update exists
147 | # This option does not cause any auto updates, nor send any information
148 | # only a GET request to http://grafana.com to get latest versions
149 | ;check_for_updates = true
150 |
151 | # Google Analytics universal tracking code, only enabled if you specify an id here
152 | ;google_analytics_ua_id =
153 |
154 | # Google Tag Manager ID, only enabled if you specify an id here
155 | ;google_tag_manager_id =
156 |
157 | #################################### Security ####################################
158 | [security]
159 | # disable creation of admin user on first start of grafana
160 | ;disable_initial_admin_creation = false
161 |
162 | # default admin user, created on startup
163 | ;admin_user = admin
164 |
165 | # default admin password, can be changed before first start of grafana, or in profile settings
166 | ;admin_password = admin
167 |
168 | # used for signing
169 | ;secret_key = SW2YcwTIb9zpOOhoPsMm
170 |
171 | # disable gravatar profile images
172 | ;disable_gravatar = false
173 |
174 | # data source proxy whitelist (ip_or_domain:port separated by spaces)
175 | ;data_source_proxy_whitelist =
176 |
177 | # disable protection against brute force login attempts
178 | ;disable_brute_force_login_protection = false
179 |
180 | # set to true if you host Grafana behind HTTPS. default is false.
181 | ;cookie_secure = false
182 |
183 | # set cookie SameSite attribute. defaults to `lax`. can be set to "lax", "strict", "none" and "disabled"
184 | ;cookie_samesite = lax
185 |
186 | # set to true if you want to allow browsers to render Grafana in a ,