Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
byte404
V2EX  ›  Linux

『请教』 关于分布式 zabbix 搭建 自动化执行预设指令的操作

  •  
  •   byte404 ·
    None · Jan 17, 2020 · 4575 views
    This topic created in 2332 days ago, the information mentioned may be changed or developed.

    大家好

    最近要对 zabbix 监控做一些调整,监控的主机大半都是网络设备。目前想要的是让报警的主机执行对应的指令,或脚本。 因为每次下层的交换机出现了问题都要挂上 vpn,然后手动解决问题,设备少还行,设备一多就是一大堆的重复性工作。

    最开始是想用 ansible 实现,但想来了想去又要给 ansible 套壳,也不是个好的办法。。

    当然,同一个网络中很好实现,在服务器 zabbix 脚本目录放置相关脚本,再做一些关联即可。但如果是不同的网络(使用 zabbix-proxy)中某个交换机出现了问题导致 zabbix 报警,要自动执行预设指令要怎么实现呢。

    zabbix 是否能向 proxy 下的主机发送指令呢,如果没有,是否有相关骚操作达到这个功能呢。

    求运维老鸟指教指教,(抱拳

    Supplement 1  ·  Jan 19, 2020

    匆忙之下写的描述可能不是太清楚,这里简单附个草图:

    2020-01-19_21-21.png

    13 replies    2020-01-23 16:05:14 +08:00
    byte404
        2
    byte404  
    OP
       Jan 17, 2020
    @d0m2o08 这个并不适用于下发执行脚本呀,而且我的所有 proxy 都是主动模式。
    byte404
        3
    byte404  
    OP
       Jan 17, 2020
    使用 proxy 的目的是为了让不同网络的设备数据同步到 server... 下层能通 server,而 server 并不知道下层的 proxy ip。。。
    tianshiyeben
        4
    tianshiyeben  
       Jan 17, 2020
    wd
        5
    wd  
       Jan 18, 2020 via iPhone
    你如果只能是被动模式,然后还不能从那个主机访问到被监控机器,那好像没什么办法?
    wd
        6
    wd  
       Jan 18, 2020 via iPhone
    要不然就是让被监控的机器自己修复自己。
    ps1aniuge
        7
    ps1aniuge  
       Jan 18, 2020
    本人编写的批量运维,开源,免费项目 《卡死你 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,就可以继续无穷递归。
    ps1aniuge
        8
    ps1aniuge  
       Jan 18, 2020
    严格来讲《卡死你 3000 》,ansible,都是一层主从架构,都不适合楼主这种需求。
    都可以在被控机上安装,卡死你 3000 主控端,或 ansible 主控端,来实现 2 层架构。

    但 ansible 本质是折腾 yaml,这种 2 层发送 yaml,再返回,ansible 要累死你。

    卡死你 3000 本质是 powershell 脚本,2 层套脚本,就很容易,我还告诉你,你可以从主控机,远程传递强类型变量,如日期对象,到 1 层,再到 2 层。计算。再传回 1 层,再传回主控机,还是对象。卡死你 3000 能强死你!
    d0m2o08
        9
    d0m2o08  
       Jan 19, 2020
    @Aumujun
    proxy 主动模式的话,要不你试试在 proxy 装 jenkins agent ?

    使用 jnlp 通信,这样 master 下发指令给 proxy 上的 agent,agent 可以直接操作 proxy 下面的所有机器了

    你只需要让 zabbix server 通知 jenkins master 触发哪个任务就可以了
    ps1aniuge
        10
    ps1aniuge  
       Jan 19, 2020
    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 其谁谁谁谁谁?
    byte404
        11
    byte404  
    OP
       Jan 19, 2020
    @ps1aniuge 若我有 2 万台的网络设备,岂不是要装 2 万次?你这个和我的需求相差甚远
    byte404
        12
    byte404  
    OP
       Jan 19, 2020
    @d0m2o08 感谢回复,按这描述理论上可行,开年回来试一试。
    ps1aniuge
        13
    ps1aniuge  
       Jan 23, 2020
    @Aumujun ???
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2896 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 06:28 · PVG 14:28 · LAX 23:28 · JFK 02:28
    ♥ Do have faith in what you're doing.