十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
Zabbix-Network-Weathermap 安装
创新互联建站主营大通网站建设的网络公司,主营网站建设方案,成都APP应用开发,大通h5小程序定制开发搭建,大通网站营销推广欢迎大通等地区企业咨询可以安装在新的主机上,只要能调用 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 参数生成图片的时候,加上这些设置就能把节点也画上去了。这个是就版本的实现方法,那时候可能无法应用拓扑的背景图来实现。
要让拓扑上的数据实时刷新,就要自动刷新拓扑图。配置在首页的仪表盘上
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。