Categories
程式開發

非HTTP應用或批處理應用如何進行全鏈路監控


在近期的應用性能問題分析中, 有時候會發現業務異常, 但是卻無法在APM監控中找到相關的請求, 這可能是由於請求並非HTTP請求, 而可能是批處理或其他非HTTP請求導致的.因此無法監控分析.

另外, 有些時候, 我們想要了解這類應用的:

● TCP解析處理性能;

● 批處理中SQL性能…

那麼就需要對非HTTP應用或批處理應用如何進行全鏈路監控. 下面介紹如何實現.

具體實現概述

接下來具體是通過Dynatrace AppMon 來實現對非HTTP應用或批處理應用的全鏈路監控.

監控前後的效果對比如下:

非HTTP應用或批處理應用如何進行全鏈路監控 1

● 未監控之前: 看不到一條事務

● 監控後: 事務數鉅細無遺

具體的實現是利用了Dynatrace的Entry Points(入口點)功能.

一個entry point 就是一個新的PurePath(Dynatrace 裡的名詞, 可以理解為一條事務)的開始. 通過適當的配置, 放置一個適當位置的, 活動的sensor(傳感器, Dynatrace監控的微探針)來實現.對於基本用戶, 自帶的Sensor Packs(傳感器包) (如: Servlet, WebService, ASP.NET… 它通過這些實現對HTTP協議請求的監控)就已經夠用了.

具體實現步驟

如果一個事務沒有被抓取到(比如: mule的tcp請求, 批處理..), 那麼就需要以下操作步驟:

1. (可選)做CPU採樣, 找到入口點 方法

2. 配置指定方法的傳感器

3. 熱部署或重啟Agent生效

找到入口點方法

如果你是一名開發, 且對你要監控的程序的 入口點 方法瞭如指掌, 那麼只需要提供這個方法的完整名稱就可以了. 比如:

● TCP請求的入口點可能是這樣的:

com.xxxx.ap26.getaway.transport.tcp.protocol.AbstractTcpHeader

● Batch Job的入口點可能是這樣的:

org。* spring * framework.batch.thread.run

如果你不清楚入口點方法, 可以通過CPU採樣的方式進行分析.

CPU採樣可以分析當前運行的的Java或.NET程序的線程堆棧, 並找出是否以某一個方法長時間運行或被頻繁調用.分析流程如下:

1. 點擊Dynatrace上的CPU 採樣儀表圖. 如下:

非HTTP應用或批處理應用如何進行全鏈路監控 2

2. 然後選擇你要監控的應用Agent, 點擊確定進行採樣. 大約2分鐘後停止採樣.

非HTTP應用或批處理應用如何進行全鏈路監控 3

3. 採樣完成後, 對樣本進行分析. 如下圖:

分析起來其實挺簡單. 我們要找的 入口點 方法一般滿足這麼幾個條件:

a. 位於線程棧的較底層, 但是肯定在線程啟動方法(如: Thread.run)之後

b. 被頻繁調用(如果是tcp請求這類的話)

c. 整個線程執行時間較長或CPU時間較長(如批處理, 或tcp處理報文)

非HTTP應用或批處理應用如何進行全鏈路監控 4

4. 根據以上條件, 我們會找到那個 入口點方法, 這個方法應該和大神開發給出來的是一樣的, 比如就是:

com.xxxx.ap26.getaway.transport.tcp.protocol.AbstractTcpHeader

配置該方法的傳感器

找到該方法後, 直接在上圖裡選中該方法, 點擊右鍵, 會彈出一系列菜單, 選擇: 添加這個方法為傳感器. 然後會彈出如下對話框:

勾選紅框中的: Allow to start PurePaths from this method (Entry Point)

配置好之後點擊確定.

非HTTP應用或批處理應用如何進行全鏈路監控 5

那么生效後, 就會對該方法進行字節碼注入, 並且, 只要捕獲到該方法, 就會認為該方法是一條事務的入口點, 後續該事務可能會:

● 調用其他任何方法

● 調用Web Service

● 執行SQL

● 拋出Exception

● 輸出Error log

●…

都會被完整的記錄, 記錄響應時間, 成功/失敗, 相關參數, web service 請求, sql語句, 異常堆棧, log日誌…應有盡有.

熱部署或重啟Agent生效

當然, 還是要使剛剛添加的方法監控規則生效才會有一切. 要使之生效, 有2種辦法:

1. Dynatrace Agent 熱部署(SUN JDK 1.6+)

2.重啟Dynatrace代理(IBM JDK 6)

效果

生效前, 可能看不到一條事務; 生效後, 可以看到每一條事務的細節.

如下圖所示:

非HTTP應用或批處理應用如何進行全鏈路監控 6