一、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'  

方法三、使用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-
rules:
- alert: test-load-
expr: node_load1 >
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、查看与测试

达到了报警条件

查看邮箱

最新文章

  1. 如何将红色区域数据调用解密函数直接打印到输出控制台(例如:crt控制台)
  2. IMP数据到指定的表空间
  3. ajax的详细学习
  4. 之前做web性能优化的一些个人心得
  5. LevelDb原理剖析
  6. bzoj 1483 [HNOI2009]梦幻布丁(链表+启发式合并)
  7. 常用Python第三方库 简介
  8. ubuntu系统下给你的ipad充电(适用于所有ios设备)
  9. js 循环迭代定时器的执行次数和执行顺序??主要是因为js是单线程
  10. Newman的 power law 参数估计的程序matlab(转载)
  11. 同网段电脑互ping
  12. Android性能测试——Allocation Tracker(Device Monitor)
  13. ACE-6.1.0 linux 下的编译与安装步骤
  14. python带参函数(计算器脚本解释标注)
  15. IIS+Tomcat功能iis端口2
  16. Nancy in .NET Core学习笔记 - 路由
  17. 翻译:DECLARE HANDLER语句(已提交到MariaDB官方手册)
  18. php几种常见排序算法
  19. docker+mysql基本搭建过程
  20. makefile 里的vpath

热门文章

  1. 第7节class与style绑定
  2. python列表的 + 、* 、in 、 not in 、 len() 、 max() 、 min()
  3. 8086汇编语言学习(二) 8086汇编开发环境搭建和Debug模式介绍
  4. Spring Boot2 系列教程 (十一) | 整合数据缓存 Cache
  5. hadoop搭建
  6. npm 安装出现 run `npm audit fix` to fix them, or `npm audit` for details 解决办法
  7. [ PyQt入门教程 ] PyQt5中多线程模块QThread使用方法
  8. 第二次作业hzw
  9. Rainbow Plan团队项目第一次作业——项目计划
  10. mysql安装教程linux