谢莹莹
腾讯云监控产品经理,硕士毕业于哈尔滨工业大学。目前主要负责腾讯云 Prometheus 监控服务和 Grafana 可视化服务的产品工作,对 to B 商业化产品领域有着丰富的经验。
前言
Prometheus 是当下最火的、更新迭代速度最快的、社区活跃度最高的开源监控系统。相信大多数人都或多或少得有听说过,不乏有跃跃欲试者,本文将花费最少的时间带你打开 Prometheus 新世界的大门。
本文包括三部分:
1. Prometheus 的自我介绍。
2. 自建 or 托管,如何抉择?
3. 简单演示下如何使用托管 Prometheus 监控。
Prometheus 的自我介绍
Prometheus 是什么?
Prometheus 是一个开源监控系统,与 Kubernetes 相似,Prometheus 受启发于 Google 的 Borgman 监控系统,而 Kubernetes 也是从 Google 的 Borg 演变而来的。Prometheus 始于2012年,并由 SoundCloud 内部工程师开发,于2015年1月发布。2016年5月,其成为继 Kubernetes 之后第二个正式加入 Cloud Native Computing Foundation(CNCF) 基金会的项目。现最常见的 Kubernetes 容器管理系统中,通常会搭配 Prometheus 进行监控。
Prometheus 的应用场景?
可观测性监控分为:指标、链路、日志。Prometheus 提供的是指标监控。
根据监控分层,Prometheus 几乎覆盖了 业务监控/应用层监控/中间件监控/系统层监控,结合告警和 Grafana,可以提供一站式全方位的监控体系,帮助业务快速发现和定位问题,减轻故障给业务带来的影响。
托管 or 自建该如何选择?
基于开源系统自建 Prometheus 有着比较高的学习成本、使用成本和后期维护成本。近两年市场上出现了以 AWS、腾讯、阿里为代表的云厂商,提供托管的 Prometheus 监控服务,给企业带来更多选择的同时,也一定程度上增加了前期调研和后期决策的成本,自建和托管的优劣势分别是什么?到底我的企业更适合采用哪种解决方案?
一、自建 Prometheus 会遇到哪些问题
自建 Prometheus 的优势是可以根据企业自身情况,灵活得配置定制化的监控解决方案,但随着越来越多的企业开始自建 Prometheus 监控解决方案,一些不可避免的突出问题也逐渐显现,给企业带来困扰。
1. 对于中小企业,使用成本高
自建 Prometheus 的使用成本,包括机器资源成本和人力成本,最主要的是人力成本。其中人力成本又包括:
- 前期调研成本
- 中期搭建成本
- 后期维护成本
由于中小企业的运维团队规模较小,一般不多于5人,有的甚至只有一两个人,要自建和维护一套 Prometheus 监控服务,显然非常吃力。
2. 对于大企业,可扩展性差、容易出现性能瓶颈
大企业或快速发展的中型企业,在业务发展初期,自建 Prometheus 监控,但随着业务量高速的增长,意味着更多资源的投入,对监控也有了更高的要求,自建 Prometheus 开始暴露出可扩展性差、性能瓶颈的问题,使企业运维面临巨大的挑战。
二、托管 Prometheus 相比自建的优势
1. 开箱即用
- 一键安装监控腾讯云容器及其他云产品,免搭建。
- 与云监控告警体系打通,可复用告警通知渠道。
- 预设常用的 Grafana Dashboard 及告警规则模板。
- 云服务器标签自动识别,机器扩缩容时无需手动增减配置。
2. 低成本
- 全托管服务,无需额外采购云资源,节省资源成本。
- 无需手动搭建,免运维,节约运维人力成本。
- 按量付费,避免自己搭建时由于资源分配不合理造成的浪费。
- 容器相关基础指标免费使用,可覆盖日常监控场景。
3. 可扩展性更强
数据存储能力无上限,不受限于本地磁盘。可以结合腾讯云自研的分片和调度技术,实现动态扩缩,满足用户的弹性需求,同时支持负载均衡。解决开源 Prometheus 无法水平扩展的痛点。
4. 高性能
轻量,资源消耗低,Agent 仅占用 1G 以内内存即可完成数据抓取。
5. 更可靠
结合腾讯云云存储服务及自身的副本能力,可用性更强,减少系统中断运行次数。
6. 主动式服务
多种开源没有的增强监控运维能力,如健康巡检、Agent 管理等。
如何使用托管 Prometheus ?
一、前提条件:
1. 购买 Prometheus 实例(需跟监控的云服务器同一个vpc下,能实现网络互通)
i. 新建 Prometheus 实例
登录 Prometheus 监控服务控制台: 新建 Prometheus 实例。
[点击查看大图]
ii. 实例规格、网络选择
选择相同 vpc 网段,保证 Prometheus 能与需要采集的云服务器网段相同,才能采集到数据。实例规格,可根据自己的业务上报量进行选择。
[点击查看大图]
Prometheus 实例价格表:
[点击查看大图]
2. 安装 Agent
i. 在Prometheus 控制台新建 Agent
Prometheus 监控--> Agent 管理 -->在 Agent 新建 ,输入 Agent 名称并保存。
[点击查看大图]
ii. 在云服务器上按照命令安装 Agent
Prometheus监控--> Agent 管理 -->进入 Agent -->安装指南
根据页面的安装指南,到上报数据的同一台云服务器执行命令安装 Agent。
[点击查看大图]
安装成功后,执行下列命令查看 Agent 状态
systemctl status prometheus
[点击查看大图]
二、接入云服务器基础指标
1. 下载安装 node_expoter
在需要上报的云服务器上,下载并安装 node_expoter(采集基础指标数据的exporter)
您可在 Prometheus 开源官网下载:
https://prometheus.io/download/#node_exporter
也可以直接执行下列命令,下载解压:
wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gztar -xvf node_exporter-1.3.1.linux-amd64.tar.gz
文件目录如下:
2. 运行 node_exporter 采集基础监控数据
i. 执行 node_exporter
./node_exporter
如下图所示即为成功采集到了基础监控数据。
[点击查看大图]
ii. 可通过下列命令,将该基础监控数据暴露在 9100 端口
代码语言:javascript复制curl 127.0.0.1:9100/metrics
如下图为执行命令后看到的暴露出来的指标监控数据。
[点击查看大图]
3. 新增抓取任务
进入 Prometheus监控 --> Agent管理--> 抓取任务 --> 新建
在抓取任务管理页中新建抓取任务。如下图:
[点击查看大图]
抓取任务参考配置如下:
代码语言:javascript复制job_name: cvm_node_exporterhonor_timestamps: falsescrape_interval: 30smetrics_path: /metricsscheme: httpstatic_configs:- targets: - 114.132.244.109:9100注意:targets 下的 IP 地址要改成自身 CVM 监控数据的地址。
4. 查看数据是否上报成功
Prometheus 控制台--> Grafana 图标,点击进入 Grafana。
[点击查看大图]
如上图所示,到 explore 搜索下 {job="cvm_node_exporter"} 查看是否有数据,若有数据,则表示上报成功。
5. 配置 Dashboard 界面
Dashboard 界面每个产品都会有一些现成的 json 文件,可以直接导入。
官网地址:
https://grafana.com/grafana/dashboards/
i. 下载 Dashboard 文件
然后点击搜索 node_exporter,选择最新的 Dashboard。
[点击查看大图]
ii. 导入 Dashboard 的 json 文件
Prometheus 控制台-->基本信息--> Grafana 地址 ,点击进入 Grafana。
Grafana 控制台--> Create --> Import --> 在 Upload JSON file 中上传 Dashboard 文件。
[点击查看大图]
三、接入云服务器业务层指标
Prometheus 根据监控的不同场景提供了 Counter、Gauge、Historgram、Summary 四种指标类型。Prometheus 社区提供了多种开发语言的 SDK,每种语言的使用方法基本上类似,主要是开发语言语法上的区别,下面主要以 Go 作为例子,使用 Counter 指标类型如何上报自定义监控指标数据。
Counter
计数类型,数据是单调递增的指标,服务重启之后会重置。可以用 Counter 来监控请求数/异常数/用户登录数/订单数等。
如何通过 Counter 来监控订单数:
package order
import ("github.com/prometheus/client_golang/prometheus""github.com/prometheus/client_golang/prometheus/promauto")
// 定义需要监控 Counter 类型对象var ( opsProcessed = promauto.NewCounterVec(prometheus.CounterOpts{ Name: "order_service_processed_orders_total", Help: "The total number of processed orders", }, []string{"status"}) // 处理状态)
// 订单处理func makeOrder() { opsProcessed.WithLabelValues("success").Inc() // 成功状态// opsProcessed.WithLabelValues("fail").Inc() // 失败状态
// 下单的业务逻辑}
例如,通过 rate() 函数获取订单的增长率:
rate(order_service_processed_orders_total[5m])
采集数据
完成相关业务自定义监控埋点之后,应用发布,即可通过 Prometheus 来抓取监控指标数据。采集完成后,等待数分钟,您即可在 Prometheus 监控服务集成的 Grafana 中查看业务指标监控数据。
[点击查看大图]
看完了这一篇文章,深受自建平台性能和功能困扰,亦或是早就想要拥有一个功能完善的托管Prometheus平台的各位,是不是也想亲手试一试,试一试搭建的全过程,也试一试腾讯云的托管Prometheus的优秀性能了呢?
正值腾讯云春季采购大促,Prometheus 托管服务为看完了文章跃跃欲试的您提供了一个体验服务的绝佳机会:
本次大促,Prometheus 新用户首月配置基础1套餐,价格低至3折!也就是说,两百出头的价格,您就可以拥一个高可用的可靠 Prometheus 平台。
当然,我们也没有忘记一直支持和喜爱我们的老用户们,所有的实例套餐均可以8折的优惠配置1至12个月不等的使用长度。为您未来一年的运维平台顺畅运行打下坚实基础。
我们的活动只到3月31日便截止啦,在这春暖花开的日子里,心动的您还在等什么?赶快点击【阅读原文】来详细了解一下我们的优惠折扣吧!
希望我们的服务可以为您的系统带来稳定和良好的使用体验!
联系我们
如有如何疑问,欢迎加入云监控技术交流群~
相关文章推荐: