From d02af73b94ed167526994ebbbf215aa0dc44f2e7 Mon Sep 17 00:00:00 2001 From: Hoyeon Lee <89958157+howooyeon@users.noreply.github.com> Date: Fri, 23 Oct 2026 17:50:24 +0900 Subject: [PATCH] =?UTF-8?q?chore:=20Prometheus=20=EC=95=8C=EB=A6=BC=20?= =?UTF-8?q?=EB=A3=B0=EC=9D=84=20=EB=A0=88=ED=8F=AC=EB=A1=9C=20=ED=8E=B8?= =?UTF-8?q?=EC=9E=85=ED=95=98=EA=B3=A0=20PodNotReady=20=EC=98=A4=ED=83=90?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- k8s/kustomization.yaml | 1 + k8s/monitoring/prometheusrule.yaml | 72 ++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+) create mode 100644 k8s/monitoring/prometheusrule.yaml diff --git a/k8s/kustomization.yaml b/k8s/kustomization.yaml index b4c042be..d6f557af 100644 --- a/k8s/kustomization.yaml +++ b/k8s/kustomization.yaml @@ -13,6 +13,7 @@ resources: - redis/pvc.yaml - minio/deployment.yaml - minio/service.yaml + - monitoring/prometheusrule.yaml images: - name: ghcr.io/semosan/semosan_be newTag: ae0e07ca129b8116f9f3428bed3462d9ba49b96d diff --git a/k8s/monitoring/prometheusrule.yaml b/k8s/monitoring/prometheusrule.yaml new file mode 100644 index 00000000..654a473a --- /dev/null +++ b/k8s/monitoring/prometheusrule.yaml @@ -0,0 +1,72 @@ +apiVersion: monitoring.coreos.com/v1 +kind: PrometheusRule +metadata: + name: semosan-app-alerts + namespace: monitoring + labels: + release: prometheus +spec: + groups: + - name: semosan-app + rules: + - alert: HighErrorRate + expr: sum(rate(http_server_requests_seconds_count{namespace="semosan",status=~"5.."}[5m])) / sum(rate(http_server_requests_seconds_count{namespace="semosan"}[5m])) > 0.05 + for: 3m + labels: + severity: critical + annotations: + summary: "API 5xx 에러율 5% 초과" + description: "최근 5분간 에러율: {{ $value | humanizePercentage }}" + dashboard: "http://10.99.110.31/d/semosan-app/semosan-application-monitor" + + - alert: HighResponseTime + expr: histogram_quantile(0.95, sum(rate(http_server_requests_seconds_bucket{namespace="semosan"}[5m])) by (le)) > 3 + for: 5m + labels: + severity: warning + annotations: + summary: "API 응답시간 p95 > 3초" + description: "p95 응답시간: {{ $value }}초" + dashboard: "http://10.99.110.31/d/semosan-app/semosan-application-monitor" + + - alert: JvmHeapHigh + expr: jvm_memory_used_bytes{namespace="semosan",area="heap"} / jvm_memory_max_bytes{namespace="semosan",area="heap"} > 0.85 + for: 5m + labels: + severity: warning + annotations: + summary: "JVM Heap 사용률 85% 초과" + description: "현재 Heap 사용률: {{ $value | humanizePercentage }}" + dashboard: "http://10.99.110.31/d/semosan-app/semosan-application-monitor" + + - alert: PodRestart + expr: increase(kube_pod_container_status_restarts_total{namespace="semosan"}[1h]) > 3 + for: 1m + labels: + severity: critical + annotations: + summary: "Pod 1시간 내 3회 이상 재시작" + description: "Pod {{ $labels.pod }} 재시작 횟수: {{ $value }}" + dashboard: "http://10.99.110.31/d/semosan-app/semosan-application-monitor" + + - alert: PodNotReady + expr: | + kube_pod_status_ready{namespace="semosan",condition="true"} == 0 + unless on(namespace,pod) kube_pod_status_phase{phase=~"Succeeded|Failed"} == 1 + for: 5m + labels: + severity: critical + annotations: + summary: "Pod가 5분 이상 Ready 아님" + description: "Pod {{ $labels.pod }}이 Ready 상태가 아닙니다" + dashboard: "http://10.99.110.31/d/semosan-app/semosan-application-monitor" + + - alert: HighDbConnectionUsage + expr: hikaricp_connections_active{namespace="semosan"} / hikaricp_connections_max{namespace="semosan"} > 0.8 + for: 3m + labels: + severity: warning + annotations: + summary: "DB 커넥션 풀 80% 초과" + description: "활성 커넥션: {{ $value | humanizePercentage }}" + dashboard: "http://10.99.110.31/d/semosan-app/semosan-application-monitor"