扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
Zabbix-Network-Weathermap 安装
成都创新互联公司是创新、创意、研发型一体的综合型网站建设公司,自成立以来公司不断探索创新,始终坚持为客户提供满意周到的服务,在本地打下了良好的口碑,在过去的十载时间我们累计服务了上千家以及全国政企客户,如卫生间隔断等企业单位,完善的项目管理流程,严格把控项目进度与质量监控加上过硬的技术实力获得客户的一致赞扬。
可以安装在新的主机上,只要能调用 Zabbix API 就可以了。要利用已有的主机,可以和Web装在一起,这样要获取数据就是找本地的Web调用Zabbix API。
和项目里的步骤有一点不一样,调整了一下。先安装好python环境,然后其他依赖都通过pip来安装:
# 安装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的部分可以先不用装,最终可能也不需要装,有agent以外的部署方式。
这里的步骤接着上面的步骤继续。不过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
这步也是为agent做的,如果不用agent的监控项轮询执行脚本,就不需要。
导入模板
把下载的模板文件上传到zabbix:配置 -> 模板 -> 导入。然后选择要导入的文件,用默认的规则上传即可。
agent 主机绑定模板
配置 -> 主机,选择agent主机,到模板分页,选择刚上传的模板 “Template Weathermap” 更新,就完成了绑定。
创建Zabbix用户
执行脚本,通过API请求数据,更新背景图,需要使用某个用户来验证。
Create new user with permissions Zabbix Admin
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的。
项目下有两个可执行的python脚本:
主要功能就是 weathermap.py ,而 starter.py 也是调用 weathermap.py 。差别是通过 starter.py 执行,最后会打印脚本执行的时间。
执行脚本需要带参数,参数的含义可以通过 -h 选项查看。一共也就下面4个命令完成不同的功能:
$ 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
选项 -s 和 -m 后面是可以更多个参数的,对应的就是你有几张拓扑图需要使用 weathermap 。
先在Web上创建一个拓扑图,需要有节点,有连线。
原始拓扑图:
连线的美化
这个要等到全部效果出来了,才能看出效果。可以等到效果出来了,再来根据建议做调整。
连线的类型有4种,建议选择虚线:
连线的颜色也可以设置,试试淡一点的颜色,或者和背景相近的颜色。
先去看一下项目目录 /opt/Zabbix-Network-Weathermap/mapcfgs ,里面一开始是空的,或者是有几个示例文件。
根据拓扑图生成对应的weather使用的yaml配置文件
在weathermap项目中,生成拓扑图的yaml配置文件。
执行下面的命令:
$ weathermap.py -s mapname1 -z http://localhost/zabbix -l Admin -p zabbix
-s mapname1,是对应的zabbix中拓扑图的命令。
-z 填写zabbix的首页的url。
-l, -p,就是账号的用户名和密码。
如果执行成功,就会生成一个对应名字的yaml配置文件。
编辑配置文件
找到配置中的 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"]
部分选项默认是空着的,需要手动填上。最基本的要填3项:
还有其他的配置可以加上或修改,稍后再改。
生成背景图
改好配置文件后,执行下面的脚本获取数据,生成背景图:
$ weathermap.py -m mapname1.yaml -i ~/
命令执行后,会在家目录下生成一张png的背景图:
上传背景图
上面可能是老版本的做法,现在可以直接将背景图传给zabbix直接用。执行如下命令:
$ weathermap.py -m mapname1.yaml -u
加上 -u 选择就是直接上传到zabbix了。
此时可以去web端,在拓扑图的属性里“背景图片”,将生成的背景图应用上:
更新图片元素
根据图片效果,可以发现生成的线条是根据节点的位置生成的。如果拓扑图被编辑过了,比如节点的位置发生变化,或者有添加新的节点,那么yaml文件的配置就需要调整。可以执行如下命令更新拓扑图上的设置:
$ weathermap.py -s mapname1 -f
小结
至此,4个脚本都已经用过了,效果也清除了。
如果使用agent方式来定时执行脚本,部署完成后,去检查一下监控项的状态。
配置 -> 主机 -> 选择主机的监控项 -> 查看“Weathermap”应用集的监控项,主要查看后面的状态和信息。
如果宏的值设置有问题,信息里记录的一般是python抛出的异常。此时,应该登录到服务器手动方式执行脚本进行检查和排错。
如果脚本运行参数没有问题,很可能会有执行超时的问题:
项目中的说明如下:
Zabbix API performance is low. Zabbix agent run weathermap.py. Weathermap.py can be terminated by timeout, set in zabbix_agentd.conf.
Decision:
- Increase the timeout for example: zabbix_agentd.conf set Timeout=10
- One item to one map in Template Weathermap
- Use cron to run the scripts
zabbix的agent会有超时的限制,默认是3秒钟。正常执行一次脚本,如果一张拓扑图的话,可能刚好够。如果一次要好几张拓扑图的话,就很可能会超时了。可以在命令行上使用 starter.py 来运行脚本查看运行时间。不过通过agent触发的执行可能效率会更差,耗时会再多一点。
解决方式如下:
使用agent,轮询的时候实际调用的是starter.py
不只是字体大小(fontsize),还有背景色(bgcolor)。这两个是map下的参数。
在执行 -s 选项的命令后,yaml配置文件里的设置会被默认值覆盖掉。字体大小默认是10,背景色默认为空。
所以就算设置好了这2项,生成了复合要求的背景图。但是在下次执行 -s 选项的命令,比如更新图片元素后,配置文件里的设置又会被改回默认值。在之后生成的图片又会变回默认的效果。
这个问题可以通过修改源码来解决,添加下面这段:
项目最近的一次修改是: 12 Oct 2018。有问题可能只能自己来解决了。
全局设置
配置文件的开头的部分:
%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
这里有两个旧版本使用的参数label和icon。画图的时候可以把节点也画上去。
之前生成的背景图是没有节点信息的,节点信息是作为拓扑图的元素直接显示出来,不需要画在背景上。
在使用 -i 参数生成图片的时候,加上这些设置就能把节点也画上去了。这个是就版本的实现方法,那时候可能无法应用拓扑的背景图来实现。
要让拓扑上的数据实时刷新,就要自动刷新拓扑图。配置在首页的仪表盘上
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流