【zabbix】自動註冊,實現自動發現agent並添加監控(agent不須要任何配置)

更新:linux

後來在實際使用中發現,與其使用zabbix自動註冊,不如直接調用zabbix的api主動發起添加服務器的請求,這樣就不須要在zabbixserver上配置host信息了。實現全自動。具體調用方式見shell

https://www.zabbix.com/documentation/3.2/manual/api/reference/host/createvim

 

前言:windows

  zabbix監控在小規模的時候,可使用手動一臺臺添加服務器,到了大規模之後,就不合適了,這時候須要使用zabbix的自動發現或者自動註冊,自動發現能夠自動發現一個網段內的agent機器,而咱們公司使用的aws,全部服務器都不在一個網段內,故這裏採用自動註冊,自動註冊是由agent主動想server發起註冊請求。api

  自動註冊的一個難點在於agent的配置文件修改,雲服務器一般是經過使用模板克隆出來的,若是須要手動去服務器上修改agent的hostname,那麼自動註冊就沒有意義了。這裏咱們採用ansible,根據agent主動註冊上來的消息特徵,將特定的agent配置文件發送給agent使用,實現無需鏈接agent就能夠實現修改agent配置文件。bash

實現思路:服務器

windows服務器使用zabbixagent模板配置文件(設置hostname=new)——添加自動註冊事件,發現有叫作hostname=new的客戶端連接——調用ansible,根據對應策略,將正確的agent配置文件發送給agent,並重啓zabbix_agentd——zabbixagent從新上報註冊事件——zabbix發現新的名字的agent註冊——根據名字添加模板,添加監控。ssh

環境準備:測試

  1,zabbixserver+ansiblespa

  2,windows支持ansible,windows7和windows server 2008r2,須要升級到sp1才能安裝powershell3.0,powershell版本在powershell中經過get-host查看。

  3,修改zabbixserver的hosts文件,添加ip與主機名的對應(緣由爲,zabbix默認使用DNS做爲監控對象名,若是沒有就使用ip地址)

 

ansible說明:

  server端必須是linux服務器,搭建在zabbixserver上正好。

  雖然ansible不須要angent,可是在windows上,ansible是經過powershell實現的控制,故對windows操做系統有必定的要求,以下:

  • 安裝Framework 3.0+
  • 更改powershell策略爲remotesigned
  • 升級PowerShell至3.0+
  • 設置Windows遠端管理,英文全稱WS-Management(WinRM)

  (1)安裝Framework 3.0+

  下載連接爲:http://download.microsoft.com/download/B/A/4/BA4A7E71-2906-4B2D-A0E1-80CF16844F5F/dotNetFx45_Full_x86_x64.exe。 下載至本地後雙擊左鍵安裝便可,期間可能會屢次重啓,電腦需正常鏈接Internet。

  (2)更改powershell策略爲remotesigned

    set-executionpolicy remotesigned

(3)升級powershel3.0

  用powershell運行附件腳本。upgrade_to_ps3.ps1,這個腳本是ansible官方提供的。

(4)設置遠端管理

  用powershell運行附件腳本,ConfigureRemotingForAnsible.ps1,這個腳本也是ansible官方提供。

設置完成之後,看看ansible能不能正常和windows通信

添加服務器:

 (5) 開啓防火牆

 若是服務器防火牆是開啓的,須要手動添加針對winrm的訪問,開放5985(http)和5986(https)端口,也能夠根據實際狀況選擇開啓其中一個。(記得選擇容許全部來源ip訪問,默認是隻容許本地訪問這兩個端口)

vim /etc/ansible/hosts

[windows]
192.168.53.133 ansible_ssh_user="Administrator" ansible_ssh_pass="123456" ansible_ssh_port=5985 ansible_connection="winrm" ansible_winrm_server_cert_validation=ignore

添加完成以後,用ansible測試一下

ansible服務端須要安裝pywinrm模塊

ansible windows -m win_ping

圖是偷來的,我本身的虛擬機已經關了,湊合看吧。看到這個表示ansible準備好了。

 

zabbixserver端配置

1,建立一個自動註冊的動做,叫作自動修改客戶端配置文件

2,設置觸發條件如圖(這裏說明,這裏全部雲主機模板裏的agent配置文件中,hostname=new,就是說,雲服務器建立之後,自動有一個zabbixagent啓動,而且hostname=new)

3,建立動做,動做是在zabbixserver上執行一個腳本,這個腳本用來更改自動註冊上來的agent修改配置文件,這個根據自動註冊上報的ip匹配這個服務器應該叫什麼名字,這個腳本要執行成功,必須加sudo,而且在sudoers文件裏給zabbix添加免密sudo設置。要否則命令執行成功,可是不生效。

4,這個self-find腳本的內容以下:

 1 #!/bin/bash  2 js_path="/usr/local/zabbix/ansible"
 3 #設置腳本目錄  4 clientip=$1
 5 #獲取第一個參數,也就是自動註冊client的ip地址  6 clientname=`cat $js_path/ip-name.txt|grep $clientip|awk '{print $2}'`  7 #根據client的ip地址,去ip-name.txt這個文件裏查找對應的名字  8 sed -i "s/Hostname=new/Hostname=$clientname/g" $js_path/zabbix_agentd.win.conf  9 #生成這個client專用的配置文件 10 /usr/bin/ansible windows -m win_file -a "path=C:\\zabbix\\zabbix_agentd.win.conf state=absent"
11 #刪除client上現有的配置文件 12 /usr/bin/ansible windows -m win_copy -a "src=$js_path/zabbix_agentd.win.conf dest=C:\\zabbix\\zabbix_agentd.win.conf"
13 #將新的配置文件複製到client 14 /usr/bin/ansible windows -m win_service -a "name='Zabbix Agent' state=restarted"
15 #重啓client的zabbix_agentd服務 16 sed -i "s/Hostname=$clientname/Hostname=new/g" $js_path/zabbix_agentd.win.conf 17 #將修改過的配置文件再修改回去,方便下次使用

ip-name.txt這個文件內容以下

192.168.58.133 windows_test

5,這個動做建立之後,zabbix每2分鐘檢測一次自動註冊,若是發現有agent用new這個hostname上報到zabbixserver,zabbixserve就執行這個腳本,把新的配置文件發給agent並重啓agent,

 

 6,接着建立第二個自動註冊動做,用於將使用新配置文件的agent自動添加監控

7,設置觸發條件爲主機名windows_test,這個主機名是ip-name哪裏來的,根據實際狀況填寫。

8,添加操做以下

9,到此,已經能夠實現自動發現windows服務器了。

 

 

 

 

原創做品,轉載請說明出處,謝謝

相關文章
相關標籤/搜索