feat(unpoller): add monitoring of unifi equipment

Signed-off-by: Vegard Hagen <[email protected]>
This commit is contained in:
Vegard Hagen
2025-08-05 21:15:27 +02:00
parent b605d48ec3
commit 7853de1ede
13 changed files with 252 additions and 0 deletions
+2
View File
@@ -11,6 +11,8 @@ spec:
server: '*'
- namespace: 'torrent'
server: '*'
- namespace: 'unpoller'
server: '*'
- namespace: 'unrar'
server: '*'
clusterResourceWhitelist:
+46
View File
@@ -0,0 +1,46 @@
# https://github.com/unpoller/unpoller/blob/master/examples/up.conf.example
[poller]
debug = false
quiet = false
plugins = []
[prometheus]
disable = false
http_listen = "0.0.0.0:9130"
report_errors = true
dead_ports = false
[influxdb]
disable = true
[loki]
disable = true
[datadog]
enable = false
[webserver]
enable = false
port = 37288
[unifi]
dynamic = false
[unifi.defaults]
url = "https://192.168.1.1"
user = "unifipoller"
pass = "file:///mnt/secrets/password"
sites = ["all"]
save_sites = true
hash_pii = false
save_ids = false
save_events = false
save_alarms = false
save_anomalies = false
save_dpi = false
save_rogue = false
verify_ssl = false
ssl_cert_paths = []
@@ -0,0 +1,16 @@
apiVersion: grafana.integreatly.org/v1beta1
kind: GrafanaDashboard
metadata:
name: client-insights
namespace: unpoller
spec:
allowCrossNamespaceImport: true
folder: UniFi
resyncPeriod: 10m
instanceSelector:
matchLabels:
app: grafana
datasources:
- inputName: DS_PROMETHEUS
datasourceName: default
url: https://grafana.com/api/dashboards/11315/revisions/latest/download
@@ -0,0 +1,16 @@
apiVersion: grafana.integreatly.org/v1beta1
kind: GrafanaDashboard
metadata:
name: network-sites
namespace: unpoller
spec:
allowCrossNamespaceImport: true
folder: UniFi
resyncPeriod: 10m
instanceSelector:
matchLabels:
app: grafana
datasources:
- inputName: DS_PROMETHEUS
datasourceName: default
url: https://grafana.com/api/dashboards/11311/revisions/latest/download
@@ -0,0 +1,16 @@
apiVersion: grafana.integreatly.org/v1beta1
kind: GrafanaDashboard
metadata:
name: uap-insights
namespace: unpoller
spec:
allowCrossNamespaceImport: true
folder: UniFi
resyncPeriod: 10m
instanceSelector:
matchLabels:
app: grafana
datasources:
- inputName: DS_PROMETHEUS
datasourceName: default
url: https://grafana.com/api/dashboards/11314/revisions/latest/download
@@ -0,0 +1,16 @@
apiVersion: grafana.integreatly.org/v1beta1
kind: GrafanaDashboard
metadata:
name: usg-insights
namespace: unpoller
spec:
allowCrossNamespaceImport: true
folder: UniFi
resyncPeriod: 10m
instanceSelector:
matchLabels:
app: grafana
datasources:
- inputName: DS_PROMETHEUS
datasourceName: default
url: https://grafana.com/api/dashboards/11313/revisions/latest/download
@@ -0,0 +1,16 @@
apiVersion: grafana.integreatly.org/v1beta1
kind: GrafanaDashboard
metadata:
name: usw-insights
namespace: unpoller
spec:
allowCrossNamespaceImport: true
folder: UniFi
resyncPeriod: 10m
instanceSelector:
matchLabels:
app: grafana
datasources:
- inputName: DS_PROMETHEUS
datasourceName: default
url: https://grafana.com/api/dashboards/11312/revisions/latest/download
+58
View File
@@ -0,0 +1,58 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: unpoller
namespace: unpoller
spec:
selector:
matchLabels:
app: unpoller
template:
metadata:
labels:
app: unpoller
spec:
securityContext:
runAsNonRoot: true
runAsUser: 65534
runAsGroup: 65534
fsGroup: 65534
fsGroupChangePolicy: OnRootMismatch
seccompProfile:
type: RuntimeDefault
containers:
- name: unpoller
image: ghcr.io/unpoller/unpoller:v2.15.3 # renovate: github-releases=unpoller/unpoller
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
runAsNonRoot: true
capabilities:
drop: [ ALL ]
resources:
requests:
memory: 16Mi
cpu: 5m
limits:
memory: 32Mi
ports:
- name: metrics
containerPort: 9130
livenessProbe:
httpGet: { path: /, port: metrics }
readinessProbe:
httpGet: { path: /, port: metrics }
volumeMounts:
- name: config
mountPath: /etc/unpoller/up.conf
subPath: up.conf
- name: user-credentials
mountPath: /mnt/secrets/password
subPath: password
volumes:
- name: config
configMap:
name: unpoller-config
- name: user-credentials
secret:
secretName: user-credentials
@@ -0,0 +1,19 @@
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
configMapGenerator:
- name: unpoller-config
namespace: unpoller
files: [ ./config/up.conf ]
resources:
- ns.yaml
- svc.yaml
- deployment.yaml
- serviceMonitor.yaml
- user-credentials.yaml
- dashboards/client-insights.yaml
- dashboards/network-sites.yaml
- dashboards/uap-insights.yaml
- dashboards/usg-insights.yaml
- dashboards/usw-insigts.yaml
+4
View File
@@ -0,0 +1,4 @@
apiVersion: v1
kind: Namespace
metadata:
name: unpoller
@@ -0,0 +1,15 @@
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: unpoller
namespace: unpoller
spec:
endpoints:
- path: /metrics
port: metrics
namespaceSelector:
matchNames:
- unpoller
selector:
matchLabels:
app: unpoller
+15
View File
@@ -0,0 +1,15 @@
apiVersion: v1
kind: Service
metadata:
name: unpoller
namespace: unpoller
labels:
app: unpoller
spec:
type: ClusterIP
selector:
app: unpoller
ports:
- name: metrics
port: 9130
targetPort: metrics
@@ -0,0 +1,13 @@
apiVersion: bitnami.com/v1alpha1
kind: SealedSecret
metadata:
name: user-credentials
namespace: unpoller
spec:
encryptedData:
password: AgCls8+38jIVmZP8oK/I/EgaZ0aKaTMyOJZAiykYL/nsO8Ol95X1VA7agInCOGe+bhlkU8E1Och5IIFq23rkPW6ej2nf4tOOV7go4gsT6nAS8Hlfqc8gihYxPkXLU+/xZI2mYQv+vlDsZ5ZWgiuLo06YqKKWX5i9QSgH+pNqNAnHD40ZpAHpq+51fqg8C5guSzoDcrg7kqev8DVALKIc4U7za3sEXRhi/DpTNNCvi87Licv7yz5blnvoqWWIKlYJCS6TmRiuN2fQefEsbBqgnRSOi9qpXxoyv3+YGNj/3DTx4RNFcfdRxaAchxKoZ3NHU9ndCCk2yNlsspRXC1tGaU84EzTTltk3gBhvvvaZK/dyvasftjrK91RDt4HOuwlmkwjX1LvEhN2GX9AZIFOgfQafkp5kDSlA8pGfYUYvBCvKqKYf64OZKmyURsmPURVqbIKi6L3u4+q35tGSz0XsxBz1A8G82FYbY3UXbNzPAZmteNsi4wotl8PlHoRYJxcmL2SxIIb+a3jX4dzH66mj1+iiIoDtufsf/dNzN5Sh77ZywlhR8cK6/owt4bpL8z5YZoIDj4Ajqj1q0ou2cVcAi2K+G9rmrvrsAcWNaw/0rptX7BrFeUA5L8MMID2SrT+CarZSLIOaF/PAq3F0kny/ZOpAcOCl9Ph5Fj2IsOzpcZPrSieOcesUNeKxTgkBMDOcOGIqYv35TWDM2NOk1pT741QnLr/qkUbJTOJrNmkG7p5LETSDC2I=
template:
metadata:
name: user-credentials
namespace: unpoller
type: Opaque