【玩转云耀云服务器HECS】Prometheus + grafana 监控服务器性能 (基于 Docker 部署)

举报
福州司马懿 发表于 2023/04/05 18:14:11 2023/04/05
【摘要】 本文讲述了一个运维,通过华为云耀云服务器HECS,通过极简的配置购买下了一台服务器。然后在服务器上安装Docker,使用现有的Docker容器,先后安装了node-exporter、prometheus 和 grafana 实现linux主机监控的过程,全程没写一行代码,都是借助现有软件的组合,搞定了主机监控这一功能

前言

以往我们常用top、free、iostat等命令,去监控服务器的性能,但是这些命令,我们只针对单台服务器进行监控,通常我们线上都是一个集群的项目,难道我们需要每一台服务器都去敲命令监控吗?这样显然不是符合逻辑的,Linux中就提供了一个集群监控工具 – prometheus

本篇我们就来实践一下,如何在华为云耀云服务器HECS上,使用Docker容器,部署 Prometheus + grafana 来监控服务器性能。

组件作用

本文需要用到如下三个组件,其作用分别为

  1. node_exporter: 他的作用主要是收集性能测试的数据,如cpu、内存磁盘网络等信息,然后将数据保存到prometheus,相当于将数据存入到数据库中。
  2. prometheus 只能用于做数据存储,不能做展示,因此我们需要用到grafana组件。
  3. grafana 主要是用于数据展示,并且可以做到定时读取数据

云耀云服务

首先,首先访问产品页面:https://www.huaweicloud.cn/product/hecs.html

图片.png

云耀云服务器(Hyper Elastic Cloud Server)是一种可以快速搭建且易于管理的新一代云服务器,支持全方位性能监测,快速锁定中高风险信息并及时提出建议,确保业务平稳运行;同时提供开箱即用的镜像,实现一键应用部署,助力中小企业便捷高效的在云端构建电商网站、Web应用、小程序、学习环境、各类开发测试等,简单上云快一步!

购买 HECS

接下来点击“立即购买”,可以看到购买 HECS 总共需要配置以下6项

  1. 选择区域
  2. 镜像(EulerOS、CentOS、Ubuntu、Windows)
  3. 配置(入门型、基本型、进阶型、随心购)
  4. 设置密码(可创建后设置)
  5. 增值服务(性能助手免费诊断、主机安全基础版、开启详细云监控,3者均免费)
  6. 购买时长

图片.png

图片.png

一个月是¥55.36元,一年是¥558.75元

图片.png

点击购买,直接就到了实际付款的界面了

图片.png

连接HECS

成功入手HECS后,在HECS服务器列表中,会出现该HECS (如果没有,请确认当前区域是否与购买的区域相同)。右下角是它的公网IP(到时候使用SSH工具,就是连接该IP地址)

图片.png

SSH连接工具推荐使用Putty

PuTTY是一个Telnet、SSH、rlogin、纯TCP以及串行接口连接软件。较早的版本仅支持Windows平台,在最近的版本中开始支持各类Unix平台,并打算移植至Mac OS X上。

它有如下优点
◆ 完全免费
◆ 在 Windows 9x/NT/2000 下运行的都非常好
◆ 全面支持 SSH1 和 SSH2
◆ 体积很小
◆ 操作简单

尤其是软件体积才 765 字节,远小于其它同类软件,如下图

图片.png

双击Putty图标,会弹出一个配置对话框,在 Host Name 处,你可以输入刚刚的“公网IP”或者“你的域名”,然后点击Open按钮,开始连接服务器

图片.png

连接成功后,你就可以输入任意命令与centos系统进行交互了,例如

echo "hello world" & date

图片.png

安装docker

安装命令如下

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

也可以使用国内 daocloud 一键安装命令

curl -sSL https://get.daocloud.io/docker | sh

下载docker镜像

docker pull prom/node-exporter
docker pull prom/prometheus
docker pull grafana/grafana

node-exporter

node-exporter主要用于收集性能测试的数据,如cpu、内存磁盘网络等信息,然后将数据保存到prometheus,相当于将数据存入到数据库中。

启动node-exporter的命令为

docker run -d --name myexporter -p 9100:9100 \
	-v "/proc:/host/proc:ro" \
	-v "/sys:/host/sys:ro" \
	-v "/:/rootfs:ro" \
	prom/node-exporter

/proc 目录
Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构、改变内核设置的机制。proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间。它以文件系统的方式为访问系统内核数据的操作提供接口。

用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。

/sys 目录

跟proc一样虚拟文件系统,记录核心系统硬件信息

图片.png

可以使用 docker ps 命令查看容器的启动状态

使用 docker exec -it <容器名> <具体命令> 可以在容器内执行命令,例如上面的列出容器内的文件

ls -a 表示列出所有文件(包括隐藏文件,linux系统中以点号开头的表示隐藏文件)

curl -i url 可以用来返回该网页的“协议头部信息”和“html信息”

node-exporter启动后,会提供一个查看监控指标的网址: http://localhost:9100/metrics。使用 curl -i http://localhost:9100/metrics 可以在命令行中查看其网址的内容,如下图

图片.png

可以看到 node-exporter 已经成功启动了

prometheus

首先创建一个目录,用来存放prometheus的配置文件

mkdir -p /root/data/prometheus/

mkdir -p 表示递归创建(即如果子目录不存在则会自动创建)

然后使用vi命令,新建一个 yml 配置文件

vi /root/data/prometheus/prometheus.yml

配置文件的内容如下

global:
  scrape_interval:     60s
  evaluation_interval: 60s

scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets: ['localhost:9090']
        labels:
          instance: prometheus

  - job_name: linux
    static_configs:
      - targets: ['192.168.56.1:9100']
        labels:
          instance: linux

target 要配置你要监控的主机IP(即使是本机也不能使用localhost,因为localhost表示prometheus容器里的系统)

接着,在docker中启动prometheus

docker run -d --name myprometheus \
  -p 9090:9090 \
  -v /root/data/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml \
  prom/prometheus

然后使用 docker ps 命令查看启动状态。使用 cat /root/data/prometheus/prometheus.yml 查看之前配置的文件内容

图片.png

如果使用docker ps 命令发现容器未正常启动,可以使用 docker logs <容器名> 查看容器日志

图片.png

然后访问 http://<服务器公网IP>:9090/graph 就可以查看到监控状态了

图片.png

我这里报了一个警告,这是由于时间不同步

Warning: Error fetching server time: Detected 13167.400000095367 seconds time difference between your browser and the server. Prometheus relies on accurate time and time drift might cause unexpected query results.

解决办法是:使用ntpdate命令,与某台服务器进行同步

yum install ntpdate
ntpdate ntp1.aliyun.com

图片.png

修改后,警告提示就会自动消失了。点击“Status”->“Target”,看到页面中有如下node节点,状态已经是UP了,它代表着prometheus和node_exporter已经链接成功了

图片.png

小技巧:修改prometheus.yml配置文件后不用重启容器,可以使用如下命令进行热加载

curl -XPOST http://localhost:9090/-/reload

grafana

Grafana是开源的、炫酷的可视化监控、分析利器,无论您的数据在哪里,或者它所处的数据库是什么类型,您都可以将它与Grafana精美地结合在一起。它还有丰富的套件供您选择,目前,它已拥有54个数据源,50个面板,17个应用程序和1732个仪表盘。总而言之Grafana是一个跨平台的开源的度量分析和可视化工具,可以通过将采集的数据查询然后可视化的展示,并及时通知。

grafana 的主要目录结构如下

  1. 主配置文件 /etc/grafana/grafana.ini
  2. 数据文件 /var/lib/grafana
  3. home目录 /usr/share/grafana
  4. 日志目录 /var/log/grafana
  5. 插件目录 /var/lib/grafana/plugins
  6. 自定义一些精细化配置的文件夹 /etc/grafana/provisioning

在 DockerMachine 上运行 Grafana, http://<机器地址>:3000,登录名用admin,密码为刚创建Grafana时的admin8888,

docker run -d -i --name=mygrafana -p 3000:3000 \
-v "/etc/localtime:/etc/localtime" \
-e "GF_SERVER_ROOT_URL=http://grafana.server.name" \
-e "GF_SECURITY_ADMIN_PASSWORD=admin8888" \
--net=bridge \
grafana/grafana

使用docker ps 查看容器是否启动成功

图片.png

配置 grafana 仪表盘

浏览器访问 http://<服务器IP>:3000, 输入上面配置过的账号密码“admin/admin123”

图片.png

现在最新的 grafana 版本为 9.4.7,点击首页的“添加数据源”按钮

图片.png

选择“prometheus”

图片.png

这里改为你的IP地址。注意:由于grafana是部署在容器中,这里的IP地址一定得配IP,不能用localhost(因为localhost指的是grafana容器)

图片.png

点击“保存并测试”按钮,上面一定要是绿色的勾勾,才说明保存成功

图片.png

点击 grafana 面板中的“dashboard”,然后在点击“import”。在输入框中输入面板的URL或者ID,可以自动导入预制的可视化面板

图片.png

grafana已经为我们免费提供了很多预定义好的面板。面板地址在其官网中,在上面你可以搜到各种各样好看的面板。面板访问地址如为:https://grafana.com/grafana/dashboards/

图片.png

这里推荐使用这个专为 node-expoerter 定制的面板 1860-node-exporter-full。面板地址为:https://grafana.com/grafana/dashboards/1860-node-exporter-full/

图片.png

在grafana的“面板导入”页面,输入面板URL或ID(1860)然后点击“load”按钮。grafana会自动搜索出该面板的详细信息如下。

选择“Select a prometheus Source”(只有一个Default的),然后点击“import”按钮就可以将其引入

图片.png

引入后,你就可以查看到node-exporeter为你统计的系统所有软硬件情况了。共有16项,如下

  1. Quic CPU / Mem / Disk
  2. Basic CPU / Mem / Net / Disk
  3. CPU / Memory / Net / Disk
  4. Memory Meminfo
  5. Memory Vmstat
  6. System Timesync
  7. System Processes
  8. System Misc
  9. Hardware Misc
  10. Systemd
  11. Storage Disk
  12. Storage Filesystem
  13. Network Traffic
  14. Network Sockstat
  15. Network Netstat
  16. Node Exporter

图片.png

将数据更新频率设置为 5s,展示最近 5 分钟的数据,就可以看到实时的、最近 5 分钟的各项性能指标。包含了 CPU、Load、内存、网络、磁盘、IO 耗时等指标。监控数据永久保存,可以随时查看任意时间点内的历史统计数据,非常方便。

图片.png

总结

本文讲述了一个运维,通过华为云耀云服务器HECS,通过极简的配置购买下了一台服务器。然后在服务器上安装Docker,使用现有的Docker容器,先后安装了node-exporter、prometheus 和 grafana 实现linux主机监控的过程,全程没写一行代码,都是借助现有软件的组合,搞定了主机监控这一功能。

大致流程总结如下

图片.png

【玩转“云耀云服务器(HECS)”有奖征文来袭!惊喜大礼包激励等你来拿!】有奖征文第20期正在火热进行中:
https://bbs.huaweicloud.cn/blogs/391930

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。