草庐IT

如何用Zabbix监控温湿度?Zabbix对接modbus tcp设备实操

Zabbix_China 2023-06-15 原文

背景:

1、公司机房没有专用的温度监控设备,以往是通过snmp功能get服务器的CPU或是主板温度,根据偏差值算出机房的大致温度(温度计值与服务器的差值),可最近研发部门经常在服务器跑高负载任务,导致计算出的环境温度极度不准

2、网上虽然有成套的温度报警产品,但从以下方面讲不符合公司要求:

2-1:现有产品多是通过邮箱或是手机语音/手机短信、微信报警,而我司需要对接到内部平台统一报警

2-2:网上的设备大多在200~400元价格,支持云功能的还要续平台费(每年要提采购、报销审批,内部流程很麻烦)

实现过程:

1、首先是购买硬件设备,网关+温度传感器大概需要200~220元左右,如下图所示:

· 左侧图片为modbus tcp网关,实现485或是modbus rtu协议转modbus tcp协议

· 右侧图片为温湿度探头,支持modbus rtu协议,通过485连接网关、然后转为tcp协议


2、系统及软件方面:

· 在linux系统安装5.2版本以上的Zabbix-Server (5.2开始支持modbus协议)

· zabbix-agent2 (当前仅zabbix-agent2版支持modbus,后期可能会增加zabbix-agent的支持)

3、在这里理顺一下逻辑,否则各位在配置时可能会出现错误或是疑问:

· 虽然Zabbix-Server可以直接对被监控主机做一些例如ping、snmp、service.perf、port.perf等的监控,但是modbus数据的获取是通过zabbix-agent2实现的,也就是说agent2获取到被控主机的modbus数据,再将结果回传到Zabbix-Server。如果modbus设备自身、或是所在网络有防火墙策略的话,需要放行agent2主机访问(Zabbix的server和agent可以安装到同一个linux系统上)

4、部署Zabbix-Server,因为官网有十分详尽的教程、在此不做描述,这里要提一句:官网命令中安装的数据库并不完整,需要自行手动安装下mariadb

· 官网链接:官网安装教程

5、安装zabbix-agent2,这里着重说明一下:modbus需要zabbix-agent2的支持,而我们通过命令yum install zabbix-agent默认安装的是v1版,Zabbix-Server自带的也是v1版agent

· 首先停用或是卸载旧版agent(如果存在的话),拿centos7来说,可以执行systemctl stop zabbix-agent; yum autoremove zabbix-agent进行停用后的卸载

· 因为zabbix-agent2部分使用go语言编写,所以它依赖go环境,这里我们通过一键安装脚本部署(基于Centos安装,如果是debian的话需要提前安装sudo):

引用链接:一键安装go环境

git clone https://gitee.com/xuthus5/golang-install-shell.git (如果报错需要安装git)
cd golang-install-shell
chmod +x install.sh
./install.sh
· 出现以下安装界面后,选择0 安装golang环境,然后按默认参数安装即可:


  1. 安装golang环境
  2. 安装gopm跨墙
  3. 安装web框架
  4. 安装包
  5. 退出

输入操作编号:0

选择安装版本:

  1. 1.11
  2. 1.10.4
  3. 1.9.7
  4. 1.8.7

输入安装版本编号(默认1):

 
输入程序安装目录GOROOT(默认 /usr/local):
输入GOPATH目录(默认 /root/go):
·  安装完成后,选择4 退出

go version go1.11 linux/amd64
环境变量配置成功!请执行 source /root/.bashrc 确保配置生效
----------------------------------
0) 安装golang环境
1) 安装gopm跨墙
2) 安装web框架
3) 安装包
4) 退出
----------------------------------
输入操作编号:4
基于ARM-Linux的Modbus串口服务器设计    ← 下载

· 安装zabbix-agent2:

# 添加官网源
rpm -Uvh https://repo.zabbix.com/zabbix/5.4/rhel/7/x86_64/zabbix-release-5.4-1.el7.noarch.rpm


# 清除yum缓存
yum clean all 


# 安装agent2,安装完后程序会自动运行、并自动配置开机自启动功能
yum install zabbix-agent2


· 安装成功后编辑配置文件:

# 编辑配置文件
vi /etc/zabbix/zabbix_agent2.conf
# 根据实际环境修改以下项目
Hostname=
Server=
ServerActive=


# 配置完成后重启agent2
systemctl restart zabbix-agent2
· 在Zabbix-Server服务器添加安装了zabbix-agent2的主机,并添加modbus监控项


![在这里插入图片描述](https://img-blog.csdnimg.cn/7792cc4728334ae6948e06398e1d2882.png#pic_center)






· 这里引用官网对modbus监控项的详细介绍及访问链接:官网介绍

![在这里插入图片描述](https://img-blog.csdnimg.cn/b335cd085c5d4d9a8bfa065d18f7bc77.png#pic_center)

· 这是根据实际环境修改后的参照表:

![在这里插入图片描述](https://img-blog.csdnimg.cn/0e708242e13840b2b45d64e07bcf0799.png#pic_center)



· 我所用到的温度传感器给出的温度值是实际值的10倍,所以在zabbix进程中要除以10(也就是乘以0.1)


![在这里插入图片描述](https://img-blog.csdnimg.cn/d35860e75c2c48e28f969b732b651007.png#pic_center)




· 设置完监控项后,agent端要等1分钟左右才能使用新的监控项,如果着急的话可以手动执行systemctl restart zabbix-agent2,让agent2强制重启并立即获取新的监控项:

这是获取到的温度值:


![在这里插入图片描述](https://img-blog.csdnimg.cn/a52ad8aba0674550b9b7f6d40eda7adb.png#pic_center)





· 在调试过程中如果遇到modbus网关没响应、zabbix报网关错误等,可以下载调试工具、将本机作为网关服务器,然后让zabbix-agent2访问本机,根据接收信息里面的数据分析是哪里出现的错误:

工具下载地址:调试助手



![在这里插入图片描述](https://img-blog.csdnimg.cn/bc9f20c282d249a89d2c4fab55713dab.png#pic_center)

有关如何用Zabbix监控温湿度?Zabbix对接modbus tcp设备实操的更多相关文章

  1. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  2. Observability:从零开始创建 Java 微服务并监控它 (二) - 2

    这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/

  3. ruby-on-rails - 禁用设备的 :confirmable on-the-fly to batch-generate users - 2

    Devise是一个Ruby库,它为我提供了这个User类:classUser当写入:confirmable时,注册时会发送一封确认邮件。上周我不得不批量创建300个用户,所以我在恢复之前注释掉了:confirmable几分钟。现在我正在为用户批量创建创建一个UI,因此我需要即时添加/删除:confirmable。(我也可以直接修改Devise的源码,但我宁愿不去调和它)问题:如何即时添加/删除:confirmable? 最佳答案 WayneConrad的解决方案:user=User.newuser.skip_confirmation

  4. ruby-on-rails - 如何用不同的用户运行nginx主进程 - 2

    A/ctohttp://wiki.nginx.org/CoreModule#usermaster进程曾经以root用户运行,是否可以以不同的用户运行nginxmaster进程? 最佳答案 只需以非root身份运行init脚本(即/etc/init.d/nginxstart),就可以用不同的用户运行nginxmaster进程。如果这真的是你想要做的,你将需要确保日志和pid目录(通常是/var/log/nginx&/var/run/nginx.pid)对该用户是可写的,并且您所有的listen调用都是针对大于1024的端口(因为绑定(

  5. ruby - 如何用递增的值填充数组 Ruby - 2

    我正在尝试解决http://projecteuler.net/problem=1.我想创建一个方法,它接受一个整数,然后创建一个包含它前面的所有整数的数组,并将整数本身作为数组中的值。以下是我目前所拥有的。代码不起作用。defmake_array(num)numbers=Array.newnumcount=1numbers.eachdo|number|numbers 最佳答案 (1..num).to_a是您在Ruby中需要做的全部。1..num将创建一个Range对象,以1开始并以任意值num结束是。Range对象有to_a方法通过

  6. ruby - 如何用 Nokogiri 解析连续的标签? - 2

    我有这样的HTML代码:Label1Value1Label2Value2...我的代码不起作用。doc.css("first").eachdo|item|label=item.css("dt")value=item.css("dd")end显示所有首先标记,然后标记标签,我需要“标签:值” 最佳答案 首先,您的HTML应该有和中的元素:Label1Value1Label2Value2...但这不会改变您解析它的方式。你想找到s并遍历它们,然后在每个你可以使用next_element得到;像这样:doc=Nokogiri::HTML(

  7. ruby-on-rails - 如何用 has_many 保存数据 :through - 2

    我在游戏和帐户模型之间存在多对多关系,如下所示:classAccount:destroyhas_many:games,:through=>:account_gamesendclassGame:destroyhas_many:accounts,:through=>:account_gamesendclassAccountGame现在我知道让我们说我想创建一个类似这样的记录:@account=Account.new(params[:user])@account.games但是我应该如何在执行此操作时更新AccountGame中的某些属性?假设AccountGame有一些名为score的字段

  8. ruby - 如何用 YARD 记录一个不返回任何内容的方法 - 2

    我有这样的方法defself.import(file_name,opts={})我正在尝试用YARD记录下来。然而,这是一种100%副作用的方法(我知道,我知道,副作用,呃!)。但是对于此方法的用户,实际上没有任何类型的返回对象,但是YARD生成如下签名:+(Object)import(file_name,opts={})有什么办法可以告诉yardimport方法什么都不返回吗?我可以告诉它返回nil,但这不是一回事 最佳答案 所有方法都会返回一些东西,void关键字可能就是您要查找的内容。#@return[void]defmeth

  9. ruby-on-rails - 监控多个 Rails 应用程序 - 2

    是否可以在我的服务器上运行任何工具来监控多个Rails应用程序?我需要监控每个应用程序收到的请求数、每个应用程序使用了多少内存、使用了多少CPU以及其他类似的统计信息。我需要查看每个单独的Rails应用程序的统计信息。 最佳答案 我建议你试试NewRelicRPM.免费版:RPMLiteisthemostwidelyusedsolutionforbasicwebapplicationmonitoring.RPMLiteprovidesapplicationmonitoringforunlimitedJava,RubyorJRubya

  10. ruby - 如何用 ruby​​ 1.9.2 编译 vim - 2

    我尝试重新编译支持ruby​​的vim,因为我注意到vim仍在使用1.8.7(这是SnowLeopard上的默认ruby​​版本)。Ruby1.9.2通过rvm安装。编译时./configure--enable-rubyinterp--enable-gui=no--disable-nls--enable-cscope--prefix=/Users/madhatter我从make中得到以下错误:ld:librarynotfoundfor-lruby.1.9.1collect2:ldreturned1exitstatusmake[1]:***[vim]Error1make:***[firs

随机推荐