0x01 前言
先来假设一种情况:你管理着一个或多个私有云,其中的服务器需要用zabbix进行监控,可是云中的服务器都无法直接连接公网,那怎样才能将数据汇总到一个zabbix server中呢?
这就需要用到zabbix的代理服务器–>zabbix proxy。
0x02 架构
先放一张图片:
从图中可以看到,只需要在私有云中配置一台zabbix proxy服务器,即可代替zabbix server从该云中监控服务器,zabbix proxy再主动往zabbix server发送是收集到的数据。proxy和server的中间还可以增加一层防火墙增强安全性,两者的链路还可以使用TLS进行加密。
在此文章中不涉及TLS的内容,TLS的相关内容将在下一篇文章中进行说明。
如果有多个私有云,只需要增加proxy即可。甚至有多个位于不同地域的数据中心也可以采用这种方式汇总数据。
虽然zabbix proxy是代替zabbix server从客户机中获取数据的服务器,但proxy并没有GUI界面,所以zabbix proxy有两种代理模式:
- Active:主动模式,代理服务器会主动与server联系并索取配置文件以用于轮询客户机
- Passive:被动模式,代理服务器等待server的主动联系并下发配置文件
0x03 准备
0x03.1 zabbix server
首先需要准备zabbix server,编译安装过程请参考以下文章:
变以前请安装以下软件:
[root@web-t1 ~]# yum install mysql-devel libssh2-devel OpenIPMI-devel
为了方便,可以使用以下编译参数:
[root@web-t1 zabbix-3.2.5]# ./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --enable-proxy --with-mysql --with-net-snmp --with-libcurl --with-libxml2 --with-ssh2 --with-openipmi --with-openssl --with-libcurl
如果一切正常,那么你将会看到以下界面:
如果是使用被动模式,推荐修改以下参数:
#启动拉取proxy数据的线程数 StartProxyPollers=10 #往proxy推送配置文件的间隔时间 ProxyConfigFrequency=60 #往proxy拉取数据的间隔时间 ProxyDataFrequency=1
0x03.2 zabbix proxy
注意!请为proxy和zabbix独立配置数据库,切勿共用同一个数据库!
因为zabbix proxy和zabbix server的数据库是相冲突的,为了安全起见,请不要共用数据库。不过既然用上了proxy,那么两者应该不在同一个服务器上,数据库一般也不会在一起。
依旧使用上面的编译参数进行编译:
[root@zabbix-proxy-t1 zabbix-3.2.5]# ./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --enable-proxy --with-mysql --with-net-snmp --with-libcurl --with-libxml2 --with-ssh2 --with-openipmi --with-openssl --with-libcurl
然后将启动器复制到指定位置:
[root@zabbix-proxy-t1 zabbix-3.2.5]# ln /usr/local/zabbix/sbin/zabbix_proxy /usr/local/sbin/
先修改zabbix proxy的配置文件:
#打开文件 [root@zabbix-proxy-t1 zabbix-3.2.5]# vim /usr/local/zabbix/etc/zabbix_proxy.conf #将该字段修改为zabbix server的IP或域名 Server=web-t1.t.com #指定zabbix proxy的hostname,与其他proxy的hostname不可重复 Hostname=Zabbix proxy t1 #指定日志路径 LogFile=/tmp/zabbix_proxy.log #指定数据库IP地址或域名 DBHost=zabbix-proxy-t1.t.com #指定数据库名 DBName=zabbix #指定数据库用户名 DBUser=zabbix #指定数据库密码 DBPassword=zabbix
完成后使用以下命令启动:
[root@zabbix-proxy-t1 zabbix-3.2.5]# zabbix_proxy
将启动命令添加到开机启动文件中:
#打开文件 [root@zabbix-proxy-t1 zabbix-3.2.5]# vim /etc/rc.local #在文件末尾填入以下内容后保存退出 zabbix_proxy #赋予可执行权限 [root@zabbix-proxy-t1 zabbix-3.2.5]# chmod +x /etc/rc.d/rc.local
至此,zabbix proxy的配置已完成,下面来检查相关服务有没有成功启动。先查看相关进程:
[root@zabbix-proxy-t1 zabbix-3.2.5]# ps -aux | grep zabbix zabbix 12873 0.0 0.3 141160 3528 ? S 01:03 0:00 zabbix_proxy zabbix 12877 0.0 0.4 141288 4124 ? S 01:03 0:01 zabbix_proxy: configuration syncer [synced config 9238 bytes in 0.016047 sec, idle 3600 sec] zabbix 12878 0.0 0.3 141160 3268 ? S 01:03 0:02 zabbix_proxy: heartbeat sender [sending heartbeat message success in 0.001863 sec, idle 60 sec] zabbix 12879 0.0 0.3 141236 3696 ? S 01:03 0:39 zabbix_proxy: data sender [sent 1 values in 0.003502 sec, idle 1 sec] zabbix 12880 0.0 0.5 248140 5140 ? S 01:03 0:05 zabbix_proxy: poller #1 [got 0 values in 0.000003 sec, idle 5 sec] zabbix 12881 0.0 0.5 248140 5140 ? S 01:03 0:05 zabbix_proxy: poller #2 [got 0 values in 0.000005 sec, idle 5 sec] zabbix 12882 0.0 0.5 248140 5120 ? S 01:03 0:05 zabbix_proxy: poller #3 [got 0 values in 0.000003 sec, idle 5 sec] zabbix 12883 0.0 0.5 248188 5184 ? S 01:03 0:05 zabbix_proxy: poller #4 [got 1 values in 0.002559 sec, idle 5 sec] zabbix 12884 0.0 0.5 248140 5120 ? S 01:03 0:05 zabbix_proxy: poller #5 [got 0 values in 0.000017 sec, idle 5 sec] zabbix 12885 0.0 0.5 248188 5176 ? S 01:03 0:01 zabbix_proxy: unreachable poller #1 [got 0 values in 0.000004 sec, idle 5 sec] zabbix 12886 0.0 0.3 141236 3116 ? S 01:03 0:00 zabbix_proxy: trapper #1 [processed data in 0.000000 sec, waiting for connection] zabbix 12887 0.0 0.3 141236 3116 ? S 01:03 0:00 zabbix_proxy: trapper #2 [processed data in 0.000000 sec, waiting for connection] zabbix 12888 0.0 0.3 141236 3116 ? S 01:03 0:00 zabbix_proxy: trapper #3 [processed data in 0.000000 sec, waiting for connection] zabbix 12889 0.0 0.3 141236 3116 ? S 01:03 0:00 zabbix_proxy: trapper #4 [processed data in 0.000000 sec, waiting for connection] zabbix 12890 0.0 0.3 141236 3116 ? S 01:03 0:00 zabbix_proxy: trapper #5 [processed data in 0.000000 sec, waiting for connection] zabbix 12891 0.0 0.1 143668 1872 ? S 01:03 0:01 zabbix_proxy: icmp pinger #1 [got 0 values in 0.000003 sec, idle 5 sec] zabbix 12892 0.0 0.2 141152 2516 ? S 01:03 0:01 zabbix_proxy: housekeeper [deleted 1885 records in 0.031896 sec, idle for 1 hour(s)] zabbix 12893 0.0 0.2 141152 2428 ? S 01:03 0:04 zabbix_proxy: http poller #1 [got 0 values in 0.000508 sec, idle 5 sec] zabbix 12894 0.0 0.4 245604 4512 ? S 01:03 0:02 zabbix_proxy: discoverer #1 [processed 0 rules in 0.000590 sec, idle 60 sec] zabbix 12895 0.0 0.2 141152 2704 ? S 01:03 0:04 zabbix_proxy: history syncer #1 [synced 1 items in 0.000755 sec, idle 1 sec] zabbix 12896 0.0 0.2 141152 2704 ? S 01:03 0:04 zabbix_proxy: history syncer #2 [synced 0 items in 0.000001 sec, idle 1 sec] zabbix 12897 0.0 0.2 141152 2704 ? S 01:03 0:04 zabbix_proxy: history syncer #3 [synced 0 items in 0.000001 sec, idle 1 sec] zabbix 12898 0.0 0.2 141152 2704 ? S 01:03 0:04 zabbix_proxy: history syncer #4 [synced 0 items in 0.000001 sec, idle 1 sec] zabbix 12899 0.0 0.1 141160 1868 ? S 01:03 0:04 zabbix_proxy: self-monitoring [processed data in 0.000003 sec, idle 1 sec] root 16155 0.0 0.0 112648 964 pts/0 R+ 22:44 0:00 grep --color=auto zabbix
检查端口:
[root@zabbix-proxy-t1 zabbix-3.2.5]# netstat -anp | grep zabbix tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 12873/zabbix_proxy tcp 0 0 10.1.1.123:40878 10.1.1.123:3306 ESTABLISHED 12877/zabbix_proxy: tcp 0 0 10.1.1.123:40858 10.1.1.123:3306 ESTABLISHED 12897/zabbix_proxy: tcp 0 0 10.1.1.123:40862 10.1.1.123:3306 ESTABLISHED 12895/zabbix_proxy: tcp 0 0 10.1.1.123:45516 10.1.1.123:3306 ESTABLISHED 12883/zabbix_proxy: tcp 0 0 10.1.1.123:40866 10.1.1.123:3306 ESTABLISHED 12893/zabbix_proxy: tcp 0 0 10.1.1.123:45526 10.1.1.123:3306 ESTABLISHED 12885/zabbix_proxy: tcp 0 0 10.1.1.123:40876 10.1.1.123:3306 ESTABLISHED 12879/zabbix_proxy: tcp 0 0 10.1.1.123:40860 10.1.1.123:3306 ESTABLISHED 12896/zabbix_proxy: tcp 0 0 10.1.1.123:40864 10.1.1.123:3306 ESTABLISHED 12898/zabbix_proxy: tcp 0 0 10.1.1.123:40898 10.1.1.123:3306 ESTABLISHED 12894/zabbix_proxy:
这里还有一些proxy的配置信息可供配置:
#往server发送心跳包的间隔时间 HeartbeatFrequency=10 #主动模式下,向server索取配置文件的间隔时间 ConfigFrequency=300 #往服务器发送数据的间隔时间 DataSenderFrequency=1
如果你的zabbix系统处于新配置的阶段,需要经常修改调试,请将上方的参数按需要调小点。例如ConfigFrequency这一项的默认值为3600,也就是说每隔一个小时,proxy才向server索取一次配置文件,这很明显很浪费时间。
0x03.3 zabbix agent
如果使用agent的方式从客户机中获取数据,那么agent的配置文件要做一些调整。
首先需要安装agent,你可以在以下页面中下载rpm或exe安装包:
或者依旧使用上方的编译参数进行编译:
[root@zabbix-client-t1 zabbix-3.2.5]# ./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --enable-proxy --with-mysql --with-net-snmp --with-libcurl --with-libxml2 --with-ssh2 --with-openipmi --with-openssl --with-libcurl
然后将agent的启动文件链接到指定位置:
[root@zabbix-client-t1 zabbix-3.2.5]# ln /usr/local/zabbix/sbin/zabbix_agentd /usr/local/sbin/
再修改配置文件:
#定义日志路径 LogFile=/tmp/zabbix_agentd.log #指定服务器地址,在代理模式下,请填入proxy服务器的IP或域名 Server=zabbix-proxy-t1.t.com #如果需要使用ServerActive,请分别填写server和proxy服务器的IP或域名 ServerActive=web-t1.t.com,zabbix-proxy-t1.t.com #定义客户机的hostname,必须独一无二 Hostname=zabbix-client-t1
最后启动zabbix agent:
[root@zabbix-client-t1 zabbix-3.2.5]# zabbix_agentd
添加到开机启动文件中:
#打开文件 [root@zabbix-client-t1 zabbix-3.2.5]# vim /etc/rc.local #在文件最后添加以下内容,然后保存退出 zabbix_agentd #赋予开机启动文件可执行权限 [root@zabbix-client-t1 zabbix-3.2.5]# chmod +x /etc/rc.d/rc.local
最后检查启动情况:
[root@zabbix-client-t1 zabbix-3.2.5]# ps -aux | grep zabbix zabbix 12799 0.0 0.1 79992 1380 ? S 00:47 0:00 zabbix_agentd zabbix 12800 0.0 0.1 79992 1412 ? S 00:47 0:12 zabbix_agentd: collector [idle 1 sec] zabbix 12801 0.0 0.2 82188 2808 ? S 00:47 0:09 zabbix_agentd: listener #1 [waiting for connection] zabbix 12802 0.0 0.2 82188 2808 ? S 00:47 0:09 zabbix_agentd: listener #2 [waiting for connection] zabbix 12803 0.0 0.2 82188 2808 ? S 00:47 0:09 zabbix_agentd: listener #3 [waiting for connection] root 29837 0.0 0.0 112648 964 pts/0 R+ 23:07 0:00 grep --color=auto zabbix
检查端口监听情况:
[root@zabbix-client-t1 zabbix-3.2.5]# netstat -anp | grep zabbix tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 12799/zabbix_agentd
0x04 配置
完成zabbix server、zabbix proxy和zabbix agent的配置安装后,还需要到zabbix server中添加zabbix proxy和agent的相关信息。
0x04.1 zabbix proxy
进入Administration –> Proxies添加proxy节点:
如果使用主动模式,那么只需要在Proxy name一栏中填入proxy的hostname即可:
如果采用被动模式,则还需要填入proxy的IP地址或域名:
如果是使用主动模式,那么在超过proxy中HeartbeatFrequency所设定的时间后,proxy将会往服务器发送心跳包,显示如下:
如果使用被动模式,那么显示如下:
0x04.2 host
和往常一样配置host即可,不过在Monitored by proxy一栏中需要选择对应的proxy:
0x05 查看
如果一切顺利,那么稍等片刻即可从监控界面中看到被监控host的数据。因为proxy同步配置信息和server接收数据需要一段时间,请耐心等待:
0x06 结语
如果有多个数据中心、多个私有云网段或者网络环境是内外网相隔离的情况,zabbix proxy是非常有用的。
但使用proxy请注意安全,推荐使用TLS进行加密,以防止数据被窃听或篡改甚至是入侵,同时需要在server和proxy之间配置防火墙和IDS,以增强安全性。