Prometheus 监控 K8S pod 的解决方案
nginx 是一个开源的 Web 服务器,通常用作反向代理、负载均衡器和 Web 缓存。专为高负载的并发连接而设计,它快速、通用、可靠,最重要的是,资源非常少。 在本文中,您将学习如何使用 Prometheus 监控 Kubernetes 中的 nginx,以及如何解决与延迟
添加nginx 配置文件
vim nginx.conf
server {
listen 80;
listen [::]:80;
server_name localhost default_server;
client_max_body_size 200m;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri/index.html /index.html;
}
}
server {
listen 8080;
server_name localhost;
location /stub_status {
stub_status on;
access_log off;
}
}
[root@node2 ]# cat index.html
这是测试页面 感谢
aaaaaaaaaaa
ddddddddddddd
添加 dockerfile 文件
FROM nginx
COPY index.html /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf
构建nginx images 镜像
docker build -t nginx:v1 -f dockerfile .
kind: Deployment
apiVersion: apps/v1
metadata:
name: web-nginx
spec:
replicas: 1
selector:
matchLabels:
k8s-app: web-nginx
template:
metadata:
annotations:
prometheus.io/scrape: 'true'
prometheus.io/port: '9113'
labels:
k8s-app: web-nginx
spec:
containers:
- image: nginx:v1
name: web-nginx
ports:
- containerPort: 80
- name: nginx-prometheus
image: 857676355/nginx-prometheus:v1
args:
- '-nginx.scrape-uri=http://localhost:8080/stub_status'
resources:
limits:
memory: 128Mi
cpu: 128m
运行pod
[root@node2 ~]# kubectl apply -f demo2.yaml
deployment.apps/web-nginx created
[root@node2 ~]#
监控配置prometheus文件
1.配置 prometheus-config
告警规则 和 监控
global:
scrape_interval: 2s
scrape_timeout: 2s
evaluation_interval: 2s
alerting:
alertmanagers:
- static_configs:
- targets:
- 192.168.1.104:9093 #alertmanagersIP
rule_files:
- "/etc/prometheus-rules/rules"
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'k8s-nodes'
kubernetes_sd_configs:
- role: node
scheme: https
tls_config:
ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
relabel_configs:
- action: labelmap
regex: __meta_kubernetes_node_label_(.+)
- target_label: __address__
replacement: kubernetes.default.svc:443
- source_labels: [__meta_kubernetes_node_name]
regex: (.+)
target_label: __metrics_path__
replacement: /api/v1/nodes/${1}/proxy/metrics
- job_name: 'kubernetes-pods'
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
action: keep
regex: true
- source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path]
action: replace
target_label: __metrics_path__
regex: (.+)
- source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port]
action: replace
regex: ([^:]+)(?::\d+)?;(\d+)
replacement: $1:$2
target_label: __address__
- action: labelmap
regex: __meta_kubernetes_pod_label_(.+)
- source_labels: [__meta_kubernetes_namespace]
action: replace
target_label: kubernetes_namespace
- source_labels: [__meta_kubernetes_pod_name]
action: replace
target_label: kubernetes_pod_name
https://yunlzheng.gitbook.io/prometheus-book/part-iii-prometheus-shi-zhan/readmd/use-prometheus-monitor-kubernetes
这是官网的注解
告警规则
groups:
- name: Down
rules:
- alert: Down
expr: up == 0
for: 30s
labels:
severity: critical
annotations:
description: "服务不可用,已经掉线"
看到这个图就说明 已经监控上了 pod
添加监控