分享:使用Prometheus +Grafana搭建完整的应用监控系统

在当今高度数字化和云原生的环境中,Prometheus作为一种强大的开源监控系统,在企业中得到了广泛的应用。然而,要确保Prometheus监控系统的稳定性,需要深入了解其架构、配置和最佳实践。本篇博客将重点探讨如何通过技术实践和最佳策略来提高Prometheus监控系统的稳定性,以满足企业对可靠监控的需求。

Prometheus监控系统的稳定性直接受其架构设计的影响。Prometheus采用分布式架构,由多个组件组成,包括Prometheus服务器、数据存储、报警管理器和可视化界面等。了解每个组件的功能和相互关系,以及它们之间的通信机制,对于优化系统稳定性至关重要。

一、监控系统简介

1.1 什么是监控系统?

监控系统顾名思义就是监控服务器、应用系统以及其他第三方组件运行状态的系统。对于平台系统而言,监控系统就是我们第三只眼,监控系统会实时跟踪应用平台的运行状态,如果有应用系统出现问题或是服务器内存爆满,我们通过监控系统就可以快速定位问题所在,甚至可以设置预警,对一些将要出现的问题进行提前预防处理,及时避免问题的发生。

1.2 监控系统的作用

监控是运维系统的基础,我们衡量一个公司/部门的运维水平,看他们的监控系统就可以了。监控系统的作用不言而喻,能帮我们快速定位问题,减少故障,容量规划,性能优化等。
1)定位故障:在发生故障时,我们可以通过查看监控系统的各项指标数据,辅助故障分析和定位。
2)减少故障率:对于即将可能产生的故障能够及时发出预警信息,做好提前预防处理。
3)容量规划:为服务器、中间件以及应用集群的容量规划提供数据支撑。
4)性能调优:JVM垃圾回收次数、接口响应时间、慢SQL等等都可以监控优化。
总而言之,一个完善的监控系统可以提高应用的可用性和可靠性,在提供更优质服务的前提下,降低运维的投入和工作量,为用户带来更多的商业利益和客户体验。

1.3 常见的监控对象和指标都有哪些?

应用系统的监控主要分为指标监控和日志监控两大部分:
• 指标监控主要是对一定时间段内性能指标进行测量,然后再通过时间序列的方式,进行处理、存储和告警。
• 日志监控则可以提供更详细的上下文信息,通常通过 ELK 技术栈来进行收集、索引和图形化展示。
指标监控可以说是系统监控最核心的功能。主要有服务器资源、应用监控、数据库中间件等。
• 服务器资源监控:CPU使用率、内存使用率、磁盘使用率、磁盘读写的吞吐量、网络出入流量等等。
• 数据库监控:TPS、QPS、数据库连接数、慢SQL、InnoDB缓冲池命中率等。
• Redis监控:内存使用率、缓存命中率、key值总数、Redis响应请求时间、客户端连接数、持久性指标等。
• MQ消息监控:连接数、队列数、生产速率、消费速率、消息堆积量等等。
• 应用监控:包括HTTP请求,JVM,线程池等。

1.4 监控系统的架构

一个完整的监控系统通常由数据采集、数据传输、数据存储、数据展示、监控告警等多个模块组成。
• 数据采集,采集的方式有很多种,包括日志埋点进行采集,JMX标准接口输出监控指标,被监控对象提供REST API进行数据采集(如Hadoop、ES),系统命令行,统一的SDK进行侵入式的埋点和上报等。
• 数据传输,将采集的数据以TCP、UDP或者HTTP协议的形式上报给监控系统,有主动Push模式,也有被动Pull模式。
• 数据存储,有使用MySQL、Oracle等关系数据库存储的,也有使用时序数据库RRDTool、OpentTSDB、InfluxDB存储的,还有使用HBase存储的。
• 数据展示,数据指标的图形化展示。
• 监控告警,灵活的告警设置,以及支持邮件、短信、IM等多种通知通道。
在这里插入图片描述

二、Prometheus

Prometheus 是一套开源的系统监控报警框架,采用Go语言开发。得益于Google与k8s的强力支持,自带云原生的光环,天然能够友好协作,使得Prometheus 在开源社区异常火爆。
在这里插入图片描述

2.2.1 Prometheus优点

(1)提供多维度数据模型和灵活的查询方式
通过将监控指标关联多个 tag,来将监控数据进行任意维度的组合,并且提供简单的 PromQL 查询方式,还提供 HTTP 查询接口,可以很方便地结合 Grafana 等 GUI 组件展示数据。
(2)基于时序数据库,支持服务器节点的本地存储
通过 Prometheus 自带的时序数据库,可以完成每秒千万级的数据存储;不仅如此,在保存大量历史数据的场景中,Prometheus 可以对接第三方时序数据库和 OpenTSDB 等。
(3)定义了开放指标数据标准
以基于 HTTP 的 Pull 方式采集时序数据,只有实现了Prometheus监控数据才可以被 Prometheus 采集、汇总、并支持 Push 方式向中间网关推送时序列数据,能更加灵活地应对多种监控场景。
(4)支持通过静态文件配置和动态发现机制发现监控对象
自动完成数据采集。Prometheus 目前已经支持 Kubernetes、etcd、Consul 等多种服务发现机制。
(5)易于维护
可以通过二进制文件直接启动,并且提供了容器化部署镜像。
(6)集群支持
支持数据的分区采样和集群部署,支持大规模集群监控。

2.2.2 Prometheus缺点

• Prometheus 是基于 Metric 的监控,不适用于日志(Logs)、事件(Event)、调用链(Tracing)。
• 由于Prometheus采用的是Pull模型拉取数据,意味着所有被监控的endpoint必须是可达的,需要合理规划网络的安全配置。
• 指标众多,需进行适当裁剪。

三、使用Prometheus+grafana搭建监控系统

前面,我们了解了一些监控系统的区别和优缺点,下面我们以Prometheus为例,带大家一步一步搭建监控系统。

3.1 下载

Prometheus需要下载prometheus(Prometheus主服务)、node_exporter(服务器监控)、mysqld_exporter(Mysql数据库监控-可选)、pushgateway(数据网关-可选)、alertmanager(告警组件-可选)
下载地址:https://prometheus.io/download/
Grafana为数据展示界面,下载地址:https://grafana.com/grafana/download

3.2 架构图

在这里插入图片描述

3.3 安装 Prometheus Server

Prometheus 的架构设计中,Prometheus Server 主要负责数据的收集,存储并且对外提供数据查询支持。下面开始安装Prometheus Server。
step1:首先,下载prometheus,并上传到服务器

# 解压到/usr/local/prometheus目录下:
tar -zxvf prometheus-2.37.0.linux-amd64.tar.gz -C /usr/local/prometheus
# 修改目录名:
cd /usr/local/prometheus
mv prometheus-2.37.0.linux-amd64 prometheus-2.37.0

setp2:启动prometheus Server 服务。prometheus启动非常简单,只需要一个命令即可,进入到/usr/local/prometheus/prometheus-2.37.0后执行如下命令:

#进入prometheus目录
cd /usr/local/prometheus/prometheus-2.37.0
#执行启动脚本
./prometheus --web.enable-admin-api --config.file=prometheus.yml

step3:验证prometheus是否启动成功,prometheus默认端口为:9090,我们在浏览器中输入:http://10.2.1.231:9090/graph,进入prometheus数据展示页面,说明prometheus启动成功。

在这里插入图片描述

3.4 安装 Node Exporter

实际的监控样本数据的由 Exporter 负责收集,如node_exporter 就是负责服务器的资源信息,同时提供了对外访问的HTTP服务地址(通常是/metrics)给prometheus拉取监控样本数据。下面开始安装node_exporter。
step1:首先,下载node_exporter,并上传到服务器

# 解压到/usr/local/prometheus目录下:
tar -zxvf node_exporter-1.3.1.linux-amd64.tar.gz -C /usr/local/prometheus
# 修改目录名:
cd /usr/local/prometheus
mv node_exporter-1.3.1.linux-amd64 node_exporter-1.3.1

step2:启动node_exporler,输入如下命令启动:

#node_exporter
cd /usr/local/prometheus/node_exporter-1.3.1
#执行启动命令,指定数据访问的url
./node_exporter --web.listen-address 10.2.1.231:9527

step3:验证node_exporler是否启动成功,我们在浏览器中输入上面指定的地址:http://10.2.1.231:9527/metrics,可以看到当前 node_exporter 获取到的当前主机的所有监控数据。说明node_exporler启动成功。
在这里插入图片描述
step4:最后,配置prometheus,将新增加的node配置到prometheus。
修改prometheus-2.37.0 文件夹下的prometheus.yml文件。增加新的node配置,具体配置如下:

scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"
    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.
    static_configs:
      - targets: ["localhost:9090"]
      
    # 采集node exporter监控数据
  - job_name: 'node'
    static_configs:
      - targets: ['10.2.1.231:9527']

修改完prometheus.yml 文件后,重新启动prometheus。再次访问prometheus数据展示页面,选择status | target,可以看到新的node已经添加进来了。

在这里插入图片描述
在Graph 页面,在查询框中输入: process_cpu_seconds_total
在这里插入图片描述
在这里插入图片描述

3.5 安装grafana

前面已经把prometheus和node exporter 安装并集成成功。prometheus虽然有自带的数据展示界面,但是不够全面也不直观。接下来集成grafana 完成数据展示。
下载地址:https://grafana.com/grafana/download
step1:首先,下载Grafana,并上传到服务器。

# 下载grafana
wget https://dl.grafana.com/enterprise/release/grafana-enterprise-9.0.3.linux-amd64.tar.gz
# 解压到
tar -zxvf grafana-enterprise-9.0.3.linux-amd64.tar.gz -C /usr/local/prometheus
# 修改目录名:
cd /usr/local/prometheus
mv ngrafana-enterprise-9.0.3.linux-amd64 grafana-9.0.3

step2:启动Grafana,输入如下命令:

#grafana
cd /usr/local/prometheus/grafana-9.0.3/bin
#执行启动命令,指定数据访问的url
./grafana-server --homepath /usr/local/prometheus/grafana-9.0.3 web

step3:验证是否安装成功,Grafana默认端口:3000。在浏览器中输入:http://10.2.1.231:3000/ 输入默认账号密码:admin\admin。能正常进入Grafana,说明Grafana安装成功。
在这里插入图片描述
step4:配置prometheus数据源,点击 设置 | Data Source ,按照操作添加prometheus数据源。
在这里插入图片描述
点击add data source,后选择prometheus数据源。
在这里插入图片描述
输入data source 的名字以及prometheus的地址:http://10.2.1.231:9090/ 后点击Save&Test 即可。
step5:创建仪表盘 Dashboard
Grafana 支持手动创建仪表盘 Dashboard 和自动导入Dashboard模板两种方式,手动一个个添加Dashboard 比较繁琐,Grafana 社区鼓励用户分享 Dashboard,通过https://grafana.com/dashboards 网站,可以找到大量可直接使用的Dashboard模板。
Grafana 中所有的Dashboard 通过 JSON 进行共享,下载并且导入这些 JSON 文件,就可以直接使用这些已经定义好的 Dashboard:
在这里插入图片描述
选择自己喜欢的模板后,点击 Download JSON下载对应的json 文件。然后在Grafana系统中导入相应的json即可。
接下来回到Grafana页面,点击DashBoards|Import
在这里插入图片描述
选择之前下载好的json文件,导入即可。
在这里插入图片描述

点击Import后,我们就可以看到详细的服务器资源监控数据。如下图所示:
在这里插入图片描述

最后

以上,我们就把监控系统介绍完了,并使用Prometheus + Grafana 构建了一个初步的监控系统。
监控是运维系统的基础,在DevOps大行其道的今天,运维监控不再是运维工程师的工作,而是程序员和架构师的必备技能。希望大家能够熟练掌握。

注:本篇博客主要是阅读学习后分享,阿里云监控系统搭建,原文地址:https://developer.aliyun.com/article/987854

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、prometheus简介 Prometheus是一个开源的系统监控和告警系统,现在已经加入到CNCF基金会,成为继k8s之后第二个在CNCF维护管理的项目,在kubernetes容器管理系统中,通常会搭配prometheus进行监控prometheus支持多种exporter采集数据,还支持通过pushgateway进行数据上报,Prometheus再性能上可支撑上万台规模的集群。 二、prometheus架构图 三、prometheus组件介绍 1.Prometheus Server: 用于收集和存储时间序列数据。 2.Client Library: 客户端库,检测应用程序代码,当Prometheus抓取实例的HTTP端点时,客户端库会将所有跟踪的metrics指标的当前状态发送到prometheus server端。 3.Exporters: prometheus支持多种exporter,通过exporter可以采集metrics数据,然后发送到prometheus server端 4.Alertmanager: 从 Prometheus server 端接收到 alerts 后,会进行去重,分组,并路由到相应的接收方,发出报警,常见的接收方式有:电子邮件,微信,钉钉, slack等。 5.Grafana监控仪表盘 6.pushgateway: 各个目标主机可上报数据到pushgatewy,然后prometheus server统一从pushgateway拉取数据。 四、课程亮点 五、效果图展示 六、讲师简介 先超(lucky):高级运维工程师、资深DevOps工程师,在互联网上市公司拥有多年一线运维经验,主导过亿级pv项目的架构设计和运维工作 主要研究方向: 1.云计算方向:容器 (kubernetes、docker),虚拟化(kvm、Vmware vSphere),微服务(istio),PaaS(openshift),IaaS(openstack)等2.系统/运维方向:linux系统下的常用组件(nginx,tomcat,elasticsearch,zookeeper,kafka等),DevOps(Jenkins+gitlab+sonarqube+nexus+k8s),CI/CD,监控(zabbix、prometheus、falcon)等 七、课程大纲

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值