prometheus监控kubernetes集群并使用 grafana展示数据
目录
Prometheus组成及架构
prometheus核心组件
1.Prometheus Server
2.Exporters
3.Alertmanager
4.Pushgateway
数据流程
在k8s中部署Prometheus+Grafana+钉钉告警+邮件告警
将kube-Prometheus包下载后传入虚拟机
tar -xzv kube-promethus.zip
cd 进入
ll 显示目录
至此prometheus以及钉钉告警、邮件告警修改完毕,先按步骤部署即可
1.创建pv
2.cd kube-state-metrics
3.cd node-export
4.cd alertmanager
5.cd prometheus-server
6.部署Grafana
7.现在为 Grafana添加一个数据源为Prometheus
8.添加模板
Prometheus组成及架构
prometheus核心组件
1.Prometheus Server
整个监控系统的核心 ,有以下功能
数据采集 :
通过http协议主动从目标服务器pull(拉取)指标数据,也可以通过 Pushgateway接受推送数据
数据存储:
将采集的时序数据存储到本地的时序数库,默认保留15天
查询与聚合提供PromeQL的查询语言,支持实时分析聚合数据
告警与评估
根据定义的告警规则计算是否触发告警,并将告警发送给Alertmanager
2.Exporters
用于将非Prometheus的数据类型转换为Prometheus可识别的格式,如
主机监控:
node_exporter(收集CPU、内存、磁盘等主机指标)
应用监控:
如myspl_exporter(MySQL)、redis_exporter(redis)、blackbox_exporter(HTTP/ICMP探测)
自定义:
开发符合Prometheus规范的HTTP接口,暴露应用内不指标(如业务接口调用量)
3.Alertmanager
告警分组:
将同类的告警合并(如多台服务器同时触发高CPU告警)
告警抑制:
当某个告警触发后,抑制其他相关的次要告警(如服务器宕机后,抑制其上应用告警)
告警路由:
根据规则将告警发送到不同的接收端(如邮件、Slack、PagerDuty、企业微信、钉钉等)
4.Pushgateway
可选组件,用于接收短期任务(如 CI/CD 作业)的指标数据,再由 Prometheus 定期从 Pushgateway 拉取。(因 Prometheus 原生是 Pull 模式,短期任务可能在被拉取前结束,故需 Pushgateway 中转)
数据流程
- 目标服务通过 Exporter 暴露指标接口(或通过 Pushgateway 推送数据)。
- Prometheus Server 定期拉取指标并存储到 TSDB。
- 用户通过 PromQL 或 Grafana 查询数据。
- Prometheus 评估告警规则,触发时将告警发送给 Alertmanager。
- Alertmanager 处理告警并路由到指定接收端。
在k8s中部署Prometheus+Grafana+钉钉告警+邮件告警
需要自己部署好nfs环境最好在主节点
将kube-Prometheus包下载后传入虚拟机
此目录中文件全部可用,但需修改nfs的目录路径,已经nfs的IP、钉钉的Webhook,secret和邮件的收件人和发送人
tar -xzv kube-promethus.zip
cd 进入
ll 显示目录
1 cd alertmanager
vim alertmanager-configmap.yml
2 alertmanager 目录只需修改此文件,现在退出至上一目录
进入钉钉应用
选择一个群,进入设置,点击添加机器人,选择加签,选择添加即可
再次点击机器人,下面会用到webhook和secret
cd ..
cd dingding
vim dingtalk-configmap.yaml 修改图中标出的url和secret
dingding修改完毕,现在退至上一目录
3. cd nfs-pv/
vim pv-demo.yml
4. nfs-pv 目录修改完毕,退出至上一目录
cd promethus-server
vim promethus-configmap.yml
至此prometheus以及钉钉告警、邮件告警修改完毕,先按步骤部署即可
1.创建pv
cd nfs-pv
kubectl apply -f ./
我因为之前已经创建好了,所以这里显示unchanged,正常显示的是created
kubectl get pv 查看创建的pv 我的status是Bound因为已经绑定了pvc,正应该是Available
2.cd kube-state-metrics
kubectl apply -f .
同上,我的是unchanged,正常为created
kubectl get pod -n kube-system 查看pod状态 正常应为 reday 2/2 runing
若出现pod状态为ErrImagePull ,则使用describe 查看pod状态
kubectl describe pod kube-state-metrics-769d7f8b8b-rf2h2(换成自己的pod)命令查看报错
发现镜像拉不下来,则使用 -o wide 看pod分配到哪个节点,文章下面有对应的包
下载后传到虚拟机上在使用 docker load -i 包名 即可拉取镜像
等待2分钟再次观察pod的状态,发现变为runing
3.cd node-export
启动次pod时,注意使用的控制器时Daemonset,则每个节点都需要运行一个pod,但是master节点一般会有污点(为了提高master的管理效率,一般不在master上运行pod),所以我们需要清理污点
首先看master的污点类型
kubectl describe nodes master名称 | grep Taint
过滤结果大概率为 node-role.kubernetes.io/master:NoSchedule
去除污点
将污点去除
kubectl taint nodes master名称 node-role.kubernetes.io/master:NoSchedule- (注意这个减号,是去除的意思)
然后执行
kubectl apply -f ./
依旧同上
查看pod状态
kubectl get pod -n kube-system -o wide
会有三个pod运行,且master、k8s-node01、k8s-node02各运行一个
若状态有问题,describe查看报错,若镜像 拉不下来,先给每个节点添加一个8.8.8.8的DNS,
vim /etc/sysconfig/network-scripts/ifcfg-ens33 编辑此文件添加一个DNS
保存退出后重启网络
systemctl restart network
等待两分中,若不行,使用下面方法
下载包(文章下面有),再传到每个虚拟机,执行docker load -i 即可
查看svc
kubectl get svc -n kube-system
4.cd alertmanager
kubectl apply -f ./
同上
查看pod是否创建
kubectl get pods -l "k8s-app=alertmanager" -n kube-system
查看svc
kubectl get svc -n kube-system
5.cd prometheus-server
kubectl apply -f ./
同上
查看pod和svc是否成功创建
kubectl get pods -l "k8s-app=prometheus" -n kube-system
kubectl get svc -n kube-system
至此Prometheus部署完毕,测试是否可用
访问任意节点的IP+30090端口
例如:192.168.80.147:30090
6.部署Grafana
cd grafana
kuebctl apply -f ./
同上
查看pod和svc状况
kubectl get pod -n kube-system | grep monitoring-grafana
kubectl get svc -n kube-system | grep monitoring-grafana
至此Grafana部署完毕
测试访问192.168.810.147:32325
能进入代表部署成功
7.现在为 Grafana添加一个数据源为Prometheus
点击Connections 连接
点击 data sources数据源
搜索prometheus
点进去
添加prometneus的svc IP和端口
IP为prometheus的svc内部集群IP 端口为9090
添加好之后滑到最下面保存即可
8.添加模板
进入此网站搜索node,选择第一个,进入后下载最新的
Grafana dashboards | Grafana Labs
然后回到刚才的Grafana主页的home
选择Dashborad
点击右上角的 +
选择import dashborad
点击导入模板,选择刚才下载的模板,我这有三个,你们只有一个刚才下载的
选择数据源为 prometheus
点击import导入即可