一、Prometheus Operator 介绍
Prometheus Operator 是 CoreOS 开发的基于 Prometheus 的 Kubernetes 监控方案,也可能是目前功能最全面的开源方案。
Prometheus Operator架构图
二、安装prometheus operator
测试环境:
[root@k8s-m manifests]# kubectl get node NAME STATUS ROLES AGE VERSION k8s-m Ready master 5h27m v1.15.2 node Ready <none> 5h26m v1.15.2
1、安装metrucs-server
https://www.cnblogs.com/zhangb8042/p/10204997.html
2、部署Prometheus监控方案
#下载prometheus-operator代码 git clone https://github.com/AliyunContainerService/prometheus-operator cd prometheus-operator/contrib/kube-prometheus/ #部署Prometheus监控方案 kubectl apply -f manifests/ #查看 [root@k8s-m kube-prometheus]# kubectl get namespaces monitoring NAME STATUS AGE monitoring Active 71s
3、把服务对公网开放(没有需要的话可以忽略这步)
方法一、
把相对应的service类型改为NodePort(这样就会映射一个30000-32767的外网端口用于访问)
#随机端口 kubectl patch svc prometheus-k8s -n monitoring -p \'{"spec":{"type":"NodePort"}}\' #指定端口30090 kubectl patch svc prometheus-k8s -n monitoring -p \'{"spec":{"type":"NodePort","ports":[{"name":"web","port":9090,"protocol":"TCP","targetPort":"web","nodePort":30090}]}}\'
方法二、
使用Proxy的方式临时访问
例如:(临时允许访问服务器的3000端口,注意:该方法只能是访问使用了下面这条命令的服务器IP)
kubectl --namespace monitoring port-forward svc/grafana --address=\'0.0.0.0\' 3000
方法三、使用ingress的方式让外网访问
开放公网访问(我用的是nodePort方法)
#grafana使用30030、prometheus使用30090、alertmanager使用30093。成功后浏览器访问即可
#grafana登录的账号密码都是admin
kubectl patch svc grafana -n monitoring -p \'{"spec":{"type":"NodePort","ports":[{"name":"http","port":3000,"protocol":"TCP","targetPort":"http","nodePort":30030}]}}\' kubectl patch svc prometheus-k8s -n monitoring -p \'{"spec":{"type":"NodePort","ports":[{"name":"web","port":9090,"protocol":"TCP","targetPort":"web","nodePort":30090}]}}\' kubectl patch svc alertmanager-main -n monitoring -p \'{"spec":{"type":"NodePort","ports":[{"name":"web","port":9093,"protocol":"TCP","targetPort":"web","nodePort":30093}]}}\'
三、监控模板配置
所有的监控项都在这个文件中(上面git下载的),可以直接删除或者添加新的监控项(感觉有不少默认的监控模板用不到)
/root/prometheus-operator/contrib/kube-prometheus/manifests/prometheus-rules.yaml
#添加一个监控项,在rometheus-rules.yaml文件的最后添加即可
#在prometheus-rules.yaml文件最后添加上(1分钟的负载大于1就报警) - name: test-load-1 rules: - alert: test-load-1 expr: node_load1 > 1 for: 2m labels: team: node annotations: summary: "{{$labels.instance}}: load 1 >1" description: "{{$labels.instance}}: job {{$labels.job}} 测试测试 负载大于1" #重新导入配置文件 [root@k8s-m manifests]# kubectl apply -f prometheus-rules.yaml prometheusrule.monitoring.coreos.com/prometheus-k8s-rules configured
四、修改alertmanager的报警方式(邮件方式)
1、创建一个邮件报警的配置文件(25端口不行)
[root@k8s-m ~]# cat alertmanger.yaml global: resolve_timeout: 5m #处理超时时间,默认为5min smtp_smarthost: \'smtp.163.com:465\' # 邮箱smtp服务器代理 smtp_from: \'xxxx@163.com\' # 发送邮箱名称 smtp_auth_username: \'xxxx@163.com\' # 邮箱名称 smtp_auth_password: \'xxxxxxxxx\' #邮箱密码 smtp_require_tls: false route: group_by: [\'alertname\'] # 报警分组名称 group_wait: 10s # 最初即第一次等待多久时间发送一组警报的通知 group_interval: 10s # 在发送新警报前的等待时间 repeat_interval: 1m # 发送重复警报的周期 receiver: \'email\' # 发送警报的接收者的名称,以下receivers name的名称 receivers: - name: \'email\' # 警报 email_configs: # 邮箱配置 - to: \'xxxxxx@163.com\' # 接收警报的email配置 inhibit_rules: - source_match: severity: \'critical\' target_match: severity: \'warning\' equal: [\'alertname\', \'dev\', \'instance\']
2、将alertmanger.yaml(上面创建的) 配置文件进行base64编码
cat alertmanger.yaml|base64
3、把alertmanager配置的文件创建成一个Opaque(把刚才配置文件base64编码的内容放入secret配置中,记得删除换行符,要把所有内容放在一行中)
注意:除了data中的和我这里不一样,其它的不要改。(因为本质上是修改原先Opaque的内容)
[root@k8s-m ~]# cat alertmanager-secret.yaml apiVersion: v1 data: alertmanager.yaml: Z2xvYmFsOiAKICByZXNvbHZlX3RpbWVvdXQ6IDVtICPlpITnkIbotoXml7bml7bpl7TvvIzpu5jorqTkuLo1bWlvbScgIyDlj5HpgIHpgq7nrrHlkI3np7AKICBzbXRwX2F1dGhfdXNl name: alertmanager-main namespace: monitoring type: Opaque
4、导入
[root@k8s-m ~]# kubectl apply -f alertmanager-secret.yaml
secret/alertmanager-main configured
5、查看与测试
达到了报警条件
查看邮箱