--- # yaml-language-server: $schema=https://kubernetes-schemas.pages.dev/helm.toolkit.fluxcd.io/helmrelease_v2beta2.json apiVersion: helm.toolkit.fluxcd.io/v2beta2 kind: HelmRelease metadata: name: kube-prometheus-stack namespace: monitoring spec: interval: 30m chart: spec: chart: kube-prometheus-stack version: 56.13.1 sourceRef: kind: HelmRepository name: prometheus-community namespace: flux-system interval: 5m maxHistory: 2 install: createNamespace: true crds: CreateReplace remediation: retries: 3 upgrade: cleanupOnFail: true crds: CreateReplace remediation: retries: 3 uninstall: keepHistory: false values: ### ### Component values ### kubeApiServer: enabled: true kubeControllerManager: enabled: false kubeEtcd: enabled: false kubelet: enabled: true serviceMonitor: metricRelabelings: - action: replace sourceLabels: - node targetLabel: instance kubeProxy: enabled: false kubeScheduler: enabled: false kubeStateMetrics: enabled: true metricLabelsAllowlist: - "persistentvolumeclaims=[*]" prometheus: monitor: enabled: true relabelings: - action: replace regex: (.*) replacement: $1 sourceLabels: - __meta_kubernetes_pod_node_name targetLabel: kubernetes_node grafana: enabled: false forceDeployDashboards: true nodeExporter: enabled: true prometheus-node-exporter: resources: requests: cpu: 23m memory: 64M limits: memory: 64M prometheus: monitor: enabled: true relabelings: - action: replace regex: (.*) replacement: $1 sourceLabels: - __meta_kubernetes_pod_node_name targetLabel: kubernetes_node ### ### Prometheus operator values ### prometheusOperator: prometheusConfigReloader: resources: requests: cpu: 100m memory: 50Mi limits: cpu: 300m memory: 100Mi ### ### Prometheus instance values ### prometheus: ingress: enabled: true pathType: Prefix ingressClassName: "nginx" annotations: nginx.ingress.kubernetes.io/auth-method: GET nginx.ingress.kubernetes.io/auth-url: http://authelia.default.svc.cluster.local.:8888/api/verify nginx.ingress.kubernetes.io/auth-signin: https://auth.${SECRET_CLUSTER_DOMAIN}?rm=$request_method nginx.ingress.kubernetes.io/auth-response-headers: Remote-User,Remote-Name,Remote-Groups,Remote-Email nginx.ingress.kubernetes.io/auth-snippet: proxy_set_header X-Forwarded-Method $request_method; hajimari.io/appName: "Prometheus" hajimari.io/icon: simple-icons:prometheus hosts: ["prometheus.${SECRET_CLUSTER_DOMAIN}"] tls: - hosts: - "prometheus.${SECRET_CLUSTER_DOMAIN}" prometheusSpec: replicas: 1 replicaExternalLabelName: "replica" ruleSelectorNilUsesHelmValues: false serviceMonitorSelectorNilUsesHelmValues: false podMonitorSelectorNilUsesHelmValues: false probeSelectorNilUsesHelmValues: false retention: 6h enableAdminAPI: true walCompression: true storageSpec: volumeClaimTemplate: spec: storageClassName: "rook-ceph-block" resources: requests: storage: 20Gi thanos: image: quay.io/thanos/thanos:v0.34.1@sha256:567346c3f6ff2927c2c6c0daad977b2213f62d45eca54d48afd19e6deb902181 # renovate: datasource=docker depName=quay.io/thanos/thanos version: "v0.34.1" objectStorageConfig: existingSecret: name: thanos-objstore-secret key: objstore.yml additionalScrapeConfigs: - job_name: "opnsense" scrape_interval: 60s metrics_path: "/metrics" static_configs: - targets: ["${LOCAL_LAN_OPNSENSE}:9273"] labels: app: "opnsense" - job_name: "truenas" scrape_interval: 60s metrics_path: "/metrics" static_configs: - targets: ["192.168.9.10:9273"] labels: app: "truenas" - job_name: "truenas-remote" scrape_interval: 60s metrics_path: "/metrics" static_configs: - targets: ["${LOCAL_LAN_TRUENAS_REMOTE}:9273"] labels: app: "truenas-remote" thanosService: enabled: true thanosServiceMonitor: enabled: true thanosIngress: enabled: true pathType: Prefix ingressClassName: "nginx" annotations: nginx.ingress.kubernetes.io/ssl-redirect: "true" nginx.ingress.kubernetes.io/backend-protocol: "GRPC" hajimari.io/enable: "false" hosts: - &thanosHost "thanos-sidecar.${SECRET_DOMAIN}" tls: - hosts: - *thanosHost alertmanager: config: global: resolve_timeout: 5m receivers: - name: "null" - name: "pushover" pushover_configs: - user_key: ${SECRET_KUBE_PROMETHEUS_STACK_ALERTMANAGER_PUSHOVER_USER_KEY} token: ${SECRET_KUBE_PROMETHEUS_STACK_ALERTMANAGER_PUSHOVER_TOKEN} send_resolved: true html: true priority: |- {{ if eq .Status "firing" }}1{{ else }}0{{ end }} url_title: View in Alert Manager title: |- [{{ .Status | toUpper -}} {{ if eq .Status "firing" }}:{{ .Alerts.Firing | len }}{{- end -}} ] {{ .CommonLabels.alertname }} message: |- {{- range .Alerts }} {{- if ne .Labels.severity "" }} Severity: {{ .Labels.severity }} {{- else }} Severity: N/A {{- end }} {{- if ne .Annotations.description "" }} Description: {{ .Annotations.description }} {{- else if ne .Annotations.summary "" }} Summary: {{ .Annotations.summary }} {{- else if ne .Annotations.message "" }} Message: {{ .Annotations.message }} {{- else }} Description: N/A {{- end }} {{- if gt (len .Labels.SortedPairs) 0 }} Details: {{- range .Labels.SortedPairs }} • {{ .Name }}: {{ .Value }} {{- end }} {{- end }} {{- end }} route: receiver: "pushover" routes: - receiver: "null" matchers: - alertname =~ "InfoInhibitor|Watchdog|RebootScheduled" - receiver: "pushover" matchers: - severity = "critical" continue: true inhibit_rules: - source_matchers: - severity = "critical" target_matchers: - severity = "warning" equal: ["alertname", "namespace"] alertmanagerSpec: replicas: 1 podAntiAffinity: hard storage: volumeClaimTemplate: spec: storageClassName: rook-ceph-block resources: requests: storage: 1Gi ingress: enabled: true pathType: Prefix ingressClassName: "nginx" annotations: nginx.ingress.kubernetes.io/auth-method: GET nginx.ingress.kubernetes.io/auth-url: http://authelia.default.svc.cluster.local.:8888/api/verify nginx.ingress.kubernetes.io/auth-signin: https://auth.${SECRET_CLUSTER_DOMAIN}?rm=$request_method nginx.ingress.kubernetes.io/auth-response-headers: Remote-User,Remote-Name,Remote-Groups,Remote-Email nginx.ingress.kubernetes.io/auth-snippet: proxy_set_header X-Forwarded-Method $request_method; hajimari.io/appName: "Alert Manager" hajimari.io/icon: mdi:alert-decagram-outline hosts: ["alert-manager.${SECRET_CLUSTER_DOMAIN}"] tls: - hosts: - "alert-manager.${SECRET_CLUSTER_DOMAIN}" prometheus: monitor: enabled: true relabelings: - action: replace regex: (.*) replacement: $1 sourceLabels: - __meta_kubernetes_pod_node_name targetLabel: kubernetes_node