开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第14天
作者按:
随着科技发展,开发的应用也越来越智能,各大公司生产环境的服务也是越来越多,架构也很复杂庞大,这时候就不得不加强监控的力度,保持运行稳定。
相较于以前,对于硬件监控较多,会使用zabbix,现在随着云原生的发展,各种应用容器化、微服务流行,这里就诞生了新一代监控,prometheus应运而生。
1、Prometheus是什么?
是基于时序数据库开源监控告警系统,由go语言开发,很多理念和google的sre相符合,2016年5月之后继K8s成为第二个正式加入CNCF基金会的项目,成为新一代的云原生监控系统。
截一张官网的架构图
2、以往监控存在的问题
(1)与业务脱离,客户只关注服务的可用性,以及服务的SLA登记(3个9、4个9等等),但是监控只能根据服务器的负载产生告警
(2)运维管理难度大,需要专业人员安装配置管理,过程不容易
(3)扩展性比较低,自身难扩展,无法使用监控规模变化
(4)问题定位难,主机负载异常增加,但客户还是看不到具体的运行情况,告警信息不能有效支持用户定位分析
3、prometheus优势
(1)易于管理,核心只有一个单独二级制文件,不存在第三方依赖,不会有潜在的级联风险
(2)监控服务内部运行状态,基于丰富的client库,可以在应用中添加prometheus的支持,获取应用内部运行状态
(3)强大的数据模型,采集的监控数据,用指标metric形式保存在内置的时间序列数据库TSDB中,每一条时间序列由metreic那么以及一组标签labels唯一标识,按照时间先后顺序存储监控值。
(4)强大的promql查询语言,内置的查询语言,可以实现对监控数据的查询聚合。
(5)高效,单一的peometheus server可实现百万级别监控指标,每秒处理数十万数据点
(6)可扩展,多个prometheus示例产生一个逻辑集群,一个sever任务量过大,可以扩展分担(sharding+federation)
(7)容易集成。支持java、python、go、ruby等客户端SDK,提供第三方数据采集支持。
(8)可视化,自带prometheus ui ,通过ui方便直接对数据查询,支持图形化展示。Grafana也支持prometheus
4、安装部署prometheus+nodeexporter
(1)本文运行一个server加一两个node exporter采集主机资源,并用grafana进行数据可视化展示。安装主要模块:
Prometheus server
Exporter
Grafana
(2)环境:centos7.9 prometheus V2.37.0 (截止2022年7月5日)
(3)本文选用手动部署,docker安装更加快速便捷,就另外再写一篇详叙。首先上prometheus官网下载最新的安装包,如图中红框所选,选择linux版本
(4)因为监控主机资源,选择下载nodeexporter采集agent
(5)下载完成后上传服务器,或者直接在服务其中wget 安装包url,解压到自定义目录中即可
(6)进入软件目录,修改默认的prometheus配置文件prometheus.url,添加监控地址,我这边已添加好
(7)采集数据默认以文件形式存储本地,默认存储在/data,若无目录,可手动创建
(8)执行运行软件./Prometheus,查看ui界面,访问localhost:9090,出现以下界面,代表运行成功
(9)为了能够采集到主机资源指标,使用node exporter,解压下载好后的安装包,进入目录运行./exporter,可以加入systemd管理,也可以搞个软连接运行,这边运行后查看端口为9100,访问localhost:9100 ,出现以下界面代表运行正常,查看节点up正常
5、可视化安装Grafana
(1)还是上官网下载安装包,可以下载后上传服务器或者直接服务器下载
(2)官网标注了个系统版本如何下载使用,我们安装最新版9.0.2
(3)下载rpm包后,直接yum install 安装即可
(4)开箱即用,systemctl start grafan-server即可
(5)访问localhost:3000 出现以下界面,admin/admin登录即可
(6)登录进去之后添加数据源prometheus
(7)prometheus刚才运行地址端口就是本机的9090,添加此地址,就可以save&test
出现下图表示添加成功
(8)安装可视化dahboard模板,这个可以大家自己制作,也可以直接import或者下载,在这个grafana网站直接使用
引入之后出现下图,说明到此一个基本主机资源监控系统搭建完成了,看起来漂亮吧。
好了,Prometheus +grafana监控系统搭建到此结结束了,下次分享promql以及告警处理的使用。