通過本次最佳實踐內容,您可以看到ARMS OpenAPI可以靈活的被集成到客戶鏈路監控場景,並對其進行可視化圖形展示監控信息。
1. 背景信息
應用實時監控服務ARMS(Application Real-Time Monitoring Service)是一款應用性能管理產品,能幫助你實現全棧式的性能監控和端到端的全鏈路追蹤診斷,讓應用運維更加高效。
本次最佳實踐是基於調用ARMS OpenAPI的形式來實現客戶應用場景鏈路監控的可視化圖形展示,使用環境為專有云V3.10版本ASCM控制檯,調用ARMS OpenAPI接口通過工具Postman進行測試,在第二章節詳細介紹了測試環境及測試工具。第三章節通過一個查詢所有應用ARMS OpenAPI接口描述調用過程,並且包含該接口需要請求傳入的參數接口列表。最後一章節將對一個複雜應用場景,獲取鏈路監控信息使用到ARMSOpenAPI接口,對每個接口列表字段、調用過程及返回結果詳細介紹。
最佳實踐價值
通過調用ARMS OpenAPI在應用場景的使用,直觀給閱讀者瞭解到ARMS產品的能力,及ARMS提供一套OpenAPI可以容易的集成到客戶應用中,快速實現複雜的微服務鏈路監控能力,由ARMS監控服務能力涵蓋範圍能力比較廣,包含瀏覽器、小程序、APP、分佈式應用和容器環境,因此完整的監控能力,開發過程中不需要集成多開源組件的形式,使微服務程序監控功能開發簡單,讓應用運維變得容易。
2. 環境
在使用ARMS前您需要按照以下內容對當前的系統環境進行檢查。
本次最佳實踐基於專有云企業版V3.10.0版本ARMS。
說明:ARMS OpenAPI各個版本變化不大,使用方式保持一致,所以此文檔也適用於公共雲產品或專有云V3.7.0以上版本。專有云V3.10.0控制檯稱為ASCM,V3.10.0之前版本為Apsara Stack。
1.登錄ASCM控制檯。
2.將鼠標指向頁面上方導航欄中的產品,單擊企業級分佈式應用服務EDAS。
圖1:ASCM
說明:由於ARMS監控應用數據,需要EDAS產品配合。本次測試先通過EDAS部署一個標準的Spring Boot應用,開通ARMS監控並得到監控數據。
圖 2:EDAS控制檯
圖 3:ARMS控制檯
3.測試工具檢查。
本實踐將會在專有云環境中創建win64虛擬機,然後在虛擬機中安裝Postman進行測試。
圖4:Postman測試
3. Open API使用
調用URL確認
OpenAPI接口均為REST服務,首先確認服務的URL。
每個專有云環境域名不同,會導致URL不同。請根據具體環境信息修改URL信息,前綴及端口不變。http://arms.console.example.com:8099/
名稱 | 接口 |
數據集API | /dataset/GeneralQuery.json |
關鍵應用性能指標 | /metric/Metric.json |
報警信息 | 無 |
應用監控-應用拓撲 | /trace/Dependecies.json |
事件集 | /eventset/EventList.json |
調用示例-查看所有應用:
API說明
URL:http://arms.console.example.com:8099/trace/Services.json
參數列表
字段名稱 | 字段類型 | 字段含義 | 是否必選 | 備註 |
_userId | String | 用戶id | 是 | 用戶名稱(如arms_admin) |
返回格式示例
{ "code": 200, "data": { "details": [ { "pid": "string", //應用對應的pid "regionId": "string", "serviceName": "string" //應用名稱 } ], "services":[ //應用名稱列表 "string", "string" ] }, "success": true }
Postman調用結果
參數設置:_userId= 121827433423****
圖5:Postman調用結果
4. 應用描述
從ARMS中取得應用拓撲數據、曲線圖、應用監控指標數據,將通過大屏DataV展示。
圖6:DataV展示
5. 查詢接口調用次數
通過/metric/Metric.json接口獲得應用相關性能數據,查詢接口調用次數。
API說明
字段名稱 | 字段類型 | 字段含義 | 是否必選 | 備註 |
startTime | Long | 查詢數據的起始時間 | 是 | 無 |
endTime | Long | 查詢數據的截止時間 | 是 | 無 |
intervalInSec | Integer | 時間間隔 | 否 | 建議填寫 |
metric | String | metric字段 | 是 | 詳細填寫參考參數填寫示範 |
filters | List[String] | 過濾字段 | 是 | 詳細填寫參考參數填寫示範 |
measures | List[String] | 指標 | 是 | 詳細填寫參考參數填寫示範 |
dimensions | List[String] | 維度 | 是 | 詳細填寫參考參數填寫示範 |
orderBy | String | 排序字段 | 否 | 無 |
sortOrder | String | 排序 | 否 | 默認不排序(ASC或者DESC) |
limit | Integer | 返回條數 | 否 | 無 |
_userId | String | 用戶id | 是 | 用戶名稱(如arms_admin) |
調用示例
查詢指定應用過往7天的接口調用次數
參數填寫示範:
字段名稱 | 字段類型 | 字段含義 | 必選 | 示例值 | 值來源 |
startTime | Long | 查詢數據的起始時間 | 是 | 1578199319898 | 系統時間 |
endTime | Long | 查詢數據的截止時間 | 是 | 1578804119898 | 系統時間 |
intervalInSec | Integer | 時間間隔 | 否 | 默認3600秒,即1小時 | 人工設置 |
metric | String | metric字段,查詢的指標 | 是 | APPSTAT.DETAIL | 人工設置 |
filters | List[String] | 過濾字段,嚴格按照格式,否則調用出錯 | 是 | [{key=pid,value=1218274334230390@db61f75c2f******},{key=regionId,value=cn-******-d01}] | Pid、regionid來自於專有云環境 |
measures | List[String] | 指標 | 是 | [rt,count,error,errrate] | API文檔 |
dimensions | List[String] | 維度 | 是 | [pid,rpcType,rootIp] | API文檔 |
orderBy | String | 排序字段 | 否 | 無 | 無 |
sortOrder | String | 排序 | 否 | 默認不排序(ASC或者DESC) | 無 |
limit | Integer | 返回條數 | 否 | 無 | 無 |
_userId | String | 用戶id | 是 | 121827433423**** | 無 |
查詢結果
參數設置:
圖7:參數設置
結果說明:
- 返回結果為JSON數據集。
- 數據集會標示查詢狀態,成功返回200,如果失敗會返回相應的錯誤碼和錯誤原因。典型錯誤例如缺少必要參數、身份認證錯誤等(是因為filters參數沒按格式要求寫好)。
- OpenAPI返回的結果集組織形式與查詢數據的開始時間、結束時間、數據間隔時間有關。本次查詢是查詢了過往7天,數據間隔時間設置成了24小時,所以這個結果集裡返回了7個”data”的集合。
- 每個data裡包括在“measure”和”dimension”裡指定的查詢,以本結果集為例,就包括:Count:0.0
PID:
rpcDesc: HTTP入口
rpcType:0(HTTP調用) - 調整查詢的開始、結束、間隔時間,會影響data數據的條數,調整接口查詢參數會影響每條data裡的數據。
- 如果需要計算一些聚合值,比如過往7天總的HTTP調用次數,需要自行把多條data數據進行計算相加後得出結果。
6. 查詢異常數量
通過/metric/Metric.json 接口獲得應用相關性能數據,查詢異常數量。
API說明
字段名稱 | 字段類型 | 字段含義 | 是否必選 | 備註 |
startTime | Long | 查詢數據的起始時間 | 是 | 無 |
endTime | Long | 查詢數據的截止時間 | 是 | 無 |
intervalInSec | Integer | 時間間隔 | 否 | 建議填寫 |
metric | String | metric字段 | 是 | 詳細填寫參考下文 |
filters | List[String] | 過濾字段 | 是 | 詳細填寫參考下文 |
measures | List[String] | 指標 | 是 | 詳細填寫參考下文 |
dimensions | List[String] | 維度 | 是 | 詳細填寫參考下文 |
orderBy | String | 排序字段 | 否 | 無 |
sortOrder | String | 排序 | 否 | 默認不排序(ASC或者DESC) |
limit | Integer | 返回條數 | 否 | 無 |
_userId | String | 用戶id | 是 | 用戶名稱(如arms_admin) |
調用示例
查詢指定應用過往7天的接口調用次數。
參數填寫示範:
字段名稱 | 字段類型 | 字段含義 | 必選 | 示例值 | 值來源 |
startTime | Long | 查詢數據的起始時間 | 是 | 1577980826988 | 系統時間 |
endTime | Long | 查詢數據的截止時間 | 是 | 1578585626989 | 系統時間 |
intervalInSec | Integer | 時間間隔 | 否 | 默認3600秒,即1小時 | 人工設置 |
metric | String | metric字段,查詢的指標 | 是 | APPSTAT.EXCEPTION | 人工設置 |
filters | List[String] | 過濾字段,嚴格按照格式,否則調用出錯。 | 是 | [{key=pid,value=1218274334230390@db61f75c2f******},{key=regionId,value=cn-******-d01}] | Pid、regionid來自於專有云環境 |
measures | List[String] | 指標 | 是 | [count] | API 文檔 |
dimensions | List[String] | 維度 | 是 | [pid,rpc,endpoint,exceptionInfo] | API文檔 |
orderBy | String | 排序字段 | 否 | 無 | 無 |
sortOrder | String | 排序 | 否 | 默認不排序(ASC或者DESC) | 無 |
limit | Integer | 返回條數 | 否 | 無 | 無 |
_userId | String | 用戶id | 是 | 1218274334230390 | 無 |
查詢結果
參數設置:
圖8:參數設置
查詢結果:
圖9:查詢結果
結果說明:
- 返回結果為JSON數據集。
- 數據集會標示查詢狀態,成功返回200,如果失敗會返回相應的錯誤碼和錯誤原因。典型錯誤例如缺少必要參數、身份認證錯誤等(是因為filters參數沒按格式要求寫好)。
- 本次查詢未查到相關數據,所以exception數量為0。
7. 查詢當前應用實例數量
通過/metric/Metric.json接口獲得應用相關性能數據,查詢當前應用實例數量。
API說明
字段名稱 | 字段類型 | 字段含義 | 是否必選 | 備註 |
startTime | Long | 查詢數據的起始時間 | 是 | 無 |
endTime | Long | 查詢數據的截止時間 | 是 | 無 |
intervalInSec | Integer | 時間間隔 | 否 | 建議填寫 |
metric | String | metric字段 | 是 | 詳細填寫參考下文 |
filters | List[String] | 過濾字段 | 是 | 詳細填寫參考下文 |
measures | List[String] | 指標 | 是 | 詳細填寫參考下文 |
dimensions | List[String] | 維度 | 是 | 詳細填寫參考下文 |
orderBy | String | 排序字段 | 否 | 無 |
sortOrder | String | 排序 | 否 | 默認不排序(ASC或者DESC) |
limit | Integer | 返回條數 | 否 | 無 |
_userId | String | 用戶id | 是 | 用戶名稱(如arms_admin) |
調用示例
查詢指定應用過往7天的接口調用次數。
參數填寫示範:
字段名稱 | 字段類型 | 字段含義 | 必選 | 示例值 | 值來源 |
startTime | Long | 查詢數據的起始時間 | 是 | 1577980826988 | 系統時間 |
endTime | Long | 查詢數據的截止時間 | 是 | 1578585626989 | 系統時間 |
intervalInSec | Integer | 時間間隔 | 否 | 默認3600秒,即1小時 | 人工設置 |
metric | String | metric字段,查詢的指標 | 是 | APPSTAT.DETAIL | 人工設置 |
filters | List[String] | 過濾字段,嚴格按照格式,否則調用出錯。 | 是 | [{key=pid,value=1218274334230390@db61f75c2f28609},{key=regionId,value=******}] | Pid、regionid來自於專有云環境 |
measures | List[String] | 指標 | 是 | [count] | API 文檔 |
dimensions | List[String] | 維度 | 是 | [pid,rootIp] | API文檔 |
orderBy | String | 排序字段 | 否 | 無 | 無 |
sortOrder | String | 排序 | 否 | 默認不排序(ASC或者DESC) | 無 |
limit | Integer | 返回條數 | 否 | 無 | 無 |
_userId | String | 用戶id | 是 | 12182743342****** | 無 |
查詢結果
參數設置:
圖10:參數設置
查詢結果:
圖11:查詢結果
結果說明:
- 返回結果為JSON數據集。
- 數據集會標示查詢狀態,成功返回200,如果失敗會返回相應的錯誤碼和錯誤原因。典型錯誤例如缺少必要參數、身份認證錯誤等(是因為filters參數沒按格式要求寫好)。
- Openapi返回的結果集組織形式與查詢數據的開始時間、結束時間、數據間隔時間有關。本次查詢是查詢了過往7天,數據間隔時間設置成了24小時,所以這個結果集裡返回了7個”data”的集合。
- 每個data裡包括在measure和dimension裡指定的查詢,以本結果集為例,就包括:Count:0.0
RootIP - 本次查詢需求是要看此應用一共部署了多少實例,所以對結果中不同IP進行計算,即可以算出共有多少實例數量。另外一個方法是設置intervalInSec的值,讓它等查詢區間,這樣出來的data集合的條數就是實例數量值,因為每個IP都會有條數據。
8. 查詢當前應用拓撲圖
通過/trace/Dependecies.json接口獲得應用拓撲相關數據。
API說明
調用示例
查詢指定應用過往7天的接口調用次數。
參數填寫示範:
本測試1月12日進行,查詢過去7天的數據。
字段名稱 | 字段類型 | 字段含義 | 必選 | 示例值 |
startTime | Long | 查詢數據的起始時間 | 是 | 1578199319898 (1月5日) |
endTime | Long | 查詢數據的截止時間 | 是 | 1578804119898 (1月12日) |
_userId | String | 用戶id | 是 | 1218274334****** |
type | String | 查詢類型 | 是 | APP |
pid | String | 應用對應的pid | 否 | 1218274334230390@db61f75c****** |
查詢結果
參數設置:
圖12:參數設置
查詢結果:
{ "code": 200, "data": { "link": [{ "code": 200, "data": { "link": [ { "callCount": 26997.0, "child": "Demo-Service", "childNodeId": 731107445, "childPid": "1218274334230390@db61f75c2******", "elapsed": 16.2328, "errorCount": 16.0, "parent": "USER", "parentNodeId": 812148234, "parentPid": "1218274334230390@db61f75c2******", "protocol": "HTTP" }, { "callCount": 8.0, "child": "pdsa_lhh_rocketmq", "childNodeId": -1762019072, "childPid": "pdsa_lhh_rocketmq", "elapsed": 11190.5, "errorCount": 8.0, "parent": "Demo-Service", "parentNodeId": 731107445, "parentPid": "1218274334230390@db61f75c2******", "protocol": "AliWareMQ" } ], "nodes": [ { "elapsed": 0.0, "errorCount": 0.0, "id": 812148234, "name": "USER", "pid": "1218274334230390@db61f75c2******", "requestCount": 0.0, "type": "USER" }, { "elapsed": 0.0, "errorCount": 0.0, "id": 731107445, "name": "Demo-Service", "pid": "1218274334230390@db61f75c2******", "requestCount": 0.0, "type": "MQ_PRODUCER" }, { "elapsed": 0.0, "errorCount": 0.0, "id": -1762019072, "name": "pdsa_****_rocketmq", "pid": "pdsa_****_rocketmq", "requestCount": 0.0, "type": "METAQ" } ] }, "success": true }
實際拓撲圖效果如下:
圖13:拓撲圖
結果說明:
- 返回結果為JSON數據集。
- 數據集會標示查詢狀態,成功返回200,如果失敗會返回相應的錯誤碼和錯誤原因。典型錯誤例如缺少必要參數、身份認證錯誤等(是因為filters參數沒按格式要求寫好)。
- 查詢結果是一個點線圖的節點數據和連接數據,需要使用者自行按照圖表控件組裝相應數據。
我們是阿里雲智能全球技術服務-SRE團隊,我們致力成為一個以技術為基礎、面向服務、保障業務系統高可用的工程師團隊;提供專業、體系化的SRE服務,幫助廣大客戶更好地使用雲、基於雲構建更加穩定可靠的業務系統,提升業務穩定性。我們期望能夠分享更多幫助企業客戶上雲、用好雲,讓客戶雲上業務運行更加穩定可靠的技術,您可用釘釘掃描下方二維碼,加入阿里雲SRE技術學院釘釘圈子,和更多雲上人交流關於雲平臺的那些事。