Compare commits
152
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
456f9260cd | ||
|
|
c6b8d251b6 | ||
|
|
809eea6d51
|
||
|
|
acd823d196
|
||
|
|
c3b911e4ab
|
||
|
|
820340455d | ||
|
|
bb8da2f3ba | ||
|
|
d26f4821de | ||
|
|
5910d406bf | ||
|
|
a7d27804e2 | ||
|
|
5e79bad09e | ||
|
|
7c95f2191c | ||
|
|
3951ecae96 | ||
|
|
82ad813a1c | ||
|
|
5db7c87292 | ||
|
|
10ee6528fd | ||
|
|
57f9f3883b | ||
|
|
352059fbbc | ||
|
|
a913e10a42 | ||
|
|
2cab677ef9 | ||
|
|
3f4269511c | ||
|
|
2ecc949323 | ||
|
|
cc0d255b99 | ||
|
|
98a8a469c4 | ||
|
|
03a062c649 | ||
|
|
c38cf40898 | ||
|
|
fe3bd8e56a | ||
|
|
04a3aa1d54 | ||
|
|
212b0bdbf3 | ||
|
|
93fb70770b | ||
|
|
a46aab984c | ||
|
|
6bbe3afbdd | ||
|
|
144fb51126
|
||
|
|
5b6bb444ad | ||
|
|
f8fb3c59ad | ||
|
|
107d352036 | ||
|
|
bcb4ebbbb8 | ||
|
|
95b25cacc5 | ||
|
|
f01ac8f468 | ||
|
|
2756b38ec3
|
||
|
|
728221523f | ||
|
|
820ce00535 | ||
|
|
96bfd53907
|
||
|
|
ec757b8b48 | ||
|
|
ca4cf45e7a | ||
|
|
07960e0c92
|
||
|
|
7afeb02b4d | ||
|
|
ecc38d207c | ||
|
|
d082a82e73 | ||
|
|
8f914714cb
|
||
|
|
ea2a2d53ef
|
||
|
|
6cc59537c0
|
||
|
|
a181d45ee8
|
||
|
|
e662c59cd5
|
||
|
|
1577313de5
|
||
|
|
498330b752
|
||
|
|
6002b003a0
|
||
|
|
4468b3e590 | ||
|
|
ab73f9c35c | ||
|
|
b990b898c7 | ||
|
|
2b3845e18c | ||
|
|
d9e8e946ac | ||
|
|
03b393bbae | ||
|
|
451f19f082 | ||
|
|
3c1c4bfffc | ||
|
|
c0141082bc | ||
|
|
6eb8e0aba2 | ||
|
|
7ea92e8cec
|
||
|
|
e34da438a6 | ||
|
|
595d4841d5 | ||
|
|
85a0dfabeb | ||
|
|
1d5ef1dd60 | ||
|
|
4e82d683d6
|
||
|
|
c7745ceb37 | ||
|
|
555246f00e
|
||
|
|
f2f3711faa
|
||
|
|
9fc2c8d90b | ||
|
|
0564cb1242 | ||
|
|
1221d4e318 | ||
|
|
7d233c126b | ||
|
|
bac0fc2cdd
|
||
|
|
fabbbf6073 | ||
|
|
848b58e289
|
||
|
|
8d99b0f7fe
|
||
|
|
c34dc8790e | ||
|
|
f8de4902fc
|
||
|
|
820358e3a7
|
||
|
|
492f59532e
|
||
|
|
1bb0e7628c | ||
|
|
6d6f3c66b3 | ||
|
|
a93ff085ce | ||
|
|
5234a954d0 | ||
|
|
af774e543b | ||
|
|
443f0efd47 | ||
|
|
306da7e003
|
||
|
|
e7ea4b8956
|
||
|
|
ed0b0147e3
|
||
|
|
a0268ecb6f
|
||
|
|
62bbbbd652
|
||
|
|
67f92d8b23
|
||
|
|
f46134f606 | ||
|
|
93b9f6495f
|
||
|
|
72fd37d82d | ||
|
|
b07a1de547
|
||
|
|
cb4460e79a | ||
|
|
a37ff99cc7 | ||
|
|
9462186e5f | ||
|
|
8059ce011f | ||
|
|
12955f6fa8 | ||
|
|
d07650835f | ||
|
|
50d4938b75 | ||
|
|
98d8ea6a96 | ||
|
|
96db8497cd | ||
|
|
106bd3c581 | ||
|
|
a0223ae5e9 | ||
|
|
508a4e51a5 | ||
|
|
27c23b2430 | ||
|
|
60e9ab39d5
|
||
|
|
2a7c0030ff
|
||
|
|
58ad6f1162
|
||
|
|
1c28249258
|
||
|
|
a49c3b813f | ||
|
|
c8a5f35f95 | ||
|
|
247eebc63e
|
||
|
|
0b4826b08a | ||
|
|
558afaf5d0 | ||
|
|
bf2077b19c
|
||
|
|
8783bc086a
|
||
|
|
1d24966003
|
||
|
|
77ac732143
|
||
|
|
bd3b1eb18d
|
||
|
|
4dcdcd0017
|
||
|
|
82b3c68597
|
||
|
|
268fa1c5af
|
||
|
|
74b85e0f42
|
||
|
|
bec94d64a4 | ||
|
|
e42d35e016 | ||
|
|
24248d4186 | ||
|
|
fde96ef9d0 | ||
|
|
a27ef8c1d8 | ||
|
|
31b9091263 | ||
|
|
eb79961993 | ||
|
|
aa3ef41304 | ||
|
|
7095e75193 | ||
|
|
0c6f9776dc | ||
|
|
0d9a565c3a | ||
|
|
5b59c0758d
|
||
|
|
d3f0714bc7
|
||
|
|
2bd0f29ac6
|
||
|
|
d703a633ce
|
||
|
|
85b5328dd1
|
||
|
|
3715d1af73
|
@@ -26,10 +26,9 @@ homelab-v2/
|
|||||||
│ └── configs/ # ClusterIssuer, MetalLB config
|
│ └── configs/ # ClusterIssuer, MetalLB config
|
||||||
├── app/
|
├── app/
|
||||||
│ ├── archmirror/
|
│ ├── archmirror/
|
||||||
|
│ ├── blog/
|
||||||
│ ├── external/ # External service vars (e.g. Home Assistant)
|
│ ├── external/ # External service vars (e.g. Home Assistant)
|
||||||
│ ├── firefly/
|
|
||||||
│ ├── gitea/
|
│ ├── gitea/
|
||||||
│ ├── grocy/
|
|
||||||
│ ├── homepage/
|
│ ├── homepage/
|
||||||
│ ├── immich/
|
│ ├── immich/
|
||||||
│ ├── jellyfin/
|
│ ├── jellyfin/
|
||||||
@@ -37,7 +36,8 @@ homelab-v2/
|
|||||||
│ ├── media/
|
│ ├── media/
|
||||||
│ ├── paperless/
|
│ ├── paperless/
|
||||||
│ ├── pihole/
|
│ ├── pihole/
|
||||||
│ └── podsync/
|
│ ├── podsync/
|
||||||
|
│ └── vikunja/
|
||||||
└── docs/
|
└── docs/
|
||||||
└── k8s-service-spec.md
|
└── k8s-service-spec.md
|
||||||
```
|
```
|
||||||
@@ -47,17 +47,19 @@ homelab-v2/
|
|||||||
| Service | Description |
|
| Service | Description |
|
||||||
|---------|-------------|
|
|---------|-------------|
|
||||||
| **Gitea** | Self-hosted Git service |
|
| **Gitea** | Self-hosted Git service |
|
||||||
| **Firefly III** | Personal finance manager |
|
|
||||||
| **Immich** | Photo and video management with face recognition |
|
| **Immich** | Photo and video management with face recognition |
|
||||||
| **Jellyfin** | Media streaming with Intel GPU hardware transcoding |
|
| **Jellyfin** | Media streaming with Intel GPU hardware transcoding |
|
||||||
| **Media Stack** | Sonarr, Radarr, Prowlarr, qBittorrent — automated media acquisition |
|
| **Media Stack** | Sonarr, Radarr, Prowlarr, qBittorrent — automated media acquisition |
|
||||||
| **Paperless-ngx** | Document management with OCR |
|
| **Paperless-ngx** | Document management with OCR |
|
||||||
| **Pi-hole** | DNS sinkhole with ad blocking and encrypted DNS via dnscrypt-proxy |
|
| **Pi-hole** | DNS sinkhole with ad blocking and encrypted DNS via dnscrypt-proxy |
|
||||||
| **Grocy** | Pantry and grocery management |
|
|
||||||
| **LubeLogger** | Vehicle maintenance tracker |
|
| **LubeLogger** | Vehicle maintenance tracker |
|
||||||
| **Homepage** | Dashboard aggregator |
|
| **Homepage** | Dashboard aggregator |
|
||||||
| **Podsync** | Podcast downloader |
|
| **Podsync** | Podcast downloader |
|
||||||
| **Archmirror** | Local Arch Linux package repository mirror |
|
| **Archmirror** | Local Arch Linux package repository mirror |
|
||||||
|
| **Blog** | Personal static blog served via git-sync + nginx (gh-pages branch) |
|
||||||
|
| **Vikunja** | To-do list and task management, SSO via Authelia OIDC |
|
||||||
|
| **Reitti** | Personal location history and timeline (PostGIS), SSO via Authelia OIDC |
|
||||||
|
| **Dawarich** | Location history and timeline (PostGIS + Sidekiq), evaluated as a Reitti replacement; SSO via Authelia OIDC |
|
||||||
|
|
||||||
## Infrastructure Stack
|
## Infrastructure Stack
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
creation_rules:
|
||||||
|
- path_regex: .*\.sops\.yaml
|
||||||
|
encrypted_regex: "^(data|stringData|email)$"
|
||||||
|
age: age1jetw4h63gq4uzyk08znynw4h852nexdmtkdz4kwxj5ew5st32vnspmtag2
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
apiVersion: operator.victoriametrics.com/v1beta1
|
||||||
|
kind: VMStaticScrape
|
||||||
|
metadata:
|
||||||
|
name: coreelec
|
||||||
|
namespace: monitoring
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: coreelec
|
||||||
|
spec:
|
||||||
|
jobName: coreelec
|
||||||
|
targetEndpoints:
|
||||||
|
- targets:
|
||||||
|
- "coreelec.iot.lviv:9100"
|
||||||
|
scheme: http
|
||||||
|
path: /metrics
|
||||||
|
interval: 60s
|
||||||
|
scrapeTimeout: 10s
|
||||||
|
relabelConfigs:
|
||||||
|
- targetLabel: instance
|
||||||
|
replacement: coreelec
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: homeassistant-prometheus
|
||||||
|
namespace: monitoring
|
||||||
|
type: Opaque
|
||||||
|
stringData:
|
||||||
|
token: ENC[AES256_GCM,data:0+65oM4/ICURAcNcp4c/W1r3fO8GgkPrZgpFGk1rYQF5mSTk8Mu/DrG6TZ6sULQ1otQOdcW/6DtFYZc4xfL29cirZF/XZUfyIm7ENSdMYM1hh3lYhbi9HC/rTXyBP2F9HCIHqVsuNC024WHq/YNNwWhaGScs1mV7yZWtbv+Dqq6Mg6p9iFBzZk+pQ+hJGzO+XUNrXlKYjjsxkLPKSyf9STqIQ4Bzx5B0MwsVfhIwh8NoedTW39cO,iv:8BFLgfE4hs+vYcr3FcGhPZBjJKIamqG3e0f12PngOVY=,tag:L7VGNV+MjfHxPusVPit7Ww==,type:str]
|
||||||
|
sops:
|
||||||
|
age:
|
||||||
|
- enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBnZXZ4enk0UVZpRTVnVnhL
|
||||||
|
UnNUTWFiWkczT0d0M1FvK3hnenhqMzYwWURFCjlJU3E0R2NXWFU0d0ppRjI0WXd5
|
||||||
|
djQ0d2VQQXI5bFp4YmhBU040V3JvbGsKLS0tIG1TKyt5SmVraTVMSFUxODdLTXlL
|
||||||
|
MDNXVDJMa3ZWMzJZQlVrYnN6dnJVYVkKIbBebz4SiKgwL+TI6k2l6p3r+99wc6e9
|
||||||
|
LZpX9jtVZtIYKyQDlWsEXz6cEzBh2IQyoLS8RYFWG2eYpN15fvIu7w==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
recipient: age1jetw4h63gq4uzyk08znynw4h852nexdmtkdz4kwxj5ew5st32vnspmtag2
|
||||||
|
encrypted_regex: ^(data|stringData|email)$
|
||||||
|
lastmodified: "2026-06-20T08:26:05Z"
|
||||||
|
mac: ENC[AES256_GCM,data:tyKGTUZHUd5CTxOH/vkDSxAXast6w5moVPxQWh54d/xOqasKw+fcFOzuYq81TgBRagM5BKHT3EqF1B7dr0TRZnT8s+LjwivWGfDCBoDFVtCnX3vA+mgIWaN/12fR3WJ4+dgpvoMwR4sFGFbvN6tozyDA6dPOYzOpOOM/VJxbdDw=,iv:VLu8bborH6YLoriseWympgJCNV08MZqVz7rF1/+o6BQ=,tag:PQkphKrdkNVsWipo6ge/bw==,type:str]
|
||||||
|
version: 3.13.1
|
||||||
@@ -0,0 +1,22 @@
|
|||||||
|
apiVersion: operator.victoriametrics.com/v1beta1
|
||||||
|
kind: VMStaticScrape
|
||||||
|
metadata:
|
||||||
|
name: homeassistant
|
||||||
|
namespace: monitoring
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: homeassistant
|
||||||
|
spec:
|
||||||
|
jobName: homeassistant
|
||||||
|
targetEndpoints:
|
||||||
|
- targets:
|
||||||
|
- "http://homeassistant.iot.lviv:8123"
|
||||||
|
scheme: http
|
||||||
|
path: /api/prometheus
|
||||||
|
interval: 60s
|
||||||
|
scrapeTimeout: 30s
|
||||||
|
bearerTokenSecret:
|
||||||
|
name: homeassistant-prometheus
|
||||||
|
key: token
|
||||||
|
relabelConfigs:
|
||||||
|
- targetLabel: instance
|
||||||
|
replacement: homeassistant
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
apiVersion: operator.victoriametrics.com/v1beta1
|
||||||
|
kind: VMStaticScrape
|
||||||
|
metadata:
|
||||||
|
name: hyperhdr
|
||||||
|
namespace: monitoring
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: hyperhdr
|
||||||
|
spec:
|
||||||
|
jobName: hyperhdr
|
||||||
|
targetEndpoints:
|
||||||
|
- targets:
|
||||||
|
- "hyperhdr.iot.lviv:9100"
|
||||||
|
scheme: http
|
||||||
|
path: /metrics
|
||||||
|
interval: 60s
|
||||||
|
scrapeTimeout: 10s
|
||||||
|
relabelConfigs:
|
||||||
|
- targetLabel: instance
|
||||||
|
replacement: hyperhdr
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
---
|
||||||
|
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||||
|
kind: Kustomization
|
||||||
|
metadata:
|
||||||
|
name: apps
|
||||||
|
namespace: flux-system
|
||||||
|
spec:
|
||||||
|
interval: 10m
|
||||||
|
path: ./kubernetes-monitoring/apps
|
||||||
|
prune: true
|
||||||
|
sourceRef:
|
||||||
|
kind: GitRepository
|
||||||
|
name: flux-system
|
||||||
|
decryption:
|
||||||
|
provider: sops
|
||||||
|
secretRef:
|
||||||
|
name: sops-age
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: victoria-logs-grafana-datasource
|
||||||
|
namespace: monitoring
|
||||||
|
labels:
|
||||||
|
# Picked up automatically by the Grafana datasource sidecar (vmstack chart).
|
||||||
|
grafana_datasource: "1"
|
||||||
|
data:
|
||||||
|
victoria-logs-datasource.yaml: |
|
||||||
|
apiVersion: 1
|
||||||
|
datasources:
|
||||||
|
- name: VictoriaLogs
|
||||||
|
type: victoriametrics-logs-datasource
|
||||||
|
access: proxy
|
||||||
|
url: http://victoria-logs.monitoring.svc:9428
|
||||||
|
isDefault: false
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Namespace
|
||||||
|
metadata:
|
||||||
|
name: monitoring
|
||||||
@@ -0,0 +1,60 @@
|
|||||||
|
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||||
|
kind: HelmRelease
|
||||||
|
metadata:
|
||||||
|
name: victoria-logs-single
|
||||||
|
namespace: flux-system
|
||||||
|
spec:
|
||||||
|
chart:
|
||||||
|
spec:
|
||||||
|
chart: victoria-logs-single
|
||||||
|
version: 0.13.8
|
||||||
|
reconcileStrategy: ChartVersion
|
||||||
|
sourceRef:
|
||||||
|
kind: HelmRepository
|
||||||
|
name: victoria-metrics
|
||||||
|
namespace: flux-system
|
||||||
|
targetNamespace: monitoring
|
||||||
|
interval: 30m
|
||||||
|
install:
|
||||||
|
remediation:
|
||||||
|
retries: 3
|
||||||
|
upgrade:
|
||||||
|
remediation:
|
||||||
|
retries: 3
|
||||||
|
values:
|
||||||
|
server:
|
||||||
|
fullnameOverride: victoria-logs
|
||||||
|
retentionPeriod: "30d"
|
||||||
|
persistentVolume:
|
||||||
|
enabled: true
|
||||||
|
storageClassName: local-path
|
||||||
|
size: 20Gi
|
||||||
|
# NodePort so an external Alloy (e.g. the Talos DaemonSet) can push logs
|
||||||
|
# by IP, independent of DNS. In-cluster Grafana uses the ClusterIP DNS name.
|
||||||
|
service:
|
||||||
|
type: NodePort
|
||||||
|
nodePort: 30429
|
||||||
|
clusterIP: ""
|
||||||
|
syslog:
|
||||||
|
udp:
|
||||||
|
- name: syslog-udp
|
||||||
|
value: ":514"
|
||||||
|
useRemoteIP: true
|
||||||
|
useLocalTimestamp: true
|
||||||
|
# Scraped by the stack's vmagent so ingestion stalls can alert.
|
||||||
|
vmServiceScrape:
|
||||||
|
enabled: true
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 50m
|
||||||
|
memory: 128Mi
|
||||||
|
limits:
|
||||||
|
memory: 512Mi
|
||||||
|
|
||||||
|
# Ship the chart's dashboards (victorialogs-single-node, vector-k8s-monitoring)
|
||||||
|
# as ConfigMaps; the grafana_dashboard label makes the vmstack Grafana
|
||||||
|
# dashboard sidecar import them automatically.
|
||||||
|
dashboards:
|
||||||
|
enabled: true
|
||||||
|
labels:
|
||||||
|
grafana_dashboard: "1"
|
||||||
@@ -0,0 +1,136 @@
|
|||||||
|
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||||
|
kind: HelmRelease
|
||||||
|
metadata:
|
||||||
|
name: victoria-metrics-k8s-stack
|
||||||
|
namespace: flux-system
|
||||||
|
spec:
|
||||||
|
chart:
|
||||||
|
spec:
|
||||||
|
chart: victoria-metrics-k8s-stack
|
||||||
|
version: 0.84.0
|
||||||
|
reconcileStrategy: ChartVersion
|
||||||
|
sourceRef:
|
||||||
|
kind: HelmRepository
|
||||||
|
name: victoria-metrics
|
||||||
|
namespace: flux-system
|
||||||
|
targetNamespace: monitoring
|
||||||
|
interval: 30m
|
||||||
|
install:
|
||||||
|
remediation:
|
||||||
|
retries: 3
|
||||||
|
upgrade:
|
||||||
|
remediation:
|
||||||
|
retries: 3
|
||||||
|
values:
|
||||||
|
# Operator bundles the VictoriaMetrics CRDs (plain manifests, applied by Flux SSA).
|
||||||
|
victoria-metrics-operator:
|
||||||
|
enabled: true
|
||||||
|
crds:
|
||||||
|
plain: true
|
||||||
|
|
||||||
|
# Single-node TSDB. NodePort so the in-cluster Talos vmagent can remote_write
|
||||||
|
# and we can reach it by IP even when DNS (pihole on Talos) is down.
|
||||||
|
vmsingle:
|
||||||
|
enabled: true
|
||||||
|
spec:
|
||||||
|
retentionPeriod: "12" # months — VM is very space-efficient
|
||||||
|
storage:
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
storageClassName: local-path
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 30Gi
|
||||||
|
serviceSpec:
|
||||||
|
useAsDefault: true
|
||||||
|
spec:
|
||||||
|
type: NodePort
|
||||||
|
ports:
|
||||||
|
- name: http
|
||||||
|
port: 8428
|
||||||
|
targetPort: 8428
|
||||||
|
protocol: TCP
|
||||||
|
nodePort: 30428
|
||||||
|
|
||||||
|
# Local scrape of the Pi/k3s itself (node-exporter, kube-state-metrics, kubelet).
|
||||||
|
vmagent:
|
||||||
|
enabled: true
|
||||||
|
|
||||||
|
vmalert:
|
||||||
|
enabled: true
|
||||||
|
|
||||||
|
# k3s runs scheduler/controller-manager in one binary with no separate
|
||||||
|
# scrape endpoints, and uses kine instead of etcd — disabling these drops
|
||||||
|
# the empty scrape pools and their always-firing rules.
|
||||||
|
kubeScheduler:
|
||||||
|
enabled: false
|
||||||
|
kubeControllerManager:
|
||||||
|
enabled: false
|
||||||
|
kubeEtcd:
|
||||||
|
enabled: false
|
||||||
|
|
||||||
|
alertmanager:
|
||||||
|
enabled: true
|
||||||
|
spec:
|
||||||
|
# Mounted at /etc/vm/secrets/alertmanager-telegram/ (bot_token, chat_id).
|
||||||
|
secrets:
|
||||||
|
- alertmanager-telegram
|
||||||
|
config:
|
||||||
|
route:
|
||||||
|
receiver: telegram
|
||||||
|
group_by: ["alertname", "job"]
|
||||||
|
group_wait: 30s
|
||||||
|
group_interval: 5m
|
||||||
|
repeat_interval: 12h
|
||||||
|
routes:
|
||||||
|
- receiver: blackhole
|
||||||
|
matchers:
|
||||||
|
- alertname=~"Watchdog|InfoInhibitor"
|
||||||
|
- receiver: blackhole
|
||||||
|
matchers:
|
||||||
|
- severity="info"
|
||||||
|
inhibit_rules:
|
||||||
|
- source_matchers:
|
||||||
|
- severity="critical"
|
||||||
|
target_matchers:
|
||||||
|
- severity="warning"
|
||||||
|
equal: ["alertname", "job"]
|
||||||
|
receivers:
|
||||||
|
- name: blackhole
|
||||||
|
- name: telegram
|
||||||
|
telegram_configs:
|
||||||
|
- bot_token_file: /etc/vm/secrets/alertmanager-telegram/bot_token
|
||||||
|
chat_id_file: /etc/vm/secrets/alertmanager-telegram/chat_id
|
||||||
|
send_resolved: true
|
||||||
|
|
||||||
|
grafana:
|
||||||
|
enabled: true
|
||||||
|
# SQLite DB on an RWO local-path volume — never run two pods at once.
|
||||||
|
deploymentStrategy:
|
||||||
|
type: Recreate
|
||||||
|
# The volume already carries fsGroup: 472 and 472-owned data; the chown
|
||||||
|
# init container drops DAC_OVERRIDE and can't traverse Grafana's 0700
|
||||||
|
# render dirs, so it's both redundant and breaks rollouts here.
|
||||||
|
initChownData:
|
||||||
|
enabled: false
|
||||||
|
# Native VictoriaMetrics datasource plugins (signed, from Grafana catalog).
|
||||||
|
# - metrics: backs the "VictoriaMetrics (DS)" datasource the chart
|
||||||
|
# provisions by default (defaultDatasources.victoriametrics) — MetricsQL.
|
||||||
|
# - logs: backs our VictoriaLogs datasource (configmap-logs-datasource.yaml).
|
||||||
|
plugins:
|
||||||
|
- victoriametrics-metrics-datasource
|
||||||
|
- victoriametrics-logs-datasource
|
||||||
|
# Native Grafana login — independent of Authelia (which lives in Talos).
|
||||||
|
admin:
|
||||||
|
existingSecret: grafana-admin
|
||||||
|
userKey: admin-user
|
||||||
|
passwordKey: admin-password
|
||||||
|
persistence:
|
||||||
|
enabled: true
|
||||||
|
type: pvc
|
||||||
|
storageClassName: local-path
|
||||||
|
size: 5Gi
|
||||||
|
# NodePort so Grafana is reachable by IP without depending on DNS.
|
||||||
|
service:
|
||||||
|
type: NodePort
|
||||||
|
nodePort: 30300
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
apiVersion: source.toolkit.fluxcd.io/v1
|
||||||
|
kind: HelmRepository
|
||||||
|
metadata:
|
||||||
|
name: victoria-metrics
|
||||||
|
namespace: flux-system
|
||||||
|
spec:
|
||||||
|
interval: 1h
|
||||||
|
url: https://victoriametrics.github.io/helm-charts/
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: alertmanager-telegram
|
||||||
|
namespace: monitoring
|
||||||
|
type: Opaque
|
||||||
|
stringData:
|
||||||
|
bot_token: ENC[AES256_GCM,data:V/SDGyp/M7Qqa22fiKYMZ2CzkivNBl24hv9cVEFPl50NySKY0jqIPnVWLtm11g==,iv:UfHMfvu9b2CaXhImng5OLVej13zHrptKQOaPUbjXiw0=,tag:SFAGUaM0XYvbVc1CRrJepQ==,type:str]
|
||||||
|
chat_id: ENC[AES256_GCM,data:HRDHrCMMurk=,iv:hP7UB23qWZ+YukoP3B7QolUIfv2FgJtTfM1OLe/nMMY=,tag:JTwjQwDLQaG5LfKQGV73iw==,type:str]
|
||||||
|
sops:
|
||||||
|
age:
|
||||||
|
- enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBwNXF4V1N3bmpxbWN5YUVR
|
||||||
|
UDNNdm1IL2hHWGgzRENvK0xWdkhFc1drRGhBCjdQc3hydG1RN3ZocUZnZGpKRG5i
|
||||||
|
K1RXUTdiZ29hWWdjLzZVMCtMb1NZbjQKLS0tIHpDcTNDeFpJUU5CeU5PSFNWWnBo
|
||||||
|
UmJNT1hVL0h3c3hWOGQxM21uWk14amsKIyFxmszp94FteSUXyAh4hrDNbPBja4dT
|
||||||
|
QL6wFw8GkYtFeucIgnvbjHWWi98QMwE1xEt930uMeNyRnLFqFfUtWw==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
recipient: age1jetw4h63gq4uzyk08znynw4h852nexdmtkdz4kwxj5ew5st32vnspmtag2
|
||||||
|
encrypted_regex: ^(data|stringData|email)$
|
||||||
|
lastmodified: "2026-10-03T20:07:21Z"
|
||||||
|
mac: ENC[AES256_GCM,data:k7rBxhWrC2DFvFcoB6Wqufzk6vLtWFypITl/JK2qd6Vj9m7XKBZdiH5mCSDNfo4UK+ygFnGQ8oidkgcCrbGYqKFK8Q67+LQ9o1OMOXcZDkz6UzNRaLh3aO5NqbdleV36cICX6qpG1uO6GL6p5g121vRztQT+Qg1L0BkIMrF+sJQ=,iv:y8figgbzUg1gf0zug534Fvd9jdB00JiA7LoWXUm3/Lw=,tag:ccP3IKdWwMIJqP0s/U7NQA==,type:str]
|
||||||
|
version: 3.13.3
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: grafana-admin
|
||||||
|
namespace: monitoring
|
||||||
|
stringData:
|
||||||
|
admin-user: ENC[AES256_GCM,data:KDBvi5I=,iv:tNHZ9IABD5l210PTjKhN+q4vMnmJLAP99fzzONpwwxg=,tag:YU62qttxO95+P1VlpVn0qA==,type:str]
|
||||||
|
admin-password: ENC[AES256_GCM,data:HjZYVYs2t6Oml52fjFS2PymFvp1GXRAJXCewxA==,iv:LK1Yf0teLPITo2pK4lAaeub3Ieyl90uRrZeBD3LXy2o=,tag:7I8fT/SSzU7JkcreNlI8rw==,type:str]
|
||||||
|
sops:
|
||||||
|
age:
|
||||||
|
- enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBobmoydk9FaHFkQXEzQU03
|
||||||
|
YnZ4RjlxVk40dkk5RGFya0Foeit1dEpWRkdZCmJ4M3pxcHl1S1FUTnlGbEtEeXJT
|
||||||
|
ZDN4c0dPYktwTXgveExQUWFsYlEwTmsKLS0tIElmTDNCM2dRR3VtRGRpeHVCSXVl
|
||||||
|
ckV1N3h1bmlOdjhnRXRZNExJank5Q2MKMsA6BkdzOrTQUN0uPSUQSa9aYLil2Chb
|
||||||
|
vjpFp1j6x9EwvKHLY7mry15ze7gjUtUt8e97zO9ZlturiPigl0jeoQ==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
recipient: age1jetw4h63gq4uzyk08znynw4h852nexdmtkdz4kwxj5ew5st32vnspmtag2
|
||||||
|
encrypted_regex: ^(data|stringData|email)$
|
||||||
|
lastmodified: "2026-06-19T11:46:25Z"
|
||||||
|
mac: ENC[AES256_GCM,data:h7Bei7jgHb4dFIk6Vax8fL7uA0zlqLUtpQgYTNx7i+yssAXcKEr989WgbLqQY8Rx1BSj27rFHv2Y4P+K2ump+J930lZIe1NNBNiFnYbI2vN0TYrlVOAETk6c0DoqygG7Mmlq+kCGGml4A+4XuQcCA4ZYzBYE4QvGq/WS6bOCFXI=,iv:zE3GhfkvJl5Z4klGWHgw7iZmxOff+Mlf7aXtMWTKUEs=,tag:q0mxhLxK2SIujVa+mhiKVw==,type:str]
|
||||||
|
version: 3.13.1
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: victoria-logs-syslog
|
||||||
|
namespace: monitoring
|
||||||
|
spec:
|
||||||
|
type: NodePort
|
||||||
|
externalTrafficPolicy: Local
|
||||||
|
selector:
|
||||||
|
app: server
|
||||||
|
app.kubernetes.io/instance: monitoring-victoria-logs-single
|
||||||
|
app.kubernetes.io/name: victoria-logs-single
|
||||||
|
ports:
|
||||||
|
- name: syslog-udp
|
||||||
|
protocol: UDP
|
||||||
|
port: 514
|
||||||
|
targetPort: 514
|
||||||
|
nodePort: 30514
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
apiVersion: operator.victoriametrics.com/v1beta1
|
||||||
|
kind: VMRule
|
||||||
|
metadata:
|
||||||
|
name: homelab
|
||||||
|
namespace: monitoring
|
||||||
|
spec:
|
||||||
|
groups:
|
||||||
|
- name: unifi-gateway
|
||||||
|
rules:
|
||||||
|
# Baseline load is 2–5; the 2026-09-26 memory-pressure incident sat at 15–25.
|
||||||
|
- alert: UnifiGatewayHighLoad
|
||||||
|
expr: avg_over_time(unpoller_device_load_average_1{type="udm"}[15m]) > 10
|
||||||
|
for: 15m
|
||||||
|
labels:
|
||||||
|
severity: warning
|
||||||
|
annotations:
|
||||||
|
summary: "UniFi gateway load is {{ $value | humanize }} (15m avg)"
|
||||||
|
# Baseline is 84–92% and creeps up ~1%/3 days until something restarts.
|
||||||
|
- alert: UnifiGatewayMemoryHigh
|
||||||
|
expr: avg_over_time(unpoller_device_memory_utilization_ratio{type="udm"}[30m]) > 0.93
|
||||||
|
for: 30m
|
||||||
|
labels:
|
||||||
|
severity: warning
|
||||||
|
annotations:
|
||||||
|
summary: "UniFi gateway memory at {{ $value | humanizePercentage }} (30m avg)"
|
||||||
|
- name: victoria-logs
|
||||||
|
rules:
|
||||||
|
# The gateway alone logs DHCP chatter every few minutes, so zero rows
|
||||||
|
# means the syslog path is broken (e.g. the 2026-09-22 IP change).
|
||||||
|
- alert: SyslogIngestionStalled
|
||||||
|
expr: sum(rate(vl_rows_ingested_total{type="syslog_udp"}[30m])) == 0
|
||||||
|
for: 15m
|
||||||
|
labels:
|
||||||
|
severity: warning
|
||||||
|
annotations:
|
||||||
|
summary: "VictoriaLogs has received no syslog for 45m"
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,76 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: snmp-exporter
|
||||||
|
namespace: monitoring
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: snmp-exporter
|
||||||
|
app.kubernetes.io/instance: snmp-exporter
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app.kubernetes.io/name: snmp-exporter
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: snmp-exporter
|
||||||
|
app.kubernetes.io/instance: snmp-exporter
|
||||||
|
spec:
|
||||||
|
securityContext:
|
||||||
|
runAsNonRoot: true
|
||||||
|
runAsUser: 65534
|
||||||
|
runAsGroup: 65534
|
||||||
|
seccompProfile:
|
||||||
|
type: RuntimeDefault
|
||||||
|
containers:
|
||||||
|
- name: snmp-exporter
|
||||||
|
image: quay.io/prometheus/snmp-exporter:v0.30.1
|
||||||
|
args:
|
||||||
|
# Vendored snmp.yml (configmap) — `synology` module with full coverage
|
||||||
|
# (Synology private trees + IF-MIB + HOST-RESOURCES + UCD), matched to the dashboard.
|
||||||
|
- "--config.file=/etc/snmp-config/snmp.yml"
|
||||||
|
# Our SNMPv3 credentials; snmp_exporter merges multiple --config.file flags.
|
||||||
|
- "--config.file=/etc/snmp-auth/auth.yml"
|
||||||
|
ports:
|
||||||
|
- name: metrics
|
||||||
|
containerPort: 9116
|
||||||
|
protocol: TCP
|
||||||
|
volumeMounts:
|
||||||
|
- name: config
|
||||||
|
mountPath: /etc/snmp-config
|
||||||
|
readOnly: true
|
||||||
|
- name: auth
|
||||||
|
mountPath: /etc/snmp-auth
|
||||||
|
readOnly: true
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /
|
||||||
|
port: metrics
|
||||||
|
initialDelaySeconds: 5
|
||||||
|
periodSeconds: 15
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /
|
||||||
|
port: metrics
|
||||||
|
initialDelaySeconds: 15
|
||||||
|
periodSeconds: 30
|
||||||
|
securityContext:
|
||||||
|
allowPrivilegeEscalation: false
|
||||||
|
readOnlyRootFilesystem: true
|
||||||
|
capabilities:
|
||||||
|
drop:
|
||||||
|
- ALL
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 50m
|
||||||
|
memory: 64Mi
|
||||||
|
limits:
|
||||||
|
memory: 128Mi
|
||||||
|
volumes:
|
||||||
|
- name: config
|
||||||
|
configMap:
|
||||||
|
name: snmp-exporter-config
|
||||||
|
- name: auth
|
||||||
|
secret:
|
||||||
|
secretName: snmp-exporter-auth
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: snmp-exporter-auth
|
||||||
|
namespace: monitoring
|
||||||
|
type: Opaque
|
||||||
|
stringData:
|
||||||
|
auth.yml: ENC[AES256_GCM,data:/UESrSn3ezINnFou7hiXYrqECjStumoIXBQm2q9Gxe9QaCg5AI5dl+ZNAgo+1YIrQbf1BrQgZttXjSAMn+Rf6nDhOEu44i1AbbZKXT6bm3fzuEzPcT5EIf5BQuGpnwXmpy3Gh+5Zi/fs0xO/cSlIiEkagNV7BO40Nl9ktUt4zKyW9GI/zf/T4iTUTlLWqSogDBE59gnBXa9fvNuHx8jIufpzhnnk65keoybEewW3/00Sa9Q+J31VvQ/w3DC205aad1njU8PIP5jPAn97pQeSZPY9iNNexxpb0+5IdSHpcKlT1aEigR8TqYc/,iv:4D6jFm9mA9BglHqsvTrrYxtYus1JWmCWEu0HQALET+4=,tag:It3uGYRvYPCL4+xvFo7P0A==,type:str]
|
||||||
|
sops:
|
||||||
|
age:
|
||||||
|
- enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBzdUFHTFFjMXpzbFAyN00x
|
||||||
|
N0FrRHJnT2ljYThUcndHNGIyK1RJOWp5Z3c0CnFNQzkzZk5NWDgwN3ZiRTBjYU9S
|
||||||
|
SFpkTmJkM2VLbEJzZEtxYy9DVFB6OXcKLS0tIFZzWTZNOFNXRzdERGFWanZTYkp1
|
||||||
|
R2dvMmhBTjQyOS85UzIxYlN0Wm8wU1EKmWA+lkDNqzpyqEd+PpI6PDi9L/Vlp1RP
|
||||||
|
Y6WVvvOi9OKc4UaDxXVSEgLlA3DNBg2BaY2jEhMJlqLJyknHY4un0g==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
recipient: age1jetw4h63gq4uzyk08znynw4h852nexdmtkdz4kwxj5ew5st32vnspmtag2
|
||||||
|
encrypted_regex: ^(data|stringData|email)$
|
||||||
|
lastmodified: "2026-06-29T11:52:50Z"
|
||||||
|
mac: ENC[AES256_GCM,data:/zoY3ZS7ipOjt1YY2OQ5SCRITX9WXI+BXmrmlRfoJ9M+lJHomgbTkdqu70jcgYXTm/ARlTMrMrk3zCQqPBPc9bYbz7wXh8o0PLyCUQ1ccSGR5hWjywsRjm7nfM25p0UYvEllj+KywRnY7ArbJvzGcLYEtHmUvuyRs2HG5Tv7KnM=,iv:je3IVh8HpLzRGToU5Znuq49K2H+hxEM94WCP1c39mjg=,tag:sf6USL4a2/vZXQT7eMerBA==,type:str]
|
||||||
|
version: 3.13.1
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: snmp-exporter
|
||||||
|
namespace: monitoring
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: snmp-exporter
|
||||||
|
app.kubernetes.io/instance: snmp-exporter
|
||||||
|
spec:
|
||||||
|
type: ClusterIP
|
||||||
|
selector:
|
||||||
|
app.kubernetes.io/name: snmp-exporter
|
||||||
|
ports:
|
||||||
|
- name: metrics
|
||||||
|
port: 9116
|
||||||
|
targetPort: metrics
|
||||||
|
protocol: TCP
|
||||||
@@ -0,0 +1,31 @@
|
|||||||
|
apiVersion: operator.victoriametrics.com/v1beta1
|
||||||
|
kind: VMStaticScrape
|
||||||
|
metadata:
|
||||||
|
name: synology
|
||||||
|
namespace: monitoring
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: snmp-exporter
|
||||||
|
spec:
|
||||||
|
jobName: synology
|
||||||
|
targetEndpoints:
|
||||||
|
# snmp_exporter is a proxy: vmagent scrapes the exporter, which then queries
|
||||||
|
# the NAS over SNMP. The device address is passed as the `target` param and
|
||||||
|
# the request is redirected to the exporter Service via relabeling below.
|
||||||
|
- targets:
|
||||||
|
- "synology.storage.lviv"
|
||||||
|
scheme: http
|
||||||
|
path: /snmp
|
||||||
|
params:
|
||||||
|
module:
|
||||||
|
- synology
|
||||||
|
auth:
|
||||||
|
- synology_v3
|
||||||
|
interval: 60s
|
||||||
|
scrapeTimeout: 30s
|
||||||
|
relabelConfigs:
|
||||||
|
- sourceLabels: [__address__]
|
||||||
|
targetLabel: __param_target
|
||||||
|
- sourceLabels: [__param_target]
|
||||||
|
targetLabel: instance
|
||||||
|
- targetLabel: __address__
|
||||||
|
replacement: snmp-exporter.monitoring.svc:9116
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,253 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
data:
|
||||||
|
client-insights.json: '{"annotations":{"list":[{"builtIn":1,"datasource":"-- Grafana
|
||||||
|
--","enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 1)","name":"Annotations
|
||||||
|
& Alerts","type":"dashboard"}]},"description":"UniFi Poller v2.0.1 Displays detailed
|
||||||
|
information for clients in a UniFi network using Prometheus.","editable":true,"gnetId":11315,"graphTooltip":1,"id":null,"iteration":1592125485014,"links":[{"asDropdown":true,"icon":"external
|
||||||
|
link","includeVars":false,"keepTime":true,"tags":["unifi-poller"],"title":"UniFi
|
||||||
|
Poller","type":"dashboards"},{"icon":"question","tags":[],"title":"Help","type":"link","url":"https://golift.io/unifi-poller/issues"},{"icon":"doc","tags":[],"title":"Wiki","type":"link","url":"https://golift.io/unifi-poller/wiki"},{"icon":"bolt","tags":[],"title":"Discord","type":"link","url":"https://discord.gg/KnyKYt2"}],"panels":[{"columns":[],"datasource":"VictoriaMetrics","description":"This
|
||||||
|
table represents current (latest) data.\nBytes columns are lifetime totals.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fontSize":"80%","gridPos":{"h":13,"w":24,"x":0,"y":0},"id":21,"links":[],"pageSize":null,"scroll":true,"showHeader":true,"sort":{"col":9,"desc":true},"styles":[{"alias":"Bytes
|
||||||
|
Rx","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
|
||||||
|
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value
|
||||||
|
#A","thresholds":[],"type":"number","unit":"decbytes"},{"alias":"Name","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"name","thresholds":[],"type":"string","unit":"short"},{"alias":"Chan","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"channel","thresholds":[],"type":"string","unit":"short"},{"alias":"Device
|
||||||
|
MAC","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
|
||||||
|
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"mappingType":1,"pattern":"mac","thresholds":[],"type":"string","unit":"short"},{"alias":"Radio","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"radio","thresholds":[],"type":"hidden","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"radio_name","thresholds":[],"type":"hidden","unit":"short"},{"alias":"AP
|
||||||
|
/ Radio / Proto","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54,
|
||||||
|
0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"radio_desc","thresholds":[],"type":"string","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"radio_proto","thresholds":[],"type":"hidden","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"job","thresholds":[],"type":"hidden","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"bssid","thresholds":[],"type":"hidden","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"ap_mac","thresholds":[],"type":"hidden","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"Time","thresholds":[],"type":"hidden","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"wired","thresholds":[],"type":"hidden","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"vlan","thresholds":[],"type":"hidden","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"sw_mac","thresholds":[],"type":"hidden","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"instance","thresholds":[],"type":"hidden","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"gw_mac","thresholds":[],"type":"hidden","unit":"short"},{"alias":"Network","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"network","thresholds":[],"type":"string","unit":"short"},{"alias":"OUI","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"oui","thresholds":[],"type":"string","unit":"short"},{"alias":"Address","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"ip","thresholds":[],"type":"string","unit":"short"},{"alias":"ESSID","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"essid","thresholds":[],"type":"string","unit":"short"},{"alias":"Switch","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"sw_name","thresholds":[],"type":"hidden","unit":"short"},{"alias":"Sw
|
||||||
|
Port","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
|
||||||
|
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"mappingType":1,"pattern":"sw_port","thresholds":[],"type":"hidden","unit":"short"},{"alias":"Site","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"site_name","thresholds":[],"type":"string","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"gw_name","thresholds":[],"type":"hidden","unit":"short"},{"alias":"Controller","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"source","thresholds":[],"type":"hidden","unit":"short"},{"alias":"Bytes
|
||||||
|
Tx","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
|
||||||
|
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value
|
||||||
|
#B","thresholds":[],"type":"number","unit":"decbytes"},{"alias":"Uptime","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"Value #C","thresholds":[],"type":"number","unit":"s"}],"targets":[{"expr":"sum
|
||||||
|
by (channel,essid,ip,mac,name,network,oui,radio_desc,site_name,source) (\n unpoller_client_receive_bytes_total{wired!=\"true\",
|
||||||
|
site_name=~\"$Site\", name=~\"$Wireless\"})","format":"table","instant":true,"interval":"","legendFormat":"","refId":"A"},{"expr":"sum
|
||||||
|
by (channel,essid,ip,mac,name,network,oui,radio_desc,site_name,source) (\n unpoller_client_transmit_bytes_total{wired!=\"true\",site_name=~\"$Site\",
|
||||||
|
name=~\"$Wireless\"})","format":"table","instant":true,"interval":"","legendFormat":"","refId":"B"},{"expr":"sum
|
||||||
|
by (channel,essid,ip,mac,name,network,oui,radio_desc,site_name,source) (\n unpoller_client_uptime_seconds{wired!=\"true\",site_name=~\"$Site\",
|
||||||
|
name=~\"$Wireless\"})","format":"table","instant":true,"interval":"","legendFormat":"","refId":"C"}],"timeFrom":null,"title":"Wireless
|
||||||
|
Devices","transform":"table","type":"table-old"},{"columns":[],"datasource":"VictoriaMetrics","description":"This
|
||||||
|
table represents current (latest) data.\nBytes columns are lifetime totals.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fontSize":"80%","gridPos":{"h":12,"w":24,"x":0,"y":13},"hideTimeOverride":false,"id":22,"links":[],"pageSize":null,"scroll":true,"showHeader":true,"sort":{"col":9,"desc":true},"styles":[{"alias":"Time","align":"auto","dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","link":false,"linkUrl":"http://$__cell","pattern":"Time","type":"hidden"},{"alias":"Sw
|
||||||
|
Port","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
|
||||||
|
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"decimals":0,"pattern":"sw_port","thresholds":[],"type":"number","unit":"short"},{"alias":"Name","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"name","thresholds":[],"type":"string","unit":"short"},{"alias":"Device
|
||||||
|
MAC","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
|
||||||
|
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"link":false,"mappingType":1,"pattern":"mac","thresholds":[],"type":"string","unit":"short"},{"alias":"Uptime","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value","thresholds":[],"type":"number","unit":"s"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"__name__","thresholds":[],"type":"hidden","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"gw_mac","thresholds":[],"type":"hidden","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"gw_name","thresholds":[],"type":"hidden","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"instance","thresholds":[],"type":"hidden","unit":"short"},{"alias":"Address","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"ip","thresholds":[],"type":"string","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"job","thresholds":[],"type":"hidden","unit":"short"},{"alias":"Network","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"network","thresholds":[],"type":"string","unit":"short"},{"alias":"OUI","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"oui","thresholds":[],"type":"string","unit":"short"},{"alias":"Site","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"site_name","thresholds":[],"type":"string","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"sw_mac","thresholds":[],"type":"hidden","unit":"short"},{"alias":"Switch","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"sw_name","thresholds":[],"type":"string","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"wired","thresholds":[],"type":"hidden","unit":"short"},{"alias":"Controller","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"source","thresholds":[],"type":"hidden","unit":"short"},{"alias":"Uptime","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"Value #A","thresholds":[],"type":"number","unit":"s"},{"alias":"Bytes
|
||||||
|
Rx","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
|
||||||
|
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":1,"mappingType":1,"pattern":"Value
|
||||||
|
#B","thresholds":[],"type":"number","unit":"decbytes"},{"alias":"Bytes Tx","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":1,"mappingType":1,"pattern":"Value #C","thresholds":[],"type":"number","unit":"decbytes"}],"targets":[{"expr":"sum
|
||||||
|
by (ap_name,ip,mac,name,network,oui,site_name,source,sw_port) (\n unpoller_client_uptime_seconds{wired=\"true\",
|
||||||
|
site_name=~\"$Site\", name=~\"$Wired\", sw_name=~\"$Switch\"})","format":"table","instant":true,"interval":"","refId":"A"},{"expr":"sum
|
||||||
|
by (ap_name,ip,mac,name,network,oui,site_name,source,sw_port) (\n unpoller_client_receive_bytes_total{wired=\"true\",
|
||||||
|
site_name=~\"$Site\", name=~\"$Wired\", sw_name=~\"$Switch\"})","format":"table","hide":false,"instant":true,"interval":"","refId":"B"},{"expr":"sum
|
||||||
|
by (ap_name,ip,mac,name,network,oui,site_name,source,sw_port) (\n unpoller_client_transmit_bytes_total{wired=\"true\",
|
||||||
|
site_name=~\"$Site\", name=~\"$Wired\", sw_name=~\"$Switch\"})","format":"table","hide":false,"instant":true,"interval":"","refId":"C"}],"timeFrom":null,"title":"Wired
|
||||||
|
Devices","transform":"table","type":"table-old"},{"aliasColors":{},"breakPoint":"50%","cacheTimeout":null,"combine":{"label":"Others","threshold":0},"datasource":"VictoriaMetrics","decimals":0,"description":"Visualize
|
||||||
|
wireless channel usage w/ wired client counts.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fontSize":"70%","format":"short","gridPos":{"h":10,"w":8,"x":0,"y":25},"hideTimeOverride":false,"id":9,"interval":null,"legend":{"header":"","percentage":true,"show":true,"values":false},"legendType":"Right
|
||||||
|
side","links":[],"maxDataPoints":3,"nullPointMode":"connected","pieType":"pie","strokeWidth":"2","targets":[{"expr":"count
|
||||||
|
by (hostname) (unpoller_client_uptime_seconds{site_name=~\"$Site\", name=~\"$Wired\",
|
||||||
|
sw_name=~\"$Switch\"})","instant":true,"legendFormat":"Wired","refId":"A"},{"expr":"count
|
||||||
|
by (channel) (unpoller_client_roam_count_total{site_name=~\"$Site\", name=~\"$Wireless\",
|
||||||
|
ap_name=~\"$AP\"})","instant":true,"interval":"$Smooth","legendFormat":"Channel
|
||||||
|
{{channel}}","refId":"B"}],"timeFrom":null,"title":"Clients / Channel","transparent":true,"type":"piechart","valueName":"current"},{"aliasColors":{},"breakPoint":"25%","cacheTimeout":null,"combine":{"label":"Others","threshold":0},"datasource":"VictoriaMetrics","decimals":0,"description":"Visualize
|
||||||
|
how many clients are connected to which radios/APs.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fontSize":"70%","format":"short","gridPos":{"h":10,"w":8,"x":8,"y":25},"hideTimeOverride":false,"id":11,"interval":null,"legend":{"header":"","percentage":true,"show":true,"values":false},"legendType":"Right
|
||||||
|
side","links":[],"maxDataPoints":3,"nullPointMode":"connected","pieType":"pie","strokeWidth":"3","targets":[{"expr":"count
|
||||||
|
by (radio_proto) (unpoller_client_roam_count_total{site_name=~\"$Site\", name=~\"$Wireless\",
|
||||||
|
ap_name=~\"$AP\"})","instant":true,"interval":"$Smooth","legendFormat":"{{radio_proto}}","refId":"A"}],"timeFrom":null,"title":"Clients
|
||||||
|
/ AP Radio","transparent":true,"type":"piechart","valueName":"current"},{"aliasColors":{},"breakPoint":"50%","cacheTimeout":null,"combine":{"label":"Others","threshold":"0.01"},"datasource":"VictoriaMetrics","decimals":0,"description":"This
|
||||||
|
shows an OUI breakdown from Unifi''s perspective. e = wired, w = wireless","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fontSize":"70%","format":"short","gridPos":{"h":10,"w":8,"x":16,"y":25},"hideTimeOverride":false,"id":12,"interval":null,"legend":{"header":"Count","percentage":true,"percentageDecimals":0,"show":true,"sort":"current","sortDesc":true,"values":true},"legendType":"Right
|
||||||
|
side","links":[],"maxDataPoints":3,"nullPointMode":"connected","pieType":"pie","strokeWidth":1,"targets":[{"expr":"count
|
||||||
|
by (oui) (unpoller_client_uptime_seconds{site_name=~\"$Site\", name=~\"$Wireless\",
|
||||||
|
ap_name=~\"$AP\"})","hide":false,"instant":true,"interval":"$Smooth","legendFormat":"
|
||||||
|
w {{oui}}","refId":"A"},{"expr":"count by (oui) (+unpoller_client_uptime_seconds{site_name=~\"$Site\",
|
||||||
|
name=~\"$Wired\", sw_name=~\"$Switch\"})","hide":false,"instant":true,"interval":"$Smooth","legendFormat":"e {{oui}}","refId":"B"}],"timeFrom":null,"title":"Client
|
||||||
|
MAC OUI Breakdown","transparent":true,"type":"piechart","valueName":"current"},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"Bandwidth
|
||||||
|
usage per wireless devices as reported by the UAPs. Rx is on the negative axis.
|
||||||
|
Does not include amazon devices.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":14,"w":24,"x":0,"y":35},"hiddenSeries":false,"id":3,"legend":{"alignAsTable":true,"avg":true,"current":true,"hideEmpty":true,"hideZero":false,"max":true,"min":false,"rightSide":true,"show":true,"sort":"max","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[{"$$hashKey":"object:323","alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
|
||||||
|
by ($Identifier) (rate(unpoller_client_transmit_bytes_total{name!~\".*camera.*|.*cam(era)?$\",
|
||||||
|
name=~\"$Wireless\", site_name=~\"$Site\", ap_name=~\"$AP\"}[$__interval]))","instant":false,"interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
{{mac}} Tx","refId":"B"},{"expr":"sum by ($Identifier) (rate(unpoller_client_receive_bytes_total{name!~\".*camera.*|.*cam(era)?$\",
|
||||||
|
name=~\"$Wireless\", site_name=~\"$Site\", ap_name=~\"$AP\"}[$__interval]))","instant":false,"interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
{{mac}} Rx","refId":"C"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"UAP
|
||||||
|
Bandwidth / Wireless Devices","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"Bps","label":"bytes
|
||||||
|
/ sec","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"Wired
|
||||||
|
TX / RX bytes per second (calculated in 30 second buckets). Rx is on the negative
|
||||||
|
axis. Does not include amazon and camera devices. Unaffected by the AP setting.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":17,"w":24,"x":0,"y":49},"hiddenSeries":false,"id":2,"legend":{"alignAsTable":true,"avg":true,"current":true,"hideEmpty":true,"max":true,"min":false,"rightSide":true,"show":true,"sort":"max","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[{"$$hashKey":"object:398","alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
|
||||||
|
by ($Identifier) (rate(unpoller_client_transmit_bytes_total{name!~\".*camera.*|.*cam(era)?$\",
|
||||||
|
name=~\"$Wired\", site_name=~\"$Site\", sw_name=~\"$Switch\"}[$__interval]))","interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
{{mac}} Tx","refId":"A"},{"expr":"sum by ($Identifier) (rate(unpoller_client_receive_bytes_total{name!~\".*camera.*|.*cam(era)?$\",
|
||||||
|
name=~\"$Wired\", site_name=~\"$Site\", sw_name=~\"$Switch\"}[$__interval]))","hide":false,"interval":"$Smooth","intervalFactor":1,"legendFormat":"{{name}}
|
||||||
|
{{mac}} Rx","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Switch
|
||||||
|
Bandwidth / Wired Devices","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"Bps","label":"bytes
|
||||||
|
/ sec","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"Amazon
|
||||||
|
Devices TX / RX bytes per second. Rx is on the negative axis. My home network
|
||||||
|
has a ton of Amazon devices, so I broke them out separately. If you don''t have
|
||||||
|
Amazon devices, or they have different names, you can edit the query to use a
|
||||||
|
different name. e = wired, w = wireless","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":11,"w":12,"x":0,"y":66},"hiddenSeries":false,"id":23,"legend":{"alignAsTable":true,"avg":true,"current":true,"max":true,"min":false,"rightSide":true,"show":true,"sort":"current","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[{"$$hashKey":"object:469","alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
|
||||||
|
by ($Identifier) (rate(unpoller_client_transmit_bytes_total{name=~\"^amazon.*\",
|
||||||
|
name=~\"$Wireless\", site_name=~\"$Site\", ap_name=~\"$AP\"}[$__interval]))","hide":false,"interval":"$Smooth","legendFormat":"w
|
||||||
|
{{name}} {{mac}} Tx","refId":"A"},{"expr":"sum by ($Identifier) (rate(unpoller_client_receive_bytes_total{name=~\"^amazon.*\",
|
||||||
|
name=~\"$Wireless\", site_name=~\"$Site\", ap_name=~\"$AP\"}[$__interval]))","hide":false,"interval":"$Smooth","legendFormat":"w
|
||||||
|
{{name}} {{mac}} Rx","refId":"B"},{"expr":"sum by ($Identifier) (rate(unpoller_client_transmit_bytes_total{name=~\"^amazon.*\",
|
||||||
|
name=~\"$Wired\", site_name=~\"$Site\", sw_name=~\"$Switch\"}[$__interval]))","hide":false,"interval":"$Smooth","legendFormat":"e
|
||||||
|
{{name}} {{mac}} Tx","refId":"C"},{"expr":"sum by ($Identifier) (rate(unpoller_client_receive_bytes_total{name=~\"^amazon.*\",
|
||||||
|
name=~\"$Wired\", site_name=~\"$Site\", sw_name=~\"$Switch\"}[$__interval]))","hide":false,"interval":"$Smooth","legendFormat":"e
|
||||||
|
{{name}} {{mac}} Rx","refId":"D"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Client
|
||||||
|
Bandwidth / Echos & FireTVs","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"Bps","label":"bytes
|
||||||
|
/ sec","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"Cameras
|
||||||
|
TX / RX bytes per second. Rx is on the negative axis. This graph shows any device
|
||||||
|
with the word \"camera\" in its name and has nothing to do with UniFi Protect/video
|
||||||
|
products. e = wired, w = wireless","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":11,"w":12,"x":12,"y":66},"hiddenSeries":false,"id":15,"legend":{"alignAsTable":true,"avg":true,"current":true,"hideEmpty":true,"max":true,"min":false,"rightSide":true,"show":true,"sort":"avg","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[{"$$hashKey":"object:510","alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":true,"steppedLine":false,"targets":[{"expr":"sum
|
||||||
|
by ($Identifier) (rate(unpoller_client_transmit_bytes_total{ap_name=~\"$AP\",
|
||||||
|
name=~\".*camera.*|.*cam$\", site_name=~\"$Site\"}[$__interval]))","hide":false,"instant":false,"interval":"$Smooth","legendFormat":"w
|
||||||
|
{{name}} {{mac}} Tx","refId":"A"},{"expr":"sum by ($Identifier) (rate(unpoller_client_receive_bytes_total{ap_name=~\"$AP\",
|
||||||
|
name=~\".*camera.*|.*cam$\", site_name=~\"$Site\"}[$__interval]))","hide":false,"interval":"$Smooth","legendFormat":"w
|
||||||
|
{{name}} {{mac}} Rx","refId":"B"},{"expr":"sum by ($Identifier) (rate(unpoller_client_transmit_bytes_total{sw_name=~\"$Switch\",
|
||||||
|
name=~\".*camera.*|.*cam$\", site_name=~\"$Site\"}[$__interval]))","hide":false,"interval":"$Smooth","legendFormat":"e
|
||||||
|
{{name}} {{mac}} Tx","refId":"C"},{"expr":"sum by ($Identifier) (rate(unpoller_client_receive_bytes_total{sw_name=~\"$Switch\",
|
||||||
|
name=~\".*camera.*|.*cam$\", site_name=~\"$Site\"}[$__interval]))","hide":false,"interval":"$Smooth","legendFormat":"e
|
||||||
|
{{name}} {{mac}} Rx","refId":"D"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Client
|
||||||
|
Bandwidth: Cameras","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"Bps","label":"bytes
|
||||||
|
/ sec","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":9,"w":12,"x":0,"y":77},"hiddenSeries":false,"id":7,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":false,"max":true,"min":true,"rightSide":true,"show":true,"sort":"min","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"connected","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
|
||||||
|
by ($Identifier) (unpoller_client_rssi_db{ap_name=~\"$AP\", site_name=~\"$Site\",
|
||||||
|
name=~\"$Wireless\"})","interval":"1m","legendFormat":"{{name}} {{mac}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Received
|
||||||
|
Signal Strength Indicator","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"dB","label":"RSSI
|
||||||
|
Quality","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":9,"w":12,"x":12,"y":77},"hiddenSeries":false,"id":10,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":false,"hideZero":false,"max":true,"min":true,"rightSide":true,"show":true,"sort":"max","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"connected","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
|
||||||
|
by ($Identifier) (unpoller_client_radio_signal_db{ap_name=~\"$AP\", site_name=~\"$Site\",
|
||||||
|
name=~\"$Wireless\"})","instant":false,"interval":"$Smooth","intervalFactor":1,"legendFormat":"{{name}}
|
||||||
|
{{mac}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Wireless
|
||||||
|
Signal","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"dBm","label":"Signal
|
||||||
|
Power","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":0,"y":86},"hiddenSeries":false,"id":6,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":false,"max":true,"min":true,"rightSide":true,"show":true,"sort":"current","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"connected","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
|
||||||
|
by ($Identifier) (unpoller_client_noise_db{ap_name=~\"$AP\", site_name=~\"$Site\",
|
||||||
|
name=~\"$Wireless\"})","instant":false,"interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
{{mac}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"UAP
|
||||||
|
Client Stats / Noise","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"dB","label":"Noise","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"Client
|
||||||
|
reported transmit rate.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":12,"y":86},"hiddenSeries":false,"id":19,"legend":{"alignAsTable":true,"avg":true,"current":true,"max":true,"min":false,"rightSide":true,"show":true,"sort":"max","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"connected","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
|
||||||
|
by ($Identifier) (unpoller_client_radio_transmit_rate_bps{ap_name=~\"$AP\", site_name=~\"$Site\",
|
||||||
|
name=~\"$Wireless\"})","interval":"$Smooth","legendFormat":"{{name}} {{mac}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"TX
|
||||||
|
Rate","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"bps","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":0,"y":94},"hiddenSeries":false,"id":24,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":false,"max":true,"min":true,"rightSide":true,"show":true,"sort":"current","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"avg
|
||||||
|
by ($Identifier) (rate(unpoller_client_wifi_attempts_transmit_total{ap_name=~\"$AP\",
|
||||||
|
site_name=~\"$Site\", name=~\"$Wireless\"}[$__interval]))","interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
{{mac}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Client
|
||||||
|
Wifi Tx Attempts","tooltip":{"shared":true,"sort":1,"value_type":"individual"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"Attempts
|
||||||
|
/ Second","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"Client
|
||||||
|
reported receive rate.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":12,"y":94},"hiddenSeries":false,"id":26,"legend":{"alignAsTable":true,"avg":true,"current":true,"hideEmpty":true,"hideZero":false,"max":true,"min":false,"rightSide":true,"show":true,"sort":"current","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
|
||||||
|
by ($Identifier) (unpoller_client_radio_receive_rate_bps{ap_name=~\"$AP\", site_name=~\"$Site\",
|
||||||
|
name=~\"$Wireless\"})","interval":"$Smooth","legendFormat":"{{name}} {{mac}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"RX
|
||||||
|
Rate","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"bps","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":0,"y":102},"hiddenSeries":false,"id":30,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":false,"max":true,"min":true,"rightSide":true,"show":true,"sort":"max","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
|
||||||
|
by ($Identifier) (rate(unpoller_client_transmit_retries_total{ap_name=~\"$AP\",
|
||||||
|
site_name=~\"$Site\", name=~\"$Wireless\"}[$__interval]))","interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
{{mac}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Client
|
||||||
|
Transmit Retries","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"Tx
|
||||||
|
Retries / Second","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":12,"y":102},"hiddenSeries":false,"id":29,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":false,"max":true,"min":true,"rightSide":true,"show":true,"sort":"max","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":2,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
|
||||||
|
by ($Identifier) (unpoller_client_radio_transmit_power_dbm{ap_name=~\"$AP\", site_name=~\"$Site\",
|
||||||
|
name=~\"$Wireless\"})","interval":"$Smooth","legendFormat":"{{name}} {{mac}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Client
|
||||||
|
Transmit Power","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"dBm","label":"Transmit
|
||||||
|
Power dBm","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":0,"y":110},"hiddenSeries":false,"id":25,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":false,"max":true,"min":true,"rightSide":true,"show":true,"sort":"max","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":2,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
|
||||||
|
by ($Identifier) (unpoller_client_anomalies{ap_name=~\"$AP\", site_name=~\"$Site\",
|
||||||
|
name=~\"$Wireless\"})","interval":"$Smooth","legendFormat":"{{name}} {{mac}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Client
|
||||||
|
Anomalies","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"Anomalies","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":12,"y":110},"hiddenSeries":false,"id":31,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":false,"max":true,"min":true,"rightSide":true,"show":true,"sort":"current","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
|
||||||
|
by ($Identifier) (unpoller_client_satisfaction_ratio{ap_name=~\"$AP\", site_name=~\"$Site\",
|
||||||
|
name=~\"$Wireless\"})","interval":"$Smooth","legendFormat":"{{name}} {{mac}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Client
|
||||||
|
Satisfaction","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":1,"format":"percentunit","label":"Client
|
||||||
|
Satisfaction","logBase":1,"max":"1","min":"0","show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":0,"y":118},"hiddenSeries":false,"id":28,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":false,"max":true,"min":true,"rightSide":true,"show":true,"sort":"max","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":2,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
|
||||||
|
by ($Identifier) (unpoller_client_roam_count_total{ap_name=~\"$AP\", site_name=~\"$Site\",
|
||||||
|
name=~\"$Wireless\"})","interval":"$Smooth","legendFormat":"{{name}} {{mac}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Roam
|
||||||
|
Count","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"Roam
|
||||||
|
Count","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":12,"y":118},"hiddenSeries":false,"id":27,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":false,"max":false,"min":true,"rightSide":true,"show":true,"sort":"current","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":2,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
|
||||||
|
by ($Identifier) (unpoller_client_ccq_ratio{ap_name=~\"$AP\", site_name=~\"$Site\",
|
||||||
|
name=~\"$Wireless\"})","interval":"$Smooth","legendFormat":"{{name}} {{mac}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Client
|
||||||
|
Connection Quality %","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":1,"format":"percentunit","label":"CCQ","logBase":1,"max":"1","min":"0","show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}}],"refresh":"1m","schemaVersion":25,"style":"dark","tags":["unifi","unifi-poller"],"templating":{"list":[{"allValue":null,"current":{},"datasource":"VictoriaMetrics","definition":"label_values(unpoller_client_uptime_seconds,source)","hide":2,"includeAll":true,"label":null,"multi":true,"name":"Controller","options":[],"query":"label_values(unpoller_client_uptime_seconds,source)","refresh":1,"regex":"","skipUrlSync":false,"sort":2,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":".*","current":{},"datasource":"VictoriaMetrics","definition":"label_values(unpoller_client_uptime_seconds{source=~\"$Controller\"},site_name)","hide":0,"includeAll":true,"label":null,"multi":true,"name":"Site","options":[],"query":"label_values(unpoller_client_uptime_seconds{source=~\"$Controller\"},site_name)","refresh":1,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":"","current":{},"datasource":"VictoriaMetrics","definition":"label_values(unpoller_client_uptime_seconds{site_name=~\"$Site\"},ap_name)","hide":0,"includeAll":true,"label":null,"multi":true,"name":"AP","options":[],"query":"label_values(unpoller_client_uptime_seconds{site_name=~\"$Site\"},ap_name)","refresh":2,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":"","current":{},"datasource":"VictoriaMetrics","definition":"label_values(unpoller_client_uptime_seconds{site_name=~\"$Site\"},sw_name)","hide":0,"includeAll":true,"label":null,"multi":true,"name":"Switch","options":[],"query":"label_values(unpoller_client_uptime_seconds{site_name=~\"$Site\"},sw_name)","refresh":1,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":".*","current":{},"datasource":"VictoriaMetrics","definition":"label_values(unpoller_client_uptime_seconds{site_name=~\"$Site\",
|
||||||
|
ap_name=~\"$AP\", wired=\"false\"},name)","hide":0,"includeAll":true,"label":null,"multi":true,"name":"Wireless","options":[],"query":"label_values(unpoller_client_uptime_seconds{site_name=~\"$Site\",
|
||||||
|
ap_name=~\"$AP\", wired=\"false\"},name)","refresh":1,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":".*","current":{},"datasource":"VictoriaMetrics","definition":"label_values(unpoller_client_uptime_seconds{site_name=~\"$Site\",
|
||||||
|
sw_name=~\"$Switch\", wired=\"true\"},name)","hide":0,"includeAll":true,"label":null,"multi":true,"name":"Wired","options":[],"query":"label_values(unpoller_client_uptime_seconds{site_name=~\"$Site\",
|
||||||
|
sw_name=~\"$Switch\", wired=\"true\"},name)","refresh":1,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":null,"current":{"selected":true,"text":"2m","value":"2m"},"hide":0,"includeAll":false,"label":null,"multi":false,"name":"Smooth","options":[{"selected":false,"text":"30s","value":"30s"},{"selected":false,"text":"1m","value":"1m"},{"selected":true,"text":"2m","value":"2m"},{"selected":false,"text":"5m","value":"5m"},{"selected":false,"text":"10m","value":"10m"},{"selected":false,"text":"15m","value":"15m"},{"selected":false,"text":"30m","value":"30m"},{"selected":false,"text":"1h","value":"1h"}],"query":"30s,1m,2m,5m,10m,15m,30m,1h","skipUrlSync":false,"type":"custom"},{"allValue":null,"current":{"selected":true,"text":"name","value":"name"},"hide":0,"includeAll":false,"label":null,"multi":false,"name":"Identifier","options":[{"selected":true,"text":"name","value":"name"},{"selected":false,"text":"name,mac","value":"name,mac"}],"query":"name,
|
||||||
|
name\\,mac","queryValue":"","skipUrlSync":false,"type":"custom"}]},"time":{"from":"now-3h","to":"now"},"timepicker":{"nowDelay":"","refresh_intervals":["30s","1m","5m","15m","30m","1h","2h"],"time_options":["5m","15m","1h","6h","12h","24h","2d","7d","30d"]},"timezone":"browser","title":"UniFi-Poller:
|
||||||
|
Client Insights - Prometheus","uid":"jMfvAjxWz","version":30}'
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/part-of: unpoller
|
||||||
|
grafana_dashboard: "1"
|
||||||
|
name: unpoller-dashboard-client-insights
|
||||||
|
namespace: monitoring
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
data:
|
||||||
|
network-sites.json: '{"annotations":{"list":[{"builtIn":1,"datasource":"-- Grafana
|
||||||
|
--","enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 1)","name":"Annotations
|
||||||
|
& Alerts","type":"dashboard"}]},"description":"UniFi Poller v2.0 Displays detailed
|
||||||
|
information for network Sites in a UniFi controller using Prometheus.","editable":true,"gnetId":11311,"graphTooltip":1,"id":null,"iteration":1580616399315,"links":[{"asDropdown":true,"icon":"external
|
||||||
|
link","includeVars":false,"keepTime":true,"tags":["unifi-poller"],"title":"UniFi
|
||||||
|
Poller","type":"dashboards"},{"icon":"question","tags":[],"title":"Help","type":"link","url":"https://golift.io/unifi-poller/issues"},{"icon":"doc","tags":[],"title":"Wiki","type":"link","url":"https://golift.io/unifi-poller/wiki"},{"icon":"bolt","tags":[],"title":"Discord","type":"link","url":"https://discord.gg/KnyKYt2"}],"panels":[{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237,
|
||||||
|
129, 40, 0.89)","#d44a3a"],"datasource":"VictoriaMetrics","decimals":null,"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":4,"w":3,"x":0,"y":0},"id":41,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value
|
||||||
|
to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"pluginVersion":"6.4.4","postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"sparkline":{"fillColor":"rgba(31,
|
||||||
|
118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false,"ymax":null,"ymin":null},"tableColumn":"","targets":[{"expr":"sum(unpoller_site_switches)","format":"time_series","instant":true,"interval":"$Smooth","refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"USW","type":"singlestat","valueFontSize":"100%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237,
|
||||||
|
129, 40, 0.89)","#d44a3a"],"datasource":"VictoriaMetrics","decimals":null,"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":4,"w":3,"x":3,"y":0},"id":42,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value
|
||||||
|
to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"pluginVersion":"6.4.4","postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"sparkline":{"fillColor":"rgba(31,
|
||||||
|
118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false,"ymax":null,"ymin":null},"tableColumn":"","targets":[{"expr":"sum(unpoller_site_aps)","format":"time_series","instant":true,"interval":"$Smooth","refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"UAP","type":"singlestat","valueFontSize":"100%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237,
|
||||||
|
129, 40, 0.89)","#d44a3a"],"datasource":"VictoriaMetrics","decimals":null,"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":4,"w":3,"x":6,"y":0},"id":43,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value
|
||||||
|
to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"pluginVersion":"6.4.4","postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"sparkline":{"fillColor":"rgba(31,
|
||||||
|
118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false,"ymax":null,"ymin":null},"tableColumn":"","targets":[{"expr":"sum(unpoller_site_gateways)","format":"time_series","instant":true,"interval":"$Smooth","refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"USG","type":"singlestat","valueFontSize":"100%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237,
|
||||||
|
129, 40, 0.89)","#d44a3a"],"datasource":"VictoriaMetrics","decimals":null,"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":4,"w":3,"x":9,"y":0},"id":44,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value
|
||||||
|
to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"pluginVersion":"6.4.4","postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"sparkline":{"fillColor":"rgba(31,
|
||||||
|
118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":true,"ymax":null,"ymin":null},"tableColumn":"","targets":[{"expr":"sum(unpoller_site_stations)","format":"time_series","instant":false,"interval":"$Smooth","refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"Stations","type":"singlestat","valueFontSize":"100%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"content":"Each
|
||||||
|
site contains 5 subsystems: wan, lan, wlan, www, vpn. Each subsystem contains
|
||||||
|
data specific to that system. \nAll subsystems except vpn have data rate. VPN
|
||||||
|
has data transfer though.\nThere''s not a ton of juicy info here, and most of
|
||||||
|
it can be gleaned on other the dashboards.\nThe row below is purposely collapsed
|
||||||
|
because some installationd have hundreds of sites. \nLoading them all at once
|
||||||
|
is often not possible.\n","gridPos":{"h":4,"w":12,"x":12,"y":0},"id":37,"links":[],"mode":"html","options":{},"timeFrom":null,"timeShift":null,"title":"Information","type":"text"},{"collapsed":true,"gridPos":{"h":1,"w":24,"x":0,"y":4},"id":4,"panels":[{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["#299c46","rgba(237,
|
||||||
|
129, 40, 0.89)","#d44a3a"],"datasource":"VictoriaMetrics","decimals":null,"format":"s","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":3,"w":6,"x":0,"y":5},"id":40,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value
|
||||||
|
to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"options":{},"pluginVersion":"6.4.4","postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"scopedVars":{"Site":{"selected":false,"text":"Home
|
||||||
|
(default)","value":"Home (default)"}},"sparkline":{"fillColor":"rgba(31, 118,
|
||||||
|
189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false,"ymax":null,"ymin":null},"tableColumn":"","targets":[{"expr":"unpoller_site_uptime_seconds","format":"time_series","instant":true,"interval":"$Smooth","refId":"A"}],"thresholds":"","timeFrom":null,"timeShift":null,"title":"Uplink
|
||||||
|
Uptime","type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"description":"These
|
||||||
|
are counters, totals, but they don''t change much so the graph does not show rate.","fill":0,"fillGradient":0,"gridPos":{"h":11,"w":18,"x":6,"y":5},"hiddenSeries":false,"id":38,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":false,"max":true,"min":false,"rightSide":true,"show":true,"sort":"max","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":2,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","repeatDirection":"h","scopedVars":{"Site":{"selected":false,"text":"Home
|
||||||
|
(default)","value":"Home (default)"}},"seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"unpoller_site_iots{site_name=~\"$Site\",subsystem=~\"$Subsystem\"}","interval":"$Smooth","legendFormat":"{{subsystem}}
|
||||||
|
IoT","refId":"A"},{"expr":"unpoller_site_adopted{site_name=~\"$Site\",subsystem=~\"$Subsystem\"}","interval":"$Smooth","legendFormat":"{{subsystem}}
|
||||||
|
Adopted","refId":"B"},{"expr":"unpoller_site_disabled{site_name=~\"$Site\",subsystem=~\"$Subsystem\"}","interval":"$Smooth","legendFormat":"{{subsystem}}
|
||||||
|
Disabled","refId":"C"},{"expr":"unpoller_site_disconnected{site_name=~\"$Site\",subsystem=~\"$Subsystem\"}","interval":"$Smooth","legendFormat":"{{subsystem}}
|
||||||
|
Disconnected","refId":"D"},{"expr":"unpoller_site_pending{site_name=~\"$Site\",subsystem=~\"$Subsystem\"}","interval":"$Smooth","legendFormat":"{{subsystem}}
|
||||||
|
Pending","refId":"E"},{"expr":"unpoller_site_gateways{site_name=~\"$Site\",subsystem=~\"$Subsystem\"}","interval":"$Smooth","legendFormat":"{{subsystem}}
|
||||||
|
Gateways","refId":"F"},{"expr":"unpoller_site_switches{site_name=~\"$Site\",subsystem=~\"$Subsystem\"}","interval":"$Smooth","legendFormat":"{{subsystem}}
|
||||||
|
Switches","refId":"G"},{"expr":"unpoller_site_intenet_drops_total{site_name=~\"$Site\",subsystem=~\"$Subsystem\"}","interval":"$Smooth","legendFormat":"{{subsystem}}
|
||||||
|
Drops","refId":"H"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Item
|
||||||
|
Counts","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":"Item
|
||||||
|
Counts","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"cacheTimeout":null,"datasource":"VictoriaMetrics","gridPos":{"h":8,"w":3,"x":0,"y":8},"id":32,"links":[],"options":{"fieldOptions":{"calcs":["lastNotNull"],"defaults":{"color":{"mode":"thresholds"},"decimals":0,"mappings":[{"id":0,"op":"=","text":"N/A","type":1,"value":"null"}],"max":400,"min":10,"nullValueMode":"connected","thresholds":{"mode":"absolute","steps":[{"color":"#299c46","value":null},{"color":"rgba(237,
|
||||||
|
129, 40, 0.89)","value":100},{"color":"#d44a3a","value":200}]},"title":"Latency","unit":"s"},"overrides":[],"values":false},"orientation":"horizontal","showThresholdLabels":false,"showThresholdMarkers":true},"pluginVersion":"6.6.0","scopedVars":{"Site":{"selected":false,"text":"Home
|
||||||
|
(default)","value":"Home (default)"}},"targets":[{"expr":"unpoller_site_latency_seconds{site_name=~\"$Site\"}","instant":true,"interval":"$Smooth","refId":"A"}],"timeFrom":null,"timeShift":null,"title":"","type":"gauge"},{"cacheTimeout":null,"datasource":"VictoriaMetrics","gridPos":{"h":8,"w":3,"x":3,"y":8},"id":33,"links":[],"options":{"fieldOptions":{"calcs":["lastNotNull"],"defaults":{"color":{"mode":"thresholds"},"mappings":[{"id":0,"op":"=","text":"N/A","type":1,"value":"null"}],"max":200,"min":1,"nullValueMode":"connected","thresholds":{"mode":"absolute","steps":[{"color":"#299c46","value":null},{"color":"rgba(237,
|
||||||
|
129, 40, 0.89)","value":50},{"color":"#d44a3a","value":100}]},"title":"Speed Test
|
||||||
|
Ping","unit":"s"},"overrides":[],"values":false},"orientation":"horizontal","showThresholdLabels":false,"showThresholdMarkers":true},"pluginVersion":"6.6.0","scopedVars":{"Site":{"selected":false,"text":"Home
|
||||||
|
(default)","value":"Home (default)"}},"targets":[{"expr":"unpoller_site_speedtest_ping{site_name=~\"$Site\"}","interval":"$Smooth","refId":"A"}],"timeFrom":null,"timeShift":null,"title":"","type":"gauge"},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":null,"description":"Shows
|
||||||
|
data transfer for each subsystem on the site. RX is on the negative axis.","fill":0,"fillGradient":0,"gridPos":{"h":8,"w":24,"x":0,"y":16},"hiddenSeries":false,"id":15,"legend":{"alignAsTable":true,"avg":false,"current":true,"max":true,"min":false,"rightSide":true,"show":true,"sort":"max","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"maxPerRow":2,"nullPointMode":"connected","options":{"dataLinks":[]},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","repeatDirection":"h","scopedVars":{"Site":{"selected":false,"text":"Home
|
||||||
|
(default)","value":"Home (default)"}},"seriesOverrides":[{"alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"unpoller_site_transmit_rate_bytes{site_name=~\"$Site\",
|
||||||
|
subsystem=~\"$Subsystem\"}","interval":"$Smooth","legendFormat":"{{subsystem}}
|
||||||
|
Tx","refId":"A"},{"expr":"unpoller_site_receive_rate_bytes{site_name=~\"$Site\",
|
||||||
|
subsystem=~\"$Subsystem\"}","interval":"$Smooth","legendFormat":"{{subsystem}}
|
||||||
|
Rx","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Data
|
||||||
|
Transfer","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":null,"format":"Bps","label":"bytes
|
||||||
|
/ second","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"description":"This
|
||||||
|
graphs shows clients connected to the site.","fill":0,"fillGradient":0,"gridPos":{"h":7,"w":24,"x":0,"y":24},"hiddenSeries":false,"id":2,"legend":{"alignAsTable":true,"avg":false,"current":true,"max":true,"min":false,"rightSide":true,"show":true,"sort":"current","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":3,"links":[],"nullPointMode":"connected","options":{"dataLinks":[]},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","repeat":null,"repeatDirection":"h","scopedVars":{"Site":{"selected":false,"text":"Home
|
||||||
|
(default)","value":"Home (default)"}},"seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"unpoller_site_users{site_name=~\"$Site\",
|
||||||
|
subsystem=~\"$Subsystem\"}","interval":"$Smooth","legendFormat":"{{subsystem}}
|
||||||
|
Users","refId":"A"},{"expr":"unpoller_site_guests{site_name=~\"$Site\", subsystem=~\"$Subsystem\"}","interval":"$Smooth","legendFormat":"{{subsystem}}
|
||||||
|
Guests","refId":"B"},{"expr":"unpoller_site_remote_user_active{site_name=~\"$Site\",
|
||||||
|
subsystem=~\"$Subsystem\"}","interval":"$Smooth","legendFormat":"{{subsystem}}
|
||||||
|
Active","refId":"C"},{"expr":"unpoller_site_remote_user_inactive{site_name=~\"$Site\",
|
||||||
|
subsystem=~\"$Subsystem\"}","interval":"$Smooth","legendFormat":"{{subsystem}}
|
||||||
|
Inactive","refId":"D"},{"expr":"unpoller_site_stations{site_name=~\"$Site\", subsystem=~\"$Subsystem\"}","interval":"$Smooth","legendFormat":"{{subsystem}}
|
||||||
|
Stations","refId":"E"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Client
|
||||||
|
Counts","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"description":"This
|
||||||
|
graphs shows clients connected to the site.","fill":0,"fillGradient":0,"gridPos":{"h":7,"w":24,"x":0,"y":31},"hiddenSeries":false,"id":39,"legend":{"alignAsTable":true,"avg":false,"current":true,"max":true,"min":false,"rightSide":true,"show":true,"sort":"current","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":3,"links":[],"nullPointMode":"connected","options":{"dataLinks":[]},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","repeatDirection":"h","scopedVars":{"Site":{"selected":false,"text":"Home
|
||||||
|
(default)","value":"Home (default)"}},"seriesOverrides":[{"alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"rate(unpoller_site_remote_user_transmit_bytes_total{site_name=~\"$Site\"}[$__interval])","interval":"$Smooth","legendFormat":"VPN
|
||||||
|
Users Tx","refId":"A"},{"expr":"rate(unpoller_site_remote_user_receive_bytes_total{site_name=~\"$Site\"}[$__interval])","interval":"$Smooth","legendFormat":"VPN
|
||||||
|
Users Rx","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"VPN
|
||||||
|
Users Data Rate","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"Bps","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"description":"This
|
||||||
|
graph only works if DPI is enabled on the controller and DPI collection is enabled
|
||||||
|
in UniFi Poller. Rx is on the negative axis.","fill":0,"fillGradient":0,"gridPos":{"h":17,"w":24,"x":0,"y":38},"hiddenSeries":false,"id":45,"legend":{"alignAsTable":true,"avg":true,"current":false,"hideEmpty":true,"hideZero":true,"max":true,"min":false,"rightSide":true,"show":true,"sort":"max","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":3,"links":[],"nullPointMode":"connected","options":{"dataLinks":[]},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","repeatDirection":"h","scopedVars":{"Site":{"selected":false,"text":"Home
|
||||||
|
(default)","value":"Home (default)"}},"seriesOverrides":[{"alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
|
||||||
|
by (category) (rate(unpoller_site_dpi_receive_bytes{site_name=~\"$Site\"}[$__interval]))","hide":false,"interval":"$Smooth","legendFormat":"{{category}}
|
||||||
|
Rx","refId":"A"},{"expr":"sum by (category) (rate(unpoller_site_dpi_transmit_bytes{site_name=~\"$Site\"}[$__interval]))","hide":false,"interval":"$Smooth","legendFormat":"{{category}}
|
||||||
|
Tx","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Data
|
||||||
|
Transfer by Category","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"Bps","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}}],"repeat":"Site","title":"Site:
|
||||||
|
$Site","type":"row"}],"refresh":"1m","schemaVersion":22,"style":"dark","tags":["unifi","unifi-poller"],"templating":{"list":[{"allValue":null,"current":{},"datasource":"VictoriaMetrics","definition":"label_values(unpoller_site_transmit_rate_bytes,source)","hide":0,"includeAll":true,"label":"","multi":true,"name":"Controller","options":[],"query":"label_values(unpoller_site_transmit_rate_bytes,source)","refresh":1,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":".*","current":{},"datasource":"VictoriaMetrics","definition":"label_values(unpoller_site_transmit_rate_bytes{source=~\"$Controller\"},site_name)","hide":2,"includeAll":true,"label":"","multi":false,"name":"Site","options":[],"query":"label_values(unpoller_site_transmit_rate_bytes{source=~\"$Controller\"},site_name)","refresh":1,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":".*","current":{},"datasource":"VictoriaMetrics","definition":"label_values(subsystem)","hide":2,"includeAll":true,"label":null,"multi":true,"name":"Subsystem","options":[],"query":"label_values(subsystem)","refresh":1,"regex":"","skipUrlSync":false,"sort":0,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":null,"current":{"selected":true,"text":"2m","value":"2m"},"hide":0,"includeAll":false,"label":null,"multi":false,"name":"Smooth","options":[{"selected":false,"text":"30s","value":"30s"},{"selected":true,"text":"1m","value":"1m"},{"selected":false,"text":"2m","value":"2m"},{"selected":false,"text":"5m","value":"5m"},{"selected":false,"text":"10m","value":"10m"}],"query":"30s,1m,2m,5m,10m","skipUrlSync":false,"type":"custom"}]},"time":{"from":"now-3h","to":"now"},"timepicker":{"nowDelay":"5s","refresh_intervals":["30s","1m","5m","15m","30m","1h","2h"],"time_options":["5m","15m","1h","6h","12h","24h","2d","7d","30d"]},"timezone":"browser","title":"UniFi-Poller:
|
||||||
|
Network Sites - Prometheus","uid":"9WaGWZaZk","version":9}'
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/part-of: unpoller
|
||||||
|
grafana_dashboard: "1"
|
||||||
|
name: unpoller-dashboard-network-sites
|
||||||
|
namespace: monitoring
|
||||||
@@ -0,0 +1,266 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
data:
|
||||||
|
uap-insights.json: '{"annotations":{"list":[{"$$hashKey":"object:69","builtIn":1,"datasource":"--
|
||||||
|
Grafana --","enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 1)","name":"Annotations
|
||||||
|
& Alerts","type":"dashboard"}]},"description":"UniFi Poller v2.0.1 Displays detailed
|
||||||
|
information for wireless access points in a UniFi network using Prometheus.","editable":true,"gnetId":11314,"graphTooltip":1,"id":null,"iteration":1592125488769,"links":[{"asDropdown":true,"icon":"external
|
||||||
|
link","includeVars":false,"keepTime":true,"tags":["unifi-poller","unifi"],"title":"UniFi
|
||||||
|
Poller","type":"dashboards"},{"icon":"question","tags":[],"title":"Help","type":"link","url":"https://golift.io/unifi-poller/issues"},{"icon":"doc","tags":[],"title":"Wiki","type":"link","url":"https://golift.io/unifi-poller/wiki"},{"icon":"bolt","tags":[],"title":"Discord","type":"link","url":"https://discord.gg/KnyKYt2"}],"panels":[{"content":"<br>\n<br>\n<center><b><font
|
||||||
|
size=\"6px\">Unifi UAP</font></b></center>\n","datasource":"${DS_UNIFI_POLLER}","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"gridPos":{"h":3,"w":4,"x":0,"y":0},"id":34,"links":[],"mode":"html","title":"","transparent":true,"type":"text"},{"aliasColors":{"Channel
|
||||||
|
11":"#37872D","Channel 36":"#1F60C4","Channel 44":"#8F3BB8"},"breakPoint":"50%","cacheTimeout":null,"combine":{"label":"Others","threshold":0},"datasource":"VictoriaMetrics","decimals":0,"description":"Visualize
|
||||||
|
wireless channel usage w/ wired client counts.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fontSize":"70%","format":"short","gridPos":{"h":10,"w":6,"x":4,"y":0},"hideTimeOverride":false,"id":52,"interval":null,"legend":{"header":"","percentage":true,"percentageDecimals":0,"show":true,"values":false},"legendType":"Right
|
||||||
|
side","links":[],"maxDataPoints":3,"nullPointMode":"connected","pieType":"pie","strokeWidth":"3","targets":[{"expr":"count
|
||||||
|
by (channel) (unpoller_client_roam_count_total{site_name=~\"$Site\", ap_name=~\"$AP\"})\n","instant":false,"interval":"$Smooth","legendFormat":"Ch
|
||||||
|
{{channel}}","refId":"B"}],"timeFrom":null,"title":"Clients / Channel","transparent":true,"type":"piechart","valueName":"current"},{"aliasColors":{"ac":"#37872D","g":"#E0B400","na":"#1F60C4","ng":"#8F3BB8"},"breakPoint":"25%","cacheTimeout":null,"combine":{"label":"Others","threshold":0},"datasource":"VictoriaMetrics","decimals":0,"description":"Visualize
|
||||||
|
how many clients are connected to which radios/APs.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fontSize":"70%","format":"short","gridPos":{"h":10,"w":7,"x":10,"y":0},"hideTimeOverride":false,"id":54,"interval":null,"legend":{"header":"","percentage":true,"show":true,"sort":"current","sortDesc":true,"values":true},"legendType":"Right
|
||||||
|
side","links":[],"maxDataPoints":3,"nullPointMode":"connected","pieType":"pie","strokeWidth":"3","targets":[{"expr":"count
|
||||||
|
by (radio_desc) (unpoller_client_uptime_seconds{site_name=~\"$Site\", ap_name=~\"$AP\"})","instant":false,"interval":"$Smooth","legendFormat":"{{radio_desc}}","refId":"A"}],"timeFrom":null,"title":"Clients
|
||||||
|
/ AP Radio","transparent":true,"type":"piechart","valueName":"current"},{"aliasColors":{},"breakPoint":"50%","cacheTimeout":null,"combine":{"label":"Others","threshold":"0.01"},"datasource":"VictoriaMetrics","decimals":0,"description":"This
|
||||||
|
shows an OUI breakdown from Unifi''s perspective.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fontSize":"70%","format":"short","gridPos":{"h":10,"w":7,"x":17,"y":0},"hideTimeOverride":false,"id":56,"interval":null,"legend":{"header":"Count","percentage":true,"percentageDecimals":0,"show":true,"sortDesc":false,"values":true},"legendType":"Right
|
||||||
|
side","links":[],"maxDataPoints":3,"nullPointMode":"connected","pieType":"pie","strokeWidth":1,"targets":[{"expr":"count
|
||||||
|
by (oui) (unpoller_client_uptime_seconds{site_name=~\"$Site\", ap_name=~\"$AP\"})","instant":false,"interval":"$Smooth","legendFormat":"e
|
||||||
|
{{oui}}","refId":"A"}],"timeFrom":null,"title":"Client / MAC OUI","transparent":true,"type":"piechart","valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"datasource":"VictoriaMetrics","description":"","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":4,"w":2,"x":0,"y":3},"id":48,"interval":null,"isNew":true,"links":[],"mappingType":1,"mappingTypes":[{"name":"value
|
||||||
|
to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"postfix":"","postfixFontSize":"80%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"sparkline":{"fillColor":"rgba(31,
|
||||||
|
118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"sum(unpoller_device_stations{site_name=~\"$Site\",
|
||||||
|
name=~\"$AP\", station_type=\"user\"})","instant":true,"refId":"A"}],"thresholds":"","timeFrom":null,"title":"Users","type":"singlestat","valueFontSize":"110%","valueMaps":[],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":false,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"datasource":"VictoriaMetrics","description":"","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":false,"thresholdMarkers":true},"gridPos":{"h":4,"w":2,"x":2,"y":3},"id":60,"interval":null,"isNew":true,"links":[],"mappingType":1,"mappingTypes":[{"name":"value
|
||||||
|
to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"postfix":"","postfixFontSize":"80%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"sparkline":{"fillColor":"rgba(31,
|
||||||
|
118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"","targets":[{"expr":"sum(unpoller_device_stations{site_name=~\"$Site\",
|
||||||
|
name=~\"$AP\", station_type=\"guest\"})","instant":true,"refId":"A"}],"thresholds":"","timeFrom":null,"title":"Guests","type":"singlestat","valueFontSize":"110%","valueMaps":[],"valueName":"current"},{"bgColor":"#3f2b5b","clockType":"12
|
||||||
|
hour","countdownSettings":{"customFormat":null,"endCountdownTime":"2018-04-29T21:47:00.000Z","endText":"00:00:00"},"datasource":"${DS_UNIFI_POLLER}","dateSettings":{"dateFormat":"YYYY-MM-DD","fontSize":"12px","fontWeight":"bold","showDate":true},"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"gridPos":{"h":3,"w":4,"x":0,"y":7},"id":32,"links":[],"mode":"time","offsetFromUtc":null,"offsetFromUtcMinutes":null,"options":{"bgColor":"","clockType":"24
|
||||||
|
hour","countdownSettings":{"endCountdownTime":"2020-06-14T00:36:42-07:00","endText":"00:00:00"},"dateSettings":{"dateFormat":"YYYY-MM-DD","fontSize":"20px","fontWeight":"normal","showDate":false},"mode":"time","timeSettings":{"fontSize":"12px","fontWeight":"normal"},"timezone":"","timezoneSettings":{"fontSize":"12px","fontWeight":"normal","showTimezone":false,"zoneFormat":"offsetAbbv"}},"refreshSettings":{"syncWithDashboard":false},"timeSettings":{"customFormat":"HH:mm:ss","fontSize":"30px","fontWeight":"normal"},"timezone":null,"timezoneSettings":{"fontSize":"12px","fontWeight":"normal","showTimezone":false,"zoneFormat":"offsetAbbv"},"title":"Now","type":"grafana-clock-panel"},{"columns":[],"datasource":"VictoriaMetrics","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fontSize":"100%","gridPos":{"h":6,"w":24,"x":0,"y":10},"id":1,"isNew":true,"links":[],"pageSize":null,"scroll":false,"showHeader":true,"sort":{"col":11,"desc":true},"styles":[{"$$hashKey":"object:9911","alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"pattern":"Time","thresholds":[],"type":"hidden","unit":"short"},{"$$hashKey":"object:9912","alias":"Uptime","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"pattern":"Value #A","thresholds":[],"type":"hidden","unit":"dtdurations"},{"$$hashKey":"object:9913","alias":"Name","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"link":false,"linkTargetBlank":true,"linkUrl":"http:","pattern":"name","preserveFormat":false,"sanitize":false,"thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:9915","alias":"Model","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"pattern":"model","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:9916","alias":"Device
|
||||||
|
MAC","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
|
||||||
|
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"pattern":"mac","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:9917","alias":"Unifi
|
||||||
|
Serial #","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
|
||||||
|
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"pattern":"serial","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:9918","alias":"Site","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"pattern":"site_name","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:9919","alias":"Version","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"pattern":"version","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:9923","alias":"Address","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"ip","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:9924","alias":"Type","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"type","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:9925","alias":"Type","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"type","thresholds":[],"type":"string","unit":"decbytes"},{"$$hashKey":"object:9926","alias":"Uptime","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"Value #B","thresholds":[],"type":"number","unit":"s"},{"$$hashKey":"object:9928","alias":"Bytes","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":1,"mappingType":1,"pattern":"Value #C","thresholds":[],"type":"number","unit":"bytes"}],"targets":[{"expr":"sum
|
||||||
|
by (ip,mac,model,name,serial,site_name,type,version) (unpoller_device_info{site_name=~\"$Site\",
|
||||||
|
name=~\"$AP\"})","format":"table","instant":true,"interval":"","legendFormat":"","refId":"A"},{"expr":"sum
|
||||||
|
by (ip,mac,model,name,serial,site_name,type,version) (unpoller_device_uptime_seconds{site_name=~\"$Site\",
|
||||||
|
name=~\"$AP\"})","format":"table","hide":false,"instant":true,"interval":"","legendFormat":"","refId":"B"},{"expr":"sum
|
||||||
|
by (ip,mac,model,name,serial,site_name,type,version) (unpoller_device_bytes_total{site_name=~\"$Site\",
|
||||||
|
name=~\"$AP\"})","format":"table","hide":false,"instant":true,"interval":"","legendFormat":"","refId":"C"}],"timeFrom":null,"title":"Access
|
||||||
|
Point Details","transform":"table","type":"table-old"},{"columns":[],"datasource":"VictoriaMetrics","description":"The
|
||||||
|
counters in this table represent uptime totals and do not change with the time
|
||||||
|
range selector. ","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fontSize":"100%","gridPos":{"h":10,"w":24,"x":0,"y":16},"id":49,"isNew":true,"links":[],"pageSize":null,"scroll":false,"showHeader":true,"sort":{"col":15,"desc":true},"styles":[{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"pattern":"Time","thresholds":[],"type":"hidden","unit":"short"},{"alias":"BSSID","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"link":false,"linkTargetBlank":true,"linkUrl":"http:","pattern":"bssid","preserveFormat":false,"sanitize":false,"thresholds":[],"type":"string","unit":"short"},{"alias":"ESSID","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"essid","thresholds":[],"type":"string","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"job","thresholds":[],"type":"hidden","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"__name__","thresholds":[],"type":"hidden","unit":"short"},{"alias":"Serial","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"serial","thresholds":[],"type":"string","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"type","thresholds":[],"type":"hidden","unit":"short"},{"alias":"MAC","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"mac","thresholds":[],"type":"string","unit":"short"},{"alias":"Site","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"site_name","thresholds":[],"type":"string","unit":"short"},{"alias":"VAP","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"vap_name","thresholds":[],"type":"string","unit":"short"},{"alias":"Version","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"version","thresholds":[],"type":"string","unit":"short"},{"alias":"CCQ","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"Value #A","thresholds":[],"type":"number","unit":"percentunit"},{"alias":"Model","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"model","thresholds":[],"type":"string","unit":"short"},{"alias":"Name","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"radio_name","thresholds":[],"type":"string","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"instance","thresholds":[],"type":"hidden","unit":"short"},{"alias":"AP
|
||||||
|
Name","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
|
||||||
|
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"mappingType":1,"pattern":"name","thresholds":[],"type":"string","unit":"short"},{"alias":"Usage","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"usage","thresholds":[],"type":"string","unit":"short"},{"alias":"Radio","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"radio","thresholds":[],"type":"string","unit":"short"},{"alias":"Avg
|
||||||
|
Client Sig","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
|
||||||
|
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":0,"mappingType":1,"pattern":"Value
|
||||||
|
#B","thresholds":[],"type":"number","unit":"dBm"},{"alias":"Rx Drops","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value #C","thresholds":[],"type":"number","unit":"short"},{"alias":"Controller","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"source","thresholds":[],"type":"hidden","unit":"short"},{"alias":"Tx
|
||||||
|
Drops","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
|
||||||
|
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value
|
||||||
|
#E","thresholds":[],"type":"number","unit":"short"},{"alias":"Bytes Rx","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value #G","thresholds":[],"type":"number","unit":"decbytes"},{"alias":"Bytes
|
||||||
|
Tx","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
|
||||||
|
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value
|
||||||
|
#F","thresholds":[],"type":"number","unit":"decbytes"},{"alias":"Rx Packets","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"Value #H","thresholds":[],"type":"number","unit":"short"},{"alias":"Tx
|
||||||
|
Packets","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
|
||||||
|
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"mappingType":1,"pattern":"Value
|
||||||
|
#I","thresholds":[],"type":"number","unit":"short"}],"targets":[{"expr":"sum by
|
||||||
|
(bssid,essid,ap_name,name,radio,radio_name,vap_name,site_name,usage,source) (unpoller_device_vap_ccq_ratio{site_name=~\"$Site\",
|
||||||
|
name=~\"$AP\"})","format":"table","instant":true,"interval":"","refId":"A"},{"expr":"sum
|
||||||
|
by (bssid,essid,ap_name,name,radio,radio_name,vap_name,site_name,usage,source)
|
||||||
|
(unpoller_device_vap_average_client_signal{site_name=~\"$Site\", name=~\"$AP\"})","format":"table","hide":false,"instant":true,"interval":"","refId":"B"},{"expr":"sum
|
||||||
|
by (bssid,essid,ap_name,name,radio,radio_name,vap_name,site_name,usage,source)
|
||||||
|
(unpoller_device_vap_receive_dropped_total{site_name=~\"$Site\", name=~\"$AP\"})
|
||||||
|
","format":"table","hide":false,"instant":true,"interval":"","refId":"C"},{"expr":"sum
|
||||||
|
by (bssid,essid,ap_name,name,radio,radio_name,vap_name,site_name,usage,source)
|
||||||
|
(unpoller_device_vap_transmit_dropped_total{site_name=~\"$Site\", name=~\"$AP\"})
|
||||||
|
","format":"table","hide":false,"instant":true,"interval":"","refId":"E"},{"expr":"sum
|
||||||
|
by (bssid,essid,ap_name,name,radio,radio_name,vap_name,site_name,usage,source)
|
||||||
|
(unpoller_device_vap_transmit_bytes_total{site_name=~\"$Site\", name=~\"$AP\"})
|
||||||
|
","format":"table","hide":false,"instant":true,"interval":"","refId":"F"},{"expr":"sum
|
||||||
|
by (bssid,essid,ap_name,name,radio,radio_name,vap_name,site_name,usage,source)
|
||||||
|
(unpoller_device_vap_receive_bytes_total{site_name=~\"$Site\", name=~\"$AP\"})
|
||||||
|
","format":"table","hide":false,"instant":true,"interval":"","refId":"G"},{"expr":"sum
|
||||||
|
by (bssid,essid,ap_name,name,radio,radio_name,vap_name,site_name,usage,source)
|
||||||
|
(unpoller_device_vap_receive_packets_total{site_name=~\"$Site\", name=~\"$AP\"})
|
||||||
|
","format":"table","hide":false,"instant":true,"interval":"","refId":"H"},{"expr":"sum
|
||||||
|
by (bssid,essid,ap_name,name,radio,radio_name,vap_name,site_name,usage,source)
|
||||||
|
(unpoller_device_vap_transmit_packets_total{site_name=~\"$Site\", name=~\"$AP\"})
|
||||||
|
","format":"table","hide":false,"instant":true,"interval":"","refId":"I"}],"timeFrom":null,"title":"Networks
|
||||||
|
/ UAP","transform":"table","transparent":true,"type":"table-old"},{"aliasColors":{"wap-lower":"dark-green","wap-upper":"dark-purple"},"bars":false,"cacheTimeout":null,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":0,"y":26},"hiddenSeries":false,"hideTimeOverride":true,"id":30,"interval":"","legend":{"avg":false,"current":false,"hideEmpty":true,"max":true,"min":false,"show":true,"total":false,"values":true},"lines":true,"linewidth":2,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"unpoller_device_cpu_utilization_ratio{site_name=~\"$Site\",name=~\"$AP\"}","interval":"$Smooth","legendFormat":"{{name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"UAP
|
||||||
|
CPU Usage","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"percentunit","label":"CPU
|
||||||
|
Utilization","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{"wap-lower":"dark-green","wap-upper":"dark-purple"},"bars":false,"cacheTimeout":null,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":12,"y":26},"hiddenSeries":false,"hideTimeOverride":true,"id":47,"interval":"","legend":{"avg":false,"current":false,"hideEmpty":true,"max":true,"min":false,"show":true,"total":false,"values":true},"lines":true,"linewidth":2,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"unpoller_device_memory_utilization_ratio{site_name=~\"$Site\",name=~\"$AP\"}","interval":"$Smooth","legendFormat":"{{name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"UAP
|
||||||
|
Memory Usage","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"percentunit","label":"Memory
|
||||||
|
Utilization","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{"wap-lower
|
||||||
|
load1":"dark-green","wap-lower load15":"dark-blue","wap-upper load1":"dark-purple","wap-upper
|
||||||
|
load15":"dark-yellow"},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":0,"y":33},"hiddenSeries":false,"id":3,"isNew":true,"legend":{"alignAsTable":false,"avg":false,"current":false,"hideEmpty":true,"hideZero":true,"max":true,"min":false,"show":true,"sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[{"alias":"/load15$/","fill":0,"lines":true,"linewidth":6},{}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"unpoller_device_load_average_1{site_name=~\"$Site\",name=~\"$AP\"}","interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
load1","refId":"A"},{"expr":"unpoller_device_load_average_5{site_name=~\"$Site\",name=~\"$AP\"}","hide":true,"interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
load5","refId":"B"},{"expr":"unpoller_device_load_average_15{site_name=~\"$Site\",name=~\"$AP\"}","interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
load15","refId":"C"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"UAP
|
||||||
|
Load Average","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"none","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":12,"y":33},"hiddenSeries":false,"id":46,"isNew":true,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":false,"max":true,"min":true,"rightSide":true,"show":true,"sort":"current","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":3,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":true,"targets":[{"expr":"unpoller_device_stations{site_name=~\"$Site\",name=~\"$AP\"}","interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
users","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Clients
|
||||||
|
/ UAP","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"individual"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"none","label":"","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"Devices
|
||||||
|
TX / RX bytes per second grouped by OUI. RX on negative axis.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":0,"y":40},"hiddenSeries":false,"id":42,"legend":{"alignAsTable":true,"avg":true,"current":true,"hideEmpty":true,"max":true,"min":false,"rightSide":true,"show":true,"sort":"current","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[{"alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
|
||||||
|
(unpoller_client_receive_rate_bytes{site_name=~\"$Site\",ap_name=~\"$AP\"}) by
|
||||||
|
(oui)","interval":"$Smooth","legendFormat":"{{oui}} Rx","refId":"A"},{"expr":"sum
|
||||||
|
(unpoller_client_transmit_rate_bytes{site_name=~\"$Site\",ap_name=~\"$AP\"}) by
|
||||||
|
(oui)","interval":"$Smooth","legendFormat":"{{oui}} Tx","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Wireless
|
||||||
|
Traffic / Vendor","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"bps","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":12,"y":40},"hiddenSeries":false,"id":19,"isNew":true,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":true,"max":true,"min":true,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":true,"steppedLine":false,"targets":[{"expr":"sum
|
||||||
|
(unpoller_device_radio_stations{radio=\"ng\", site_name=~\"$Site\",name=~\"$AP\",
|
||||||
|
station_type=\"guest\"}) by (radio,name)","hide":false,"interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
Guests 2,4GHz","refId":"A"},{"expr":"sum (unpoller_device_radio_stations{radio=\"ng\",
|
||||||
|
site_name=~\"$Site\",name=~\"$AP\", station_type=\"user\"}) by (radio,name)","interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
Users 2.4GHz","refId":"B"},{"expr":"sum (unpoller_device_radio_stations{radio=\"na\",
|
||||||
|
site_name=~\"$Site\",name=~\"$AP\", station_type=\"user\"}) by (radio,name)","hide":false,"interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
Users 5GHz","refId":"C"},{"expr":"sum (unpoller_device_radio_stations{radio=\"na\",
|
||||||
|
site_name=~\"$Site\",name=~\"$AP\", station_type=\"guest\"}) by (radio,name)","hide":false,"interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
Guests 5GHz","refId":"D"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Users
|
||||||
|
& Guests / Radio Band","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"none","label":"","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":0,"y":48},"hiddenSeries":false,"id":59,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":true,"max":true,"min":true,"rightSide":true,"show":true,"sort":"current","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"unpoller_device_vap_average_client_signal{name=~\"$AP\"}","interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
{{vap_name}} {{radio}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Average
|
||||||
|
AP Client Signal","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"dBm","label":"Average
|
||||||
|
Client Signal","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":12,"y":48},"hiddenSeries":false,"id":44,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":true,"max":true,"min":true,"rightSide":true,"show":true,"sort":"current","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"avg(unpoller_client_rssi_db{ap_name=~\"$AP\"})
|
||||||
|
by (ap_name, radio_name)","interval":"$Smooth","legendFormat":"{{ap_name}} {{radio_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Average
|
||||||
|
AP Client RSSI","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":0,"format":"dBm","label":"Average
|
||||||
|
Client RSSI","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":0,"y":56},"hiddenSeries":false,"id":18,"isNew":true,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":true,"max":true,"min":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":2,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"unpoller_device_vap_ccq_ratio{site_name=~\"$Site\",name=~\"$AP\",
|
||||||
|
radio=\"na\"}","interval":"$Smooth","legendFormat":"{{name}} {{vap_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"5
|
||||||
|
GHz Client Connection Quality","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"percentunit","label":"Average
|
||||||
|
CCQ % / VAP","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":12,"y":56},"hiddenSeries":false,"id":58,"isNew":true,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":true,"max":true,"min":true,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":2,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"unpoller_device_vap_ccq_ratio{site_name=~\"$Site\",name=~\"$AP\",
|
||||||
|
radio=\"ng\"}","interval":"1m","legendFormat":"{{name}} {{vap_name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"2.4
|
||||||
|
GHz Client Connection Quality","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"percentunit","label":"Average
|
||||||
|
CCQ % / VAP","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":0,"y":64},"hiddenSeries":false,"id":8,"isNew":true,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"max":true,"min":false,"rightSide":true,"show":true,"sort":"max","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":3,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[{"alias":""}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"unpoller_device_radio_channel_utilization_receive_ratio{radio=\"na\",site_name=~\"$Site\",name=~\"$AP\"}","interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
Rx","refId":"B"},{"expr":"unpoller_device_radio_channel_utilization_transmit_ratio{radio=\"na\",site_name=~\"$Site\",name=~\"$AP\"}","interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
Tx","refId":"C"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"5
|
||||||
|
GHz Channel Utilization","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":1,"format":"percentunit","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"description":"Displays
|
||||||
|
2.4GHz usage.","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":8,"w":12,"x":12,"y":64},"hiddenSeries":false,"id":27,"isNew":true,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"max":true,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":3,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[{"alias":""}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"unpoller_device_radio_channel_utilization_receive_ratio{radio=\"ng\",site_name=~\"$Site\",name=~\"$AP\"}","interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
{{radio}} Rx","refId":"B"},{"expr":"unpoller_device_radio_channel_utilization_transmit_ratio{radio=\"ng\",site_name=~\"$Site\",name=~\"$AP\"}","interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
{{radio}} Tx","refId":"C"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"2.4
|
||||||
|
GHz Channel Utilization","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":null,"format":"percentunit","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"RX
|
||||||
|
is on the negative Axis.","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":0,"y":72},"hiddenSeries":false,"id":20,"interval":"","isNew":true,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":false,"max":true,"min":false,"rightSide":true,"show":true,"sort":"current","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[{"alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
|
||||||
|
(rate(unpoller_device_vap_transmit_bytes_total{radio=\"na\",site_name=~\"$Site\",name=~\"$AP\"}[5m]))
|
||||||
|
by (name)","interval":"$Smooth","legendFormat":"{{name}} Tx","refId":"A"},{"expr":"sum
|
||||||
|
(rate(unpoller_device_vap_receive_bytes_total{radio=\"na\",site_name=~\"$Site\",name=~\"$AP\"}[5m]))
|
||||||
|
by (name)","interval":"$Smooth","legendFormat":"{{name}} Rx","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"5
|
||||||
|
GHz Traffic","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"bps","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"pps","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"RX
|
||||||
|
is on the negative Axis.","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":12,"y":72},"hiddenSeries":false,"id":24,"isNew":true,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"max":true,"min":false,"rightSide":true,"show":true,"sort":"current","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[{"alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
|
||||||
|
(rate(unpoller_device_vap_transmit_bytes_total{radio=\"ng\",site_name=~\"$Site\",name=~\"$AP\"}[5m]))
|
||||||
|
by (name)","interval":"$Smooth","legendFormat":"{{name}} Tx","refId":"A"},{"expr":"sum
|
||||||
|
(rate(unpoller_device_vap_receive_bytes_total{radio=\"ng\",site_name=~\"$Site\",name=~\"$AP\"}[5m]))
|
||||||
|
by (name)","interval":"$Smooth","legendFormat":"{{name}} Rx","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"2.4
|
||||||
|
GHz Traffic","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"bps","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"pps","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"description":"PPS
|
||||||
|
on the na band. In is on the negative Axis.","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":0,"y":79},"hiddenSeries":false,"id":22,"isNew":true,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"max":true,"min":false,"rightSide":true,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[{"alias":"/In$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
|
||||||
|
(rate(unpoller_device_vap_transmit_packets_total{radio=\"na\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
|
||||||
|
by (name)","hide":false,"interval":"$Smooth","legendFormat":"{{name}} Out","refId":"A"},{"expr":"sum
|
||||||
|
(rate(unpoller_device_vap_receive_packets_total{radio=\"na\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
|
||||||
|
by (name)","interval":"$Smooth","legendFormat":"{{name}} In","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"5
|
||||||
|
GHz Packets","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":1,"format":"pps","label":"PPS","logBase":1,"max":null,"min":null,"show":true},{"format":"pps","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"description":"PPS
|
||||||
|
on the ng band calculated in 30 second buckets. In is on the negative Axis.","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":12,"y":79},"hiddenSeries":false,"id":25,"isNew":true,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"max":true,"min":false,"rightSide":true,"show":true,"sort":"max","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[{"alias":"/In$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
|
||||||
|
(rate(unpoller_device_vap_transmit_packets_total{radio=\"ng\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
|
||||||
|
by (name)","interval":"$Smooth","legendFormat":"{{name}} Out","refId":"A"},{"expr":"sum
|
||||||
|
(rate(unpoller_device_vap_receive_packets_total{radio=\"ng\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
|
||||||
|
by (name)","interval":"$Smooth","legendFormat":"{{name}} In","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"2.4
|
||||||
|
GHz Packets","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":1,"format":"pps","label":"PPS","logBase":1,"max":null,"min":null,"show":true},{"format":"pps","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"description":"Visualize
|
||||||
|
packet errors (several types) per second in the 5GHz band.","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":0,"y":86},"hiddenSeries":false,"id":57,"isNew":true,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"max":true,"min":false,"rightSide":true,"show":true,"sort":"max","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"connected","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[{"alias":"/In$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
|
||||||
|
(rate(unpoller_device_vap_receive_dropped_total{radio=\"na\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
|
||||||
|
by (name)","interval":"$Smooth","legendFormat":"{{name}} Drops Rx","refId":"A"},{"expr":"sum
|
||||||
|
(rate(unpoller_device_vap_transmit_dropped_total{radio=\"na\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
|
||||||
|
by (name)","interval":"$Smooth","legendFormat":"{{name}} Drops Tx","refId":"B"},{"expr":"sum
|
||||||
|
(rate(unpoller_device_vap_receive_errors_total{radio=\"na\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
|
||||||
|
by (name)","interval":"$Smooth","legendFormat":"{{name}} Errors Rx","refId":"C"},{"expr":"sum
|
||||||
|
(rate(unpoller_device_vap_transmit_errors_total{radio=\"na\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
|
||||||
|
by (name)","interval":"$Smooth","legendFormat":"{{name}} Errors Tx","refId":"D"},{"expr":"sum
|
||||||
|
(rate(unpoller_device_vap_receive_crypts_total{radio=\"na\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
|
||||||
|
by (name)","interval":"$Smooth","legendFormat":"{{name}} Crypts Rx","refId":"E"},{"expr":"sum
|
||||||
|
(rate(unpoller_device_vap_receive_frags_total{radio=\"na\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
|
||||||
|
by (name)","interval":"$Smooth","legendFormat":"{{name}} Frags Rx","refId":"F"},{"expr":"sum
|
||||||
|
(rate(unpoller_device_vap_receive_nwids_total{radio=\"na\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
|
||||||
|
by (name)","interval":"$Smooth","legendFormat":"{{name}} Nwids Rx","refId":"G"},{"expr":"sum
|
||||||
|
(rate(unpoller_device_vap_transmit_retries_total{radio=\"na\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
|
||||||
|
by (name)","interval":"$Smooth","legendFormat":"{{name}} Retries Tx","refId":"H"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"5
|
||||||
|
GHz Drops/Errors","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":1,"format":"pps","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"description":"In
|
||||||
|
is on the negative axis.","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":12,"y":86},"hiddenSeries":false,"id":26,"isNew":true,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"max":true,"min":false,"rightSide":true,"show":true,"sort":"max","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[{"alias":"/In$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
|
||||||
|
(rate(unpoller_device_vap_receive_dropped_total{radio=\"ng\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
|
||||||
|
by (name)","interval":"$Smooth","legendFormat":"{{name}} Drops Rx","refId":"A"},{"expr":"sum
|
||||||
|
(rate(unpoller_device_vap_transmit_dropped_total{radio=\"ng\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
|
||||||
|
by (name)","interval":"$Smooth","legendFormat":"{{name}} Drops Tx","refId":"B"},{"expr":"sum
|
||||||
|
(rate(unpoller_device_vap_receive_errors_total{radio=\"ng\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
|
||||||
|
by (name)","interval":"$Smooth","legendFormat":"{{name}} Errors Rx","refId":"C"},{"expr":"sum
|
||||||
|
(rate(unpoller_device_vap_transmit_errors_total{radio=\"ng\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
|
||||||
|
by (name)","interval":"$Smooth","legendFormat":"{{name}} Errors Tx","refId":"D"},{"expr":"sum
|
||||||
|
(rate(unpoller_device_vap_receive_crypts_total{radio=\"ng\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
|
||||||
|
by (name)","interval":"$Smooth","legendFormat":"{{name}} Crypts Rx","refId":"E"},{"expr":"sum
|
||||||
|
(rate(unpoller_device_vap_receive_frags_total{radio=\"ng\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
|
||||||
|
by (name)","interval":"$Smooth","legendFormat":"{{name}} Frags Rx","refId":"F"},{"expr":"sum
|
||||||
|
(rate(unpoller_device_vap_receive_nwids_total{radio=\"ng\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
|
||||||
|
by (name)","interval":"$Smooth","legendFormat":"{{name}} Nwids Rx","refId":"G"},{"expr":"sum
|
||||||
|
(rate(unpoller_device_vap_transmit_retries_total{radio=\"ng\",site_name=~\"$Site\",name=~\"$AP\"}[$__interval]))
|
||||||
|
by (name)","interval":"$Smooth","legendFormat":"{{name}} Retries Tx","refId":"H"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"2.4
|
||||||
|
GHz Drops/Errors","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":1,"format":"pps","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}}],"refresh":"1m","schemaVersion":25,"style":"dark","tags":["unifi","uap","unifi-poller"],"templating":{"list":[{"allValue":".*","current":{},"datasource":"VictoriaMetrics","definition":"label_values(unpoller_device_info{type=\"uap\"},source)","hide":2,"includeAll":true,"label":"","multi":true,"name":"Controller","options":[],"query":"label_values(unpoller_device_info{type=\"uap\"},source)","refresh":1,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":null,"tags":[],"tagsQuery":null,"type":"query","useTags":false},{"allValue":"","current":{},"datasource":"VictoriaMetrics","definition":"label_values(unpoller_device_info{source=~\"$Controller\",
|
||||||
|
type=\"uap\"},site_name)","hide":0,"includeAll":true,"label":"","multi":true,"name":"Site","options":[],"query":"label_values(unpoller_device_info{source=~\"$Controller\",
|
||||||
|
type=\"uap\"},site_name)","refresh":1,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":null,"tags":[],"tagsQuery":null,"type":"query","useTags":false},{"allValue":"","current":{},"datasource":"VictoriaMetrics","definition":"label_values(unpoller_device_info{site_name=~\"$Site\",
|
||||||
|
type=~\"uap|udm\",model!=\"UDMPRO\"},name)","hide":0,"includeAll":true,"label":"UniFi
|
||||||
|
AP:","multi":true,"name":"AP","options":[],"query":"label_values(unpoller_device_info{site_name=~\"$Site\",
|
||||||
|
type=~\"uap|udm\",model!=\"UDMPRO\"},name)","refresh":1,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":null,"tags":[],"tagsQuery":null,"type":"query","useTags":false},{"allValue":null,"current":{"selected":true,"tags":[],"text":"2m","value":"2m"},"hide":0,"includeAll":false,"label":null,"multi":false,"name":"Smooth","options":[{"selected":false,"text":"30s","value":"30s"},{"selected":false,"text":"1m","value":"1m"},{"selected":true,"text":"2m","value":"2m"},{"selected":false,"text":"5m","value":"5m"},{"selected":false,"text":"10m","value":"10m"},{"selected":false,"text":"15m","value":"15m"},{"selected":false,"text":"30m","value":"30m"},{"selected":false,"text":"1h","value":"1h"}],"query":"30s,1m,2m,5m,10m,15m,30m,1h","skipUrlSync":false,"type":"custom"}]},"time":{"from":"now-3h","to":"now"},"timepicker":{"nowDelay":"","refresh_intervals":["30s","1m","5m","15m","30m","1h","2h"],"time_options":["5m","15m","1h","6h","12h","24h","2d","7d","30d"]},"timezone":"browser","title":"UniFi-Poller:
|
||||||
|
UAP Insights - Prometheus","uid":"g5wFWqxZk","version":24}'
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/part-of: unpoller
|
||||||
|
grafana_dashboard: "1"
|
||||||
|
name: unpoller-dashboard-uap-insights
|
||||||
|
namespace: monitoring
|
||||||
@@ -0,0 +1,181 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
data:
|
||||||
|
usg-insights.json: '{"annotations":{"list":[{"builtIn":1,"datasource":"-- Grafana
|
||||||
|
--","enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 1)","limit":100,"name":"Annotations
|
||||||
|
& Alerts","showIn":0,"type":"dashboard"}]},"description":"UniFi Poller v2.0.1
|
||||||
|
Displays detailed information for security gateways in a UniFi network using Prometheus.","editable":true,"gnetId":11313,"graphTooltip":2,"id":null,"iteration":1592125878109,"links":[{"asDropdown":true,"icon":"external
|
||||||
|
link","includeVars":false,"keepTime":true,"tags":["unifi-poller"],"title":"UniFi
|
||||||
|
Poller","type":"dashboards"},{"icon":"question","tags":[],"title":"Help","type":"link","url":"https://golift.io/unifi-poller/issues"},{"icon":"doc","tags":[],"title":"Wiki","type":"link","url":"https://golift.io/unifi-poller/wiki"},{"icon":"bolt","tags":[],"title":"Discord","type":"link","url":"https://discord.gg/KnyKYt2"}],"panels":[{"columns":[],"datasource":"VictoriaMetrics","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fontSize":"100%","gridPos":{"h":5,"w":24,"x":0,"y":0},"id":60,"isNew":true,"links":[],"pageSize":null,"scroll":false,"showHeader":true,"sort":{"col":11,"desc":true},"styles":[{"$$hashKey":"object:1420","alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"pattern":"Time","thresholds":[],"type":"hidden","unit":"short"},{"$$hashKey":"object:1421","alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"pattern":"Value #A","thresholds":[],"type":"hidden","unit":"dtdurations"},{"$$hashKey":"object:1422","alias":"Name","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"link":false,"linkTargetBlank":true,"linkUrl":"http:","pattern":"name","preserveFormat":false,"sanitize":false,"thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:1424","alias":"Model","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"pattern":"model","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:1425","alias":"Device
|
||||||
|
MAC","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
|
||||||
|
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"pattern":"mac","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:1426","alias":"Unifi
|
||||||
|
Serial #","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
|
||||||
|
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"pattern":"serial","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:1427","alias":"Site","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"pattern":"site_name","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:1428","alias":"Version","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"pattern":"version","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:1432","alias":"Address","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"ip","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:1433","alias":"Data","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"Value #C","thresholds":[],"type":"number","unit":"decbytes"},{"$$hashKey":"object:1434","alias":"Uptime","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"Value #B","thresholds":[],"type":"number","unit":"s"},{"$$hashKey":"object:1435","alias":"Controller","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"source","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:1436","alias":"Type","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"type","thresholds":[],"type":"string","unit":"short"}],"targets":[{"expr":"sum
|
||||||
|
by (ip,mac,model,name,serial,site_name,type,version,source) (unpoller_device_info{site_name=~\"$Site\",
|
||||||
|
name=~\"$Gateway\"})","format":"table","instant":true,"interval":"","legendFormat":"","refId":"A"},{"expr":"sum
|
||||||
|
by (ip,mac,model,name,serial,site_name,type,version,source) (unpoller_device_uptime_seconds{site_name=~\"$Site\",
|
||||||
|
name=~\"$Gateway\"})","format":"table","instant":true,"interval":"","legendFormat":"","refId":"B"},{"expr":"sum
|
||||||
|
by (ip,mac,model,name,serial,site_name,type,version,source) (unpoller_device_bytes_total{site_name=~\"$Site\",
|
||||||
|
name=~\"$Gateway\"})","format":"table","instant":true,"interval":"","legendFormat":"","refId":"C"}],"timeFrom":null,"title":"Gateway
|
||||||
|
Details","transform":"table","type":"table-old"},{"collapsed":true,"datasource":"${DS_UNIFI_POLLER}","gridPos":{"h":1,"w":24,"x":0,"y":5},"id":50,"panels":[{"cacheTimeout":null,"datasource":"VictoriaMetrics","description":"","fieldConfig":{"defaults":{"custom":{},"mappings":[{"id":0,"op":"=","text":"N/A","type":1,"value":"null"}],"min":0,"nullValueMode":"connected","thresholds":{"mode":"absolute","steps":[{"color":"dark-purple","value":null}]},"unit":"s"},"overrides":[]},"gridPos":{"h":3,"w":4,"x":0,"y":6},"hideTimeOverride":false,"id":64,"links":[],"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["mean"],"fields":"","values":false}},"pluginVersion":"7.0.3","scopedVars":{"Site":{"selected":false}},"targets":[{"expr":"unpoller_device_uptime_seconds{site_name=~\"$Site\",
|
||||||
|
name=~\"$Gateway\"}","instant":false,"interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
Uptime","refId":"B"}],"timeFrom":null,"timeShift":null,"title":"","transparent":true,"type":"stat"},{"cacheTimeout":null,"datasource":"VictoriaMetrics","description":"","fieldConfig":{"defaults":{"custom":{},"mappings":[{"id":0,"op":"=","text":"N/A","type":1,"value":"null"}],"max":100,"min":0,"nullValueMode":"connected","thresholds":{"mode":"absolute","steps":[{"color":"dark-purple","value":null}]},"unit":"Mbits"},"overrides":[]},"gridPos":{"h":9,"w":6,"x":4,"y":6},"hideTimeOverride":false,"id":44,"links":[],"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false}},"pluginVersion":"7.0.3","scopedVars":{"Site":{"selected":false}},"targets":[{"expr":"unpoller_device_speedtest_upload{site_name=~\"$Site\",
|
||||||
|
name=~\"$Gateway\"}","instant":false,"interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
Upload","refId":"A"},{"expr":"unpoller_device_speedtest_download{site_name=~\"$Site\",
|
||||||
|
name=~\"$Gateway\"}","instant":false,"interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
Download","refId":"B"}],"timeFrom":null,"timeShift":null,"title":"Speed Test","transparent":true,"type":"stat"},{"cacheTimeout":null,"datasource":"VictoriaMetrics","description":"","fieldConfig":{"defaults":{"custom":{},"displayName":"${__series.name}","links":[],"mappings":[{"id":0,"op":"=","text":"N/A","type":1,"value":"null"}],"nullValueMode":"connected","thresholds":{"mode":"absolute","steps":[{"color":"dark-purple","value":null}]},"unit":"s"},"overrides":[]},"gridPos":{"h":9,"w":9,"x":10,"y":6},"hideTimeOverride":false,"id":63,"links":[],"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false}},"pluginVersion":"7.0.3","scopedVars":{"Site":{"selected":false}},"targets":[{"expr":"sum
|
||||||
|
by (name) (unpoller_device_speedtest_runtime_seconds{site_name=~\"$Site\", name=~\"$Gateway\"})","instant":false,"interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
Test Time","refId":"A"},{"expr":"sum by (name) (unpoller_device_uplink_latency_seconds{site_name=~\"$Site\",
|
||||||
|
name=~\"$Gateway\"})","instant":false,"interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
Uplink Latency","refId":"C"}],"timeFrom":null,"timeShift":null,"title":"","transparent":true,"type":"stat"},{"cacheTimeout":null,"datasource":"VictoriaMetrics","fieldConfig":{"defaults":{"custom":{},"mappings":[{"id":0,"op":"=","text":"N/A","type":1,"value":"null"}],"nullValueMode":"connected","thresholds":{"mode":"absolute","steps":[{"color":"dark-purple","value":null},{"color":"rgba(237,
|
||||||
|
129, 40, 0.89)","value":50},{"color":"#d44a3a","value":80}]},"unit":"percentunit"},"overrides":[]},"gridPos":{"h":9,"w":5,"x":19,"y":6},"hideTimeOverride":false,"id":37,"links":[],"options":{"colorMode":"value","graphMode":"area","justifyMode":"auto","orientation":"horizontal","reduceOptions":{"calcs":["lastNotNull"],"fields":"","values":false}},"pluginVersion":"7.0.3","scopedVars":{"Site":{"selected":false}},"targets":[{"expr":"unpoller_device_cpu_utilization_ratio{site_name=~\"$Site\",
|
||||||
|
name=~\"$Gateway\"}","instant":false,"interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
CPU %","refId":"A"},{"expr":"unpoller_device_memory_utilization_ratio{site_name=~\"$Site\",
|
||||||
|
name=~\"$Gateway\"}","instant":false,"interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
RAM %","refId":"B"}],"timeFrom":null,"timeShift":null,"title":"","transparent":true,"type":"stat"},{"cacheTimeout":null,"colorBackground":false,"colorPostfix":true,"colorValue":true,"colors":["#FA6400","rgba(237,
|
||||||
|
129, 40, 0.89)","#d44a3a"],"datasource":"VictoriaMetrics","decimals":0,"description":"WAN
|
||||||
|
Port Speed","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":true,"thresholdMarkers":true},"gridPos":{"h":2,"w":2,"x":0,"y":9},"hideTimeOverride":true,"id":46,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value
|
||||||
|
to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"postfix":"M","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"scopedVars":{"Site":{"selected":false}},"sparkline":{"fillColor":"rgba(31,
|
||||||
|
118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":false},"tableColumn":"unpoller_device_uplink_speed_mbps{instance=\"UniFi-Poller:9130\",
|
||||||
|
job=\"unpoller\", name=\"gateway\", port=\"all\", site_name=\"Home (default)\",
|
||||||
|
source=\"https://unifi-controller:8443\"}","targets":[{"expr":"unpoller_device_uplink_speed_mbps{site_name=~\"$Site\",
|
||||||
|
name=~\"$Gateway\"}","instant":true,"refId":"A"}],"thresholds":"","timeFrom":null,"title":"Uplink","transparent":true,"type":"singlestat","valueFontSize":"50%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#5794F2","rgba(237,
|
||||||
|
129, 40, 0.89)","#d44a3a"],"datasource":"VictoriaMetrics","decimals":0,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":true,"thresholdMarkers":true},"gridPos":{"h":2,"w":2,"x":2,"y":9},"hideTimeOverride":true,"id":52,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value
|
||||||
|
to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"scopedVars":{"Site":{"selected":false}},"sparkline":{"fillColor":"rgba(31,
|
||||||
|
118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":true},"tableColumn":"unpoller_device_stations{instance=\"UniFi-Poller:9130\",
|
||||||
|
job=\"unpoller\", name=\"gateway\", site_name=\"Home (default)\", source=\"https://unifi-controller:8443\",
|
||||||
|
station_type=\"desktop\", type=\"ugw\"}","targets":[{"expr":"unpoller_device_stations{site_name=~\"$Site\",
|
||||||
|
name=~\"$Gateway\",station_type=\"desktop\"}","instant":true,"interval":"$Smooth","refId":"A"}],"thresholds":"","timeFrom":null,"title":"Desktop","transparent":true,"type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#5794F2","rgba(237,
|
||||||
|
129, 40, 0.89)","#d44a3a"],"datasource":"VictoriaMetrics","decimals":0,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":true,"thresholdMarkers":true},"gridPos":{"h":2,"w":2,"x":0,"y":11},"hideTimeOverride":true,"id":38,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value
|
||||||
|
to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"scopedVars":{"Site":{"selected":false}},"sparkline":{"fillColor":"rgba(31,
|
||||||
|
118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":true},"tableColumn":"unpoller_device_stations{instance=\"UniFi-Poller:9130\",
|
||||||
|
job=\"unpoller\", name=\"gateway\", site_name=\"Home (default)\", source=\"https://unifi-controller:8443\",
|
||||||
|
station_type=\"user\", type=\"ugw\"}","targets":[{"expr":"unpoller_device_stations{site_name=~\"$Site\",
|
||||||
|
name=~\"$Gateway\",station_type=\"user\"}","instant":true,"refId":"A"}],"thresholds":"","timeFrom":null,"title":"Users","transparent":true,"type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#5794F2","rgba(237,
|
||||||
|
129, 40, 0.89)","#d44a3a"],"datasource":"VictoriaMetrics","decimals":0,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":true,"thresholdMarkers":true},"gridPos":{"h":2,"w":2,"x":2,"y":11},"hideTimeOverride":true,"id":53,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value
|
||||||
|
to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"scopedVars":{"Site":{"selected":false}},"sparkline":{"fillColor":"rgba(31,
|
||||||
|
118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":true},"tableColumn":"unpoller_device_stations{instance=\"UniFi-Poller:9130\",
|
||||||
|
job=\"unpoller\", name=\"gateway\", site_name=\"Home (default)\", source=\"https://unifi-controller:8443\",
|
||||||
|
station_type=\"mobile\", type=\"ugw\"}","targets":[{"expr":"unpoller_device_stations{site_name=~\"$Site\",
|
||||||
|
name=~\"$Gateway\",station_type=\"mobile\"}","instant":true,"interval":"$Smooth","refId":"A"}],"thresholds":"","timeFrom":null,"title":"Mobile","transparent":true,"type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#FADE2A","rgba(237,
|
||||||
|
129, 40, 0.89)","#d44a3a"],"datasource":"VictoriaMetrics","decimals":0,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":true,"thresholdMarkers":true},"gridPos":{"h":2,"w":2,"x":0,"y":13},"hideTimeOverride":true,"id":39,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value
|
||||||
|
to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"scopedVars":{"Site":{"selected":false}},"sparkline":{"fillColor":"rgba(31,
|
||||||
|
118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":true},"tableColumn":"unpoller_device_stations{instance=\"UniFi-Poller:9130\",
|
||||||
|
job=\"unpoller\", name=\"gateway\", site_name=\"Home (default)\", source=\"https://unifi-controller:8443\",
|
||||||
|
station_type=\"guest\", type=\"ugw\"}","targets":[{"expr":"unpoller_device_stations{site_name=~\"$Site\",
|
||||||
|
name=~\"$Gateway\",station_type=\"guest\"}","instant":true,"refId":"A"}],"thresholds":"","timeFrom":null,"title":"Guests","transparent":true,"type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"cacheTimeout":null,"colorBackground":false,"colorValue":true,"colors":["#5794F2","rgba(237,
|
||||||
|
129, 40, 0.89)","#d44a3a"],"datasource":"VictoriaMetrics","decimals":0,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"format":"none","gauge":{"maxValue":100,"minValue":0,"show":false,"thresholdLabels":true,"thresholdMarkers":true},"gridPos":{"h":2,"w":2,"x":2,"y":13},"hideTimeOverride":true,"id":54,"interval":null,"links":[],"mappingType":1,"mappingTypes":[{"name":"value
|
||||||
|
to text","value":1},{"name":"range to text","value":2}],"maxDataPoints":100,"nullPointMode":"connected","nullText":null,"postfix":"","postfixFontSize":"50%","prefix":"","prefixFontSize":"50%","rangeMaps":[{"from":"null","text":"N/A","to":"null"}],"scopedVars":{"Site":{"selected":false}},"sparkline":{"fillColor":"rgba(31,
|
||||||
|
118, 189, 0.18)","full":false,"lineColor":"rgb(31, 120, 193)","show":true},"tableColumn":"unpoller_device_stations{instance=\"UniFi-Poller:9130\",
|
||||||
|
job=\"unpoller\", name=\"gateway\", site_name=\"Home (default)\", source=\"https://unifi-controller:8443\",
|
||||||
|
station_type=\"handheld\", type=\"ugw\"}","targets":[{"expr":"unpoller_device_stations{site_name=~\"$Site\",
|
||||||
|
name=~\"$Gateway\",station_type=\"handheld\"}","instant":true,"interval":"$Smooth","refId":"A"}],"thresholds":"","timeFrom":null,"title":"Handheld","transparent":true,"type":"singlestat","valueFontSize":"80%","valueMaps":[{"op":"=","text":"N/A","value":"null"}],"valueName":"current"},{"aliasColors":{"gateway
|
||||||
|
load1":"dark-purple","gateway load15":"dark-green"},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":10,"w":24,"x":0,"y":15},"hiddenSeries":false,"id":56,"isNew":true,"legend":{"alignAsTable":false,"avg":false,"current":false,"max":true,"min":false,"rightSide":false,"show":true,"sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","scopedVars":{"Site":{"selected":false}},"seriesOverrides":[{"alias":"/load15$/","fill":0,"lines":true,"linewidth":6},{}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"unpoller_device_load_average_1{site_name=~\"$Site\",
|
||||||
|
name=~\"$Gateway\"}","interval":"$Smooth","legendFormat":"{{name}} load1","refId":"A"},{"expr":"unpoller_device_load_average_5{site_name=~\"$Site\",
|
||||||
|
name=~\"$Gateway\"}","hide":true,"interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
load5","refId":"B"},{"expr":"unpoller_device_load_average_15{site_name=~\"$Site\",
|
||||||
|
name=~\"$Gateway\"}","interval":"$Smooth","legendFormat":"{{name}} load15","refId":"C"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"USG
|
||||||
|
Load Average","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"none","label":null,"logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{"gateway
|
||||||
|
wan Bytes Rx":"dark-green","gateway wan Bytes Tx":"dark-purple"},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"Spikes
|
||||||
|
on this graph that are missing from the LAN graph indicate gateway-originated
|
||||||
|
traffic, like a scheduled speed test. Rx is on the negative axis.","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":11,"w":12,"x":0,"y":25},"hiddenSeries":false,"id":3,"isNew":true,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"max":true,"min":false,"show":true,"sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":3,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","scopedVars":{"Site":{"selected":false}},"seriesOverrides":[{"alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"rate(unpoller_device_wan_receive_bytes_total{site_name=~\"$Site\",
|
||||||
|
name=~\"$Gateway\"}[$__interval])","interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
{{port}} Bytes Rx","refId":"A"},{"expr":"rate(unpoller_device_wan_transmit_bytes_total{site_name=~\"$Site\",
|
||||||
|
name=~\"$Gateway\"}[$__interval])","interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
{{port}} Bytes Tx","refId":"B"},{"expr":"unpoller_device_wan_transmit_rate_bytes{site_name=~\"$Site\",
|
||||||
|
name=~\"$Gateway\"}","hide":true,"interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
{{port}} Bytes Tx","refId":"C"},{"expr":"unpoller_device_wan_receive_rate_bytes{site_name=~\"$Site\",
|
||||||
|
name=~\"$Gateway\"}","hide":true,"interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
{{port}} Bytes Rx","refId":"D"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"WAN
|
||||||
|
Throughput","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"Bps","label":"bytes
|
||||||
|
/ second","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{"gateway
|
||||||
|
lan Bytes Rx":"dark-green","gateway lan Bytes Tx":"dark-purple"},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"Spikes
|
||||||
|
on this graph that do not appear on the WAN graph indicate inter-VLAN-routing.
|
||||||
|
Rx is on the negative axis.","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":11,"w":12,"x":12,"y":25},"hiddenSeries":false,"id":35,"isNew":true,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"max":true,"min":false,"show":true,"sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":3,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","scopedVars":{"Site":{"selected":false}},"seriesOverrides":[{"alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"rate(unpoller_device_lan_receive_bytes_total{site_name=~\"$Site\",
|
||||||
|
name=~\"$Gateway\"}[$__interval])","interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
{{port}} Bytes Rx","refId":"A"},{"expr":"rate(unpoller_device_lan_transmit_bytes_total{site_name=~\"$Site\",
|
||||||
|
name=~\"$Gateway\"}[$__interval])","interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
{{port}} Bytes Tx","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"LAN
|
||||||
|
Throughput","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"Bps","label":"bytes
|
||||||
|
/ second","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{"gateway
|
||||||
|
wan Packets Rx":"dark-green","gateway wan Packets Tx":"dark-purple"},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":null,"description":"PPS
|
||||||
|
on the WAN interface. Rx is on the negative axis.","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":9,"w":12,"x":0,"y":36},"hiddenSeries":false,"id":36,"isNew":true,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"max":true,"min":false,"rightSide":false,"show":true,"sort":"max","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":3,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","scopedVars":{"Site":{"selected":false}},"seriesOverrides":[{"alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"rate(unpoller_device_wan_receive_packets_total{site_name=~\"$Site\",
|
||||||
|
name=~\"$Gateway\"}[$__interval])","interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
{{port}} Packets Rx","refId":"A"},{"expr":"rate(unpoller_device_wan_transmit_packets_total{site_name=~\"$Site\",
|
||||||
|
name=~\"$Gateway\"}[$__interval])","interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
{{port}} Packets Tx","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"WAN
|
||||||
|
Packets","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":null,"format":"pps","label":"packets
|
||||||
|
/ second","logBase":1,"max":null,"min":null,"show":true},{"format":"pps","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{"gateway
|
||||||
|
lan Packets Rx":"dark-green","gateway lan Packets Tx":"dark-purple"},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":null,"description":"PPS
|
||||||
|
on the LAN interface. Rx is on the negative axis.","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":9,"w":12,"x":12,"y":36},"hiddenSeries":false,"id":25,"isNew":true,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"max":true,"min":false,"rightSide":false,"show":true,"sort":"max","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":3,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","scopedVars":{"Site":{"selected":false}},"seriesOverrides":[{"alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"rate(unpoller_device_lan_receive_packets_total{site_name=~\"$Site\",
|
||||||
|
name=~\"$Gateway\"}[$__interval])","interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
{{port}} Packets Rx","refId":"A"},{"expr":"rate(unpoller_device_lan_transmit_packets_total{site_name=~\"$Site\",
|
||||||
|
name=~\"$Gateway\"}[$__interval])","interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
{{port}} Packets Tx","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"LAN
|
||||||
|
Packets","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":null,"format":"pps","label":"packets
|
||||||
|
/ second","logBase":1,"max":null,"min":null,"show":true},{"format":"pps","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{"gateway
|
||||||
|
wan Multicast Rx":"dark-green","gateway wan Broadcast Rx":"dark-blue","gateway
|
||||||
|
wan Broadcast Tx":"dark-yellow","gateway wan Multicast Tx":"dark-purple"},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":2,"description":"","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":2,"fillGradient":0,"gridPos":{"h":8,"w":24,"x":0,"y":45},"hiddenSeries":false,"id":47,"isNew":true,"legend":{"alignAsTable":true,"avg":true,"current":true,"hideEmpty":true,"max":true,"min":false,"rightSide":true,"show":true,"sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":3,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","scopedVars":{"Site":{"selected":false}},"seriesOverrides":[{"alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"rate(unpoller_device_wan_transmit_broadcast_total{site_name=~\"$Site\",
|
||||||
|
name=~\"$Gateway\"}[$__interval])","interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
{{port}} Broadcast Tx","refId":"D"},{"expr":"rate(unpoller_device_wan_receive_broadcast_total{site_name=~\"$Site\",
|
||||||
|
name=~\"$Gateway\"}[$__interval])","interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
{{port}} Broadcast Rx","refId":"C"},{"expr":"rate(unpoller_device_wan_receive_multicast_total{site_name=~\"$Site\",
|
||||||
|
name=~\"$Gateway\"}[$__interval])","interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
{{port}} Multicast Rx","refId":"A"},{"expr":"rate(unpoller_device_wan_transmit_multicast_total{site_name=~\"$Site\",
|
||||||
|
name=~\"$Gateway\"}[$__interval])","interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
{{port}} Multicast Tx","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"WAN
|
||||||
|
Multicast & Broadcast","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":null,"format":"pps","label":"packets
|
||||||
|
/ second","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{"gateway
|
||||||
|
wan Drops Rx":"dark-green","gateway wan Drops Tx":"dark-purple","gateway wan Errors
|
||||||
|
Rx":"dark-blue","gateway wan Errors Tx":"dark-yellow"},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":null,"description":"May
|
||||||
|
show problems with your WAN interface. Rx on negative axis.","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":2,"fillGradient":0,"gridPos":{"h":9,"w":12,"x":0,"y":53},"hiddenSeries":false,"id":48,"isNew":true,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"max":true,"min":false,"rightSide":false,"show":true,"sort":null,"sortDesc":null,"total":true,"values":true},"lines":true,"linewidth":2,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","scopedVars":{"Site":{"selected":false}},"seriesOverrides":[{"alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"rate(unpoller_device_wan_transmit_dropped_total{site_name=~\"$Site\",
|
||||||
|
name=~\"$Gateway\"}[$__interval])","interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
{{port}} Drops Tx","refId":"A"},{"expr":"rate(unpoller_device_wan_receive_dropped_total{site_name=~\"$Site\",
|
||||||
|
name=~\"$Gateway\"}[$__interval])","interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
{{port}} Drops Rx","refId":"B"},{"expr":"rate(unpoller_device_wan_transmit_errors_total{site_name=~\"$Site\",
|
||||||
|
name=~\"$Gateway\"}[$__interval])","interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
{{port}} Errors Tx","refId":"C"},{"expr":"rate(unpoller_device_wan_receive_errors_total{site_name=~\"$Site\",
|
||||||
|
name=~\"$Gateway\"}[$__interval])","interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
{{port}} Errors Rx","refId":"D"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"WAN
|
||||||
|
Drops & Errors","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":null,"format":"pps","label":"packets
|
||||||
|
/ second","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{"gateway
|
||||||
|
lan Dropped Rx":"dark-green"},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":null,"description":"","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":9,"w":12,"x":12,"y":53},"hiddenSeries":false,"id":51,"isNew":true,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"max":true,"min":false,"rightSide":false,"show":true,"sort":"max","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":3,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","scopedVars":{"Site":{"selected":false}},"seriesOverrides":[{"alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"rate(unpoller_device_lan_receive_dropped_total{site_name=~\"$Site\",
|
||||||
|
name=~\"$Gateway\"}[$__interval])","hide":false,"interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
{{port}} Dropped Rx","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"LAN
|
||||||
|
Drops","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":null,"format":"pps","label":"packets
|
||||||
|
/ second","logBase":1,"max":null,"min":null,"show":true},{"format":"pps","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}}],"repeat":"Site","title":"Site:
|
||||||
|
$Site","type":"row"},{"collapsed":true,"datasource":"${DS_UNIFI_POLLER}","gridPos":{"h":1,"w":24,"x":0,"y":6},"id":62,"panels":[],"title":"Purposely
|
||||||
|
Empty Row","type":"row"}],"refresh":"1m","schemaVersion":25,"style":"dark","tags":["unifi","unifi-poller","usg"],"templating":{"list":[{"allValue":".*","current":{},"datasource":"VictoriaMetrics","definition":"label_values(unpoller_device_info{type=~\"udm|usg|ugw\"},source)","hide":2,"includeAll":true,"label":"","multi":true,"name":"Controller","options":[],"query":"label_values(unpoller_device_info{type=~\"udm|usg|ugw\"},source)","refresh":1,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":null,"tags":[],"tagsQuery":null,"type":"query","useTags":false},{"allValue":"","current":{},"datasource":"VictoriaMetrics","definition":"label_values(unpoller_device_info{source=~\"$Controller\",
|
||||||
|
type=~\"udm|usg|ugw\"},site_name)","hide":0,"includeAll":true,"label":"","multi":true,"name":"Site","options":[],"query":"label_values(unpoller_device_info{source=~\"$Controller\",
|
||||||
|
type=~\"udm|usg|ugw\"},site_name)","refresh":1,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":null,"tags":[],"tagsQuery":null,"type":"query","useTags":false},{"allValue":"","current":{},"datasource":"VictoriaMetrics","definition":"label_values(unpoller_device_info{site_name=~\"$Site\",
|
||||||
|
type=~\"udm|usg|ugw\"},name)","hide":2,"includeAll":true,"label":"","multi":true,"name":"Gateway","options":[],"query":"label_values(unpoller_device_info{site_name=~\"$Site\",
|
||||||
|
type=~\"udm|usg|ugw\"},name)","refresh":1,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":null,"tags":[],"tagsQuery":null,"type":"query","useTags":false},{"allValue":null,"current":{"tags":[],"text":"2m","value":"2m"},"hide":0,"includeAll":false,"label":null,"multi":false,"name":"Smooth","options":[{"selected":false,"text":"30s","value":"30s"},{"selected":false,"text":"1m","value":"1m"},{"selected":true,"text":"2m","value":"2m"},{"selected":false,"text":"5m","value":"5m"},{"selected":false,"text":"10m","value":"10m"},{"selected":false,"text":"15m","value":"15m"}],"query":"30s,1m,2m,5m,10m,15m","skipUrlSync":false,"type":"custom"}]},"time":{"from":"now-3h","to":"now"},"timepicker":{"nowDelay":"","refresh_intervals":["30s","1m","5m","15m","30m","1h","2h"],"time_options":["5m","15m","1h","6h","12h","24h","2d","7d","30d"]},"timezone":"browser","title":"UniFi-Poller:
|
||||||
|
USG Insights - Prometheus","uid":"4Yo8IZ-Wk","version":36}'
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/part-of: unpoller
|
||||||
|
grafana_dashboard: "1"
|
||||||
|
name: unpoller-dashboard-usg-insights
|
||||||
|
namespace: monitoring
|
||||||
@@ -0,0 +1,236 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
data:
|
||||||
|
usw-insights.json: '{"annotations":{"list":[{"builtIn":1,"datasource":"-- Grafana
|
||||||
|
--","enable":true,"hide":true,"iconColor":"rgba(0, 211, 255, 1)","name":"Annotations
|
||||||
|
& Alerts","type":"dashboard"}]},"description":"UniFi Poller v2.0.1 Displays detailed
|
||||||
|
information for network switches in a UniFi network using Prometheus.","editable":true,"gnetId":11312,"graphTooltip":1,"id":null,"iteration":1592125490470,"links":[{"asDropdown":true,"icon":"external
|
||||||
|
link","includeVars":false,"keepTime":true,"tags":["unifi-poller"],"title":"UniFi
|
||||||
|
Poller","type":"dashboards"},{"icon":"question","tags":[],"title":"Help","type":"link","url":"https://golift.io/unifi-poller/issues"},{"icon":"doc","tags":[],"title":"Wiki","type":"link","url":"https://golift.io/unifi-poller/wiki"},{"icon":"bolt","tags":[],"title":"Discord","type":"link","url":"https://discord.gg/KnyKYt2"}],"panels":[{"collapsed":false,"datasource":"${DS_UNIFI_POLLER}","gridPos":{"h":1,"w":24,"x":0,"y":0},"id":137,"panels":[],"title":"Aggregate
|
||||||
|
Graphs","type":"row"},{"columns":[],"datasource":"VictoriaMetrics","description":"If
|
||||||
|
you have access points and gateways they will also show up here because they have
|
||||||
|
switch ports.","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fontSize":"100%","gridPos":{"h":6,"w":24,"x":0,"y":1},"id":2297,"isNew":true,"links":[],"pageSize":null,"scroll":false,"showHeader":true,"sort":{"col":11,"desc":true},"styles":[{"$$hashKey":"object:10978","alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"pattern":"Time","thresholds":[],"type":"hidden","unit":"short"},{"$$hashKey":"object:10979","alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"pattern":"Value #A","thresholds":[],"type":"hidden","unit":"dtdurations"},{"$$hashKey":"object:10980","alias":"Name","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"link":false,"linkTargetBlank":true,"linkUrl":"http:","pattern":"name","preserveFormat":false,"sanitize":false,"thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:10982","alias":"Model","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"pattern":"model","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:10983","alias":"Device
|
||||||
|
MAC","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
|
||||||
|
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"pattern":"mac","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:10984","alias":"UniFi
|
||||||
|
Serial #","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
|
||||||
|
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":2,"pattern":"serial","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:10985","alias":"Site","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"pattern":"site_name","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:10986","alias":"Version","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"pattern":"version","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:10990","alias":"IP","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"ip","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:10991","alias":"Type","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"type","thresholds":[],"type":"string","unit":"short"},{"$$hashKey":"object:10992","alias":"Data","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"Value #C","thresholds":[],"type":"number","unit":"decbytes"},{"$$hashKey":"object:10993","alias":"Uptime","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"Value #B","thresholds":[],"type":"number","unit":"s"},{"$$hashKey":"object:10994","alias":"Controller","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"source","thresholds":[],"type":"hidden","unit":"short"}],"targets":[{"expr":"sum
|
||||||
|
by (ip,mac,model,name,serial,site_name,type,version,source) (unpoller_device_info{site_name=~\"$Site\",
|
||||||
|
name=~\"$Switch\"})","format":"table","instant":true,"interval":"","legendFormat":"","refId":"A"},{"expr":"sum
|
||||||
|
by (ip,mac,model,name,serial,site_name,type,version,source) (unpoller_device_uptime_seconds{site_name=~\"$Site\",
|
||||||
|
name=~\"$Switch\"})","format":"table","instant":true,"interval":"","legendFormat":"","refId":"B"},{"expr":"sum
|
||||||
|
by (ip,mac,model,name,serial,site_name,type,version,source) (unpoller_device_bytes_total{site_name=~\"$Site\",
|
||||||
|
name=~\"$Switch\"})","format":"table","instant":true,"interval":"","legendFormat":"","refId":"C"}],"timeFrom":null,"title":"Switch
|
||||||
|
Details","transform":"table","type":"table-old"},{"aliasColors":{"switch C":"dark-green","switch
|
||||||
|
F":"dark-purple"},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":1,"description":"","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":16,"x":0,"y":7},"hiddenSeries":false,"id":1149,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":true,"max":true,"min":false,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[{"$$hashKey":"object:11469","alias":"/F$/","yaxis":2}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"sum
|
||||||
|
by (name,temp_area,temp_type) (unpoller_device_temperature_celsius{site_name=~\"$Site\",name=~\"$Switch\"})","interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
{{temp_area}} {{temp_type}} C ","refId":"A"},{"expr":"sum by (name,temp_area,temp_type)
|
||||||
|
(unpoller_device_temperature_celsius{site_name=~\"$Site\",name=~\"$Switch\"}*9/5+32)","hide":false,"instant":false,"interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
{{temp_area}} {{temp_type}} F","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Device
|
||||||
|
Temperature(s)","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"$$hashKey":"object:11514","decimals":1,"format":"celsius","label":"Celcius","logBase":1,"max":null,"min":null,"show":true},{"$$hashKey":"object:11515","decimals":1,"format":"fahrenheit","label":"Farenheit","logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":-32}},{"aliasColors":{"switch":"dark-purple"},"bars":false,"cacheTimeout":null,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"description":"","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":7,"w":8,"x":16,"y":7},"hiddenSeries":false,"hideTimeOverride":true,"id":1859,"interval":"","legend":{"avg":false,"current":false,"hideEmpty":true,"max":true,"min":false,"show":true,"total":false,"values":true},"lines":true,"linewidth":2,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"unpoller_device_memory_utilization_ratio{type=\"usw\",
|
||||||
|
site_name=~\"$Site\",name=~\"$Switch\",type=~\"usw|udm|udmp\"}","interval":"$Smooth","legendFormat":"{{name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Memory","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":1,"format":"percentunit","label":"Memory
|
||||||
|
Utilization","logBase":1,"max":"1","min":"0","show":true},{"decimals":null,"format":"short","label":"","logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{"switch
|
||||||
|
load1":"dark-green","switch load15":"semi-dark-purple","switch load5":"dark-blue"},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","editable":true,"error":false,"fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":8,"w":16,"x":0,"y":14},"hiddenSeries":false,"id":1857,"isNew":true,"legend":{"alignAsTable":true,"avg":false,"current":true,"max":true,"min":false,"show":true,"sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":5,"points":false,"renderer":"flot","seriesOverrides":[{"alias":"/load15$/","fill":0,"lines":true,"linewidth":6},{"alias":"/load5$/","fill":0,"lines":true,"linewidth":4}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"unpoller_device_load_average_1{site_name=~\"$Site\",name=~\"$Switch\"}","interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
load1","refId":"A"},{"expr":"unpoller_device_load_average_5{site_name=~\"$Site\",name=~\"$Switch\"}","hide":true,"interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
load5","refId":"B"},{"expr":"unpoller_device_load_average_15{site_name=~\"$Site\",name=~\"$Switch\"}","hide":false,"interval":"$Smooth","legendFormat":"{{name}}
|
||||||
|
load15","refId":"C"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Device
|
||||||
|
Load Average","tooltip":{"msResolution":false,"shared":true,"sort":2,"value_type":"cumulative"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"$$hashKey":"object:13149","format":"none","label":null,"logBase":1,"max":null,"min":null,"show":true},{"$$hashKey":"object:13150","format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{"switch":"dark-purple"},"bars":false,"cacheTimeout":null,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":0,"description":"","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":0,"fillGradient":0,"gridPos":{"h":8,"w":8,"x":16,"y":14},"hiddenSeries":false,"hideTimeOverride":true,"id":1861,"interval":"","legend":{"avg":false,"current":false,"hideEmpty":true,"max":true,"min":false,"show":true,"total":false,"values":true},"lines":true,"linewidth":2,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"unpoller_device_cpu_utilization_ratio{site_name=~\"$Site\",name=~\"$Switch\",type=~\"usw|udm|udmp\"}","interval":"$Smooth","legendFormat":"{{name}}","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"CPU","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"decimals":1,"format":"percentunit","label":"CPU
|
||||||
|
Utilization","logBase":1,"max":"1","min":"0","show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"Shows
|
||||||
|
data transferred for selected switch ports.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":17,"w":24,"x":0,"y":22},"hiddenSeries":false,"id":135,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"hideZero":false,"max":true,"min":false,"rightSide":true,"show":true,"sort":"current","sortDesc":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","seriesOverrides":[{"alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"rate(unpoller_device_port_transmit_bytes_total{site_name=~\"$Site\",
|
||||||
|
name=~\"$Switch\", port_id=~\"$Port\"}[$__interval])","interval":"$Smooth","legendFormat":"{{port_id}}
|
||||||
|
{{port_name}} Tx","refId":"A"},{"expr":"rate(unpoller_device_port_receive_bytes_total{site_name=~\"$Site\",
|
||||||
|
name=~\"$Switch\", port_id=~\"$Port\"}[$__interval])","interval":"$Smooth","legendFormat":"{{port_id}}
|
||||||
|
{{port_name}} Rx","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Data
|
||||||
|
Transfer","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"transparent":true,"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"Bps","label":"Bytes
|
||||||
|
Per Second","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"columns":[],"datasource":"VictoriaMetrics","description":"This
|
||||||
|
panel displays lifetime totals and current data as of now.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fontSize":"90%","gridPos":{"h":21,"w":24,"x":0,"y":39},"id":214,"links":[],"pageSize":null,"scroll":true,"showHeader":true,"sort":{"col":2,"desc":true},"styles":[{"alias":"Port
|
||||||
|
Name","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
|
||||||
|
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Switch","thresholds":[],"type":"string","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"Time","thresholds":[],"type":"hidden","unit":"short"},{"alias":"Switch","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":null,"mappingType":1,"pattern":"name","thresholds":[],"type":"string","unit":"short"},{"alias":"Port","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":0,"mappingType":1,"pattern":"port_num","thresholds":[],"type":"number","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"__name__","thresholds":[],"type":"hidden","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"instance","thresholds":[],"type":"hidden","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"job","thresholds":[],"type":"hidden","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"port_id","thresholds":[],"type":"hidden","unit":"short"},{"alias":"Client","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"port_name","thresholds":[],"type":"string","unit":"short"},{"alias":"Bytes
|
||||||
|
Rx","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
|
||||||
|
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value
|
||||||
|
#A","thresholds":[],"type":"number","unit":"bytes"},{"alias":"Site","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"site_name","thresholds":[],"type":"string","unit":"short"},{"alias":"Controller","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"source","thresholds":[],"type":"hidden","unit":"short"},{"alias":"Bytes
|
||||||
|
Tx","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
|
||||||
|
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value
|
||||||
|
#B","thresholds":[],"type":"number","unit":"decbytes"},{"alias":"Tx Drops","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value #C","thresholds":[],"type":"number","unit":"short"},{"alias":"Rx
|
||||||
|
Drops","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
|
||||||
|
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value
|
||||||
|
#D","thresholds":[],"type":"number","unit":"short"},{"alias":"Tx Broadcast","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value #E","thresholds":[],"type":"number","unit":"short"},{"alias":"Rx
|
||||||
|
Broadcast","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
|
||||||
|
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value
|
||||||
|
#F","thresholds":[],"type":"number","unit":"short"},{"alias":"Tx Errors","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value #G","thresholds":[],"type":"number","unit":"short"},{"alias":"Rx
|
||||||
|
Errors","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
|
||||||
|
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value
|
||||||
|
#H","thresholds":[],"type":"number","unit":"short"},{"alias":"Tx Packets","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value #I","thresholds":[],"type":"number","unit":"short"},{"alias":"Rx
|
||||||
|
Packets","align":"auto","colorMode":null,"colors":["rgba(245, 54, 54, 0.9)","rgba(237,
|
||||||
|
129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value
|
||||||
|
#J","thresholds":[],"type":"number","unit":"short"},{"alias":"Amps","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value #K","thresholds":[],"type":"number","unit":"mamp"},{"alias":"Volts","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value #L","thresholds":[],"type":"number","unit":"volt"},{"alias":"Watts","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":null,"mappingType":1,"pattern":"Value #M","thresholds":[],"type":"number","unit":"watt"}],"targets":[{"expr":"sum
|
||||||
|
by (name,port_num,port_name,site_name,source) (unpoller_device_port_receive_bytes_total{site_name=~\"$Site\",name=~\"$Switch\"})","format":"table","instant":true,"refId":"A"},{"expr":"sum
|
||||||
|
by (name,port_num,port_name,site_name,source) (unpoller_device_port_transmit_bytes_total{site_name=~\"$Site\",name=~\"$Switch\"})","format":"table","hide":false,"instant":true,"refId":"B"},{"expr":"sum
|
||||||
|
by (name,port_num,port_name,site_name,source) (unpoller_device_port_receive_dropped_total{site_name=~\"$Site\",name=~\"$Switch\"})","format":"table","hide":false,"instant":true,"refId":"D"},{"expr":"sum
|
||||||
|
by (name,port_num,port_name,site_name,source) (unpoller_device_port_transmit_dropped_total{site_name=~\"$Site\",name=~\"$Switch\"})","format":"table","hide":false,"instant":true,"refId":"C"},{"expr":"sum
|
||||||
|
by (name,port_num,port_name,site_name,source) (unpoller_device_port_receive_broadcast_total{site_name=~\"$Site\",name=~\"$Switch\"})","format":"table","hide":false,"instant":true,"refId":"F"},{"expr":"sum
|
||||||
|
by (name,port_num,port_name,site_name,source) (unpoller_device_port_transmit_broadcast_total{site_name=~\"$Site\",name=~\"$Switch\"})","format":"table","hide":false,"instant":true,"refId":"E"},{"expr":"sum
|
||||||
|
by (name,port_num,port_name,site_name,source) (unpoller_device_port_receive_errors_total{site_name=~\"$Site\",name=~\"$Switch\"})","format":"table","hide":false,"instant":true,"refId":"H"},{"expr":"sum
|
||||||
|
by (name,port_num,port_name,site_name,source) (unpoller_device_port_transmit_errors_total{site_name=~\"$Site\",name=~\"$Switch\"})","format":"table","hide":false,"instant":true,"refId":"G"},{"expr":"sum
|
||||||
|
by (name,port_num,port_name,site_name,source) (unpoller_device_port_receive_packets_total{site_name=~\"$Site\",name=~\"$Switch\"})","format":"table","hide":false,"instant":true,"refId":"J"},{"expr":"sum
|
||||||
|
by (name,port_num,port_name,site_name,source) (unpoller_device_port_transmit_packets_total{site_name=~\"$Site\",name=~\"$Switch\"})","format":"table","hide":false,"instant":true,"refId":"I"},{"expr":"sum
|
||||||
|
by (name,port_num,port_name,site_name,source) (unpoller_device_port_poe_amperes{site_name=~\"$Site\",name=~\"$Switch\"})","format":"table","hide":false,"instant":true,"refId":"K"},{"expr":"sum
|
||||||
|
by (name,port_num,port_name,site_name,source) (unpoller_device_port_poe_volts{site_name=~\"$Site\",name=~\"$Switch\"})","format":"table","hide":false,"instant":true,"refId":"L"},{"expr":"sum
|
||||||
|
by (name,port_num,port_name,site_name,source) (unpoller_device_port_poe_watts{site_name=~\"$Site\",name=~\"$Switch\"})","format":"table","hide":false,"instant":true,"refId":"M"}],"title":"All
|
||||||
|
Port Information","transform":"table","transparent":true,"type":"table-old"},{"collapsed":true,"datasource":"${DS_UNIFI_POLLER}","gridPos":{"h":1,"w":24,"x":0,"y":60},"id":4,"panels":[{"columns":[],"datasource":"VictoriaMetrics","description":"These
|
||||||
|
are total \"lifetime\" counters.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fontSize":"90%","gridPos":{"h":3,"w":24,"x":0,"y":61},"id":291,"links":[],"pageSize":null,"scopedVars":{"Port":{"selected":false}},"scroll":true,"showHeader":true,"sort":{"col":13,"desc":true},"styles":[{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":2,"mappingType":1,"pattern":"Time","thresholds":[],"type":"hidden","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":0,"mappingType":1,"pattern":"Speed","thresholds":[],"type":"number","unit":"decbytes"},{"alias":"","align":"auto","colorMode":"cell","colors":["rgba(50,
|
||||||
|
172, 45, 0)","rgba(237, 129, 40, 0.89)","rgba(245, 54, 54, 0.9)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":0,"mappingType":1,"pattern":"/Drops|Errors/","thresholds":["10","100"],"type":"number","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":1,"mappingType":1,"pattern":"/^Bytes/","thresholds":[],"type":"number","unit":"decbytes"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":0,"mappingType":1,"pattern":"Satisfaction","thresholds":[],"type":"number","unit":"percent"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":null,"mappingType":1,"pattern":"/^[TR]x /","thresholds":[],"type":"number","unit":"short"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":0,"mappingType":1,"pattern":"Volts","thresholds":[],"type":"number","unit":"volt"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":1,"mappingType":1,"pattern":"Watts","thresholds":[],"type":"number","unit":"watt"},{"alias":"","align":"auto","colorMode":null,"colors":["rgba(245,
|
||||||
|
54, 54, 0.9)","rgba(237, 129, 40, 0.89)","rgba(50, 172, 45, 0.97)"],"dateFormat":"YYYY-MM-DD
|
||||||
|
HH:mm:ss","decimals":0,"mappingType":1,"pattern":"Amps","thresholds":[],"type":"number","unit":"mamp"}],"targets":[{"expr":"unpoller_device_port_port_speed_bps{port_id=\"$Port\",
|
||||||
|
site_name=~\"$Site\"}","format":"time_series","instant":true,"interval":"$Smooth","legendFormat":"Speed","refId":"A"},{"expr":"unpoller_device_port_poe_amperes{port_id=\"$Port\",
|
||||||
|
site_name=~\"$Site\"}","format":"time_series","hide":false,"instant":true,"interval":"$Smooth","legendFormat":"Amps","refId":"B"},{"expr":"unpoller_device_port_poe_volts{port_id=\"$Port\",
|
||||||
|
site_name=~\"$Site\"}","format":"time_series","hide":false,"instant":true,"interval":"$Smooth","legendFormat":"Volts","refId":"C"},{"expr":"unpoller_device_port_poe_watts{port_id=\"$Port\",
|
||||||
|
site_name=~\"$Site\"}","format":"time_series","hide":false,"instant":true,"interval":"$Smooth","legendFormat":"Watts","refId":"D"},{"expr":"unpoller_device_port_transmit_broadcast_total{port_id=\"$Port\",
|
||||||
|
site_name=~\"$Site\"}","format":"time_series","instant":true,"interval":"$Smooth","legendFormat":"Tx
|
||||||
|
Broadcast","refId":"E"},{"expr":"unpoller_device_port_transmit_multicast_total{port_id=\"$Port\",
|
||||||
|
site_name=~\"$Site\"}","format":"time_series","instant":true,"interval":"$Smooth","legendFormat":"Rx
|
||||||
|
Multicast","refId":"F"},{"expr":"unpoller_device_port_receive_dropped_total{port_id=\"$Port\",
|
||||||
|
site_name=~\"$Site\"}","format":"time_series","instant":true,"interval":"$Smooth","legendFormat":"Rx
|
||||||
|
Drops","refId":"G"},{"expr":"unpoller_device_port_transmit_dropped_total{port_id=\"$Port\",
|
||||||
|
site_name=~\"$Site\"}","format":"time_series","instant":true,"interval":"$Smooth","legendFormat":"Tx
|
||||||
|
Drops","refId":"N"},{"expr":"unpoller_device_port_transmit_errors_total+unpoller_device_port_receive_errors_total{port_id=\"$Port\",
|
||||||
|
site_name=~\"$Site\"}","format":"time_series","instant":true,"interval":"$Smooth","legendFormat":"Rx+Tx
|
||||||
|
Errors","refId":"H"},{"expr":"unpoller_device_port_receive_packets_total{port_id=\"$Port\",
|
||||||
|
site_name=~\"$Site\"}","format":"time_series","instant":true,"interval":"$Smooth","legendFormat":"Rx
|
||||||
|
Packets","refId":"I"},{"expr":"unpoller_device_port_transmit_packets_total{port_id=\"$Port\",
|
||||||
|
site_name=~\"$Site\"}","format":"time_series","hide":false,"instant":true,"interval":"$Smooth","legendFormat":"Tx
|
||||||
|
Packets","refId":"J"},{"expr":"unpoller_device_port_receive_bytes_total{port_id=\"$Port\",
|
||||||
|
site_name=~\"$Site\"}","format":"time_series","hide":false,"instant":true,"interval":"$Smooth","legendFormat":"Bytes
|
||||||
|
Rx","refId":"K"},{"expr":"unpoller_device_port_transmit_bytes_total{port_id=\"$Port\",
|
||||||
|
site_name=~\"$Site\"}","format":"time_series","hide":false,"instant":true,"interval":"$Smooth","legendFormat":"Bytes
|
||||||
|
Tx","refId":"L"},{"expr":"unpoller_device_port_satisfaction_percent{port_id=\"$Port\",
|
||||||
|
site_name=~\"$Site\"}","format":"time_series","hide":false,"instant":true,"interval":"$Smooth","legendFormat":"Satisfaction","refId":"M"}],"title":"Switch
|
||||||
|
$Port Information","transform":"timeseries_to_columns","type":"table-old"},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"Shows
|
||||||
|
data transfer rate per second for Switch $Port. TX on positive axis and RX on
|
||||||
|
negative axis.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":9,"w":24,"x":0,"y":64},"hiddenSeries":false,"id":1396,"legend":{"alignAsTable":true,"avg":true,"current":true,"max":true,"min":true,"rightSide":false,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","scopedVars":{"Port":{"selected":false}},"seriesOverrides":[{"alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"rate(unpoller_device_port_receive_bytes_total{site_name=~\"$Site\",
|
||||||
|
port_id=~\"$Port\"}[$__interval])","interval":"$Smooth","legendFormat":" {{port_id}}
|
||||||
|
({{port_name}}) Rx","refId":"A"},{"expr":"rate(unpoller_device_port_transmit_bytes_total{site_name=~\"$Site\",
|
||||||
|
port_id=~\"$Port\"}[$__interval])","interval":"$Smooth","legendFormat":" {{port_id}}
|
||||||
|
({{port_name}}) Tx","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Data
|
||||||
|
Transfer: Switch $Port","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"Bps","label":"Bytes
|
||||||
|
/ Second","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"Shows
|
||||||
|
broadcast and multicast packets per second for Switch $Port. TX on positive axis
|
||||||
|
and RX on negative axis.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":0,"y":73},"hiddenSeries":false,"id":594,"legend":{"alignAsTable":true,"avg":true,"current":true,"max":true,"min":true,"rightSide":false,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","scopedVars":{"Port":{"selected":false}},"seriesOverrides":[{"alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"rate(unpoller_device_port_receive_broadcast_total{site_name=~\"$Site\",
|
||||||
|
port_id=~\"$Port\"}[$__interval])","interval":"$Smooth","legendFormat":"{{port_id}}
|
||||||
|
({{port_name}}) Broadcast Rx","refId":"A"},{"expr":"rate(unpoller_device_port_transmit_broadcast_total{site_name=~\"$Site\",
|
||||||
|
port_id=~\"$Port\"}[$__interval])","interval":"$Smooth","legendFormat":"{{port_id}}
|
||||||
|
({{port_name}}) Broadcast Tx","refId":"B"},{"expr":"rate(unpoller_device_port_receive_multicast_total{site_name=~\"$Site\",
|
||||||
|
port_id=~\"$Port\"}[$__interval])","interval":"$Smooth","legendFormat":"{{port_id}}
|
||||||
|
({{port_name}}) Multicast Rx","refId":"C"},{"expr":"rate(unpoller_device_port_transmit_multicast_total{site_name=~\"$Site\",
|
||||||
|
port_id=~\"$Port\"}[$__interval])","interval":"$Smooth","legendFormat":"{{port_id}}
|
||||||
|
({{port_name}}) Multicast Tx","refId":"D"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Multicast
|
||||||
|
& Broadcast: Switch $Port","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"pps","label":"PPS","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","decimals":null,"description":"Shows
|
||||||
|
errors and dropped packets for Switch $Port. RX on negative axis.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":12,"y":73},"hiddenSeries":false,"id":367,"legend":{"alignAsTable":false,"avg":false,"current":false,"hideEmpty":true,"max":true,"min":false,"rightSide":false,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","scopedVars":{"Port":{"selected":false}},"seriesOverrides":[{"alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"rate(unpoller_device_port_receive_dropped_total{site_name=~\"$Site\",
|
||||||
|
port_id=~\"$Port\"}[$__interval])","interval":"$Smooth","legendFormat":"{{port_id}}
|
||||||
|
({{port_name}}) Drops Rx","refId":"A"},{"expr":"rate(unpoller_device_port_transmit_dropped_total{site_name=~\"$Site\",
|
||||||
|
port_id=~\"$Port\"}[$__interval])","interval":"$Smooth","legendFormat":"{{port_id}}
|
||||||
|
({{port_name}}) Drops Tx","refId":"B"},{"expr":"rate(unpoller_device_port_transmit_errors_total{site_name=~\"$Site\",
|
||||||
|
port_id=~\"$Port\"}[$__interval])","interval":"$Smooth","legendFormat":"{{port_id}}
|
||||||
|
({{port_name}}) Errors Tx","refId":"C"},{"expr":"rate(unpoller_device_port_receive_errors_total{site_name=~\"$Site\",
|
||||||
|
port_id=~\"$Port\"}[$__interval])","interval":"$Smooth","legendFormat":"{{port_id}}
|
||||||
|
({{port_name}}) Errors Rx","refId":"D"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Errors
|
||||||
|
and Drops: Switch $Port","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"$$hashKey":"object:4320","decimals":null,"format":"pps","label":"packets
|
||||||
|
per second","logBase":1,"max":null,"min":null,"show":true},{"$$hashKey":"object:4321","format":"short","label":null,"logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"Shows
|
||||||
|
packet counters for Switch $Port. TX on positive axis and RX on negative axis.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":12,"x":0,"y":80},"hiddenSeries":false,"id":468,"legend":{"alignAsTable":true,"avg":true,"current":true,"max":true,"min":true,"rightSide":false,"show":true,"total":true,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"null","options":{"dataLinks":[]},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","scopedVars":{"Port":{"selected":false}},"seriesOverrides":[{"alias":"/Rx$/","transform":"negative-Y"}],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"rate(unpoller_device_port_receive_packets_total{site_name=~\"$Site\",
|
||||||
|
port_id=~\"$Port\"}[$__interval])","interval":"$Smooth","legendFormat":"{{port_id}}
|
||||||
|
({{port_name}}) Rx","refId":"A"},{"expr":"rate(unpoller_device_port_transmit_packets_total{site_name=~\"$Site\",
|
||||||
|
port_id=~\"$Port\"}[$__interval])","interval":"$Smooth","legendFormat":"{{port_id}}
|
||||||
|
({{port_name}}) Tx","refId":"B"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"Packets
|
||||||
|
Per Second: Switch $Port","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"pps","label":"PPS","logBase":1,"max":null,"min":null,"show":true},{"format":"short","label":null,"logBase":1,"max":null,"min":null,"show":true}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"Display
|
||||||
|
POE Power for Switch $Port.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":4,"x":12,"y":80},"hiddenSeries":false,"id":745,"legend":{"alignAsTable":true,"avg":false,"current":true,"max":true,"min":false,"rightSide":false,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"connected","options":{"dataLinks":[]},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","scopedVars":{"Port":{"selected":false}},"seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"unpoller_device_port_poe_watts{site_name=~\"$Site\",
|
||||||
|
port_id=~\"$Port\"}","interval":"$Smooth","legendFormat":"{{port_id}} Watts","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"POE
|
||||||
|
Power: Switch $Port","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"watt","label":"Watts","logBase":1,"max":null,"min":null,"show":true},{"format":"watt","label":"Watts","logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"Display
|
||||||
|
POE Voltage for Switch $Port.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":4,"x":16,"y":80},"hiddenSeries":false,"id":921,"legend":{"alignAsTable":true,"avg":false,"current":true,"hideEmpty":true,"max":true,"min":false,"rightSide":false,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"connected","options":{"dataLinks":[]},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","scopedVars":{"Port":{"selected":false}},"seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"unpoller_device_port_poe_volts{site_name=~\"$Site\",
|
||||||
|
port_id=~\"$Port\"}","interval":"$Smooth","legendFormat":"{{port_id}} Volts","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"POE
|
||||||
|
Voltage: Switch $Port","tooltip":{"shared":true,"sort":2,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"volt","label":"Volts","logBase":1,"max":null,"min":null,"show":true},{"format":"watt","label":"Watts","logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}},{"aliasColors":{},"bars":false,"dashLength":10,"dashes":false,"datasource":"VictoriaMetrics","description":"Display
|
||||||
|
POE Current for Switch $Port.","fieldConfig":{"defaults":{"custom":{}},"overrides":[]},"fill":1,"fillGradient":0,"gridPos":{"h":7,"w":4,"x":20,"y":80},"hiddenSeries":false,"id":922,"legend":{"alignAsTable":true,"avg":false,"current":true,"max":true,"min":false,"rightSide":false,"show":true,"total":false,"values":true},"lines":true,"linewidth":1,"links":[],"nullPointMode":"connected","options":{"dataLinks":[]},"percentage":false,"pointradius":2,"points":false,"renderer":"flot","scopedVars":{"Port":{"selected":false}},"seriesOverrides":[],"spaceLength":10,"stack":false,"steppedLine":false,"targets":[{"expr":"unpoller_device_port_poe_amperes{site_name=~\"$Site\",
|
||||||
|
port_id=~\"$Port\"}","interval":"$Smooth","legendFormat":"{{port_id}} Amps","refId":"A"}],"thresholds":[],"timeFrom":null,"timeRegions":[],"timeShift":null,"title":"POE
|
||||||
|
Current: Switch $Port","tooltip":{"shared":true,"sort":0,"value_type":"individual"},"type":"graph","xaxis":{"buckets":null,"mode":"time","name":null,"show":true,"values":[]},"yaxes":[{"format":"mamp","label":"Amps","logBase":1,"max":null,"min":null,"show":true},{"format":"watt","label":"Watts","logBase":1,"max":null,"min":null,"show":false}],"yaxis":{"align":false,"alignLevel":null}}],"repeat":"Port","title":"Switch
|
||||||
|
$Port","type":"row"},{"collapsed":true,"datasource":"${DS_UNIFI_POLLER}","gridPos":{"h":1,"w":24,"x":0,"y":85},"id":2299,"panels":[],"title":"Purposely
|
||||||
|
Empty Row","type":"row"}],"refresh":"1m","schemaVersion":25,"style":"dark","tags":["unifi","usw","unifi-poller"],"templating":{"list":[{"allValue":".*","current":{},"datasource":"VictoriaMetrics","definition":"label_values(unpoller_device_info,source)","hide":2,"includeAll":true,"label":null,"multi":true,"name":"Controller","options":[],"query":"label_values(unpoller_device_info,source)","refresh":1,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":"","current":{"selected":true,"tags":[],"text":"All","value":["$__all"]},"hide":0,"includeAll":true,"label":null,"multi":true,"name":"Devices","options":[{"selected":true,"text":"All","value":"$__all"},{"selected":false,"text":"udm","value":"udm"},{"selected":false,"text":"usw","value":"usw"},{"selected":false,"text":"uap","value":"uap"}],"query":"udm,usw,uap","queryValue":"","skipUrlSync":false,"type":"custom"},{"allValue":".*","current":{},"datasource":"VictoriaMetrics","definition":"label_values(unpoller_device_info{source=~\"$Controller\"},site_name)","hide":0,"includeAll":true,"label":null,"multi":true,"name":"Site","options":[],"query":"label_values(unpoller_device_info{source=~\"$Controller\"},site_name)","refresh":1,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":"","current":{},"datasource":"VictoriaMetrics","definition":"label_values(unpoller_device_info{site_name=~\"$Site\",
|
||||||
|
type=~\"$Devices\"},name)","hide":0,"includeAll":true,"label":null,"multi":true,"name":"Switch","options":[],"query":"label_values(unpoller_device_info{site_name=~\"$Site\",
|
||||||
|
type=~\"$Devices\"},name)","refresh":1,"regex":"","skipUrlSync":false,"sort":1,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":".*","current":{},"datasource":"VictoriaMetrics","definition":"label_values(unpoller_device_port_port_speed_bps{site_name=~\"$Site\",
|
||||||
|
name=~\"$Switch\"},port_id)","hide":0,"includeAll":true,"label":null,"multi":true,"name":"Port","options":[],"query":"label_values(unpoller_device_port_port_speed_bps{site_name=~\"$Site\",
|
||||||
|
name=~\"$Switch\"},port_id)","refresh":1,"regex":"","skipUrlSync":false,"sort":3,"tagValuesQuery":"","tags":[],"tagsQuery":"","type":"query","useTags":false},{"allValue":null,"current":{"tags":[],"text":"2m","value":"2m"},"hide":0,"includeAll":false,"label":null,"multi":false,"name":"Smooth","options":[{"selected":false,"text":"30s","value":"30s"},{"selected":false,"text":"1m","value":"1m"},{"selected":true,"text":"2m","value":"2m"},{"selected":false,"text":"5m","value":"5m"},{"selected":false,"text":"10m","value":"10m"},{"selected":false,"text":"15m","value":"15m"},{"selected":false,"text":"30m","value":"30m"}],"query":"30s,1m,2m,5m,10m,15m,30m","skipUrlSync":false,"type":"custom"}]},"time":{"from":"now-3h","to":"now"},"timepicker":{"nowDelay":"","refresh_intervals":["30s","1m","5m","15m","30m","1h","2h"],"time_options":["5m","15m","1h","6h","12h","24h","2d","7d","30d"]},"timezone":"browser","title":"UniFi-Poller:
|
||||||
|
USW Insights - Prometheus","uid":"FsfxpWaZz","version":35}'
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/part-of: unpoller
|
||||||
|
grafana_dashboard: "1"
|
||||||
|
name: unpoller-dashboard-usw-insights
|
||||||
|
namespace: monitoring
|
||||||
@@ -0,0 +1,77 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: unpoller
|
||||||
|
namespace: monitoring
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: unpoller
|
||||||
|
app.kubernetes.io/instance: unpoller
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app.kubernetes.io/name: unpoller
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: unpoller
|
||||||
|
app.kubernetes.io/instance: unpoller
|
||||||
|
spec:
|
||||||
|
securityContext:
|
||||||
|
runAsNonRoot: true
|
||||||
|
runAsUser: 65534
|
||||||
|
runAsGroup: 65534
|
||||||
|
seccompProfile:
|
||||||
|
type: RuntimeDefault
|
||||||
|
containers:
|
||||||
|
- name: unpoller
|
||||||
|
image: ghcr.io/unpoller/unpoller:v3.3.1
|
||||||
|
ports:
|
||||||
|
- name: metrics
|
||||||
|
containerPort: 9130
|
||||||
|
protocol: TCP
|
||||||
|
env:
|
||||||
|
# Outputs: Prometheus exporter on, InfluxDB off.
|
||||||
|
- name: UP_INFLUXDB_DISABLE
|
||||||
|
value: "true"
|
||||||
|
- name: UP_PROMETHEUS_DISABLE
|
||||||
|
value: "false"
|
||||||
|
- name: UP_PROMETHEUS_HTTP_LISTEN
|
||||||
|
value: "0.0.0.0:9130"
|
||||||
|
# UniFi OS controller: self-signed cert, poll all sites.
|
||||||
|
- name: UP_UNIFI_DEFAULT_VERIFY_SSL
|
||||||
|
value: "false"
|
||||||
|
- name: UP_UNIFI_DEFAULT_SITE_0
|
||||||
|
value: "all"
|
||||||
|
- name: UP_UNIFI_DEFAULT_SAVE_SITES
|
||||||
|
value: "true"
|
||||||
|
- name: UP_POLLER_DEBUG
|
||||||
|
value: "false"
|
||||||
|
# UP_UNIFI_DEFAULT_URL / _USER / _PASS come from the secret.
|
||||||
|
envFrom:
|
||||||
|
- secretRef:
|
||||||
|
name: unpoller-unifi
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /
|
||||||
|
port: metrics
|
||||||
|
initialDelaySeconds: 5
|
||||||
|
periodSeconds: 15
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
path: /
|
||||||
|
port: metrics
|
||||||
|
initialDelaySeconds: 15
|
||||||
|
periodSeconds: 30
|
||||||
|
securityContext:
|
||||||
|
allowPrivilegeEscalation: false
|
||||||
|
readOnlyRootFilesystem: true
|
||||||
|
capabilities:
|
||||||
|
drop:
|
||||||
|
- ALL
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 50m
|
||||||
|
memory: 64Mi
|
||||||
|
limits:
|
||||||
|
memory: 256Mi
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: unpoller-unifi
|
||||||
|
namespace: monitoring
|
||||||
|
type: Opaque
|
||||||
|
stringData:
|
||||||
|
#ENC[AES256_GCM,data:ii9nZ95ZfxWrmxlxsrI3/GMqAhMZWe7NJVxZoHaY9WLhGgndKJ0wVnJc7FDkTiSENVsmyvOR9Un8nquxtOpnWuJkiK4UVMgt,iv:vq8/8M9wZTYBjSC28n11z1dwYg9QpPeJkbChSrXwR9g=,tag:d3gsygZLzAZvKSbPGVkfWw==,type:comment]
|
||||||
|
UP_UNIFI_DEFAULT_URL: ENC[AES256_GCM,data:6Ng+S4pJtZ1RrCZzYsaBcsij,iv:XVEJhGuzul53wA2jDcTRSTQ+Zg5LfrjYIsfnIwKJrjI=,tag:p5cuB+TucDJ0nS6qZwrU5w==,type:str]
|
||||||
|
#ENC[AES256_GCM,data:bPOMGlTiBcBaxZooysr8eGiYEPpiiWw7qj24YbZfs/+gUqvQICFoZFUuvtQHUr7d1AvXMmD08C7oxo2Wi3CQO49zaBMprC2Pp1afIQBYGEdAzTw=,iv:ZMgm/r6n/q7SHiQcXuv9jNH17FYO9m53YtstrWMIsHQ=,tag:JigMJbOWMai+95UX+Hq1DQ==,type:comment]
|
||||||
|
UP_UNIFI_DEFAULT_USER: ENC[AES256_GCM,data:tcGXHfzSeX4=,iv:VdqazUQzNZu4wrNtU/ZBM+Z/qgKFJcn5vUGPQk8XnY4=,tag:gimPFlc9r+wHINhkxgie4w==,type:str]
|
||||||
|
UP_UNIFI_DEFAULT_PASS: ENC[AES256_GCM,data:zNgR/FH3H53dlH+FBcaRHcE6eAORkBKg5X1cM35dAQs=,iv:cgvYU4RlAST5+2qchDa7qJhxpmqXWKmaGy5aEptum4E=,tag:0Iv6jVbq3p+462FmNUEDAA==,type:str]
|
||||||
|
sops:
|
||||||
|
age:
|
||||||
|
- enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBpekpqdDJqeGZBbmNPVVlW
|
||||||
|
MDN6WnI4Ynd1dGhQTlkwYzY4STREMnFuQkFNCjVWWGFjMW5rOUVESVQ5RVhZZ2FT
|
||||||
|
cmtnejhHMzBpNlV5bmpsMWdwcW5ZNFEKLS0tIHdLQ0lRdXZuTE1DWUJ6L1hCUFhK
|
||||||
|
ajhCRUh2dVQrUkJJamFCTDU0eS9lajAKq/7OhPmhVUTVFos0IdBozgFXAcv5HutH
|
||||||
|
yudHIJNuecjCFsTpM7gr6d6dBfr2xBKk8HsTkjfuwwI+/Bd3+VObvw==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
recipient: age1jetw4h63gq4uzyk08znynw4h852nexdmtkdz4kwxj5ew5st32vnspmtag2
|
||||||
|
encrypted_regex: ^(data|stringData|email)$
|
||||||
|
lastmodified: "2026-06-19T18:29:59Z"
|
||||||
|
mac: ENC[AES256_GCM,data:MSKLVzChp1ylSbtQU1eaxf1egktK6B75PLQTgoMkVXZZ5GJJzXEsWuiIdnud9vcMet8uBVVLUzqfsCEEwkobJXf7yi8jloKboIYqkKb38PlSb6SVyj3QB59a7LMISUZspBFiiVozrRD7q5jzZKlK86v0RJ21KvxOVdv7pbTfzUY=,iv:rkoR814sUKLMkPHG8zZQk7sGF59w+gc1qbDO65TvOd0=,tag:zcjGwcFZ5tzjApN472bpTA==,type:str]
|
||||||
|
version: 3.13.1
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: unpoller
|
||||||
|
namespace: monitoring
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: unpoller
|
||||||
|
app.kubernetes.io/instance: unpoller
|
||||||
|
spec:
|
||||||
|
type: ClusterIP
|
||||||
|
selector:
|
||||||
|
app.kubernetes.io/name: unpoller
|
||||||
|
ports:
|
||||||
|
- name: metrics
|
||||||
|
port: 9130
|
||||||
|
targetPort: metrics
|
||||||
|
protocol: TCP
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
apiVersion: operator.victoriametrics.com/v1beta1
|
||||||
|
kind: VMServiceScrape
|
||||||
|
metadata:
|
||||||
|
name: unpoller
|
||||||
|
namespace: monitoring
|
||||||
|
labels:
|
||||||
|
app.kubernetes.io/name: unpoller
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app.kubernetes.io/name: unpoller
|
||||||
|
endpoints:
|
||||||
|
# unpoller caches controller data and refreshes it every 60s, so a tighter
|
||||||
|
# scrape interval just re-serves the same cache.
|
||||||
|
- port: metrics
|
||||||
|
path: /metrics
|
||||||
|
interval: 60s
|
||||||
|
scrapeTimeout: 30s
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,27 @@
|
|||||||
|
# This manifest was generated by flux. DO NOT EDIT.
|
||||||
|
---
|
||||||
|
apiVersion: source.toolkit.fluxcd.io/v1
|
||||||
|
kind: GitRepository
|
||||||
|
metadata:
|
||||||
|
name: flux-system
|
||||||
|
namespace: flux-system
|
||||||
|
spec:
|
||||||
|
interval: 1m0s
|
||||||
|
ref:
|
||||||
|
branch: master
|
||||||
|
secretRef:
|
||||||
|
name: flux-system
|
||||||
|
url: https://github.com/berezovskyi-oleksandr/homelab.git
|
||||||
|
---
|
||||||
|
apiVersion: kustomize.toolkit.fluxcd.io/v1
|
||||||
|
kind: Kustomization
|
||||||
|
metadata:
|
||||||
|
name: flux-system
|
||||||
|
namespace: flux-system
|
||||||
|
spec:
|
||||||
|
interval: 10m0s
|
||||||
|
path: ./kubernetes-monitoring
|
||||||
|
prune: true
|
||||||
|
sourceRef:
|
||||||
|
kind: GitRepository
|
||||||
|
name: flux-system
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
|
kind: Kustomization
|
||||||
|
resources:
|
||||||
|
- gotk-components.yaml
|
||||||
|
- gotk-sync.yaml
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
apiVersion: kustomize.config.k8s.io/v1beta1
|
||||||
|
kind: Kustomization
|
||||||
|
resources:
|
||||||
|
- flux-system
|
||||||
|
- apps/ks.yaml
|
||||||
@@ -6,6 +6,8 @@ metadata:
|
|||||||
namespace: archmirror
|
namespace: archmirror
|
||||||
data:
|
data:
|
||||||
nginx.conf: |
|
nginx.conf: |
|
||||||
|
worker_processes auto;
|
||||||
|
|
||||||
events {
|
events {
|
||||||
worker_connections 1024;
|
worker_connections 1024;
|
||||||
}
|
}
|
||||||
@@ -15,6 +17,8 @@ data:
|
|||||||
default_type application/octet-stream;
|
default_type application/octet-stream;
|
||||||
|
|
||||||
sendfile on;
|
sendfile on;
|
||||||
|
# NFS reads block the worker; offload them so /health keeps answering
|
||||||
|
aio threads;
|
||||||
gzip on;
|
gzip on;
|
||||||
|
|
||||||
server {
|
server {
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: blog-nginx-config
|
||||||
|
namespace: blog
|
||||||
|
data:
|
||||||
|
default.conf: |
|
||||||
|
server {
|
||||||
|
listen 8080;
|
||||||
|
server_name _;
|
||||||
|
root /git/current;
|
||||||
|
index index.html;
|
||||||
|
absolute_redirect off;
|
||||||
|
|
||||||
|
location /health {
|
||||||
|
access_log off;
|
||||||
|
return 200 "OK";
|
||||||
|
add_header Content-Type text/plain;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~ /\.git {
|
||||||
|
deny all;
|
||||||
|
return 404;
|
||||||
|
}
|
||||||
|
|
||||||
|
location / {
|
||||||
|
try_files $uri $uri/ =404;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,149 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: blog
|
||||||
|
namespace: blog
|
||||||
|
labels:
|
||||||
|
app: blog
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
strategy:
|
||||||
|
type: Recreate
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: blog
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: blog
|
||||||
|
spec:
|
||||||
|
securityContext:
|
||||||
|
runAsNonRoot: true
|
||||||
|
seccompProfile:
|
||||||
|
type: RuntimeDefault
|
||||||
|
# git-sync (uid 65533) writes files; fsGroup makes the emptyDir group-writable by that uid
|
||||||
|
fsGroup: 65533
|
||||||
|
initContainers:
|
||||||
|
- name: git-sync-init
|
||||||
|
image: registry.k8s.io/git-sync/git-sync:v4.5.1
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
env:
|
||||||
|
- name: GITSYNC_REPO
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: blog-git-credentials
|
||||||
|
key: GITSYNC_REPO
|
||||||
|
- name: GITSYNC_ROOT
|
||||||
|
value: "/git"
|
||||||
|
- name: GITSYNC_REF
|
||||||
|
value: "gh-pages"
|
||||||
|
- name: GITSYNC_LINK
|
||||||
|
value: "current"
|
||||||
|
- name: GITSYNC_DEPTH
|
||||||
|
value: "1"
|
||||||
|
- name: GITSYNC_ONE_TIME
|
||||||
|
value: "true"
|
||||||
|
- name: GITSYNC_USERNAME
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: blog-git-credentials
|
||||||
|
key: GITSYNC_USERNAME
|
||||||
|
- name: GITSYNC_PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: blog-git-credentials
|
||||||
|
key: GITSYNC_PASSWORD
|
||||||
|
securityContext:
|
||||||
|
runAsUser: 65533
|
||||||
|
runAsGroup: 65533
|
||||||
|
volumeMounts:
|
||||||
|
- name: git-content
|
||||||
|
mountPath: /git
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 10m
|
||||||
|
memory: 64Mi
|
||||||
|
limits:
|
||||||
|
memory: 128Mi
|
||||||
|
containers:
|
||||||
|
- name: nginx
|
||||||
|
image: nginxinc/nginx-unprivileged:1.30.0-alpine3.23
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
ports:
|
||||||
|
- containerPort: 8080
|
||||||
|
name: http
|
||||||
|
protocol: TCP
|
||||||
|
securityContext:
|
||||||
|
runAsUser: 101
|
||||||
|
runAsGroup: 101
|
||||||
|
volumeMounts:
|
||||||
|
- name: git-content
|
||||||
|
mountPath: /git
|
||||||
|
- name: nginx-config
|
||||||
|
mountPath: /etc/nginx/conf.d/default.conf
|
||||||
|
subPath: default.conf
|
||||||
|
livenessProbe:
|
||||||
|
httpGet:
|
||||||
|
port: 8080
|
||||||
|
path: /health
|
||||||
|
initialDelaySeconds: 10
|
||||||
|
periodSeconds: 30
|
||||||
|
readinessProbe:
|
||||||
|
httpGet:
|
||||||
|
port: 8080
|
||||||
|
path: /health
|
||||||
|
initialDelaySeconds: 5
|
||||||
|
periodSeconds: 10
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 10m
|
||||||
|
memory: 32Mi
|
||||||
|
limits:
|
||||||
|
memory: 64Mi
|
||||||
|
- name: git-sync
|
||||||
|
image: registry.k8s.io/git-sync/git-sync:v4.5.1
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
env:
|
||||||
|
- name: GITSYNC_REPO
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: blog-git-credentials
|
||||||
|
key: GITSYNC_REPO
|
||||||
|
- name: GITSYNC_ROOT
|
||||||
|
value: "/git"
|
||||||
|
- name: GITSYNC_REF
|
||||||
|
value: "gh-pages"
|
||||||
|
- name: GITSYNC_LINK
|
||||||
|
value: "current"
|
||||||
|
- name: GITSYNC_DEPTH
|
||||||
|
value: "1"
|
||||||
|
- name: GITSYNC_PERIOD
|
||||||
|
value: "30s"
|
||||||
|
- name: GITSYNC_USERNAME
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: blog-git-credentials
|
||||||
|
key: GITSYNC_USERNAME
|
||||||
|
- name: GITSYNC_PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: blog-git-credentials
|
||||||
|
key: GITSYNC_PASSWORD
|
||||||
|
securityContext:
|
||||||
|
runAsUser: 65533
|
||||||
|
runAsGroup: 65533
|
||||||
|
volumeMounts:
|
||||||
|
- name: git-content
|
||||||
|
mountPath: /git
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 5m
|
||||||
|
memory: 32Mi
|
||||||
|
limits:
|
||||||
|
memory: 64Mi
|
||||||
|
volumes:
|
||||||
|
- name: git-content
|
||||||
|
emptyDir: {}
|
||||||
|
- name: nginx-config
|
||||||
|
configMap:
|
||||||
|
name: blog-nginx-config
|
||||||
@@ -1,24 +1,23 @@
|
|||||||
apiVersion: networking.k8s.io/v1
|
apiVersion: networking.k8s.io/v1
|
||||||
kind: Ingress
|
kind: Ingress
|
||||||
metadata:
|
metadata:
|
||||||
name: grocy
|
name: blog
|
||||||
namespace: grocy
|
namespace: blog
|
||||||
annotations:
|
annotations:
|
||||||
cert-manager.io/cluster-issuer: letsencrypt
|
cert-manager.io/cluster-issuer: letsencrypt
|
||||||
traefik.ingress.kubernetes.io/router.middlewares: authelia-chain-authelia-authelia-auth@kubernetescrd
|
|
||||||
spec:
|
spec:
|
||||||
tls:
|
tls:
|
||||||
- hosts:
|
- hosts:
|
||||||
- ${GROCY_HOST}
|
- ${BLOG_HOST}
|
||||||
secretName: grocy-tls
|
secretName: blog-tls
|
||||||
rules:
|
rules:
|
||||||
- host: ${GROCY_HOST}
|
- host: ${BLOG_HOST}
|
||||||
http:
|
http:
|
||||||
paths:
|
paths:
|
||||||
- path: /
|
- path: /
|
||||||
pathType: Prefix
|
pathType: Prefix
|
||||||
backend:
|
backend:
|
||||||
service:
|
service:
|
||||||
name: grocy
|
name: blog
|
||||||
port:
|
port:
|
||||||
number: 80
|
number: 8080
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: Namespace
|
kind: Namespace
|
||||||
metadata:
|
metadata:
|
||||||
name: grocy
|
name: blog
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: NetworkPolicy
|
||||||
|
metadata:
|
||||||
|
name: default-deny-ingress
|
||||||
|
namespace: blog
|
||||||
|
spec:
|
||||||
|
podSelector: {}
|
||||||
|
policyTypes:
|
||||||
|
- Ingress
|
||||||
|
---
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: NetworkPolicy
|
||||||
|
metadata:
|
||||||
|
name: allow-ingress-controller
|
||||||
|
namespace: blog
|
||||||
|
spec:
|
||||||
|
podSelector:
|
||||||
|
matchLabels:
|
||||||
|
app: blog
|
||||||
|
policyTypes:
|
||||||
|
- Ingress
|
||||||
|
ingress:
|
||||||
|
- from:
|
||||||
|
- namespaceSelector:
|
||||||
|
matchLabels:
|
||||||
|
kubernetes.io/metadata.name: traefik
|
||||||
@@ -0,0 +1,24 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: blog-git-credentials
|
||||||
|
namespace: blog
|
||||||
|
stringData:
|
||||||
|
GITSYNC_USERNAME: ENC[AES256_GCM,data:6cZnsgZ53xsU,iv:j2qvZr+odimHPnlMKz9xTe8q+zXvyRDF9spH8TkcmBw=,tag:ik6DJ4cMfcNc5UHY5vRy3A==,type:str]
|
||||||
|
GITSYNC_PASSWORD: ENC[AES256_GCM,data:mjQJuOuH2YQ1i1JVO+lFZ7WYLmy4RjCi2xZRErU5hRNi2SdgRo0fwg==,iv:9pl3nVmlnynJ4jMke1Hy4ACBuMyM+65vmGR2kS705I0=,tag:K1dQ9YwVN0sZjieAOU3KWw==,type:str]
|
||||||
|
GITSYNC_REPO: ENC[AES256_GCM,data:ETjdkCP/PSa6HSD9M6JdvWbci/lRwegzzyuPb/IQmX58sxwqT2gUjooVKtcylzsE,iv:kOpvSQYznyxfmLjrehdRuEtwevoceDo0h/vbXTuu/i8=,tag:x+DEmoZUxRN6OksDJ9mQIQ==,type:str]
|
||||||
|
sops:
|
||||||
|
age:
|
||||||
|
- enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBYR3FFRWdPajVzbjZGem1N
|
||||||
|
OXA2aVhtSWRxQUpGcDFxLzBFQWkyMlh5L2pvCkgvM25IVTBqSFZ3QmJDaGxqSTJ2
|
||||||
|
blQyOTQwaThRbkhzZ01uUmVoaXg5VHMKLS0tIHJJWlJoSmRXRi90M2VHSTlvdnBH
|
||||||
|
VjRWTHRSWUE0VFpqakwxUmx3aENqYUUK21JXxrt792sHoI2TCYU3aIQKKLL9f8oq
|
||||||
|
1o+qkueVYSYmVetrqcjSWqfGE496BYi+pd4a0mmRwaLpLCZIIgtlvA==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
recipient: age1zffnskvuezntkk703a0pyxsd5m8vx2hm33dr47wdfy8mn4fdw4sqgw0jgc
|
||||||
|
encrypted_regex: ^(data|stringData|email)$
|
||||||
|
lastmodified: "2026-05-11T19:25:53Z"
|
||||||
|
mac: ENC[AES256_GCM,data:jK/48Q7INbbcjZWASbS7ob1RrfDNm27jGnm1taL7hEMDC0k7n3igqlqSHmy7ZxCeUUe3Y+s7Jv9Ss1xITEPoUEYFphGrYeDUBVNtVfhBavTEaTPAuEv7WRA8xGpjXH0t9ernwwMyMQJRatazgX2jcc3rfzHMshs7cf5oeov15Zk=,iv:lg0ad1nDFDHBPv8Xvsn63V7SDPMo1p47gvSNFGJGw1I=,tag:fXatyOSOD/rCjEcpvDQpAw==,type:str]
|
||||||
|
version: 3.13.0
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: blog
|
||||||
|
namespace: blog
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
app: blog
|
||||||
|
ports:
|
||||||
|
- port: 8080
|
||||||
|
targetPort: 8080
|
||||||
|
name: http
|
||||||
@@ -1,78 +0,0 @@
|
|||||||
# CryptPad Deployment TODO
|
|
||||||
|
|
||||||
## 1. Generate OIDC secret and update both configs
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Generate a random secret
|
|
||||||
openssl rand -base64 32
|
|
||||||
|
|
||||||
# Hash it for Authelia
|
|
||||||
docker run --rm authelia/authelia:latest authelia crypto hash generate pbkdf2 --variant sha512 --password 'YOUR_SECRET'
|
|
||||||
```
|
|
||||||
|
|
||||||
- [+] Decrypt Authelia configmap: `cd kubernetes && sops -d -i infrastructure/controllers/authelia/configmap.sops.yaml`
|
|
||||||
- [+] Replace `REPLACE_WITH_PBKDF2_HASH` with the generated hash
|
|
||||||
- [+] Re-encrypt: `sops -e -i infrastructure/controllers/authelia/configmap.sops.yaml`
|
|
||||||
- [+] Decrypt CryptPad secret: `sops -d -i app/cryptpad/secret.sops.yaml`
|
|
||||||
- [+] Replace `REPLACE_WITH_CRYPTPAD_OIDC_SECRET` with the plaintext secret
|
|
||||||
- [+] Re-encrypt: `sops -e -i app/cryptpad/secret.sops.yaml`
|
|
||||||
|
|
||||||
## 2. Fill in and encrypt backup secret
|
|
||||||
|
|
||||||
```bash
|
|
||||||
cd kubernetes && sops -d -i app/cryptpad/secret-backup.sops.yaml
|
|
||||||
```
|
|
||||||
|
|
||||||
- [+] Replace `REPLACE_REST_PASSWORD` with the password for the `cryptpad` htpasswd user on rest-server
|
|
||||||
- [+] Replace `REPLACE_WITH_STRONG_PASSWORD` x2 with restic repo passwords for NAS and B2
|
|
||||||
- [+] Replace `REPLACE_WITH_B2_KEY_ID` with Backblaze B2 application key ID
|
|
||||||
- [+] Replace `REPLACE_WITH_B2_APPLICATION_KEY` with Backblaze B2 application key
|
|
||||||
- [+] Re-encrypt: `sops -e -i app/cryptpad/secret-backup.sops.yaml`
|
|
||||||
|
|
||||||
## 3. Create NFS directories on Synology
|
|
||||||
|
|
||||||
SSH into Synology and run:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
mkdir -p /volume3/k8s-storage/cryptpad-data
|
|
||||||
mkdir -p /volume3/k8s-storage/cryptpad-config
|
|
||||||
```
|
|
||||||
|
|
||||||
- [+] Directories created
|
|
||||||
|
|
||||||
## 4. Set up restic repos and htpasswd user
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Generate htpasswd entry and append to /volume1/docker/rest-server/config/htpasswd on Synology
|
|
||||||
docker run --rm httpd:2-alpine htpasswd -nbB cryptpad 'YOUR_REST_PASSWORD'
|
|
||||||
|
|
||||||
# Init Synology repos
|
|
||||||
restic -r "rest:http://cryptpad:PASSWORD@synology.storage.lviv:8888/cryptpad-data/" init
|
|
||||||
restic -r "rest:http://cryptpad:PASSWORD@synology.storage.lviv:8888/cryptpad-config/" init
|
|
||||||
|
|
||||||
# Init B2 repos
|
|
||||||
B2_ACCOUNT_ID=... B2_ACCOUNT_KEY=... restic -r "b2:berezovskyi-backup-homelab-cryptpad:/data/" init
|
|
||||||
B2_ACCOUNT_ID=... B2_ACCOUNT_KEY=... restic -r "b2:berezovskyi-backup-homelab-cryptpad:/config/" init
|
|
||||||
```
|
|
||||||
|
|
||||||
- [+] cryptpad htpasswd user added to rest-server
|
|
||||||
- [+] Synology repos initialised
|
|
||||||
- [+] B2 repos initialised
|
|
||||||
|
|
||||||
## 5. Commit, push and verify deployment
|
|
||||||
|
|
||||||
- [ ] Commit and push all changes
|
|
||||||
- [ ] Pod comes up healthy (first start is slow: OnlyOffice download + SSO plugin clone):
|
|
||||||
```bash
|
|
||||||
kubectl get pods -n cryptpad -w
|
|
||||||
kubectl logs -n cryptpad -l app=cryptpad --tail=50 -f
|
|
||||||
```
|
|
||||||
- [ ] Both domains resolve with valid TLS:
|
|
||||||
- https://cryptpad.berezovskyi.dev
|
|
||||||
- https://sandbox.cryptpad.berezovskyi.dev
|
|
||||||
- [ ] OIDC login works: "Register with Authelia" button appears and completes successfully
|
|
||||||
- [ ] Run a backup job manually to verify repos:
|
|
||||||
```bash
|
|
||||||
kubectl create job -n cryptpad --from=cronjob/cryptpad-data-backup test-backup-data
|
|
||||||
kubectl logs -n cryptpad -l job-name=test-backup-data -f
|
|
||||||
```
|
|
||||||
@@ -1,63 +0,0 @@
|
|||||||
apiVersion: v1
|
|
||||||
kind: ConfigMap
|
|
||||||
metadata:
|
|
||||||
name: cryptpad-config
|
|
||||||
namespace: cryptpad
|
|
||||||
data:
|
|
||||||
application_config.js: |
|
|
||||||
(() => {
|
|
||||||
const factory = (AppConfig) => {
|
|
||||||
AppConfig.registeredOnlyTypes = AppConfig.availablePadTypes;
|
|
||||||
AppConfig.disableAnonymousPadCreation = true;
|
|
||||||
AppConfig.disableAnonymousStore = true;
|
|
||||||
|
|
||||||
return AppConfig;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
if (typeof(module) !== 'undefined' && module.exports) {
|
|
||||||
module.exports = factory(
|
|
||||||
require('../www/common/application_config_internal.js')
|
|
||||||
);
|
|
||||||
} else if ((typeof(define) !== 'undefined' && define !== null) && (define.amd !== null)) {
|
|
||||||
define(['/common/application_config_internal.js'], factory);
|
|
||||||
}
|
|
||||||
|
|
||||||
})();
|
|
||||||
|
|
||||||
config.js: |
|
|
||||||
module.exports = {
|
|
||||||
httpUnsafeOrigin: 'https://${CRYPTPAD_HOST}',
|
|
||||||
httpSafeOrigin: 'https://${CRYPTPAD_SANDBOX_HOST}',
|
|
||||||
httpAddress: '0.0.0.0',
|
|
||||||
//httpPort: 3000,
|
|
||||||
//httpSafePort: 3001,
|
|
||||||
// websocketPort: 3003,
|
|
||||||
// maxWorkers: 4,
|
|
||||||
//otpSessionExpiration: 7*24, // hours
|
|
||||||
//enforceMFA: false,
|
|
||||||
//logIP: false,
|
|
||||||
adminKeys: [
|
|
||||||
"[oleksandr@cryptpad.berezovskyi.dev/wiMN+oF1CaWHMaWxv11M+xqvnjXfNgshqoKIvEcG9Ss=]"
|
|
||||||
],
|
|
||||||
//inactiveTime: 90, // days
|
|
||||||
//archiveRetentionTime: 15,
|
|
||||||
//accountRetentionTime: 365,
|
|
||||||
//disableIntegratedEviction: true,
|
|
||||||
//maxUploadSize: 20 * 1024 * 1024,
|
|
||||||
//premiumUploadSize: 100 * 1024 * 1024,
|
|
||||||
filePath: './datastore/',
|
|
||||||
archivePath: './data/archive',
|
|
||||||
pinPath: './data/pins',
|
|
||||||
taskPath: './data/tasks',
|
|
||||||
blockPath: './block',
|
|
||||||
blobPath: './blob',
|
|
||||||
blobStagingPath: './data/blobstage',
|
|
||||||
decreePath: './data/decrees',
|
|
||||||
logPath: './data/logs',
|
|
||||||
logToStdout: true,
|
|
||||||
logLevel: 'verbose',
|
|
||||||
logFeedback: false,
|
|
||||||
verbose: true,
|
|
||||||
installMethod: 'docker',
|
|
||||||
};
|
|
||||||
@@ -1,123 +0,0 @@
|
|||||||
# Backs up user data (blob, datastore, data, block directories)
|
|
||||||
apiVersion: batch/v1
|
|
||||||
kind: CronJob
|
|
||||||
metadata:
|
|
||||||
name: cryptpad-data-backup
|
|
||||||
namespace: cryptpad
|
|
||||||
labels:
|
|
||||||
app: cryptpad-backup
|
|
||||||
spec:
|
|
||||||
schedule: "0 2 * * *"
|
|
||||||
concurrencyPolicy: Forbid
|
|
||||||
successfulJobsHistoryLimit: 3
|
|
||||||
failedJobsHistoryLimit: 3
|
|
||||||
jobTemplate:
|
|
||||||
spec:
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
app: cryptpad-backup
|
|
||||||
spec:
|
|
||||||
restartPolicy: OnFailure
|
|
||||||
containers:
|
|
||||||
- name: resticprofile
|
|
||||||
image: creativeprojects/resticprofile:0.32.0
|
|
||||||
command:
|
|
||||||
- sh
|
|
||||||
- -c
|
|
||||||
- |
|
|
||||||
resticprofile -c /secrets/profiles.yaml -n cryptpad-data backup
|
|
||||||
resticprofile -c /secrets/profiles.yaml -n cryptpad-data copy
|
|
||||||
env:
|
|
||||||
- name: B2_ACCOUNT_ID
|
|
||||||
valueFrom:
|
|
||||||
secretKeyRef:
|
|
||||||
name: cryptpad-backup-config
|
|
||||||
key: B2_ACCOUNT_ID
|
|
||||||
- name: B2_ACCOUNT_KEY
|
|
||||||
valueFrom:
|
|
||||||
secretKeyRef:
|
|
||||||
name: cryptpad-backup-config
|
|
||||||
key: B2_ACCOUNT_KEY
|
|
||||||
volumeMounts:
|
|
||||||
- name: secrets
|
|
||||||
mountPath: /secrets
|
|
||||||
readOnly: true
|
|
||||||
- name: data
|
|
||||||
mountPath: /backup-data
|
|
||||||
readOnly: true
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
cpu: 100m
|
|
||||||
memory: 256Mi
|
|
||||||
limits:
|
|
||||||
memory: 1Gi
|
|
||||||
volumes:
|
|
||||||
- name: secrets
|
|
||||||
secret:
|
|
||||||
secretName: cryptpad-backup-config
|
|
||||||
- name: data
|
|
||||||
persistentVolumeClaim:
|
|
||||||
claimName: cryptpad-data
|
|
||||||
---
|
|
||||||
# Backs up config and customization directories
|
|
||||||
apiVersion: batch/v1
|
|
||||||
kind: CronJob
|
|
||||||
metadata:
|
|
||||||
name: cryptpad-config-backup
|
|
||||||
namespace: cryptpad
|
|
||||||
labels:
|
|
||||||
app: cryptpad-backup
|
|
||||||
spec:
|
|
||||||
schedule: "0 3 * * *"
|
|
||||||
concurrencyPolicy: Forbid
|
|
||||||
successfulJobsHistoryLimit: 3
|
|
||||||
failedJobsHistoryLimit: 3
|
|
||||||
jobTemplate:
|
|
||||||
spec:
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
app: cryptpad-backup
|
|
||||||
spec:
|
|
||||||
restartPolicy: OnFailure
|
|
||||||
containers:
|
|
||||||
- name: resticprofile
|
|
||||||
image: creativeprojects/resticprofile:0.32.0
|
|
||||||
command:
|
|
||||||
- sh
|
|
||||||
- -c
|
|
||||||
- |
|
|
||||||
resticprofile -c /secrets/profiles.yaml -n cryptpad-config backup
|
|
||||||
resticprofile -c /secrets/profiles.yaml -n cryptpad-config copy
|
|
||||||
env:
|
|
||||||
- name: B2_ACCOUNT_ID
|
|
||||||
valueFrom:
|
|
||||||
secretKeyRef:
|
|
||||||
name: cryptpad-backup-config
|
|
||||||
key: B2_ACCOUNT_ID
|
|
||||||
- name: B2_ACCOUNT_KEY
|
|
||||||
valueFrom:
|
|
||||||
secretKeyRef:
|
|
||||||
name: cryptpad-backup-config
|
|
||||||
key: B2_ACCOUNT_KEY
|
|
||||||
volumeMounts:
|
|
||||||
- name: secrets
|
|
||||||
mountPath: /secrets
|
|
||||||
readOnly: true
|
|
||||||
- name: config
|
|
||||||
mountPath: /backup-config
|
|
||||||
readOnly: true
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
cpu: 50m
|
|
||||||
memory: 128Mi
|
|
||||||
limits:
|
|
||||||
memory: 512Mi
|
|
||||||
volumes:
|
|
||||||
- name: secrets
|
|
||||||
secret:
|
|
||||||
secretName: cryptpad-backup-config
|
|
||||||
- name: config
|
|
||||||
persistentVolumeClaim:
|
|
||||||
claimName: cryptpad-config
|
|
||||||
@@ -1,175 +0,0 @@
|
|||||||
apiVersion: apps/v1
|
|
||||||
kind: Deployment
|
|
||||||
metadata:
|
|
||||||
name: cryptpad
|
|
||||||
namespace: cryptpad
|
|
||||||
labels:
|
|
||||||
app: cryptpad
|
|
||||||
spec:
|
|
||||||
replicas: 1
|
|
||||||
strategy:
|
|
||||||
type: Recreate
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
app: cryptpad
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
app: cryptpad
|
|
||||||
spec:
|
|
||||||
securityContext:
|
|
||||||
runAsUser: 4001
|
|
||||||
runAsGroup: 4001
|
|
||||||
runAsNonRoot: true
|
|
||||||
seccompProfile:
|
|
||||||
type: RuntimeDefault
|
|
||||||
initContainers:
|
|
||||||
# # Create required subdirectories on NFS volumes before subPath mounts are used
|
|
||||||
# - name: init-dirs
|
|
||||||
# image: busybox:1.36
|
|
||||||
# securityContext:
|
|
||||||
# runAsUser: 0
|
|
||||||
# runAsNonRoot: false
|
|
||||||
# command:
|
|
||||||
# - sh
|
|
||||||
# - -c
|
|
||||||
# - |
|
|
||||||
# mkdir -p /data/blob /data/datastore /data/data /data/block /data/onlyoffice
|
|
||||||
# mkdir -p /config/customize
|
|
||||||
# chown -R 4001:4001 /data /config
|
|
||||||
# volumeMounts:
|
|
||||||
# - name: data
|
|
||||||
# mountPath: /data
|
|
||||||
# - name: config
|
|
||||||
# mountPath: /config
|
|
||||||
|
|
||||||
# Clone the official CryptPad SSO plugin into an emptyDir shared with the main container
|
|
||||||
- name: install-sso-plugin
|
|
||||||
image: alpine/git:v2.47.2
|
|
||||||
securityContext:
|
|
||||||
runAsUser: 0
|
|
||||||
runAsNonRoot: false
|
|
||||||
command:
|
|
||||||
- sh
|
|
||||||
- -c
|
|
||||||
- |
|
|
||||||
git clone --depth=1 https://github.com/cryptpad/sso /plugin
|
|
||||||
chown -R 4001:4001 /plugin
|
|
||||||
volumeMounts:
|
|
||||||
- name: sso-plugin
|
|
||||||
mountPath: /plugin
|
|
||||||
|
|
||||||
containers:
|
|
||||||
- name: cryptpad
|
|
||||||
image: cryptpad/cryptpad:version-2026.2.0
|
|
||||||
ports:
|
|
||||||
- containerPort: 3000
|
|
||||||
name: http
|
|
||||||
protocol: TCP
|
|
||||||
- containerPort: 3003
|
|
||||||
name: api
|
|
||||||
protocol: TCP
|
|
||||||
env:
|
|
||||||
- name: CPAD_CONF
|
|
||||||
value: "/cryptpad/config/config.js"
|
|
||||||
- name: CPAD_MAIN_DOMAIN
|
|
||||||
value: "https://${CRYPTPAD_HOST}"
|
|
||||||
- name: CPAD_SANDBOX_DOMAIN
|
|
||||||
value: "https://${CRYPTPAD_SANDBOX_HOST}"
|
|
||||||
# Trust the Traefik pod CIDR so CryptPad sees real client IPs.
|
|
||||||
# Adjust if your pod CIDR is different.
|
|
||||||
- name: CPAD_TRUSTED_PROXY
|
|
||||||
value: "10.0.0.0/8"
|
|
||||||
- name: CPAD_REALIP_HEADER
|
|
||||||
value: "X-Forwarded-For"
|
|
||||||
- name: CPAD_REALIP_RECURSIVE
|
|
||||||
value: "on"
|
|
||||||
# Downloads and installs OnlyOffice frontend on first start (persisted via data PVC).
|
|
||||||
# First startup will be slower while OnlyOffice assets are fetched.
|
|
||||||
- name: CPAD_INSTALL_ONLYOFFICE
|
|
||||||
value: "yes"
|
|
||||||
volumeMounts:
|
|
||||||
# User data — split into subdirs on a single NFS PVC
|
|
||||||
- name: data
|
|
||||||
mountPath: /cryptpad/blob
|
|
||||||
subPath: blob
|
|
||||||
- name: data
|
|
||||||
mountPath: /cryptpad/datastore
|
|
||||||
subPath: datastore
|
|
||||||
- name: data
|
|
||||||
mountPath: /cryptpad/data
|
|
||||||
subPath: data
|
|
||||||
- name: data
|
|
||||||
mountPath: /cryptpad/block
|
|
||||||
subPath: block
|
|
||||||
# Customization (branding, themes) — persisted on NFS
|
|
||||||
- name: config
|
|
||||||
mountPath: /cryptpad/customize
|
|
||||||
subPath: customize
|
|
||||||
# OnlyOffice dist — local-path (not NFS): rdfind uses hard links which
|
|
||||||
# require a real filesystem, and scanning NFS for dedup is very slow
|
|
||||||
- name: onlyoffice
|
|
||||||
mountPath: /cryptpad/www/common/onlyoffice/dist
|
|
||||||
# SSO plugin — freshly cloned by init container on each pod start
|
|
||||||
- name: sso-plugin
|
|
||||||
mountPath: /cryptpad/lib/plugins/sso
|
|
||||||
# sso.js mounted directly from the secret — overlays the NFS config dir
|
|
||||||
# at this specific file path, no init container needed
|
|
||||||
- name: sso-secret
|
|
||||||
mountPath: /cryptpad/config/sso.js
|
|
||||||
subPath: sso.js
|
|
||||||
readOnly: true
|
|
||||||
- name: application-config
|
|
||||||
mountPath: /cryptpad/customize/application_config.js
|
|
||||||
subPath: application_config.js
|
|
||||||
readOnly: true
|
|
||||||
- name: application-config
|
|
||||||
mountPath: /cryptpad/config/config.js
|
|
||||||
subPath: config.js
|
|
||||||
readOnly: true
|
|
||||||
# npm run build runs on every start and can take several minutes.
|
|
||||||
# startupProbe absorbs that time; liveness/readiness take over once up.
|
|
||||||
startupProbe:
|
|
||||||
httpGet:
|
|
||||||
port: 3000
|
|
||||||
path: /
|
|
||||||
failureThreshold: 120
|
|
||||||
periodSeconds: 60
|
|
||||||
livenessProbe:
|
|
||||||
httpGet:
|
|
||||||
port: 3000
|
|
||||||
path: /
|
|
||||||
periodSeconds: 30
|
|
||||||
readinessProbe:
|
|
||||||
httpGet:
|
|
||||||
port: 3000
|
|
||||||
path: /
|
|
||||||
periodSeconds: 10
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
cpu: 100m
|
|
||||||
memory: 512Mi
|
|
||||||
limits:
|
|
||||||
memory: 2Gi
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
- name: data
|
|
||||||
persistentVolumeClaim:
|
|
||||||
claimName: cryptpad-data
|
|
||||||
- name: config
|
|
||||||
persistentVolumeClaim:
|
|
||||||
claimName: cryptpad-config
|
|
||||||
- name: sso-plugin
|
|
||||||
emptyDir: {}
|
|
||||||
- name: onlyoffice
|
|
||||||
persistentVolumeClaim:
|
|
||||||
claimName: cryptpad-onlyoffice
|
|
||||||
- name: sso-secret
|
|
||||||
secret:
|
|
||||||
secretName: cryptpad-credentials
|
|
||||||
items:
|
|
||||||
- key: sso.js
|
|
||||||
path: sso.js
|
|
||||||
- name: application-config
|
|
||||||
configMap:
|
|
||||||
name: cryptpad-config
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
apiVersion: networking.k8s.io/v1
|
|
||||||
kind: Ingress
|
|
||||||
metadata:
|
|
||||||
name: cryptpad
|
|
||||||
namespace: cryptpad
|
|
||||||
annotations:
|
|
||||||
cert-manager.io/cluster-issuer: letsencrypt
|
|
||||||
# No Traefik auth middleware — authentication is handled natively via the OIDC SSO plugin
|
|
||||||
spec:
|
|
||||||
tls:
|
|
||||||
- hosts:
|
|
||||||
- ${CRYPTPAD_HOST}
|
|
||||||
secretName: cryptpad-tls
|
|
||||||
rules:
|
|
||||||
- host: ${CRYPTPAD_HOST}
|
|
||||||
http:
|
|
||||||
paths:
|
|
||||||
- path: /
|
|
||||||
pathType: Prefix
|
|
||||||
backend:
|
|
||||||
service:
|
|
||||||
name: cryptpad
|
|
||||||
port:
|
|
||||||
number: 3000
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
apiVersion: networking.k8s.io/v1
|
|
||||||
kind: Ingress
|
|
||||||
metadata:
|
|
||||||
name: cryptpad-sandbox
|
|
||||||
namespace: cryptpad
|
|
||||||
annotations:
|
|
||||||
cert-manager.io/cluster-issuer: letsencrypt
|
|
||||||
# The sandbox domain is required by CryptPad for CSP isolation of embedded content.
|
|
||||||
# It must be a different origin from the main domain but points to the same backend.
|
|
||||||
# No auth middleware — this domain serves sandboxed iframes with restrictive CSP headers.
|
|
||||||
spec:
|
|
||||||
tls:
|
|
||||||
- hosts:
|
|
||||||
- ${CRYPTPAD_SANDBOX_HOST}
|
|
||||||
secretName: cryptpad-sandbox-tls
|
|
||||||
rules:
|
|
||||||
- host: ${CRYPTPAD_SANDBOX_HOST}
|
|
||||||
http:
|
|
||||||
paths:
|
|
||||||
- path: /
|
|
||||||
pathType: Prefix
|
|
||||||
backend:
|
|
||||||
service:
|
|
||||||
name: cryptpad
|
|
||||||
port:
|
|
||||||
number: 3000
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
# Default deny all ingress
|
|
||||||
apiVersion: networking.k8s.io/v1
|
|
||||||
kind: NetworkPolicy
|
|
||||||
metadata:
|
|
||||||
name: default-deny-ingress
|
|
||||||
namespace: cryptpad
|
|
||||||
spec:
|
|
||||||
podSelector: {}
|
|
||||||
policyTypes:
|
|
||||||
- Ingress
|
|
||||||
---
|
|
||||||
# Allow Traefik to reach the CryptPad pod (both HTTP and API/WebSocket ports)
|
|
||||||
apiVersion: networking.k8s.io/v1
|
|
||||||
kind: NetworkPolicy
|
|
||||||
metadata:
|
|
||||||
name: allow-ingress-controller
|
|
||||||
namespace: cryptpad
|
|
||||||
spec:
|
|
||||||
podSelector:
|
|
||||||
matchLabels:
|
|
||||||
app: cryptpad
|
|
||||||
policyTypes:
|
|
||||||
- Ingress
|
|
||||||
ingress:
|
|
||||||
- from:
|
|
||||||
- namespaceSelector:
|
|
||||||
matchLabels:
|
|
||||||
kubernetes.io/metadata.name: traefik
|
|
||||||
ports:
|
|
||||||
- port: 3000
|
|
||||||
- port: 3003
|
|
||||||
---
|
|
||||||
# Allow backup pods egress to Synology (restic rest-server), B2, and DNS
|
|
||||||
apiVersion: networking.k8s.io/v1
|
|
||||||
kind: NetworkPolicy
|
|
||||||
metadata:
|
|
||||||
name: allow-backup-egress
|
|
||||||
namespace: cryptpad
|
|
||||||
spec:
|
|
||||||
podSelector:
|
|
||||||
matchLabels:
|
|
||||||
app: cryptpad-backup
|
|
||||||
policyTypes:
|
|
||||||
- Egress
|
|
||||||
egress:
|
|
||||||
- ports:
|
|
||||||
- port: 53
|
|
||||||
protocol: UDP
|
|
||||||
- port: 53
|
|
||||||
protocol: TCP
|
|
||||||
- ports:
|
|
||||||
- port: 8000
|
|
||||||
protocol: TCP
|
|
||||||
- ports:
|
|
||||||
- port: 443
|
|
||||||
protocol: TCP
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
apiVersion: v1
|
|
||||||
kind: PersistentVolume
|
|
||||||
metadata:
|
|
||||||
name: cryptpad-config-nfs
|
|
||||||
spec:
|
|
||||||
capacity:
|
|
||||||
storage: 10Gi
|
|
||||||
accessModes:
|
|
||||||
- ReadWriteOnce
|
|
||||||
storageClassName: ""
|
|
||||||
persistentVolumeReclaimPolicy: Retain
|
|
||||||
mountOptions:
|
|
||||||
- hard
|
|
||||||
- noatime
|
|
||||||
- timeo=30
|
|
||||||
- retrans=3
|
|
||||||
nfs:
|
|
||||||
server: synology.storage.lviv
|
|
||||||
path: ${CRYPTPAD_CONFIG_NFS_PATH}
|
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: PersistentVolumeClaim
|
|
||||||
metadata:
|
|
||||||
name: cryptpad-config
|
|
||||||
namespace: cryptpad
|
|
||||||
spec:
|
|
||||||
accessModes:
|
|
||||||
- ReadWriteOnce
|
|
||||||
storageClassName: ""
|
|
||||||
volumeName: cryptpad-config-nfs
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
storage: 10Gi
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
apiVersion: v1
|
|
||||||
kind: PersistentVolume
|
|
||||||
metadata:
|
|
||||||
name: cryptpad-data-nfs
|
|
||||||
spec:
|
|
||||||
capacity:
|
|
||||||
storage: 100Gi
|
|
||||||
accessModes:
|
|
||||||
- ReadWriteOnce
|
|
||||||
storageClassName: ""
|
|
||||||
persistentVolumeReclaimPolicy: Retain
|
|
||||||
mountOptions:
|
|
||||||
- hard
|
|
||||||
- noatime
|
|
||||||
- timeo=30
|
|
||||||
- retrans=3
|
|
||||||
nfs:
|
|
||||||
server: synology.storage.lviv
|
|
||||||
path: ${CRYPTPAD_DATA_NFS_PATH}
|
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: PersistentVolumeClaim
|
|
||||||
metadata:
|
|
||||||
name: cryptpad-data
|
|
||||||
namespace: cryptpad
|
|
||||||
spec:
|
|
||||||
accessModes:
|
|
||||||
- ReadWriteOnce
|
|
||||||
storageClassName: ""
|
|
||||||
volumeName: cryptpad-data-nfs
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
storage: 100Gi
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
apiVersion: v1
|
|
||||||
kind: PersistentVolumeClaim
|
|
||||||
metadata:
|
|
||||||
name: cryptpad-onlyoffice
|
|
||||||
namespace: cryptpad
|
|
||||||
spec:
|
|
||||||
accessModes:
|
|
||||||
- ReadWriteOnce
|
|
||||||
storageClassName: local-path
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
storage: 5Gi
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
apiVersion: v1
|
|
||||||
kind: Secret
|
|
||||||
metadata:
|
|
||||||
name: cryptpad-backup-config
|
|
||||||
namespace: cryptpad
|
|
||||||
stringData:
|
|
||||||
profiles.yaml: ENC[AES256_GCM,data:8t3Vx7GUX059eX6nxypFx/VacLL+hMy+muF3cybpSMNt5cQXONoUrFQnjW1VkWRgk/n/fqVa80HmT3g1JCeUBwNVDsM9DfH0VCiJxoMYrpDmYObkt82RUMnojhG6afPVPEduvaccOAjyslGnZAMAuQT+DIO/C8wayYDQJcIXJZeHorRJR/4P358EWw7h/p6ylNXGWPiI7IsIn0zsaePD3mshoA4ix+pUbBztTSk3Ij7iiGqltYIZkq8QYkOy4oiAmFTLxIlZfEfrMXrkOaHuvkGd1uftX3VfzJAaLmbGP5sEdkAPawYmGWLnU+ObFSL31zkbTCKhNtEwzQbDmw5RC4srVMj6UttDDs7LBzGZh/HUuXoKb+DIBlYV9siGwZH3bLrg7XoXVi2BimKPAQELlAtOfvOe7NZ8cBE34cCvd3MiZqN37uZYdx2sRHFPJp6PyWbglG2TIqj/J1lPKdZOMG7NpEvc2WXi8ltWjtNmDNjoLsaUh5+e3TqLIYkdd4BxwN0sEJFU/apyyGcS5/2TED0ZgBPINvdCVApTagNwIWjmi11VH2r5hxkb2OnZkwRjsyujmSexaFdS7jjBDXZNg6x1Q4vgBb70iCfTPqAGQyFkTpf3+AKopuPgto9LLztmmC7e4Q08D1ncDGatGRrgIXDhhhhFnbTKdle53gQKLWi8THxIF1/nlvu07zn+HYP5sWG38No2kpMJwCXeUoqXwHhcgVRlAyPka6ip+zWOyg/qdcJU4k4sCW4+DkrdwUHOCiT/0wYRMdeoDRJDLVS/5OESl3HboIQSTxDhgUid0iGH3zr35zwa3DR4mMXYPkh+Nodsp0oh5aG0lIDGrz+6lOVznYUTate1CVm3HN2zQPRyuTPMxILsEVC44qQ3KyR55VgZhwER2418wg68VFQA1uT8HTPEVZFPRgxdK4amIHr7cnC2B67/X0oeHJNbDEc0EAkEx8v08HklJQELNMNInRySW1UnBQOIWo3rl0PsZgyecWnK9vdwPjfEyzr8DVlfm7rGMNTWc7iIPwYom9jLHh4IgOU5TEVatwkd+zMS8ZeHPeFEdL/bf0YbdBqir8+X9ERSkG41OQGYL5Rhx3XM6oExfA4hGGqAEXfGTCAqIljkyKzo7280sIdkDvEBq+FMnCJ+APCSoPqNQUqZpEmWG/XP+Q+bgo5Pb32vlxL8dwcVmuiuu0cndW7gzA6YgfCRfTmGTNjW43J/h5ODBa8Vhu2WNiRMwCzH72ExOvwgKEBeP1LPHVcMLT0f/CMItcpzkuGwzlitZMAm2nmCdSB71hdtsKD6x5hIzhsDCAzZz6VCUF+NAgjOyks3urlDiBhyMnzetXnDgtLB1kL8qwIHOvWQoF5S50KrCbHTNJUhBWBJzRom7oZJOdyHwo7MmSMvRWTY5xA09umSia6/qyDlGeCHDYx/C8i3/WGUGsVKB2EzsfY=,iv:z79twnVkLyonYaOgz2f4ZW7noMlDxZgDRqYySBj+Mlk=,tag:2W0mtSBGiqgWPKDyZrKYRg==,type:str]
|
|
||||||
restic-password-nas: ENC[AES256_GCM,data:0g81dj/gNwnBPkbVXR1o5mZ4axAhnL7YwSNcnE2fI1DWly4cO3kNyxta5OdgTAGZwNeiT+qaOFi6HXHn9fSHlQ==,iv:OZEza2gkiygZ1KzvD3MJZ/JXIrfbcZenKcOJfMlEjvM=,tag:rnJ8sFQgzD6g3pEHRQLg3A==,type:str]
|
|
||||||
restic-password-b2: ENC[AES256_GCM,data:sazn2f09uZsFU1/MY30iPj0gx9pSFvcy/JgHsXTLMFbq5OimAfHsiYR1nMf2mQ8GwqMtQTF4t0lkfDnmy/8Qyg==,iv:HOI8oohNCCtP/heNBCQ5HEKfRVdMalv3MU/puRkOQ4A=,tag:aLKeUbwED2TjeAfkydj+MQ==,type:str]
|
|
||||||
B2_ACCOUNT_ID: ENC[AES256_GCM,data:Jh4gWGGt5wVaVAMG5oWFXW7W0Taq9Qiyhw==,iv:XZtsiYUtFtSDhgLpG3uNIGLHWqGmCM3zHq2RUu6tdXM=,tag:KQfrBmkAYadVvhtgAzDNzw==,type:str]
|
|
||||||
B2_ACCOUNT_KEY: ENC[AES256_GCM,data:XI+P//Ti512rQfDgmV00Bq3Wxly6//ESBKsDItXdug==,iv:/xAPGSJIathFIwyWUQoBW2DwYBpHnJCElnRMe16Pf9s=,tag:xSh2kFbQnw+bpAbbQ3rHWQ==,type:str]
|
|
||||||
sops:
|
|
||||||
age:
|
|
||||||
- recipient: age1zffnskvuezntkk703a0pyxsd5m8vx2hm33dr47wdfy8mn4fdw4sqgw0jgc
|
|
||||||
enc: |
|
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBlVGM3NlRSenp4d05sTEdY
|
|
||||||
c0JkdW5Xd2RQU3I4SlVTczVRWnVaRUY5RHdnClM1QVlGR3lRWGZCVXR0RjR1Kzlh
|
|
||||||
ck4vLzNpeThIdmV4citIaFlVWnpFWXMKLS0tIHV2aWtSVTRxMzUrbldwQVRLRHE5
|
|
||||||
ajAzS2pINWIvQTc0T0FhMit6ZHNVRlkKW6hYD2mjAtZRyC8/fbSWiij1/clTB4br
|
|
||||||
sAmsCMBIDQf+r12TuzzpLiMnNOIU349GcYxuA24GWaEanordqCLz3A==
|
|
||||||
-----END AGE ENCRYPTED FILE-----
|
|
||||||
lastmodified: "2026-03-13T12:31:48Z"
|
|
||||||
mac: ENC[AES256_GCM,data:O+jD7jCBoQYNrRr+j/yn4YkGLaggHee8YVmvE5I5QXOB5pfPg09yQbuYj2IhKPBbVXl24ejlNDEAG3/qDaWgg1IlB+dKeTyrqxWq+mQ7vM9bgNRhf4ozS1lL3NR23V6JhilrosxTlFYCajerxdUbCh0vBXqsdJ0cIV8yggtQ7eY=,iv:gJkOvEFY4L/7qE3zMYnnon8XcGUegmcWKvKQ+/rxBVo=,tag:xQ1Qo7SgOs3N8451xX7Yxg==,type:str]
|
|
||||||
encrypted_regex: ^(data|stringData|email)$
|
|
||||||
version: 3.12.1
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
apiVersion: v1
|
|
||||||
kind: Secret
|
|
||||||
metadata:
|
|
||||||
name: cryptpad-credentials
|
|
||||||
namespace: cryptpad
|
|
||||||
stringData:
|
|
||||||
#ENC[AES256_GCM,data:s4VxDsDqwHw6ZhFNzA/mS+gdPwZlV5AcBDRUqfHTKSzjQPVg7unz7HkyfXtSBt36aH3P7fR9lUF1XtNvH9fF+6EfCa1dzIToSEw=,iv:TuYHrkjDFkA7fHhWzaHGrptyP5ClwiMArjoTf5LHXrQ=,tag:gvZxTmeeCEDTISgIpKxhhA==,type:comment]
|
|
||||||
#ENC[AES256_GCM,data:CXpQCo8r5GCE6lIpXpXlab0CEdMCuNC54Ynh4ahfE1fv2c49wNoiQNRQAjONbmhUoUIiUcCehNmuw/ZK5Fd3rvVUhXdUAKYo,iv:U6vrAHUz22QWSLxBYRFea+LXajuHIh8NlggB6DAoCjc=,tag:nnV8RMrNv+trUQgXpCvkJA==,type:comment]
|
|
||||||
#ENC[AES256_GCM,data:7TBFv3i2TzlyAcVhAdFE6T2F0E8pdAbYZorT6/brY8Ed+g6LvnwdVaYPcpJ7P6ETWXraqbhoktWICYklr35PAg==,iv:xsPinB1/gkzMHyzsrJ2gj8Fm0PWaIQbtBIB7fT1BTzI=,tag:O9dv+myneU7neE7JiRGuBQ==,type:comment]
|
|
||||||
sso.js: ENC[AES256_GCM,data:u1XHMXQKf6QtqqjzNx8LZIEZxKSWhVFZbgvKBqsGoKo7kve0nZynH/bYohVO3XDBtahBqDCgeAD/rj5OE2MlEhwF0OTfylpPmlDjD3tuwogMv2NSDwERzzGv2BvMY97kIRwbGP3OtHGEEGO32JmNKWInZH7BrazeX5gvNLKjHk8XtCN8jKxoJwGEYw7EM8s219iFyQISKjo9/yElv4JVlecIa1bcbzswRsgWqzjG3kBJ2HLRcnH4Nr8D8VCDEdO32GHS0Y9Z7b3eaaj0YQyWleyAfqlufktMcr+SFDSQy4sPnzFuydi7kPXRb6OVDZLaKMVA4422VEEsuAOcz5CUZIJAg5KhPz9lZsruRw3hZBTjhRE2G05TwsvJNwY005rVe2pHL/Q3OZRKNZIfXK34lOwnBQMnBPJvtogIT+hZUBBAyz82nuR8KuujsGLo4sJPC/Vuayg9CrwxbQRx7fit5sdu5djwvVleBKyayhbBaP23BZToB9znSNm5HCOpohpAg4OYXazRpLBGH6lHla1tZy7MpfnoltEOHjeBQoqpez3zBQ9zNichIuPVnIK0h1dqAjLlZc5n7d9L6AHDrzSRq40iOnuc4ZuATMXtmd1JynSrjCH4FYKtROV9V3JXUCK9GwnZ04D26rbwxCKKykHkABF4AFDvv4ZeJPvN+Ag6R8TuSG74qzRUjvBP1+2uR/y9IsN5dGviYKzGnVFvkD87RrF3nZQc40+C4CfAuP9xTLJPzZ0b1t6Qr3Q52LipSyOt/I04ULToOU4U7heEkpbZxJAWiAlgLskjy9TfL/OY1uyZT9ZanWAhRVBa0dk2h8I5p9a01XtR8X3sIqg41i1K3VqEcKGk7IQMf+WmiUdLef7qx6Gq3+Di067NJ7fKKNAN3IFGE/LBlBVaj1fQNOaCfjSJ/A==,iv:FSSJUe6ymLHIM5CQLVgemHX71Z7Bz609WsNkOs9QM1E=,tag:Wxdnfa6WXyXVxI3VjU6dMA==,type:str]
|
|
||||||
sops:
|
|
||||||
age:
|
|
||||||
- recipient: age1zffnskvuezntkk703a0pyxsd5m8vx2hm33dr47wdfy8mn4fdw4sqgw0jgc
|
|
||||||
enc: |
|
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB5Vm8xRmZ0WDJRMmNPVUxq
|
|
||||||
T3VQSUVUYnVER0FFVW5FYWFHaUV3S2daWFJvCmxLdWpLVHpnMWNQaTlDZ0VOZ0JL
|
|
||||||
K044cmpRZm50SmZNNWZlWjBDS1hGS2cKLS0tIGRxMnZTTWRRMlg5eVBOb3pVYUlK
|
|
||||||
clRoWlp2SjQrOGFjQW92VnQ4amxUMXMKMjcBWo44X+Y2kmwpKZcBsBZZkWQJZEOf
|
|
||||||
VscZUj8VAZKF9IxOmbBaFc2EBi5xI7sYJSJ+gaLHHKLhcSNu59P+kQ==
|
|
||||||
-----END AGE ENCRYPTED FILE-----
|
|
||||||
lastmodified: "2026-03-13T19:48:58Z"
|
|
||||||
mac: ENC[AES256_GCM,data:0mpN6sWiCHp3zVIKIdIEAnBEcczPb1YVfj4fae50JnJ4jF9ZZ6Wz4sQny00LKN59NFFHHM5bOa+ibqEXZ3pgtF0WQmmc5Sfn5w6n66L4mSJ0Pjx4akMJYjt5xMkRuLG996yZXg7pvSd3YrMgJEqf0hiexN+KJMLDqUwDIYpUHpc=,iv:BMIyWxc0k8SZTxS9/F3Vxfa4HY/WordDRQTfJmZZSI0=,tag:FpPT98LvKY2HgeBfZOw5TQ==,type:str]
|
|
||||||
encrypted_regex: ^(data|stringData|email)$
|
|
||||||
version: 3.12.1
|
|
||||||
@@ -1,17 +0,0 @@
|
|||||||
apiVersion: v1
|
|
||||||
kind: Service
|
|
||||||
metadata:
|
|
||||||
name: cryptpad
|
|
||||||
namespace: cryptpad
|
|
||||||
spec:
|
|
||||||
selector:
|
|
||||||
app: cryptpad
|
|
||||||
# Session affinity ensures WebSocket connections always reach the same pod
|
|
||||||
sessionAffinity: ClientIP
|
|
||||||
ports:
|
|
||||||
- port: 3000
|
|
||||||
targetPort: 3000
|
|
||||||
name: http
|
|
||||||
- port: 3003
|
|
||||||
targetPort: 3003
|
|
||||||
name: api
|
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: dawarich-redis
|
||||||
|
namespace: dawarich
|
||||||
|
labels:
|
||||||
|
app: dawarich-redis
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
strategy:
|
||||||
|
type: Recreate
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: dawarich-redis
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: dawarich-redis
|
||||||
|
spec:
|
||||||
|
securityContext:
|
||||||
|
runAsNonRoot: true
|
||||||
|
runAsUser: 999 # redis user in the alpine image
|
||||||
|
runAsGroup: 999
|
||||||
|
seccompProfile:
|
||||||
|
type: RuntimeDefault
|
||||||
|
containers:
|
||||||
|
- name: redis
|
||||||
|
image: redis:7.4.11-alpine
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
# Sidekiq job queue. Snapshots (as in upstream compose) survive container restarts;
|
||||||
|
# the emptyDir is lost with the pod, which only drops queued jobs.
|
||||||
|
args: ["--save", "900", "1", "--save", "300", "10", "--appendonly", "no"]
|
||||||
|
ports:
|
||||||
|
- containerPort: 6379
|
||||||
|
name: redis
|
||||||
|
volumeMounts:
|
||||||
|
- name: data
|
||||||
|
mountPath: /data
|
||||||
|
livenessProbe:
|
||||||
|
tcpSocket:
|
||||||
|
port: 6379
|
||||||
|
periodSeconds: 30
|
||||||
|
readinessProbe:
|
||||||
|
tcpSocket:
|
||||||
|
port: 6379
|
||||||
|
periodSeconds: 10
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 20m
|
||||||
|
memory: 32Mi
|
||||||
|
limits:
|
||||||
|
memory: 256Mi
|
||||||
|
volumes:
|
||||||
|
- name: data
|
||||||
|
emptyDir: {}
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
kind: Namespace
|
kind: Namespace
|
||||||
metadata:
|
metadata:
|
||||||
name: cryptpad
|
name: dawarich
|
||||||
@@ -0,0 +1,114 @@
|
|||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: NetworkPolicy
|
||||||
|
metadata:
|
||||||
|
name: default-deny-ingress
|
||||||
|
namespace: dawarich
|
||||||
|
spec:
|
||||||
|
podSelector: {}
|
||||||
|
policyTypes:
|
||||||
|
- Ingress
|
||||||
|
---
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: NetworkPolicy
|
||||||
|
metadata:
|
||||||
|
name: allow-ingress-controller
|
||||||
|
namespace: dawarich
|
||||||
|
spec:
|
||||||
|
podSelector:
|
||||||
|
matchLabels:
|
||||||
|
app: dawarich
|
||||||
|
policyTypes:
|
||||||
|
- Ingress
|
||||||
|
ingress:
|
||||||
|
- from:
|
||||||
|
- namespaceSelector:
|
||||||
|
matchLabels:
|
||||||
|
kubernetes.io/metadata.name: traefik
|
||||||
|
---
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: NetworkPolicy
|
||||||
|
metadata:
|
||||||
|
name: allow-app-to-db
|
||||||
|
namespace: dawarich
|
||||||
|
spec:
|
||||||
|
podSelector:
|
||||||
|
matchLabels:
|
||||||
|
app: dawarich-db
|
||||||
|
policyTypes:
|
||||||
|
- Ingress
|
||||||
|
ingress:
|
||||||
|
- from:
|
||||||
|
- podSelector:
|
||||||
|
matchLabels:
|
||||||
|
app: dawarich
|
||||||
|
ports:
|
||||||
|
- port: 5432
|
||||||
|
---
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: NetworkPolicy
|
||||||
|
metadata:
|
||||||
|
name: allow-backup-to-db
|
||||||
|
namespace: dawarich
|
||||||
|
spec:
|
||||||
|
podSelector:
|
||||||
|
matchLabels:
|
||||||
|
app: dawarich-db
|
||||||
|
policyTypes:
|
||||||
|
- Ingress
|
||||||
|
ingress:
|
||||||
|
- from:
|
||||||
|
- podSelector:
|
||||||
|
matchLabels:
|
||||||
|
app: dawarich-backup
|
||||||
|
ports:
|
||||||
|
- port: 5432
|
||||||
|
---
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: NetworkPolicy
|
||||||
|
metadata:
|
||||||
|
name: allow-backup-egress
|
||||||
|
namespace: dawarich
|
||||||
|
spec:
|
||||||
|
podSelector:
|
||||||
|
matchLabels:
|
||||||
|
app: dawarich-backup
|
||||||
|
policyTypes:
|
||||||
|
- Egress
|
||||||
|
egress:
|
||||||
|
- ports:
|
||||||
|
- port: 53
|
||||||
|
protocol: UDP
|
||||||
|
- port: 53
|
||||||
|
protocol: TCP
|
||||||
|
- ports:
|
||||||
|
- port: 8888
|
||||||
|
protocol: TCP
|
||||||
|
- ports:
|
||||||
|
- port: 443
|
||||||
|
protocol: TCP
|
||||||
|
- ports:
|
||||||
|
- port: 5432
|
||||||
|
protocol: TCP
|
||||||
|
to:
|
||||||
|
- podSelector:
|
||||||
|
matchLabels:
|
||||||
|
app: dawarich-db
|
||||||
|
---
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: NetworkPolicy
|
||||||
|
metadata:
|
||||||
|
name: allow-app-to-redis
|
||||||
|
namespace: dawarich
|
||||||
|
spec:
|
||||||
|
podSelector:
|
||||||
|
matchLabels:
|
||||||
|
app: dawarich-redis
|
||||||
|
policyTypes:
|
||||||
|
- Ingress
|
||||||
|
ingress:
|
||||||
|
- from:
|
||||||
|
- podSelector:
|
||||||
|
matchLabels:
|
||||||
|
app: dawarich
|
||||||
|
ports:
|
||||||
|
- port: 6379
|
||||||
@@ -0,0 +1,190 @@
|
|||||||
|
apiVersion: helm.toolkit.fluxcd.io/v2
|
||||||
|
kind: HelmRelease
|
||||||
|
metadata:
|
||||||
|
name: dawarich
|
||||||
|
namespace: flux-system
|
||||||
|
spec:
|
||||||
|
chart:
|
||||||
|
spec:
|
||||||
|
chart: dawarich
|
||||||
|
version: 2.9.3
|
||||||
|
reconcileStrategy: ChartVersion
|
||||||
|
sourceRef:
|
||||||
|
kind: HelmRepository
|
||||||
|
name: cogitri
|
||||||
|
namespace: flux-system
|
||||||
|
targetNamespace: dawarich
|
||||||
|
interval: 1m0s
|
||||||
|
install:
|
||||||
|
remediation:
|
||||||
|
retries: 3
|
||||||
|
upgrade:
|
||||||
|
remediation:
|
||||||
|
retries: 3
|
||||||
|
# The chart hardcodes an unpinned busybox wait-for-postgres init container, no deployment
|
||||||
|
# strategy, and a 130s web startupProbe — too short for the first start, which runs every
|
||||||
|
# migration and seeds the countries table before Puma listens.
|
||||||
|
postRenderers:
|
||||||
|
- kustomize:
|
||||||
|
patches:
|
||||||
|
- target:
|
||||||
|
kind: Deployment
|
||||||
|
name: dawarich
|
||||||
|
patch: |
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: dawarich
|
||||||
|
spec:
|
||||||
|
strategy:
|
||||||
|
type: Recreate
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
initContainers:
|
||||||
|
- name: wait-for-postgres
|
||||||
|
image: busybox:1.37
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
containers:
|
||||||
|
- name: dawarich
|
||||||
|
startupProbe:
|
||||||
|
failureThreshold: 60
|
||||||
|
livenessProbe:
|
||||||
|
periodSeconds: 30
|
||||||
|
timeoutSeconds: 10
|
||||||
|
failureThreshold: 6
|
||||||
|
readinessProbe:
|
||||||
|
timeoutSeconds: 5
|
||||||
|
- target:
|
||||||
|
kind: Deployment
|
||||||
|
name: dawarich-sidekiq
|
||||||
|
patch: |
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: dawarich-sidekiq
|
||||||
|
spec:
|
||||||
|
strategy:
|
||||||
|
type: Recreate
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
initContainers:
|
||||||
|
- name: wait-for-postgres
|
||||||
|
image: busybox:1.37
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
values:
|
||||||
|
# Release name is dawarich-dawarich (targetNamespace prefix); keep resource names short.
|
||||||
|
fullnameOverride: dawarich
|
||||||
|
|
||||||
|
image:
|
||||||
|
# renovate: datasource=docker depName=freikin/dawarich
|
||||||
|
tag: "1.21.0"
|
||||||
|
|
||||||
|
keyBase:
|
||||||
|
existingSecret: dawarich-credentials # key: value
|
||||||
|
|
||||||
|
# Every key is rendered into the ConfigMap as UPPER_SNAKE_CASE.
|
||||||
|
env:
|
||||||
|
timeZone: Europe/Kyiv
|
||||||
|
# TLS terminates at Traefik; "https" here turns on Rails force_ssl.
|
||||||
|
applicationProtocol: http
|
||||||
|
distanceUnit: km
|
||||||
|
# Upstream compose default; each thread holds an import batch in memory.
|
||||||
|
backgroundProcessingConcurrency: "3"
|
||||||
|
# OIDC-only login (blocks the web form and the API password sign-in since 1.14.4).
|
||||||
|
allowEmailPasswordLogin: "false"
|
||||||
|
|
||||||
|
# Authentication against Authelia over OIDC only. Unknown Authelia users are auto-created
|
||||||
|
# as regular (non-admin) users.
|
||||||
|
oidc:
|
||||||
|
enabled: true
|
||||||
|
providerName: Authelia
|
||||||
|
clientId:
|
||||||
|
existingSecret: dawarich-credentials
|
||||||
|
existingSecretKeyName: OIDC_CLIENT_ID
|
||||||
|
clientSecret:
|
||||||
|
existingSecret: dawarich-credentials
|
||||||
|
existingSecretKeyName: OIDC_CLIENT_SECRET
|
||||||
|
issuer: https://auth.${AUTHELIA_DOMAIN}
|
||||||
|
redirectUri: https://${DAWARICH_HOST}/users/auth/openid_connect/callback
|
||||||
|
autoRegister: true
|
||||||
|
allowEmailPasswordRegistration: false
|
||||||
|
|
||||||
|
dawarich:
|
||||||
|
hosts:
|
||||||
|
- ${DAWARICH_HOST}
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 512Mi
|
||||||
|
limits:
|
||||||
|
memory: 2Gi
|
||||||
|
|
||||||
|
sidekiq:
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 512Mi
|
||||||
|
limits:
|
||||||
|
memory: 4Gi # imports parse whole files in memory (Google Records.json)
|
||||||
|
|
||||||
|
postgresql:
|
||||||
|
host: dawarich-db
|
||||||
|
auth:
|
||||||
|
database: dawarich
|
||||||
|
existingSecret: dawarich-credentials # keys: username, password
|
||||||
|
|
||||||
|
# Own single Redis (deployment-redis.yaml) instead of the bundled 3-node redis-ha.
|
||||||
|
redis:
|
||||||
|
enabled: false
|
||||||
|
host: dawarich-redis
|
||||||
|
auth: false
|
||||||
|
|
||||||
|
# RWO volumes shared by web and sidekiq — fine on the single node.
|
||||||
|
persistence:
|
||||||
|
public:
|
||||||
|
# Static assets, re-synced from the image on every web start.
|
||||||
|
storageClass: nfs-synology-ssd
|
||||||
|
size: 1Gi
|
||||||
|
watched:
|
||||||
|
# Drop folder: <user-email>/<file> is auto-imported.
|
||||||
|
storageClass: nfs-synology-ssd
|
||||||
|
size: 1Gi
|
||||||
|
storage:
|
||||||
|
# ActiveStorage: uploaded imports, exports, videos.
|
||||||
|
storageClass: nfs-synology-ssd
|
||||||
|
size: 10Gi
|
||||||
|
|
||||||
|
serviceAccount:
|
||||||
|
automount: false
|
||||||
|
|
||||||
|
podLabels:
|
||||||
|
app: dawarich
|
||||||
|
|
||||||
|
# The image starts as root only to chown volumes and gosu-drop when PUID/PGID are set.
|
||||||
|
# Running as 1000 directly skips that; tmp/ is 0777 in the image and the NFS subdir
|
||||||
|
# provisioner creates directories 0777.
|
||||||
|
podSecurityContext:
|
||||||
|
runAsNonRoot: true
|
||||||
|
runAsUser: 1000
|
||||||
|
runAsGroup: 1000
|
||||||
|
seccompProfile:
|
||||||
|
type: RuntimeDefault
|
||||||
|
securityContext:
|
||||||
|
allowPrivilegeEscalation: false
|
||||||
|
|
||||||
|
ingress:
|
||||||
|
enabled: true
|
||||||
|
# No Authelia forward-auth middleware — Dawarich authenticates against Authelia
|
||||||
|
# natively over OIDC. A middleware here would break the OIDC callback and the
|
||||||
|
# api_key-authenticated /api ingest endpoints (OwnTracks, Overland, mobile app).
|
||||||
|
annotations:
|
||||||
|
cert-manager.io/cluster-issuer: letsencrypt
|
||||||
|
hosts:
|
||||||
|
- host: ${DAWARICH_HOST}
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
tls:
|
||||||
|
- secretName: dawarich-tls
|
||||||
|
hosts:
|
||||||
|
- ${DAWARICH_HOST}
|
||||||
@@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"kubernetes": {
|
||||||
|
"fileMatch": ["kubernetes/app/dawarich/.+\\.yaml$"]
|
||||||
|
},
|
||||||
|
"customManagers": [
|
||||||
|
{
|
||||||
|
"customType": "regex",
|
||||||
|
"fileMatch": ["kubernetes/app/dawarich/release\\.yaml$"],
|
||||||
|
"matchStrings": [
|
||||||
|
"#\\s*renovate:\\s*datasource=(?<datasource>\\S+)\\s+depName=(?<depName>\\S+)\\s*\\n\\s*tag:\\s*[\"']?(?<currentValue>[^\\s\"']+)"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"packageRules": [
|
||||||
|
{
|
||||||
|
"matchFileNames": ["kubernetes/app/dawarich/**"],
|
||||||
|
"semanticCommitScope": "k8s/dawarich"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"matchFileNames": ["kubernetes/app/dawarich/**"],
|
||||||
|
"matchPackageNames": ["freikin/dawarich"],
|
||||||
|
"matchUpdateTypes": ["patch", "minor"],
|
||||||
|
"automerge": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"matchFileNames": ["kubernetes/app/dawarich/**"],
|
||||||
|
"matchPackageNames": ["freikin/dawarich"],
|
||||||
|
"matchUpdateTypes": ["major"],
|
||||||
|
"automerge": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Ignore infrastructure images",
|
||||||
|
"matchFileNames": ["kubernetes/app/dawarich/**"],
|
||||||
|
"matchPackageNames": ["postgis/postgis", "redis", "creativeprojects/resticprofile"],
|
||||||
|
"enabled": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
apiVersion: source.toolkit.fluxcd.io/v1
|
apiVersion: source.toolkit.fluxcd.io/v1
|
||||||
kind: HelmRepository
|
kind: HelmRepository
|
||||||
metadata:
|
metadata:
|
||||||
name: firefly-iii
|
name: cogitri
|
||||||
namespace: flux-system
|
namespace: flux-system
|
||||||
spec:
|
spec:
|
||||||
interval: 1m0s
|
interval: 1m0s
|
||||||
url: https://firefly-iii.github.io/kubernetes
|
url: https://charts.cogitri.dev
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: dawarich-credentials
|
||||||
|
namespace: dawarich
|
||||||
|
stringData:
|
||||||
|
#ENC[AES256_GCM,data:3gPe9ezMvEnV02kKbZkjtsq2FmJJzXmhtp6CfwYh8icAv/PdAwa3DQCu0oRbgkIV9claZCqDSrhPIaYy5wsQUshL8hyGUYDm/mLNVDsAl9HPz6MlDA==,iv:QOG8JpMEA3IYlcLyrWM8yH9ZHbpwNM1EpC+02J8PCDU=,tag:eIGomi40Pe+7MSOU8POO4w==,type:comment]
|
||||||
|
username: ENC[AES256_GCM,data:Tpj/Iq4oLlg=,iv:9RORl+XlNqG87y3qsqCNj/oRrLzmdVlZCAXD4R1RfXY=,tag:67MSd0HIYEhTqQYfDNUJ2g==,type:str]
|
||||||
|
password: ENC[AES256_GCM,data:BhB59Y5J5pKobyKWOsIWP8jMxPzkL12TkFrTJuCGexw=,iv:VDJdyx7dyHgZh/doBTxBfAiN3NqzmvdCz3Hpxwsafac=,tag:AUtd1ubgOWMbgxm2FzfDpw==,type:str]
|
||||||
|
value: ENC[AES256_GCM,data:Ok4GM6+qnZSQ3c9fyedlXE+LlAoSzIvIQMrCSKLPGp3TQT6PpbouXbR0QveZWZgROmexn0YMs62WCkCdfNfv2DC7SooJ+EksWHKi/m8UTWay7X/WYBlMmSClS3/MeFwsRz5/G4MayIT166C6OhXKB2rPicRMzlU+3dbL9MBDLpw=,iv:gi6C0rbYy3Ie6ati6ACnlqeXjONR/HC3o8xmPGUIF/Y=,tag:jcAQ3YSWZ1DZqr8u+KIBWg==,type:str]
|
||||||
|
OIDC_CLIENT_ID: ENC[AES256_GCM,data:qddOrkEvw0g=,iv:NrS1vRqZG3/4cQyWtEONu16GbFlHJplcHVc75h7+CpQ=,tag:l5Fu5vsPiU6rFGFWziCnzg==,type:str]
|
||||||
|
OIDC_CLIENT_SECRET: ENC[AES256_GCM,data:uisMM3Gd6ChnLvg/eyxff9ZGq6uAfs9fryuVOgf+ZGVexKoRn0NT1Ic7rpJ9pUwzhTAO6WGo941MdJmkSxbxXw==,iv:HNZhiPMTMk/aG7Z9hr0r97CFzo8C0PKRL3FtIW2vGns=,tag:+sbLFE2zbdn4M4eyWrvqTA==,type:str]
|
||||||
|
sops:
|
||||||
|
age:
|
||||||
|
- enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBTSUdIeXZKNDBVcXVURWpz
|
||||||
|
Wmwrd1hWb0tTcDFmMWZHVG4vZmFmUDNZUnhjCk1PVzQ2RG5Qa2VQZk5PV1VwS09M
|
||||||
|
YUdzVWtsc3dJY256dzRkUTMxdG83OGsKLS0tIERBVVRXTTBsYk1jTTRadmNoOHM0
|
||||||
|
c1F5Q1RsQ1Y1SW9rQUw1ZkwrVVREV1UKI0bO6Nq92fPVPqImWMtWCe5s4r5pLGAf
|
||||||
|
6FWWzTkerOnQ4n7iGoAPtnuFbo6wUBypm4yirbgX6ErzU5vTWJWHWw==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
recipient: age1zffnskvuezntkk703a0pyxsd5m8vx2hm33dr47wdfy8mn4fdw4sqgw0jgc
|
||||||
|
encrypted_regex: ^(data|stringData|email)$
|
||||||
|
lastmodified: "2026-10-08T10:16:10Z"
|
||||||
|
mac: ENC[AES256_GCM,data:HcMG1/LqcljJ6b6LZvXZqKdT3LGFNikH/1PQKzxL+71lwSqlg3k5L0pDNObSfRZeYMeCQTMJWCzgt2qlUlpML58DFTRC0B6K3bofHJixhJT1cS62rzngR0iRY4KVepI6qZACfTh8mwzt15Zrpy9ZMRvV1GSwnxpgaXJVyCMqWnw=,iv:7GHyXB1nA1WAbkI396l4Vw5RtcsYW9n70b+ybOUo6ds=,tag:YbqsKjek9ZnExzghSupuDw==,type:str]
|
||||||
|
version: 3.13.3
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: dawarich-db
|
||||||
|
namespace: dawarich
|
||||||
|
spec:
|
||||||
|
clusterIP: None
|
||||||
|
selector:
|
||||||
|
app: dawarich-db
|
||||||
|
ports:
|
||||||
|
- port: 5432
|
||||||
|
targetPort: 5432
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: dawarich-redis
|
||||||
|
namespace: dawarich
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
app: dawarich-redis
|
||||||
|
ports:
|
||||||
|
- port: 6379
|
||||||
|
targetPort: 6379
|
||||||
|
name: redis
|
||||||
@@ -0,0 +1,88 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: StatefulSet
|
||||||
|
metadata:
|
||||||
|
name: dawarich-db
|
||||||
|
namespace: dawarich
|
||||||
|
labels:
|
||||||
|
app: dawarich-db
|
||||||
|
spec:
|
||||||
|
serviceName: dawarich-db
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: dawarich-db
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: dawarich-db
|
||||||
|
spec:
|
||||||
|
securityContext:
|
||||||
|
runAsUser: 999
|
||||||
|
runAsGroup: 999
|
||||||
|
fsGroup: 999
|
||||||
|
containers:
|
||||||
|
- name: postgres
|
||||||
|
# Dawarich requires PostGIS; the Debian variant keeps the postgres user at UID 999
|
||||||
|
# (the alpine variant upstream uses has 70). The image creates the postgis extension in POSTGRES_DB.
|
||||||
|
image: postgis/postgis:17-3.5
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
env:
|
||||||
|
- name: POSTGRES_USER
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: dawarich-credentials
|
||||||
|
key: username
|
||||||
|
- name: POSTGRES_PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: dawarich-credentials
|
||||||
|
key: password
|
||||||
|
- name: POSTGRES_DB
|
||||||
|
value: dawarich
|
||||||
|
- name: PGDATA
|
||||||
|
value: /var/lib/postgresql/data/pgdata
|
||||||
|
ports:
|
||||||
|
- containerPort: 5432
|
||||||
|
startupProbe:
|
||||||
|
tcpSocket:
|
||||||
|
port: 5432
|
||||||
|
initialDelaySeconds: 10
|
||||||
|
periodSeconds: 10
|
||||||
|
failureThreshold: 30
|
||||||
|
livenessProbe:
|
||||||
|
tcpSocket:
|
||||||
|
port: 5432
|
||||||
|
periodSeconds: 30
|
||||||
|
failureThreshold: 5
|
||||||
|
readinessProbe:
|
||||||
|
tcpSocket:
|
||||||
|
port: 5432
|
||||||
|
periodSeconds: 10
|
||||||
|
failureThreshold: 3
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 50m
|
||||||
|
memory: 256Mi
|
||||||
|
limits:
|
||||||
|
memory: 2Gi # includes the 1Gi /dev/shm below
|
||||||
|
volumeMounts:
|
||||||
|
- name: data
|
||||||
|
mountPath: /var/lib/postgresql/data
|
||||||
|
- name: shm
|
||||||
|
mountPath: /dev/shm
|
||||||
|
volumes:
|
||||||
|
# Upstream compose sets shm_size: 1G — parallel queries over the points table
|
||||||
|
# exceed the 64M container default.
|
||||||
|
- name: shm
|
||||||
|
emptyDir:
|
||||||
|
medium: Memory
|
||||||
|
sizeLimit: 1Gi
|
||||||
|
volumeClaimTemplates:
|
||||||
|
- metadata:
|
||||||
|
name: data
|
||||||
|
spec:
|
||||||
|
accessModes: ["ReadWriteOnce"]
|
||||||
|
storageClassName: nfs-synology-ssd
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: 10Gi
|
||||||
@@ -1,79 +0,0 @@
|
|||||||
apiVersion: helm.toolkit.fluxcd.io/v2
|
|
||||||
kind: HelmRelease
|
|
||||||
metadata:
|
|
||||||
name: firefly-iii
|
|
||||||
namespace: flux-system
|
|
||||||
spec:
|
|
||||||
chart:
|
|
||||||
spec:
|
|
||||||
chart: firefly-iii
|
|
||||||
version: 1.9.13
|
|
||||||
reconcileStrategy: ChartVersion
|
|
||||||
sourceRef:
|
|
||||||
kind: HelmRepository
|
|
||||||
name: firefly-iii
|
|
||||||
namespace: flux-system
|
|
||||||
targetNamespace: firefly
|
|
||||||
interval: 1m0s
|
|
||||||
install:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
upgrade:
|
|
||||||
remediation:
|
|
||||||
retries: 3
|
|
||||||
values:
|
|
||||||
deploymentStrategyType: Recreate
|
|
||||||
|
|
||||||
podSecurityContext:
|
|
||||||
seccompProfile:
|
|
||||||
type: RuntimeDefault
|
|
||||||
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
cpu: 50m
|
|
||||||
memory: 256Mi
|
|
||||||
limits:
|
|
||||||
memory: 512Mi
|
|
||||||
|
|
||||||
persistence:
|
|
||||||
enabled: true
|
|
||||||
storageClassName: nfs-synology-ssd
|
|
||||||
storage: 5Gi
|
|
||||||
|
|
||||||
config:
|
|
||||||
existingSecret: firefly-credentials
|
|
||||||
env:
|
|
||||||
DB_HOST: firefly-db
|
|
||||||
DB_CONNECTION: pgsql
|
|
||||||
DB_PORT: "5432"
|
|
||||||
DB_DATABASE: firefly
|
|
||||||
DB_USERNAME: firefly
|
|
||||||
TZ: Europe/Kyiv
|
|
||||||
TRUSTED_PROXIES: "10.244.0.0/24"
|
|
||||||
APP_URL: https://${FIREFLY_HOST}
|
|
||||||
AUTHENTICATION_GUARD: remote_user_guard
|
|
||||||
AUTHENTICATION_GUARD_HEADER: Remote-Email
|
|
||||||
AUTHENTICATION_GUARD_EMAIL: Remote-Email
|
|
||||||
MAIL_MAILER: smtp
|
|
||||||
MAIL_HOST: smtp.protonmail.ch
|
|
||||||
MAIL_PORT: "587"
|
|
||||||
MAIL_ENCRYPTION: tls
|
|
||||||
|
|
||||||
cronjob:
|
|
||||||
enabled: true
|
|
||||||
auth:
|
|
||||||
existingSecret: firefly-credentials
|
|
||||||
secretKey: STATIC_CRON_TOKEN
|
|
||||||
schedule: "0 3 * * *"
|
|
||||||
|
|
||||||
ingress:
|
|
||||||
enabled: true
|
|
||||||
annotations:
|
|
||||||
cert-manager.io/cluster-issuer: letsencrypt
|
|
||||||
traefik.ingress.kubernetes.io/router.middlewares: authelia-chain-authelia-authelia-auth@kubernetescrd
|
|
||||||
hosts:
|
|
||||||
- ${FIREFLY_HOST}
|
|
||||||
tls:
|
|
||||||
- secretName: firefly-tls
|
|
||||||
hosts:
|
|
||||||
- ${FIREFLY_HOST}
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
apiVersion: v1
|
|
||||||
kind: Secret
|
|
||||||
metadata:
|
|
||||||
name: firefly-backup-config
|
|
||||||
namespace: firefly
|
|
||||||
stringData:
|
|
||||||
profiles.yaml: ENC[AES256_GCM,data:2IDoUurD5tw5uTUX/rWuhGZbaCcYcR/J2ClSdr61rq5w1jjZunnyqeY8Vrp2LSaiDhYd6nIHB0oeM8HVsvkzbLksXVzbS/4/098KEJtey3I7yxfvvlgu9ZKbw0wuLqeXjfEkl7cArTdjMKwA3/B5/Jmqw9Q0g5QUPP97MF12Hagg/kpKipXD/n5YoOtv7ZqfHnxrIIh6XXIpa98pJ58x+7ct7K7DeUUj1s/3WAI7idJ4kTexwOb/NVup9qpheuxqAZmF0z8YUC73W0qzQzgUAOJ4+O09xc15PFRq19a95W9SnSHn8Ao56S67s26d2Hbp4JCa8U6MxHDJ09IdHzpu/bmGAVL6LxDheegYOLZWJtNoAryyE6sQN2PJQxIwFngKaMvs6CHSrZWIbCfKzIhNrJPr/u/l5pDvCSMcvg2oX7Bkc2uJ4WY/yFXSHhaWIdJv0VSvcUH04li1inrZe9AYfnsajRVuzgXrnhonqy/2NXrH32leSVjEeU97+Ma1eOX/t3+SNBglL5kJxJIRJ/tSkPDe/9GpVr+2QNQUmRMuIpSsRNQgGODU/XCFrMyJ1Ikl+pKhHitOELfckJ3FuZPRJB6HEqfkE2fZLK5e2G0JRJ4FinYFo6HkXzk4IAzLDlN2E7kgyPyCqHJQt4C/X+OTwE6MErPEPgE5o9pwC8TGv+Q8AN6rRdYs7FPBR9jxqWxoSTCdz49sVf/kcgcWnicn8XmFEGdWTWk3MqKDe8YdN6fyqPha2lxpsz7FkZMcTV2ZrLvIR65lkmL9Vb1I7SwroYuTr+sj3jTAJLZXgRTXpKodc2zTQR9rQEKvA1C7YgchTJa4axDkMY37MDHZnHPW6MEmPlpPw8NMge6QfNYDTAWvrwThGWQ051RSm8KbYfm+qlMWqx+zCFRcypKwBUKVWuf7TYa0jnL9u4QrUvpLBAr6jErNRdRLgm79h80n/ucPEBLCHlzhPzHGW/evdWMDTCd0B5dYbP0zpPkGEmzfBfnH23ru48DotzPV/y0j+SNacgUXQPFkC5x50jOS2Fay+5qInOyA75aSiFD5EMZmf8gx1a3+rDtUt+6Qict8Umtb3ZzpTrWxvxbV5oxCXNwWShSLAFyfwoNE1sEq++xu+Jp0SzTuSg+Kxz+CmuCJ4bnbYkrhJxyKfw==,iv:WdIFJmhmZ8S+ma5l5SS7de2PrxZJgKK2njrPbLVQSuo=,tag:/mPn6QHatxQYwsZInrK30w==,type:str]
|
|
||||||
restic-password-nas: ENC[AES256_GCM,data:RIn57MOwyqVGR/GuVpIXi+p5jZ2UQm4VgioCgE1GXIk=,iv:DcF6cD+AVa0LoXY6+wACfQvoAtdndl0chmPcm463fEE=,tag:RK9FF1RMFsfHGmg+ZcBEVA==,type:str]
|
|
||||||
restic-password-b2: ENC[AES256_GCM,data:nIcy6uJY4fCjQH3aVggt3meckNAytAsw/ZNnGBBm7DM=,iv:zPf9YTDgT9dlq1nlyW6weMjZ0b3eVAuB15Lyx897xGU=,tag:+x0Sn3UQZEyhdMYrTK+Nqg==,type:str]
|
|
||||||
B2_ACCOUNT_ID: ENC[AES256_GCM,data:t4YqtZRIpLpP7QHGBTeZ8vCL2L+1BjbLug==,iv:TvsBorT7r5A1d1AjPbYZ2vnm0x7gCPe4qY2bXFoK66Y=,tag:zaRhrGV/4siiWiykPlF6Gw==,type:str]
|
|
||||||
B2_ACCOUNT_KEY: ENC[AES256_GCM,data:xZjFBj7oT2FcKHdwGBzyD1xR/bKtHGLEBsnAqblE+g==,iv:gtJfZvTZucbx6983OOk7WdD8KhJtrW6Wv0hnECYXQ8s=,tag:DCvHrL1Wv3NodzbH5aXylQ==,type:str]
|
|
||||||
sops:
|
|
||||||
age:
|
|
||||||
- recipient: age1zffnskvuezntkk703a0pyxsd5m8vx2hm33dr47wdfy8mn4fdw4sqgw0jgc
|
|
||||||
enc: |
|
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBRSVBheDRtOEd0T0RJeG5x
|
|
||||||
dnRtN2RTeEs1andrVk9XUTZtMklDdmx5aEhrCmlNR1puUHVGaFYrUHNHYU1hbnpz
|
|
||||||
Q2J2ditrY1FuTXg3MUsvWm05WFcrUVUKLS0tIHdqeGFvNnkvVkdPWUphSkhETUpi
|
|
||||||
R1RWWEpDVkdHamx3M1p5a2YwUkR2REEKp/sZFcCNeZnHCvpwcOu827HLg0wxLWJG
|
|
||||||
EXHzgm5lZgiA/pQgxOJCiaz9HoNn3ttVE8z3aCnShUqAoXzpnh1Rpw==
|
|
||||||
-----END AGE ENCRYPTED FILE-----
|
|
||||||
lastmodified: "2026-04-21T20:22:40Z"
|
|
||||||
mac: ENC[AES256_GCM,data:wlXAnMwySlqHadgeAtgC+QCceqSw+mODWzKrqOTb4JSqvK1aEbPDUJWn8ow+0ff5OcU/3XVBr6b9GVzD6DsPXhg/aLsM/d5h6BRFb/qmrusD5YRyScu/gokwiD52I3qDf7rHeLNsYmoO4I6KuwEQRXasJ6H+QIOTNUxbcd+TTnM=,iv:8dNbZg7oJODgdR7mT3XgKL7sXooNYAvr8GM2l0DK6ao=,tag:M2JPh6qkisTG+A+2DCgABA==,type:str]
|
|
||||||
encrypted_regex: ^(data|stringData|email)$
|
|
||||||
version: 3.12.2
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
apiVersion: v1
|
|
||||||
kind: Secret
|
|
||||||
metadata:
|
|
||||||
name: firefly-credentials
|
|
||||||
namespace: firefly
|
|
||||||
stringData:
|
|
||||||
APP_KEY: ENC[AES256_GCM,data:OugBKeVQqUDf8rFrGxMYgNROPesgVLsoKuQmWVvW9Kg=,iv:hnASzIOuoLczCUf0Luq2d6YXz5sKoHHawSys29cCMaE=,tag:u3SeTEc0VIb/NOwnXTn9Vg==,type:str]
|
|
||||||
STATIC_CRON_TOKEN: ENC[AES256_GCM,data:YL+ghixRjb1t6K1Q09clyxlYeYSj3rsy82n78efFVAw=,iv:V2q7uKOpl3e/FROZFvH7YCXBSUnQm7QcwqFyZaBbx2I=,tag:dZ1XPxEOGgAvfyL426rDTw==,type:str]
|
|
||||||
DB_USERNAME: ENC[AES256_GCM,data:Vk4jFf4Znw==,iv:LpP9DqkC1IlAwFNak8MTLPLf75iEpDwEm9ReLZPxRJo=,tag:qMexrfvQONJjfG11xh07wA==,type:str]
|
|
||||||
DB_PASSWORD: ENC[AES256_GCM,data:SsGb3qXMiq7EqGyfU2E6xqku1HbmWM8C,iv:+3V3Fh76gim9wcrhYd6CX7smyz0Kc8Qywx5j0wrmVaw=,tag:UawliAt7zOD0rpxNe3KcPw==,type:str]
|
|
||||||
DB_DATABASE: ENC[AES256_GCM,data:tLd4MWLoqQ==,iv:sG65BMBOAaKqYgCZ/xpv7LYaDNAPX+9KAeOBvYfUbgw=,tag:tRKptDmGV3iwV6luVFv/wQ==,type:str]
|
|
||||||
MAIL_USERNAME: ENC[AES256_GCM,data:npTpeFJuH7rOmPN7+0tuAgSdK+OxIjHIOHFVhFGcwA==,iv:ugGlT9MfWedvLFb/iQTxSIB5pPQsKGS5utalEP0pyUs=,tag:iv1i73xuCs0svFIgysb9dA==,type:str]
|
|
||||||
SITE_OWNER: ENC[AES256_GCM,data:WhpJSSWjniUumYjtRLHbOc51tcZ84JBtWw==,iv:nfy/1lXXlQYQW49LQevRevbVee1DODvqFKLPm3nRmU0=,tag:3nMwbS06dxD8oTvURw3OWA==,type:str]
|
|
||||||
MAIL_FROM: ENC[AES256_GCM,data:JcZt/4D8pa6St+3Z5oX61Ez7I0PscCIDSJhVnDUyfQ==,iv:r8rSDEXjdWzpivA3QQQRiQScdv6rNK5VzAnlwl+13jQ=,tag:N55MPwZ6KGO9L18DTOJ/CA==,type:str]
|
|
||||||
MAIL_PASSWORD: ENC[AES256_GCM,data:YrqECSPI6I7aYdx+oUmgGA==,iv:rvggM+Chw0JIOqfifzH5Q5yw4JhAv5BZgJfKevfWm2c=,tag:c9Wmxy8iivL4DKwEQj8VPg==,type:str]
|
|
||||||
sops:
|
|
||||||
age:
|
|
||||||
- recipient: age1zffnskvuezntkk703a0pyxsd5m8vx2hm33dr47wdfy8mn4fdw4sqgw0jgc
|
|
||||||
enc: |
|
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBWdDRxUU1walNTNWY1VlVj
|
|
||||||
MVB3OFo2Nm03b3haTjFtV09TaWtuYnJXNEN3CmFFOUM4czgxWGFubUJrNDRpOTBq
|
|
||||||
eHB0ckJNZnltMC84S2NyQVRmUWNNMjQKLS0tIERUL0hwSzVmYlRHSVJwVnE0bkVt
|
|
||||||
Zm1kOVhMU0JOa1U1MzN2M2FhdlVYUG8KhOhnu/8FxuEJdW5O0HeYVCu5eLgeyqaN
|
|
||||||
Q88TjwbcwcIruXo/e0ATxWRp+yzwGB0nspQHZzAMP16uN6r3gZo3Zw==
|
|
||||||
-----END AGE ENCRYPTED FILE-----
|
|
||||||
lastmodified: "2026-04-22T21:18:05Z"
|
|
||||||
mac: ENC[AES256_GCM,data:JszWTjBGpBSuldSp+k/ZhO9P6+v+6WhTddv56WSHkkh1JT0JnomgKYReMj5bDxYeA6hJPLgFmD0N4gjporu3n8oCvADJgpXnVTEmYPnIJJqhEn3z8pGCKjeuxEvJk1MV7XvLEhZZJuvvb04uquyxvl1M8h9BJSCuPk7wxcM5pLA=,iv:MlF48Pqoi4239h3NAFj0VMO6YXJSt88GqCT+cA0qqXY=,tag:/mgkPgXMX3iyTomvKikO8A==,type:str]
|
|
||||||
encrypted_regex: ^(data|stringData|email)$
|
|
||||||
version: 3.12.2
|
|
||||||
@@ -2,3 +2,6 @@ apiVersion: v1
|
|||||||
kind: Namespace
|
kind: Namespace
|
||||||
metadata:
|
metadata:
|
||||||
name: gitea
|
name: gitea
|
||||||
|
labels:
|
||||||
|
# act_runner DinD sidecar requires privileged; relax PSA enforce for this ns
|
||||||
|
pod-security.kubernetes.io/enforce: privileged
|
||||||
|
|||||||
@@ -30,14 +30,14 @@ spec:
|
|||||||
patches:
|
patches:
|
||||||
- target:
|
- target:
|
||||||
kind: StatefulSet
|
kind: StatefulSet
|
||||||
name: gitea-actions-act-runner
|
name: gitea-gitea-actions-act-runner
|
||||||
patch: |
|
patch: |
|
||||||
- op: add
|
- op: add
|
||||||
path: /spec/volumeClaimTemplates/0/spec/storageClassName
|
path: /spec/volumeClaimTemplates/0/spec/storageClassName
|
||||||
value: nfs-synology-ssd
|
value: nfs-synology-ssd
|
||||||
values:
|
values:
|
||||||
enabled: true
|
enabled: true
|
||||||
giteaRootURL: http://gitea-http.gitea.svc.cluster.local:3000
|
giteaRootURL: http://gitea-gitea-http.gitea.svc.cluster.local:3000
|
||||||
existingSecret: gitea-runner-token
|
existingSecret: gitea-runner-token
|
||||||
existingSecretKey: token
|
existingSecretKey: token
|
||||||
statefulset:
|
statefulset:
|
||||||
|
|||||||
@@ -21,6 +21,175 @@ spec:
|
|||||||
upgrade:
|
upgrade:
|
||||||
remediation:
|
remediation:
|
||||||
retries: 3
|
retries: 3
|
||||||
|
# Patch the init script: Gitea 1.26 removed environment-to-ini; use built-in subcommand instead.
|
||||||
|
# Remove once helm-gitea chart ships a release with the fix (commit 1baf2d0).
|
||||||
|
postRenderers:
|
||||||
|
- kustomize:
|
||||||
|
patches:
|
||||||
|
- target:
|
||||||
|
kind: Secret
|
||||||
|
name: gitea-gitea
|
||||||
|
patch: |
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: gitea-gitea
|
||||||
|
stringData:
|
||||||
|
config_environment.sh: |
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
function env2ini::log() {
|
||||||
|
printf "$${1}\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
function env2ini::read_config_to_env() {
|
||||||
|
local section="$${1}"
|
||||||
|
local line="$${2}"
|
||||||
|
|
||||||
|
if [[ -z "$${line}" ]]; then
|
||||||
|
# skip empty line
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 'xargs echo -n' trims all leading/trailing whitespaces and a trailing new line
|
||||||
|
local setting="$(awk -F '=' '{print $1}' <<< "$${line}" | xargs echo -n)"
|
||||||
|
|
||||||
|
if [[ -z "$${setting}" ]]; then
|
||||||
|
env2ini::log ' ! invalid setting'
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
local value=''
|
||||||
|
local regex="^$${setting}(\s*)=(\s*)(.*)"
|
||||||
|
if [[ $line =~ $regex ]]; then
|
||||||
|
value="$${BASH_REMATCH[3]}"
|
||||||
|
else
|
||||||
|
env2ini::log ' ! invalid setting'
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
env2ini::log " + '$${setting}'"
|
||||||
|
|
||||||
|
if [[ -z "$${section}" ]]; then
|
||||||
|
export "GITEA____$${setting^^}=$${value}" # '^^' makes the variable content uppercase
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
local masked_section="$${section//./_0X2E_}" # '//' instructs to replace all matches
|
||||||
|
masked_section="$${masked_section//-/_0X2D_}"
|
||||||
|
|
||||||
|
export "GITEA__$${masked_section^^}__$${setting^^}=$${value}" # '^^' makes the variable content uppercase
|
||||||
|
}
|
||||||
|
|
||||||
|
function env2ini::reload_preset_envs() {
|
||||||
|
env2ini::log "Reloading preset envs..."
|
||||||
|
|
||||||
|
while read -r line; do
|
||||||
|
if [[ -z "$${line}" ]]; then
|
||||||
|
# skip empty line
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 'xargs echo -n' trims all leading/trailing whitespaces and a trailing new line
|
||||||
|
local setting="$(awk -F '=' '{print $1}' <<< "$${line}" | xargs echo -n)"
|
||||||
|
|
||||||
|
if [[ -z "$${setting}" ]]; then
|
||||||
|
env2ini::log ' ! invalid setting'
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
local value=''
|
||||||
|
local regex="^$${setting}(\s*)=(\s*)(.*)"
|
||||||
|
if [[ $line =~ $regex ]]; then
|
||||||
|
value="$${BASH_REMATCH[3]}"
|
||||||
|
else
|
||||||
|
env2ini::log ' ! invalid setting'
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
env2ini::log " + '$${setting}'"
|
||||||
|
|
||||||
|
export "$${setting^^}=$${value}" # '^^' makes the variable content uppercase
|
||||||
|
done < "$TMP_EXISTING_ENVS_FILE"
|
||||||
|
|
||||||
|
rm $TMP_EXISTING_ENVS_FILE
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function env2ini::process_config_file() {
|
||||||
|
local config_file="$${1}"
|
||||||
|
local section="$(basename "$${config_file}")"
|
||||||
|
|
||||||
|
if [[ $section == '_generals_' ]]; then
|
||||||
|
env2ini::log " [ini root]"
|
||||||
|
section=''
|
||||||
|
else
|
||||||
|
env2ini::log " $${section}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
while read -r line; do
|
||||||
|
env2ini::read_config_to_env "$${section}" "$${line}"
|
||||||
|
done < <(awk 1 "$${config_file}") # Helm .toYaml trims the trailing new line which breaks line processing; awk 1 ... adds it back while reading
|
||||||
|
}
|
||||||
|
|
||||||
|
function env2ini::load_config_sources() {
|
||||||
|
local path="$${1}"
|
||||||
|
|
||||||
|
if [[ -d "$${path}" ]]; then
|
||||||
|
env2ini::log "Processing $(basename "$${path}")..."
|
||||||
|
|
||||||
|
while read -d '' configFile; do
|
||||||
|
env2ini::process_config_file "$${configFile}"
|
||||||
|
done < <(find "$${path}" -type l -not -name '..data' -print0)
|
||||||
|
|
||||||
|
env2ini::log "\n"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function env2ini::generate_initial_secrets() {
|
||||||
|
# These environment variables will either be
|
||||||
|
# - overwritten with user defined values,
|
||||||
|
# - initially used to set up Gitea
|
||||||
|
# Anyway, they won't harm existing app.ini files
|
||||||
|
|
||||||
|
export GITEA__SECURITY__INTERNAL_TOKEN=$(gitea generate secret INTERNAL_TOKEN)
|
||||||
|
export GITEA__SECURITY__SECRET_KEY=$(gitea generate secret SECRET_KEY)
|
||||||
|
export GITEA__OAUTH2__JWT_SECRET=$(gitea generate secret JWT_SECRET)
|
||||||
|
export GITEA__SERVER__LFS_JWT_SECRET=$(gitea generate secret LFS_JWT_SECRET)
|
||||||
|
|
||||||
|
env2ini::log "...Initial secrets generated\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
# save existing envs prior to script execution. Necessary to keep order of preexisting and custom envs
|
||||||
|
env | (grep -e '^GITEA__' || [[ $? == 1 ]]) > $TMP_EXISTING_ENVS_FILE
|
||||||
|
|
||||||
|
# MUST BE CALLED BEFORE OTHER CONFIGURATION
|
||||||
|
env2ini::generate_initial_secrets
|
||||||
|
|
||||||
|
env2ini::load_config_sources "$ENV_TO_INI_MOUNT_POINT/inlines/"
|
||||||
|
env2ini::load_config_sources "$ENV_TO_INI_MOUNT_POINT/additionals/"
|
||||||
|
|
||||||
|
# load existing envs to override auto generated envs
|
||||||
|
env2ini::reload_preset_envs
|
||||||
|
|
||||||
|
env2ini::log "=== All configuration sources loaded ===\n"
|
||||||
|
|
||||||
|
# safety to prevent rewrite of secret keys if an app.ini already exists
|
||||||
|
if [ -f $${GITEA_APP_INI} ]; then
|
||||||
|
env2ini::log 'An app.ini file already exists. To prevent overwriting secret keys, these settings are dropped and remain unchanged:'
|
||||||
|
env2ini::log ' - security.INTERNAL_TOKEN'
|
||||||
|
env2ini::log ' - security.SECRET_KEY'
|
||||||
|
env2ini::log ' - oauth2.JWT_SECRET'
|
||||||
|
env2ini::log ' - server.LFS_JWT_SECRET'
|
||||||
|
|
||||||
|
unset GITEA__SECURITY__INTERNAL_TOKEN
|
||||||
|
unset GITEA__SECURITY__SECRET_KEY
|
||||||
|
unset GITEA__OAUTH2__JWT_SECRET
|
||||||
|
unset GITEA__SERVER__LFS_JWT_SECRET
|
||||||
|
fi
|
||||||
|
|
||||||
|
gitea config edit-ini --apply-env --config "$GITEA_APP_INI" --out "$GITEA_APP_INI"
|
||||||
values:
|
values:
|
||||||
strategy:
|
strategy:
|
||||||
type: Recreate
|
type: Recreate
|
||||||
@@ -30,6 +199,11 @@ spec:
|
|||||||
type: RuntimeDefault
|
type: RuntimeDefault
|
||||||
|
|
||||||
image:
|
image:
|
||||||
|
# renovate: currentValue=1.27.3-rootless currentDigest=sha256:1c17ecaead42eb3b5391553d8708103a4beb0e86edf5b9ebc1eb269c318845f2
|
||||||
|
|
||||||
|
tag: 1.27.3
|
||||||
|
|
||||||
|
digest: sha256:1c17ecaead42eb3b5391553d8708103a4beb0e86edf5b9ebc1eb269c318845f2
|
||||||
rootless: true
|
rootless: true
|
||||||
pullPolicy: IfNotPresent
|
pullPolicy: IfNotPresent
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
{
|
||||||
|
"customManagers": [
|
||||||
|
{
|
||||||
|
"customType": "regex",
|
||||||
|
"description": "Track gitea rootless image; chart appends -rootless to tag automatically",
|
||||||
|
"fileMatch": ["kubernetes/app/gitea/release\\.yaml$"],
|
||||||
|
"matchStrings": [
|
||||||
|
"(?<indentation>\\s+)# renovate: currentValue=(?<currentValue>[^\\s]+) currentDigest=(?<currentDigest>sha256:[a-f0-9]+)\\n\\s+tag: [^\\s]+\\n\\s+digest: [^\\s]+"
|
||||||
|
],
|
||||||
|
"depNameTemplate": "gitea/gitea",
|
||||||
|
"datasourceTemplate": "docker",
|
||||||
|
"autoReplaceStringTemplate": "{{indentation}}# renovate: currentValue={{newValue}} currentDigest={{#if newDigest}}{{{newDigest}}}{{else}}{{{currentDigest}}}{{/if}}\n{{indentation}}tag: {{newMajor}}.{{newMinor}}.{{newPatch}}\n{{indentation}}digest: {{#if newDigest}}{{{newDigest}}}{{else}}{{{currentDigest}}}{{/if}}"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"packageRules": [
|
||||||
|
{
|
||||||
|
"matchFileNames": ["kubernetes/app/gitea/**"],
|
||||||
|
"semanticCommitScope": "k8s/gitea"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"matchFileNames": ["kubernetes/app/gitea/**"],
|
||||||
|
"matchPackageNames": ["gitea/gitea"],
|
||||||
|
"matchUpdateTypes": ["patch", "minor"],
|
||||||
|
"automerge": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Ignore infrastructure images",
|
||||||
|
"matchFileNames": ["kubernetes/app/gitea/**"],
|
||||||
|
"matchPackageNames": ["creativeprojects/resticprofile", "postgres"],
|
||||||
|
"enabled": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -7,8 +7,8 @@ stringData:
|
|||||||
profiles.yaml: ENC[AES256_GCM,data:qtegwOuO6px5lTrzgy3XWky/HV77Z/e6Oqx7Jwdieg2y4KKN0zelC74SpACsOZTd4/irGmdHrtkP2PNVnNB8ylPLv1mKPNi5fvTl4JsHSOZlHfIxmTxgljtsXh4N8o02RIPi5pYKGj/UDIF2yin7HdgtAZfsEhDcXbxENc8iyM1DYMGLVaHo3Z2SoEtILjqz8+fOmm+Pj/snaMZ6qst+a8Fyr5/wdc4S2WjsLyeZ1UDbzy549nBCpszp5Ncy4mGqyFBvQzgCT75cmAxtwYjfEh+Abc65EjB6CNmf9ciIAjlMJ8olQe6k8xTpGhzcT0jaWZfHw3VV454fMhCF9f20PLoGg3UCPgSanSy9OCjLT310ezMaO9ukWJ4dNzJKD/x2xsOCkGRG4Zm2kmJFoDsFILpLToGyfNxHr38M/otZxS9UiuZ7aLSWJW0UubhsPJ1niLnZB/XSd2bTrIbzunm/pgDCOI2wusrT6Qo/iVzMxAt9CKgFzdmvfsThdFflSKb5pK1fA8SRit3B4YTuXX6NiSUUAiAy+PfPGUgixneRJ6DiYKzIAC6X4dZLf8yS04gVPPOL5BaGq7Vh+5RawqEogsnJuNFCpcbVtUmZd4BnydNptueqZKHoxdgNV8ZYlsbWdwF2yhnC99tdXsYp+5CDD4Zm9qBtOjIIW1e/yGQ6Tjsq9qk0yRTYkFjM9awETgKnE+/6mieg5yY3uSIwwP4ZegUW92KH+SrnOs3QrcrTTJY/wlRs4SWQWw7aEUS4yuPZXtPmhYjccl3dWNN3lT1LbOMVTqekoQlJptefbfKLiXy+A6iEYJuORxH1hcjfvqlpk722kJqwWpgqFDP6f0x/wPJxHm3XpzBVo+6qclJ0sFU+OgDReDrgh+qH1IBGuz5A39rvfx6MLuaLOVwWswqArACWe2p9lg0yPTc51nDhloeNwOVMVZ5+StYBMIydYU9wU3SDT1cox7Sd6ahz23XHzSDq30m0uIWpZZNJm5P6KQHk4XEVIk3g9K6GMf1NgafWAFePgTHBt3/A2yXAXwYVK3dyBN6Rwl3F4Neq2n0OJRN6es89rrrf0VhdJJTPW7WjIzmrMyKi8qX7KnN5oI8316N+899CahwL/e1NdD16V7DxWNMjeG74j3lxSmzXWnPn5k0y0POcIkegLdksTNEtqLQgmMzI4gn5Avn/G5CIiz7cexno+4cUeTMVRwx6YH0KxAmxHXJXp9yuqGNoo0pIACTmwpOqvMACrKEPRanxVWbCD/ZQLSiwFzfmUoexH8iUiqcFe01WQh09rXSf87Yhsf/QP/xHZS+a21f0pAtC1ZeNc0wwad5ycI5RgkcokQNcDzCEvPAKt8IKuGvk7Ti6GXXBPhMcIW0yJtuxTL1DAxfYBte/lqvGIGfl3/7b9E+FR/vgnZUl5ykQnwiHTAAmZ0ySEWyyVs93rFt5UecPEUZRyn6tNYrCjJ7hqL4NgwmGEmlLH0V/aBRSZgGNafRfXQi6w2m6Pbdo86Pn55H4fH2HCIXNPBWzFWhzohBFjLTSC4EqjYUvT72r4IimOCqOGUKYuF0giAHvkVWM0GF48x1fiUI11p+N+bDM3Coi0m4mLkof/d+yk1sOcvt1h5XOn5NbmLz/X6HhJrEo8APPhJvu4qzF4KTujafP7KF5dDWBjp5GlooyE74gRj4tLEN0vfcaezS0IwMefmkCPFrpTB/wnDavic1EJ9lYRREggdCVPJLlU9omLhvRTCBRDF62GbQVtgUqVAHqVM0EkdVzeCoSDo3TWUSFi6Dv/ivWuXGJKChM5n4cDVenatbzi4htAXR1bW3zIRXVmQy8HkgLrj42Kg==,iv:PGm23iUxhuDcnKqJeF8/kAwFJ1646ufstWCGSH+0yKA=,tag:2J/E98gHS9N0Agt+nfMTug==,type:str]
|
profiles.yaml: ENC[AES256_GCM,data:qtegwOuO6px5lTrzgy3XWky/HV77Z/e6Oqx7Jwdieg2y4KKN0zelC74SpACsOZTd4/irGmdHrtkP2PNVnNB8ylPLv1mKPNi5fvTl4JsHSOZlHfIxmTxgljtsXh4N8o02RIPi5pYKGj/UDIF2yin7HdgtAZfsEhDcXbxENc8iyM1DYMGLVaHo3Z2SoEtILjqz8+fOmm+Pj/snaMZ6qst+a8Fyr5/wdc4S2WjsLyeZ1UDbzy549nBCpszp5Ncy4mGqyFBvQzgCT75cmAxtwYjfEh+Abc65EjB6CNmf9ciIAjlMJ8olQe6k8xTpGhzcT0jaWZfHw3VV454fMhCF9f20PLoGg3UCPgSanSy9OCjLT310ezMaO9ukWJ4dNzJKD/x2xsOCkGRG4Zm2kmJFoDsFILpLToGyfNxHr38M/otZxS9UiuZ7aLSWJW0UubhsPJ1niLnZB/XSd2bTrIbzunm/pgDCOI2wusrT6Qo/iVzMxAt9CKgFzdmvfsThdFflSKb5pK1fA8SRit3B4YTuXX6NiSUUAiAy+PfPGUgixneRJ6DiYKzIAC6X4dZLf8yS04gVPPOL5BaGq7Vh+5RawqEogsnJuNFCpcbVtUmZd4BnydNptueqZKHoxdgNV8ZYlsbWdwF2yhnC99tdXsYp+5CDD4Zm9qBtOjIIW1e/yGQ6Tjsq9qk0yRTYkFjM9awETgKnE+/6mieg5yY3uSIwwP4ZegUW92KH+SrnOs3QrcrTTJY/wlRs4SWQWw7aEUS4yuPZXtPmhYjccl3dWNN3lT1LbOMVTqekoQlJptefbfKLiXy+A6iEYJuORxH1hcjfvqlpk722kJqwWpgqFDP6f0x/wPJxHm3XpzBVo+6qclJ0sFU+OgDReDrgh+qH1IBGuz5A39rvfx6MLuaLOVwWswqArACWe2p9lg0yPTc51nDhloeNwOVMVZ5+StYBMIydYU9wU3SDT1cox7Sd6ahz23XHzSDq30m0uIWpZZNJm5P6KQHk4XEVIk3g9K6GMf1NgafWAFePgTHBt3/A2yXAXwYVK3dyBN6Rwl3F4Neq2n0OJRN6es89rrrf0VhdJJTPW7WjIzmrMyKi8qX7KnN5oI8316N+899CahwL/e1NdD16V7DxWNMjeG74j3lxSmzXWnPn5k0y0POcIkegLdksTNEtqLQgmMzI4gn5Avn/G5CIiz7cexno+4cUeTMVRwx6YH0KxAmxHXJXp9yuqGNoo0pIACTmwpOqvMACrKEPRanxVWbCD/ZQLSiwFzfmUoexH8iUiqcFe01WQh09rXSf87Yhsf/QP/xHZS+a21f0pAtC1ZeNc0wwad5ycI5RgkcokQNcDzCEvPAKt8IKuGvk7Ti6GXXBPhMcIW0yJtuxTL1DAxfYBte/lqvGIGfl3/7b9E+FR/vgnZUl5ykQnwiHTAAmZ0ySEWyyVs93rFt5UecPEUZRyn6tNYrCjJ7hqL4NgwmGEmlLH0V/aBRSZgGNafRfXQi6w2m6Pbdo86Pn55H4fH2HCIXNPBWzFWhzohBFjLTSC4EqjYUvT72r4IimOCqOGUKYuF0giAHvkVWM0GF48x1fiUI11p+N+bDM3Coi0m4mLkof/d+yk1sOcvt1h5XOn5NbmLz/X6HhJrEo8APPhJvu4qzF4KTujafP7KF5dDWBjp5GlooyE74gRj4tLEN0vfcaezS0IwMefmkCPFrpTB/wnDavic1EJ9lYRREggdCVPJLlU9omLhvRTCBRDF62GbQVtgUqVAHqVM0EkdVzeCoSDo3TWUSFi6Dv/ivWuXGJKChM5n4cDVenatbzi4htAXR1bW3zIRXVmQy8HkgLrj42Kg==,iv:PGm23iUxhuDcnKqJeF8/kAwFJ1646ufstWCGSH+0yKA=,tag:2J/E98gHS9N0Agt+nfMTug==,type:str]
|
||||||
restic-password-nas: ENC[AES256_GCM,data:fMbuwG48Wc2YScNDYO+V2LjmOsjadatzHYSz0m8kvVfe7tw7lCChZanTSuldX9++E8NSxSGh6cvyRXFoX7ISCw==,iv:zSk8hk9+blNC7AZD2iEMly+t/anLzxjsJrqJzdLlqgE=,tag:C2aRaBHR8m6fRoBI/AMm6Q==,type:str]
|
restic-password-nas: ENC[AES256_GCM,data:fMbuwG48Wc2YScNDYO+V2LjmOsjadatzHYSz0m8kvVfe7tw7lCChZanTSuldX9++E8NSxSGh6cvyRXFoX7ISCw==,iv:zSk8hk9+blNC7AZD2iEMly+t/anLzxjsJrqJzdLlqgE=,tag:C2aRaBHR8m6fRoBI/AMm6Q==,type:str]
|
||||||
restic-password-b2: ENC[AES256_GCM,data:7/Os6960fd0HF8FHgI/UIRS2XahEcu39VJne5usDznIqQgnp1338mZ3S/9Wf4ZBKgGe0bieE/OKOWddSn2UbZA==,iv:WrMvh6++E+ENqg1r8K/q8qgOEBYBziBhIW+3FqtUH8Q=,tag:or+eTDz9QLI//IQgulGJFg==,type:str]
|
restic-password-b2: ENC[AES256_GCM,data:7/Os6960fd0HF8FHgI/UIRS2XahEcu39VJne5usDznIqQgnp1338mZ3S/9Wf4ZBKgGe0bieE/OKOWddSn2UbZA==,iv:WrMvh6++E+ENqg1r8K/q8qgOEBYBziBhIW+3FqtUH8Q=,tag:or+eTDz9QLI//IQgulGJFg==,type:str]
|
||||||
B2_ACCOUNT_ID: ENC[AES256_GCM,data:WlKjo0lJlw+75hbtqx4c82ruHe8mritacA==,iv:Vf3nb2vPDINMZ984on9k+490aC78QgxsfzeB08HJuDU=,tag:dRuvQHGDUEerhYwMT5nVgg==,type:str]
|
B2_ACCOUNT_ID: ENC[AES256_GCM,data:4hEA1VTpo5OKyBhB7TfwC0tMS9thhls3aA==,iv:zfueemMDGJBHVMo5XZkuBlczB0SR51ygG5FCx15kZ5s=,tag:oe0Uvy8xHpOrRFPa4eIkww==,type:str]
|
||||||
B2_ACCOUNT_KEY: ENC[AES256_GCM,data:PG1b6qHjjHivuFtXDfXlARCETQwG7m/Z4jcN213ZCQ==,iv:lFpNYXAF9Lvl/5tMlrDK/ZyVSX5gWeuPXDy1onuUSw4=,tag:TPesJVqqs+7lb2YKNzUQEg==,type:str]
|
B2_ACCOUNT_KEY: ENC[AES256_GCM,data:ypKpSJtPrdiJXbjNHPIblw2vH3MxlnXoG9p6UJODsw==,iv:g3QCmZI5Z2fmcYuGQZKaydJkrnzSOABFZvARhbzYM/E=,tag:hn/7CnjvQlTekQI3MbiAKQ==,type:str]
|
||||||
sops:
|
sops:
|
||||||
age:
|
age:
|
||||||
- enc: |
|
- enc: |
|
||||||
@@ -21,6 +21,6 @@ sops:
|
|||||||
-----END AGE ENCRYPTED FILE-----
|
-----END AGE ENCRYPTED FILE-----
|
||||||
recipient: age1zffnskvuezntkk703a0pyxsd5m8vx2hm33dr47wdfy8mn4fdw4sqgw0jgc
|
recipient: age1zffnskvuezntkk703a0pyxsd5m8vx2hm33dr47wdfy8mn4fdw4sqgw0jgc
|
||||||
encrypted_regex: ^(data|stringData|email)$
|
encrypted_regex: ^(data|stringData|email)$
|
||||||
lastmodified: "2026-05-11T17:54:38Z"
|
lastmodified: "2026-05-11T18:13:47Z"
|
||||||
mac: ENC[AES256_GCM,data:i2cKO0rJB+BJi6JLH8ikz/yv+2xxtbJQZuMNIcXIAIAyqBVjiGhyj/yNmEAiFcT5DBQEQAIGduX7yvZtnM5PIjgRlJmKfnhsWCOvuzGTcpXdUlX6ckRcSoLIYmyVvOjcckY2XebokI3Pgn/RrOW5gHUIm8xU95E+Mc4Tkn4hSz4=,iv:9rUjRdmYQZ87uHaSFGmWWEpl0aB3olxbnAd1I/NYll4=,tag:OGXf3gVtTzTfxj8BSWugAA==,type:str]
|
mac: ENC[AES256_GCM,data:pwrzvtizBP/GRW0gu3aQ6r9YgW6e+s689g4nlePs6Qzs+BljFMlb00Ko+LnX3XGgoynbJFHcsmhQBEDQ/8BYV7BaXPMtYW6V59ShaLUviSnhM47x2QbEoJkNqxBA1YL6fWDz4RL39L9vVeV9uhVJk2xc/+qsXqU3sHieIjjL2UI=,iv:qyLRgnXMKuW6GAuiK5Xn5pDVcHOpBgOfJ7TUOL5HHR4=,tag:lTPrHqKeveXo85yuS6CslQ==,type:str]
|
||||||
version: 3.13.0
|
version: 3.13.0
|
||||||
|
|||||||
@@ -1,76 +0,0 @@
|
|||||||
apiVersion: batch/v1
|
|
||||||
kind: CronJob
|
|
||||||
metadata:
|
|
||||||
name: grocy-config-backup
|
|
||||||
namespace: grocy
|
|
||||||
labels:
|
|
||||||
app: grocy-backup
|
|
||||||
spec:
|
|
||||||
schedule: "0 2 * * *"
|
|
||||||
concurrencyPolicy: Forbid
|
|
||||||
successfulJobsHistoryLimit: 3
|
|
||||||
failedJobsHistoryLimit: 3
|
|
||||||
jobTemplate:
|
|
||||||
spec:
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
app: grocy-backup
|
|
||||||
spec:
|
|
||||||
restartPolicy: OnFailure
|
|
||||||
initContainers:
|
|
||||||
- name: sqlite-backup
|
|
||||||
image: alpine:3.21
|
|
||||||
command:
|
|
||||||
- sh
|
|
||||||
- -c
|
|
||||||
- |
|
|
||||||
apk add --no-cache sqlite
|
|
||||||
sqlite3 /db-local/grocy.db ".backup /backup/grocy.db"
|
|
||||||
volumeMounts:
|
|
||||||
- name: db
|
|
||||||
mountPath: /db-local
|
|
||||||
readOnly: true
|
|
||||||
- name: backup-tmp
|
|
||||||
mountPath: /backup
|
|
||||||
containers:
|
|
||||||
- name: resticprofile
|
|
||||||
image: creativeprojects/resticprofile:0.32.0
|
|
||||||
command:
|
|
||||||
- sh
|
|
||||||
- -c
|
|
||||||
- |
|
|
||||||
resticprofile -c /secrets/profiles.yaml -n grocy-config backup
|
|
||||||
resticprofile -c /secrets/profiles.yaml -n grocy-config copy
|
|
||||||
env:
|
|
||||||
- name: B2_ACCOUNT_ID
|
|
||||||
valueFrom:
|
|
||||||
secretKeyRef:
|
|
||||||
name: grocy-backup-config
|
|
||||||
key: B2_ACCOUNT_ID
|
|
||||||
- name: B2_ACCOUNT_KEY
|
|
||||||
valueFrom:
|
|
||||||
secretKeyRef:
|
|
||||||
name: grocy-backup-config
|
|
||||||
key: B2_ACCOUNT_KEY
|
|
||||||
volumeMounts:
|
|
||||||
- name: secrets
|
|
||||||
mountPath: /secrets
|
|
||||||
readOnly: true
|
|
||||||
- name: config
|
|
||||||
mountPath: /config
|
|
||||||
readOnly: true
|
|
||||||
- name: backup-tmp
|
|
||||||
mountPath: /backup
|
|
||||||
volumes:
|
|
||||||
- name: secrets
|
|
||||||
secret:
|
|
||||||
secretName: grocy-backup-config
|
|
||||||
- name: config
|
|
||||||
persistentVolumeClaim:
|
|
||||||
claimName: grocy-config
|
|
||||||
- name: db
|
|
||||||
persistentVolumeClaim:
|
|
||||||
claimName: grocy-db
|
|
||||||
- name: backup-tmp
|
|
||||||
emptyDir: {}
|
|
||||||
@@ -1,96 +0,0 @@
|
|||||||
apiVersion: apps/v1
|
|
||||||
kind: Deployment
|
|
||||||
metadata:
|
|
||||||
name: grocy
|
|
||||||
namespace: grocy
|
|
||||||
labels:
|
|
||||||
app: grocy
|
|
||||||
spec:
|
|
||||||
replicas: 1
|
|
||||||
strategy:
|
|
||||||
type: Recreate
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
app: grocy
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
app: grocy
|
|
||||||
spec:
|
|
||||||
securityContext:
|
|
||||||
# runAsNonRoot omitted — LinuxServer image requires root for s6-overlay init
|
|
||||||
seccompProfile:
|
|
||||||
type: RuntimeDefault
|
|
||||||
initContainers:
|
|
||||||
- name: migrate-db-to-local
|
|
||||||
image: busybox:1.36
|
|
||||||
command:
|
|
||||||
- sh
|
|
||||||
- -c
|
|
||||||
- |
|
|
||||||
if [ ! -d /config/data ]; then
|
|
||||||
echo "No /config/data yet — skipping"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
cd /config/data
|
|
||||||
for db in *.db; do
|
|
||||||
[ -f "$db" ] && [ ! -L "$db" ] || continue
|
|
||||||
echo "Migrating $db to local storage..."
|
|
||||||
cp "$db" "/db-local/$db"
|
|
||||||
rm -f "$db"
|
|
||||||
ln -sf "/db-local/$db" "$db"
|
|
||||||
done
|
|
||||||
echo "Done"
|
|
||||||
volumeMounts:
|
|
||||||
- name: config
|
|
||||||
mountPath: /config
|
|
||||||
- name: db
|
|
||||||
mountPath: /db-local
|
|
||||||
containers:
|
|
||||||
- name: grocy
|
|
||||||
image: linuxserver/grocy:4.6.0
|
|
||||||
ports:
|
|
||||||
- containerPort: 80
|
|
||||||
name: http
|
|
||||||
protocol: TCP
|
|
||||||
env:
|
|
||||||
- name: PUID
|
|
||||||
value: "1027"
|
|
||||||
- name: PGID
|
|
||||||
value: "100"
|
|
||||||
- name: TZ
|
|
||||||
value: Etc/UTC
|
|
||||||
- name: UMASK
|
|
||||||
value: "002"
|
|
||||||
- name: GROCY_AUTH_CLASS
|
|
||||||
value: "Grocy\\Middleware\\ReverseProxyAuthMiddleware"
|
|
||||||
- name: GROCY_REVERSE_PROXY_AUTH_HEADER
|
|
||||||
value: Remote-User
|
|
||||||
volumeMounts:
|
|
||||||
- name: config
|
|
||||||
mountPath: /config
|
|
||||||
- name: db
|
|
||||||
mountPath: /db-local
|
|
||||||
livenessProbe:
|
|
||||||
tcpSocket:
|
|
||||||
port: 80
|
|
||||||
initialDelaySeconds: 90
|
|
||||||
periodSeconds: 30
|
|
||||||
readinessProbe:
|
|
||||||
tcpSocket:
|
|
||||||
port: 80
|
|
||||||
initialDelaySeconds: 30
|
|
||||||
periodSeconds: 10
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
cpu: 50m
|
|
||||||
memory: 128Mi
|
|
||||||
limits:
|
|
||||||
memory: 512Mi
|
|
||||||
volumes:
|
|
||||||
- name: config
|
|
||||||
persistentVolumeClaim:
|
|
||||||
claimName: grocy-config
|
|
||||||
- name: db
|
|
||||||
persistentVolumeClaim:
|
|
||||||
claimName: grocy-db
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
apiVersion: networking.k8s.io/v1
|
|
||||||
kind: NetworkPolicy
|
|
||||||
metadata:
|
|
||||||
name: default-deny-ingress
|
|
||||||
namespace: grocy
|
|
||||||
spec:
|
|
||||||
podSelector: {}
|
|
||||||
policyTypes:
|
|
||||||
- Ingress
|
|
||||||
---
|
|
||||||
apiVersion: networking.k8s.io/v1
|
|
||||||
kind: NetworkPolicy
|
|
||||||
metadata:
|
|
||||||
name: allow-ingress-controller
|
|
||||||
namespace: grocy
|
|
||||||
spec:
|
|
||||||
podSelector:
|
|
||||||
matchLabels:
|
|
||||||
app: grocy
|
|
||||||
policyTypes:
|
|
||||||
- Ingress
|
|
||||||
ingress:
|
|
||||||
- from:
|
|
||||||
- namespaceSelector:
|
|
||||||
matchLabels:
|
|
||||||
kubernetes.io/metadata.name: traefik
|
|
||||||
---
|
|
||||||
apiVersion: networking.k8s.io/v1
|
|
||||||
kind: NetworkPolicy
|
|
||||||
metadata:
|
|
||||||
name: allow-backup-egress
|
|
||||||
namespace: grocy
|
|
||||||
spec:
|
|
||||||
podSelector:
|
|
||||||
matchLabels:
|
|
||||||
app: grocy-backup
|
|
||||||
policyTypes:
|
|
||||||
- Egress
|
|
||||||
egress:
|
|
||||||
- ports:
|
|
||||||
- port: 53
|
|
||||||
protocol: UDP
|
|
||||||
- port: 53
|
|
||||||
protocol: TCP
|
|
||||||
- ports:
|
|
||||||
- port: 8888
|
|
||||||
protocol: TCP
|
|
||||||
- ports:
|
|
||||||
- port: 443
|
|
||||||
protocol: TCP
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
apiVersion: v1
|
|
||||||
kind: PersistentVolume
|
|
||||||
metadata:
|
|
||||||
name: grocy-config-nfs
|
|
||||||
spec:
|
|
||||||
capacity:
|
|
||||||
storage: 5Gi
|
|
||||||
accessModes:
|
|
||||||
- ReadWriteOnce
|
|
||||||
storageClassName: ""
|
|
||||||
persistentVolumeReclaimPolicy: Retain
|
|
||||||
mountOptions:
|
|
||||||
- hard
|
|
||||||
- noatime
|
|
||||||
- timeo=30
|
|
||||||
- retrans=3
|
|
||||||
nfs:
|
|
||||||
server: synology.storage.lviv
|
|
||||||
path: ${GROCY_NFS_PATH}
|
|
||||||
---
|
|
||||||
apiVersion: v1
|
|
||||||
kind: PersistentVolumeClaim
|
|
||||||
metadata:
|
|
||||||
name: grocy-config
|
|
||||||
namespace: grocy
|
|
||||||
spec:
|
|
||||||
accessModes:
|
|
||||||
- ReadWriteOnce
|
|
||||||
storageClassName: ""
|
|
||||||
volumeName: grocy-config-nfs
|
|
||||||
resources:
|
|
||||||
requests:
|
|
||||||
storage: 5Gi
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
apiVersion: v1
|
|
||||||
kind: Secret
|
|
||||||
metadata:
|
|
||||||
name: grocy-backup-config
|
|
||||||
namespace: grocy
|
|
||||||
stringData:
|
|
||||||
profiles.yaml: ENC[AES256_GCM,data:oCTBX2/3P6xmhgi4ObZ81gl8goRVbqn1kL0ZNbiyurzX+omqsk7RrpVpKXsBwAXbqDIvwAk6gWyFQwT3g8LQEzpLJTXLSJE4pNSlpK3V02xtWzQu+28rPptnpRKqYqLM7DGeTmm1AJwzTNaCG7X46RBCc1gWP8S6vXvjjwpdqpsJH3G2zQpZsx8fmlRC3Vc38DWq1EQatnOi+RFMd2e7WufL6Yari9r14E8tpp3s1CZ1qwQ9W9K5uHAjXI+kuPL/NVRqYzkqwuSvmD4QTtHhH1eyu3WFIkIkah1tDYAivy+wCZjMLSe+q6heHiXIMV5IaVj0tTg/L5wbjwwQZXB53nnbuadViPuC3kFBej7QHkx6hwIMmEgKsp2skG7mFFLkYm9AXDOUxUZlrVU3eN47PxR2nFNYiWoQi5YSYkltBA4eEFZ9d4EKFcxWqj1tr7Y4VDtTjz2ZEfff/eyu8oJ75XdFb74Or8PXBKfFUpLjtOnax7Dc7Ff/fv1oTCvmHSxyv4pgdCfrkwERnMd5DspkxEppCqPpxtxMVIp31cAWDkvJ21wmCR9esCVHfe1eTj4+76Ok7c3vEXy49M/K9GstwPIWcEwiDrvftiXMEgHn95YRcNBGdjh3nLJ76DTO+pTsuVoOW5Bogcn4W7hGrgYKFFFESMzXUWRlF15YPN0RHg/2TI0I9Ke1lIOhUZj1ljefH9UwnERhKmXZ7AlsXvDPqUpYPwPmW55bbkDDa/VDp58BLA==,iv:tfWTMYk99Jkje9GAHLEUu77LIIP3XQjWaR25HQYHOLg=,tag:chdgdkDNp57f3OCIEOcYTw==,type:str]
|
|
||||||
restic-password-nas: ENC[AES256_GCM,data:bG0LFnoo84t/r+cOGwjBPALc4dzrUj3Y9sMIuF7W1bjEkC9XsvSTQkczK1vmevhKuWdaaPYBr72gFzHcga7hUQ==,iv:tD1zf/mWknbMWtn/k0o8zJPcNvBK2Xa12eNSPyarybI=,tag:b03st6HrnpgXgkjDn0Gp+Q==,type:str]
|
|
||||||
restic-password-b2: ENC[AES256_GCM,data:nyDMggQFE5Z2aCz/+kTdIIYe2BXisTb/MlVRfiRMCKjPPZDQ49jyf3z986jEXp9CyxKK665ySjnZEXn3txi/PQ==,iv:xvdCBKhlFPMH4cTXSm2VtFlpJlgbiggvdvfyjB7b76I=,tag:HEoizYHWcnkVTAe3APWsMA==,type:str]
|
|
||||||
B2_ACCOUNT_ID: ENC[AES256_GCM,data:iXPdIOHzrggnh2pjimgFpQPNmA2FZgj8Mg==,iv:uS91Eg9xOHdZH113zfzlldgmCnFTopuOx/mmlsQsUC8=,tag:QDtAIhKwUkpt3v/tRZBYFA==,type:str]
|
|
||||||
B2_ACCOUNT_KEY: ENC[AES256_GCM,data:RLT5JBRs7JfcJzFv6MilqXUTf5MocOeB1Pp1kQaUcg==,iv:FqyfAgE0wM7KFdPTBM2s3eKrXvzeUCO7qLyUwZUCPqM=,tag:rM15UoD2CyZ4yRYAQJ6xoA==,type:str]
|
|
||||||
sops:
|
|
||||||
age:
|
|
||||||
- recipient: age1zffnskvuezntkk703a0pyxsd5m8vx2hm33dr47wdfy8mn4fdw4sqgw0jgc
|
|
||||||
enc: |
|
|
||||||
-----BEGIN AGE ENCRYPTED FILE-----
|
|
||||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSArR1BFRmFZU3dJblVEVnRr
|
|
||||||
bksyUzVHU0NjUkY2bGlXMzh3N0VEall4TFNVCmlBOUM4UnBPeVRPOHp3SnI5djUr
|
|
||||||
elpodVdqSWt2L0ovMFZCNUZTVkxIcVEKLS0tIDRvNzdSQ3hxN0o3R3ViSzJoQi9E
|
|
||||||
eDZTN3Fzak81RDJPR2dVOHlKOHJURzAK8DUPG6iCb6s7CQ6/+TZrIcLDKbN8bmh6
|
|
||||||
lUwBN0Ciu8OAX+tRW6P3R/iZebc9s5jH/VkzGsR9qGjKw5BsNB811Q==
|
|
||||||
-----END AGE ENCRYPTED FILE-----
|
|
||||||
lastmodified: "2026-03-11T19:28:51Z"
|
|
||||||
mac: ENC[AES256_GCM,data:2SpDKL7Mwu/h7KLQoBXnk9iB84XNaex8hVbaUqmq4myIHAzvntb/zLXOexhsKPbQ0Ea7QDOKZIpkAG2dBPtRMtZWTr9uPpMoHzQG2lDGnYKGvBJXW/7WmaCdXlDf1FukqnYJZ3YoY+5xpTpYpXbWv1fyygp1YWmjKzY5qfcjtvw=,iv:TNbbiRmRRvPuQKiBjan7CVylNrt+eTjXxwKTJbeOhLw=,tag:9bqc9L4LlSq/d+oT257rsQ==,type:str]
|
|
||||||
encrypted_regex: ^(data|stringData|email)$
|
|
||||||
version: 3.12.1
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
apiVersion: v1
|
|
||||||
kind: Service
|
|
||||||
metadata:
|
|
||||||
name: grocy
|
|
||||||
namespace: grocy
|
|
||||||
spec:
|
|
||||||
selector:
|
|
||||||
app: grocy
|
|
||||||
ports:
|
|
||||||
- port: 80
|
|
||||||
targetPort: 80
|
|
||||||
name: http
|
|
||||||
@@ -24,6 +24,7 @@ data:
|
|||||||
type: jellyfin
|
type: jellyfin
|
||||||
url: https://${JELLYFIN_HOST}
|
url: https://${JELLYFIN_HOST}
|
||||||
key: "{{HOMEPAGE_VAR_JELLYFIN_API_KEY}}"
|
key: "{{HOMEPAGE_VAR_JELLYFIN_API_KEY}}"
|
||||||
|
version: 2 # Jellyfin 12 dropped /emby paths and ?api_key auth
|
||||||
enableBlocks: true
|
enableBlocks: true
|
||||||
enableUser: true
|
enableUser: true
|
||||||
enableMediaControl: false
|
enableMediaControl: false
|
||||||
@@ -86,10 +87,14 @@ data:
|
|||||||
icon: paperless-ngx.png
|
icon: paperless-ngx.png
|
||||||
href: https://${PAPERLESS_HOST}/
|
href: https://${PAPERLESS_HOST}/
|
||||||
description: Documents storage
|
description: Documents storage
|
||||||
- Grocy:
|
- Vikunja:
|
||||||
icon: grocy.png
|
icon: vikunja.png
|
||||||
href: https://${GROCY_HOST}/
|
href: https://${VIKUNJA_HOST}/
|
||||||
description: Chores and inventory tracker
|
description: Task management
|
||||||
|
- Reitti:
|
||||||
|
icon: mdi-map-marker-path
|
||||||
|
href: https://${REITTI_HOST}/
|
||||||
|
description: Location history
|
||||||
|
|
||||||
widgets.yaml: |
|
widgets.yaml: |
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ spec:
|
|||||||
type: RuntimeDefault
|
type: RuntimeDefault
|
||||||
containers:
|
containers:
|
||||||
- name: homepage
|
- name: homepage
|
||||||
image: ghcr.io/gethomepage/homepage:v1.10.1
|
image: ghcr.io/gethomepage/homepage:v2.7.0
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 3000
|
- containerPort: 3000
|
||||||
name: http
|
name: http
|
||||||
@@ -33,8 +33,12 @@ spec:
|
|||||||
- secretRef:
|
- secretRef:
|
||||||
name: homepage-credentials
|
name: homepage-credentials
|
||||||
env:
|
env:
|
||||||
|
- name: MY_POD_IP
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: status.podIP
|
||||||
- name: HOMEPAGE_ALLOWED_HOSTS
|
- name: HOMEPAGE_ALLOWED_HOSTS
|
||||||
value: "${HOMEPAGE_HOST}"
|
value: "$(MY_POD_IP):3000,${HOMEPAGE_HOST}"
|
||||||
volumeMounts:
|
volumeMounts:
|
||||||
- name: config
|
- name: config
|
||||||
mountPath: /app/config/settings.yaml
|
mountPath: /app/config/settings.yaml
|
||||||
@@ -54,13 +58,13 @@ spec:
|
|||||||
livenessProbe:
|
livenessProbe:
|
||||||
httpGet:
|
httpGet:
|
||||||
port: 3000
|
port: 3000
|
||||||
path: /
|
path: /api/healthcheck
|
||||||
initialDelaySeconds: 30
|
initialDelaySeconds: 30
|
||||||
periodSeconds: 30
|
periodSeconds: 30
|
||||||
readinessProbe:
|
readinessProbe:
|
||||||
httpGet:
|
httpGet:
|
||||||
port: 3000
|
port: 3000
|
||||||
path: /
|
path: /api/healthcheck
|
||||||
initialDelaySeconds: 10
|
initialDelaySeconds: 10
|
||||||
periodSeconds: 10
|
periodSeconds: 10
|
||||||
resources:
|
resources:
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"kubernetes": {
|
||||||
|
"fileMatch": ["kubernetes/app/homepage/.+\\.yaml$"]
|
||||||
|
},
|
||||||
|
"packageRules": [
|
||||||
|
{
|
||||||
|
"matchFileNames": ["kubernetes/app/homepage/**"],
|
||||||
|
"semanticCommitScope": "k8s/homepage"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"matchFileNames": ["kubernetes/app/homepage/**"],
|
||||||
|
"matchPackageNames": ["ghcr.io/gethomepage/homepage"],
|
||||||
|
"matchUpdateTypes": ["patch", "minor"],
|
||||||
|
"automerge": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"matchFileNames": ["kubernetes/app/homepage/**"],
|
||||||
|
"matchPackageNames": ["ghcr.io/gethomepage/homepage"],
|
||||||
|
"matchUpdateTypes": ["major"],
|
||||||
|
"automerge": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -28,7 +28,7 @@ spec:
|
|||||||
main:
|
main:
|
||||||
image:
|
image:
|
||||||
repository: ghcr.io/immich-app/immich-server
|
repository: ghcr.io/immich-app/immich-server
|
||||||
tag: v2.7.5
|
tag: v3.3.6
|
||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
cpu: 100m
|
cpu: 100m
|
||||||
|
|||||||
@@ -0,0 +1,171 @@
|
|||||||
|
# Jellyfin SQLite database backup.
|
||||||
|
# jellyfin.db lives on the local-path PVC (/config/data/jellyfin.db is a symlink
|
||||||
|
# to it), so it is read from jellyfin-data directly. sqlite3 ".backup" uses the
|
||||||
|
# online backup API — no downtime, consistent snapshot while Jellyfin runs.
|
||||||
|
# The volume is mounted read-write on purpose: jellyfin.db is in WAL mode, and
|
||||||
|
# SQLite cannot open a WAL database from a read-only filesystem once Jellyfin has
|
||||||
|
# closed it and removed the -wal/-shm files (e.g. while scaled to zero).
|
||||||
|
# The connection itself is read-only (?mode=ro). A read-write connection that
|
||||||
|
# believes it is the last one checkpoints and deletes -wal/-shm on close; when
|
||||||
|
# Jellyfin had lost its POSIX locks this deleted them under the running server
|
||||||
|
# and corrupted jellyfin.db (2026-09-16). The copy is integrity-checked so a
|
||||||
|
# broken snapshot fails the job instead of landing in restic.
|
||||||
|
apiVersion: batch/v1
|
||||||
|
kind: CronJob
|
||||||
|
metadata:
|
||||||
|
name: jellyfin-db-backup
|
||||||
|
namespace: jellyfin
|
||||||
|
labels:
|
||||||
|
app: jellyfin-backup
|
||||||
|
spec:
|
||||||
|
schedule: "30 2 * * *"
|
||||||
|
concurrencyPolicy: Forbid
|
||||||
|
successfulJobsHistoryLimit: 3
|
||||||
|
failedJobsHistoryLimit: 3
|
||||||
|
jobTemplate:
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: jellyfin-backup
|
||||||
|
spec:
|
||||||
|
restartPolicy: OnFailure
|
||||||
|
initContainers:
|
||||||
|
- name: sqlite-backup
|
||||||
|
image: alpine:3.21
|
||||||
|
command:
|
||||||
|
- sh
|
||||||
|
- -c
|
||||||
|
- |
|
||||||
|
set -e
|
||||||
|
apk add --no-cache sqlite
|
||||||
|
sqlite3 "file:/db-local/jellyfin.db?mode=ro" ".backup /backup/jellyfin.db"
|
||||||
|
[ "$(sqlite3 /backup/jellyfin.db 'PRAGMA integrity_check')" = ok ]
|
||||||
|
volumeMounts:
|
||||||
|
- name: db
|
||||||
|
mountPath: /db-local
|
||||||
|
- name: backup-tmp
|
||||||
|
mountPath: /backup
|
||||||
|
containers:
|
||||||
|
- name: resticprofile
|
||||||
|
image: creativeprojects/resticprofile:0.32.0
|
||||||
|
command:
|
||||||
|
- sh
|
||||||
|
- -c
|
||||||
|
- |
|
||||||
|
resticprofile -c /secrets/profiles.yaml -n jellyfin-db backup
|
||||||
|
resticprofile -c /secrets/profiles.yaml -n jellyfin-db copy
|
||||||
|
env:
|
||||||
|
- name: B2_ACCOUNT_ID
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: jellyfin-backup-config
|
||||||
|
key: B2_ACCOUNT_ID
|
||||||
|
- name: B2_ACCOUNT_KEY
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: jellyfin-backup-config
|
||||||
|
key: B2_ACCOUNT_KEY
|
||||||
|
volumeMounts:
|
||||||
|
- name: secrets
|
||||||
|
mountPath: /secrets
|
||||||
|
readOnly: true
|
||||||
|
- name: backup-tmp
|
||||||
|
mountPath: /backup
|
||||||
|
volumes:
|
||||||
|
- name: secrets
|
||||||
|
secret:
|
||||||
|
secretName: jellyfin-backup-config
|
||||||
|
- name: db
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: jellyfin-data
|
||||||
|
- name: backup-tmp
|
||||||
|
emptyDir: {}
|
||||||
|
---
|
||||||
|
# Jellyfin configuration backup.
|
||||||
|
# Only non-regenerable state: server config, library definitions, plugin
|
||||||
|
# configuration (including the Authelia SSO settings), collections, and the
|
||||||
|
# Intro Skipper analysis results. Metadata (27G), trickplay (20G) and extracted
|
||||||
|
# subtitles (1.7G) are deliberately excluded — they are regenerable from the
|
||||||
|
# media files and the metadata providers.
|
||||||
|
# Intro Skipper keeps its results in two live WAL-mode SQLite databases, so they
|
||||||
|
# are snapshotted with sqlite3 ".backup" rather than copied as files (which could
|
||||||
|
# capture a torn page mid-write). Read-write mount and read-only connection for
|
||||||
|
# the same reasons as above.
|
||||||
|
apiVersion: batch/v1
|
||||||
|
kind: CronJob
|
||||||
|
metadata:
|
||||||
|
name: jellyfin-config-backup
|
||||||
|
namespace: jellyfin
|
||||||
|
labels:
|
||||||
|
app: jellyfin-backup
|
||||||
|
spec:
|
||||||
|
schedule: "30 3 * * *"
|
||||||
|
concurrencyPolicy: Forbid
|
||||||
|
successfulJobsHistoryLimit: 3
|
||||||
|
failedJobsHistoryLimit: 3
|
||||||
|
jobTemplate:
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: jellyfin-backup
|
||||||
|
spec:
|
||||||
|
restartPolicy: OnFailure
|
||||||
|
initContainers:
|
||||||
|
- name: sqlite-backup
|
||||||
|
image: alpine:3.21
|
||||||
|
command:
|
||||||
|
- sh
|
||||||
|
- -c
|
||||||
|
- |
|
||||||
|
set -e
|
||||||
|
apk add --no-cache sqlite
|
||||||
|
mkdir -p /backup/introskipper
|
||||||
|
for db in introskipper.db introskipper-cache.db; do
|
||||||
|
sqlite3 "file:/config/data/introskipper/$db?mode=ro" ".backup /backup/introskipper/$db"
|
||||||
|
[ "$(sqlite3 "/backup/introskipper/$db" 'PRAGMA integrity_check')" = ok ]
|
||||||
|
done
|
||||||
|
volumeMounts:
|
||||||
|
- name: config
|
||||||
|
mountPath: /config
|
||||||
|
- name: backup-tmp
|
||||||
|
mountPath: /backup
|
||||||
|
containers:
|
||||||
|
- name: resticprofile
|
||||||
|
image: creativeprojects/resticprofile:0.32.0
|
||||||
|
command:
|
||||||
|
- sh
|
||||||
|
- -c
|
||||||
|
- |
|
||||||
|
resticprofile -c /secrets/profiles.yaml -n jellyfin-config backup
|
||||||
|
resticprofile -c /secrets/profiles.yaml -n jellyfin-config copy
|
||||||
|
env:
|
||||||
|
- name: B2_ACCOUNT_ID
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: jellyfin-backup-config
|
||||||
|
key: B2_ACCOUNT_ID
|
||||||
|
- name: B2_ACCOUNT_KEY
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: jellyfin-backup-config
|
||||||
|
key: B2_ACCOUNT_KEY
|
||||||
|
volumeMounts:
|
||||||
|
- name: secrets
|
||||||
|
mountPath: /secrets
|
||||||
|
readOnly: true
|
||||||
|
- name: config
|
||||||
|
mountPath: /config
|
||||||
|
readOnly: true
|
||||||
|
- name: backup-tmp
|
||||||
|
mountPath: /backup
|
||||||
|
volumes:
|
||||||
|
- name: secrets
|
||||||
|
secret:
|
||||||
|
secretName: jellyfin-backup-config
|
||||||
|
- name: config
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: jellyfin-config
|
||||||
|
- name: backup-tmp
|
||||||
|
emptyDir: {}
|
||||||
@@ -43,7 +43,7 @@ spec:
|
|||||||
mountPath: /db-local
|
mountPath: /db-local
|
||||||
containers:
|
containers:
|
||||||
- name: jellyfin
|
- name: jellyfin
|
||||||
image: jellyfin/jellyfin:10.11.8
|
image: jellyfin/jellyfin:12.4
|
||||||
env:
|
env:
|
||||||
- name: JELLYFIN_PublishedServerUrl
|
- name: JELLYFIN_PublishedServerUrl
|
||||||
value: https://${JELLYFIN_HOST}
|
value: https://${JELLYFIN_HOST}
|
||||||
@@ -62,6 +62,15 @@ spec:
|
|||||||
resources:
|
resources:
|
||||||
limits:
|
limits:
|
||||||
gpu.intel.com/i915: "1"
|
gpu.intel.com/i915: "1"
|
||||||
|
# 12.0's first boot runs one-way database migrations that take several
|
||||||
|
# minutes and must not be interrupted. startupProbe holds liveness off
|
||||||
|
# until the server answers; liveness/readiness take over once up.
|
||||||
|
startupProbe:
|
||||||
|
httpGet:
|
||||||
|
port: 8096
|
||||||
|
path: /health
|
||||||
|
failureThreshold: 90
|
||||||
|
periodSeconds: 10
|
||||||
livenessProbe:
|
livenessProbe:
|
||||||
httpGet:
|
httpGet:
|
||||||
port: 8096
|
port: 8096
|
||||||
|
|||||||
@@ -45,3 +45,29 @@ spec:
|
|||||||
protocol: UDP
|
protocol: UDP
|
||||||
- port: 1900
|
- port: 1900
|
||||||
protocol: UDP
|
protocol: UDP
|
||||||
|
---
|
||||||
|
# Backup jobs need DNS, the Synology rest-server (8888) and B2 over HTTPS.
|
||||||
|
# Declaring egress here also confines the backup pods to exactly those.
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: NetworkPolicy
|
||||||
|
metadata:
|
||||||
|
name: allow-backup-egress
|
||||||
|
namespace: jellyfin
|
||||||
|
spec:
|
||||||
|
podSelector:
|
||||||
|
matchLabels:
|
||||||
|
app: jellyfin-backup
|
||||||
|
policyTypes:
|
||||||
|
- Egress
|
||||||
|
egress:
|
||||||
|
- ports:
|
||||||
|
- port: 53
|
||||||
|
protocol: UDP
|
||||||
|
- port: 53
|
||||||
|
protocol: TCP
|
||||||
|
- ports:
|
||||||
|
- port: 8888
|
||||||
|
protocol: TCP
|
||||||
|
- ports:
|
||||||
|
- port: 443
|
||||||
|
protocol: TCP
|
||||||
|
|||||||
@@ -7,6 +7,11 @@
|
|||||||
"matchFileNames": ["kubernetes/app/jellyfin/**"],
|
"matchFileNames": ["kubernetes/app/jellyfin/**"],
|
||||||
"semanticCommitScope": "k8s/jellyfin"
|
"semanticCommitScope": "k8s/jellyfin"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"matchFileNames": ["kubernetes/app/jellyfin/**"],
|
||||||
|
"matchPackageNames": ["jellyfin/jellyfin"],
|
||||||
|
"versioning": "regex:^(?<minor>\\d+)\\.(?<patch>\\d+)$"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"matchFileNames": ["kubernetes/app/jellyfin/**"],
|
"matchFileNames": ["kubernetes/app/jellyfin/**"],
|
||||||
"matchPackageNames": ["jellyfin/jellyfin"],
|
"matchPackageNames": ["jellyfin/jellyfin"],
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: jellyfin-backup-config
|
||||||
|
namespace: jellyfin
|
||||||
|
stringData:
|
||||||
|
profiles.yaml: ENC[AES256_GCM,data:A1EdRDhXncj5EIjg6iyw+mmiW7ObrGVlBmnQn1GJbF6P+yHmw97h4Hk/yHfMM1tDrNhiy8jpMWmXHGuHa56QFGPQzPCkaMtjqwO2pUcXrdrv8ThVtX3ZgyzvHX1fL5lwDm5aG0mMjuV51+j5URR6P3n+GCCg3OYP/DbEngroT5f7QKhFb4hwHdGnF9tHLwKH/hZrXJIH8XLeJD5BbjHBRFiXEpYlgmHtZ3Vb3SzJRMSMBMH4wBj2obxL2nOqKDXaK/NRV1XHuN+/enKvQaFm9j3h7F4G4MD1Gfr6LwjtGiV5S8ngcQo9gQptardTVqxTtKHKA80pbtSoqwP3TuR6Vh6U9KNqDiaLte6wqoOxQ6Tb3oCTnFJOLn1WE/PBxTPp9VDRfwXBlhPtYK8JhaTcQHdjkM1xw3qzyL09XMNKWf1wvlaoszurwlxI+bSKNlDQjC/dUd/j067xFf1SRNze++75QJkrp1o2+4DCrdK4QiPd9FeacgUml/uI957i0ZkBQLTn9WHUcp7kLmALzu8byDHgf2jkHYEfJ3QKg5yjpE0aQ2Iub/8fnQC732YOUGeP5HKcFTl8fU4xdRrIPbz8K728FYukeU4pzLQY+2qOENfMSFoVMIYpD5LSyv+RqIejb6x1ZYIchPQ91aBsnkXRSL6b2Lj60vccF1cyilrPAgBAzM6FeAvAHqbalSMdvyMwd6AgHgW0jOE9dGquxQfliCyoU9vcsNKY/2y01MWiH7wa80IjvrrUTiuQHh7h2g+JYqiXoyA2R9qXQBScjiWQbtUAYQjBqqKGdTSxiUzYiCBw75FMJxj2BUE739bQQNCBN18WLSyietS7LiTu50cL0jD79zNYGqi4vduHdK+MZuhZa5I/5OoHo71VGj1nkyKYBOemA5zdW3xbS4ZOnblOYeEkhx0It1KafAbN4JnY7ZPCQqH7JyAxKIV1YR4zKEMpFgEzIKUFl0Cr7PrZ5/hoA6HhuzzWq6GvtQ+4PJusp5Spu+d7AEZLSPqPrSlK6iCQA3nKG+A/wau4BI4P83Q2LzW5Aa4aujNZJ+mCYAyPkkQqt6+MTWgFCKa61fZT8Rypw+q1+BRJrY+/2PU/DUeEBb6hBTcL24YRHEkcPlcU4FkK4/WppALM/FWySFgfdwL9XqhOWwuhJ3nfMFEMFR9TkbrTHGNzC7JRTcIo4FIhvgoNtQ2WujgB01a79cqGcw2sSWDTeUCH5SaeYiQSfmI1n7OyBP9vk3pc8FrqRVZkpetlrYCdart6FKDuO+P4YhOpk42GrL+0lWis4Hkmos9REpKP0jAkvgcI9nDHTq1stHbPuqVXsBaah0mrbk450ZAREmGMx/4Gc3ltXh8YfgT26HSDCl3SRtXgnLsTA9XKYgR1zgvT8a82EYDg08af5X1yGQFutxIkfIwIijAIx+Y9NY6KeWvgBYxjgkKkNvY29kCZZ5POKw5L9YiMOcp4jSTK+dNdPqCWplSzyaLgrFGBbzOcQVagm9UkZEXLv44H60fMMExdHzuo81Bh1JV6luVqqDcHlnigxM6QNMNavgT6G60kFfRmEyRldSrpefKkH9GtxJMJgWMgZhhdDkkOzFsou/GuaWCLQp3JyOmZiKisJu5Nytkl4h0rPGR+Oe26Z5IxCYOjRgmp8+TT4JMmHIvlL7Ljf1PRQS6eWz9ICvoK/nvLaj0/rjEvQ9BZKY1WVzGGSYrvrNzNbprhaT6+DE1Xdd9qmwaP+B9czB54KCrKd17knL0GWYkneOM/M+UNeD4nDeK8fShHJeIYI5+7QRh54BsGlmwgw8mYnysagsQeav56aZC7Lcg3e1uCeVSHY7RdrUJ7i+++5v95TpIP8tQCFO5RvlIp7UPChdHOyxqlGqGMWs66Jvpq47ENN6OObAdR0uAHPA/MsvVO0ygmANE8Sog2JLJbQO6+3Wsmg/n+Is2Ps1lEjSft6Kn/SrmPG3ilOedpirrnn1cfWOHAXtfruZ9xB2GIdhBHgVFgjSUmAvd+9R+MV+urq3d/Czr1+w2WDryOPPw=,iv:+DuENxnJKTQ3ZKom2uNsW7QU1eMsrO+ZFCo5aW51pwE=,tag:4MiKklkRuvJuCvlu8tV07w==,type:str]
|
||||||
|
restic-password-nas: ENC[AES256_GCM,data:2uDszBmHa4YG1oYyhN4Wjw0Lcc6/MpmrCHldwNF22kFiokbx4R+zrd8ML4NvK1ezmQmMDhlb3RsyAcQNRgJ9Ng==,iv:96pdW1B6M97+eG1EC2YPbNmO4OQmt47uiJOWuvzdYzE=,tag:dQKHD+2LeWL5+tcQbrbN0g==,type:str]
|
||||||
|
restic-password-b2: ENC[AES256_GCM,data:ceHYbKn174cIm38qnlGvx9edxP8apPWkwx7wAkNncSF6kIE5OvXVsNAWcjsZKQLEgYXFX5NwLZMDPY0edtAhNQ==,iv:mDki/Soljcnp60cfihK2EqfTNHv/VnoieetBThFqLtE=,tag:5VMRM0fe4nFDal3BO+ninw==,type:str]
|
||||||
|
B2_ACCOUNT_ID: ENC[AES256_GCM,data:6u+UlYRILbb0TRTdISi7TdVItw4omfodFw==,iv:A+be6o3ZjfYsyvEk750DcoSlBsKYM2FncSY8kqkcpqs=,tag:9ReTmil5sAfo+04IfdaKYw==,type:str]
|
||||||
|
B2_ACCOUNT_KEY: ENC[AES256_GCM,data:p+irC0iQR3RjhmElD+tZcXcgWsV8ROGHsEOJ7kxXvg==,iv:2VgptxIaJ0v1e5jejLyBIPHnvxD6ldgTWn/3oa1M32Y=,tag:9gHDOD0524IAoQQLOytT+w==,type:str]
|
||||||
|
sops:
|
||||||
|
age:
|
||||||
|
- enc: |
|
||||||
|
-----BEGIN AGE ENCRYPTED FILE-----
|
||||||
|
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSB5Mk5NMVNxOG5JWHhkMjlh
|
||||||
|
YzRyYVhYT2tncmVzRzB5NXc2aEZQcUVtVFUwCnl2U2JQSkdpTjZVb1pPTmlPeVRt
|
||||||
|
SURJNFFzUTFTdVZpckV5d2puN2xQTmcKLS0tIDUxeXFLdGxOdDVLdng2SFRWb296
|
||||||
|
NFpDSkZmYkY0Vyt4Nml3N3VXbFdZZ0kKfNoqtyb+16qpDdCHgp3uiDCHqtiDXEjB
|
||||||
|
p1kaQkgF6xqFohomV+6x0RsW+r7PaGh8oWRut0NBRahZwIKBucZUTw==
|
||||||
|
-----END AGE ENCRYPTED FILE-----
|
||||||
|
recipient: age1zffnskvuezntkk703a0pyxsd5m8vx2hm33dr47wdfy8mn4fdw4sqgw0jgc
|
||||||
|
encrypted_regex: ^(data|stringData|email)$
|
||||||
|
lastmodified: "2026-09-13T13:09:04Z"
|
||||||
|
mac: ENC[AES256_GCM,data:E8xZZ+0hdRPKE/nss00gopEg7feF7t4pXBqYkEtr9yzHn1Vz4Opfv4vBDDgwqntZdekE40rpzWTuPJDAfOrhDsCsgZjOgWa6VpSRNM9GQ37Ax/fv/G42CXtwBPCzY1p2GuXr9nsJI+/P4c6sx4FIXZ0o4QLCHuStkYpjbHlyIFA=,iv:LJCUP/KbZ0tZPdG2hedHfZMfYWS+w4T73JaI7nLe2uQ=,tag:J7GT2jm6iHFZ8oMV2ecEIw==,type:str]
|
||||||
|
version: 3.13.3
|
||||||
@@ -17,7 +17,8 @@ spec:
|
|||||||
interval: 1m0s
|
interval: 1m0s
|
||||||
values:
|
values:
|
||||||
image:
|
image:
|
||||||
tag: "v1.6.1"
|
# renovate: datasource=docker depName=ghcr.io/hargata/lubelogger
|
||||||
|
tag: "v1.7.4"
|
||||||
|
|
||||||
updateStrategy:
|
updateStrategy:
|
||||||
type: RollingUpdate
|
type: RollingUpdate
|
||||||
|
|||||||
@@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"kubernetes": {
|
||||||
|
"fileMatch": ["kubernetes/app/lubelogger/.+\\.yaml$"]
|
||||||
|
},
|
||||||
|
"customManagers": [
|
||||||
|
{
|
||||||
|
"customType": "regex",
|
||||||
|
"fileMatch": ["kubernetes/app/lubelogger/release\\.yaml$"],
|
||||||
|
"matchStrings": [
|
||||||
|
"#\\s*renovate:\\s*datasource=(?<datasource>\\S+)\\s+depName=(?<depName>\\S+)\\s*\\n\\s*tag:\\s*[\"']?(?<currentValue>[^\\s\"']+)"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"packageRules": [
|
||||||
|
{
|
||||||
|
"matchFileNames": ["kubernetes/app/lubelogger/**"],
|
||||||
|
"semanticCommitScope": "k8s/lubelogger"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"matchFileNames": ["kubernetes/app/lubelogger/**"],
|
||||||
|
"matchPackageNames": ["ghcr.io/hargata/lubelogger"],
|
||||||
|
"matchUpdateTypes": ["patch", "minor"],
|
||||||
|
"automerge": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"matchFileNames": ["kubernetes/app/lubelogger/**"],
|
||||||
|
"matchPackageNames": ["ghcr.io/hargata/lubelogger"],
|
||||||
|
"matchUpdateTypes": ["major"],
|
||||||
|
"automerge": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Ignore infrastructure images",
|
||||||
|
"matchFileNames": ["kubernetes/app/lubelogger/**"],
|
||||||
|
"matchPackageNames": ["postgres", "creativeprojects/resticprofile"],
|
||||||
|
"enabled": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -45,10 +45,13 @@ spec:
|
|||||||
- psql -d postgres -c 'CREATE DATABASE "prowlarr-log"' || true
|
- psql -d postgres -c 'CREATE DATABASE "prowlarr-log"' || true
|
||||||
containers:
|
containers:
|
||||||
- name: prowlarr
|
- name: prowlarr
|
||||||
image: lscr.io/linuxserver/prowlarr:2.3.5
|
image: lscr.io/linuxserver/prowlarr:2.7.0
|
||||||
envFrom:
|
envFrom:
|
||||||
- configMapRef:
|
- configMapRef:
|
||||||
name: media-common-env
|
name: media-common-env
|
||||||
|
env:
|
||||||
|
- name: PROWLARR__SERVER__TRUSTEDNETWORKS
|
||||||
|
value: ${POD_CIDR}
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 9696
|
- containerPort: 9696
|
||||||
name: http
|
name: http
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ spec:
|
|||||||
mountPath: /media
|
mountPath: /media
|
||||||
containers:
|
containers:
|
||||||
- name: qbittorrent
|
- name: qbittorrent
|
||||||
image: lscr.io/linuxserver/qbittorrent:5.2.0
|
image: lscr.io/linuxserver/qbittorrent:5.3.0
|
||||||
envFrom:
|
envFrom:
|
||||||
- configMapRef:
|
- configMapRef:
|
||||||
name: media-common-env
|
name: media-common-env
|
||||||
|
|||||||
@@ -54,10 +54,13 @@ spec:
|
|||||||
- psql -d postgres -c 'CREATE DATABASE "radarr-log"' || true
|
- psql -d postgres -c 'CREATE DATABASE "radarr-log"' || true
|
||||||
containers:
|
containers:
|
||||||
- name: radarr
|
- name: radarr
|
||||||
image: lscr.io/linuxserver/radarr:6.1.1
|
image: lscr.io/linuxserver/radarr:6.4.4
|
||||||
envFrom:
|
envFrom:
|
||||||
- configMapRef:
|
- configMapRef:
|
||||||
name: media-common-env
|
name: media-common-env
|
||||||
|
env:
|
||||||
|
- name: RADARR__SERVER__TRUSTEDNETWORKS
|
||||||
|
value: ${POD_CIDR}
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 7878
|
- containerPort: 7878
|
||||||
name: http
|
name: http
|
||||||
|
|||||||
@@ -54,10 +54,13 @@ spec:
|
|||||||
- psql -d postgres -c 'CREATE DATABASE "sonarr-log"' || true
|
- psql -d postgres -c 'CREATE DATABASE "sonarr-log"' || true
|
||||||
containers:
|
containers:
|
||||||
- name: sonarr
|
- name: sonarr
|
||||||
image: lscr.io/linuxserver/sonarr:4.0.17
|
image: lscr.io/linuxserver/sonarr:4.0.20
|
||||||
envFrom:
|
envFrom:
|
||||||
- configMapRef:
|
- configMapRef:
|
||||||
name: media-common-env
|
name: media-common-env
|
||||||
|
env:
|
||||||
|
- name: SONARR__SERVER__TRUSTEDNETWORKS
|
||||||
|
value: ${POD_CIDR}
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 8989
|
- containerPort: 8989
|
||||||
name: http
|
name: http
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ spec:
|
|||||||
targetNamespace: media
|
targetNamespace: media
|
||||||
values:
|
values:
|
||||||
image:
|
image:
|
||||||
tag: v3.2.0
|
tag: v3.5.1
|
||||||
podLabels:
|
podLabels:
|
||||||
app: seerr
|
app: seerr
|
||||||
extraEnv:
|
extraEnv:
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ spec:
|
|||||||
type: RuntimeDefault
|
type: RuntimeDefault
|
||||||
containers:
|
containers:
|
||||||
- name: gotenberg
|
- name: gotenberg
|
||||||
image: gotenberg/gotenberg:8
|
image: gotenberg/gotenberg:9
|
||||||
command:
|
command:
|
||||||
- gotenberg
|
- gotenberg
|
||||||
- --chromium-disable-javascript=true
|
- --chromium-disable-javascript=true
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ spec:
|
|||||||
type: RuntimeDefault
|
type: RuntimeDefault
|
||||||
containers:
|
containers:
|
||||||
- name: tika
|
- name: tika
|
||||||
image: apache/tika:3.2.3.0
|
image: apache/tika:3.3.3.0
|
||||||
env:
|
env:
|
||||||
- name: TZ
|
- name: TZ
|
||||||
value: Europe/Kyiv
|
value: Europe/Kyiv
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ spec:
|
|||||||
type: RuntimeDefault
|
type: RuntimeDefault
|
||||||
containers:
|
containers:
|
||||||
- name: paperless
|
- name: paperless
|
||||||
image: ghcr.io/paperless-ngx/paperless-ngx:2.20
|
image: ghcr.io/paperless-ngx/paperless-ngx:3.4
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 8000
|
- containerPort: 8000
|
||||||
name: http
|
name: http
|
||||||
@@ -86,6 +86,31 @@ spec:
|
|||||||
value: allauth.socialaccount.providers.openid_connect
|
value: allauth.socialaccount.providers.openid_connect
|
||||||
- name: PAPERLESS_SOCIALACCOUNT_ALLOW_SIGNUPS
|
- name: PAPERLESS_SOCIALACCOUNT_ALLOW_SIGNUPS
|
||||||
value: "false"
|
value: "false"
|
||||||
|
- name: PAPERLESS_AI_ENABLED
|
||||||
|
value: "true"
|
||||||
|
- name: PAPERLESS_AI_LLM_BACKEND
|
||||||
|
value: openai-like
|
||||||
|
- name: PAPERLESS_AI_LLM_ENDPOINT
|
||||||
|
value: https://api.anthropic.com/v1/
|
||||||
|
- name: PAPERLESS_AI_LLM_MODEL
|
||||||
|
value: claude-haiku-5-5
|
||||||
|
- name: PAPERLESS_AI_LLM_API_KEY
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: paperless-ai
|
||||||
|
key: anthropic-api-key
|
||||||
|
# Haiku 5.5 only accepts temperature 1; llama-index defaults to 0.1
|
||||||
|
- name: PAPERLESS_AI_LLM_EXTRA_PARAMS
|
||||||
|
value: '{"temperature": 1}'
|
||||||
|
- name: PAPERLESS_AI_LLM_OUTPUT_LANGUAGE
|
||||||
|
value: Ukrainian
|
||||||
|
- name: PAPERLESS_AI_LLM_EMBEDDING_BACKEND
|
||||||
|
value: huggingface
|
||||||
|
- name: PAPERLESS_AI_LLM_EMBEDDING_MODEL
|
||||||
|
value: intfloat/multilingual-e5-small
|
||||||
|
# matches the embedding model's 512-token input limit
|
||||||
|
- name: PAPERLESS_AI_LLM_EMBEDDING_CHUNK_SIZE
|
||||||
|
value: "512"
|
||||||
volumeMounts:
|
volumeMounts:
|
||||||
- name: data
|
- name: data
|
||||||
mountPath: /usr/src/paperless/data
|
mountPath: /usr/src/paperless/data
|
||||||
@@ -110,9 +135,9 @@ spec:
|
|||||||
resources:
|
resources:
|
||||||
requests:
|
requests:
|
||||||
cpu: 100m
|
cpu: 100m
|
||||||
memory: 512Mi
|
memory: 1536Mi
|
||||||
limits:
|
limits:
|
||||||
memory: 5Gi
|
memory: 6Gi
|
||||||
volumes:
|
volumes:
|
||||||
- name: data
|
- name: data
|
||||||
persistentVolumeClaim:
|
persistentVolumeClaim:
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user