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

 

1、Zabbix-3.0.3批量添加主機的配置以下:php

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

可批量修改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)建立自動發現規則。"配置"->"自動發現"->"建立自動發現"java

以下「檢查」的配置爲:選擇「Zabbix agent」檢測類型、端口10050、Key填寫「system.uname」  (ip範圍能夠多種方式填寫,好比:172.29.8.21-27,172.29.33.21-29,172.29.34.34)node

2)建立Action動做(事件源是「自動發現」)mysql

上面「操做」裏的「默認接收人」和「默認信息」都是默認的配置,不用修改,只須要添加下面的操做便可web

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

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

[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

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

------------------------------------批量添加主機到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

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

2、Zabbix-3.0.3自動發現端口的配置以下:bash

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界面裏添加監控配置,配置和上面如出一轍!這樣就能按照咱們本身定製的端口進行自動發現了!
相關文章
相關標籤/搜索