本文參考文檔:https://www.zabbix.com/documentation/4.0/zh/manual/discovery/auto_registration
官方文檔已經寫的很詳細,很感人了因此這裏不多做解釋只寫我的操作:
環境:ubuntu14
zabbix版本:3.4.0
功能實現:當以前未知的active agent要求檢查時,會發生自動註冊。
在agent配置文件中zabbix_agentd.conf添加or修改以下內容:
ServerActive=service.zabbixbetadns****.com
(我們公司實際是使用的域名,官方文檔給出的是IP,根據自己實際情況修改)
RefreshActiveChecks=15
(這裏我定義的是15s, 可以不定義 不定義默認爲重啓後立即發送請求)
Hostname = 172.25.100.100
(被監控主機IP)
如果你沒有在zabbix_agentd.conf中特別定義了Hostname,則服務器將使用agent的系統主機名命名主機。Linux中的系統主機名可以通過運行'hostname'命令獲得。
HostMetadataItem=system.uname
修改配置後重啓agent使配置生效
在Zabbix頁面,轉到配置→動作,選擇自動註冊爲事件源,然後單擊創建操作:
在“動作“選項卡,定義 Action 名稱
可選指定條件。如果要使用“主機元數據”條件,請參閱下一節。
在“操作”選項卡中,添加“添加主機”,“添加到主機組”(例如,發現的主機),“鏈接到模板”等。
到這裏就可以實現自動註冊
可以試驗一臺機器 刪除後重啓zabbix_agentd 將會自動監控目標主機
至此自動發現功能實現,接下來的問題是實現批量修改被監控主機agentd配置文件
如果公司主機少的話當然可以手動進行修改,服務器如果太多手動就太沒有效率了!
import paramiko
from multiprocessing import Pool
def main(hostname):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
ssh.connect(hostname,22,'用戶名','密碼')
except:
with open("/tmp/error.txt",'a') as f:
f.write("%s is connect error\n" % hostname)
return
ssh.exec_command('grep HostMetadataItem=system.uname /etc/zabbix/zabbix_agentd.conf >> /dev/null || echo "HostMetadataItem=system.uname" >> //etc/zabbix/zabbix_agentd.conf')
ssh.exec_command('sed -i "s/Hostname.*/Hostname=%s/g" /etc/zabbix/zabbix_agentd.conf' % hostname)
ssh.exec_command('sed -i "s/^ServerActive/#ServerActive/" /etc/zabbix/zabbix_agentd.conf')
ssh.exec_command('service zabbix-agent restart')
if __name__ == '__main__':
f = open("host.txt")
for i in f:
hostname = i.strip()
main(hostname)
該腳本會調用本地host.txt文件中的IP使用時將IP寫入host.txt並將文件和腳本放在同一目錄
該腳本可重複執行