本文将详细为您介绍腾讯云云服务器(CVM)如何从零开始接入 Prometheus 监控服务。
购买 Prometheus
说明
购买的 Prometheus 实例需跟监控的云服务器同一个 vpc 下,才能实现网络互通。
1. 登录 Prometheus 监控服务控制台,单击新建购买 Prometheus 实例 。
2. 在购买页中,选择合适的实例规格、网络。选择相同 vpc 网段,保证 Prometheus 能与需要采集的云服务器网段相同,才能采集到数据。实例规格,可根据自己的业务上报量进行选择。
3. 选择完后,单击立即购买并支付即可。
说明
接入云服务器基础指标
1. 下载安装 node_exporter:
在需要上报数据的主机上,下载并安装 node_exporter,您可以点击进入 Prometheus 开源官网下载地址 node_exporter,也可以直接执行下列命令:
wget https://rig-1258344699.cos.ap-guangzhou.myqcloud.com/prometheus-agent/node_exporter -O node_exporter
目录为当前文件夹:
2. 运行 node_exporter 采集基础监控数据:
赋予权限,执行 node_exporter 并查看日志。
chmod +x node_exporter && nohup ./node_exporter &cat nohup.out
如下图所示即为执行成功:
可通过下列命令,查看暴露在9100端口的监控数据:
curl 127.0.0.1:9100/metrics
如下图为执行命令后看到的暴露出来的指标监控数据:
3. 新增抓取任务:
i. 登录 Prometheus 监控服务控制台,选择对应 Prometheus 实例进入管理页面。
ii. 进入数据采集 > 集成中心,在集成中心页面找到CVM 云服务器卡片并点击弹出集成页面,根据页面提示进行配置即可。
job_name: example-job-namemetrics_path: /metricscvm_sd_configs:- region: ap-guangzhouports:- 9100filters:- name: tag:示例标签键values:- 示例标签值relabel_configs:- source_labels: [__meta_cvm_instance_state]regex: RUNNINGaction: keep- regex: __meta_cvm_tag_(.*)replacement: $1action: labelmap- source_labels: [__meta_cvm_region]target_label: regionaction: replace
如需使用公网 IP 作为采集目标,需要在抓取任务中增加以下 relabel 规则:
- action: replaceregex: ([^:]+):(.*);(.+)replacement: $3:$2source_labels:- __address__- __meta_cvm_public_iptarget_label: __address__
4. 查看数据是否上报成功:
ii. 如下图所示,到 Explore 搜索下
{job="cvm_node_exporter"}
查看是否有数据,若有数据,则表示上报成功。
5. 配置 Dashboard 界面:Dashboard 界面每个产品都会有一些现成的 json 文件,可以直接导入。
ii. 导入 Dashboard 的 json 文件:登录 Prometheus 监控服务控制台,进入基本信息 > Grafana 地址,单击进入 Grafana,在 Grafana 控制台 > Dashboards > Import > 在 Upload JSON file 中上传 Dashboard 文件。
配置完后的效果如下:
接入云服务器业务层指标
Prometheus 根据监控的不同场景提供了 Counter、Gauge、Histogram、Summary 四种指标类型。Prometheus 社区提供了多种开发语言的 SDK,每种语言的使用方法基本上类似,主要是开发语言语法上的区别,下面主要以 Go 作为例子,使用 Counter 指标类型如何上报自定义监控指标数据。其余指标类型请参见 自定义监控。
Counter
计数类型,数据是单调递增的指标,服务重启之后会重置。可以用 Counter 来监控请求数、异常数、用户登录数和订单数等。
1. 如何通过 Counter 来监控订单数:
package orderimport ("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])
2. 暴露 Prometheus 指标:
通过
promhttp.Handler()
把监控埋点数据暴露到 HTTP 服务上。package mainimport ("net/http""github.com/prometheus/client_golang/prometheus/promhttp")func main() {// 业务代码// 把 Prometheus 指标暴露在 HTTP 服务上http.Handle("/metrics", promhttp.Handler())// 业务代码}
3. 采集数据:
完成相关业务自定义监控埋点之后,应用发布,即可通过 Prometheus 来抓取监控指标数据。采集完成后,等待数分钟,您可在 Prometheus 监控服务集成的 Grafana 中查看业务指标监控数据。