分佈式監控系統之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的安裝,測試就完成了;

相關文章
相關標籤/搜索