服務篇十四---zabbix監控服務

一、server端配置

LogFile=/tmp/zabbix_server.log    #默認即可
PidFile=/tmp/zabbix_server.pid    #默認即可
DBHost=localhost       #默認即可
DBName=zabbix        #在數據庫中創建的,默認即可
DBUser=zabbix      #在數據庫中創建的,默認即可
DBPassword=zabbix     #在數據庫中創建的,默認即可

以上基本都是默認的,此外,監聽端口爲10051等也是默認的;即基本不用修改server端

二、agent端配置

LogFile=/tmp/zabbix_agentd.log    #默認即可
Server=172.16.2.11     #這裏配置的IP爲zabbix-server端的IP   即爲被動模式下,由服務端主動請求AGENT,去獲取所採集到的監控數據
ServerActive=127.0.0.1   #這裏配置的IP爲zabbix-server端的IP   即主動模式下,AGENT端(即採集客戶端)將所採集的結果,主動提交給服務端服務器

說明:這裏若不修改ServerActive(即默認爲127.0.0.1),則意思是雖然開啓了主動監控,但是沒有配置遠程server端的IP,所以主動監控就無法實現;也即是這裏採用的即爲被動監控;

Hostname=Zabbix server   #這裏不需要設置,默認即可
UnsafeUserParameters=0  #爲0意思是不開啓用戶自定義監控項,爲1是開啓自定義監控項

修改配置之後重啓zabbix_agentd,則zabbix_agentd監控被動模式監控開啓;

PS1:zabbix_agentd的自定義監控說明,在配置文件中

UserParameter=         #這裏是開啓用戶自定義監控項後,可以定義監控項的名稱,格式爲UserParameter=<key>,<shellcommand>,一個例子如下:

UserParameter=memory_userd, free -m|grep Mem|awk '{print$3}',這裏的監控key值爲memory_userd,Shell命令或腳本爲free -m|grep Mem|awk '{print $3}',然後再web界面找到這個agent所在的主機,添加item

PS2:zabbix在server端的測試命令

export PATH=$PATH:/usr/local/zabbix/bin   ##稱爲環境變量

zabbix_get -s 172.16.2.3 -p 10050 -k 'dubbo.ping[mobile]'   ##測試命令

三、web界面配置

1、添加一個主機

(1)主機名稱:填寫主機名稱          ##這裏不必和agent.conf中的hostname必須一致(大多數博客沒有搞清楚這裏,說必須一致),只要下面的ip一致就可以了;

(2)agent代理程序的藉口:填寫入agent端所在主機的IP(後面的端口爲默認即可)

(3)添加完主機後,再添加鏈接的模板;

其他項可根據實際填寫,或者不填取默認值;也可直接克隆主機(較爲方便);

2、添加一個監控項

對監控項的理解:就是從主機獲取到的所有數據,通常稱爲item,構成方式爲“key+參數”;例如,監控項中需要獲取cpu信息,則需要一個對應的監控key:system.cpu.load。一般情況下key要與參數結合起來使用,例如獲取5分鐘的負載情況:system.cpu.load[avg5],即兩者合起來稱之爲“鍵值”。

(1)名稱:監控項的名稱,可以自己來自定義。可以使用如下的宏變量,$1, $2…$9,這9個參數對應item key的參數位置。例如: Free disk space on $1,如果item key爲“vfs.fs.size[/,free]”,那麼對應的名稱會變成”Free disk space on /“,$1對應了第一個參數”/“

(2)類型:一般默認爲agent客戶端,不同類型對應的key不同

(3)鍵值:監控item的key表達式,點擊可選擇系統自帶的key,用戶也可以自定義key

PS:只有系統自帶的key,纔可以不用在agent端添加userParamater,否則需要添加自定義的參數;

(4)主機接口:默認爲本機( 在哪個主機上添加就是哪個主機的IP和端口)

(5)信息類型:獲取到的信息類型,有數字、浮點數、字符、文本、日誌等,默認爲數字,根據監控項返回的信息來選擇

(6)數據類型:獲取到的信息類型若爲整數,這裏選擇整數的類型,默認爲10進制

(7)單位:默認情況下,若返回的信息類爲數字超過1000,則會處以1000來處理,如的單位爲bytes時,返回11200時會處理爲11.2kbytes

(8)自定義倍數:

(9)數據更新間隔時間:默認多久刷新一次數據

(10)自定義時間間隔:可以自定義哪段時間內多久進行刷新數據,可知不能用在主動方式的監控項;

(11)查看值:值的映射,可以定義返回值映射爲一段可理解的文字,例如0代表宕機,1代表正常等;可以自己創建值映射;

(12)應用集:屬於哪個應用集合;

3、item中的key和用戶自定義參數userParameter的詳細說明

(1)對key的說明

key是監控項的載體,用來承載這個監控項的數值,由key和參數組成,格式爲:key[parameters],例如vfs.fs.size[/,pfree];key有不同的類型,對於zabbix_agent類型的key,需要大概瞭解一下其功能和參數含義。

(2)對觸發器的說明

觸發器其實就是一個表達式,用來表達一個key的臨界值(正常與否的臨界)。在添加觸發器時,主要是添加觸發器的表達式和觸發結果的級別(嚴重、一般等),表達式的格式爲:{<server>:<key>.<function>(<parameter>)}<operator><constant>,即{主機:key.函數(參數)}<表達式>常數,例如{dubbo1:vfs.fs.size[/,pfree].last(0)}<20。可見,對於觸發器表達式來講,需要了解一下一些常用的函數;

一般的,表達式裏的server用的是“模板名稱”,例如{Template OS Linux:system.hostname.diff(0)}>0,此處的Template OS Linux即爲模板名稱(非“模板可見名稱”),system.hostname即爲key,diff(0)即爲函數,>0即爲表達式。可知,觸發器是一個組合的表達式。

(3)對userParameter的說明
如果zabbix自帶的key不夠,則需要自定義key來實現對特定對象(服務狀態等)的監控,這裏需要再agent端的配置文件中開啓用戶自定義參數,且定義好key及key的值,如下
#開啓用戶自定義參數
UnsafeUserParameters=1
#定義用戶自定義的參數項
UserParameter=mysql.version,/mysql/3306/app/mysql/bin/mysql -V
UserParameter=mysql.ping,/mysql/3306/app/mysql/bin/mysqladmin --defaults-file=/home/zabbix/.my.cnf -S /mysql/3306/tmp/mysql.sock ping | grep -c alive
UserParameter=mysql.status[*],/home/zabbix/checkmysql_status.sh $1
UserParameter=mysql.slavestatus,/home/zabbix/mysql_slave.sh
以mysql.slavestatus爲例,進行說明:
-->首先需要再指定的目錄下創建監控用的腳本/home/zabbix/mysql_slave.sh,然後定義了mysql.slavestatus這個key,用來接受這個腳本執行結果的值;
-->然後需要在web端添加一個監控項,名稱可以爲mysql_slave_status,在監控項中引用這裏定義的key;
-->若要觸發報警,則再創建一個名稱爲“mysql主從複製不同步”的觸發器,表達式爲{mysql2:mysql.slavestatus.prev()}<>2,且定義級別爲“警告”;
4、模板、action和報警媒介
(1)模板
可以給一個主機創建很多監控項和觸發器,如果機器很多,則自定義的模板就派上用場了,因爲給一個主機可以直接鏈接一個模板來解決。可見,模板是一個集合,是一個包含很多監控項和觸發器的集合,此外,模板還可以鏈接其他模板,這樣子就是一個模板可以集成很多個不同地方的監控項和觸發器,實現通用。
(2)action
action即什麼條件下進行報警,一般的設定條件爲“維護狀態爲非維護狀態”和“觸發器=問題”,然後配置發送的報警內容及“操作”(操作即是定義具體的發送對象、發送次數、發送媒介等);報警內容分爲“報警主題”和“報警內容”,如:
主題:故障{TRIGGER.STATUS},服務器:{HOSTNAME1}發生: {TRIGGER.NAME}故障!
內容:
告警主機:{HOSTNAME1}
告警ip:{IPADDRESS}
當前狀態:{TRIGGER.STATUS}:{ITEM.VALUE1}
告警時間:{EVENT.DATE} {EVENT.TIME}
告警等級:{TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警項目:{TRIGGER.KEY1}
問題詳情:{ITEM.NAME}:{ITEM.VALUE}
事件ID:{EVENT.ID}
PS:這裏可以看到引用了很多zabbix內置的宏變量,而宏變量和數字(1,2等)合起來使用,則表示該宏變量在觸發器表達式中出現的位置,如HOSTNAME1;
(3)報警媒介
配置報警媒介,可以定義爲weixin或者電子郵件,都需要在server端的建立目錄alertscripts/,在其中新建一個mail.sh或者weixin.sh,然後進行測試是否可用,網上一般均有教程;那裏的參數是什麼意思?{ALERT.SENDTO},{ALERT.SUBJECT},{ALERT.MESSAGE},應該也是宏變量,是腳本中引用的參數;
PS:添加用戶那裏,因爲weixin報警時走的轉發,所以只配置一個人即可,其他人則是通過關注企業號得到消息推送;若是郵件,則需要給每個人配置接收郵件的郵箱等信息;
4、其他
可以看到上述的報警內容引用了大寫的英文字段,那即是宏變量;另外,還有圖表、事件等,這些還需要再深入學習的。
四、zabbix監控tomcat實現
對tomcat的監控需要開啓tomcat的jmx端監控,首先我們需要了解一下報警機制,zabbix_server安裝時要配置zabbix_java, 然後在zabbx_java開啓JavaGateway,端口爲10052;Tomcat在catalina.sh中配置JMX, 且開啓54321端口提供性能數據。數據獲取:zabbix_java<-->JavaGateway:10052<-->Tomcat:12345,具體實現步驟如下
1、zabbix_server端
(1)編譯安裝zabbix server時需要加上--enable-java以支持jmx監控,若沒有加,則重新編譯安裝,下面的編譯安裝,爲加上了的編譯命令
# ./configure --prefix=/usr/local/zabbix-3.0.0/  --enable-server  --enable-agent  --with-mysql  --with-net-snmp  --with-libcurl  --with-libxml2  --enable-java
(2)修改Java-gateway的配置文件並啓動zabbix_java
配置文件路徑爲/data/zabbix/zabbix_java/sbin/zabbix_java/settings.sh,啓用以下參數:
LISTEN_IP="0.0.0.0"       #監聽地址
LISTEN_PORT=10052      #監聽端口
START_POLLERS=5        # 開啓的工作線程數(必須大於等於後面zabbix_server.conf文件的StartJavaPollers參數)
# /usr/local/zabbix-3.0.0/sbin/zabbix_java/startup.sh 
(3)配置zabbix_server.conf並重啓zabbix_server,vim ./zabbix_server.conf,增加如下配置項
JavaGateway=127.0.0.1
JavaGatewayPort=10052
StartJavaPollers=5
然後重啓zabbix_server
2、tomcat客戶端配置
(1)下載catalina-jmx-remote.jar
wget  http://archive.apache.org/dist/tomcat/tomcat-8/v8.0.36/bin/extras/catalina-jmx-remote.jar  #我的tomcat版本是8.0.36
(2)將下載好的文件存放到tomcat子目錄目錄lib錄下
mv catalina-jmx-remote.jar /usr/local/tomcat/apache-tomcat-7.0.53/lib/
(3)修改啓動腳本文件
cd /usr/local/tomcat/apache-tomcat-7.0.53/bin
vim catalina.sh
(4)在# ----- Execute The Requested Command -----------------下面添加如下內容:
export CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=54321
 -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=10.2.2.155" 
-----備註(x.x.x.x是客戶端ip地址,即tomcat本身ip地址,我的內網IP爲10.2.2.155)
-----這裏的Port是自己定義的port端口,可以自己定義,不要和tomcat主機上其他的端口衝突即可,這裏設置爲54321
(5)重啓tomcat
3、測試是否可以獲取數據
在zabbix_server端進行測試,首先下載cmdline-jmxclient-0.10.3.jar這個包,命令行下測試爲
java -jar cmdline-jmxclient-0.10.3.jar  - 10.2.2.155:54321  java.lang:type=Memory  NonHeapMemoryUsage
06/11/2015 15:49:30 +0800 org.archive.jmx.Client NonHeapMemoryUsage:
committed: 26214400
init: 2555904
max: -1
used: 25515648
有以上信息展示,說明配置沒問題
4、在server的web界面上"配置-主機"中對監控的tomcat主機開啓jmx接口,如下

5、添加模板
對於tomcat主機添加監控模板;
6、特別說明,對tomcat是否存活的監控,是使用jmx接口,通過對堆內存的監控來反映tomcat是否進行,這裏因爲是使用jmx接口,因此不需要對agent.conf進行修改
添加監控項:jmx["java.lang:type=Memory","HeapMemoryUsage.used"]
添加觸發器:{CustomTomcat:jmx["java.lang:type=Memory","HeapMemoryUsage.used"].nodata(3m)}=1,若達到條件(堆內存最近3分鐘都沒有數據),則“本機tomcat已3分鐘不可用”
五、對zabbix學習的一些心得
1、模板
模板中有的監控項,若是需要再zabbix端進行自定義參數但是又沒有做這些自定義參數的,則該監控項在該模板中是“已啓用”,但是某主機添加該模板後,列表中會出現“不支持的”;
2、觸發器和監控項
都是可以自己去定義的,自己定義的監控項,在agent端一定要定義對應的參數;
3、觸發器報警的條件
報警即發送消息,條件爲“觸發器表達式”滿足,例如,若表達式中寫的是=1,則值=1時即發送消息;若寫的是<1,則值<1時即發送消息;
4、報警媒介心跳檢測
可以每天檢測該媒介是否正常(也即心跳檢測),因此可以創建一個action條件
                                      “維護狀態=非維護”&&“觸發器 =zabbix server監控模板: zabbix3.2自我檢測(date)
此處的“zabbix3.2自我檢測”這個觸發器中寫明表達式“{Template App Zabbix Server:date.status.prev()}=1030”
因此在每天的10點半,只要滿足條件,則發送消息給管理員,每天檢測報警通道的心跳;
5、腳本
自定義參數中,key後面跟的可以是命令,也可以是腳本,這個腳本有很多種,包括檢測nginx狀態、mysql性能等很多,自己還不會寫,要學習;





 
   








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章