14

Zabbix-Network-Weathermap 插件-来玩魔王的咚!

 4 years ago
source link: https://blog.51cto.com/steed/2472677
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Zabbix-Network-Weathermap 插件

项目描述:

Network weathermap for Zabbix like Network Weathermap

最早Cacti上有一个Network Weathermap项目,不是为Zabbix做的,不过似乎也能搬到Zabbix上用。不过现在方便了,有Zabbix的版本。部署到zabbix4.4版本也没问题。
项目地址:https://github.com/Prototype-X/Zabbix-Network-Weathermap

Features

  • Get source data from Zabbix
  • Generate YAML config from Zabbix map
  • Create image with map in PNG format
  • Upload image to Zabbix
  • Support for map elements with the type: host, map, image

可以用于首页的大屏展示。
从拓扑图中获取节点信息,然后向Zabbix请求获取端口的流量的信息。可以是任何信息,只要填写对应的key即可,不过展示效果主要是展示流量使用情况的。
生成图片,主要是带颜色的线,表示该线路的流量使用率。线上有最近一次的采集值,标识当前的流量。
把该图片作为拓扑图的背景图,项目脚本会负责定时获取新数据,生成新的背景图,实现拓扑图上数据的刷新。其实是不停的生成新背景图然后替换之前的。
把拓扑图放在首页的仪表板上,就能实时刷新数据,做效果展示。

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 端的安装

这里的步骤接着上面的步骤继续。不过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 也是调用 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上创建一个拓扑图,需要有节点,有连线。
原始拓扑图:

Zabbix-Network-Weathermap 插件

连线的美化
这个要等到全部效果出来了,才能看出效果。可以等到效果出来了,再来根据建议做调整。
连线的类型有4种,建议选择虚线:

连线的颜色也可以设置,试试淡一点的颜色,或者和背景相近的颜色。

Weathermap 调试

先去看一下项目目录 /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项:

  • hostname: 需要采集数据的“主机名称”。如果有定义了“可见的名称”,则填后者。
  • itemin: 填写监控项的 key,就是请求获取数据。
  • itemout: 同上。

还有其他的配置可以加上或修改,稍后再改。

生成背景图
改好配置文件后,执行下面的脚本获取数据,生成背景图:

$ weathermap.py -m mapname1.yaml -i ~/

命令执行后,会在家目录下生成一张png的背景图:

Zabbix-Network-Weathermap 插件

上传背景图
上面可能是老版本的做法,现在可以直接将背景图传给zabbix直接用。执行如下命令:

$ weathermap.py -m mapname1.yaml -u

加上 -u 选择就是直接上传到zabbix了。
此时可以去web端,在拓扑图的属性里“背景图片”,将生成的背景图应用上:

Zabbix-Network-Weathermap 插件

更新图片元素
根据图片效果,可以发现生成的线条是根据节点的位置生成的。如果拓扑图被编辑过了,比如节点的位置发生变化,或者有添加新的节点,那么yaml文件的配置就需要调整。可以执行如下命令更新拓扑图上的设置:

$ weathermap.py -s mapname1 -f

小结
至此,4个脚本都已经用过了,效果也清除了。

  • 生成配置文件,只需要在创建新拓扑图,需要修改yaml配置文件前手动执行一次即可
  • 生成背景图,需要自动执行,并且要刷新数据。执行的频率会比较高,比如1分钟1次
  • 上传背景图,这个用不到。完全不需要
  • 更新图片元素,这个需要在更新图片后执行一次。也需要设为自动,但是频率不用很高,比如1小时1次

检查agent监控项的状态

如果使用agent方式来定时执行脚本,部署完成后,去检查一下监控项的状态。
配置 -> 主机 -> 选择主机的监控项 -> 查看“Weathermap”应用集的监控项,主要查看后面的状态和信息。
如果宏的值设置有问题,信息里记录的一般是python抛出的异常。此时,应该登录到服务器手动方式执行脚本进行检查和排错。
如果脚本运行参数没有问题,很可能会有执行超时的问题:

Zabbix-Network-Weathermap 插件

agent 执行超时问题

项目中的说明如下:

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的超时时间调大一点,比如10秒
  • 一次只操作一张拓扑图,多张拓扑图的话,就要设置多个监控项
  • 改用crontab来定时执行脚本

使用agent,轮询的时候实际调用的是starter.py

不只是字体大小(fontsize),还有背景色(bgcolor)。这两个是map下的参数。
在执行 -s 选项的命令后,yaml配置文件里的设置会被默认值覆盖掉。字体大小默认是10,背景色默认为空。
所以就算设置好了这2项,生成了复合要求的背景图。但是在下次执行 -s 选项的命令,比如更新图片元素后,配置文件里的设置又会被改回默认值。在之后生成的图片又会变回默认的效果。

这个问题可以通过修改源码来解决,添加下面这段:

Zabbix-Network-Weathermap 插件

项目最近的一次修改是: 12 Oct 2018。有问题可能只能自己来解决了。

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

这里有两个旧版本使用的参数label和icon。画图的时候可以把节点也画上去。
之前生成的背景图是没有节点信息的,节点信息是作为拓扑图的元素直接显示出来,不需要画在背景上。
在使用 -i 参数生成图片的时候,加上这些设置就能把节点也画上去了。这个是就版本的实现方法,那时候可能无法应用拓扑的背景图来实现。

仪表盘效果

要让拓扑上的数据实时刷新,就要自动刷新拓扑图。配置在首页的仪表盘上

Zabbix-Network-Weathermap 插件

Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK