diff --git a/charts/templates/servicemonitor.yaml b/charts/templates/servicemonitor.yaml new file mode 100644 index 0000000..f36e617 --- /dev/null +++ b/charts/templates/servicemonitor.yaml @@ -0,0 +1,28 @@ +{{- if .Values.serviceMonitor.enabled }} +apiVersion: monitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + name: {{ include "hyperfleet-api.fullname" . }} + {{- if .Values.serviceMonitor.namespace }} + namespace: {{ .Values.serviceMonitor.namespace }} + {{- end }} + labels: + {{- include "hyperfleet-api.labels" . | nindent 4 }} + {{- with .Values.serviceMonitor.labels }} + {{- toYaml . | nindent 4 }} + {{- end }} +spec: + selector: + matchLabels: + {{- include "hyperfleet-api.selectorLabels" . | nindent 6 }} + {{- if .Values.serviceMonitor.namespace }} + namespaceSelector: + matchNames: + - {{ .Release.Namespace }} + {{- end }} + endpoints: + - port: metrics + path: /metrics + interval: {{ .Values.serviceMonitor.interval }} + scrapeTimeout: {{ .Values.serviceMonitor.scrapeTimeout }} +{{- end }} diff --git a/charts/values.yaml b/charts/values.yaml index b586bbf..0d62568 100644 --- a/charts/values.yaml +++ b/charts/values.yaml @@ -125,6 +125,22 @@ adapters: # Default: ["validation", "hypershift"] nodepool: [] +# ServiceMonitor for Prometheus Operator +# Enables automatic metrics discovery in clusters with Prometheus Operator +serviceMonitor: + # Enable ServiceMonitor creation + enabled: false + # Scrape interval + interval: 30s + # Scrape timeout (must be less than interval) + scrapeTimeout: 10s + # Additional labels for ServiceMonitor to match Prometheus selector + # Example: release: prometheus + labels: {} + # Override the namespace where ServiceMonitor is created + # If empty, uses the release namespace + namespace: "" + # Additional environment variables # You can override adapters by setting HYPERFLEET_*_ADAPTERS here env: [] diff --git a/docs/deployment.md b/docs/deployment.md index 5e87731..af7a21c 100644 --- a/docs/deployment.md +++ b/docs/deployment.md @@ -215,6 +215,11 @@ helm uninstall hyperfleet-api --namespace hyperfleet-system | `database.postgresql.enabled` | Enable built-in PostgreSQL | `true` | | `database.external.enabled` | Use external database | `false` | | `database.external.secretName` | Secret containing database credentials | `hyperfleet-db-external` | +| `serviceMonitor.enabled` | Enable Prometheus Operator ServiceMonitor | `false` | +| `serviceMonitor.interval` | Metrics scrape interval | `30s` | +| `serviceMonitor.scrapeTimeout` | Metrics scrape timeout | `10s` | +| `serviceMonitor.labels` | Additional labels for Prometheus selector | `{}` | +| `serviceMonitor.namespace` | Namespace for ServiceMonitor (if different) | `""` | | `replicaCount` | Number of API replicas | `1` | | `resources.limits.cpu` | CPU limit | `500m` | | `resources.limits.memory` | Memory limit | `512Mi` | @@ -342,7 +347,33 @@ Enable autoscaling via Helm values (`autoscaling.enabled=true`). Prometheus metrics available at `http://:9090/metrics`. -For Prometheus Operator, enable ServiceMonitor via Helm values (`serviceMonitor.enabled=true`). +### Prometheus Operator Integration + +For clusters with Prometheus Operator, enable the ServiceMonitor to automatically discover and scrape metrics: + +```bash +helm install hyperfleet-api ./charts/ \ + --namespace hyperfleet-system \ + --set serviceMonitor.enabled=true +``` + +If your Prometheus requires specific labels for service discovery, add them: + +```bash +helm install hyperfleet-api ./charts/ \ + --namespace hyperfleet-system \ + --set serviceMonitor.enabled=true \ + --set serviceMonitor.labels.release=prometheus +``` + +To create the ServiceMonitor in a different namespace (e.g., `monitoring`): + +```bash +helm install hyperfleet-api ./charts/ \ + --namespace hyperfleet-system \ + --set serviceMonitor.enabled=true \ + --set serviceMonitor.namespace=monitoring +``` ## Production Best Practices