1. 程式人生 > >Zabbix-proxy的搭建和配置全過程

Zabbix-proxy的搭建和配置全過程

zabbix-proxy proxy 監控代理

Zabbix-proxy的用途和構建圖

Zabbix-server是建立在金山雲的,現在需要監控阿裏雲的redis,但是阿裏雲跟金山雲之間通信是無法走內網的,如果直接讓zabbix-server與redis直接聯系,一旦公網的信息被截獲的話,整個金山的zabbix可能都會遭殃,那麽既然有這種“遠程監控+當監控的位置通信不便”的時候,那麽就搭建一個zabbix-proxy來解決問題。Zabbix-proxy是一個監控代理服務器,它收集監控到的數據,先存放在緩沖區,保存的時間可以通過配置文件設定,然後再傳送到zabbix-server,這樣也大大減緩了zabbix-server的壓力;監控代理需要一個單獨的數據庫。


有人可能問了,說來說去你的zabbix-proxy跟阿裏的redis依舊是走公網的啊,不過這樣我只需要配置一個防火墻規則來讓他倆保證通信即可。通過防火墻來提升安全系數。


技術分享圖片


安裝Mysql 5.5

Zabbix-proxy機器情況:金山雲centos 6.5,安裝zabbix版本:3.0.8

yum list installed | grep mysql    #列出已經安裝過的mysql情況
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%]


現在要修改一下 /etc/yum.repos.d/mysql-community.repo 這個文件,將5.5的enabled改為1,5.6的enabled改為0:

# 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,如圖:

innodb_buffer_pool_size = 512M        #這個根據服務器性能填寫,這個機器是2核2G的,所以我拿出1G給mysql
innodb_file_per_table=1               #這個是新增的字段,設置InnoDB為獨立表空間模式,每個數據庫的每個表都會生成一個數據目錄


mysql安裝完畢之後,我們還要導表進去。

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服務器裏。

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”,如圖:

技術分享圖片


解決方法就是:

yum -y install openldap*
groupadd zabbix     #新建用戶zabbix
useradd -g zabbix -u 808 -m zabbix
#-g:指定用戶所屬的群組;
#-u:指定用戶id。
#-m:自動建立用戶的登入目錄;


zabbix-proxy的配置

打開/etc/zabbix/zabbix_proxy.conf,需要修改幾個地方:

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秒,我們一分鐘發送一次
#roxyLocalBuffer=0        #代理配置文件中的ProxyLocalBuffer和ProxyOfflineBuffer參數控制數據在本地保存多長時間。
#ProxyOfflineBuffer=1


保存退出之後,再編輯/etc/zabbix/zabbix_agentd.conf,修改如下:


Server=A.B.C.D            #agentd被動模式下的server或者proxy的IP地址
ServerActive=A.B.C.D           #如果agentd端是被動模式的話,此條和下面那條並不非用配置,但是如果agentd端是主動模式的話,此條一定要配置上。
Hostname=J.Q.K.A


然後就是啟動agent和proxy:

# /etc/init.d/zabbix_agentd restart  
# /usr/local/zabbix_proxy/sbin/zabbix_proxy


用netstat查看一下端口和進程是否都OK:

技術分享圖片


zabbix-server端的配置

登入zabbix-server的網頁,如圖添加proxy:

技術分享圖片


點擊“create proxy”之後,就對應填寫資料吧:

技術分享圖片


技術分享圖片


這裏對上面的幾個選項多說幾句:


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等值是否正確。

技術分享圖片


在WEB界面裏,新建一個host,我們在zabbix-agent.conf裏選擇了active模式,那麽hostname一定要填寫對,Monitored by 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也看到效果了:

技術分享圖片


整個proxy的配置過程完畢,最後就是在阿裏雲redis的服務器裏的zabbix-agentd.conf裏,把zabbix-server的名字寫成這臺proxy的外網地址即可。


因為我們線上環境基本都是用的zabbix_proxy方式是active方式,然後客戶端也是active方式,既然都是active方式,那麽zabbix_agent的Hostname就很重要,打個比方如果再zabbix_server端把一個主機的Hostname改了,然後客戶端那邊也改了,服務端和客戶端的Hostname是統一的,但是proxy那裏還記錄的是舊Hostname,然後就會在proxy日誌裏面看到下面一條:

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


Zabbix-proxy的搭建和配置全過程