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的搭建和配置全過程