前文咱們瞭解了zabbix的被動、主動以及web監控相關話題,回顧請參考http://www.javashuo.com/article/p-ymegplfo-nv.html;今天咱們來了解下zabbix使用SNMP和JMX信道採集數據的相關話題;html
一、SNMP協議介紹java
SNMP是英文「Simple Network Management Protocol」的縮寫,中文意思是「簡單網絡管理協議,SNMP是一種簡單網絡管理協議,它屬於TCP/IP五層協議中的應用層協議,用於網絡管理的協議,SNMP主要用於網絡設備的管理。SNMP的基本思想:爲不一樣種類的設備、不一樣廠家生產的設備、不一樣型號的設備,定義爲一個統一的接口和協議,使得管理員能夠是使用統一的外觀面對這些須要管理的網絡設備進行管理。經過網絡,管理員能夠管理位於不一樣物理空間的設備,從而大大提升網絡管理的效率,簡化網絡管理員的工做。SNMP協議是TCP/IP協議簇的一個應用層協議,在1988年被制定,並被Internet體系結構委員會(IAB)採納做爲一個短時間的網絡管理解決方案,因爲SNMP的簡單性,在Internet時代獲得了蓬勃的發展,1992年發佈了SNMPv2版本,以加強SNMPv1的安全性和功能,SNMP的協議版本目前有SNMP v一、SNMP v2c和SNMP v3三種版本,其具體差異以下:node
SNMP v1採用社區名(Community Name)認證,社區名用來定義SNMP NMS和SNMP Agent的關係,若是SNMP報文攜帶的社區名沒有獲得設備的承認,該報文將被丟棄,社區名起到了相似於密碼的做用,用來限制SNMP NMS對SNMP Agent的訪問。ios
SNMP v2c也採用社區名認證,它在兼容SNMP v1的同時又擴充了SNMP v1的功能,它提供了更多的操做類型(GetBulk和InformRequest)、支持更多的數據類型(Counter64等)、提供了更豐富的錯誤代碼且可以更細緻地區分錯誤。web
SNMP v3提供了基於用戶的安全模型(USM,User-Based Security Model)的認證機制,用戶能夠設置認證和加密功能,認證用於驗證報文發送方的合法性,避免非法用戶的訪問,加密則是對NMS和Agent之間的傳輸報文進行加密,以避免被竊聽。經過有無認證和有無加密等功能組合,能夠爲SNMP NMS和SNMP Agent之間的通訊提供更高的安全性。sql
二、SNMP工做機制apache
SNMP的工做機制SNMP網絡元素分爲NMS和Agent兩種: NMS(Network Management Station,網絡管理站)是運行SNMP客戶端程序的工做站,可以提供很是友好的人機交互界面,方便網絡管理員完成絕大多數的網絡管理工做。 Agent是駐留在設備上的一個進程,負責接收、處理來自NMS的請求報文。在一些緊急狀況下,如接口狀態發生改變等,Agent也會主動通知NMS。 NMS是SNMP網絡的管理者,Agent是SNMP網絡的被管理者。NMS和Agent之間經過SNMP協議來交互管理信息。tomcat
三、SNMP數據交互安全
SNMP管理進程與代理進程以前爲了交互信息,定義了5種報文:bash
get-request操做:從代理進程處提取一個或多個參數值。
get-next-request操做:從代理進程處提取一個或多個參數的下一個參數值。
set-request操做:設置代理進程的一個或多個參數值。
get-response操做:返回的一個或多個參數值。這個操做是由代理進程發出的。
trap 操做:代理進程主動發出的報文,通知管理進程有某些事情發生。
SNMP數據交互示意圖
四、SNMP組織結構
一套完整的SNMP系統主要包括如下幾個方面:SNMP報文協議。管理信息結構(SMI, Structure ofManagement Information),一套公用的結構和表示符號。管理信息庫(MIB,Management Information Base),管理信息庫包含全部代理進程的全部可被查詢和修改的參數。 OID(Object Identifiers),一個OID是一個惟一的鍵值對,用於標識具體某一個設備的某個具體信息(對象標識),如端口信息、設備名稱等。
五、SNMP MIB
所謂(MIB)管理信息庫,就是全部代理進程包含的、而且可以被管理進程進行查詢和設置的信息的集合。MIB是基於對象標識樹的,對象標識是一個整數序列,中間以"."分割,這些整數構成一個樹型結構,相似於 DNS或Unix的文件系統,MIB被劃分爲若干個組,如system、 interfaces、 at(地址轉換)和ip組等。iso.org.dod.internet.private.enterprises( 1.3.6.1.4.1)這個標識,是給廠家自定義而預留的,好比華爲的爲1.3.6.1.4.1.2011,華三的爲1.3.6.1.4.1.25506。
Centos 部分經常使用的OID
六、在Linux上啓用SNMP
[root@node05 ~]# yum install -y net-snmp
提示:以上安裝是安裝snmp agent,運行在被監控端;
安裝snmp客戶端工具
[root@node05 ~]# yum install -y net-snmp-utils
配置snmp容許那些社區的客戶端獲取數據,以及對snmp有哪些權限,容許獲取那些數據
提示:以上配置表示,首先將社區名public映射爲一個安全的名稱 notConfigUser;其次映射安全名 notConfigUser映射爲組名notConfigGroup,並將安全模式v1和v2c加入到組內,這表示只要在這個組內的成員都兼容v1 和v2c兩個版本的安全模式;第三是建立一個視圖,名爲systemview,並配置容許那些葉子節點的oid加入到此視圖;最後受權notConfigGroup組裏的任何用戶,用任何安全模式都對systemview擁有隻讀權限,不擁有寫權限,也沒有例外;簡單點講以上配置表示只要是public社區的用戶,都將識別爲notConfigGroup裏的用戶,而對應組裏的用戶擁有systemview受權的子樹只讀權限;這裏須要注意,子樹就是咱們要獲取的數據對象的標識(oid);咱們受權只須要修改對應systemview擁有那些子樹便可;
示例:受權systemview視圖擁有對操做系統cpu負載1分鐘的數據
提示:只須要將對應cpu1分鐘負載對應oid加入到systemview視圖便可;
啓動snmpd
[root@node05 ~]# systemctl start snmpd.service [root@node05 ~]# ss -unl State Recv-Q Send-Q Local Address:Port Peer Address:Port UNCONN 0 0 *:161 *:* UNCONN 0 0 127.0.0.1:323 *:* UNCONN 0 0 ::1:323 :::* [root@node05 ~]#
提示:請確保udp的161端口正常監聽;
驗證:使用snmpget工具來獲取node05上的cpu1分鐘負載數據
[root@node05 ~]# snmpget -c public -v 2c node05 .1.3.6.1.4.1.2021.10.1.3.1 UCD-SNMP-MIB::laLoad.1 = STRING: 0.00 [root@node05 ~]# uptime 20:57:49 up 35 min, 1 user, load average: 0.00, 0.02, 0.05 [root@node05 ~]#
提示:能夠看到用snmpget工具獲取的數據和咱們使用uptime命令獲取的數據同樣;指定獲取數據可使用oid來指定,也可使用mib來獲取;
[root@node05 ~]# snmpget -c public -v 2c node05 UCD-SNMP-MIB::laLoad.1 UCD-SNMP-MIB::laLoad.1 = STRING: 0.00 [root@node05 ~]#
使用snmpwalk工具獲取非葉子節點下全部數據
首先受權snmp可以看到對應子樹
提示:以上紅框中內容表示systemview包含.1.3.6.1.2.1.25這個子樹,這意味着其下的全部子樹能夠看到;
重啓snmpd
[root@node05 ~]# systemctl restart snmpd.service [root@node05 ~]# ss -unl State Recv-Q Send-Q Local Address:Port Peer Address:Port UNCONN 0 0 *:161 *:* UNCONN 0 0 127.0.0.1:323 *:* UNCONN 0 0 ::1:323 :::* [root@node05 ~]#
獲取系統進程列表
[root@node05 ~]# snmpwalk -c public -v 2c node05 .1.3.6.1.2.1.25.4.2.1.2 HOST-RESOURCES-MIB::hrSWRunName.1 = STRING: "systemd" HOST-RESOURCES-MIB::hrSWRunName.2 = STRING: "kthreadd" HOST-RESOURCES-MIB::hrSWRunName.3 = STRING: "ksoftirqd/0" HOST-RESOURCES-MIB::hrSWRunName.5 = STRING: "kworker/0:0H" HOST-RESOURCES-MIB::hrSWRunName.7 = STRING: "migration/0" HOST-RESOURCES-MIB::hrSWRunName.8 = STRING: "rcu_bh" HOST-RESOURCES-MIB::hrSWRunName.9 = STRING: "rcu_sched" HOST-RESOURCES-MIB::hrSWRunName.10 = STRING: "watchdog/0" HOST-RESOURCES-MIB::hrSWRunName.11 = STRING: "watchdog/1" HOST-RESOURCES-MIB::hrSWRunName.12 = STRING: "migration/1" HOST-RESOURCES-MIB::hrSWRunName.13 = STRING: "ksoftirqd/1" HOST-RESOURCES-MIB::hrSWRunName.14 = STRING: "kworker/1:0" HOST-RESOURCES-MIB::hrSWRunName.15 = STRING: "kworker/1:0H" HOST-RESOURCES-MIB::hrSWRunName.17 = STRING: "kdevtmpfs" HOST-RESOURCES-MIB::hrSWRunName.18 = STRING: "netns" HOST-RESOURCES-MIB::hrSWRunName.19 = STRING: "khungtaskd" HOST-RESOURCES-MIB::hrSWRunName.20 = STRING: "writeback" HOST-RESOURCES-MIB::hrSWRunName.21 = STRING: "kintegrityd" HOST-RESOURCES-MIB::hrSWRunName.22 = STRING: "bioset" HOST-RESOURCES-MIB::hrSWRunName.23 = STRING: "kblockd" HOST-RESOURCES-MIB::hrSWRunName.24 = STRING: "md" HOST-RESOURCES-MIB::hrSWRunName.25 = STRING: "kworker/0:1" HOST-RESOURCES-MIB::hrSWRunName.30 = STRING: "kswapd0" HOST-RESOURCES-MIB::hrSWRunName.31 = STRING: "ksmd" HOST-RESOURCES-MIB::hrSWRunName.32 = STRING: "khugepaged" HOST-RESOURCES-MIB::hrSWRunName.33 = STRING: "crypto" HOST-RESOURCES-MIB::hrSWRunName.41 = STRING: "kthrotld" HOST-RESOURCES-MIB::hrSWRunName.42 = STRING: "kworker/u256:1" HOST-RESOURCES-MIB::hrSWRunName.43 = STRING: "kmpath_rdacd" HOST-RESOURCES-MIB::hrSWRunName.44 = STRING: "kworker/1:1" HOST-RESOURCES-MIB::hrSWRunName.45 = STRING: "kpsmoused" HOST-RESOURCES-MIB::hrSWRunName.47 = STRING: "ipv6_addrconf" HOST-RESOURCES-MIB::hrSWRunName.66 = STRING: "deferwq" HOST-RESOURCES-MIB::hrSWRunName.98 = STRING: "kauditd" HOST-RESOURCES-MIB::hrSWRunName.265 = STRING: "kworker/1:2" HOST-RESOURCES-MIB::hrSWRunName.282 = STRING: "ata_sff" HOST-RESOURCES-MIB::hrSWRunName.283 = STRING: "scsi_eh_0" HOST-RESOURCES-MIB::hrSWRunName.284 = STRING: "scsi_tmf_0" HOST-RESOURCES-MIB::hrSWRunName.285 = STRING: "scsi_eh_1" HOST-RESOURCES-MIB::hrSWRunName.286 = STRING: "scsi_tmf_1" HOST-RESOURCES-MIB::hrSWRunName.289 = STRING: "mpt_poll_0" HOST-RESOURCES-MIB::hrSWRunName.290 = STRING: "mpt/0" HOST-RESOURCES-MIB::hrSWRunName.298 = STRING: "scsi_eh_2" HOST-RESOURCES-MIB::hrSWRunName.299 = STRING: "scsi_tmf_2" HOST-RESOURCES-MIB::hrSWRunName.300 = STRING: "ttm_swap" HOST-RESOURCES-MIB::hrSWRunName.375 = STRING: "kdmflush" HOST-RESOURCES-MIB::hrSWRunName.376 = STRING: "bioset" HOST-RESOURCES-MIB::hrSWRunName.387 = STRING: "kdmflush" HOST-RESOURCES-MIB::hrSWRunName.388 = STRING: "bioset" HOST-RESOURCES-MIB::hrSWRunName.401 = STRING: "bioset" HOST-RESOURCES-MIB::hrSWRunName.402 = STRING: "xfsalloc" HOST-RESOURCES-MIB::hrSWRunName.403 = STRING: "xfs_mru_cache" HOST-RESOURCES-MIB::hrSWRunName.404 = STRING: "xfs-buf/dm-0" HOST-RESOURCES-MIB::hrSWRunName.405 = STRING: "xfs-data/dm-0" HOST-RESOURCES-MIB::hrSWRunName.406 = STRING: "xfs-conv/dm-0" HOST-RESOURCES-MIB::hrSWRunName.407 = STRING: "xfs-cil/dm-0" HOST-RESOURCES-MIB::hrSWRunName.408 = STRING: "xfs-reclaim/dm-" HOST-RESOURCES-MIB::hrSWRunName.409 = STRING: "xfs-log/dm-0" HOST-RESOURCES-MIB::hrSWRunName.410 = STRING: "xfs-eofblocks/d" HOST-RESOURCES-MIB::hrSWRunName.411 = STRING: "xfsaild/dm-0" HOST-RESOURCES-MIB::hrSWRunName.467 = STRING: "kworker/1:1H" HOST-RESOURCES-MIB::hrSWRunName.468 = STRING: "kworker/0:1H" HOST-RESOURCES-MIB::hrSWRunName.482 = STRING: "systemd-journal" HOST-RESOURCES-MIB::hrSWRunName.506 = STRING: "lvmetad" HOST-RESOURCES-MIB::hrSWRunName.511 = STRING: "systemd-udevd" HOST-RESOURCES-MIB::hrSWRunName.544 = STRING: "xfs-buf/sda1" HOST-RESOURCES-MIB::hrSWRunName.545 = STRING: "xfs-data/sda1" HOST-RESOURCES-MIB::hrSWRunName.546 = STRING: "xfs-conv/sda1" HOST-RESOURCES-MIB::hrSWRunName.547 = STRING: "xfs-cil/sda1" HOST-RESOURCES-MIB::hrSWRunName.548 = STRING: "xfs-reclaim/sda" HOST-RESOURCES-MIB::hrSWRunName.549 = STRING: "xfs-log/sda1" HOST-RESOURCES-MIB::hrSWRunName.550 = STRING: "xfs-eofblocks/s" HOST-RESOURCES-MIB::hrSWRunName.551 = STRING: "xfsaild/sda1" HOST-RESOURCES-MIB::hrSWRunName.554 = STRING: "nfit" HOST-RESOURCES-MIB::hrSWRunName.598 = STRING: "kworker/u257:0" HOST-RESOURCES-MIB::hrSWRunName.599 = STRING: "hci0" HOST-RESOURCES-MIB::hrSWRunName.600 = STRING: "hci0" HOST-RESOURCES-MIB::hrSWRunName.602 = STRING: "kworker/u257:2" HOST-RESOURCES-MIB::hrSWRunName.624 = STRING: "auditd" HOST-RESOURCES-MIB::hrSWRunName.648 = STRING: "rsyslogd" HOST-RESOURCES-MIB::hrSWRunName.649 = STRING: "systemd-logind" HOST-RESOURCES-MIB::hrSWRunName.650 = STRING: "polkitd" HOST-RESOURCES-MIB::hrSWRunName.651 = STRING: "dbus-daemon" HOST-RESOURCES-MIB::hrSWRunName.653 = STRING: "chronyd" HOST-RESOURCES-MIB::hrSWRunName.660 = STRING: "NetworkManager" HOST-RESOURCES-MIB::hrSWRunName.662 = STRING: "irqbalance" HOST-RESOURCES-MIB::hrSWRunName.669 = STRING: "crond" HOST-RESOURCES-MIB::hrSWRunName.674 = STRING: "agetty" HOST-RESOURCES-MIB::hrSWRunName.877 = STRING: "tuned" HOST-RESOURCES-MIB::hrSWRunName.976 = STRING: "sshd" HOST-RESOURCES-MIB::hrSWRunName.1029 = STRING: "zabbix_agentd" HOST-RESOURCES-MIB::hrSWRunName.1030 = STRING: "zabbix_agentd" HOST-RESOURCES-MIB::hrSWRunName.1031 = STRING: "zabbix_agentd" HOST-RESOURCES-MIB::hrSWRunName.1032 = STRING: "zabbix_agentd" HOST-RESOURCES-MIB::hrSWRunName.1033 = STRING: "zabbix_agentd" HOST-RESOURCES-MIB::hrSWRunName.1034 = STRING: "zabbix_agentd" HOST-RESOURCES-MIB::hrSWRunName.1074 = STRING: "master" HOST-RESOURCES-MIB::hrSWRunName.1075 = STRING: "pickup" HOST-RESOURCES-MIB::hrSWRunName.1076 = STRING: "qmgr" HOST-RESOURCES-MIB::hrSWRunName.1240 = STRING: "sshd" HOST-RESOURCES-MIB::hrSWRunName.1242 = STRING: "bash" HOST-RESOURCES-MIB::hrSWRunName.1333 = STRING: "kworker/u256:2" HOST-RESOURCES-MIB::hrSWRunName.1666 = STRING: "kworker/0:0" HOST-RESOURCES-MIB::hrSWRunName.1732 = STRING: "anacron" HOST-RESOURCES-MIB::hrSWRunName.1883 = STRING: "kworker/0:2" HOST-RESOURCES-MIB::hrSWRunName.1960 = STRING: "snmpd" HOST-RESOURCES-MIB::hrSWRunName.1970 = STRING: "snmpwalk" [root@node05 ~]#
配置zabbix web使用snmp信道採集node05上的數據,並連接Template OS Linux SNMPv2模板
連接模板
查看主機列表,看看node05對應的SNMP信道是否變綠了?
添加snmp item
提示:在主機列表中找到對應主機上的item,而後點擊create item ,填寫好item名稱,選擇SNMP v2 agent;這裏的key就只是起一個標識做用,儘可能不要和已有的內建key和指定key重複便可;最重要的是要填寫好對應主機的snmp監聽的ip地址和端口,以及要採集數據對應的oid或mib和社區名稱;社區名稱能夠寫宏,默認就有一個{$SNMP_COMMUNITY}其值就是public;調用對應的宏也是能夠的;
查看咱們定義的item是否採集到數據呢?
以上就是zabbix使用snmp信道採集數據配置和演示;接下咱們再來講說zabbix 使用jmx信道監控java程序
jmx是Java Management Extensions的縮寫,即Java管理擴展,它能夠跨平臺實現靈活的開發無縫集成的系統、網絡和服務管理應用。在zabbix 上使用jmx信道採集對應java程序的相關指標數據,首先zabbix原生是不支持jmx,它依賴zabbix-java-gateway;其次對應被監控主機上運行的java程序要打開jmx功能;zabbix-java-gateway咱們能夠理解爲zabbix jmx的代理服務,它負責zabbix server 委派給它使用jmx信道採集數據,將採集到數據發送給zabbix server ;因此要想使用jmx信道來採集數據,首先咱們得安裝並啓動zabbix java gateway服務,而後配置zabbix server ,告訴zabbix server java gateway服務地址和端口;最後在對應的被監控端開啓jmx;
安裝zabbix java gateway
[root@node04 ~]# yum install -y zabbix-java-gateway
提示:這個服務能夠安裝在zabbix server 上,也能夠獨立一臺服務器,也可安裝在被監控端;總之zabbix server 可以正常和它通訊便可;
配置zabbix java gateway
[root@node04 ~]# grep -Ei "^[a-z]" /etc/zabbix/zabbix_java_gateway.conf LISTEN_IP="0.0.0.0" LISTEN_PORT=10052 PID_FILE="/var/run/zabbix/zabbix_java.pid" START_POLLERS=5 TIMEOUT=3 [root@node04 ~]#
提示:以上是java gateway的默認配置,保持默認配置便可;若是後續以爲java gateway的poller少了,能夠更改;
啓動zabbix java gateway
[root@node04 ~]# systemctl start zabbix-java-gateway.service [root@node04 ~]# ss -tnl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:6379 *:* LISTEN 0 128 *:80 *:* LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 *:10050 *:* LISTEN 0 128 :::80 :::* LISTEN 0 128 :::22 :::* LISTEN 0 100 ::1:25 :::* LISTEN 0 50 :::10052 :::* [root@node04 ~]#
提示:默認java gateway監聽在10052端口,啓動後請確保該端口處於監聽便可;
配置zabbix server
提示:在zabbix server配置文件中找到java gateway的配置,配置Java gateway的ip地址,端口,以及啓動的poller數量和超時時間便可;
重啓zabbix server
[root@node03 ~]# systemctl restart zabbix-server.service [root@node03 ~]# 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 :::22 :::* LISTEN 0 100 ::1:25 :::* LISTEN 0 128 :::10051 :::* [root@node03 ~]#
提示:請確保zabbix server可以正常啓動起來;對應端口可以正常處於監聽狀態;
在node05上安裝tomcat服務
[root@node05 ~]# yum install -y tomcat-admin-webapps tomcat-webapps tomcat-docs-webapp tomcat
開啓tomcat的jmx功能
完整配置文件內容
[root@node05 ~]# grep -Ei "^[a-z]" /etc/tomcat/tomcat.conf TOMCAT_CFG_LOADED="1" TOMCATS_BASE="/var/lib/tomcats/" JAVA_HOME="/usr/lib/jvm/jre" CATALINA_HOME="/usr/share/tomcat" CATALINA_TMPDIR="/var/cache/tomcat/temp" CATALINA_OPTS="-Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.168.0.45" JAVA_OPTS="-Djavax.sql.DataSource.Factory=org.apache.commons.dbcp.BasicDataSourceFactory" SECURITY_MANAGER="false" [root@node05 ~]
啓動tomcat
[root@node05 ~]# systemctl start tomcat [root@node05 ~]# ss -tnl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:80 *:* LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 *:10050 *:* LISTEN 0 128 127.0.0.1:199 *:* LISTEN 0 100 :::8080 :::* LISTEN 0 128 :::80 :::* LISTEN 0 128 :::22 :::* LISTEN 0 50 :::12345 :::* LISTEN 0 100 ::1:25 :::* LISTEN 0 128 :::10050 :::* LISTEN 0 1 ::ffff:127.0.0.1:8005 :::* LISTEN 0 50 :::44229 :::* LISTEN 0 50 :::35589 :::* LISTEN 0 100 :::8009 :::* [root@node05 ~]#
提示:請確保對應的端口都處於監聽狀態,jmx咱們剛纔指定的是12345端口,默認在zabbix使用的端口也是12345,因此這兩個端口保持一致便可;
在zabbix web上配置node05上使用jmx接口
連接模板
查看node05上的jmx信道是否變綠?
查看是否採集到對應模板上的監控項數據呢?
提示:能夠看到咱們連接的模板,對應不少監控項都採集到數據了;說明咱們配置使用jmx採集數據沒有什麼問題;