{{- if .Values.prometheus.enabled }}
apiVersion: v1
data:
  alerting_rules.yml: |
    groups:
    - name: disk-usage-rules
      rules:
      - alert: HighRootDiskUsageWarning
        expr: |
          (
            1
            - node_filesystem_avail_bytes{
                job="kubernetes-service-endpoints",
                mountpoint="/",
                fstype!="rootfs"
              }
              / node_filesystem_size_bytes{
                job="kubernetes-service-endpoints",
                mountpoint="/",
                fstype!="rootfs"
              }
          ) * 100 > 80
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "Root disk usage > 80%% (instance {{ .Values.domain }})"
          description: "On instance {{ .Values.domain }}, the root disk usage exceeded 80%%."

      - alert: HighRootDiskUsageCritical
        expr: |
          (
            1
            - node_filesystem_avail_bytes{
                job="kubernetes-service-endpoints",
                mountpoint="/",
                fstype!="rootfs"
              }
              / node_filesystem_size_bytes{
                job="kubernetes-service-endpoints",
                mountpoint="/",
                fstype!="rootfs"
              }
          ) * 100 > 90
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "Root disk usage > 90%% (instance {{ .Values.domain }})"
          description: "On instance {{ .Values.domain }}, the root disk usage exceeded 90%%."

      - alert: HighDataDiskUsageWarning
        expr: |
          (
            1
            - node_filesystem_avail_bytes{
                job="kubernetes-service-endpoints",
                mountpoint=~"/data/.*",
                fstype!="rootfs"
              }
              / node_filesystem_size_bytes{
                job="kubernetes-service-endpoints",
                mountpoint=~"/data/.*",
                fstype!="rootfs"
              }
          ) * 100 > 80
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "Data disk usage > 80%% (instance {{ .Values.domain }})"
          description: "On instance {{ .Values.domain }}, a data disk (/data/*) usage exceeded 80%%."

      - alert: HighDataDiskUsageCritical
        expr: |
          (
            1
            - node_filesystem_avail_bytes{
                job="kubernetes-service-endpoints",
                mountpoint=~"/data/.*",
                fstype!="rootfs"
              }
              / node_filesystem_size_bytes{
                job="kubernetes-service-endpoints",
                mountpoint=~"/data/.*",
                fstype!="rootfs"
              }
          ) * 100 > 90
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "Data disk usage > 90%% (instance {{ .Values.domain }})"
          description: "On instance {{ .Values.domain }}, a data disk (/data/*) usage exceeded 90%%."

    - name: cpu-memory-rules
      rules:
      - alert: HighCPUUsageWarning
        expr: |
          (1 - avg by(instance) (irate(node_cpu_seconds_total{
            job="kubernetes-service-endpoints",
            mode="idle"
          }[2m]))) * 100 > 80
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "CPU usage > 80%% (instance {{ .Values.domain }})"
          description: "On instance {{ .Values.domain }}, CPU usage has exceeded 80%% for 5m."

      - alert: HighCPUUsageCritical
        expr: |
          (1 - avg by(instance) (irate(node_cpu_seconds_total{
            job="kubernetes-service-endpoints",
            mode="idle"
          }[2m]))) * 100 > 90
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "CPU usage > 90%% (instance {{ .Values.domain }})"
          description: "On instance {{ .Values.domain }}, CPU usage has exceeded 90%% for 5m."

      - alert: HighMemoryUsageWarning
        expr: |
          (
            1 - node_memory_MemAvailable_bytes{
                  job="kubernetes-service-endpoints"
                }
                / node_memory_MemTotal_bytes{
                  job="kubernetes-service-endpoints"
                }
          ) * 100 > 80
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "Memory usage > 80%% (instance {{ .Values.domain }})"
          description: "On instance {{ .Values.domain }}, memory usage has exceeded 80%% for 5m."

      - alert: HighMemoryUsageCritical
        expr: |
          (
            1 - node_memory_MemAvailable_bytes{
                  job="kubernetes-service-endpoints"
                }
                / node_memory_MemTotal_bytes{
                  job="kubernetes-service-endpoints"
                }
          ) * 100 > 90
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "Memory usage > 90%% (instance {{ .Values.domain }})"
          description: "On instance {{ .Values.domain }}, memory usage has exceeded 90%% for 5m."
  alerts: |
    {}
  allow-snippet-annotations: "false"
  prometheus.yml: |
    global:
      evaluation_interval: 1m
      scrape_interval: 1m
      scrape_timeout: 10s
    rule_files:
    - /etc/config/recording_rules.yml
    - /etc/config/alerting_rules.yml
    - /etc/config/rules
    - /etc/config/alerts
    scrape_configs:
    - job_name: prometheus
      static_configs:
      - targets:
        - localhost:9090
    - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
      job_name: kubernetes-apiservers
      kubernetes_sd_configs:
      - role: endpoints
      relabel_configs:
      - action: keep
        regex: default;kubernetes;https
        source_labels:
        - __meta_kubernetes_namespace
        - __meta_kubernetes_service_name
        - __meta_kubernetes_endpoint_port_name
      scheme: https
      tls_config:
        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
        insecure_skip_verify: true
    - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
      job_name: kubernetes-nodes
      kubernetes_sd_configs:
      - role: node
      relabel_configs:
      - action: labelmap
        regex: __meta_kubernetes_node_label_(.+)
      - replacement: kubernetes.default.svc:443
        target_label: __address__
      - regex: (.+)
        replacement: /api/v1/nodes/$1/proxy/metrics
        source_labels:
        - __meta_kubernetes_node_name
        target_label: __metrics_path__
      scheme: https
      tls_config:
        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
        insecure_skip_verify: true
    - bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
      job_name: kubernetes-nodes-cadvisor
      kubernetes_sd_configs:
      - role: node
      relabel_configs:
      - action: labelmap
        regex: __meta_kubernetes_node_label_(.+)
      - replacement: kubernetes.default.svc:443
        target_label: __address__
      - regex: (.+)
        replacement: /api/v1/nodes/$1/proxy/metrics/cadvisor
        source_labels:
        - __meta_kubernetes_node_name
        target_label: __metrics_path__
      scheme: https
      tls_config:
        ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
        insecure_skip_verify: true
    - honor_labels: true
      job_name: kubernetes-service-endpoints
      kubernetes_sd_configs:
      - role: endpoints
      relabel_configs:
      - action: keep
        regex: true
        source_labels:
        - __meta_kubernetes_service_annotation_prometheus_io_scrape
      - action: drop
        regex: true
        source_labels:
        - __meta_kubernetes_service_annotation_prometheus_io_scrape_slow
      - action: replace
        regex: (https?)
        source_labels:
        - __meta_kubernetes_service_annotation_prometheus_io_scheme
        target_label: __scheme__
      - action: replace
        regex: (.+)
        source_labels:
        - __meta_kubernetes_service_annotation_prometheus_io_path
        target_label: __metrics_path__
      - action: replace
        regex: (.+?)(?::\d+)?;(\d+)
        replacement: $1:$2
        source_labels:
        - __address__
        - __meta_kubernetes_service_annotation_prometheus_io_port
        target_label: __address__
      - action: labelmap
        regex: __meta_kubernetes_service_annotation_prometheus_io_param_(.+)
        replacement: __param_$1
      - action: labelmap
        regex: __meta_kubernetes_service_label_(.+)
      - action: replace
        source_labels:
        - __meta_kubernetes_namespace
        target_label: namespace
      - action: replace
        source_labels:
        - __meta_kubernetes_service_name
        target_label: service
      - action: replace
        source_labels:
        - __meta_kubernetes_pod_node_name
        target_label: node
    - honor_labels: true
      job_name: kubernetes-service-endpoints-slow
      kubernetes_sd_configs:
      - role: endpoints
      relabel_configs:
      - action: keep
        regex: true
        source_labels:
        - __meta_kubernetes_service_annotation_prometheus_io_scrape_slow
      - action: replace
        regex: (https?)
        source_labels:
        - __meta_kubernetes_service_annotation_prometheus_io_scheme
        target_label: __scheme__
      - action: replace
        regex: (.+)
        source_labels:
        - __meta_kubernetes_service_annotation_prometheus_io_path
        target_label: __metrics_path__
      - action: replace
        regex: (.+?)(?::\d+)?;(\d+)
        replacement: $1:$2
        source_labels:
        - __address__
        - __meta_kubernetes_service_annotation_prometheus_io_port
        target_label: __address__
      - action: labelmap
        regex: __meta_kubernetes_service_annotation_prometheus_io_param_(.+)
        replacement: __param_$1
      - action: labelmap
        regex: __meta_kubernetes_service_label_(.+)
      - action: replace
        source_labels:
        - __meta_kubernetes_namespace
        target_label: namespace
      - action: replace
        source_labels:
        - __meta_kubernetes_service_name
        target_label: service
      - action: replace
        source_labels:
        - __meta_kubernetes_pod_node_name
        target_label: node
      scrape_interval: 5m
      scrape_timeout: 30s
    - honor_labels: true
      job_name: prometheus-pushgateway
      kubernetes_sd_configs:
      - role: service
      relabel_configs:
      - action: keep
        regex: pushgateway
        source_labels:
        - __meta_kubernetes_service_annotation_prometheus_io_probe
    - honor_labels: true
      job_name: kubernetes-services
      kubernetes_sd_configs:
      - role: service
      metrics_path: /probe
      params:
        module:
        - http_2xx
      relabel_configs:
      - action: keep
        regex: true
        source_labels:
        - __meta_kubernetes_service_annotation_prometheus_io_probe
      - source_labels:
        - __address__
        target_label: __param_target
      - replacement: blackbox
        target_label: __address__
      - source_labels:
        - __param_target
        target_label: instance
      - action: labelmap
        regex: __meta_kubernetes_service_label_(.+)
      - source_labels:
        - __meta_kubernetes_namespace
        target_label: namespace
      - source_labels:
        - __meta_kubernetes_service_name
        target_label: service
    - honor_labels: true
      job_name: kubernetes-pods
      kubernetes_sd_configs:
      - role: pod
      relabel_configs:
      - action: keep
        regex: true
        source_labels:
        - __meta_kubernetes_pod_annotation_prometheus_io_scrape
      - action: drop
        regex: true
        source_labels:
        - __meta_kubernetes_pod_annotation_prometheus_io_scrape_slow
      - action: replace
        regex: (https?)
        source_labels:
        - __meta_kubernetes_pod_annotation_prometheus_io_scheme
        target_label: __scheme__
      - action: replace
        regex: (.+)
        source_labels:
        - __meta_kubernetes_pod_annotation_prometheus_io_path
        target_label: __metrics_path__
      - action: replace
        regex: (\d+);(([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4})
        replacement: '[$2]:$1'
        source_labels:
        - __meta_kubernetes_pod_annotation_prometheus_io_port
        - __meta_kubernetes_pod_ip
        target_label: __address__
      - action: replace
        regex: (\d+);((([0-9]+?)(\.|$)){4})
        replacement: $2:$1
        source_labels:
        - __meta_kubernetes_pod_annotation_prometheus_io_port
        - __meta_kubernetes_pod_ip
        target_label: __address__
      - action: labelmap
        regex: __meta_kubernetes_pod_annotation_prometheus_io_param_(.+)
        replacement: __param_$1
      - action: labelmap
        regex: __meta_kubernetes_pod_label_(.+)
      - action: replace
        source_labels:
        - __meta_kubernetes_namespace
        target_label: namespace
      - action: replace
        source_labels:
        - __meta_kubernetes_pod_name
        target_label: pod
      - action: drop
        regex: Pending|Succeeded|Failed|Completed
        source_labels:
        - __meta_kubernetes_pod_phase
      - action: replace
        source_labels:
        - __meta_kubernetes_pod_node_name
        target_label: node
    - honor_labels: true
      job_name: kubernetes-pods-slow
      kubernetes_sd_configs:
      - role: pod
      relabel_configs:
      - action: keep
        regex: true
        source_labels:
        - __meta_kubernetes_pod_annotation_prometheus_io_scrape_slow
      - action: replace
        regex: (https?)
        source_labels:
        - __meta_kubernetes_pod_annotation_prometheus_io_scheme
        target_label: __scheme__
      - action: replace
        regex: (.+)
        source_labels:
        - __meta_kubernetes_pod_annotation_prometheus_io_path
        target_label: __metrics_path__
      - action: replace
        regex: (\d+);(([A-Fa-f0-9]{1,4}::?){1,7}[A-Fa-f0-9]{1,4})
        replacement: '[$2]:$1'
        source_labels:
        - __meta_kubernetes_pod_annotation_prometheus_io_port
        - __meta_kubernetes_pod_ip
        target_label: __address__
      - action: replace
        regex: (\d+);((([0-9]+?)(\.|$)){4})
        replacement: $2:$1
        source_labels:
        - __meta_kubernetes_pod_annotation_prometheus_io_port
        - __meta_kubernetes_pod_ip
        target_label: __address__
      - action: labelmap
        regex: __meta_kubernetes_pod_annotation_prometheus_io_param_(.+)
        replacement: __param_$1
      - action: labelmap
        regex: __meta_kubernetes_pod_label_(.+)
      - action: replace
        source_labels:
        - __meta_kubernetes_namespace
        target_label: namespace
      - action: replace
        source_labels:
        - __meta_kubernetes_pod_name
        target_label: pod
      - action: drop
        regex: Pending|Succeeded|Failed|Completed
        source_labels:
        - __meta_kubernetes_pod_phase
      - action: replace
        source_labels:
        - __meta_kubernetes_pod_node_name
        target_label: node
      scrape_interval: 5m
      scrape_timeout: 30s
    - job_name: server
      metrics_path: /metrics
      static_configs:
        - targets:
          - server:8080
    alerting:
      alertmanagers:
      - kubernetes_sd_configs:
          - role: pod
        tls_config:
          ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
        bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
        relabel_configs:
        - source_labels: [__meta_kubernetes_namespace]
          regex: {{ .Values.customer }}
          action: keep
        - source_labels: [__meta_kubernetes_pod_label_app_kubernetes_io_instance]
          regex: {{ .Values.customer }}
          action: keep
        - source_labels: [__meta_kubernetes_pod_label_app_kubernetes_io_name]
          regex: alertmanager
          action: keep
        - source_labels: [__meta_kubernetes_pod_container_port_number]
          regex: "9093"
          action: keep
  recording_rules.yml: |
    {}
  rules: |
    {}
kind: ConfigMap
metadata:
  name: prometheus-server
{{ end }}
