两把利器,轻松做好十一期间服务器监控保障

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 由于服务器需要7×24 小时运行,十一期间,为了切实做好服务器的重点保障,电源监控,必不可少。基于成本的考虑,我们决定自己做。如何多快好省,实现一个这样的平台呢?思路是通过服务器自带的远程管理模块读取redfish接口中电源功耗信息,然后采集到时间序列数据库,再通过grafana基于时间和ip做条件筛选做展示。这里就要用到两把开源利器Grafana和Influxdb。

由于服务器需要7×24 小时运行,十一期间,为了切实做好服务器的重点保障,电源监控,必不可少。基于成本的考虑,我们决定自己做。如何多快好省,实现一个这样的平台呢?思路是通过服务器自带的远程管理模块读取redfish接口中电源功耗信息,然后采集到时间序列数据库,再通过grafana基于时间和ip做条件筛选做展示。这里就要用到两把开源利器Grafana和Influxdb。

Tips:

1.Grafana
Grafana是一个开源的度量分析与可视化套件, 可以轻松创建各种漂亮的前端图表,支持多种数据源。
2.Influxdb
一个开源的分布式时序、时间和指标数据库,可以说为物联网而生,可以用作存储各种传感器数据。
3.Redfish
Redfish 是一种带外管理标准,它使用超媒体 RESTful 接口的数据模型表示
法。此模型以标准的机器可读模式表示,其消息负载以 JSON 来表示,
各大主板厂商都有支持,调用特别方便。

服务器各个厂商的远程管理模块虽然各有各家的卖点,但都支持redfish带外管理标准, 厂商远程管理模块对照表:

服务器品牌 远程管理模块
DELL idrac
Lenovo BMC
HP iLO
H3C HDM


一、数据采集


数据采集,不需要额外的软件,用Linux系统中bash 脚本或者python都可以。原理很简单,循环读取服务器的远程管理地址,用户名,密码,模拟登陆远程管理,向redfish发起GET请求,获取电源功耗的值,写入influxdb时间序列数据库中,这个过程中,我们不需要自己记录时间戳,influxdb数据库会写入记录自动添加时间戳。

戴尔的远程管理默认用户名root,密码calvin。联想远程管理的默认用户名USERID,密码PASSW0RD。这里需要注意的是,虽然redfish标准是全球通用的,但各家的redfish接口请求的url不完全一样。以下是我根据戴尔和联想的redfish 分别写了一个函数做处理。

我们先把机房,机柜,远程管理地址,用户名,密码,厂商远程管理模块名称记录到一个文件idrac.list,格式如下

机房1|机柜1|10.10.10.1|root |calvin|idrac
机房2|机柜2|10.10.10.2|USERID|PASSW0RD |bmc

生产环境强烈建议加密存储到单独的数据库中。我这里只是为了方便演示。采集脚本watt_collect.sh如下,包含读取接口,写入influxdb数据库。

#!/usr/bin/env bash
idrac_get_value(){
    get="curl -s -connect-timeout 5 "https://${1}/redfish/v1/Chassis/System.Embedded.1/Power/PowerControl" -k -u ${2}:${3} | jq .PowerConsumedWatts"
    eval $get
}
bmc_get_value(){
    get="curl -s -connect-timeout 5 "https://${1}/redfish/v1/Chassis/1/Power/PowerControl" -k -u ${2}:${3}  |jq  .value[].PowerConsumedWatts"
    eval $get
}
idrac_insert_value(){
    watt_value=$(idrac_get_value ${1} ${2} ${3})
    run="curl -s -connect-timeout 5 –XPOST "http://localhost:8086/write?db=watt_monitor&u=power&p=power" --data-binary "watt,room=${4},cabinet=${5},idrac_ip=${1}  watt_value=${watt_value}" "
#    echo $run
    eval $run
}
bmc_insert_value(){
    watt_value=$(bmc_get_value ${1} ${2} ${3})
    run="curl -s -connect-timeout 5 –XPOST "http://localhost:8086/write?db=watt_monitor&u=power&p=power" --data-binary "watt,room=${4},cabinet=${5},bmc_ip=${1}  watt_value=${watt_value}" "
    eval $run
}
while read line
do
        oem=`echo ${line}|awk -F'|' '{print $6}'`
        ip=`echo ${line}|awk -F'|' '{print $3}'`
        user=`echo ${line}|awk -F'|' '{print $4}'`
        pass=`echo ${line}|awk -F'|' '{print $5}'`
            room=`echo ${line}|awk -F'|' '{print $1}'`
            cabinet=`echo ${line}|awk -F'|' '{print $2}'`
        if [ ${oem} == "idrac" ];then
            idrac_insert_value  "${ip}" "${user}" "${pass}" "${room}" "${cabinet}"  & 
        else
            bmc_insert_value  "${ip}" "${user}" "${pass}"  "${room}" "${cabinet}"  &
        fi
done</root/watt_collect/idrac.list
wait

Influxdb数据库配置

配置文件打开监听,开启密码认证

[http]
  bind-address = "0.0.0.0:8086"
  auth-enabled = true

创建库

create database  watt_monitor;

用户授权

CREATE USER  power with password 'power';
grant all on watt_monitor to power;
show grants for  power;

数据保持策略,这里设置的是存量数据只保留一天,不至于使数据库容量越来越大,省去手动清理历史数据。

show retention policies on watt_monitor;
create retention policy "history_clear_policies" on "watt_monitor" duration 1d replication 1 default  ;
show retention policies on watt_monitor;

简单查询

influx  -host 'localhost' -port '8086' -username 'power' -password 'power' -precision rfc3339
SELECT *  FROM "watt_monitor"."history_clear_policies"."watt" where   time >=  now() -1m tz('Asia/Shanghai') ;

数据格式如下

[root@node1 ~]# influx  -host 'localhost' -port '8086' -username 'power' -password 'power' -precision rfc3339
Connected to http://localhost:8086 version 1.7.6
InfluxDB shell version: 1.7.6
Enter an InfluxQL query
> SELECT *  FROM "watt_monitor"."history_clear_policies"."watt" where   time >=  now() -1m tz('Asia/Shanghai') ;
name: watt
time                   cabinet         idrac_ip       room     watt_value
----                  -------         --------       ----     ----------
2019-09-29T14:02:02.775044559+08:00   机柜1        10.10.10.1       机房1   153
2019-09-29T14:02:02.831190214+08:00   机柜1        10.10.10.2       机房1   337
2019-09-29T14:02:02.868500935+08:00   机柜1        10.10.10.3       机房1   333
2019-09-29T14:02:02.876070524+08:00   机柜1        10.10.10.4       机房1   322
2019-09-29T14:02:03.068110358+08:00   机柜1        10.10.10.5       机房1   154
2019-09-29T14:02:03.304841465+08:00   机柜1        10.10.10.6       机房1   152
2019-09-29T14:02:04.92504785+08:00    机柜1        10.10.10.7       机房1   227

使用crontab 定时执行脚本,保证实时采集

vi /etc/crontab
*  *  *  *  * root /root/watt_collect/watt_collect.sh >>/tmp/`date +%Y-%m-%d`_watt_collect_log  2>&1


二、数据展示


Grafana支持多数据源,这里我们选择采集环节已经准备好的Influxdb。

1.创建数据源

Configuration--> Data Sources 选择Influxdb,创建一个name为机房功率的数据源,配置好数据库读取地址,数据库名,用户名,密码,如图1 。

26.jpg

2.创建图表

Create-->Dashboard 创建一个那么name为 两会重点保障作战室的 监控大盘。

制作宣传栏效果 Add pane-->Text 新建一个文本面板,General 里 Title 为 热烈庆祝两会成功在京召开, Options-->Mode-->html,嵌入一段html5跑马灯效果的“我和我的祖国”的歌词和播放器。Html5代码如下:

1. <div class="good">
2. <marquee direction="left"  scrollamount="5">
3. 我和我的祖国
4. 一刻也不能分割
5. 无论我走到哪里
6. 都流出一首赞歌
7. 
8. 我歌唱每一座高山
9. 我歌唱每一条河
10. 袅袅炊烟小小村落
11. 路上一道辙
12. 
13. 我最亲爱的祖国
14. 我永远紧依着你的心窝
15. 你用你那母亲的脉搏
16. 和我诉说
17. 我的祖国和我
18. 象海和浪花一朵
19. 浪是那海的赤子
20. 海是那浪的依托
21. 
22. 每当大海在微笑
23. 我就是笑的漩涡
24. 我分担着海的忧愁
25. 分享海的欢乐
26. 
27. 我亲爱的祖国
28. 你是大海永不干涸
29. 永远给我碧浪清波
30. 心中的歌
31. 
32. 我和我的祖国
33. 一刻也不能分割
34. 无论我走到哪里
35. 都流出一首赞歌
36. 
37. 我歌唱每一座高山
38. 我歌唱每一条河
39. 袅袅炊烟小小村落
40. 路上一道辙
41. 
42. 我最亲爱的祖国
43. 我永远紧依着你的心窝
44. 你用你那母亲的脉搏
45. 和我诉说
46. 
47. 我最亲爱的祖国
48. 你是大海永不干涸
49. 永远给我碧浪清波
50. 心中的歌
51. </marquee>
52. 
53. <div>
54. <audio controls>
55.   <source src="public/wohewodezuguo.mp3" type="audio/mpeg">
56. </audio>
57. <style>
58. .good{font-size: 20px;margin:15px;color:red;}
59. </style>

3.制作功率仪表盘


Add panel-->Singlestat ,创建仪表盘,我们选择Singlestat类型的图表,数据源选择刚才添加好的“机房功率”数据源。在Metrics选项卡下,选择读取watt这张表,按远程管理IP做条件筛选,按时间间隔做分组,使用last()函数读取功率的最新值,即表中的watt_value字段的值,如图2 。

36.png


在Options选项卡下,我们调整一下仪表盘的样式,0-500绿色,500-1400黄色,1400-2000红色,勾选仪表盘效果,仪表盘值的范围0-2000,值的后缀为w,即watt瓦特,如图3。

37.png

最终效果如图4。其实,这只是这两把利器的冰山一角,更多用途,大家可以仁者见仁,智者见智,充分发挥自己的主观能动性,实现自己更加个性化的需求。

38.jpg


完整代码见附件。

https://github.com/ZuoGuocai/hardware-monitor

本文作者:左国才,VIPKID运维工程师,笔名icai,主要研究开源Linux操作系统,数据库,云计算领域相关技术,平时喜欢阅读脚本之家公众号。

声明:本文为 脚本之家专栏作者 投稿,未经允许请勿转载。

相关实践学习
通过可观测可视化Grafana版进行数据可视化展示与分析
使用可观测可视化Grafana版进行数据可视化展示与分析。
相关文章
|
2月前
|
存储 数据库 数据安全/隐私保护
服务器数据备份是保障数据安全、防止数据丢失和灾难恢复的重要措施
服务器数据备份是保障数据安全、防止数据丢失和灾难恢复的重要措施
52 1
|
6月前
|
弹性计算 监控 安全
【阿里云弹性计算】ECS实例监控与告警系统构建:利用阿里云监控服务保障稳定性
【5月更文挑战第23天】在数字化时代,阿里云弹性计算服务(ECS)为业务连续性提供保障。通过阿里云监控服务,用户可实时监控ECS实例的CPU、内存、磁盘I/O和网络流量等指标。启用监控,创建自定义视图集中显示关键指标,并设置告警规则(如CPU使用率超80%),结合多种通知方式确保及时响应。定期维护和优化告警策略,利用健康诊断工具,能提升服务高可用性和稳定性,确保云服务的卓越性能。
258 1
|
6月前
|
存储 监控 安全
云服务器如何最好安全,企业如何保障云机主的安全使用
云服务器作为数据存储和处理的中心,承载着大量敏感信息。一旦云服务器受到攻击或数据泄露,将可能导致严重的经济损失、声誉损害甚至法律纠纷。因此,加强云服务器安全防护至关重要。
|
6月前
|
存储 监控 安全
服务器防护:保障企业数据安全的坚固堡垒
在数字化时代,服务器作为存储、处理和传输企业关键数据的核心设备,其安全性显得尤为重要。服务器防护不仅是技术层面的挑战,更是企业安全战略的重要组成部分。本文将探讨服务器防护的重要性、常见威胁以及应对策略。
|
6月前
|
监控 安全 容灾
PHP服务器稳定性保障
确保PHP服务器稳定性,需关注以下几点:配置合适硬件及优化操作系统;使用最新稳定版PHP,及时更新安全补丁;编写高质量代码并优化性能;处理异常,记录日志以便监控;管理资源,使用性能监控工具;加强安全防护,如权限设置、防注入攻击;采用自动化部署和持续集成工具;定期备份数据,建立容灾机制。
78 0
|
弹性计算 负载均衡 JavaScript
架构设计基础设施保障IaaS弹性伸缩和无服务器计算 1
架构设计基础设施保障IaaS弹性伸缩和无服务器计算
174 0
|
弹性计算 负载均衡 监控
架构设计基础设施保障IaaS弹性伸缩和无服务器计算 2
架构设计基础设施保障IaaS弹性伸缩和无服务器计算
179 0
|
弹性计算 安全
云服务器ECS特性与优势——安全保障
云服务器ECS特性与优势——安全保障自制脑图
107 0
云服务器ECS特性与优势——安全保障
|
NoSQL JavaScript 应用服务中间件
ColyseusJS 轻量级多人游戏服务器开发框架 - 中文手册(系统保障篇)
ColyseusJS 轻量级多人游戏服务器开发框架 - 中文手册(系统保障篇)
546 0
ColyseusJS 轻量级多人游戏服务器开发框架 - 中文手册(系统保障篇)
|
存储 监控 安全
阿里云服务器如何保障数据安全?
云计算服务具有效率、方便、成本节约等优点。随着云服务市场的快速发展,许多企业开始考虑IT系统向云的迁移
1736 0
阿里云服务器如何保障数据安全?