Zabbix-proxy的用途和構建圖
Zabbix-server是建立在金山雲的,現在需要監控阿里雲的redis,但是阿里雲跟金山雲之間通信是無法走內網的,如果直接讓zabbix-server與redis直接聯繫,一旦公網的信息被截獲的話,整個金山區的zabbix可能都會遭殃,那麼既然有這種“遠程監控+當監控的位置通信不便”的需求,就搭建一個zabbix-proxy來解決問題。
Zabbix-proxy是一個監控代理服務器,它收集監控到的數據,先存放在緩衝區,保存的時間可以通過配置文件設定,然後再傳送到zabbix-server,這樣也大大減緩了zabbix-server的壓力,注意!監控代理需要一個單獨的數據庫,因爲它的數據庫表名與zabbix-server的數據庫表名是一樣的,如果不單獨分開,後果就是數據錯亂。
有人看到這裏可能問了,說來說去你的zabbix-proxy跟阿里的redis依舊是走公網的啊!雖然這樣也是走公網,我現在只需要配置一個防火牆規則來讓他倆保證通信即可,通過防火牆來提升安全係數。架構如圖:
安裝Mysql 5.5
Zabbix-proxy機器情況:金山雲centos 6.5,安裝zabbix版本:3.0.8
[root@js-online-cjhmq-002 opt]yum list installed | grep mysql #列出已經安裝過的mysql情況 [root@js-online-cjhmq-002 opt]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%] [root@js-online-cjhmq-002 opt]groupadd zabbix #新建用戶組zabbix [root@js-online-cjhmq-002 opt]useradd -g zabbix -u 808 -m zabbix #-g:指定用戶所屬的羣組; #-u:指定用戶id。 #-m:自動建立用戶的登入目錄;
現在要修改一下 /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的,所以我拿出半個G給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*
Zabbix-proxy的配置
打開/etc/zabbix/zabbix_proxy.conf,需要修改幾個地方:
ProxyMode=0 #0是主動模式,1是被動模式 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秒,我們一分鐘發送一次 #ProxyLocalBuffer=0 #ProxyLocalBuffer表示數據傳遞給server之後還要在proxy裏保存多久(單位爲小時)。如果註釋就是代表不刪除。 #ProxyOfflineBuffer=1 #ProxyOfflineBuffer表示數據沒有傳遞給server的話還要在proxy裏保存多久(單位爲小時)。如果註釋就是代表不刪除。
然後就是啓動proxy:
# /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等值是否正確。
被監控機器的配置
在被監控的阿里雲redis裏安裝zabbix-agent,在agentd.conf裏把hostname寫成自己在/etc/hosts裏的hostname,Server地址和ServerActive的地址都要寫成proxy的外網IP地址。保存之後啓動agent進程,這個時候在proxy端是可以通過zabbix_get得到這臺被監控機器的值,如圖:
在Zabbix-Server的WEB界面裏,爲阿里雲的redis新建一個host,“Agent interface" 那裏填寫被監控的機器IP,端口是10050,“Monitored by proxy”的地方要寫成剛剛添加的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也看到效果了,如果server與proxy沒有正確連接的話,last seen的地方會是“--”,如果連接的話就會顯示具體時間,如圖:
返回到hosts裏,查看那個被監控的redis機器也成功被監控到了,"ZBX"已經變綠。如圖:
因爲我們線上環境基本都是用的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
參考資料:http://www.cnblogs.com/wangxiaoqiangs/p/5336630.html
最後的最後,如果您覺得本文對您升職加薪有幫助,那麼請不吝贊助之手,刷一下下面的二維碼,贊助本人繼續寫更多的博文!