Skip to content

Commit 7caba41

Browse files
committed
Setting per cluster for mountpoints in the filesystem metrics
1 parent f1a960f commit 7caba41

File tree

7 files changed

+45
-18
lines changed

7 files changed

+45
-18
lines changed

packages/core/src/common/cluster-types.ts

+1
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ export interface ClusterPrometheusPreferences {
125125
prometheusProvider?: {
126126
type: string;
127127
};
128+
filesystemMountpoints?: string;
128129
}
129130

130131
/**

packages/core/src/main/routes/metrics/add-metrics-route.injectable.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ const addMetricsRouteInjectable = getRouteInjectable({
6969
const queryParams: Partial<Record<string, string>> = Object.fromEntries(query.entries());
7070
const prometheusMetadata: ClusterPrometheusMetadata = {};
7171
const prometheusHandler = di.inject(prometheusHandlerInjectable, cluster);
72+
const mountpoints = cluster.preferences.filesystemMountpoints || "/";
7273

7374
try {
7475
const { prometheusPath, provider } = await prometheusHandler.getPrometheusDetails();
@@ -99,7 +100,7 @@ const addMetricsRouteInjectable = getRouteInjectable({
99100
const data = payload as Record<string, Record<string, string>>;
100101
const queries = object.entries(data)
101102
.map(([queryName, queryOpts]) => (
102-
provider.getQuery(queryOpts, queryName)
103+
provider.getQuery({ ...queryOpts, mountpoints }, queryName)
103104
));
104105

105106
const result = await loadMetrics(queries, cluster, prometheusPath, queryParams);

packages/core/src/renderer/components/cluster-settings/prometheus-setting.tsx

+26-1
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ interface Dependencies {
3232

3333
@observer
3434
class NonInjectedClusterPrometheusSetting extends React.Component<ClusterPrometheusSettingProps & Dependencies> {
35+
@observable mountpoints = "";
3536
@observable path = "";
3637
@observable selectedOption: ProviderValue = autoDetectPrometheus;
3738
@observable loading = true;
@@ -68,7 +69,7 @@ class NonInjectedClusterPrometheusSetting extends React.Component<ClusterPrometh
6869
componentDidMount() {
6970
disposeOnUnmount(this,
7071
autorun(() => {
71-
const { prometheus, prometheusProvider } = this.props.cluster.preferences;
72+
const { prometheus, prometheusProvider, filesystemMountpoints } = this.props.cluster.preferences;
7273

7374
if (prometheus) {
7475
const prefix = prometheus.prefix || "";
@@ -83,6 +84,10 @@ class NonInjectedClusterPrometheusSetting extends React.Component<ClusterPrometh
8384
} else {
8485
this.selectedOption = autoDetectPrometheus;
8586
}
87+
88+
if (filesystemMountpoints) {
89+
this.mountpoints = filesystemMountpoints;
90+
}
8691
}),
8792
);
8893

@@ -122,6 +127,10 @@ class NonInjectedClusterPrometheusSetting extends React.Component<ClusterPrometh
122127
this.props.cluster.preferences.prometheus = this.parsePrometheusPath();
123128
};
124129

130+
onSaveMountpoints = () => {
131+
this.props.cluster.preferences.filesystemMountpoints = this.mountpoints;
132+
};
133+
125134
render() {
126135
return (
127136
<>
@@ -165,6 +174,22 @@ class NonInjectedClusterPrometheusSetting extends React.Component<ClusterPrometh
165174
</section>
166175
</>
167176
)}
177+
<>
178+
<hr />
179+
<section>
180+
<SubTitle title="Filesystem mountpoints" />
181+
<Input
182+
theme="round-black"
183+
value={this.mountpoints}
184+
onChange={(value) => this.mountpoints = value}
185+
onBlur={this.onSaveMountpoints}
186+
placeholder="/"
187+
/>
188+
<small className="hint">
189+
{`A regexp for the label with the filesystem mountpoints that will create a graph for disk usage. For the root disk only use "/" and for all disks use ".*".`}
190+
</small>
191+
</section>
192+
</>
168193
</>
169194
);
170195
}

packages/technical-features/prometheus/src/helm-provider.injectable.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,9 @@ export const getHelmLikeQueryFor =
5050
case "podAllocatableCapacity":
5151
return `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="pods"}) by (component)`;
5252
case "fsSize":
53-
return `sum(node_filesystem_size_bytes{node=~"${opts.nodes}", mountpoint="/"}) by (node)`;
53+
return `sum(node_filesystem_size_bytes{node=~"${opts.nodes}", mountpoint=~"${opts.mountpoints}"}) by (node)`;
5454
case "fsUsage":
55-
return `sum(node_filesystem_size_bytes{node=~"${opts.nodes}", mountpoint="/"} - node_filesystem_avail_bytes{node=~"${opts.nodes}", mountpoint="/"}) by (node)`;
55+
return `sum(node_filesystem_size_bytes{node=~"${opts.nodes}", mountpoint=~"${opts.mountpoints}"} - node_filesystem_avail_bytes{node=~"${opts.nodes}", mountpoint=~"${opts.mountpoints}"}) by (node)`;
5656
}
5757
break;
5858
case "nodes":
@@ -72,9 +72,9 @@ export const getHelmLikeQueryFor =
7272
case "cpuAllocatableCapacity":
7373
return `sum(kube_node_status_allocatable{resource="cpu"}) by (node)`;
7474
case "fsSize":
75-
return `sum(node_filesystem_size_bytes{mountpoint="/"}) by (node)`;
75+
return `sum(node_filesystem_size_bytes{mountpoint=~"${opts.mountpoints}"}) by (node)`;
7676
case "fsUsage":
77-
return `sum(node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_avail_bytes{mountpoint="/"}) by (node)`;
77+
return `sum(node_filesystem_size_bytes{mountpoint=~"${opts.mountpoints}"} - node_filesystem_avail_bytes{mountpoint=~"${opts.mountpoints}"}) by (node)`;
7878
}
7979
break;
8080
case "pods":

packages/technical-features/prometheus/src/lens-provider.injectable.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,9 @@ export const getLensLikeQueryFor =
5050
case "podAllocatableCapacity":
5151
return `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="pods"}) by (component)`;
5252
case "fsSize":
53-
return `sum(node_filesystem_size_bytes{kubernetes_node=~"${opts.nodes}", mountpoint="/"}) by (kubernetes_node)`;
53+
return `sum(node_filesystem_size_bytes{kubernetes_node=~"${opts.nodes}", mountpoint=~"${opts.mountpoints}"}) by (kubernetes_node)`;
5454
case "fsUsage":
55-
return `sum(node_filesystem_size_bytes{kubernetes_node=~"${opts.nodes}", mountpoint="/"} - node_filesystem_avail_bytes{kubernetes_node=~"${opts.nodes}", mountpoint="/"}) by (kubernetes_node)`;
55+
return `sum(node_filesystem_size_bytes{kubernetes_node=~"${opts.nodes}", mountpoint=~"${opts.mountpoints}"} - node_filesystem_avail_bytes{kubernetes_node=~"${opts.nodes}", mountpoint=~"${opts.mountpoints}"}) by (kubernetes_node)`;
5656
}
5757
break;
5858
case "nodes":
@@ -72,9 +72,9 @@ export const getLensLikeQueryFor =
7272
case "cpuAllocatableCapacity":
7373
return `sum(kube_node_status_allocatable{resource="cpu"}) by (node)`;
7474
case "fsSize":
75-
return `sum(node_filesystem_size_bytes{mountpoint="/"}) by (kubernetes_node)`;
75+
return `sum(node_filesystem_size_bytes{mountpoint=~"${opts.mountpoints}"}) by (kubernetes_node)`;
7676
case "fsUsage":
77-
return `sum(node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_avail_bytes{mountpoint="/"}) by (kubernetes_node)`;
77+
return `sum(node_filesystem_size_bytes{mountpoint=~"${opts.mountpoints}"} - node_filesystem_avail_bytes{mountpoint=~"${opts.mountpoints}"}) by (kubernetes_node)`;
7878
}
7979
break;
8080
case "pods":

packages/technical-features/prometheus/src/operator-provider.injectable.ts.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,9 @@ export const getOperatorLikeQueryFor =
5050
case "podAllocatableCapacity":
5151
return `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="pods"})`;
5252
case "fsSize":
53-
return `sum(node_filesystem_size_bytes{mountpoint="/"} * on (pod,namespace) group_left(node) kube_pod_info{node=~"${opts.nodes}"})`;
53+
return `sum(node_filesystem_size_bytes{mountpoint=~"${opts.mountpoints}"} * on (pod,namespace) group_left(node) kube_pod_info{node=~"${opts.nodes}"})`;
5454
case "fsUsage":
55-
return `sum(node_filesystem_size_bytes{mountpoint="/"} * on (pod,namespace) group_left(node) kube_pod_info{node=~"${opts.nodes}"} - node_filesystem_avail_bytes{mountpoint="/"} * on (pod,namespace) group_left(node) kube_pod_info{node=~"${opts.nodes}"})`;
55+
return `sum(node_filesystem_size_bytes{mountpoint=~"${opts.mountpoints}"} * on (pod,namespace) group_left(node) kube_pod_info{node=~"${opts.nodes}"} - node_filesystem_avail_bytes{mountpoint=~"${opts.mountpoints}"} * on (pod,namespace) group_left(node) kube_pod_info{node=~"${opts.nodes}"})`;
5656
}
5757
break;
5858
case "nodes":
@@ -72,9 +72,9 @@ export const getOperatorLikeQueryFor =
7272
case "cpuAllocatableCapacity":
7373
return `sum(kube_node_status_allocatable{resource="cpu"}) by (node)`;
7474
case "fsSize":
75-
return `sum(node_filesystem_size_bytes{mountpoint="/"} * on (pod,namespace) group_left(node) kube_pod_info) by (node)`;
75+
return `sum(node_filesystem_size_bytes{mountpoint=~"${opts.mountpoints}"} * on (pod,namespace) group_left(node) kube_pod_info) by (node)`;
7676
case "fsUsage":
77-
return `sum((node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_avail_bytes{mountpoint="/"}) * on (pod, namespace) group_left(node) kube_pod_info) by (node)`;
77+
return `sum((node_filesystem_size_bytes{mountpoint=~"${opts.mountpoints}"} - node_filesystem_avail_bytes{mountpoint=~"${opts.mountpoints}"}) * on (pod, namespace) group_left(node) kube_pod_info) by (node)`;
7878
}
7979
break;
8080
case "pods":

packages/technical-features/prometheus/src/stacklight-provider.injectable.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,9 @@ export const getStacklightLikeQueryFor =
5050
case "podAllocatableCapacity":
5151
return `sum(kube_node_status_allocatable{node=~"${opts.nodes}", resource="pods"}) by (component)`;
5252
case "fsSize":
53-
return `sum(node_filesystem_size_bytes{node=~"${opts.nodes}", mountpoint="/"}) by (node)`;
53+
return `sum(node_filesystem_size_bytes{node=~"${opts.nodes}", mountpoint=~"${opts.mountpoints}"}) by (node)`;
5454
case "fsUsage":
55-
return `sum(node_filesystem_size_bytes{node=~"${opts.nodes}", mountpoint="/"} - node_filesystem_avail_bytes{node=~"${opts.nodes}", mountpoint="/"}) by (node)`;
55+
return `sum(node_filesystem_size_bytes{node=~"${opts.nodes}", mountpoint=~"${opts.mountpoints}"} - node_filesystem_avail_bytes{node=~"${opts.nodes}", mountpoint=~"${opts.mountpoints}"}) by (node)`;
5656
}
5757
break;
5858
case "nodes":
@@ -72,9 +72,9 @@ export const getStacklightLikeQueryFor =
7272
case "cpuAllocatableCapacity":
7373
return `sum(kube_node_status_allocatable{resource="cpu"}) by (node)`;
7474
case "fsSize":
75-
return `sum(node_filesystem_size_bytes{mountpoint="/"}) by (node)`;
75+
return `sum(node_filesystem_size_bytes{mountpoint=~"${opts.mountpoints}"}) by (node)`;
7676
case "fsUsage":
77-
return `sum(node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_avail_bytes{mountpoint="/"}) by (node)`;
77+
return `sum(node_filesystem_size_bytes{mountpoint=~"${opts.mountpoints}"} - node_filesystem_avail_bytes{mountpoint=~"${opts.mountpoints}"}) by (node)`;
7878
}
7979
break;
8080
case "pods":

0 commit comments

Comments
 (0)