分布式監控系統Zabbix--完整安裝記錄-批量添加主機和自動發現端口


 

一、Zabbix-3.0.3批量添加主機的配置如下:

0)被監控機上要安裝zabbix_agent,並配置好zabbix_agentd.conf (如下172.29.8.50是zabbix_server機器的ip地址)

可批量修改zabbix_agentd.conf,如下:
sed -i 's/Server=127.0.0.1/Server=172.29.8.50/g' /etc/zabbix/zabbix_agentd.conf
sed -i 's/ServerActive=127.0.0.1/ServerActive=172.29.8.50/g' /etc/zabbix/zabbix_agentd.conf
grep "Server" /etc/zabbix/zabbix_agentd.conf | grep -v '^#'
service zabbix-agent restart

1)創建自動發現規則。"配置"->"自動發現"->"創建自動發現"

如下“檢查”的配置為:選擇“Zabbix agent”檢測類型、端口10050、Key填寫“system.uname”  (ip范圍可以多種方式填寫,比如:172.29.8.21-27,172.29.33.21-29,172.29.34.34)

2)創建Action動作(事件源是“自動發現”)

上面“操作”里的“默認接收人”和“默認信息”都是默認的配置,不用修改,只需要添加下面的操作即可

3)等一會兒,就會發現已批量添加了上面配置的網段的機器

上面采用"自動發現"批量添加主機后,顯示的名稱是主機的ip地址。即添加的客戶端主機的Host name是以IP地址命名的,不夠人性化。
要想實現自定義主機名,方法是:
在zabbix_server主機的/etc/hosts里面做好客戶端的主機名和IP映射

[root@IDC-Admin-02 ~]# cat /etc/hosts
......
LX-DB-8_21-172.29.8.21    172.29.8.21
LX-DB-8_21-172.29.8.23    172.29.8.23
LX-DB-8_21-172.29.8.24    172.29.8.24
LX-DB-8_21-172.29.8.25    172.29.8.25
LX-DB-8_21-172.29.8.26    172.29.8.26
LX-DB-8_21-172.29.8.27    172.29.8.27

如上配置后,刪除首次"自動發現"批量創建的主機,再次創建后,批量創建的主機的顯示名稱就是其主機名了。

------------------------------------批量添加主機到zabbix監控中---------------------------------
將新上線的172.29.32.0/24網段的服務器添加到zabbix監控中,zabbix_agent一鍵安裝腳本為:https://pan.baidu.com/s/1o8wpFpo     提取密碼:7qsi

操作步驟記錄(下面是在zabbix server端操作的):
[root@zabbix ~]# nmap -sn 172.29.32.0/24

Starting Nmap 5.51 ( http://nmap.org ) at 2017-09-05 09:29 CST
Nmap scan report for 172.29.32.1
Host is up (0.0020s latency).
Nmap scan report for 172.29.32.2
Host is up (0.00071s latency).
Nmap scan report for 172.29.32.3
Host is up (0.00092s latency).
Nmap scan report for usercenter01.WANG.cn (172.29.32.21)
Host is up (0.00064s latency).
Nmap scan report for usercenter02.WANG.cn (172.29.32.22)
Host is up (0.00042s latency).
Nmap scan report for passport01.WANG.cn (172.29.32.23)
Host is up (0.00061s latency).
Nmap scan report for passport02.WANG.cn (172.29.32.24)
Host is up (0.00068s latency).
..........

[root@zabbix ~]# nmap -sn 172.29.32.0/24|grep 172.29.32|awk '{print $6}'|cut -d"(" -f2|cut -d ")" -f1



172.29.32.21
172.29.32.22
172.29.32.23
172.29.32.24
172.29.32.25
172.29.32.26
172.29.32.27
172.29.32.28

172.29.32.30
172.29.32.31
172.29.32.32
172.29.32.33
172.29.32.34
........

將ip讀取到一個列表文件中/mnt/a.txt
[root@zabbix ~]# nmap -sn 172.29.32.0/24|grep 172.29.32|awk '{print $6}'|cut -d"(" -f2|cut -d ")" -f1 > /mnt/a.txt 
[root@zabbix ~]# cat /mnt/a.txt
--------------------------------------------------------------------------------------------------------------------
或者這里也可以使用造數命令:
[root@localhost ~]# for i in `seq 21 64`;do echo 172.29.32.$i >> /mnt/a.txt;done 
[root@localhost ~]# cat /mnt/a.txt  
--------------------------------------------------------------------------------------------------------------------

參考http://www.cnblogs.com/kevingrace/p/5900303.html,配置到這些被監控主機的信任關系

安裝expect步驟這里省略~
[root@zabbix ~]# cd /mnt/
[root@zabbix mnt]# ls
a.txt  noscp.exp sshkey.exp  sshkey.sh

這些被監控主機的ssh端口都是22222,密碼都是默認的WANG-@@@-12345(如果端口和密碼是其他的,就按照實際情況進行腳本修改)
[root@zabbix mnt]# cat noscp.exp
#!/usr/bin/expect

#noscp.exp

if {$argc<4} {
puts stderr "Usage: $argv0 localfile remotefile user passwd "
exit 1
}

set localfile [ lindex $argv 0 ]
set remotefile [ lindex $argv 1 ]
set user [ lindex $argv 2 ]
set pwd [ lindex $argv 3 ]

set timeout 30

spawn scp -P 22222 ${localfile} ${user}@${remotefile}

expect {
"*yes/no" { send "yes\r"; exp_continue }
"*password:" { send "$pwd\r" }
}

expect eof

[root@zabbix mnt]# cat sshkey.exp
#!/usr/bin/expect

#sshkey.exp

if {$argc<3} {
puts stderr "Usage: $argv0 host user passwd "
exit 1
}

set host [ lindex $argv 0 ]
set user [ lindex $argv 1 ]
set pwd [ lindex $argv 2 ]

set timeout 30

#spawn ssh ${user}@${host} "rm -rf ~/.ssh/id_rsa*"
#
#expect {
# "*yes/no" { send "yes\r"; exp_continue }
# "*password:" { send "$pwd\r"; exp_continue }
#}

spawn ssh -p22222 ${user}@${host} "ssh-keygen -t rsa"

expect {
"*yes/no" { send "yes\r"; exp_continue }
"*password:" { send "$pwd\r"; exp_continue }
"Enter file in which to save the key*" { send "\n\r"; exp_continue }
"Overwrite*" { send "y\n"; exp_continue } 
"Enter passphrase (empty for no passphrase):" { send "\n\r"; exp_continue }
"Enter same passphrase again:" { send "\n\r" }
}

spawn ssh -p22222 ${user}@${host} "cat ~/.ssh/id_rsa.pub"

expect {
"*yes/no" { send "yes\r"; exp_continue }
"*password:" { send "$pwd\r" }
}

expect eof

[root@zabbix mnt]# cat sshkey.sh 
#!/bin/bash
for ip in `cat /mnt/a.txt`
do
/mnt/sshkey.exp $ip root WANG-@@@-12345 |grep ssh-rsa >> ~/.ssh/authorized_keys
/mnt/noscp.exp ~/.ssh/authorized_keys $ip:~/.ssh root WANG-@@@-12345
done

接着直接運行腳本進行信任關系設置:
[root@zabbix mnt]# sh -x sshkey.sh 

執行完之后,驗證下ssh無密碼信任關系是否都成功設置了:
[root@zabbix mnt]# for i in `cat /mnt/a.txt`;do echo $i;ssh -p22222 $i "hostname";done

然后批量進行被監控主機的zabbix_agent安裝及設置(使用zabbix_agent一鍵腳本)。
線上的話,我是把一鍵安裝腳本放到內網下載地址里的
[root@zabbix mnt]# for i in `cat /mnt/a.txt`;do echo $i;ssh -p22222 $i "wget http://yum.wang-inc.com/software/zabbix_agentd_install.sh && sh -x zabbix_agentd_install.sh";done
[root@zabbix mnt]# for i in `cat /mnt/a.txt`;do echo $i;ssh -p22222 $i "lsof -i:10050";done

接着就可以在zabbix的web界面里批量添加主機了(自動發現)。為了自動發現后能識別出主機名,先提前在zabbix server端做host。
[root@zabbix mnt]# for i in `cat /mnt/a.txt`;do echo $i >> /opt/ip.list;done
[root@zabbix mnt]# for i in `cat /mnt/a.txt`;do ssh -p22222 $i "hostname" >> /opt/hostname.list;done
[root@zabbix mnt]# paste /opt/ip.list /opt/hostname.list >> /etc/hosts

最后就安裝上面"自動發現"實現批量添加主機.......

二、Zabbix-3.0.3自動發現端口的配置如下:

1)編寫自動發現端口的腳本discovertcpport.sh。配置如下:

[root@IDC-Admin-02 ~]# cd /data/zabbix/monitor_scripts/
[root@IDC-Admin-02 monitor_scripts]# cat discovertcpport.sh 
#!/bin/bash
portarray=(`sudo netstat -tnlp|egrep -i "$1"|awk {'print $4'}|awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}'|sort|uniq`)
length=${#portarray[@]}
printf "{\n"
printf  '\t'"\"data\":["
for ((i=0;i<$length;i++))
  do
     printf '\n\t\t{'
     printf "\"{#TCP_PORT}\":\"${portarray[$i]}\"}"
     if [ $i -lt $[$length-1] ];then
                printf ','
     fi
  done
printf  "\n\t]\n"
printf "}\n"

腳本說明:
使用netstat命令輸出端口號;-tnlp=Tcp協議+不顯示別名+listen狀態+顯示程序名稱;$1~$9表示輸出的第幾個參數;
awk {'print $4'}表示輸出第4個參數(如0.0.0.0:80);awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}
表示截取冒號后面的值,且只能是0~9的數字;|sort|uniq表示排序和去重。

[root@IDC-Admin-02 monitor_scripts]# chmod 755 discovertcpport.sh
[root@IDC-Admin-02 monitor_scripts]# cd /data/zabbix/etc/zabbix_agentd.conf.d/ 
[root@IDC-Admin-02 zabbix_agentd.conf.d]# cat discovertcp.conf 
UserParameter=tcpportlisten,/bin/bash /data/zabbix/monitor_scripts/discovertcpport.sh "$1"

[root@IDC-Admin-02 zabbix_agentd.conf.d]# /etc/init.d/zabbix_agentd restart

==========在端口自動發現腳本中,也可以自定義發現哪些應用端口,如下===========

[root@IDC-Admin-02 monitor_scripts]# cat discovertcpport.sh
#!/bin/bash
portarray=(`sudo netstat -tnlp|egrep -i "tns|java|php|httpd|xen|mysqld"|awk {'print $4'}|awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}'|sort|uniq`)
length=${#portarray[@]}
printf "{\n"
printf  '\t'"\"data\":["
for ((i=0;i<$length;i++))
  do
     printf '\n\t\t{'
     printf "\"{#TCP_PORT}\":\"${portarray[$i]}\"}"
     if [ $i -lt $[$length-1] ];then
                printf ','
     fi
  done
printf  "\n\t]\n"
printf "}\n"

===============================================================

2)服務端測試,如下測試的返回結果是正常的

[root@zabbix_server ~]# /data/zabbix/bin/zabbix_get -s 172.29.16.22 -p10050 -k "tcpportlisten"     //其中的172.20.16.22是被監控機的ip
{
   "data":[
      {"{#TCP_PORT}":"10050"},
      {"{#TCP_PORT}":"22222"},
      {"{#TCP_PORT}":"3306"},
      {"{#TCP_PORT}":"443"},
      {"{#TCP_PORT}":"80"}
   ]
}

3)在zabbix監控界面中創建端口自動發現規則

 

注意下面的“鍵值”要和被監控主機里的監控腳本定義的一致!

接着創建Item監控項原型

接着創建觸發器原型:

注意上面“添加”里面的選擇項如下

最后就是創建圖像原型

查看自動發現的端口監控情況

到此,自動發現端口的監控設置已經完成。下面說下可能遇到的問題:
添加完自動發現規則之后,發現在對應主機的監控圖里沒有顯示端口的監控項,然后發現自動發現規則的后面有問題提示:Value should be a JSON object
這個錯誤的解決辦法如下:
解決辦法是 vim /etc/sudoers
zabbix ALL=(ALL) NOPASSWD: ALL
#Defaults requiretty                                                                //如果有這個配置項,那么就注釋掉這個。如果沒有,就忽略

-----------------------------------------------------------------------------------------------------------------------------

順便說下開啟zabbix監控界面里報警聲音的功能

--------------------------------------------------------------------------定制化自動發現端口-----------------------------------------------------------------
上面在自動發現端口的時候,都是默認發現被監控機上所有開啟的端口。如果我們要對端口進行過濾發現,即只發現我們想要的端口,配置如下:

如下,只發現mysql、java、php-fpm、httpd、redis、mongo、oracle、node、zookeeper這些程序端口

[test@ ~]$ cat /data/zabbix/monitor_scripts/discovertcpport.sh
#!/bin/bash
portarray=(`sudo netstat -tnlp|egrep -i "mysql|java|php-fpm|httpd|redis|mongo|oracle|node|zookeeper"|awk {'print $4'}|awk -F':' '{if ($NF~/^[0-9]*$/) print $NF}'|sort|uniq`)
length=${#portarray[@]}
printf "{\n"
printf  '\t'"\"data\":["
for ((i=0;i<$length;i++))
  do
     printf '\n\t\t{'
     printf "\"{#TCP_PORT}\":\"${portarray[$i]}\"}"
     if [ $i -lt $[$length-1] ];then
                printf ','
     fi
  done
printf  "\n\t]\n"
printf "}\n"


[test@ ~]$ cat /data/zabbix/etc/zabbix_agentd.conf.d/discovertcp.conf 
UserParameter=tcpportlisten[*],/data/zabbix/monitor_scripts/discovertcpport.sh "$1"


在zabbix server端進行檢查(192.168.1.30是被監控機)。
如下說明該被監控機在定制的自動發現端口中只有3829和3830端口在其中
[root@zabbix ~]# /data/zabbix/bin/zabbix_get -s 192.168.1.30 -p10050 -k "tcpportlisten"
{
        "data":[
                {"{#TCP_PORT}":"3829"},
                {"{#TCP_PORT}":"3830"}
        ]
}

然后在zabbix 的web界面里添加監控配置,配置和上面一模一樣!這樣就能按照我們自己定制的端口進行自動發現了!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM