Solutions:應用程序性能監控/管理(APM)實踐---python/flask


本文部分內容轉載自: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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM