前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >云服务器指标采集

云服务器指标采集

原创
作者头像
tinkerli
发布2024-06-25 11:10:37
1710
发布2024-06-25 11:10:37

一:整体架构说明

备注:

● 选择Node_exporter作为指标采集器,因其成熟社区以及腾讯云云监控默认指标维度、粒度都不够;

● 选择Vmagent抓取Node_exporter指标,主要是其高性能,更低的资源消耗相对Prometheus

● CLS指标主题提供无限制的存储,标准的PromQL查询语法协议,以及开源Prometheus数倍的查询性能,更低的成本;

● 选择Grafana,成熟的社区,用户习惯,配套的Dashboard等

二:Node_exports部署与运行

Node_exports已经成为机器监控的标准exporter,基本指标约100来个,几乎可以覆盖日常定位需求,顾采用其作为机器采集组件。

1. Node_exoports部署

● 下载软件包

代码语言:javascript
复制
# wget https://github.com/prometheus/node_exporter/releases/download/v1.8.1/node_exporter-1.8.1.linux-amd64.tar.gz

✓ 版本自行选择,建议使用比较新的版本,特性&bugfix

✓ 因是github下载国内比较慢,建议下载一次,通过批量工具推送到各个服务器端

● 解压缩

代码语言:javascript
复制
# tar xvf node_exporter-1.8.1.linux-amd64.tar.gz
# mv node_exporter-1.8.1.linux-amd64/node_exporter /usr/local/bin/
# rm -rf node_exporter-1.8.1.linux-amd64/

2. 加入Systemd管理,设置开机启动

● 创建对应service文件

代码语言:javascript
复制
# cat /etc/systemd/system/node_exporter.service 
[Service]
ExecStart=/usr/local/bin/node_exporter --collector.tcpstat --collector.ethtool 
Restart=always
[Install]
WantedBy=multi-user.target
[Unit]
Description=node_exporter
After=network.target 

● 启动&校验&加入开机启动

代码语言:javascript
复制
# systemctl start node_exporter.service
# systemctl status node_exporter.service 
● node_exporter.service - node_exporter
   Loaded: loaded (/etc/systemd/system/node_exporter.service; disabled; vendor preset: disabled)
   Active: active (running) since Sun 2024-06-23 13:06:02 CST; 7s ago
 Main PID: 83821 (node_exporter)
    Tasks: 5 (limit: 23292)
   Memory: 5.3M
   CGroup: /system.slice/node_exporter.service
           └─83821 /usr/local/bin/node_exporter --collector.tcpstat

6月 23 13:06:02 VM-18-3-centos node_exporter[83821]: ts=2024-06-23T05:06:02.021Z caller=node_exporter.go:118 level=info collector=time
# systemctl enable node_exporter.service 
Created symlink /etc/systemd/system/multi-user.target.wants/node_exporter.service → /etc/systemd/system/node_exporter.service.

3. 验证是否正常工作

默认node_exporters监听9100端口,curl IP+Port/metrics 是否正常返回即可

代码语言:javascript
复制
# curl localhost:9100/metrics
# HELP go_gc_duration_seconds A summary of the pause duration of garbage collection cycles.
# TYPE go_gc_duration_seconds summary
go_gc_duration_seconds{quantile="0"} 0
go_gc_duration_seconds{quantile="0.25"} 0
go_gc_duration_seconds{quantile="0.5"} 0
go_gc_duration_seconds{quantile="0.75"} 0

4. 补充说明

✓ 整体上部署很简单,如有异常根据特定下错误日志上下文排查;

✓ 此外上边步骤可以打包成一个脚本或者特定编排工具部署更简单;

✓ node_exporters启动可以指定更多选项,比如更多指标采集等,但建议尽量使用默认即可,因大多数不是默认项的都是可能导致高负载或者资源占用比较多等。

三:CLS指标主题创建&子用户创建

备注:

代码语言:javascript
复制
指标主题,等同于一个Prometheus实例集群,用于接收vmagent上报,grafana查询等
子用户,主要用于上报、查询指标主题的数据,通过腾讯云API 秘钥鉴权

1. 创建子用户&赋予其相关权限

备注:用来鉴权,赋予CLS读写权限

● 打开腾讯云控制台-访问管理页面,新建用户

● 选择自定义创建

● 默认选择可访问资源

● 设置用户名&勾选编程权限

● 设置用户权限(这里选择了CLS产品的全读写权限)

● 设置标签(按需是否设置)

● 审阅信息&权限(点击完成即可)

● 显示成功创建

备注:

✓ 要自己备份好相关API Key、ID ,目前只显示一次,或者发送到自己邮箱备份

✓ 这里的Secret ID、Key就是我们下面填充Vmagent和Grafana所使用的

2. 创建CLS指标主题&获取相关信息

● 创建指标主题

● 设置指标主题名称&选择其对应日志集,点击确定即可

备注:按需选择存储时长;日志集不存在选择创建

● 获取指标上报地址和指标查询地址

备注:

✓ 如Grafana、Vmagent部署在腾讯云上建议都走内网地址,提供更稳定的网络链路。

✓ 数据上报,即Vmagent Remote Write的地址

✓ 数据查询,即Grafana配置Prometheus的地址

● dddd

四:Vmagent 部署与运行

1. Vmagent部署

● 下载软件包

代码语言:javascript
复制
 # wget https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/v1.101.0/vmutils-linux-amd64-v1.101.0.tar.gz

✓ 版本自行选择,建议使用比较新的版本,特性&bugfix;

✓ 因是github下载国内比较慢,建议下载一次,通过批量工具推送到各个服务器端;也可以尝试搜索国内镜像源;

✓ 注意下载vmutils-*开头的包,Vmagent包含这个包中

● 解压缩&删除无关包

代码语言:javascript
复制
# tar xvf vmutils-linux-amd64-v1.101.0.tar.gz
# mv vmagent-prod /usr/local/bin/
# rm vmalert-prod vmalert-tool-prod vmctl-prod vmrestore-prod vmbackup-prod vmutils-linux-amd64-v1.101.0.tar.gz vmauth-prod -f

2. 创建Vmagent配置

● 配置结构如下:

代码语言:javascript
复制
/etc/vmagent/
├── vmagent.yaml
├── targets/
│   ├── test.json
│   └── prod.json

备注:

✓ 这里使用了Prometheus 服务发现机制中的通过文件发现新的目标,其支持丰富的动态机制,比如DNS、K8s、consul等等,参考:https://docs.victoriametrics.com/sd_configs/#scrape_configs

✓ targets这里划分,分不同的目标,如不同环境Test、Prod。可根据实际情况调整,比如不同业务模块划分不同的targets,以更方便添加label等操作

● 配置文件详情

vmagent.yaml:

代码语言:javascript
复制
# cat vmagent.yaml 
scrape_configs:
  - job_name: 'node_exporter'
    scrape_interval: 15s
    file_sd_configs:
      - files:
          - '/etc/vmagent/targets/*.json'
    relabel_configs:
      - source_labels: [__meta_filepath]
        regex: '.*/(.*)\.json'
        target_label: env

  - job_name: 'vmagent_self_exporter'
    scrape_interval: 15s
    static_configs:
      - targets: ['localhost:8088']

备注:

✓ 这里要注意scrape_interval配置的位置,vmagent一些配置项并不完全兼容Prometheus;

✓ scrape_interval的值决定了Vmagent多久抓取一次目标对象的指标,即一个数据点,这个值也会直接影响PromQL查询的结构,比如设置太长,可能导致配套PromQL查询不到数据等情况,建议设置15s即可。太小也会对目标、Vmagent自身造成资源的高负载情况;

✓ relabel 根据不同的文件,添加不同环境的label标签

prod.json:

代码语言:javascript
复制
cat targets/prod.json 
[
  {
    "targets": ["10.16.120.17:9100", "10.16.120.12:9100"],
    "labels": {
      "env": "prod"
    }
  }
]

test.json:

代码语言:javascript
复制
cat targets/test.json 
[
  {
    "targets": ["10.16.100.125:9100", "test-node2:9100"],
    "labels": {
      "env": "test"
    }
  }
]

即:后续新增机器(部署node_exports)、下降机器只需要从对应prod.json、test.json删除其机器列表即可。

3. 加入Systemd管理,设置开启启动

● 创建对应的Service文件

代码语言:javascript
复制
# cat /etc/systemd/system/vmagent.service 
[Unit]
Description=vmagent
Wants=network-online.target
After=network-online.target

[Service]
ExecStart=/usr/local/bin/vmagent -promscrape.config=/etc/vmagent/vmagent.yaml -promscrape.configCheckInterval=60s -httpListenAddr=:8088 -promscrape.maxScrapeSize=50MB -remoteWrite.url=https://ap-shanghai.cls.tencentyun.com/prometheus/3fc8ead6-be54-41eb-bc60-df5146439678/api/v1/write -remoteWrite.basicAuth.username=AKIDQxxxxxxxxxxxUvCE0Wm -remoteWrite.basicAuth.password=3sRknbxxxxxxgEXa67rL
Restart=always

[Install]
WantedBy=multi-user.target

备注:

✓ promscrape.configCheckInterval参数的核心作用是,Vmagent自动检测config文件更新,就不需要手动reload Service生效了,默认行为是不会自动检测更新

✓ promscrape.maxScrapeSize 参数主要是解决获取抓取目标最大返回的大小,默认是16MB,建议可以调大些,特别是被监控的samples比较多的情况

✓ remoteWrite.url参数就是指定remote write cls的指标主题的写入地址,参考第三块获取相关地址

✓ remoteWrite.basicAuth.username 就是对应第三块中对应的子用户的API ID

✓ remoteWrite.basicAuth.password 就是对应第三块中对应的子用户的API KEY

4. 启动&校验&加入开机启动

代码语言:javascript
复制
# systemctl start vmagent.service
# systemctl status vmagent.service
# systemctl enable vmagent.service

5. 验证是否正常工作

到CLS控制台检索其相关指标主题,查看指标是否正常即可

五:配置Grafana仪表盘&告警

1. 安装部署

● 安装软件

代码语言:javascript
复制
# yum install -y https://dl.grafana.com/oss/release/grafana-11.0.0-1.x86_64.rpm

备注:

✓ 版本选择较新版本,因为部分特性比如$__rate_interval变量是7.x后的版本才支持

✓ 安装方式自行选择,参考:Install Grafana on RHEL or Fedora | Grafana documentation

● 通过systemd启动grafana&校验&加入开机启动

代码语言:javascript
复制
# systemctl daemon-reload
# systemctl start grafana-server
# systemctl status grafana-server
● grafana-server.service - Grafana instance
   Loaded: loaded (/usr/lib/systemd/system/grafana-server.service; disabled; vendor preset: disabled)
   Active: active (running) since 日 2024-06-23 21:28:37 CST; 12s ago
     Docs: http://docs.grafana.org
 Main PID: 11679 (grafana)
   CGroup: /system.slice/grafana-server.service
           └─11679 /usr/share/grafana/bin/grafana server --config=/etc/grafana/grafana.ini --pidfile=/var/run/grafana/grafana-server.pid --packaging=rpm cfg:default.paths.logs=/var/log/grafana cfg:default....
# systemctl enable grafana-server.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/grafana-server.service to /usr/lib/systemd/system/grafana-server.service.

备注:Grafana默认监听在3000端口,注意安全组放通

2. 配置DataSource

● 首次登录grafana需要重置admin密码,默认admin/admin

● 选择DataSource入口

● 选择Prometheus选项

● 配置DataSource

备注:

✓ Name按自己习惯填写

✓ Prometheus server URL:即第三步中对应CLS指标主题的查询数据接口,条件ok选择内网接入点

备注:

✓ 认证方式选择Basic Auth

✓ User即对应第三步中创建子用户对应SecretID

✓ Password即对应第三步中创建子用户对应SecretKey

备注:

✓ 关闭Mange aliter via Alterting UI

✓ Scrape Interval 填充为15s,也是最新版本默认值,这个主要影响Grafana的interval的值生成判断

✓ Query timeout 填充为60s,也是最新版本默认值,CLS默认55s超时

备注:Save&test 如果报错,如400等大多原因是SecretID、SecretKey不对,或者权限设置不对

3. 配置Node_exporters 仪表盘

● 创建新的文件夹,按个人习惯创建命名

● 下载Node_exporters仪表盘(本文档是按照Json下载再导入的方式)

备注:对应下载链接参考:Node Exporter Full | Grafana Labs

● 导入对应仪表盘Json文件

备注:选择刚创建的Prometheus数据源即可,Import后即如下所示

备注:有个别少的pannel可能没有值,因有些是云上环境限制(如Hardware部分),有些因为不是默认Nodeexporters采集指标(比如TCP stat),调整其采集指标需谨慎评估。

4. 配置告警

创建机器人

备注:

✓ 本次简单上手教程,选择企业微信作为告警接收端

● 创建企业微信机器人

● 获取对应的Webhook地址:

创建contact points

● 打开Grafana页面导航栏选择Alterting模块下Contact points,新建一个

● 填充相关信息

备注:

✓ Integration:选择WeCom

✓ Webhook URL:即刚刚创建机器人分配的webhook地址

● 点击Test查看是否正常通信

● 保存相关配置即可

创建消息模版并关联connect points

● 点击Add template

代码语言:javascript
复制
{{ define "WeComeMessage" }}
  {{ range $k,$v:=.Alerts }}
  {{if eq $v.Status "resolved"}}
  #### [CVM主机-恢复信息]
  > <font color="info">告警名称</font>: [{{$v.Labels.alertname}}]
  > <font color="info">告警级别</font>: {{$v.Labels.severity}}
  > <font color="info">开始时间</font>: {{ ($v.StartsAt).Format "2006-01-02 15:04:05" }}
  > <font color="info">结束时间</font>: {{ ($v.EndsAt).Format "2006-01-02 15:04:05" }}
  > <font color="info">实例地址</font>: {{ $v.Labels.instance }}
  > <font color="info">链接地址</font>: [查看链接]({{ $v.PanelURL }})
  **{{$v.Annotations.description}}**
  **{{$v.Annotations.summary}}**
  {{else}}
  #### [CVM主机-告警信息]
  > <font color="#FF0000">告警名称</font>: [{{$v.Labels.alertname}}]
  > <font color="#FF0000">告警级别</font>: {{$v.Labels.severity}}
  > <font color="#FF0000">开始时间</font>: {{ ($v.StartsAt).Format "2006-01-02 15:04:05" }}
  > <font color="#FF0000">结束时间</font>: {{ ($v.EndsAt).Format "2006-01-02 15:04:05" }}
  > <font color="#FF0000">实例地址</font>: {{ $v.Labels.instance }}
  > <font color="#FF0000">链接地址</font>: [查看链接]({{ $v.PanelURL }})
  **{{$v.Annotations.description}}**
  **{{$v.Annotations.summary}}**
  {{end}}
  {{ end }}
{{ end }}

● 填充消息模版

备注:

✓ 消息模版支持go template的语法

✓ 可以通过Preview调试渲染是否有异常报错

✓ 可以参考Reference | Grafana documentation

● 更新connect points

定义告警规则

● 点击新增告警规则

● 填充名称&Promql

备注:这里Promql简单定义一个CPU利用率的使用率

● 添加告警阈值

备注:

这里为了测试简单定义Threshold阈值是1

● 选择或者新建评估组

备注:

✓ 评估组的interval决定了PromQL多久运行一次

✓ Pending period决定了pending的周期

● 添加告警label

备注:

✓ 这个label要么存在,直接下拉选择,要么手动输入,手动输入的UI设计比较难捕捉

● 通知渠道选择刚创建的connect points

● 添加summary和description

查看告警信息

● 企业微信查看

● Grafana面板查看

六:链路运维

1. vmagent自身监控

● 采集自身指标

备注:vmagent自身也暴漏了自身的metrics,本文采用最简方式,自己采集自己,只需要在config配置加上其自身监控job即可,如:

代码语言:javascript
复制
[root@VM-120-17-centos ~]# cat /etc/vmagent/vmagent.yaml 
scrape_configs:
  - job_name: 'node_exporter'
    scrape_interval: 15s
    file_sd_configs:
      - files:
          - '/etc/vmagent/targets/*.json'
    relabel_configs:
      - source_labels: [__meta_filepath]
        regex: '.*/(.*)\.json'
        target_label: env

  - job_name: 'vmagent_self_exporter'   #自己监控自己
    scrape_interval: 15s
    static_configs:
      - targets: ['localhost:8088']     #假定vmagent监听端口为8088

● 添加Grafana的vmagent专属Dashboard

默认引用Grafana官方推荐的即可,链接VictoriaMetrics - vmagent | Grafana Labs,如通过Download Json再导入自己的Grafana即可,效果如下:

非常全面的自监控的指标了,比如看到vmagent出现log errors,接下来继续查看下具体log errors是什么原因

2. 查看vmagent自身的日志

备注:查看vmagent日志主要取决于部署方式,因本文是systemd管理的vmagent,可以通过journalctl查看其相关日志

● 查看实时日志

代码语言:javascript
复制
[root@VM-120-17-centos ~]# journalctl -u vmagent -f
-- Logs begin at 日 2024-05-19 16:54:42 CST. --
6月 23 09:48:39 VM-120-17-centos vmagent[23194]: 2024-06-23T01:48:39.528Z        warn        VictoriaMetrics/lib/promscrape/scrapework.go:382        cannot scrape target "http://test-node2:9100/metrics" ({env="test",instance="test-node2:9100",job="node_exporter"}) 1 out of 1 times during -promscrape.suppressScrapeErrorsDelay=0s; the last error: cannot perform request to "http://test-node2:9100/metrics": Get "http://test-node2:9100/metrics": dial tcp4: lookup test-node2 on 183.60.83.19:53: no such host; try -enableTCP6 command-line flag if you scrape ipv6 addresses

● 查看特定时间段日志

代码语言:javascript
复制
[root@VM-120-17-centos ~]#  journalctl -u vmagent --since "2024-06-23 00:00:00" --until "2024-06-23 00:59:59"
-- Logs begin at 日 2024-05-19 16:54:42 CST, end at 日 2024-06-23 09:55:09 CST. --
6月 23 00:00:09 VM-120-17-centos vmagent[11980]: 2024-06-22T16:00:09.527Z        warn        VictoriaMetrics/lib/promscrape/scrapework.go:382        cannot scrape target "http://test-node2:9100/m
6月 23 00:00:24 VM-120-17-centos vmagent[11980]: 2024-06-22T16:00:24.528Z        warn        VictoriaMetrics/lib/promscrape/scrapework.go:382        cannot scrape target "http://test-node2:9100/m

● 查看最近日志

代码语言:javascript
复制
[root@VM-120-17-centos ~]# journalctl -u vmagent -n 100
-- Logs begin at 日 2024-05-19 16:54:42 CST, end at 日 2024-06-23 09:57:09 CST. --
6月 23 09:33:09 VM-120-17-centos vmagent[23194]: 2024-06-23T01:33:09.527Z        warn        VictoriaMetrics/lib/promscrape/scrapework.go:382        cannot scrape target "http://test-node2:9100/m
6月 23 09:33:24 VM-120-17-centos vmagent[23194]: 2024-06-23T01:33:24.527Z        warn        VictoriaMetrics/lib/promscrape/scrapework.go:382        cannot scrape target "http://test-node2:9100/m
6月 23 09:33:25 VM-120-17-centos vmagent[23194]: 2024-06-23T01:33:25.803Z        error        VictoriaMetrics/lib/promscrape/scraper.go:180        cannot read "/etc/vmagent/vmagent.yaml": cannot

可以看到vmagent log errors是配置的探测目标不通,可以忽略;以及cannot read config file的错误,主要是人为把配置文件改错了

3. grafana推送告警链接问题

备注:grafana告警默认PanelURL 的地址携带的domain 是localhost,如:localhost:3000/xxxx的格式,导致推送企业微信里,直接点击链接打不开或者浏览器报错。

● 修改grafana配置文件

备注:

✓ 即修改domain为你的IP地址或者域名即可;

✓ 重启grafana server。

Node Exporter | OPSaid

How to change localhost to hostname in alerts? - #5 by denzel2 - Alerting - Grafana Labs Community Forums

New in Grafana 7.2: $__rate_interval for Prometheus rate queries that just work | Grafana Labs

【博客555】prometheus的step,durations,rate interval,scrape interval对数据查询结果的影响_prometheus step-CSDN博客

VictoriaMetrics - vmagent | Grafana Labs

Prometheus template variables | Grafana Cloud documentation

Add variables | Grafana documentation

Node Exporter Full | Grafana Labs

通用自定义模版专用:欢迎共享大家的自定义模版,方便其他人也可以直接使用 · Issue #30 · feiyu563/PrometheusAlert · GitHub

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一:整体架构说明
  • 二:Node_exports部署与运行
    • 1. Node_exoports部署
      • 2. 加入Systemd管理,设置开机启动
        • 3. 验证是否正常工作
          • 4. 补充说明
          • 三:CLS指标主题创建&子用户创建
            • 1. 创建子用户&赋予其相关权限
              • 2. 创建CLS指标主题&获取相关信息
              • 四:Vmagent 部署与运行
                • 1. Vmagent部署
                  • 2. 创建Vmagent配置
                    • 3. 加入Systemd管理,设置开启启动
                      • 4. 启动&校验&加入开机启动
                        • 5. 验证是否正常工作
                        • 五:配置Grafana仪表盘&告警
                          • 1. 安装部署
                            • 2. 配置DataSource
                              • 3. 配置Node_exporters 仪表盘
                                • 4. 配置告警
                                  • ○ 创建机器人
                                  • ○ 创建contact points
                                  • ○ 创建消息模版并关联connect points
                                  • ○ 定义告警规则
                                  • ○ 查看告警信息
                              • 六:链路运维
                                • 1. vmagent自身监控
                                  • 2. 查看vmagent自身的日志
                                    • 3. grafana推送告警链接问题
                                    相关产品与服务
                                    日志服务
                                    日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志服务平台,提供了从日志采集、日志存储到日志检索,图表分析、监控告警、日志投递等多项服务,协助用户通过日志来解决业务运维、服务监控、日志审计等场景问题。
                                    领券
                                    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档