jmx數據採集數據存儲在哪裡
『壹』 java的相關技術
JDBC(Java Database Connectivity)提供連接各種關系資料庫的統一介面,作為數據源,可以為多種關系資料庫提供統一訪問,它由一組用Java語言編寫的類和介面組成。JDBC為工具/資料庫開發人員提供了一個標準的API,據此可以構建更高級的工具和介面,使資料庫開發人員能夠用純Java API 編寫資料庫應用程序,同時,JDBC也是個商標名。 EJB(Enterprise JavaBeans)使得開發者方便地創建、部署和管理跨平台的基於組件的企業應用。 Java RMI(Java Remote Method Invocation)用來開發分布式Java應用程序。一個Java對象的方法能被遠程Java虛擬機調用。這樣,遠程方法激活可以發生在對等的兩端,也可以發生在客戶端和伺服器之間,只要雙方的應用程序都是用Java寫的。 Java IDL(Java Interface Definition Language) 提供與CORBA(Common Object Request Broker Architecture)的無縫的互操作性。這使得Java能集成異構的商務信息資源。 JNDI(Java Naming and Directory Interface)提供從Java平台到的統一的無縫的連接。這個介面屏蔽了企業網路所使用的各種命名和目錄服務。 JMAPI(Java Management API)為異構網路上系統、網路和服務管理的開發提供一整套豐富的對象和方法。 JMS(Java Message Service)提供企業消息服務,如可靠的消息隊列、發布和訂閱通信、以及有關推拉(Push/Pull)技術的各個方面。 JTS(Java transaction Service)提供存取事務處理資源的開放標准,這些事務處理資源包括事務處理應用程序、事務處理管理及監控。 JMF(Java Media Framework API),她可以幫助開發者把音頻、視頻和其他一些基於時間的媒體放到Java應用程序或applet小程序中去,為多媒體開發者提供了捕捉、回放、編解碼等工具,是一個彈性的、跨平台的多媒體解決方案。 Annotation(Java Annotation),在已經發布的JDK1.5(tiger)中增加新的特色叫Annotation。Annotation提供一種機制,將程序的元素如:類,方法,屬性,參數,本地變數,包和元數據聯系起來。這樣編譯器可以將元數據存儲在Class文件中。這樣虛擬機和其它對象可以根據這些元數據來決定如何使用這些程序元素或改變它們的行為。
在Java技術中,值得關注的還有JavaBeans,它是一個開放的標準的組件體系結構,它獨立於平台,但使用Java語言。一個JavaBean是一個滿足JavaBeans規范的Java類,通常定義了一個現實世界的事物或概念。一個JavaBean的主要特徵包括屬性、方法和事件。通常,在一個支持JavaBeans規范的開發環境(如Sun Java Studio 和IBM VisualAge for Java)中,可以可視地操作JavaBean,也可以使用JavaBean構造出新的JavaBean。JavaBean的優勢還在於Java帶來的可移植性。EJB (Enterprise JavaBeans) 將JavaBean概念擴展到Java服務端組件體系結構,這個模型支持多層的分布式對象應用。除了JavaBeans,典型的組件體系結構還有DCOM和CORBA,關於這些組件體系結構的深入討論超出了本書的范圍。 JavaFXSun剛剛發布了JavaFX技術的正式版,它使您能利用JavaFX 編程語言開發富互聯網應用程序(RIA)。JavaFX Script編程語言(以下稱為JavaFX)是Sun微系統公司開發的一種declarative,staticallytyped(聲明性的、靜態類型)腳本語言。JavaFX技術有著良好的前景,包括可以直接調用Java API的能力。因為JavaFXScript是靜態類型,它同樣具有結構化代碼、重用性和封裝性,如包、類、繼承和單獨編譯和發布單元,這些特性使得使用Java技術創建和管理大型程序變為可能。
JavaFX從它2007年發布以來,表現一直差強人意。Oracle收購了Sun之後,在JavaFX中投入了大量的精力進行推廣和更新。JavaFX比較出名的應用應該是在2010年溫哥華冬奧會上,調整了JavaFX中的很多概念,以及重新設計和實現了很多重要組件之後,得到的就是現在的JavaFX 2.0。JavaFX 2.0的beta版已經發布,正式版則定於2010年第3季度發布。JavaFX 2.0的新特性使得開發人員應該需要重新審視它在RIA開發領域中的位置。在很多情況下,JavaFX 2.0也會是不錯的選擇。 JMX(Java Management Extensions,即Java管理擴展)是一個為應用程序、設備、系統等植入
管理功能的框架。JMX可以跨越一系列異構操作系統平台、系統體系結構和網路傳輸協議,靈活的開發無縫集成的系統、網路和服務管理應用。 JPA(Java Persistence API),JPA通過JDK 5.0註解或XML(標准通用標記語言的子集)描述對象-關系表的映射關系,並將運行期的實體對象持久化到資料庫中。 JSP(Java Server Pages)是由Sun Microsystems公司倡導、許多公司參與一起建立的一種動態網頁技術標准。JSP技術有點類似ASP技術,它是在傳統的網頁HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP標記(tag),從而形成JSP文件(*.jsp)。 用JSP開發的Web應用是跨平台的,既能在Linux下運行,也能在其他操作系統上運行。 Spring Framework【Java開源J2EE框架】
Spring是一個解決了許多在J2EE開發中常見的問題的強大框架。Spring提供了管理業務對象的一致方法並且鼓勵了注入對介面編程而不是對類編程的良好習慣。Spring的架構基礎是基於使用JavaBean屬性的Inversion of Control容器。然而,這僅僅是完整圖景中的一部分:Spring在使用IoC容器作為構建完關注所有架構層的完整解決方案方面是獨一無二的。Spring提供了唯一的數據訪問抽象,包括簡單和有效率的JDBC框架,極大的改進了效率並且減少了可能的錯誤。Spring的數據訪問架構還集成了Hibernate和其他O/R mapping解決方案。Spring還提供了唯一的事務管理抽象,它能夠在各種底層事務管理技術,例如JTA或者JDBC事務提供一個一致的編程模型。Spring提供了一個用標准Java語言編寫的AOP框架,它給POJOs提供了聲明式的事務管理和其他企業事務--如果你需要--還能實現你自己的 aspects。這個框架足夠強大,使得應用程序能夠拋開EJB的復雜性,同時享受著和傳統EJB相關的關鍵服務。Spring還提供了可以和IoC容器集成的強大而靈活的MVCWeb框架。【SpringIDE:Eclipse平台下一個輔助開發插件】。
WebWork 【Java開源Web框架】
WebWork是由OpenSymphony組織開發的,致力於組件化和代碼重用的拉出式MVC模式J2EE Web框架。WebWork目前最新版本是2.1,WebWork2.x前身是Rickard Oberg開發的WebWork,但WebWork已經被拆分成了Xwork1和WebWork2兩個項目。Xwork簡潔、靈活功能強大,它是一個標準的Command模式實現,並且完全從web層脫離出來。Xwork提供了很多核心功能:前端攔截機(interceptor),運行時表單屬性驗證,類型轉換,強大的表達式語言(OGNL – the Object Graph Notation Language),IoC(Inversion of Control倒置控制)容器等。WebWork2建立在Xwork之上,處理HTTP的響應和請求。WebWork2使用ServletDispatcher將HTTP請求的變成Action(業務層Action類),session(會話)application(應用程序)范圍的映射,request請求參數映射。WebWork2支持多視圖表示,視圖部分可以使用JSP,Velocity,FreeMarker,JasperReports,XML等。在WebWork2.2中添加了對AJAX的支持,這支持是構建在DWR與Dojo這兩個框架的基礎之上。【EclipseWork:用於WebWork輔助開發的一個Eclipse插件】
Struts【Java開源Web框架】
Struts是一個基於SunJ2EE平台的MVC框架,主要是採用Servlet和JSP技術來實現的。由於Struts能充分滿足應用開發的需求,簡單易用,敏捷迅速,在過去的一年中頗受關注。Struts把Servlet、JSP、自定義標簽和信息資源(message resources)整合到一個統一的框架中,開發人員利用其進行開發時不用再自己編碼實現全套MVC模式,極大的節省了時間,所以說Struts是一個非常不錯的應用框架。【StrutsIDE:用於Struts輔助開發的一個Eclipse插件】
Hibernate 【Java開源持久層框架】
Hibernate是一個開放源代碼的對象關系映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱資料庫。Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程序實用,也可以在Servlet/JSP的Web應用中使用,最具革命意義的是,Hibernate可以在應用EJB的J2EE架構中取代CMP,完成數據持久化的重任。Eclipse平台下的Hibernate輔助開發工具:【Hibernate Synchronizer】【MiddlegenIDE】
JDiy 【Java極速開發框架. 開源】
JDiy是一款java極速開發框架,無需ORM,極少的代碼便可以完成資料庫的CRUD(增刪改查);
可同時用於javaEE或者javaSE開發環境;完美支持各大主流資料庫,如:MySQL, SQL Server, Oracle, DB2, PostgreSQL,SQLite;
同時JDiy內置一套精簡而不失強大的智能開發平台(開發者登錄後,隨心所欲地零代碼生成網站管理系
JFinal【Java極速WEB+ORM框架】
jfinal是基於 Java 語言的極速 WEB + ORM 框架,其核心設計目標是開發迅速、代碼量少、學習簡單、功能強大、輕量級、易擴展、Restful。在擁有Java語言所有優勢的同時再擁有ruby、python、php等動態語言的開發效率!主要特點1.MVC架構,設計精巧,使用簡單 2.遵循COC原則,零配置,無xml 3.獨創Db + Record模式,靈活便利 4.ActiveRecord支持,使資料庫開發極致快速 5.自動載入修改後的java文件,開發過程中無需重啟web server 6.AOP支持,攔截器配置靈活,功能強大 7.Plugin體系結構,擴展性強 8.多視圖支持,支持FreeMarker、JSP、Velocity9.強大的Validator後端校驗功能 10.功能齊全,擁有struts2的絕大部分功能 11.體積小僅218K,且無第三方依賴
Quartz 【Java開源Job調度】
Quartz是OpenSymphony開源組織在Job scheling領域又一個開源項目,它可以與J2EE與J2SE應用程序相結合也可以單獨使用。Quartz可以用來創建簡單或為運行十個,百個,甚至是好幾萬個Jobs這樣復雜的日程序表。Jobs可以做成標準的Java組件或EJBs。Quartz的最新版本為Quartz 1.5.0。
Velocity 【Java開源模板引擎】
Velocity是一個基於java的模板引擎(template engine)。它允許任何人僅僅簡單的使用模板語言(template language)來引用由java代碼定義的對象。當Velocity應用於web開發時,界面設計人員可以和java程序開發人員同步開發一個遵循MVC架構的web站點,也就是說,頁面設計人員可以只關注頁面的顯示效果,而由java程序開發人員關注業務邏輯編碼。Velocity將java代碼從web頁面中分離出來,這樣為web站點的長期維護提供了便利,同時也為我們在JSP和PHP之外又提供了一種可選的方案。Velocity的能力遠不止web站點開發這個領域,例如,它可以從模板(template)產生SQL和PostScript、XML,它也可以被當作一個獨立工具來產生源代碼和報告,或者作為其他系統的集成組件使用。Velocity也可以為Turbine web開發架構提供模板服務(template service)。Velocity+Turbine提供一個模板服務的方式允許一個web應用以一個真正的MVC模型進行開發。【VeloEclipse :Velocity在Eclipse平台下的一個輔助開發插件】
IBATIS 【Java開源持久層框架】
使用ibatis提供的ORM機制,對業務邏輯實現人員而言,面對的是純粹的Java對象,這一層與通過Hibernate 實現ORM 而言基本一致,而對於具體的數據操作,Hibernate 會自動生成SQL 語句,而ibatis 則要求開發者編寫具體的SQL語句。相對Hibernate等「全自動」ORM機制而言,ibatis 以SQL開發的工作量和資料庫移植性上的讓步,為系統設計提供了更大的自由空間。作為「全自動」ORM 實現的一種有益補充,ibatis 的出現顯得別具意義。
Compiere ERP&CRM 【Java開源ERP與CRM系統】
Compiere ERP&CRM為全球范圍內的中小型企業提供綜合型解決方案,覆蓋從客戶管理、供應鏈到財務管理的全部領域,支持多組織、多幣種、多會計模式、多成本計算、多語種、多稅制等國際化特性。易於安裝、易於實施、易於使用。只需要短短幾個小時,您就可以使用申購-采購-發票-付款、報價-訂單-發票-收款、產品與定價、資產管理、客戶關系、供應商關系、員工關系、經營業績分析等強大功能了。
Apache MINA 【java開源socket框架】
ApacheMINA是一個網路應用程序框架,用來幫助用戶簡單地開發高性能和高可擴展性的網路應用程序。它提供了一個通過java NIO在不同的傳輸例如TCP/IP和UDP/IP上抽象的事件驅動的非同步API。 IntelliJ IDEA【Java開發工具】
IntelliJ IDEA是JetBrains公司的產品,比老一代Java開發工具Eclipse更漂亮,更智能。Google官方Android開發工具Android Studio就是基於intellij IDEA開發的。Intellij IDEA擁有出色的界面設計,使用Darculah黑色界面主題會讓你愛不釋手。在智能代碼助手、代碼自動提示、重構、J2EE支持、Ant、JUnit、CVS整合、代碼審查、 創新的GUI設計等方面的功能可以說是超常的。IntelliJ IDEA分為商業版本,個人版本,與community社區版本。其中,community社區版本是免費的,但是功能性並不弱,對於學習者和個人開發者來說完全足夠了。
Eclipse 【Java開源開發工具】
Eclipse平台是IBM向開放源碼社區捐贈的開發框架,它之所以出名並不是因為IBM宣稱投入開發的資金總數 —4千萬美元,而是因為如此巨大的投入所帶來的成果:一個成熟的、精心設計的以及可擴展的體系結構。
NetBeans【Java開源開發工具】
NetBeans IDE 是一個為軟體開發者提供的自由、開源的集成開發環境。您可以從中獲得您所需要的所有工具,用Java、C/C++ 甚至是Ruby 來創建專業的桌面應用程序、企業應用程序、web 和移動應用程序。此IDE 可以在多種平台上運行,包括Windows、Linux、Mac OS X以及Solaris;它易於安裝且非常方便使用。
XPlanner【Java開源項目管理】
XPlanner 一個基於Web的XP團隊計劃和跟蹤工具。XP獨特的開發概念如iteration、user stories等,XPlanner都提供了相對應的的管理工具,XPlanner支持XP開發流程,並解決利用XP思想來開發項目所碰到的問題。XPlanner特點包括:簡單的模型規劃,虛擬筆記卡(Virtual note cards),iterations、user stories與工作記錄的追蹤,未完成stories將自動迭代,工作時間追蹤,生成團隊效率,個人工時報表,SOAP界面支持。
HSQLDB【Java開源DBMS資料庫】
HSQLDB(Hypersonic SQL)是純Java開發的關系型資料庫,並提供JDBC驅動存取數據。支持ANSI-92 標准SQL語法。而且他占的空間很小。大約只有160K,擁有快速的資料庫引擎。
Liferay【Java開源Portal門戶】
代表了完整的J2EE應用,使用了Web、EJB以及JMS等技術,特別是其前台界面部分使用Struts 框架技術,基於XML的portlet配置文件可以自由地動態擴展,使用了Web Services來支持一些遠程信息的獲取,使用Apache Lucene實現全文檢索功能。
JetSpeed 【Java開源Portal門戶】
Jetspeed是一個開放源代碼的企業信息門戶(EIP)的實現,使用的技術是Java和XML。用戶可以使用瀏覽器,支持WAP協議的手機或者其它的設備訪問Jetspeed架設的信息門戶獲取信息。Jetspeed扮演著信息集中器的角色,它能夠把信息集中起來並且很容易地提供給用戶。
JOnAS 【Java開源J2EE伺服器】
JOnAS是一個開放源代碼的J2EE實現,在ObjectWeb協會中開發。整合了Tomcat或Jetty成為它的Web容器,以確保符合Servlet 2.3和JSP 1.2規范。JOnAS伺服器依賴或實現以下的Java API:JCA、JDBC、JTA 、JMS、JMX、JNDI、JAAS、JavaMail。
JFox3.0 【Java開源J2EE伺服器】
JFox是Open Source Java EE Application Server,致力於提供輕量級的Java EE應用伺服器,從3.0開始,JFox提供了一個支持模塊化的MVC框架,以簡化EJB以及Web應用的開發! 如果您正在尋找一個簡單、輕量、高效、完善的Java EE開發平台,那麼JFox正是您需要的。 軟體架構作為一個概念,體現在技術和業務兩個方面。
從技術角度來說:軟體架構隨著技術的革新不斷地更新其內容,軟體架構建立於當前技術和一些基本原則的基礎之上。
基本原則:分層原則、模塊化原則、介面實現分離原則、細節隱藏原則、依賴倒置原則 平台
Java平台由Java虛擬機(Java Virtual Machine)和Java應用編程介面(Application ProgrammingInterface、簡稱API)構成。Java應用編程介面為此提供了一個獨立於操作系統的標准介面,可分為基本部分和擴展部分。在硬體或操作系統平台上安裝一個Java平台之後,Java應用程序就可運行。Java平台已經嵌入了幾乎所有的操作系統。這樣Java程序可以只編譯一次,就可以在各種系統中運行。Java應用 編程介面已經從1.1x版發展到1.2版。常用的Java平台基於Java1.5,最近版本為Java1.8。
Java分為三個體系JavaSE(Java2 Platform Standard Edition,java平台標准版),JavaEE(Java 2 Platform,Enterprise Edition,java平台企業版),JavaME(Java 2 Platform Micro Edition,java平台微型版)。
Java SE Java SE(Java Platform,Standard Edition)。Java SE 以前稱為J2SE。它允許開發和部署在桌面、伺服器、嵌入式環境和實時環境中使用的Java應用程序。Java SE 包含了支持Java Web 服務開發的類,並為Java Platform,Enterprise Edition(Java EE)提供基礎。 Java EE Java EE(Java Platform,Enterprise Edition)。這個版本以前稱為J2EE。企業版本幫助開發和部署可移植、健壯、可伸縮且安全的伺服器端 Java 應用程序。Java EE 是在Java SE 的基礎上構建的,它提供Web 服務、組件模型、管理和通信API,可以用來實現企業級的面向服務體系結構(service-oriented architecture,SOA)和Web 2.0 應用程序。 Java ME Java ME(Java Platform,Micro Edition)。這個版本以前稱為J2ME,也叫K-JAVA。Java ME 為在移動設備和嵌入式設備(比如手機、PDA、電視機頂盒和列印機)上運行的應用程序提供一個健壯且靈活的環境。Java ME 包括靈活的用戶界面、健壯的安全模型、許多內置的網路協議以及對可以動態下載的連網和離線應用程序的豐富支持。基於Java ME 規范的應用程序只需編寫一次,就可以用於許多設備,而且可以利用每個設備的本機功能。
『貳』 生產環境使用zabbix一般監控哪些
Zabbix支持的主要監控方式
Zabbix主要有Agent, Trapper, SNMP, JMX, IPMI這幾種監控方式,下面主要就監控原理和優缺點介紹一下這幾種方式。
Zabbix支持的主要監控方式
Agent監控方式
Trapper監控方式
SNMP監控方式
JMX監控方式
IPMI監控方式
結論
Agent監控方式
在Agent監控方式下,zabbix-agent會主動收集本機的監控信息並通過TCP協議與zabbix-server傳遞信息。Agent監控方式分為主動和被動模式。在被動模式下,zabbix-agent監聽10050埠,等待zabbix-server的監控信息收集信息請求;在主動模式下,zabbix-agent收集監控信息並通過10050埠主動將數據傳給zabbix-server所在伺服器的10051埠。
優點:
是zabbix最常用的監控方式,監測指標深入細致有針對性。
內置監控功能強大,內置監控項目豐富。
TCP方式實現通訊,可靠性也有保證。
缺點:
需要在被監控機器上安裝zabbix-agent客戶端,部署相對麻煩,最初需要逐個機器安裝代理軟體。
zabbix-agent客戶端運行在被監控機上,會收集本機信息。
Trapper監控方式
Trapper監控方式使用zabbix-sender程序主動向zabbix-server發送數據。key的名稱和發送的數據內容都可以靈活定義。發送的信息採用JSON格式,遵循zabbix-sender協議。可以自定義腳本利用zabbix-sender協議來向zabbix-server發送信息。
優點:
不需要在被監控機器安裝zabbix-agent
不收集被監控機器的信息
可以自定義發送的信息內容
可以使用自定義腳本發送信息
缺點:
需要自定義發送的信息內容
無內置監控項目
SNMP監控方式
SNMP全稱Simple Network Management Protocol,即網路管理協議,包括進程管理和被管理設備兩部分。作為一種國際通用的網路管理協議被廣泛的應用於對各種交換機,路由器等網路設備的管理上,而現在也越來越多被用於對伺服器的監控上。
優點:
伺服器一旦部署SNMPAgent,任何能實現SNMP協議的軟體都可對其進行監測。
通過這種手段進行監測不需知道被監測伺服器的用戶名與密碼,比較安尺沖爛全。
缺點:
很多伺服器並非默認安裝SNMPAgent,如果要通過這種方式監測則需要對所有伺服器安裝部署。
能監測的參數指標比較固定不夠深入,無法滿足用戶的特殊需求。
由於SNMP協議是通過UDP方式實現的,在網路狀況不佳的情況下其可靠性難以保證。
JMX監控方式
JMX,全稱Java Management Extensions,即Java管理拓展,是Java平台為應用程序,設備,系統等植入管理功能的框架。在zabbix中,JMX數據的獲取由zabbix-java-gateway代理程序來負責數據的采陵漏集判亮。
優點:
可以詳細地監控各類Java程序的運行狀態。
缺點:
被監控機上需要安裝zabbix-java-gateway
IPMI監控方式
IPMI,全稱Intelligent Platform Management Interface,即智能平台管理介面,原本是Intel架構中企業系統的周邊設備所採用的一種工業標准,後來成為業界通用的標准。用戶可以利用IPMI監視伺服器的物理特徵,如溫度,電壓,電扇工作狀態,電源供應以及機箱入侵等指標。
結論
根據以上對zabbix各主要監控方式的梳理,結論如下:
根據被監控機器的環境和客戶要求選用適當的監控方式,可同時配合使用多種監控方式。
有條件在被監控機上部署zabbix-agent客戶端時,該方法為第一選擇,因為其功能強大且配置相對簡便。
需要自定義腳本或者監控信息時,可使用trapper方式,即使用zabbix-sender程序或者自定義腳本遵循zabbix-sender協議,以JSON形式,通過TCP發送自定義信息。
『叄』 jmx的入門准備工作
JMX學習總結 1.產生背景
要了解 JMX,我們就必須對當前的 IT 管理系統有一個初步的了解。隨著企業 IT 規模的不斷增長,IT 資源(IT resource)數量不斷增加,IT 資源的分布也越來越分散。可以想像,甚至對於一家只有幾百台 PC 公司的 IT 管理人員來說,分發一個安全補丁並且保證其在每台 PC 上的安裝,如果只依賴人工來完成那簡直就是一場噩夢。這樣,IT 管理系統就應運而生。
然而,CPU、網卡、存儲陣列是 IT 資源;OS、MS Office、Oracle database、IBM Websphere 也是 IT 資源。IT 管理系統若要對這些 IT 資源進行管理,就必須對這些管理對象有所了解:形形色色的 IT 資源就像是說著不同語言的人:Oralce 資料庫表達內存緊張的方式和 Window XP 是絕然不同的, 而 IT 管理系統就像建造通天塔的經理,必須精通所有的語言, 這幾乎是一個不可能完成的任務。
2.JMX(Java Management Extensions,即Java管理擴展)是一個為應用程序、設備、系統等植入管理功能的框架。JMX可以跨越一系列異構操作系統平台、系統體系結構和網路傳輸協議,靈活的開發無縫集成的系統、網路和服務管理應用。
3.
4.框架結構
圖 1. 管理系統構架
上圖分析了管理系統的基本構架模式。其中 Agent / SubAgent 起到的就是翻譯的作用:把 IT 資源報告的消息以管理系統能理解的方式傳送出去。
為什麼需要 Agent 和 SubAgent 兩層體系呢?這里有兩個現實的原因:
管理系統一般是一個中央控制的控制軟體,而 SubAgent 直接監控一些資源,往往和這些資源分布在同一物理位置。當這些 SubAgent 把狀態信息傳輸到管理系統或者傳達管理系統的控制指令的時候,需要提供一些網路傳輸的功能。
管理系統的消息是有一定規范的,消息的翻譯本身是件復雜而枯燥的事情。
一般來說,管理系統會將同一物理分布或者功能類似的 SubAgent 分組成一組,由一個共用的 Agent 加以管理。在這個 Agent 里封裝了 1 和 2 的功能。
JMX 和管理系統
JMX 既是 Java 管理系統的一個標准,一個規范,也是一個介面,一個框架。圖 2 展示了 JMX 的基本架構。
圖 2. JMX 構架
JMX 是管理系統和資源之間的一個介面,它定義了管理系統和資源之間交互的標准。
javax.management.MBeanServer 實現了 Agent 的功能,以標準的方式給出了管理系統訪問 JMX 框架的介面。
javax.management.MBeans 實現了 SubAgent 的功能,以標準的方式給出了 JMX 框架訪問資源的介面。
從類庫的層次上看,JMX 包括了核心類庫 java.lang.management 和 javax.management 包。
java.lang.management 包提供了基本的 VM 監控功能,
javax.management 包則向用戶提供了擴展功能。
圖 3 JMX 的操作模型
5.概念
>>>> MBeanManaged Bean的簡稱,是一個被管理的java對象,在JMX中MBean代表一個被管理的資源(設備,應用程序等)實例。通過操作MBean暴露一系列方法和屬性來操作資源。MBean包含4種類型的MBean1.Standard MBeans標准MBeans的設計和實現是最簡單的,MBean介面中定義需要暴露的屬性和操作,約定MBean介面名字後添加後綴MBean,例如NameMBean.java,實現類名稱 name.java2.Dynamic MBeans動態MBeans 在運行期暴露自己的管理介面,MBean實現類需要實現一個特定的介面DynamicMBean。介面中的方法用來動態獲取MBean的屬性和方法方法如圖:3.Open MBean Open MBean也是一種dynamic MBeans,實現DynamicMBean介面。與dynamicMBean 不同的是 Open MBean使用了幾種預定義的數據類型提供了更復雜的metadata數據。 Open MBean和dynamic MBean的區別在於是否返回OpenMBeanInfo,它是MBeanInfo的子類4.Model MBean Model MBean也是一種dynamic MBeans,它是預制的、通用的和動態的 MBean 類,已經包含了所有必要預設行為的實現,並允許在運行時添加或覆蓋需要定製的那些實現,JMX規范規定該類必須實現為javax.management.modelmbean.RequiredModelMBean,模型管理構件具有以下新的特點:
1)持久性
定義了持久機制,可以利用Java的序列化或JDBC來存儲模型MBean的狀態。
2)通知和日誌功能
能記錄每一個發出的通知,並能自動發出屬性變化通知。
3)屬性值緩存
具有緩存屬性值的能力MBeanServer MBeanServer是MBean 的容器。MBeanServer管理這些MBean,並且通過代理外界對它們的訪問。MBeanServer提供了一種注冊機制,通過注冊Adaptor和Connector,以及MBean到MBeanServer,並且通過代理外界對它們的訪問。外界可以通過名字來得到相應的MBean實例。JMX agentAgent只是一個Java進程,它包括這個MBeanServer和一系列附加的MbeanService。當然這些Service也是通過MBean的形式來發布。JMX Agent通過各種各樣的Adapter和Connector來與外界(JVM之外)進行通信。JMX Agent可以包含各種不同的協議適配器和連接器連接器 Connector連接器是可以連接MBeanServer,並使遠程的java client可以訪問該服務。連接器包含 客戶端連接器(connector client)和伺服器連接器(connector server).伺服器連接器鏈接MBean Server 和 監聽客戶端的連接請求。客戶端連接器任務是查找connector server服務並建立連接。client 和server通常在不同機器的不同JVM中。MX Remote API 定義了標準的連接器 RMI Connector,它通過 RMI 提供了對 MBeanServer 的遠程訪問。 使用 RMI 將客戶端請求傳輸到遠程 MBean 伺服器。MX Remote API 還定義了一個可選協議,名為 JMXMP(JMX 消息協議)。JMXMP 基於 TCP 連接上的序列化 Java 對象(在可選包 javax.management.remote.message 中定義)。實現此協議的連接器稱為 JMXMP Connector。也可以使用 JMXConnectorFactory 提供的用戶定義的連接器協議和可選的通用連接器RMI Connector 使用 RMI 將客戶端請求傳輸到遠程 MBean 伺服器,RMI Connector支持 RMI 的 JRMP(默認)和 IIOP 傳輸方式。連接器地址
伺服器生成的連接器地址
service:jmx:rmi://host:port 返回如下所示的 JMXServiceURL:service:jmx:rmi://host:port/stub/XXXX
service:jmx:iiop://host:port 返回如下所示的 JMXServiceURL:service:jmx:iiop://host:port/ior/IOR:XXXX
基於目錄條目的連接器地址
service:jmx:rmi://host:port/jndi/jndi-name
service:jmx:iiop://host:port/jndi/jndi-name
host 和 :port 均可忽略。
service:jmx:rmi://ignoredhost/jndi/rmi://myhost/myname
第一個 rmi: 指定 RMI 連接器,第二個 rmi: 指定 RMI 注冊表service:jmx:iiop://ignoredhost/jndi/ldap://dirhost:9999/cn=this,ou=that其中ldap://dirhost:9999/cn=this,ou=that 表示 LDAP 目錄中的 cn=this,ou=that 條目,該目錄在運行主機 dirhost 的埠 9999 上。協議適配器 Adapter協議適配器通過特定的協議提供了一張注冊在MBean伺服器的管理構件的視圖。例如,一個HTML適配器可以將所有注冊過的管理構件顯示在Web 頁面上。不同的協議,提供不同的視圖。Adapter和Connector的區別在於:Adapter 是使用某種協議(HTTP或者SNMP)來與JMX Agent獲得聯系,Agent端會有一個對象(Adapter)來處理有關協議的細節。比如SNMP Adapter和HTTP Adapter。Connector 在Agent端和client端都必須有這樣一個對象來處理相應的請求與應答。比如RMI Connector。RMI Remote Method Invocation 的簡稱,RMI是面向對象的遠程調用, RMI採用JRMP(Java Remote Method Protocol)通訊協議,是構建在TCP/IP協議上的一種遠程調用方法。RMI 允許一個對象使其方法調用對駐留在其它虛擬機,甚至其它主機上的對象可用。RMI調用機制 -----RMI 採用stubs 和 skeletons 來進行遠程對象(remote object)的通訊。stub 充當遠程對象的客戶端代理,有著和遠程對象相同的遠程介面,遠程對象的調用實際是通過調用該對象的客戶端代理對象stub來完成的。 對於JNDI技術,所有的可用服務信息都將注冊在JNDI伺服器,讓客戶端通過RMI機制調用應用程序伺服器遠程介面時,應用程序伺服器就會根據JNDI 伺服器的服務注冊信息定位到相應的服務提供連接,等待應用程序伺服器與後台伺服器連接形成之後,JNDI將不再參與到連接當中(JNDI可以理解為注冊服 務提供)LDAP OSL X.500目錄是基於OSI網路協議的目錄服務協議 ,500的缺點是不支持TCP/IP,而是支持OSI協議 , 在此前提下,也就產生了訪問X500目錄的網關--LDAP . LDAP(Lightweight Directory Access Protocal, 輕型目錄訪問協議),是針對以X500目錄為主的目錄服務的前端訪問協議,是OSL X.500目錄訪問網關. LDAP就被設計成使用TCP/IP訪問OSI 目錄服務的服務協議,而隨著互聯網成為網路的主流,LDAP也成為一個具備目錄的大部分服務的協議。 LDAP主要解決目錄服務的前端訪問形式,而不是對 目錄服務本身制定的的協議,理論上,LDAP支持後台的任何存儲形式,包括X500,關系資料庫,文本資料庫或文件目錄等。LDAP繼承了X500目錄的 大部分定義,無論是訪問樣式還是語法都與X500相似。JINIJini( Java Intelligent Network Infrastructure)是一個主動的、響應式的分布式基礎結構,它提供了在分布式環境中進行服務的建立、查找、通訊和調用的一整套機制。
Jini系統架構HTTPHTTP協議(HyperText Transfer Protocol,超文本傳輸協議)是用於從WWW伺服器傳輸超文本到本地瀏覽器的傳送協議。Internet的基本協議是TCP/IP協議,然而在TCP/IP模型最上層的是應用層(Application layer),它包含所有高層的協議。高層協議有:文件傳輸協議FTP、電子郵件傳輸協議SMTP、域名系統服務DNS、網路新聞傳輸協議NNTP和 HTTP協議等SNMPSNMP(Simple Network Management Protocol,簡單網路管理協議)
>>>> 實現的協議適配器和連接器
當前已經實現的協議適配器和連接器包括:
1)RMI連接器
2)SNMP協議適配器
3)IIOP協議適配器
4)HTML協議適配器
5)HTTP連接器
JMX 標准提供了四種不同的 MBean:
Standard MBean 直接實現用於管理對象的方法,既可以通過實現一個由程序員定義的、類名以 「MBean」 結束的介面,也可以使用一個以一個類作為構造函數參數的 Standard MBean 實例,加上一個可選的介面類規范。這個介面可以開放用於管理的部分對象方法。
Dynamic MBean 用屬性訪問器動態地訪問屬性,並用一個一般化的 invoke() 方法調用方法。可用的方法是在 MBeanInfo 介面中指定的。這種方式更靈活,但是不具有像 Standard MBean 那樣的類型安全性。它極大地降低了耦合性,可管理的 POJO(純粹的老式 Java 對象)不需要實現特定的介面。
Model MBean 提供了一個改進的抽象層,並擴展了 Dynamic MBean 模型以進一步減少對給定實現的依賴性。這對於可能使用多個版本的 JVM 或者需要用鬆散耦合管理第三方類的情況會有幫助。Dynamic MBean 與 Model MBean 之間的主要區別是,在 Model MBean 中有額外的元數據。
Open MBean 是受限的 Model MBean,它限制類型為固定的一組類型,以得到最大的可移植性。通過限制數據類型,可以使用更多的適配器,並且像 SMTP 這樣的技術可以更容易適應 Java 應用程序的管理。這種變體還指定了數組和表等標准結構以改進復合對象的管理。
如 果要同時控制客戶機和伺服器,那麼 Standard MBean 是最容易實現的一種變體。它們的優點是有類型,但是如果在更一般化的管理控制台環境中使用時會缺少一些靈活性。如果計劃使用 Dynamic MBean,那麼您也可以更一步使用 Model MBean,在大多數情況下它會改善抽象層而幾乎不會增加復雜性。Open MBean 是是可移植性最高的一種變體,如果需要開放復合對象,那麼它是惟一的方法。不幸的是,在 Open MBean 中開放復合結構所需要的代碼數量過多,只有在需要高級的商業管理解決方案時才合算。
JMX 還支持使用帶過濾器和廣播器的事件模型的通知。為此目的,Standard MBean 需要聲明一個 MBeanInfo 元數據描述。 Standard MBean 實現通常在內部構造這些內容,開發人員不能直接看到它們。在本文後面,您會看到如何用 Model MBean 元數據的 XML 描述符格式和 Spring 的 JMX 支持進行實際上透明的配置。
>>>>使用 MBean 的過程1.創建一個 MBServer:MBeanServe2.獲得管理資源用的 MBean:serverBean3.給這個 MBean 一個 ObjectName:serverMBeanName4.將 serverBean 以 serverMBeanName 注冊到 mBeanServer 上去>>>>通知機制要讓MBean能發出通知,MBean必須實現介面NotificationBroadcaster或它的子介面NotificationEmitter.發送通知時要做的是構建javax.management.Notification類的實例或Notification 的子類,然後以參數形式傳遞這個實例到.sendNotification.方法中
>>>>JMX 代理內幕
揭示了典型 JMX 代理的內部構造。請注意,代理內部的四種主要組件是 MBean 伺服器、一組代理服務、連接器和協議適配器以及定製代理邏輯。
MBean 伺服器
MBean 伺服器是代理內部的核心組件。所有 MBean 在可以通過遠程應用程序訪問之前都必須向 MBean 伺服器注冊。當使用 MBean 伺服器時,通過唯一的對象名對已注冊的 MBean 進行定址。遠程管理器應用程序(或分布式服務)只能通過 MBean 的管理介面(已公開的屬性、操作和事件)發現和訪問 MBean。
代理服務
代理還提供了一組代理服務,定製代理邏輯可以使用它們在 MBean 伺服器中對已注冊的 MBean 進行操作。為了符合 JMX 1.1,這些服務是必需的 ―所有代理都必須提供它們。 有趣的是,可以用 MBean 本身的形式實現這些服務。以 MBean 的形式實現服務有幾個優點:
可以通過 Manager 組件或 EMS 遠程訪問該服務的操作。
通過從遠程管理器應用程序進行訪問,EMS 可以遠程地管理服務本身。
可以通過下載 MBean 在運行時動態地執行服務邏輯的更新。
表 3 顯示了 JMX 1.1 規范中定義的一組代理服務。
表 3. JMX 1.1 所需的代理服務
m-let 或管理 Applet 服務 支持跨網路從 URL 位置裝入動態類(請參閱 javax.management.loading.MLetMBean 和相關聯的類/介面)。
監視器服務 將代價高昂的遠程輪詢操作轉換成本地操作;監控 MBean 屬性的特定更改並在觀察到更改時發送事件。
計時器服務 經歷了指定的時間量後發送事件,或以指定時間間隔定期發送事件(請參閱 javax.management.monitor.MonitorMBean 和相關的類/介面)。
關系服務 支持 MBean 之間的關系定義,並強制關系的完整性(請參閱 javax.management.relation.RelationServiceMBean 和相關的類/介面)。
增值代理邏輯
增值代理邏輯通常是編寫的代碼。它是能夠提供本地化智能的定製代理邏輯,用來管理向該代理注冊的 JMX 可管理資源。例如,如果我們有兩個冗餘的應用程序伺服器群集,就可以創建定製代理,監控負載級別並且動態地將入站請求重定向到不同的群集 ― 通過對已注冊的伺服器的 MBean 進行操作。通常,NMS 的供應商也會提供定製邏輯。一旦分布式服務的規范得以充實,可以預言,某種特定的定製代理邏輯將可以與定製遠程 JMX 管理器組件良好地協作,以提供更高級別的網路管理功能。
連接器和協議適配器
代理不與分布式服務、NMS 或其它管理應用程序直接通信。而是使用連接器和協議適配器。這種體系結構與 J2EE 連接器體系結構(J2EE Connector Architecture)是一致的(請參閱 參考資料)。協議適配器是一種軟體組件,它通過標准化協議(如 HTTP 和 SNMP)提供對代理管理的資源的訪問。
連 接器是一種專用軟體組件,它提供了到代理和/或該代理上的受管資源的遠程介面(通常使用諸如 CORBA 或 RMI 這樣的遠程過程調用技術來完成 ― 為了安全性通常通過 SSL)。當代理有多個活動的連接器和協議時,可以通過多個異構的應用程序或 NMS 同步地訪問受管資源。可以用協議適配器來提供對現有的和已建立的 NMS 的向後兼容性。例如,我們可以為支持這個標準的 NMS 創建 通用信息模型/基於 Web 的企業管理(CIM/WEBM)適配器,或者可以創建 電信管理網路(TMN)協議適配器來啟用由 JMX 代理管理的電信資源上的 操作、管理和維護(OAM)。JMX 連接器和協議適配器的精確規范屬於正在同時開發的規范的范疇(請參閱 參考資料)。
>>>> 安全性
到目前為止都還不錯。現在是面對被甩在一邊的重要問題 —— 安全性 —— 的時候了。不如果不想讓誰的應用程序代碼訪問和修改虛擬機,該怎麼辦?有什麼選項可用么? 可以設置一些系統屬性,來控制訪問級別和虛擬機數據從 JMX 代理向管理客戶機傳遞虛擬機數據的方式。這些屬性分成兩類:口令認證 和安全套接字層(SSL)。
使用命令行選項
為了讓 5.0 兼容的虛擬機可以被監視和管理,需要用以下命令行選項設置平台 JMX 代理的埠號:
-Dcom.sun.management.jmxremote.port=<number>
如果不介意誰通過這個埠訪問虛擬機,也可以添加以下兩個選項,關閉口令認證和 SSL 加密(這兩項默認都是開啟的):
-Dcom.sun.management.jmxremote.authenticate=false-Dcom.sun.management.jmxremote.ssl=false
在開發 java.lang.management 客戶機代碼,而且想方便地監視另一台虛擬機時,一起使用這三個選項會很方便。在生產環境中,則需要設置口令控制或 SSL(或者兩者都要設置)。
口令認證
在JDK 的 jre/lib/management 目錄中,可以找到一個叫做 jmxremote.password.template 的文件。這個文件定義了兩個角色的用戶名和口令。第一個是監視 角色,允許訪問只讀的管理函數;第二個是控制 角色,允許訪問讀寫函數。取決於需要的訪問級別,客戶可以用 monitorRole 或 controlRole 用戶名進行認證。為了確保只有認證的用戶才能訪問,需要做以下工作:
把 jmxremote.password.template 的內容拷貝到叫做 jmxremote.password 的文件中,並取消掉文件末尾定義用戶名和口令部分的注釋,根據需要修改口令。
修改 jmxremote.password 的許可,只讓所有者能夠讀取和修改它。(在 UNIX 和 UNIX 類的系統上,把許可設置成 600。在 Microsoft Windows 上,請按照 「How to secure a password file on Microsoft Windows systems」 一文中的說明操作,可以在 參考資料 中找到這篇文章的鏈接。)
在啟動虛擬機時,用以下命令行選項指定要使用的口令文件的位置:
-Dcom.sun.management.jmxremote.password.file=<file-path>
從管理客戶的角度來說,需要提供正確的用戶名/口令組合來訪問開啟了認證的虛擬機。如果客戶是 JConsole,這很簡單:在初始的 Connection 選項卡中提供了用戶名和口令欄位