Rancher2.6 Monitoring使用

软件 版本
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
2
3
4
remoteRead:
- url: http://192.168.0.7:8086/api/v1/prom/read?db=prometheus
remoteWrite:
- url: http://192.168.0.7:8086/api/v1/prom/write?db=prometheus

默认node-Exporter资源limit配置较低,长时间运行后容易被OOMKILL掉,需要修改默认的内存限制为150Mi。

1
2
3
4
5
6
7
8
9
podLabels:
jobLabel: node-exporter
resources:
limits:
cpu: 200m
memory: 150Mi
requests:
cpu: 100m
memory: 30Mi

在此页面可以点击进入对应的组件配置页面。
如:

  • 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
2
https://github.com/prometheus/jmx_exporter
https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.12.0/jmx_prometheus_javaagent-0.12.0.jar

编写jvm-export配置文件放置/root/jmx-exporter/目录
创建simple-config.yml内容如下:

1
2
3
---
rules:
- pattern: ".*"

这里意思表示将全部监控信息抓取出来。
将jvm-export集成到tomcat中,重新编写Dockerfile

1
2
3
4
FROM tomcat
COPY ./jmx_prometheus_javaagent-0.12.0.jar /jmx_prometheus_javaagent-0.12.0.jar
ENV CATALINA_OPTS="-Xms64m -Xmx128m -javaagent:/jmx-exporter/jmx_prometheus_javaagent-0.12.0.jar=6060:/jmx-exporter/simple-config.yml"

重新docker build,build后执行以下docker run命令可以查看收集的监控指标,这里6060端口就是我们的jmx-export端口

1
2
docker build -t tomcat:v1.0 .
docker run -itd -p 8080:8080 -p 6060:6060 tomcat:v1.0

访问查看:
http://host_ip:6060

部署到Rancher平台

给Service打上label,用于ServiceMonitor关联

1
kubectl label  svc tomcat app=tomcat

创建ServiceMonitor

1
2
3
4
5
6
7
8
9
10
11
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: tomcat-app
namespace: default
spec:
endpoints:
- port: exporter
selector:
matchLabels:
app: tomcat

创建成功后通过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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
name: podmonitor
namespace: cattle-monitoring-system
spec:
groups:
- name: pod_node_ready
rules:
- alert: pod_not_ready
annotations:
message: '{{ $labels.namespace }}/{{ $labels.pod }} is not ready.'
expr: 'sum by (namespace, pod) (kube_pod_status_phase{phase!~"Running|Succeeded"})
> 0 '
for: 180s
labels:
severity: 严重

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
2
3
4
5
6
7
8
9
10
11
12
13
spec:
receivers:
- emailConfigs:
- authPassword:
key: password
name: altermanager
authUsername: xx@163.com
from: xx@163.com
requireTLS: false
sendResolved: false
smarthost: smtp.163.com:465
tlsConfig: {}
to: xx@qq.com

添加requireTLS: false

2、内部邮件服务器使用非权威证书

1
2
3
email_configs:
- to: 'xxx'
insecure_skip_verify: true

添加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