分布式监控系统之Zabbix proxy

  前文咱们了解了zabbix 使用snmp和jmx信道采集数据的相关使用配置,回顾请参考http://www.javashuo.com/article/p-qcajurev-nx.html;今天咱们来讲zabbix proxy;html

  一、zabbix proxy是什么?为何要使用zabbix proxy?node

  简单讲zabbix proxy就是zabbix server的代理服务,它能帮助zabbix server采集数据,而后再统一的发送给zabbix server ;它的功能和zabbix server 很相似,zabbix server 能作到它几乎都能作;主要做用就是代理zabbix server ;咱们知道监控一个主机或者服务,一般监控项有不少,每一个监控项的数据采集工做都会消耗zabbix server 一个socket;这样一来监控一个主机少则十几个socket链接,多则几十个上百个;咱们试想一个场景,咱们要监控一个集群,这个集群有100台物理主机,每一个物理主机都要监控cpu,内存,磁盘等等,一台服务器平均监控项为20个,那么100台服务器就要2000个socket链接;这意味着zabbix server要有2000个socket链接须要维持;这样一来无疑对zabbix server性能有很大的影响;为了下降zabbix server链接socket数量过大而带来的性能消耗,此时zabbix server就应该委托其余主机来代理收集数据;这个代理就是zabbix proxy;除了以上场景,好比跨机房的场景咱们也须要用zabbix proxy,每一个zabbix proxy只负责采集本地同一机房里的主机的数据,而后统一发送给zabbix server;这样一来能够减小zabbix server的socket链接数量,从而下降zabbix server的压力;mysql

  二、zabbix proxy内部组件web

  zabbix proxy主要由zabbix proxy和数据库组成;它这个数据库不是永久存储采集数据的,它能够将采集的数据临时存放在数据库中,当它把对应的数据发送给zabbix server之后,本地临时存储的数据就会清除;除了缓存采集的数据意外,它还能够用来存储在zabbix server上拉取的监控配置信息;sql

  三、zabbix proxy 部署数据库

  准备yum仓库文件缓存

[root@node03 ~]# scp /etc/yum.repos.d/zabbix.repo node06:/etc/yum.repos.d/
zabbix.repo                                                                   100%  242   164.4KB/s   00:00    
[root@node03 ~]# scp /etc/yum.repos.d/mariadb.repo node06:/etc/yum.repos.d/
mariadb.repo                                                                  100%  129   116.6KB/s   00:00    
[root@node03 ~]# 

  安装MariaDB-serverbash

[root@node06 ~]# yum install -y  MariaDB-server

  配置数据库服务器

[root@node06 ~]# cat /etc/my.cnf.d/zabbix_proxy.cnf
[mysqld]
bind-address = 0.0.0.0
default-storage-engine = innodb
innodb_file_per_table = on
max_connections = 4096
collation-server = utf8_general_ci
character-set-server = utf8
skip_name_resolve
[root@node06 ~]# 

  启动mariadbapp

[root@node06 ~]# /etc/init.d/mysql start
Starting MariaDB.201125 22:12:03 mysqld_safe Logging to '/var/lib/mysql/node06.test.org.err'.
201125 22:12:03 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
 SUCCESS! 
[root@node06 ~]# ss -tnl
State      Recv-Q Send-Q           Local Address:Port                          Peer Address:Port              
LISTEN     0      128                          *:22                                       *:*                  
LISTEN     0      100                  127.0.0.1:25                                       *:*                  
LISTEN     0      128                          *:3306                                     *:*                  
LISTEN     0      128                         :::22                                      :::*                  
LISTEN     0      100                        ::1:25                                      :::*                  
[root@node06 ~]# 

  设置root密码

[root@node06 ~]# mysql_secure_installation 

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): 
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] y
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!
[root

  建立数据库和用户受权

[root@node06 ~]# mysql -uroot -padmin123.com
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 11
Server version: 10.0.38-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>  create database zabbix character set utf8 collate utf8_bin; 
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> grant all privileges on zabbix.* to zabbix_proxy@'192.168.%.%' identified by 'admin123.com';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> 

  安装zabbix proxy

[root@node06 ~]# yum install -y zabbix-proxy-mysql

  查看zabbix proxy 安装的文件

[root@node06 ~]# rpm -ql zabbix-proxy-mysql
/etc/logrotate.d/zabbix-proxy
/etc/zabbix/zabbix_proxy.conf
/usr/lib/systemd/system/zabbix-proxy.service
/usr/lib/tmpfiles.d/zabbix-proxy.conf
/usr/lib/zabbix/externalscripts
/usr/sbin/zabbix_proxy_mysql
/usr/share/doc/zabbix-proxy-mysql-4.0.26
/usr/share/doc/zabbix-proxy-mysql-4.0.26/AUTHORS
/usr/share/doc/zabbix-proxy-mysql-4.0.26/COPYING
/usr/share/doc/zabbix-proxy-mysql-4.0.26/ChangeLog
/usr/share/doc/zabbix-proxy-mysql-4.0.26/NEWS
/usr/share/doc/zabbix-proxy-mysql-4.0.26/README
/usr/share/doc/zabbix-proxy-mysql-4.0.26/schema.sql.gz
/usr/share/man/man8/zabbix_proxy.8.gz
/var/log/zabbix
/var/run/zabbix
[root@node06 ~]# 

  导入表

[root@node06 ~]# zcat /usr/share/doc/zabbix-proxy-mysql-4.0.26/schema.sql.gz |mysql -uzabbix_proxy -padmin123.com -h192.168.0.46 zabbix
[root@node06 ~]#

  验证:查看对应数据库是否有表生成?

[root@node06 ~]# mysql -uzabbix_proxy -padmin123.com -h192.168.0.46 zabbix -e 'show tables;' |wc -l
145
[root@node06 ~]#

  提示:可以统计到对应表的数量,说明咱们导入表的操做没有问题;

  配置zabbix proxy

[root@node06 ~]# grep -Ei "^[a-z]" /etc/zabbix/zabbix_proxy.conf
ProxyMode=0
Server=192.168.0.43
ServerPort=10051
HostnameItem=system.hostname
ListenPort=10051
LogFile=/var/log/zabbix/zabbix_proxy.log
LogFileSize=0
DebugLevel=3
PidFile=/var/run/zabbix/zabbix_proxy.pid
SocketDir=/var/run/zabbix
DBHost=192.168.0.46
DBName=zabbix
DBUser=zabbix_proxy
DBPassword=admin123.com
HeartbeatFrequency=60
ConfigFrequency=60
DataSenderFrequency=1
StartPollers=5
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=4
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000
[root@node06 ~]# 

  提示:主要配置zabbix server的地址以及zabbix proxy的hostname和数据库相关的几个选项以及后面的心跳频率和配置文件更新频率以及数据发送频率;其余保持默认便可;这里须要提醒下,默认状况zabbix proxy 工做为主动模式,所谓主动模式是指zabbix proxy主动到zabbix server上获取监控配置和推送采集的数据;若是须要配置为被动,这须要将ProxyMode更改成1便可;Server是配置zabbix server的地址,意思是告诉proxy到到哪里获取配置以及将采集的数据推送到哪里;后面的HeartbeatFrequency是用来指定多长时间发送一次心跳信息给zabbix server,默认是60秒;ConfigFrequency是用来指定更新监控配置信息的频率,意思是多久去zabbix server 上同步一下监控配置;默认是3600;这个能够根据实际状况更改;DataSenderFrequency是用于指定多长时间发一次数据给zabbix server,默认为1秒;

  启动zabbix proxy

[root@node06 ~]# systemctl start zabbix-proxy.service 
[root@node06 ~]# ss -tnl
State      Recv-Q Send-Q           Local Address:Port                          Peer Address:Port              
LISTEN     0      128                          *:22                                       *:*                  
LISTEN     0      100                  127.0.0.1:25                                       *:*                  
LISTEN     0      128                          *:10051                                    *:*                  
LISTEN     0      128                          *:3306                                     *:*                  
LISTEN     0      128                         :::22                                      :::*                  
LISTEN     0      100                        ::1:25                                      :::*                  
LISTEN     0      128                         :::10051                                   :::*                  
[root@node06 ~]# 

  提示:zabbix proxy 默认监听在10051,启动后请确保该端口正常监听;

  安装zabbix agent用于监控zabbix proxy自身

[root@node06 ~]# yum install -y zabbix-agent

  配置zabbix agent

[root@node06 ~]# grep -Ei "^[a-z]" /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=192.168.0.46
ListenPort=10050
ListenIP=0.0.0.0
ServerActive=192.168.0.46
HostnameItem=system.hostname
Include=/etc/zabbix/zabbix_agentd.d/*.conf
[root@node06 ~]# 

  提示:这里的配置和咱们前边配置zabbix agent几乎同样,不一样的是咱们须要将Server指向zabbix proxy的地址和端口;若是其余agent须要用到proxy来代理,须要配置运行proxy来采集数据;这个Server的值能够是多个,分别用逗号隔开便可;一样ServerActive也应该指向zabbix proxy的地址;

  启动zabbix agent

[root@node06 ~]# systemctl start zabbix-agent.service 
[root@node06 ~]# ss -tnl
State      Recv-Q Send-Q           Local Address:Port                          Peer Address:Port              
LISTEN     0      128                          *:22                                       *:*                  
LISTEN     0      100                  127.0.0.1:25                                       *:*                  
LISTEN     0      128                          *:10050                                    *:*                  
LISTEN     0      128                          *:10051                                    *:*                  
LISTEN     0      128                          *:3306                                     *:*                  
LISTEN     0      128                         :::22                                      :::*                  
LISTEN     0      100                        ::1:25                                      :::*                  
LISTEN     0      128                         :::10051                                   :::*                  
[root@node06 ~]#

  在zabbix web界面配置添加zabbix proxy

 

  提示:在administration--->proxIes---->create proxy点击进入新建proxy的页面;

  提示:这里的proxy name必须和本地运行zabbix proxy服务主机名称相同;填写好proxy name之后点击添加便可;

 

  添加主机,使用咱们刚才添加到proxy来代理采集数据

  提示:添加主机必定要选择对应要使用的zabbix proxy;

  连接模板

  提示:选择好模板之后,最后点击add将主机添加到主机列表;

  提示:能够看到如今添加到主机,前边都有对应proxy的名称;过一会咱们就能够看到proxy将模板上的监控数据采集后,发送给zabbix server,此时就能够看到对应的主机上的监控数据;

  验证:查看对应主机是否有监控数据?

  提示:能够看到node06连接的模板监控项也陆续有数据,说明proxy采集到数据已经发送给zabbix server ;

  查看zabbix proxy状态

  提示:能够看到如今node06.test.org这个proxy有一个host,34个item,vps为0.39;若是其余主机须要用该proxy代理采集数据,咱们须要将对应的agent配置容许该proxy来采集数据;

  到此,zabbix proxy的安装,测试就完成了;