Skip to content

Commit 647153d

Browse files
committed
feat(helm): add metrics endpoint and optional ServiceMonitor support
Adds controller.metrics values to enable the Prometheus metrics endpoint and optionally deploy a ServiceMonitor for Prometheus Operator. When controller.metrics.enabled is true the chart sets METRICS_BIND_ADDRESS and METRICS_SECURE env vars, exposes the metrics container port, and adds a named port to the controller Service. Setting controller.metrics.serviceMonitor.enabled to true additionally creates a ServiceMonitor resource. Closes #1369
1 parent cfcd66d commit 647153d

8 files changed

Lines changed: 109 additions & 1 deletion

helm/kagent/templates/controller-configmap.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,10 @@ data:
5656
STREAMING_MAX_BUF_SIZE: {{ .Values.controller.streaming.maxBufSize | quote }}
5757
STREAMING_TIMEOUT: {{ .Values.controller.streaming.timeout | quote }}
5858
WATCH_NAMESPACES: {{ include "kagent.watchNamespaces" . | quote }}
59+
{{- if .Values.controller.metrics.enabled }}
60+
METRICS_BIND_ADDRESS: ":{{ .Values.controller.metrics.port }}"
61+
METRICS_SECURE: {{ .Values.controller.metrics.secure | quote }}
62+
{{- end }}
5963
ZAP_LOG_LEVEL: {{ .Values.controller.loglevel | quote }}
6064
{{- $agentHost := "" }}
6165
{{- if and .Values.controller.agentDeployment .Values.controller.agentDeployment.host (not (eq .Values.controller.agentDeployment.host "")) }}

helm/kagent/templates/controller-deployment.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,11 @@ spec:
9797
- name: http
9898
containerPort: {{ .Values.controller.service.ports.targetPort }}
9999
protocol: TCP
100+
{{- if .Values.controller.metrics.enabled }}
101+
- name: metrics
102+
containerPort: {{ .Values.controller.metrics.port }}
103+
protocol: TCP
104+
{{- end }}
100105
resources:
101106
{{- toYaml .Values.controller.resources | nindent 12 }}
102107
{{- with (.Values.controller.securityContext | default .Values.securityContext) }}

helm/kagent/templates/controller-service.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,11 @@ spec:
1212
targetPort: {{ .Values.controller.service.ports.targetPort }}
1313
protocol: TCP
1414
name: controller
15+
{{- if .Values.controller.metrics.enabled }}
16+
- port: {{ .Values.controller.metrics.port }}
17+
targetPort: {{ .Values.controller.metrics.port }}
18+
protocol: TCP
19+
name: metrics
20+
{{- end }}
1521
selector:
1622
{{- include "kagent.controller.selectorLabels" . | nindent 4 }}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{{- if and .Values.controller.metrics.enabled .Values.controller.metrics.serviceMonitor.enabled }}
2+
apiVersion: monitoring.coreos.com/v1
3+
kind: ServiceMonitor
4+
metadata:
5+
name: {{ include "kagent.fullname" . }}-controller
6+
namespace: {{ include "kagent.namespace" . }}
7+
labels:
8+
{{- include "kagent.labels" . | nindent 4 }}
9+
{{- with .Values.controller.metrics.serviceMonitor.labels }}
10+
{{- toYaml . | nindent 4 }}
11+
{{- end }}
12+
spec:
13+
selector:
14+
matchLabels:
15+
{{- include "kagent.controller.selectorLabels" . | nindent 6 }}
16+
endpoints:
17+
- port: metrics
18+
interval: {{ .Values.controller.metrics.serviceMonitor.interval }}
19+
scrapeTimeout: {{ .Values.controller.metrics.serviceMonitor.scrapeTimeout }}
20+
{{- end }}

helm/kagent/tests/controller-deployment_test.yaml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,29 @@ tests:
7676
- equal:
7777
path: spec.template.spec.containers[0].ports[0].containerPort
7878
value: 8083
79+
- lengthEqual:
80+
path: spec.template.spec.containers[0].ports
81+
count: 1
82+
83+
- it: should add metrics port and env vars when enabled
84+
set:
85+
controller.metrics.enabled: true
86+
asserts:
87+
- contains:
88+
path: spec.template.spec.containers[0].ports
89+
content:
90+
name: metrics
91+
containerPort: 9093
92+
protocol: TCP
93+
template: controller-deployment.yaml
94+
- equal:
95+
path: data.METRICS_BIND_ADDRESS
96+
value: ":9093"
97+
template: controller-configmap.yaml
98+
- equal:
99+
path: data.METRICS_SECURE
100+
value: "false"
101+
template: controller-configmap.yaml
79102

80103
- it: should set A2A_BASE_URL with computed default value
81104
template: controller-configmap.yaml

helm/kagent/tests/controller-service_test.yaml

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ tests:
2929
- equal:
3030
path: spec.ports[0].protocol
3131
value: TCP
32+
- lengthEqual:
33+
path: spec.ports
34+
count: 1
3235

3336
- it: should have correct selector labels
3437
asserts:
@@ -68,4 +71,16 @@ tests:
6871
asserts:
6972
- equal:
7073
path: metadata.namespace
71-
value: custom-namespace
74+
value: custom-namespace
75+
76+
- it: should expose metrics port when enabled
77+
set:
78+
controller.metrics.enabled: true
79+
asserts:
80+
- contains:
81+
path: spec.ports
82+
content:
83+
port: 9093
84+
targetPort: 9093
85+
protocol: TCP
86+
name: metrics
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
suite: test controller servicemonitor
2+
templates:
3+
- controller-servicemonitor.yaml
4+
tests:
5+
- it: should not render by default
6+
asserts:
7+
- hasDocuments:
8+
count: 0
9+
10+
- it: should not render when only metrics.enabled is true
11+
set:
12+
controller.metrics.enabled: true
13+
asserts:
14+
- hasDocuments:
15+
count: 0
16+
17+
- it: should render ServiceMonitor when both enabled
18+
set:
19+
controller.metrics.enabled: true
20+
controller.metrics.serviceMonitor.enabled: true
21+
asserts:
22+
- isKind:
23+
of: ServiceMonitor
24+
- equal:
25+
path: spec.endpoints[0].port
26+
value: metrics

helm/kagent/values.yaml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,15 @@ controller:
222222
ports:
223223
port: 8083
224224
targetPort: 8083
225+
metrics:
226+
enabled: false
227+
port: 9093
228+
secure: false
229+
serviceMonitor:
230+
enabled: false
231+
interval: 30s
232+
scrapeTimeout: 10s
233+
labels: {}
225234
env: []
226235
envFrom: []
227236

0 commit comments

Comments
 (0)