利用脚本获取证书到期时间:
#!/bin/bash # 获取当前时间的Unix时间戳 currentTimestamp=$(date +%s) kubectl get secrets --all-namespaces -o json | jq -r '.items[] | select(.type == "kubernetes.io/tls") | "\(.metadata.name) \(.metadata.namespace)"' | while read secretName namespace; do # 获取Secret中的tls.crt并解码 tlsCert=$(kubectl get secret "$secretName" -n "$namespace" -o jsonpath='{.data.tls\.crt}' | base64 --decode) # 使用OpenSSL检查证书的过期时间 expirationDate=$(echo "$tlsCert" | openssl x509 -noout -enddate | awk -F'=' '{print $2}') # 将原始日期转换为Unix时间戳 expireTimestamp=$(date -d "$expirationDate" +%s) # 计算剩余秒数 remainingSeconds=$((expireTimestamp - currentTimestamp)) # 输出Prometheus监控指标格式 printf 'secret_expire_time{secret_name="%s",namespace="%s"} %d\n' "$secretName" "$namespace" "$remainingSeconds" done |
配置ingress监控
apiVersion: v1 kind: Service metadata: name: ingress-nginx-controller-metrics namespace: ingress-nginx labels: app: ingress-nginx-default component: controller tier: ingress-nginx spec: type: ClusterIP ports: - name: metrics port: 10254 protocol: TCP selector: app: ingress-nginx-default component: controller tier: ingress-nginx --- apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: ingress-nginx-controller-metrics namespace: ingress-nginx spec: endpoints: - interval: 30s port: metrics jobLabel: k8s-app namespaceSelector: matchNames: - ingress-nginx selector: matchLabels: app: ingress-nginx-default component: controller tier: ingress-nginx |
告警规则
apiVersion: monitoring.coreos.com/v1 kind: PrometheusRule metadata: labels: prometheus: k8s role: alert-rules name: nginx-ingress-rules namespace: monitoring spec: groups: - name: nginx-ingress-rules rules: - alert: NginxFailedtoLoadConfiguration expr: nginx_ingress_controller_config_last_reload_successful == 0 for: 1m labels: severity: critical annotations: summary: "Nginx Ingress Controller配置文件加载失败" description: "Nginx Ingress Controller的配置文件加载失败,请检查配置文件是否正确。" - alert: NginxHighHttp4xxErrorRate expr: rate(nginx_ingress_controller_requests{status=~"^404"}[5m]) * 100 > 1 for: 1m labels: severity: warning annotations: description: "Nginx high HTTP 4xx error rate ( namespaces {{ $labels.exported_namespace }} host {{ $labels.host }} )" summary: "Too many HTTP requests with status 404 (> 1%)" - alert: NginxHighHttp5xxErrorRate expr: rate(nginx_ingress_controller_requests{status=~"^5.."}[5m]) * 100 > 1 for: 1m labels: severity: warning annotations: description: "Nginx high HTTP 5xx error rate ( namespaces {{ $labels.exported_namespace }} host {{ $labels.host }} )" summary: "Too many HTTP requests with status 5xx (> 1%)" - alert: NginxLatencyHigh expr: histogram_quantile(0.99, sum(rate(nginx_ingress_controller_request_duration_seconds_bucket[2m])) by (host, node)) > 3 for: 2m labels: severity: warning annotations: description: "Nginx latency high ( namespaces {{ $labels.exported_namespace }} host {{ $labels.host }} )" summary: "Nginx p99 latency is higher than 3 seconds" - alert: NginxHighRequestRate expr: rate(nginx_ingress_controller_nginx_process_requests_total[5m]) * 100 > 1000 for: 1m labels: severity: warning annotations: description: "Nginx ingress controller high request rate ( instance {{ $labels.instance }} namespaces {{ $labels.namespaces }} pod {{$labels.pod}})" summary: "Nginx ingress controller high request rate (> 1000 requests per second)" - alert: SSLCertificateExpiration15day expr: nginx_ingress_controller_ssl_expire_time_seconds < 1296000 for: 30m labels: severity: warning annotations: summary: "SSL/TLS certificate for {{ $labels.host }}{{ $labels.secret_name }} is about to expire" description: "The SSL/TLS certificate for {{ $labels.host }}{{ $labels.secret_name }} will expire in less than 15 days." - alert: SSLCertificateExpiration7day expr: nginx_ingress_controller_ssl_expire_time_seconds < 604800 for: 30m labels: severity: critical annotations: summary: "SSL/TLS certificate for {{ $labels.host }}{{ $labels.secret_name }} is about to expire" description: "The SSL/TLS certificate for {{ $labels.host }}{{ $labels.secret_name }} will expire in less than 7 days." |
grafana图表序号:
Ingress-nginx模板ID:9614
Ingress-nginx模板ID:14314
常用metrics解释
这些指标通过 Prometheus 暴露,并可以用于监控和告警: nginx_ingress_controller_bytes_sent_bucket: 请求发送字节大小的分布情况(通常为直方图的一部分,用于计算请求字节量的分位数)。 nginx_ingress_controller_bytes_sent_count: 发送的总请求数量,每个请求发送的字节累加的总和。 nginx_ingress_controller_bytes_sent_sum: 发送的总字节量,累计所有请求发送的字节。 nginx_ingress_controller_config_hash: 当前Nginx配置的哈希值,可用来检测配置是否有变化。 nginx_ingress_controller_config_last_reload_successful: 标识最后一次重新加载Nginx配置是否成功(1表示成功,0表示失败)。 nginx_ingress_controller_config_last_reload_successful_timestamp_seconds: 最后一次成功重新加载Nginx配置的时间戳。 nginx_ingress_controller_ingress_upstream_latency_seconds: 记录从ingress到上游服务的延迟。 nginx_ingress_controller_ingress_upstream_latency_seconds_count: 上游服务延迟计数。 nginx_ingress_controller_ingress_upstream_latency_seconds_sum: 上游服务延迟总和。 nginx_ingress_controller_leader_election_status: 标识当前实例是否是领导者(leader election用于决定哪个Ingress controller实例是主控)。 nginx_ingress_controller_nginx_process_connections: Nginx进程当前的活跃连接数。 nginx_ingress_controller_nginx_process_connections_total: Nginx进程处理的总连接数。 nginx_ingress_controller_nginx_process_cpu_seconds_total: Nginx进程消耗的CPU时间总量。 nginx_ingress_controller_nginx_process_num_procs: Nginx进程数。 nginx_ingress_controller_nginx_process_oldest_start_time_seconds: 最老的Nginx进程启动时间。 nginx_ingress_controller_nginx_process_read_bytes_total: Nginx进程读操作的总字节数。 nginx_ingress_controller_nginx_process_requests_total: Nginx进程处理的总请求数量。 nginx_ingress_controller_nginx_process_resident_memory_bytes: Nginx进程的常驻内存大小。 nginx_ingress_controller_nginx_process_virtual_memory_bytes: Nginx进程的虚拟内存大小。 nginx_ingress_controller_nginx_process_write_bytes_total: Nginx进程写操作的总字节数。 nginx_ingress_controller_request_duration_seconds_bucket: 处理请求的持续时间的分布情况。 nginx_ingress_controller_request_duration_seconds_count: 请求持续时间的计数。 nginx_ingress_controller_request_duration_seconds_sum: 请求持续时间的总和。 nginx_ingress_controller_requests: 处理的总请求量。 nginx_ingress_controller_request_size_bucket: 请求大小的分布情况。 nginx_ingress_controller_request_size_count: 请求大小的计数。 nginx_ingress_controller_request_size_sum: 请求大小的总和。 nginx_ingress_controller_response_duration_seconds_bucket: 响应时间的分布情况。 nginx_ingress_controller_response_duration_seconds_count: 响应时间的计数。 nginx_ingress_controller_response_duration_seconds_sum: 响应时间的总和。 nginx_ingress_controller_response_size_bucket: 响应大小的分布情况。 nginx_ingress_controller_response_size_count: 响应大小的计数。 nginx_ingress_controller_response_size_sum: 响应大小的总和。 nginx_ingress_controller_ssl_expire_time_seconds: SSL证书到期时间。 nginx_ingress_controller_success: 成功处理的请求计数。 process_cpu_seconds_total: 进程消耗的CPU时间总量。 process_max_fds: 进程可以打开的最大文件描述符数量。 process_open_fds: 进程当前打开的文件描述符数量。 process_resident_memory_bytes: 进程的常驻内存大小。 process_start_time_seconds: 进程启动的开始时间。 process_virtual_memory_bytes: 进程的虚拟内存大小。 process_virtual_memory_max_bytes: 进程可以使用的最大虚拟内存大小。 promhttp_metric_handler_requests_in_flight: 当前正在处理的promhttp指标处理器的请求数量。 promhttp_metric_handler_requests_total: promhttp指标处理器处理的总请求数量。 |