Zabbix-proxy的用途和构建图
Zabbix-server是建立在金山云的,现在需要监控阿里云的redis,但是阿里云跟金山云之间通信是无法走内网的,如果直接让zabbix-server与redis直接联系,一旦公网的信息被截获的话,整个金山区的zabbix可能都会遭殃,那么既然有这种“远程监控+当监控的位置通信不便”的需求,就搭建一个zabbix-proxy来解决问题。
Zabbix-proxy是一个监控代理服务器,它收集监控到的数据,先存放在缓冲区,保存的时间可以通过配置文件设定,然后再传送到zabbix-server,这样也大大减缓了zabbix-server的压力,注意!监控代理需要一个单独的数据库,因为它的数据库表名与zabbix-server的数据库表名是一样的,如果不单独分开,后果就是数据错乱。
有人看到这里可能问了,说来说去你的zabbix-proxy跟阿里的redis依旧是走公网的啊!虽然这样也是走公网,我现在只需要配置一个防火墙规则来让他俩保证通信即可,通过防火墙来提升安全系数。架构如图:
安装Mysql 5.5
Zabbix-proxy机器情况:金山云centos 6.5,安装zabbix版本:3.0.8
1
2
3
4
5
6
7
8
9
10
11
|
[root@js-online-cjhmq-002 opt]yum list installed |
grep
mysql
#列出已经安装过的mysql情况
[root@js-online-cjhmq-002 opt]yum -y remove mysql-libs.x86_64
#把之前的mysql连根拔起
[root@js-online-cjhmq-002 opt]
# rpm -ivh http://repo.mysql.com/yum/mysql-5.5-community/el/6/x86_64/mysql-community-release-el6-5.noarch.rpm
Retrieving http:
//repo
.mysql.com
/yum/mysql-5
.5-community
/el/6/x86_64/mysql-community-release-el6-5
.noarch.rpm
Preparing...
########################################### [100%]
1:mysql-community-release
########################################### [100%]
[root@js-online-cjhmq-002 opt]groupadd zabbix
#新建用户组zabbix
[root@js-online-cjhmq-002 opt]
useradd
-g zabbix -u 808 -m zabbix
#-g:指定用户所属的群组;
#-u:指定用户id。
#-m:自动建立用户的登入目录;
|
现在要修改一下 /etc/yum.repos.d/mysql-community.repo 这个文件,将5.5的enabled改为1,5.6的enabled改为0:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
# Enable to use MySQL 5.5
[mysql55-community]
name=MySQL 5.5 Community Server
baseurl=http:
//repo
.mysql.com
/yum/mysql-5
.5-community
/el/6/
$basearch/
enabled=1
#这里改成1
gpgcheck=1
gpgkey=
file
:
/etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
# Enable to use MySQL 5.6
[mysql56-community]
name=MySQL 5.6 Community Server
baseurl=http:
//repo
.mysql.com
/yum/mysql-5
.6-community
/el/6/
$basearch/
enabled=0
#这里改成0
gpgcheck=1
gpgkey=
file
:
/etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
|
然后执行#yum install mysql-community-client mysql-community-devel mysql-community-server php-mysql , 安装服务端和客户端,安装完毕之后可以#mysql -h127.0.0.1 看一下。
安装完毕之后,修改一下/etc/my.cnf,如图:
1
2
|
innodb_buffer_pool_size = 512M
#这个根据服务器性能填写,这个机器是2核2G的,所以我拿出半个G给mysql
innodb_file_per_table=1
#这个是新增的字段,设置InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据目录
|
mysql安装完毕之后,我们还要导表进去,如图:
1
2
3
4
5
6
|
service mysqld start
mysqladmin -uroot password
'123456'
mysql -uroot -p123456 -e
'create database zabbix_proxy character set utf8;'
mysql -uroot -p123456 -e
"grant all privileges on zabbix_proxy.* to zabbix@localhost identified by 'zabbix';"
mysql -uroot -p123456 -e
"flush privileges;"
mysql -uzabbix -pzabbix zabbix_proxy 解压路径
/zabbix-3
.0.8
/database/mysql/schema
.sql
|
至此,mysql部分已经全部搞定。
安装Zabbix-proxy
先去https://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/3.0.8/ 下载zabbix-3.0.8.tar.gz,上传到proxy服务器里。
1
2
|
tar
-zxvf zabbix-3.0.8.
tar
.gz
.
/configure
--prefix=
/usr/local/zabbix-3
.0.8 --sysconfdir=
/etc/zabbix
--
enable
-proxy --
enable
-agent --
enable
-ipv6 --with-mysql=
/usr/bin/mysql_config
--with-net-snmp --with-libcurl --with-openipmi --with-unixodbc --with-ldap --with-ssh2 --
enable
-java
|
如果出现了“configure: error: Invalid LDAP directory - unable to find ldap.h”,如图:
解决方法就是:
1
|
yum -y
install
openldap*
|
Zabbix-proxy的配置
打开/etc/zabbix/zabbix_proxy.conf,需要修改几个地方:
1
2
3
4
5
6
7
8
9
10
11
12
|
ProxyMode=0
#0是主动模式,1是被动模式
Server=A.B.C.D
#这里填写zabbix-server的内网IP
Hostname=J.Q.K.A
#这里要与/etc/hosts下的名字一模一样
LogFile=
/tmp/zabbix_proxy
.log
DBHost=localhost
DBName=zabbix_proxy
DBUser=zabbix
DBPassword=zabbix
ConfigFrequency=120
#主动去server端去拉去配置更新的频率120秒一次
DataSenderFrequency=60
#发送采集的监控数据到服务器端,默认是1秒,我们一分钟发送一次
#ProxyLocalBuffer=0 #ProxyLocalBuffer表示数据传递给server之后还要在proxy里保存多久(单位为小时)。如果注释就是代表不删除。
#ProxyOfflineBuffer=1 #ProxyOfflineBuffer表示数据没有传递给server的话还要在proxy里保存多久(单位为小时)。如果注释就是代表不删除。
|
然后就是启动proxy:
1
|
# /usr/local/zabbix_proxy/sbin/zabbix_proxy
|
用netstat查看一下端口和进程是否都OK:
Zabbix-server端的配置
登入zabbix-server的网页,如图添加proxy:
点击“create proxy”之后,就对应填写资料吧:
这里对上面的几个选项多说几句:
1
2
3
4
5
6
7
8
|
Connections to proxy:服务器如何连接到被动代理:无加密(默认),使用PSK(预共享密钥)或证书。
Connections from proxy:从活动代理中选择允许的连接类型。 可以同时选择几种连接类型(用于测试和切换到其他连接类型)。 默认为“无加密”。
#点击Certificate之后又两个参数:
Issuer:允许颁发证书。 证书首先通过CA(认证机构)验证。 如果CA有效,则由CA签名,则可以使用Issuer字段来进一步限制允许的CA。 该字段是可选的,如果您的Zabbix安装使用多个CA的证书,则使用该字段。
Subject:允许的证书。 证书首先通过CA验证。 如果它有效,由CA签名,则主题字段可用于仅允许Subject字符串的一个值。 如果此字段为空,则接受由配置的CA签名的任何有效证书。
#点击PSK之后又两个参数:
PSK identity:预共享密钥身份字符串。
PSK : 预共享密钥(hex-string)。 如果Zabbix使用mbed TLS(PolarSSL)库,Zabbix将使用GnuTLS或OpenSSL库,64位十六进制(32字节PSK),最大长度为512位十六进制数(256字节PSK)。 示例:1f87b595725ac58dd977beef14b97461a7c1045b9a1c963065002c5473194952
|
保存之后,就在zabbix-server用zabbix-get 去ping一下proxy,看看返回值是否是1,如果是“zabbix_get [18290]: Check access restrictions in Zabbix agent configuration”,就检查一下刚才的hostname等值是否正确。
被监控机器的配置
在被监控的阿里云redis里安装zabbix-agent,在agentd.conf里把hostname写成自己在/etc/hosts里的hostname,Server地址和ServerActive的地址都要写成proxy的外网IP地址。保存之后启动agent进程,这个时候在proxy端是可以通过zabbix_get得到这台被监控机器的值,如图:
在Zabbix-Server的WEB界面里,为阿里云的redis新建一个host,“Agent interface" 那里填写被监控的机器IP,端口是10050,“Monitored by proxy”的地方要写成刚刚添加的proxy。如图:
上面已经提到过,用proxy模式并且zabbix的客户端也是主动模式提交数据,这样能大大提高采集效率,降低zabbix服务器端和proxy端的压力。现在我们希望添加的还是使用zabbix_agent的方式,新加到zabbix_proxy里面的主机使用zabbix_agent(active)的方式。注意在模板的克隆要选择“full clone”,不要选“clone”,那样的话就仅仅是把iterm的名字克隆过去而已,如图:
然后在items选择具体的类型,根据需要,想改那个改哪个,如图,注意!我图里写的是Zabbix agent,但是type这里选择Zabbix agent (active)
改完之后,保存一下,就会看到type都是zabbix agent(active)了。
最后在host里把这个机器添加到proxy的模板里,如图:
在Administration的Proxies也看到效果了,如果server与proxy没有正确连接的话,last seen的地方会是“--”,如果连接的话就会显示具体时间,如图:
返回到hosts里,查看那个被监控的redis机器也成功被监控到了,"ZBX"已经变绿。如图:
因为我们线上环境基本都是用的zabbix_proxy方式是active方式,然后客户端也是active方式,既然都是active方式,那么zabbix_agent的Hostname就很重要,打个比方如果再zabbix_server端把一个主机的Hostname改了,然后客户端那边也改了,服务端和客户端的Hostname是统一的,但是proxy那里还记录的是旧Hostname,然后就会在proxy日志里面看到下面一条:
1
|
cannot send list of active checks to
"proxy内网IP地址"
: host [virt_proxy内网IP地址] not found
|
proxy主动模式下,ConfigFrequency默认的是3600秒一小时,显然有点大了,可以适当的调低一下,如10分钟或者几分钟什么的。然后出现问题多看看zabbix服务端和proxy的日志,对症下药。
参考资料:http://www.51niux.com/?id=156
参考资料:http://www.cnblogs.com/wangxiaoqiangs/p/5336630.html
最后的最后,如果您觉得本文对您升职加薪有帮助,那么请不吝赞助之手,刷一下下面的二维码,赞助本人继续写更多的博文!
本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/2046182