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 参数生成图片的时候,加上这些设置就能把节点也画上去了。这个是就版本的实现方法,那时候可能无法应用拓扑的背景图来实现。
要让拓扑上的数据实时刷新,就要自动刷新拓扑图。配置在首页的仪表盘上
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。