JavaMelody 簡介
一、簡介
作為應用程式開發人員,我們通常會盡可能有效率地建立複雜的業務邏輯。然而,一旦這些應用程式投入生產,我們還希望收集有關應用程式效能的運行時統計信息,以幫助進一步改進和故障排除。
應用程式日誌記錄可能是一種選擇,但這仍然無法全面了解應用程式的效能。為此,我們需要使用一些工具來收集運行時統計資料和監控。
在本文中,我們將快速瀏覽一個這樣的函式庫 – JavaMelody。我們將探討它的優勢,並了解它如何成為監控 Java 應用程式的有效解決方案。我們還將介紹安裝和一些基本操作。
2. 主要特點
JavaMelody是一個嵌入式開源程式庫,為 Java 應用程式提供監控功能。它重量輕且易於集成。
該庫的主要目標是提供一種測量和計算 QA 和生產環境中即時操作統計數據的方法。它專注於收集和視覺化統計數據,以幫助做出明智的決策並提高應用程式效能。
其一些主要功能包括:
- 全面監控: JavaMelody 追蹤各種資料點,例如 HTTP 請求、SQL 查詢、CPU 使用率、已使用記憶體等,以進行效能分析。
- 效能洞察:它提供了一些有用指標的數據,例如平均回應時間、執行計數和錯誤百分比,從而有助於識別效能瓶頸和延遲的根本原因。
- 趨勢圖:演變圖顯示可自訂時間範圍內的執行數量、回應時間、記憶體使用情況、CPU 負載和使用者會話等指標。這使得系統管理員能夠及時回顧並在出現問題時幫助分析根本原因。
- 錯誤和警告追蹤:監視 HTTP 錯誤、日誌警告和 SQL 錯誤。
- 可選的收集伺服器:可以選擇設定 JavaMelody 以集中來自多個應用程式或相同應用程式的多個實例的資料。這在叢集環境中特別有用,因為它允許將儲存和報告產生卸載到單獨的伺服器。
3. 安裝與設定
對於大多數情況來說,JavaMelody 的安裝和設定都非常簡單。 JavaMelody 還具有多個外掛選項,可用於與 Jenkins、Spring Boot 和 Atlassian 的 Jira 等工具搭配使用。在這裡,我們考慮 Java Web 應用程式存檔 (.war) 的典型設定。
3.1.新增依賴項
首先,我們需要將javamelody-core
JAR 依賴項新增至pom.xml
中的 Maven 專案:
<dependency>
<groupId>net.bull.javamelody</groupId>
<artifactId>javamelody-core</artifactId>
<version>2.2.0</version>
</dependency>
對於不使用 Maven 等依賴管理工具的項目,我們也可以透過簡單地將javamelody.jar
和jrobin-1.5.9.jar
加入到WEB-INF/lib
目錄中來實現此目的。
某些選項(例如 PDF 報告產生)可能需要其他依賴項。我們可以在 JavaMelody使用者指南中找到與這些依賴項相關的資訊。
3.2.配置web.xml
對於大多數現代 Java Web 應用程序,不需要此步驟。所謂現代,是指在web.xml
中使用 Servlet 3.0 或更高版本以及相容的應用程式伺服器(例如 Tomcat 7.0 及更高版本)的應用程式。
如果我們使用舊的 servlet 版本或web.xml
沒有提到version=”3.0″
,那麼我們需要將 JavaMelody 過濾器加入到web.xml
中:
<filter>
<filter-name>javamelody</filter-name>
<filter-class>net.bull.javamelody.MonitoringFilter</filter-class>
<async-supported>true</async-supported>
</filter>
<filter-mapping>
<filter-name>javamelody</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>ASYNC</dispatcher>
</filter-mapping>
<listener>
<listener-class>net.bull.javamelody.SessionListener</listener-class>
</listener>
請注意,需要<async-supported>true</async-supported>
和<dispatcher>ASYNC</dispatcher>
來支援 Servlet API 3.0 的非同步請求。
3.3.存取監控儀表板
現在,我們已經使用 JAR 檔案相依性和web.xml
配置部署了應用程式。我們可以透過以下 URL 立即找到監控儀表板:
http://<host>:<port>/<context>/monitoring
當然,我們需要將<host>, <port>,
和<context>
替換為適合我們應用程式的值。
3.4.其他配置和進階主題
到目前為止,我們只介紹了 JavaMelody 的基本設定。它提供了其他幾種配置方式,例如 Spring Boot、Jira、Jenkins、Bamboo、Sonar 和 Liferay 的插件,如文件中所述。
還有其他幾個設定選項,例如 JDBC 監控、PDF 報告產生、電子郵件報告、批次作業監控 (Quartz) 等等。這些配置選項的細節超出了本文的範圍。但是,根據我們的特定應用要求,我們可能需要探索這些選項。
4. 安全性
到目前為止,我們還沒有討論任何有關監控 URL 安全性的內容。 JavaMelody 監控頁面不包含任何密碼。即便如此,我們看到JavaMelody 監控 URL 公開了許多有關應用程式 API 的使用信息,因此,必須在生產環境中保護該 URL。
對於許多環境,例如 Jenkins、JIRA、Confluence、Bamboo 或 Liferay 插件,我們可以透過使用內建應用程式角色來完成此操作。
應用程式中現有的基於角色的安全性通常可以擴展以保護 JavaMelody 監控頁面。我們希望只有具有特定角色的使用者才能存取此 URL。為了實現這一目標,我們設定了一個監控角色並保護 URI /monitoring.
有很多方法可以做到這一點。我們可以選擇最適合我們應用的方式。
在此範例中,我們考慮使用 Tomcat 進行基本驗證。首先,我們需要在 web.xml 中為/monitoring
URL 設定基本驗證web.xml:
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Monitoring</realm-name>
</login-config>
<security-role>
<role-name>monitoring</role-name>
</security-role>
<security-constraint>
<web-resource-collection>
<web-resource-name>Monitoring</web-resource-name>
<url-pattern>/monitoring</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>monitoring</role-name>
</auth-constraint>
<!-- if SSL enabled (SSL and certificate must then be configured in the server)
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
-->
</security-constraint>
接下來,我們在應用程式伺服器中定義領域和使用者。使用者必須具有「監控」角色才能存取報告。例如,如果我們使用預設領域的Tomcat,我們可以修改conf/tomcat-users.xml
檔案的內容:
<tomcat-users>
<role rolename="monitoring"/>
<user username="monitoring" password="monitoring" roles="monitoring"/>
</tomcat-users>
圖書館的使用者指南中提供了其他安全資訊。
5. 效能開銷
人們注意到 JavaMelody 的效能開銷最小。這使得它適合在生產環境中連續使用。
與其他監控工具不同,它僅監控統計數據而不是分析。這可以避免其他監視工具典型的繁重儀器和資料庫日誌記錄。這種低接觸監控方法會導致 CPU、記憶體和 I/O 使用率較低。 JavaMelody 收集許多統計信息,包括 HTTP、JDBC 和可選的 Spring/EJB3。
此外,JavaMelody 可以集中用於大型應用程序,進一步減少本地記憶體和儲存需求。我們可以回顧這個討論,了解有關 JavaMelody 效能開銷的一些觀點。但是,在我們的應用程式中使用它時,在將配置升級到生產之前檢查預生產環境的效能統計資料非常重要。
6. 使用方法及截圖
現在,我們已經完成了必要的配置。我們可以檢查/monitoring
URI 並取得多個圖表的視圖。讓我們瀏覽一些範例螢幕截圖,以大致了解這些功能。
我們注意到,監控 UI 的佈局最適合在桌上型電腦或筆記型電腦等寬螢幕裝置上查看:
6.1.統計樣本
各種圖表為應用程式監控人員提供了過去一周應用程式效能的即時快照。作為監控用戶,我們可以進一步點擊任意圖表,放大細節,近距離查看。
作為範例,讓我們看一下一天內 HTTP 會話的放大視圖:
此視圖清楚地顯示了一天中應用程式使用率較高的時間。在這種情況下,應用程式使用者數量從早上7:00左右快速增加到上午9:00。然後,全天和深夜出現了一些差異。
我們也觀察到,從 00:30 到 4:30,使用者數量逐漸減少。與幾天相比,這些圖表可以讓您了解使用模式,並有助於發現任何異常情況。
另一個重要的統計視圖是HTTP統計視圖:
此範例將 URI /admin/globalusage.action
的 GET API 呈現為與其他 API 呼叫相比平均回應時間較長的 API。這有助於我們從應用程式效能的角度識別最需要關注的 API 調用,並有助於推動我們產品的非功能需求路線圖。
還有許多其他觀點,對這些觀點的詳細描述超出了本文的範圍。以上所有圖像都是 JavaMelody wiki 頁面的一部分。我們可以在那裡找到其他幾個範例螢幕截圖。
七、結論
在本文中,我們介紹了監控庫 JavaMelody 並討論了它的安裝和設定。我們也介紹了一些效能和安全注意事項,並記錄了一些使用場景。更多螢幕截圖和文件可在JavaMelody 的 GitHub 主頁上找到。也提供現場演示。