1. 程式人生 > >Zabbix遠程執行命令

Zabbix遠程執行命令

歷史 需要 sys opera epo 部分 編輯 執行權 連接

原文發表於cu2016-06-14

Zabbix觸發器(trigger)達到閥值後會有動作(action)執行:發送告警信息或執行遠程命令。

本文主要配置驗證zabbix執行遠程命令。

一.環境

Server:基於CentOS-7-x86_64-1511

Zabbixzabbix-3.0.1server/agent

二.註意事項

一些能想到的比較重要的註意事項:

  1. 遠程執行命令是server端向agent端執行,不支持主動模式的agent
  2. 不支持代理模式;
  3. zabbix用戶必須對命令具有執行權限,可以使用sudo賦予root權限(配置sudo
    無密碼方式)
  4. 遠程命令只是執行,執行成功與否並不檢測並確認,可在" MonitoringàEvents"中查看action執行時,或在"ReportsàAction log"中查看遠程命令是否執行成功(成功為" Executed")
    1. 示例

通過一個簡單的示例驗證:

監控服務器實時在線的用戶不超過2個,超過閥值時報警,並執行命令,強制使第3個登錄用戶下線,以使監控項在閥值以下。

  1. 設置Trigger

ConfigurationàTemplatesà選擇" Template OS Linux"模板的"Triggers"àCreate trigger

Name:User login number gt 2 on {HOST.NAME}

#trigger name自定義,可使用宏

Expression:{Template OS Linux:system.users.num.last()}>2

#可以點擊"Expression"項後的"Add",使用zabbix自帶的Item + Function設置閥值的表達式,如下:

技術分享

Severity:Warning

#自定義的級別

其余默認值即可,設置完成後如下,點擊"Add"即完成:

技術分享

  1. 遠程命令開關

agent默認不支持執行遠程命令,需要在agent的配置文件中打開此參數。

[[email protected] ~]# sed -i ‘s|# EnableRemoteCommands=0|EnableRemoteCommands=1|g‘ /usr/local/zabbix/etc/zabbix_agentd.conf

[[email protected] ~]# service zabbix_agentd restart

#agent.conf文件路徑根據實際情況修改,這裏是編譯安裝後自定義的路徑,請見http://blog.chinaunix.net/uid-26168435-id-5728816.html

#agent.conf文件修改後需要重啟進程

  1. 設置Action

Configurationà Actionsà Create action

Action

在Action選項中,

定義Name:Limit the number of online users no more than 2

#action name自定義即可,action選項的其余部分可采用默認值,如下:

技術分享

Conditions

在Conditions選項中添加新的條件判斷,以使判斷更有針對性,如

New condition:Trigger severity = Warning

New condition:Trigger name like User login number gt 2

#trigger name對應步驟1中定義的trigger name,如下:

技術分享

Operations

在Operations選項中,添加新的"Action operation",點擊"New",

Operation type:選擇"Remote Command"

Target list:添加target為"Current host"

#agent在本機

Type:選擇"Custom script"

Execute on:選擇"Zabbix agent",命令為" sudo /root/test.sh"

#執行命令的賬號是zabbix賬號,非root賬號,不采用sudo命令會導致命令執行後不生效,

#另外需要說明是,我在這裏嘗試過使用具體的命令而非腳本,結果是命令執行了但不生效,因為沒有具體的失敗日誌,也分析不出原因

#其余部分采用默認值,點擊"Add"即可,如下:

技術分享

  1. 遠程命令腳本

根據步驟3中定義的命令腳本的路徑,編輯命令腳本。

[[email protected] ~]# vim test.sh

#!/bin/bash

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin

export PATH

pkill -kill -t pts/2

[[email protected] ~]# chmod 764 test.sh

#這裏簡單的認為第3個登錄的tty為pts/2

  1. 配置sudo

[[email protected] ~]# visudo

zabbix ALL=NOPASSWD: ALL

#授予zabbix賬號sudo無密碼執行命令的權限,如果為了安全性,可將最後一個"ALL"定義為具體的命令

#或在步驟4中將腳本owner修改為zabbix,並具有執行權限,但要註意腳本放置目錄對zabbix賬戶開放可執行權限甚至可寫權限,這樣步驟3中腳本也不需要sudo賦予權限

  1. 驗證

遠程登錄主機3個tty,不在CLI下做其他任何操作,觸發trigger閥值,觸發命令動作強制第3個登錄用戶下線。

技術分享

從截圖可以看到,在線用戶超過閥值,trigger為"PROBLEM"狀態只持續了1分鐘左右,即恢復到"OK"狀態,表明強制第3個用戶下線的腳本命令已執行,並且執行成功。

技術分享

從" Number of logged in users" Item的歷史數據中也可看到trigger觸發時,第3個登錄用戶即被下線。

技術分享

在登錄的第3個tty下,可看到連接由主機自行中斷(顯示本地時間,與上圖的主機時間有偏差)。

Zabbix遠程執行命令