【玩转云耀云服务器HECS】Prometheus + grafana 监控服务器性能 (基于 Docker 部署)
前言
以往我们常用top、free、iostat等命令,去监控服务器的性能,但是这些命令,我们只针对单台服务器进行监控,通常我们线上都是一个集群的项目,难道我们需要每一台服务器都去敲命令监控吗?这样显然不是符合逻辑的,Linux中就提供了一个集群监控工具 – prometheus
本篇我们就来实践一下,如何在华为云耀云服务器HECS上,使用Docker容器,部署 Prometheus + grafana 来监控服务器性能。
组件作用
本文需要用到如下三个组件,其作用分别为
- node_exporter: 他的作用主要是收集性能测试的数据,如cpu、内存磁盘网络等信息,然后将数据保存到prometheus,相当于将数据存入到数据库中。
- prometheus 只能用于做数据存储,不能做展示,因此我们需要用到grafana组件。
- grafana 主要是用于数据展示,并且可以做到定时读取数据
云耀云服务
首先,首先访问产品页面:https://www.huaweicloud.com/product/hecs.html
云耀云服务器(Hyper Elastic Cloud Server)是一种可以快速搭建且易于管理的新一代云服务器,支持全方位性能监测,快速锁定中高风险信息并及时提出建议,确保业务平稳运行;同时提供开箱即用的镜像,实现一键应用部署,助力中小企业便捷高效的在云端构建电商网站、Web应用、小程序、学习环境、各类开发测试等,简单上云快一步!
购买 HECS
接下来点击“立即购买”,可以看到购买 HECS 总共需要配置以下6项
- 选择区域
- 镜像(EulerOS、CentOS、Ubuntu、Windows)
- 配置(入门型、基本型、进阶型、随心购)
- 设置密码(可创建后设置)
- 增值服务(性能助手免费诊断、主机安全基础版、开启详细云监控,3者均免费)
- 购买时长
一个月是¥55.36元,一年是¥558.75元
点击购买,直接就到了实际付款的界面了
连接HECS
成功入手HECS后,在HECS服务器列表中,会出现该HECS (如果没有,请确认当前区域是否与购买的区域相同)。右下角是它的公网IP(到时候使用SSH工具,就是连接该IP地址)
SSH连接工具推荐使用Putty
PuTTY是一个Telnet、SSH、rlogin、纯TCP以及串行接口连接软件。较早的版本仅支持Windows平台,在最近的版本中开始支持各类Unix平台,并打算移植至Mac OS X上。
它有如下优点
◆ 完全免费
◆ 在 Windows 9x/NT/2000 下运行的都非常好
◆ 全面支持 SSH1 和 SSH2
◆ 体积很小
◆ 操作简单
尤其是软件体积才 765 字节,远小于其它同类软件,如下图
双击Putty图标,会弹出一个配置对话框,在 Host Name 处,你可以输入刚刚的“公网IP”或者“你的域名”,然后点击Open按钮,开始连接服务器
连接成功后,你就可以输入任意命令与centos系统进行交互了,例如
echo "hello world" & date
安装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一样虚拟文件系统,记录核心系统硬件信息
可以使用 docker ps
命令查看容器的启动状态
使用 docker exec -it <容器名> <具体命令>
可以在容器内执行命令,例如上面的列出容器内的文件
ls -a
表示列出所有文件(包括隐藏文件,linux系统中以点号开头的表示隐藏文件)
curl -i url
可以用来返回该网页的“协议头部信息”和“html信息”
node-exporter
启动后,会提供一个查看监控指标的网址: http://localhost:9100/metrics
。使用 curl -i http://localhost:9100/metrics
可以在命令行中查看其网址的内容,如下图
可以看到 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
查看之前配置的文件内容
如果使用docker ps
命令发现容器未正常启动,可以使用 docker logs <容器名>
查看容器日志
然后访问 http://<服务器公网IP>:9090/graph
就可以查看到监控状态了
我这里报了一个警告,这是由于时间不同步
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
修改后,警告提示就会自动消失了。点击“Status”->“Target”,看到页面中有如下node节点,状态已经是UP了,它代表着prometheus和node_exporter已经链接成功了
小技巧:修改prometheus.yml
配置文件后不用重启容器,可以使用如下命令进行热加载
curl -XPOST http://localhost:9090/-/reload
grafana
Grafana是开源的、炫酷的可视化监控、分析利器,无论您的数据在哪里,或者它所处的数据库是什么类型,您都可以将它与Grafana精美地结合在一起。它还有丰富的套件供您选择,目前,它已拥有54个数据源,50个面板,17个应用程序和1732个仪表盘。总而言之Grafana是一个跨平台的开源的度量分析和可视化工具,可以通过将采集的数据查询然后可视化的展示,并及时通知。
grafana 的主要目录结构如下
- 主配置文件 /etc/grafana/grafana.ini
- 数据文件 /var/lib/grafana
- home目录 /usr/share/grafana
- 日志目录 /var/log/grafana
- 插件目录 /var/lib/grafana/plugins
- 自定义一些精细化配置的文件夹 /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
查看容器是否启动成功
配置 grafana 仪表盘
浏览器访问 http://<服务器IP>:3000
, 输入上面配置过的账号密码“admin/admin123”
现在最新的 grafana 版本为 9.4.7,点击首页的“添加数据源”按钮
选择“prometheus”
这里改为你的IP地址。注意:由于grafana是部署在容器中,这里的IP地址一定得配IP,不能用localhost(因为localhost指的是grafana容器)
点击“保存并测试”按钮,上面一定要是绿色的勾勾,才说明保存成功
点击 grafana 面板中的“dashboard”,然后在点击“import”。在输入框中输入面板的URL或者ID,可以自动导入预制的可视化面板
grafana已经为我们免费提供了很多预定义好的面板。面板地址在其官网中,在上面你可以搜到各种各样好看的面板。面板访问地址如为:https://grafana.com/grafana/dashboards/
这里推荐使用这个专为 node-expoerter 定制的面板 1860-node-exporter-full
。面板地址为:https://grafana.com/grafana/dashboards/1860-node-exporter-full/
在grafana的“面板导入”页面,输入面板URL或ID(1860)然后点击“load”按钮。grafana会自动搜索出该面板的详细信息如下。
选择“Select a prometheus Source”(只有一个Default的),然后点击“import”按钮就可以将其引入
引入后,你就可以查看到node-exporeter
为你统计的系统所有软硬件情况了。共有16项,如下
- Quic CPU / Mem / Disk
- Basic CPU / Mem / Net / Disk
- CPU / Memory / Net / Disk
- Memory Meminfo
- Memory Vmstat
- System Timesync
- System Processes
- System Misc
- Hardware Misc
- Systemd
- Storage Disk
- Storage Filesystem
- Network Traffic
- Network Sockstat
- Network Netstat
- Node Exporter
将数据更新频率设置为 5s,展示最近 5 分钟的数据,就可以看到实时的、最近 5 分钟的各项性能指标。包含了 CPU、Load、内存、网络、磁盘、IO 耗时等指标。监控数据永久保存,可以随时查看任意时间点内的历史统计数据,非常方便。
总结
本文讲述了一个运维,通过华为云耀云服务器HECS,通过极简的配置购买下了一台服务器。然后在服务器上安装Docker,使用现有的Docker容器,先后安装了node-exporter、prometheus 和 grafana 实现linux主机监控的过程,全程没写一行代码,都是借助现有软件的组合,搞定了主机监控这一功能。
大致流程总结如下
【玩转“云耀云服务器(HECS)”有奖征文来袭!惊喜大礼包激励等你来拿!】有奖征文第20期正在火热进行中:
https://bbs.huaweicloud.com/blogs/391930
- 点赞
- 收藏
- 关注作者
评论(0)