0.前言

        在日常测试或者运维过程中可能需要对服务器进行一些性能和资源消耗的监测,最简单的方式可以使用类似top命令或任务管理器直接查看,但是这种方法并不方便并且无法持久化,如果想记录内容只能截图或将命令结果重定向到文件,这样工作量巨大且无法保证数据连续性,写入报告还不美观,Prometheus+Grafana的性能资源监控方案完美的解决了这个问题。本文主要介绍如何在windows平台搭建监测环境并用于持续监测linux或windows服务器的资源消耗情况,着重搭建流程和一些常见问题的解决方法,没有太多软件的详细介绍。(所以,为什么要写这么长还不会有人看的前言.....)

1.各种工具下载

        俗话说授人以渔不如授人以鱼,这是下面用到的全部软件,不想自己去挨个找的直接拿吧: https://pan.baidu.com/s/1aP9V5Xf27a_vkwnyb1YrRA 提取码: gtp8

编号软件名称下载地址作用
1Prometheusprometheus官网下载地址接收从服务器读取的各种数据
2GrafanaGrafana官网下载地址接收Prometheus并漂亮的图形化展示
3

node_exporter

prometheus官方下载地址监测linux服务器资源并发送给Prometheus
4windows_exporterwindows_exporter下载地址监测windows服务器资源并发送给Prometheus
5nvidia_gpu_exporternvidia_gpu_exporter下载地址监测服务器上nvidia显卡的资源并发送给Prometheus
6grafana仪表盘grafana官方仪表盘市场漂亮的展示展示资源使用情况
7linux仪表板一个linux服务器用的仪表盘linux服务器用的仪表盘(个人喜好)
8windows仪表板一个windows服务器用的仪表盘windows服务器用的仪表盘(个人喜好)
9nvidia_gpu仪表盘一个nvidia_gpu_exporter用的仪表盘nvidia_gpu_exporter用的仪表盘

2.默认端口占用汇总

编号谁占用的端口号
1Prometheus9090
2Grafana3000
3node_exporter9100
4nvidia_gpu_exporter9835
5windows_exporter9182

3.安装部署流程

3.1.Prometheus安装

3.1.1.下载Prometheus

        在官网(prometheus官网下载地址)下载Prometheus本体,因为我们是在windows平台部署,所以下载windows版

        下载成功后,会得到一个压缩包

3.1.2.安装Prometheus

        解压上一步得到的压缩包到任意路径,会获得一个文件夹,可以将这个文件夹放到任意地方,但是尽量不要包含中文路径,以防出现一些奇奇怪怪的问题,Prometheus无需安装,解压后即可直接使用。

3.1.3.配置Prometheus

        打开上一步的文件夹,其中有三个文件需要我们留意,data文件夹中存放的是我们之后检测到的数据;Prometheus.exe就是程序入口,双击即可运行;Prometheus.yml是Prometheus的配置文件。

        双击或者使用记事本、npp之类的文本编辑器打开Prometheus.yml,在这里面,我们需要配置一下我们要监测的服务器配置即job。首先找到scrape_configs:,在scrape_configs:下面,仿照已经存在的prometheus监测自己的job

  - job_name: "prometheus"
    static_configs:
      - targets: ["localhost:9090"]

新建一个我们自己的job,这里可以直接复制粘贴上面的然后修改job_name和targets即可,这里的job_name可以是任意字符,尽量见名知义,会显示在之后的仪表盘中,targets中的ip地址是想要监测的服务器ip,端口号是探针(exporter)的端口号,我这里准备监测linux服务器,所以选择了node_exporter,而node_exporter的默认端口号是9100,这里就填写9100,常用exporter的默认端口号我会写在文章开头,如果不知道也可以问度娘或者在服务器上看一眼。

  - job_name: 'server1'  # 监控1服务器
    static_configs:
      - targets: ['192.168.1.1:9100']  # 1服务器ip+端口

整体效果如下,注意缩进,#后面内容为注释可以自行编辑

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"]

  - job_name: 'server1'  # 监控1服务器
    static_configs:
      - targets: ['192.168.1.1:9100']  # 1服务器ip+端口

这里还有一些其他配置可以自行修改,例如global中的scrape_interval是全局抓取间隔,evaluation_interval是全局分析间隔,默认为15s,如果认为15秒间隔太长可以改小一点,修改后所有job都会受到限制,但是不要改的太小,会导致服务器压力增大,可能会影响正常功能使用

也可以为某一个job单独规定抓取间隔,这样,这个配置只会对这个job生效不影响其他job

  - job_name: 'server1'  # 监控1服务器
    scrape_interval: 1s         #这个任务的抓取间隔为1秒
    static_configs:
      - targets: ['192.168.1.1:9100']  # 1服务器ip+端口

修改并保存Prometheus.yml文件后,需要重启Prometheus才会生效

3.2.安装配置exporter

3.2.1.下载exporter

        我们可以前往官网(prometheus官网下载地址)下载需要的exporter,进入页面后下滑可以看到很多不通场景的exporter,选择自己需要的即可,我这里要监测linux系统,所以选择这个

        下载后我们会得到一个.tar.gz的压缩文件

3.2.2.安装并配置exporter

        将上一步得到的压缩包,放到我们准备监测的linux服务器上,这一步方法可以自行百度,用工具用命令都可以,放到任意目录下都可以,但是为了方便日后管理,还是找一个固定位置放比较好,放置好后可以使用ll命令查看一下,大致样子如下

        解压这个压缩文件

tar -zxvf node_exporter-1.9.1.linux-amd64.tar.gz

        得到一个解压后的文件夹,可以自行改名方便使用,我比较懒就不改了

        为我们的exporter配置一个服务,方便日后使用

sudo vim /etc/systemd/system/node_exporter.service

        如果提示以下情况,说明你的系统还没有安装vim

        这个时候安装一个vim即可

sudo yum install vim

        放入以下内容

[Unit]
Description=Prometheus Node Exporter
After=network.target
 
[Service]
User=nobody
ExecStart=/home/node_exporter-1.9.1.linux-amd64/node_exporter \
  --collector.processes \
  --collector.systemd \
  --collector.logind \
  --collector.cpu \
  --collector.meminfo \
  --collector.filesystem \
  --collector.netstat \
  --collector.netdev \
  --collector.diskstats \
  --collector.time \
  --collector.uname \
  --collector.loadavg
 
Restart=on-failure
 
[Install]
WantedBy=multi-user.target

        其他基本不用修改,但是注意这里的路径要改为自己的node_exporter所在的真实路径,否则会配置失败

        修改好后,按esc退出编辑模式,按:后输入wq保存并退出配置文件。

        重载systemd配置并启动我们的node_exporter服务

#重载systemd配置
sudo systemctl daemon-reload
 
#设置开机启动(可选操作)
sudo systemctl enable node_exporter
 
#启动服务
sudo systemctl start node_exporter
 
#查看状态
sudo systemctl status node_exporter

        如果启动成功,查看状态会看到类似这样的信息

        我们可以同时给多个服务器安装exporter,或根据需求给一个服务器安装多个exporter,安装步骤大同小异,记得安装好后去Prometheus.yml中添加对应的job。

        回到我们的windows机器,打开任意浏览器,输入http://你的被监测服务器ip:9100/metrics,如果看到类似效果,证明exporter安装配置成功,且已经成功读取到了数据。注意,这里的ip是你的被监测的服务器ip,端口号是exporter的端口号。

        如果启动服务后,进入上述网址未显示内容,大概率是9100端口没有开放,我们可以在服务器上先查看一下端口开放情况

sudo firewall-cmd --list-ports

        若确实没有9100端口,则打开9100端口

#开放9100端口
sudo firewall-cmd --zone=public --add-port=9100/tcp --permanent
#重载防火墙服务
sudo firewall-cmd --reload

        然后回到刚刚的页面刷新即可

        在执行sudo firewall-cmd --list-ports命令时可能会出现提示FirewallD is not running
的情况,如下图所示,这个提示的意思是防火墙没有在运行

        我们只需要启动防火墙即可

#启动防火墙
sudo systemctl start firewalld
#检查防火墙状态
systemctl status firewalld

        在结果中看到类似active (running)的提示就表示防火墙启动成功了,继续执行开放端口操作即可

3.2.3.安装并配置nvidia_gpu_exporter(nvidia显卡探针,非服务化启动)

        这里介绍一下如何监测显卡,顺便介绍另一种启动探针方法。以nvidia显卡为例,且不使用服务化,直接启动探针。这个方法的优点是快捷,省略了配置systemctl等等的步骤,缺点是后续频繁使用不如systemctl服务化方便,所以,适用于着急开始监控,且后续没什么反复开关的情况。

        特别注意:nvidia_gpu_exporter虽然从数据上看即不占用显存也不占用算力,但是,由于他的原理是通过nvidia-smi这个命令持续查询显卡信息,所以会影响显卡对其他信息的处理速度,当发现显卡处理其他信息的速度变慢又找不到其他原因时,请考虑停掉nvidia_gpu_exporter进程。顺便,直接使用nvidia-smi命令进行查询时,也尽量不要使用watch命令做频率过快的更新,一样会导致显卡处理其他信息的速度变慢。

3.2.3.1.下载nvidia_gpu_exporter

        首先,我们前往这个地址(nvidia_gpu_exporter下载地址)下载nvidia_gpu_exporter,下载成功后,我们会得到一个压缩包

3.2.3.2.安装并启动

        将上一步得到的压缩包,放到我们准备监测的linux服务器上,这一步方法可以自行百度,用工具用命令都可以,放到任意目录下都可以,但是为了方便日后管理,还是找一个固定位置放比较好,放置好后可以使用ll命令查看一下,大致样子如下

        这里推荐将上面的压缩包放到一个空的目录下,因为这个压缩包里面没有独立的文件夹放他的文件,导致解压出来直接掉一地,不方便管理,新建目录(即文件夹)的命令如下

mkdir nvidia_gpu_exporter

        解压这个压缩文件

tar -zxvf nvidia_gpu_exporter_1.3.2_linux_x86_64.tar.gz

        我们会得到如下两个文件

        直接启动nvidia_gpu_exporter

nohup ./nvidia_gpu_exporter &

        到我们的windows机器,打开任意浏览器,输入http://你的被监测服务器ip:9835,如果看到类似效果,证明nvidia_gpu_exporter启动成功,且已经成功读取到了数据。

        如果发现无法访问,大概率是端口没有开放,操作参考3.2.2中开放端口的操作开放9835端口。

3.2.3.3.停止监测

        首先查找nvidia_gpu_exporter的进程id

ps -aux | grep "nvidia_gpu_exporter"

        结果类似这样,只用找到这个./nvidia_gpu_exporter的进程id就可以,下面那个带grep的是你的查找进程,不用理会

        杀掉这个进程

kill 15496

3.3.启动prometheus

        进入刚刚解压好的prometheus文件夹,双击prometheus.exe即可启动

        打开任意浏览器,输入http://prometheus所在机器的ip:9090,看到以下页面证明启动成功

        点击status中的Target health,可以查看所有的监控情况,也就是我们配置的exporter

        成功启动正常运行的exporter会显示绿色的up

        没有成功启动的会显示红色的down

3.4.安装grafana

3.3.1.下载grafana

        进入官网下载地址(Grafana官网下载地址),这里有各种平台的安装方式可以自行选择,我们现在要在windows平台安装,所以选择windows的安装包,为了省事,可以选择免安装版,点击下载

        下载成功后,我们会获得一个压缩文件,虽然是.tar.gz格式,但是在windows平台也是可以正常解压使用的。

3.3.2.安装grafana

        解压上一步得到的压缩包到任意路径,会获得一个文件夹,可以将这个文件夹放到任意地方,但是尽量不要包含中文路径,以防出现一些奇奇怪怪的问题,这样获得的grafana无需安装,解压后即可直接使用。

3.5.启动grafana

        进入上一步的文件夹,找到bin文件夹,进入,找到grafana-server.exe,双击启动,grafana就启动了

        打开任意浏览器输入http:// grafana所在机器的ip:3000,看到以下页面证明启动成功

        默认用户名/密码是admin/admin,首次登录需要修改密码,修改后记住自己的用户名密码即可

3.6.配置prometheus数据源

        进入grafana后,在左侧菜单栏找到Connections-Data sources,点击页面右上角的Add new data sources

        选择prometheus

        Name中填写一个数据源的名字,尽量见名知义方便日后维护

        在Connection中添加你的prometheus所在机器的ip和端口号

        在scrape interval中可以修改数据刷新时间,默认15s

        其他项均可保持默认,或根据个人需求自行修改,点击最下面的save&test,完成数据源配置

        出现如下提示,证明数据源配置成功

3.7.配置仪表盘

3.7.1.准备仪表盘模板

        进入grafana官方的仪表盘市场(Grafana dashboards | Grafana Labs

        选择一个自己喜欢并且适配数据源的仪表盘模板,下滑页面也可以根据关键字进行过滤

        挑好你喜欢的仪表盘,直接点击进入仪表盘详情页面,点击右侧的download JSON,下载这个仪表盘的json文件

        下载成功后我们会获得一个json文件,可以自行改一个见名知义的文件名

3.7.2.新建仪表盘配置

        点击左侧菜单中的Dashboard,点击页面右侧New

        选择New dashboard

        选择右下角的import a dashboard中的import dashboard,当然如果对自己的diy能力有信心或者感兴趣也可以自己制作仪表盘,我们这里还是先选择导入大佬做好的仪表盘

        点击discard

        点击红框位置,选择提前准备好的仪表盘json文件

        Name这里可以改一个仪表盘的名字,点击最下面的Prometheus,选择需要展示的数据源,最后点击import,完成仪表盘导入

4.查看效果

        成功导入仪表盘后会自动跳转到这个仪表盘的展示页面,有时候会加载的慢一下,刷一下就好了

        如果配置了多个监测,可以在ip这里点击选择不同的服务器,点击时间这里,可以选择数据展示的时间范围,点击refresh,可以选择自动刷新的时间间隔

        好啦,打完收工!之后还会有一些使用过程中的小问题之类的,估计会单独写帖子了,比如GPU的监控之类的,全放这里有点太臃肿了,我先把gpu监控用的exporter和配套仪表盘放这了,有用的自取。不过,也会尽量把链接贴过来方便大家使用。啊,可算搞完了,第一次写这种博客,一点点码字一张张截图,还挺累的(吐槽一下这个在线编辑好难用.....),其实网上有很多相关内容的博客帖子之类的,不过,在实际使用的时候,总感觉不够详细,或者太详细了.....需要东找西找的,所以就决定自己搞一篇超实用的教程,也算是自己对知识总结积累,如果有幸帮到其他人,那再好不过啦.....

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐