本文部分內容轉載自:https://blog.csdn.net/UbuntuTouch/article/details/102844900
官方文檔:https://www.elastic.co/guide/en/apm/index.html
APM 到底是什么
APM就是監視和管理軟件應用程序的性能和可用性。Elastic APM是基於Elastic Stack構建的應用程序性能監視系統。 它使您可以實時監視軟件服務和應用程序-收集有關傳入請求,數據庫查詢,對緩存的調用,外部HTTP請求等的響應時間的詳細性能信息。 這樣可以輕松快速地找出並解決性能問題。
Elastic APM還會自動收集未處理的錯誤和異常。 錯誤主要根據堆棧跟蹤進行分組,因此您可以在新錯誤出現時識別它們,並密切注意特定錯誤發生的次數。
指標是調試生產系統時的另一個重要信息來源。 Elastic APM代理會自動選擇基本主機級別指標和特定於代理的指標,例如Java代理中的JVM指標和Go代理中的Go運行時指標。
Elastic APM方案是世界上第一個開源的APM 解決方案:
APM記錄數據庫查詢,外部HTTP請求以及對應用程序的請求期間發生的其他緩慢操作的跟蹤
- 很容易讓程序員看到應用在運行時各個部分所花的時間
它收集未處理的錯誤和異常
- 很容讓程序員調試錯誤
在客戶面對性能瓶頸和錯誤之前先定位到問題所在
提高開發團隊的生產力
Elastic Observability (可觀測性)
Elastic 通過整合日志,指標及APM,統一整個生態系統可見性,打造一個完整的可觀測性。將您的日志,指標和APM跟蹤大規模整合到一個堆棧中,以便您可以監視環境中發生的事件並對事件做出反應。按照文章“Metrics, tracing, and logging”的描述,打造全面的可觀測性,需要如下的三個要素:
在Elastic Stack中,我們都有相應的模塊處理:
日志 (logging):程序運行產生的事件,可以詳細解釋其運行狀態。
指標(metrics):一組聚合數值,主要用於監控基礎設施(機器、容器、網絡等),但也有應用會用於監控業務層面,比如開源搜索系統Elasticsearch就有關於查詢或寫入量、耗時、拒絕率等應用層面的指標。
應用性能監控(APM):深入到代碼層面的追蹤(或監控),包括程序內部執行過程、服務之間鏈路調用等情況,能輕易的找到程序“慢”的原因。APM最常見被用於對web服務器中一次請求處理過程的追蹤,包括內部執行邏輯、外部服務的調用及它們相應的耗時。
Elastic Stack可為所有運營數據提供快速,可靠和相關的搜索,因此無論數據類型如何,您都可以提出自己想要的問題-並獲得所需的答案。
APM應用於Elastic Stack的位置
如上圖所示,我們看到一個最典型的APM架構圖:
我們需要架設一台專門的APM服務器,雖然也可以和Elastic Stack的其它服務器處於同一台服務器中
AMP agent專門收集數據並發送數據到APM服務器中。這里的APM agents包含:
APM服務器把數據發送到Elasticsearch中,並進行數據分析
Kibana可以幫我們把數據進行展示並顯示在Dashboard之中
總體來說,APM數據僅僅是另外Elasticsearch索引。在Kibana中已經有一個現成的APM應用可以被我們所使用。我們也可以根據需求自己定制自己的Dashboard。APM可以完美地結合機器學習和告警。
APM術語
- Service: 在apm agent配置中進行設置,以將特定的apm agent組標識為單個服務,這是一種邏輯上標識一組事務的方法
- Transaction: 組成一個服務的請求和響應,例如登錄api調用,每個調用由單獨的span組成。
- Span: 事務中的單個事件,例如方法調用,數據庫查詢或緩存插入或檢索,即需要花費時間才能完成的任何事件。
- Erorrs:具有匹配的異常或日志消息的異常組
它們之間的關系可以用如下的圖來表示:
分布式tracing:
動手實踐
使用python的flask框架進行演示
前提條件:
1.按照elasticsearch和kibana,版本均為7.5.0
es地址:http://192.168.75.21:9200
kibana地址:http://192.168.75.21:5601
2.使用pycharm構建一個簡單的flask框架
第一步,安裝配置apm-server服務端
下載地址:https://www.elastic.co/cn/downloads/
下載跟es版本相匹配的apm-server版本,上傳到服務器中,解壓縮,進入目錄中,找到apm-server.yml文件並進行相應的修改:
apm-server:
host: "192.168.75.21:8200"
idle_timeout: 100s
read_timeout: 100s
write_timeout: 100s
shutdown_timeout: 100s
rum:
enabled: true
queue:
mem:
events: 4096
kibana:
enabled: true
host: "192.168.75.21:5601"
output.elasticsearch:
hosts: ["192.168.75.21:9200"]
保存后運行:./apm-server
此時查看kibana界面,會有如下信息:
在主頁-添加數據-APM中檢測APM Server 狀態,查看如下:
第二步:安裝配置apm-agent
1.安裝 APM 代理:pip install elastic-apm[flask]
,將 Python 的 APM 代理安裝為依賴項
2.配置代理,代理是在您的應用程序進程內運行的庫。APM 服務是基於 SERVICE_NAME 以編程方式創建的。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 使用環境變量初始化
from elasticapm.contrib.flask import ElasticAPM
from flask import Flask
app = Flask(__name__)
apm = ElasticAPM(app)
# 或進行配置以在您的應用程序設置中使用 ELASTIC_APM
from elasticapm.contrib.flask import ElasticAPM
app.config['ELASTIC_APM'] = {
# 設置所需的服務名稱。允許使用的字符:
# a-z、A-Z、0-9、-、_ 以及空格
'SERVICE_NAME': 'sample_apm',
# APM Server 需要令牌時使用
'SECRET_TOKEN': '',
# 設置定制 APM Server URL(默認值:http://localhost:8200)
'SERVER_URL': 'http://192.168.75.21:8200',
}
apm = ElasticAPM(app)
@app.route("/")
def index():
return "111"
if __name__ == '__main__':
app.run(debug=True)
運行該flask程序,檢測apm-agent狀態:
第三步:查看
附java項目的apm-agent:
http://search.maven.org/#search|ga|1|a%3Aelastic-apm-agent