大家好
最近要对 zabbix 监控做一些调整,监控的主机大半都是网络设备。目前想要的是让报警的主机执行对应的指令,或脚本。 因为每次下层的交换机出现了问题都要挂上 vpn,然后手动解决问题,设备少还行,设备一多就是一大堆的重复性工作。
最开始是想用 ansible 实现,但想来了想去又要给 ansible 套壳,也不是个好的办法。。
当然,同一个网络中很好实现,在服务器 zabbix 脚本目录放置相关脚本,再做一些关联即可。但如果是不同的网络(使用 zabbix-proxy)中某个交换机出现了问题导致 zabbix 报警,要自动执行预设指令要怎么实现呢。
zabbix 是否能向 proxy 下的主机发送指令呢,如果没有,是否有相关骚操作达到这个功能呢。
求运维老鸟指教指教,(抱拳
匆忙之下写的描述可能不是太清楚,这里简单附个草图:
1
d0m2o08 2020-01-17 16:37:36 +08:00
|
3
Aumujun OP 使用 proxy 的目的是为了让不同网络的设备数据同步到 server... 下层能通 server,而 server 并不知道下层的 proxy ip。。。
|
4
tianshiyeben 2020-01-17 18:01:35 +08:00
|
5
wd 2020-01-18 06:48:58 +08:00 via iPhone
你如果只能是被动模式,然后还不能从那个主机访问到被监控机器,那好像没什么办法?
|
6
wd 2020-01-18 06:49:31 +08:00 via iPhone
要不然就是让被监控的机器自己修复自己。
|
7
ps1aniuge 2020-01-18 22:53:34 +08:00
本人编写的批量运维,开源,免费项目 《卡死你 3000 》就是类似的东西。
https://gitee.com/chuanjiao10/kasini3000/ 1 这是世界上最强的脚本引擎,没有之一。ansible,zabbix 也不行。 2 楼主的需求说的不清不楚,建议楼主画图。 3.1 目前我理解是: 1 从主控机,到被控机( proxy,或叫网关,或叫堡垒机)。运行 vpn 拨号程序。 2 通过网关,下发命令。 主控机----》被控机----》 vpn 内网子机。 3.2 严格来讲《卡死你 3000 》,ansible,zabbix,都是一层主从架构,都不适合楼主这种需求。 3.3 《卡死你 3000 》本身是 powershell 脚本,只有它才能胜任你的需求。这基于 powershell 的超牛 x 特性。 简单来说,powershell 下发命令,基于大花括号{},而不是单双引号。由于大花括号内,可以无限套大花,这让 powershell,可以穿透 n 层系统,发送命令。 3.4 伪代码如下: cdip.ps1 192.168.1.1 krun.ps1 -powershell 代码块 { 拨号 vpn; ssh ip "子命令" ;vpn 断线 } #krun.ps1 -powershell 代码块 { 拨号 vpn; new-pssession xxx ; invoke-command -scriptblock { #2 级子命令 ; new-pssession xxx ; invoke-command -scriptblock { #3 级子命令 } } ;vpn 断线 } 可以看到,一旦用了 ssh,就相当于打断了继续递归子命令。而一旦被控子机安装了 powershell,就可以继续无穷递归。 |
8
ps1aniuge 2020-01-18 23:01:38 +08:00
严格来讲《卡死你 3000 》,ansible,都是一层主从架构,都不适合楼主这种需求。
都可以在被控机上安装,卡死你 3000 主控端,或 ansible 主控端,来实现 2 层架构。 但 ansible 本质是折腾 yaml,这种 2 层发送 yaml,再返回,ansible 要累死你。 卡死你 3000 本质是 powershell 脚本,2 层套脚本,就很容易,我还告诉你,你可以从主控机,远程传递强类型变量,如日期对象,到 1 层,再到 2 层。计算。再传回 1 层,再传回主控机,还是对象。卡死你 3000 能强死你! |
9
d0m2o08 2020-01-19 08:16:06 +08:00
@Aumujun
proxy 主动模式的话,要不你试试在 proxy 装 jenkins agent ? 使用 jnlp 通信,这样 master 下发指令给 proxy 上的 agent,agent 可以直接操作 proxy 下面的所有机器了 你只需要让 zabbix server 通知 jenkins master 触发哪个任务就可以了 |
10
ps1aniuge 2020-01-19 16:12:47 +08:00
1 主控机(可以位于 win,linux ),调用本地 ssh 客户端,连接被控机 ip 上的 sshd。
2linux 上的 sshd (或 win ),fork 出一个进程,这个 sshd 进程调用(被控机 linux 本地上的) powershell。实现 proxy 的功能,或网关的功能。 3 linux 网关上的这个 powershell,调用本地 ssh 客户端,连接子网 ip 上的 sshd。如此递归。 上述功能,除了 powershell,能靠一套 java-agent,或 py-agent 实现么? java 脚本行么? ansible 的 yaml 剧本套剧本行么? 能打通同一种脚本运行么?还是需要用脚本 a 从主控机传递到被控机,再用另一种语言的脚本 b,往下传递? 能传递变量么?能传递强类型变量么? 舍 powershell 其谁谁谁谁谁? |