分布式监控系统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界面里添加监控配置,配置和上面一模一样!这样就能按照我们自己定制的端口进行自动发现了!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小狼的世界

在Centos 5.2下编译安装LAMP

首先使用Virtualbox安装一台CentOS 5.2的虚拟机,网络连接采用 Host-only Adapter,这样主客机之间可以互相访问,但是客机不能够上...

1042
来自专栏云计算教程系列

Django入门:搭建你第一个应用

Django是用Python编写的免费开源Web框架,用了MVC的框架模式,即模型M,视图V和控制器C。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内...

1672
来自专栏散尽浮华

完整部署CentOS7.2+OpenStack+kvm 云平台环境(1)--基础环境搭建

公司在IDC机房有两台很高配置的服务器,计划在上面部署openstack云平台虚拟化环境,用于承载后期开发测试和其他的一些对内业务。 以下对openstack的...

2.6K11
来自专栏菩提树下的杨过

vmware安装cent os 6.5 + oracle 11g xe + jboss eap 6.2 + weblogic 12c+ webshpere mq 7.5

mac系统发展速度确实很快,短短数年,mac os上已经能网银支付(中行、招行、工商、支付宝等均已全面支持mac os了),windows上的经典常用软件:qq...

1312
来自专栏pangguoming

kafka 主要内容介绍

根据官网的介绍,ApacheKafka®是一个分布式流媒体平台,它主要有3种功能:

1345
来自专栏乐沙弥的世界

Linux 文件目录特殊权限设定(SUID,SGID,SBIT)

Linux文件及目录的权限设定,除了我们孰知的读写执行(rwx)之外,还有一些特殊的权限设定用来满足特定的目录。这些特殊权限的设定主要是SUID,SGID以及S...

1192
来自专栏颇忒脱的技术博客

Spring Cloud Config配置文件最佳实践

大多数Spring Cloud项目都会使用Spring Cloud Config来管理应用启动时的配置文件,同时开发人员面临着多样化的程序启动方式:操作系统进程...

4032
来自专栏博客园迁移

dubbo见解

  服务容器负责启动,加载,运行服务提供者。   服务提供者在启动时,向注册中心注册自己提供的服务。   服务消费者在启动时,向注册中心订阅自己所需的服务。  ...

1622
来自专栏zhisheng

SpringBoot Kafka 整合使用

前提 假设你了解过 SpringBoot 和 Kafka。 1、SpringBoot 如果对 SpringBoot 不了解的话,建议去看看 DD 大佬 和 纯洁...

88416
来自专栏java达人

EasyUI 创建 CRUD 应用

数据收集并妥善管理数据是网络应用共同的必要。CRUD 允许我们生成页面列表,并编辑数据库记录。本教程将向你演示如何使用 jQuery EasyUI 框架实现一个...

2447

扫码关注云+社区

领取腾讯云代金券