feat(zabbix): add RemoteDesktop monitoring template
New Zabbix 7.2 template under `Templates/FlowerCore` that scrapes the `/metrics` exposition from FlowerCore.RemoteDesktop and extracts: - `fc_desktop_session_events_total` split by event (launch/connect/ disconnect/recording), with a dedicated datapoint for the `browser_datasource="json"` slice to track delegated-auth launches. - `fc_desktop_pool_ready` gauge sum for warm pools. Trigger: `nodata(flowercore.remotedesktop.metrics,10m)=1` warns when the public desktop host stops exposing metrics. Follows the existing `flowercore-print-ollama.yaml` pattern — import manually into Zabbix and link to the Print/Desktop host. Not a K8s manifest; ArgoCD ignores. Grafana dashboard JSON is drafted at `apps/monitoring/flowercore-remotedesktop-grafana-dashboard.json` but still needs a ConfigMap wrap + Grafana Deployment volume mount in noc-monitoring.yaml before it ships (follow-up). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
174
apps/zabbix/templates/flowercore-remotedesktop.yaml
Normal file
174
apps/zabbix/templates/flowercore-remotedesktop.yaml
Normal file
@@ -0,0 +1,174 @@
|
|||||||
|
zabbix_export:
|
||||||
|
version: '7.2'
|
||||||
|
template_groups:
|
||||||
|
- uuid: 2ce6df1168bd4797aa5374fd19438746
|
||||||
|
name: Templates/FlowerCore
|
||||||
|
templates:
|
||||||
|
- uuid: 5b20d8f9d3c346f7b1c7fe6922e9d4d1
|
||||||
|
template: FlowerCore RemoteDesktop
|
||||||
|
name: FlowerCore RemoteDesktop
|
||||||
|
description: Optional RemoteDesktop observability import. This template reads the Prometheus exposition from FlowerCore.RemoteDesktop and extracts launch/connect/disconnect/recording counters plus warm-pool gauges. Adjust the metrics URL if the Zabbix host should scrape a different endpoint than the public desktop host.
|
||||||
|
groups:
|
||||||
|
- name: Templates/FlowerCore
|
||||||
|
items:
|
||||||
|
- uuid: 357ab8ec721a4d31a5488bdd60a6679d
|
||||||
|
name: RemoteDesktop metrics snapshot
|
||||||
|
type: HTTP_AGENT
|
||||||
|
key: flowercore.remotedesktop.metrics
|
||||||
|
delay: 30s
|
||||||
|
history: 7d
|
||||||
|
trends: '0'
|
||||||
|
value_type: TEXT
|
||||||
|
url: https://desktop.iamworkin.lan/metrics
|
||||||
|
timeout: 10s
|
||||||
|
description: Raw Prometheus exposition from FlowerCore.RemoteDesktop.
|
||||||
|
- uuid: 59af4d77fbb54dc6a733f8dc86d73c3d
|
||||||
|
name: RemoteDesktop launch events total
|
||||||
|
type: DEPENDENT
|
||||||
|
key: flowercore.remotedesktop.launch.total
|
||||||
|
delay: '0'
|
||||||
|
history: 30d
|
||||||
|
trends: 365d
|
||||||
|
value_type: FLOAT
|
||||||
|
preprocessing:
|
||||||
|
- type: JAVASCRIPT
|
||||||
|
parameters:
|
||||||
|
- |
|
||||||
|
var lines = String(value || '').split(/\r?\n/);
|
||||||
|
var sum = 0;
|
||||||
|
for (var i = 0; i < lines.length; i += 1) {
|
||||||
|
var line = lines[i];
|
||||||
|
if (line.indexOf('fc_desktop_session_events_total{') !== 0 || line.indexOf('event="launch"') === -1) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
var parts = line.trim().split(/\s+/);
|
||||||
|
var metricValue = Number(parts[parts.length - 1]);
|
||||||
|
if (!isNaN(metricValue)) {
|
||||||
|
sum += metricValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return sum;
|
||||||
|
master_item:
|
||||||
|
key: flowercore.remotedesktop.metrics
|
||||||
|
- uuid: 479e5d87f8e14e9cb4c45f1832723a34
|
||||||
|
name: RemoteDesktop connect events total (json datasource)
|
||||||
|
type: DEPENDENT
|
||||||
|
key: flowercore.remotedesktop.connect.json.total
|
||||||
|
delay: '0'
|
||||||
|
history: 30d
|
||||||
|
trends: 365d
|
||||||
|
value_type: FLOAT
|
||||||
|
preprocessing:
|
||||||
|
- type: JAVASCRIPT
|
||||||
|
parameters:
|
||||||
|
- |
|
||||||
|
var lines = String(value || '').split(/\r?\n/);
|
||||||
|
var sum = 0;
|
||||||
|
for (var i = 0; i < lines.length; i += 1) {
|
||||||
|
var line = lines[i];
|
||||||
|
if (line.indexOf('fc_desktop_session_events_total{') !== 0
|
||||||
|
|| line.indexOf('event="connect"') === -1
|
||||||
|
|| line.indexOf('browser_datasource="json"') === -1) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
var parts = line.trim().split(/\s+/);
|
||||||
|
var metricValue = Number(parts[parts.length - 1]);
|
||||||
|
if (!isNaN(metricValue)) {
|
||||||
|
sum += metricValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return sum;
|
||||||
|
master_item:
|
||||||
|
key: flowercore.remotedesktop.metrics
|
||||||
|
- uuid: 8ad073699ca74a99ab36ef1e4a4b06b8
|
||||||
|
name: RemoteDesktop disconnect events total
|
||||||
|
type: DEPENDENT
|
||||||
|
key: flowercore.remotedesktop.disconnect.total
|
||||||
|
delay: '0'
|
||||||
|
history: 30d
|
||||||
|
trends: 365d
|
||||||
|
value_type: FLOAT
|
||||||
|
preprocessing:
|
||||||
|
- type: JAVASCRIPT
|
||||||
|
parameters:
|
||||||
|
- |
|
||||||
|
var lines = String(value || '').split(/\r?\n/);
|
||||||
|
var sum = 0;
|
||||||
|
for (var i = 0; i < lines.length; i += 1) {
|
||||||
|
var line = lines[i];
|
||||||
|
if (line.indexOf('fc_desktop_session_events_total{') !== 0 || line.indexOf('event="disconnect"') === -1) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
var parts = line.trim().split(/\s+/);
|
||||||
|
var metricValue = Number(parts[parts.length - 1]);
|
||||||
|
if (!isNaN(metricValue)) {
|
||||||
|
sum += metricValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return sum;
|
||||||
|
master_item:
|
||||||
|
key: flowercore.remotedesktop.metrics
|
||||||
|
- uuid: 0a50ab8cd4ab4c97ac52f3d94b02ff8f
|
||||||
|
name: RemoteDesktop recording events total
|
||||||
|
type: DEPENDENT
|
||||||
|
key: flowercore.remotedesktop.recording.total
|
||||||
|
delay: '0'
|
||||||
|
history: 30d
|
||||||
|
trends: 365d
|
||||||
|
value_type: FLOAT
|
||||||
|
preprocessing:
|
||||||
|
- type: JAVASCRIPT
|
||||||
|
parameters:
|
||||||
|
- |
|
||||||
|
var lines = String(value || '').split(/\r?\n/);
|
||||||
|
var sum = 0;
|
||||||
|
for (var i = 0; i < lines.length; i += 1) {
|
||||||
|
var line = lines[i];
|
||||||
|
if (line.indexOf('fc_desktop_session_events_total{') !== 0 || line.indexOf('event="recording"') === -1) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
var parts = line.trim().split(/\s+/);
|
||||||
|
var metricValue = Number(parts[parts.length - 1]);
|
||||||
|
if (!isNaN(metricValue)) {
|
||||||
|
sum += metricValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return sum;
|
||||||
|
master_item:
|
||||||
|
key: flowercore.remotedesktop.metrics
|
||||||
|
- uuid: 5d4d5e7b38d14c68a72877e37d7f1bde
|
||||||
|
name: RemoteDesktop warm pools ready
|
||||||
|
type: DEPENDENT
|
||||||
|
key: flowercore.remotedesktop.pool.ready
|
||||||
|
delay: '0'
|
||||||
|
history: 30d
|
||||||
|
trends: 365d
|
||||||
|
value_type: FLOAT
|
||||||
|
preprocessing:
|
||||||
|
- type: JAVASCRIPT
|
||||||
|
parameters:
|
||||||
|
- |
|
||||||
|
var lines = String(value || '').split(/\r?\n/);
|
||||||
|
var sum = 0;
|
||||||
|
for (var i = 0; i < lines.length; i += 1) {
|
||||||
|
var line = lines[i];
|
||||||
|
if (line.indexOf('fc_desktop_pool_ready{') !== 0) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
var parts = line.trim().split(/\s+/);
|
||||||
|
var metricValue = Number(parts[parts.length - 1]);
|
||||||
|
if (!isNaN(metricValue)) {
|
||||||
|
sum += metricValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return sum;
|
||||||
|
master_item:
|
||||||
|
key: flowercore.remotedesktop.metrics
|
||||||
|
valuemaps: []
|
||||||
|
triggers:
|
||||||
|
- uuid: 5ef71c752fa94d2e8ce3ced79fcfe0f4
|
||||||
|
expression: nodata(/FlowerCore RemoteDesktop/flowercore.remotedesktop.metrics,10m)=1
|
||||||
|
name: FlowerCore RemoteDesktop metrics unavailable
|
||||||
|
priority: WARNING
|
||||||
|
description: FlowerCore.RemoteDesktop /metrics has not returned data for 10 minutes. Check the web deployment, ingress, or the scrape URL configured in this template.
|
||||||
|
manual_close: 'YES'
|
||||||
Reference in New Issue
Block a user