Prometheus监控DELL服务器硬件

Prometheus监控DELL服务器硬件前言注意标题说的监控 dell 服务器硬件 指的是监控服务器硬件的状态 磁盘 内存 电源等的状态 不是指监控硬件性能 磁盘的空间 内存等的使用量 而是类似于 zabbix 监控 idrac 的 snmp 获取硬件状态 现在大部分公司是使用 prometheus 监控容器和服务 zabbix 监控硬件 端口 当然还有其他监控架构 这里就不对比各个监控的优劣了 仅仅是做一篇文档 前提条件 lt 1 gt 各个需要监控的服务器开启 idrac 的 snmp 并设置团体名 类似于密码 默认是 public 注意自己设置的

前言



注意标题说的监控dell服务器硬件,指的是监控服务器硬件的状态(磁盘,内存,电源等的状态),不是指监控硬件性能,磁盘的空间,内存等的使用量.而是类似于zabbix监控idrac的snmp获取硬件状态.

现在大部分公司是使用prometheus监控容器和服务,zabbix监控硬件,端口,当然还有其他监控架构.这里就不对比各个监控的优劣了.仅仅是做一篇文档.该文档对基础的内容解释不太详尽,仅适合具备一些prometheus基础的查看.不适合未接触者



前提条件



在这里插入图片描述



在这里插入图片描述



<2>由于安全问题,对网络一般进行了限制.找一台可以ping通各服务器idrac IP地址的服务器,安装snmp监控组件



<3>prometheus服务器需要能联通snmp_exporter




组件安装



安装依赖



yum -y install gcc gcc-g++ make net-snmp net-snmp-utils net-snmp-libs net-snmp-devel golang git 


snmp_exporter安装



<1>下载snmp_exporter

https://github.com/prometheus/snmp_exporter/releases cd /data wget https://github.com/prometheus/snmp_exporter/releases/download/v0.20.0/snmp_exporter-0.20.0.linux-amd64.tar.gz tar xf snmp_exporter-0.20.0.linux-amd64.tar.gz mv snmp_exporter-0.20.0.linux-amd64 snmp_exporter 


<2>配置启动方式

根据系统版本配置启动方式,暂时不需要启动(没有生成snmp)

Centos7 cat /usr/lib/systemd/system/snmp-exporter.service [Unit] Description=SNMP exporter Documentation=https://github.com/prometheus/snmp_exporter [Service] ExecStart=/data/snmp_exporter/snmp_exporter \ --config.file=/data/snmp_exporter/snmp.yml \ --web.listen-address=:9116 \ --snmp.wrap-large-counters ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure [Install] WantedBy=multi-user.target 管理方式: systemctl daemon-reload systemctl enable snmp-exporter systemctl restart snmp-exporter systemctl status snmp-exporter systemctl stop snmp-exporter 
Centos6 cat /etc/init.d/snmp_exporter #!/bin/bash # chkconfig: 2345 80 80 # description: Start and Stop snmp_exporter # Source function library. . /etc/init.d/functions prog_name="snmp_exporter" prog_path="/data/${prog_name}" pidfile="/var/run/${prog_name}.pid" prog_logs="/data/${prog_name}/${prog_name}.log" options="--config.file=/data/snmp_exporter/snmp.yml --web.listen-address=:9116 --snmp.wrap-large-counters" DESC="snmp_exporter" [ -x "${prog_path}" ] || exit 1 RETVAL=0 start(){ 
                             action $"Starting $DESC..." su -s /bin/sh -c "nohup $prog_path $options >> $prog_logs 2>&1 &" 2> /dev/null RETVAL=$? PID=$(pidof ${ 
                            prog_path}) [ ! -z "${PID}" ] && echo ${ 
                            PID} > ${ 
                            pidfile} echo [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog_name return $RETVAL } stop(){ 
                             echo -n $"Shutting down $prog_name: " killproc -p ${ 
                            pidfile} RETVAL=$? echo [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog_name return $RETVAL } restart() { 
                             stop start } case "$1" in start) start ;; stop) stop ;; restart) restart ;; status) status $prog_path RETVAL=$? ;; *) echo $"Usage: $0 {start|stop|restart|status}" RETVAL=1 esac ------------------------------------------------------------ cat /etc/sysconfig/snmp_exporter ARGS="" ------------------------------------------------------------ 管理方式: chmod +x /etc/init.d/snmp_exporter chkconfig snmp_exporter on /etc/init.d/snmp_exporter restart 



mibs下载并生成snmp.yml



MIB与OID





<1>下载适合自己服务器型号的mib,查看兼容的系统

https://www.dell.com/support/search/zh-cn#q=mibs&sort=relevancy&f:langFacet=[zh]

在这里插入图片描述

wget https://dl.dell.com/FOLDER0M/1/Dell-OM-MIBS-940_A00.zip unzip Dell-OM-MIBS-940_A00.zip 


<2>查看OID

snmptranslate -Tz -m /root/support/station/mibs/iDRAC-SMIv2.mib cp /usr/share/snmp/mibs/SNMPv2-SMI.txt /root/support/station/mibs/ 


<3>生成snmp.yml

官方地址: https://github.com/prometheus/snmp_exporter/tree/main/generator#file-format # 配置变量 export GO111MODULE=on export GOPROXY=https://mirrors.aliyun.com/goproxy/ export MIBDIRS=/root/support/station/mibs/ #拉取generator go get github.com/prometheus/snmp_exporter/generator cd ${ 
                                         GOPATH-$HOME/go}/pkg/mod/github.com/prometheus/snmp_exporter@v0.20.0/generator go build #编辑generator.yml (community要设置为你idrac的snmp团体名) vim generator.yml modules: idrac: walk: - 1.3.6.1 version: 2 timeout: 30s auth: community: public #生成监控指标 ./generator generate cp -r snmp.yml /data/snmp_exporter/ 


<4>启动snmp_exporter

systemctl restart snmp-exporter /etc/init.d/snmp_exporter restart 


<5>测试指标抓取是否正常

http://snmp_exporter的IP:9116

在这里插入图片描述

备注: Target填入要抓取的服务器的远程管理卡ip,服务器内部配置的网卡的ip无效 Module:填入该snmp的模块,snmp.yml文件中walk上面 如果你部分的服务器snmp的密码是其他的,建议拷贝一个新的snmp文件,修改文件最末尾的community: xxx 
cat snmp.yml 

在这里插入图片描述

在这里插入图片描述




Prometheus配置





prometheus配置



<1>配置从何处读取报警规则

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'. rule_files: - "rule/*.yml" # - "second_rules.yml" 
创建报警规则的目录,在目录中写入报警规则的文件 mkdir rule vim idrac.yml 


<2>配置job,设置要收集或排除的指标

方式一 static_configs方式 - job_name: 'IDRAC' scrape_interval: 180s #抓取数据的间隔 scrape_timeout: 180s #抓取数据的超时时间 static_configs: - targets: - 123.123.123.123 #要监控的idrac ip,默认snmp端口161 # - 123.123.123.123:161 #如果是其他端口,也可以加端口 # labels: #labels可根据需求添加标签,例如该idrac对应的内部ip,工作机房等 # IP: 'xxx' # project: 'xxx' metrics_path: /snmp params: module: [dell] # relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: xxxxx:9116 #你的snmp_exporter服务器 该模式特点,要监控哪几台就需要在targets添加几台.如果是几百台会导致prometheus.yml文件行数特别多 


方式二 file_sd_configs方式 - job_name: "IDRAC" params: module: - idrac scrape_interval: 180s scrape_timeout: 180s metrics_path: /snmp file_sd_configs: - files: - targets/*.json #读取json文件,目录名称任意,但是得创建 refresh_interval: 5m #该文件载入时间,多长时间载入一次 relabel_configs: - source_labels: [__address__] target_label: __param_target - source_labels: [__param_target] target_label: instance - target_label: __address__ replacement: xxxx:9116 #你的snmp_exporter服务器 该模式特点,需要创建json文件,监控项写入json文件,json格式如下: cat targets/idrac.json [ { 
                                                           "targets": [ "123.123.123.123:161" ], "labels": { 
                                                           "IP": "xxxx", "Project": "xxx" } }, { 
                                                           "targets": [ "123.123.123.124:161" ], "labels": { 
                                                           "IP": "xxx", "Project": "xxx" } } ] or [ { 
                                                           "targets": [ "123.123.123.123:161", "123.123.123.124:161" ], "labels": { 
                                                           "IP": "xxxx", "Project": "xxx" } } ] 


方式三 consul_sd_file方式 该方式是将监控注册到consul服务中,prometheus通过consul实现服务的自动发现 这里就不详细介绍consul,没有使用过consul和配置过prometheus报警的暂时不建议看这个方式,不容易理解 - job_name: 'IDRAC' params: module: - idrac scrape_interval: 180s scrape_timeout: 180s metrics_path: /snmp consul_sd_configs: - server: 'monitor-consul.com:8500' #这个是你consul服务的域名,也可直接填入ip tag_separator: ',' services: [] relabel_configs: - source_labels: [__meta_consul_tags] regex: .*idrac.* #这个是将你consul打的tags中符合该正则的指标归类到该Job action: keep - source_labels: ['__meta_consul_service_metadata_eth-ip'] #这个是你consul打的标签,在prometheus -> Targets -> IDRAC ->Endpoint展示出来 target_label: __param_target - source_labels: ['__meta_consul_service_address'] target_label: instance - target_label: __address__ replacement: xxx:9116 该模式特点,需要将服务注册到consul,有静态和文件两种注册方式: json示例如下,根据需求写自己的(标签随意,但要符合你报警的钉钉群的关键字,符合alertmanger相关配置) cat consul-idrac.json { 
                                                             "ID": "IDRAC-xxx", "Name": "IDARC-xxx", "Tags": [ "idrac" ], "Address": "xxx", #IDRAC IP "Meta": { 
                                                             #consul里的标签,之后标签会重写成prometheus的标签 "eth-ip":"xxx", #服务器业务ip "project":"beijing" #所在地 }, "EnableTagOverride": false, "Check": { 
                                                             "HTTP": "http://xxxx:9116/metrics", #你的snmp服务器IP和端口.健康检查 "Interval": "10s" }, "Weights": { 
                                                             "Passing": 10, "Warning": 1 } } 说明:由于健康检查使用的是snmp_exporter实际上检查的是snmp_exporter,因此哪怕前面的IP等内容是错误的,consul状态也是正常.不过不影响prometheus去监控,服务注册到consul后,它只是从consul获取服务的值和标签,然后prometheus再根据自己的配置去进行监控.对于snmp适合第二种json or cat consul-idrac2.json { 
                                                             "ID": "IDRAC-xxx", "Name": "IDARC-xxx", "Tags": [ "idrac" ], "Address": "xxx:161", "Meta": { 
                                                             #consul里的标签,之后标签会重写成prometheus的标签 "eth-ip":"xxx", #服务器业务ip "project":"beijing" #所在地 } } 注册 curl --request PUT --data @consul-idrac.json http://monitor-consul.com:8500/v1/agent/service/register?replace-existing-checks=1 取消注册 curl -X PUT http://monitor-consul.com:8500/v1/agent/service/deregister/IDRAC-xxx 


效果:

在这里插入图片描述




报警规则配置



注意你的snmp.yml中的指标,但是并不是所有的指标都可使用,可以在prometheus上搜索一下

在这里插入图片描述

在这里插入图片描述



cat rule/idrac.yml groups: - name: IDRAC-物理机硬件运行状态 rules: - alert: IDRAC状态 expr: up{ 
                                                                     job=~"IDRAC.*"} == 0 for: 1m labels: status: error annotations: description: "{ 
                                                                     {$labels.instance}} IDRAC异常" - alert: 机箱组件整体状态 expr: chassisStatus != 3 for: 1m labels: status: error annotations: summary: "机箱组件总体运行状态异常请及时查看!!" description: "{ 
                                                                     {$labels.instance}}机箱组件异常" - alert: 机箱CMOS电池整体状态 expr: systemBatteryStatus != 3 for: 1m labels: status: error annotations: summary: "机箱CMOS电池整体状态异常请及时查看!!" description: "{ 
                                                                     {$labels}}机箱CMOS电池状态异常" - alert: 内存条运行状态 expr: memoryDeviceStatus != 3 for: 1m labels: status: error annotations: summary: "内存条状态异常请及时查看!!" description: "{ 
                                                                     {$labels.instance}} 内存条 { 
                                                                     {$labels.memoryDeviceIndex}}异常" - alert: 处理器CPU总体状态 expr: processorDeviceStatusStatus != 3 for: 1m labels: status: error annotations: summary: "处理器CPU总体状态异常请及时查看!!" description: "{ 
                                                                     {$labels.instance}} 处理器CPU{ 
                                                                     {$labels.processorDeviceStatusIndex}}异常" - alert: 网卡状态 expr: networkDeviceStatus != 3 for: 1m labels: status: error annotations: description: "{ 
                                                                     {$labels.instance}} 网卡{ 
                                                                     {$labels.networkDeviceIndex}}异常" - alert: ps电源总体状态 expr: powerSupplyStatus != 3 for: 1m labels: status: error annotations: summary: "ps电源总体状态异常请及时查看!!" description: "{ 
                                                                     {$labels.instance}} ps电源 { 
                                                                     { $labels.powerSupplyIndex }}状态异常" - alert: 存储控制器总体状态 expr: globalStorageStatus != 3 for: 1m labels: status: error annotations: summary: "存储控制器状态异常请及时查看!!" description: "{ 
                                                                     {$labels.instance}} 存储控制器异常" - alert: 物理系统组件总体状态 expr: globalSystemStatus != 3 for: 1m labels: status: error annotations: summary: "物理系统总体组件运行状态异常请及时查看!!" description: "{ 
                                                                     {$labels.instance}} 物理系统组件异常" - alert: 物理磁盘运行状态 expr: physicalDiskState != 3 for: 1m labels: status: error annotations: summary: "物理磁盘运行状态异常请及时查看!!" description: "{ 
                                                                     {$labels.instance}} 物理磁盘{ 
                                                                     {$labels. physicalDiskNumber}}异常" - alert: 虚拟磁盘运行状态 expr: virtualDiskState != 2 for: 1m labels: status: error annotations: summary: "虚拟磁盘运行状态异常请及时查看!!" description: "{ 
                                                                     {$labels.instance}} 虚拟磁盘{ 
                                                                     {$labels.virtualDiskNumber}}异常" 
重新加载prometheus curl -X POST http://xxxx:9090/-/reload #prometheus的IP 


要想报警 还需要配置 报警插件Alertmanager 和 钉钉插件prometheus-webhook-dingtalk ,并在dingding群添加机器人.这里就不演示报警流程了.



补充



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/215986.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月18日 下午12:50
下一篇 2026年3月18日 下午12:50


相关推荐

  • 邓白氏编码申请条件_苹果邓白氏码申请教程

    邓白氏编码申请条件_苹果邓白氏码申请教程一、填写申请表单申请苹果开发者账号途中,我们会用到邓白氏编码,申请邓白氏编码的入口自然也是在申请苹果开发者账号途中进入。1.登录AppID登录入口:https://developer.apple.com/account/.公司开发者账号一般都是由老板来管理的,所以使用老板的个人AppID登录就好了,没有就让老板申请一个。登录进来后进行以下操作:选择Company/Origani

    2025年5月31日
    4
  • origin相关绘图操作[通俗易懂]

    origin相关绘图操作[通俗易懂]博客的另外地址:http://www.datalearner.com/blog/1051510886845466日常绘图时,会使用都origin,其是一款非常强大的制图工具,以下内容,会记录我使用过的功能,使用方法操作。其强大的功能,我认为就是图层的使用,可以绘制多张图,利用图层管理将多张图进行合并,而且操作随意性好。如下,是我从网络上截取的几张图。origin添加数据origin添加数据非

    2022年5月6日
    83
  • sqlSessionTemplate的优点

    sqlSessionTemplate的优点sqlSessionTemplate的优点 1.sqlSessionTemplate里面有一个sqlSessionProxy,可以使用动态代理 2.正因为动态代理,invoke方法里面会根据是否是事务,获取相同或不同的sqlSession,最后这个sqlSession去执行目标方法和关闭这个sqlSession 这样可以符合spring单例的特点,为不同的事务或conn,创建不同的sqlSession 如果直接在spring中注册一个sqlSession,那么不同连接都获得相

    2022年5月29日
    36
  • 面向反爬对抗的AI增强型爬虫框架:DeepSeek+Crawl4AI落地实践

    面向反爬对抗的AI增强型爬虫框架:DeepSeek+Crawl4AI落地实践

    2026年3月16日
    2
  • Xcode Instruments之概述

    Xcode Instruments之概述XcodeInstrum 简介

    2025年9月22日
    6
  • Jenkins学习一:Jenkins是什么?

    Jenkins学习一:Jenkins是什么?第一章Jenkins是什么?Jenkins是一个可扩展的持续集成引擎。主要用于:l持续、自动地构建/测试软件项目。l监控一些定时执行的任务。Jenkins拥有的特性包括:l易于安装-只要把jenkins.war部署到servlet容器,不需要数据库支持。l易于配置-所有配置都是通过其提供的web界面实现。l集成RSS/E-mail通过RSS发布构建结果…

    2022年6月2日
    55

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号