Zabbix-Network-Weathermap 插件
2021-06-04 10:01
标签:可见 python let increase ups 轮询 开启 format features Network weathermap for Zabbix like Network Weathermap 最早Cacti上有一个Network Weathermap项目,不是为Zabbix做的,不过似乎也能搬到Zabbix上用。不过现在方便了,有Zabbix的版本。部署到zabbix4.4版本也没问题。 Features 可以用于首页的大屏展示。 可以安装在新的主机上,只要能调用 Zabbix API 就可以了。要利用已有的主机,可以和Web装在一起,这样要获取数据就是找本地的Web调用Zabbix API。 和项目里的步骤有一点不一样,调整了一下。先安装好python环境,然后其他依赖都通过pip来安装: 安装到此告一段落,后面agent的部分可以先不用装,最终可能也不需要装,有agent以外的部署方式。 这里的步骤接着上面的步骤继续。不过agent不是必须的,这里接下去的步骤可以先不做。 这步也是为agent做的,如果不用agent的监控项轮询执行脚本,就不需要。 导入模板 agent 主机绑定模板 创建Zabbix用户 Create new user with permissions Zabbix Admin 实验直接用了管理员账号,具体要多大的权限未仔细验证。 设置模板的宏 那么就在宏的值里填上后面参数的部分。 至此,安装初步完成。 项目下有两个可执行的python脚本: 主要功能就是 weathermap.py ,而 starter.py 也是调用 weathermap.py 。差别是通过 starter.py 执行,最后会打印脚本执行的时间。 执行脚本需要带参数,参数的含义可以通过 -h 选项查看。一共也就下面4个命令完成不同的功能: 选项 -s 和 -m 后面是可以更多个参数的,对应的就是你有几张拓扑图需要使用 weathermap 。 先在Web上创建一个拓扑图,需要有节点,有连线。 连线的美化 连线的颜色也可以设置,试试淡一点的颜色,或者和背景相近的颜色。 先去看一下项目目录 /opt/Zabbix-Network-Weathermap/mapcfgs ,里面一开始是空的,或者是有几个示例文件。 根据拓扑图生成对应的weather使用的yaml配置文件 -s mapname1,是对应的zabbix中拓扑图的命令。 如果执行成功,就会生成一个对应名字的yaml配置文件。 编辑配置文件 部分选项默认是空着的,需要手动填上。最基本的要填3项: 还有其他的配置可以加上或修改,稍后再改。 生成背景图 命令执行后,会在家目录下生成一张png的背景图: 上传背景图 加上 -u 选择就是直接上传到zabbix了。 更新图片元素 小结 如果使用agent方式来定时执行脚本,部署完成后,去检查一下监控项的状态。 项目中的说明如下: Zabbix API performance is low. Zabbix agent run weathermap.py. Weathermap.py can be terminated by timeout, set in zabbix_agentd.conf. zabbix的agent会有超时的限制,默认是3秒钟。正常执行一次脚本,如果一张拓扑图的话,可能刚好够。如果一次要好几张拓扑图的话,就很可能会超时了。可以在命令行上使用 starter.py 来运行脚本查看运行时间。不过通过agent触发的执行可能效率会更差,耗时会再多一点。 使用agent,轮询的时候实际调用的是starter.py 不只是字体大小(fontsize),还有背景色(bgcolor)。这两个是map下的参数。 这个问题可以通过修改源码来解决,添加下面这段: 项目最近的一次修改是: 12 Oct 2018。有问题可能只能自己来解决了。 全局设置 节点和线的设置 这里有两个旧版本使用的参数label和icon。画图的时候可以把节点也画上去。 要让拓扑上的数据实时刷新,就要自动刷新拓扑图。配置在首页的仪表盘上 Zabbix-Network-Weathermap 插件 标签:可见 python let increase ups 轮询 开启 format features 原文地址:https://blog.51cto.com/steed/2472677
项目地址:https://github.com/Prototype-X/Zabbix-Network-Weathermap主要功能
从拓扑图中获取节点信息,然后向Zabbix请求获取端口的流量的信息。可以是任何信息,只要填写对应的key即可,不过展示效果主要是展示流量使用情况的。
生成图片,主要是带颜色的线,表示该线路的流量使用率。线上有最近一次的采集值,标识当前的流量。
把该图片作为拓扑图的背景图,项目脚本会负责定时获取新数据,生成新的背景图,实现拓扑图上数据的刷新。其实是不停的生成新背景图然后替换之前的。
把拓扑图放在首页的仪表板上,就能实时刷新数据,做效果展示。 Zabbix-Network-Weathermap 安装
安装步骤
# 安装python3环境
$ yum install python3
# 更新 pip
$ easy_install-3.6 -i https://mirrors.aliyun.com/pypi/simple -U pip
$ pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
# 通过 pip 安装其他依赖组件
$ pip install Pillow
$ pip install py-zabbix
$ pip install ruamel.yaml==0.14.12
# 下载项目到本地,也可以用 git 克隆项目到本地
$ wget --output-document=Zabbix-Network-Weathermap.zip https://github.com/Prototype-X/Zabbix-Network-Weathermap/archive/master.zip
# 解压,用git的话就不用解压了
$ yum install unnzip
$ unzip Zabbix-Network-Weathermap.zip -d /opt
# 文件夹改名和授权
$ mv /opt/Zabbix-Network-Weathermap{-master,}
$ chown -R zabbix:zabbix /opt/Zabbix-Network-Weathermap
$ chmod a+x /opt/Zabbix-Network-Weathermap/starter.py
$ chmod a+x /opt/Zabbix-Network-Weathermap/weathermap.py
agent 端的安装
可以用crontab替代agent,而且可能效果更好。目的就是一个,定时调用项目的python脚本向zabbix请求数据,绘制图片,然后再更新拓扑图使用的背景图。
crontab就能定时执行脚本。agent的监控项也可以设定轮询时间执行脚本。
如果要用agent定时执行脚本就接着做:# 将项目里的 agent 配置文件复制到 agent 配置目录
$ cp /opt/Zabbix-Network-Weathermap/template/userparameter_weathermap.conf /etc/zabbix/zabbix_agentd.d/
# 需要重启 agent 才能加载新的配置生效
$ systemctl restart zabbix-agent
# 把模板配置文件下载到自己用的电脑上,之后要通过web上传这个模板
$ yum install lrzsz
$ sz /opt/Zabbix-Network-Weathermap/template/weathermap.xml
浏览器上的设置
把下载的模板文件上传到zabbix:配置 -> 模板 -> 导入。然后选择要导入的文件,用默认的规则上传即可。
配置 -> 主机,选择agent主机,到模板分页,选择刚上传的模板 “Template Weathermap” 更新,就完成了绑定。
执行脚本,通过API请求数据,更新背景图,需要使用某个用户来验证。
User must have read-only or read-write access to hosts and hosts groups present in map
配置 -> 模板 -> Template Weathermap -> 宏:
这里预设了4个宏,宏的值需要修改一下。宏的值就是执行脚本的命令行参数。
比如实际要执行的脚本是:$ ./opt/Zabbix-Network-Weathermap/starter.py -s mapname1 mapname2 -z http://localhost/zabbix/ -l Admin -p zabbix
具体要怎么填,每个宏都是什么用处,后面手动调试再讲。
这里把 Template Weathermap 的4个监控项先禁用,等手动调试过了,再来完成设置,然后启用。 完成安装
接下来是使用和调试。调试的过程可以在服务器通过命令行手动执行脚本。所以是不需要agent的。 调试
$ weathermap.py -s mapname1 mapnameN -z http://localhost/zabbix -l Admin -p zabbix
$ weathermap.py -s mapname1 mapnameN -f
$ weathermap.py -m mapname1.yaml mapnameN.yaml -i /var/www/weather
$ weathermap.py -m mapname1.yaml -u
创建拓扑图
原始拓扑图:
这个要等到全部效果出来了,才能看出效果。可以等到效果出来了,再来根据建议做调整。
连线的类型有4种,建议选择虚线:
Weathermap 调试
在weathermap项目中,生成拓扑图的yaml配置文件。
执行下面的命令:$ weathermap.py -s mapname1 -z http://localhost/zabbix -l Admin -p zabbix
-z 填写zabbix的首页的url。
-l, -p,就是账号的用户名和密码。
找到配置中的 link- 的那些配置项link-10:
node1: node-12
node2: node-15
name1: web
name2: Router_symbol_(96)
hostname: web
itemin: net.if.in["eth0"]
itemout: net.if.out["eth0"]
改好配置文件后,执行下面的脚本获取数据,生成背景图:$ weathermap.py -m mapname1.yaml -i ~/
上面可能是老版本的做法,现在可以直接将背景图传给zabbix直接用。执行如下命令:$ weathermap.py -m mapname1.yaml -u
此时可以去web端,在拓扑图的属性里“背景图片”,将生成的背景图应用上:
根据图片效果,可以发现生成的线条是根据节点的位置生成的。如果拓扑图被编辑过了,比如节点的位置发生变化,或者有添加新的节点,那么yaml文件的配置就需要调整。可以执行如下命令更新拓扑图上的设置:$ weathermap.py -s mapname1 -f
至此,4个脚本都已经用过了,效果也清除了。
检查agent监控项的状态
配置 -> 主机 -> 选择主机的监控项 -> 查看“Weathermap”应用集的监控项,主要查看后面的状态和信息。
如果宏的值设置有问题,信息里记录的一般是python抛出的异常。此时,应该登录到服务器手动方式执行脚本进行检查和排错。
如果脚本运行参数没有问题,很可能会有执行超时的问题:agent 执行超时问题
Decision:
解决方式如下:
字体太小
在执行 -s 选项的命令后,yaml配置文件里的设置会被默认值覆盖掉。字体大小默认是10,背景色默认为空。
所以就算设置好了这2项,生成了复合要求的背景图。但是在下次执行 -s 选项的命令,比如更新图片元素后,配置文件里的设置又会被改回默认值。在之后生成的图片又会变回默认的效果。 源码修改
yaml配置参数
配置文件的开头的部分:%YAML 1.2
---
map:
name: mapname1
bgcolor: ‘‘ # 设置背景色, 默认为空
fontsize: 10 # 设置字体大小,默认10太小了点
width: 1200
height: 800
zabbix:
url: http://zabbix.example.com
login: admin
password: admin
table: # 生成一个图例,显示时间以及箭头颜色含义
show: true # 默认是false,可以改为true开启
x: 1100
y: 100
palette: # 每个颜色表示一段使用率,默认的色彩就很不错
- ‘#908C8C‘
- ‘#FFFFFF‘
- ‘#8000FF‘
- ‘#0000FF‘
- ‘#00EAEA‘
- ‘#00FF00‘
- ‘#FFFF00‘
- ‘#FF9933‘
- ‘#FF0000‘
link: # 默认的线条设置,每条link还能单独配置
bandwidth: 100 # 线路的带宽,影响显示的颜色,单位 Mbits/s
width: 10 # 线的粗细,默认值也可以。或许可以根据带宽设置不同的粗细
node-11:
name: Router
#label: R1 # 旧版本使用,如果设置了,可以把标签画出来
#icon: Router64.png # 旧版本使用,如果设置了,可以把节点图标画出来
x: 125
y: 75
#copy: true # 如果设置,即使拓扑里没这个元素,也会画出来
node-15:
name: Router_symbol_(96)
x: 375
y: 324
link-9:
node1: node-11
node2: node-15
name1: Router # zabix上的可见名称
name2: Router_symbol_(96)
#bandwidth: 10 # 可以覆盖默认的link里的设置
#width: 5
#copy: true # 如果设置,即使拓扑里没这个元素,也会画出来
hostname: Router # 设置监控项采集的节点
itemin: net.if.in["eth0"] # 设置监控项的key
itemout: net.if.out["eth0"] # 设置监控项的key
之前生成的背景图是没有节点信息的,节点信息是作为拓扑图的元素直接显示出来,不需要画在背景上。
在使用 -i 参数生成图片的时候,加上这些设置就能把节点也画上去了。这个是就版本的实现方法,那时候可能无法应用拓扑的背景图来实现。 仪表盘效果
文章标题:Zabbix-Network-Weathermap 插件
文章链接:http://soscw.com/index.php/essay/90341.html