软件 | 版本 |
---|---|
Rancher | .9 |
Kubernetes | 1.23.7+rke2r2 |
概述
Rancher 2.6监控启用方式与之前版本存在较大差异,属于原生的Prometheus-Operator,通过抽象化一些Kubernetes CRD资源,可以更好的把监控告警功能整合起来,提高易用性。Prometheus-operator包括以下CRD资源对象:
PrometheusRules :定义告警规则
Alert Managers :Altermanager启动CRD,用于Altermanager启动副本。
Receivers:配置告警接收媒介CRD
Routers: 将告警规则和告警媒介进行匹配。
ServiceMonitor:定义Prometheus采集的监控指标地址
Pod Monitor:更细粒化的对POD进行监控。
配置使用
启用监控
具体方法如下
切换到对应集群,选择左下角clusterTools启用Prometheus
部署到System项目中,勾选自定义helm参数
根据实际需求修改部署要求
如果需要对接远端存储如infuxdb需要修改yaml,修改配置指向influxdb。
1 | remoteRead: |
默认node-Exporter资源limit配置较低,长时间运行后容易被OOMKILL掉,需要修改默认的内存限制为150Mi。
1 | podLabels: |
在此页面可以点击进入对应的组件配置页面。
如:
- Altermanager:进入的是告警信息查看页。
- Grafana:查看监控数据图标
- Prometheus Graph:Prometheus表达式执行页
- Prometheus Rules:查看Prometheus配置的告警表达式页
- Prometheus Targets:监控采集数据采集点
配置自定义监控指标
默认启用监控会会自动添加一些ServiceMonitor监控规则和Prometheus Rules 告警规则,主要是针对平台组件监控和集群内节点状态监控和告警
如针对java应用的jmx监控
Jmx有官方的prometheus-export,我们只需要将其jar包下载让java应用程序加载jar包和加载其配置即可。
以一个应用为例,整体流程如下:
利用JMX exporter,在Java进程内启动一个小型的Http server
配置Prometheus抓取那个Http server提供的metrics。
配置Grafana连接Prometheus,配置Dashboard。
创建文件夹:
1 | mkdir -p /Dockerfile/jmx-exporter/ |
下载jmx-export.jar包放到此目录
1 | https://github.com/prometheus/jmx_exporter |
编写jvm-export配置文件放置/root/jmx-exporter/目录
创建simple-config.yml内容如下:
1 | --- |
这里意思表示将全部监控信息抓取出来。
将jvm-export集成到tomcat中,重新编写Dockerfile
1 | FROM tomcat |
重新docker build,build后执行以下docker run命令可以查看收集的监控指标,这里6060端口就是我们的jmx-export端口
1 | docker build -t tomcat:v1.0 . |
访问查看:
http://host_ip:6060
部署到Rancher平台
给Service打上label,用于ServiceMonitor关联
1 | kubectl label svc tomcat app=tomcat |
创建ServiceMonitor
1 | apiVersion: monitoring.coreos.com/v1 |
创建成功后通过Prometheus可以查看到对应的Target
对应的监控指标也已经抓取
进入grafana页面添加dashboard,默认账号密码为admin/prom-operator
添加dashboard
输入dashboard-id,8878,离线环境需要提前将Dashboard下载好,通过json方式导入。
配置告警
PrometheusRule用于定义告警规则,默认已经包含针对平台组件和节点的一些告警策略。可以通过配置Router和Receivers配置告警媒介将对应告警通知到相应的人员。采用Routing Tree的告警结构能够快速的将告警进行分类,然后发送到指定的人员进行处理。通过配置AlertmanagerConfig统一实现Rooter和Recivers配置
创建AlertmanagerConfig
选择Email告警
Receivers配置告警媒介
填写SMTP地址和配置的账号/密码,默认接收的邮箱。
邮箱密码创建Opaque类型的secret
Routes配置用于告警媒介和告警规则进行匹配,默认创建的root规则,用于匹配全部的告警规则,配置上对应创建的告警媒介。
此时全部的告警规则都会发送给配置的告警媒介
若要细分告警规则创建新的Routes通过Label与Prometheus Rules内对应的Alter name对接
如匹配alert:etcdNoLeader这条告警规则
也可以使用正则表达式匹配多个规则如
Grouping配置主要用于告警规则分类、抑制避免大量无用告警的干扰
group_by:用于配置告警分组,达到告警抑制效果,同一个group的告警只会聚合到一起发送一次,例如host01上运行了数据库,那么对应的告警包含了host down、mysql down。他们配置在一个group内,那么如果host down了对应的mysql肯定也是down了,那么因为他们配置在一个group中,所以host down和mysql down的告警会聚合到一起发送出。
group_wait:新建的AlterGroup等待多久后触发第一次告警。
group_interval:AlterGroup内产生的不同告警触发间隔时间。
repeat_interval:AlterGroup内如果一直是同样的告警,Altermanager为了避免长时间的干扰,进行告警去重的等待时间。
匹配后,告警触发,可以收到对应的告警邮件
自定义告警
当默认的告警规则不能满足需求时,可以根据实际情况添加自定义告警,实际就是添加对应的PrometheusRule。如以下例子,添加pod非running状态的告警。
UI配置
对应yaml配置
1 | apiVersion: monitoring.coreos.com/v1 |
for:表示持续时间
message:表示告警通知内的信息。
label.severity:表示告警级别
expr:指标获取表达式
配置告警接收者
根据标签匹配到这个PrometheusRule
常见问题
1、触发告警后,邮箱收不到告警邮件
使用163邮箱SMTP的465端口
altermanager报错msg="Notify for alerts failed" num_alerts=1 err="cattle-monitoring-system-test-test/email[0]: notify retry canceled after 16 attempts: send STARTTLS command: 454 Command not permitted when TLS active"
修改
1 | spec: |
添加requireTLS: false
2、内部邮件服务器使用非权威证书
1 | email_configs: |
添加insecure_skip_verify: true
参考链接:
https://mp.weixin.qq.com/s/fT-AXnPP8rrWxTposbi-9A
https://github.com/prometheus-operator/prometheus-operator
https://rancher.com/docs/rancher/v2.6/en/monitoring-alerting/guides/enable-monitoring/
https://mp.weixin.qq.com/s/c9QGlwQrhLgptNsnQ1m6-w