當前位置:網站首頁>elk筆記25--快速體驗APM

elk筆記25--快速體驗APM

2022-07-23 19:15:29昕光xg

1 介紹

Elastic APM是建立在Elastic Stack上的應用程序性能監控系統。它允許用戶通過收集關於傳入請求、數據庫查詢、緩存調用、外部HTTP請求等響應時間的詳細性能信息,從而實時監控軟件服務和應用程序。這使用戶定比特和修複性能問題變得非常容易。
Elastic APM還會自動收集未處理的錯誤和异常,這些錯誤主要基於堆棧跟踪進行分組,因此用戶可以在出現新錯誤時識別它們,並關注特定錯誤發生的次數。
在調試生產系統時,度量標准是另一個重要的信息來源。Elastic APM agent會自動獲取基本的主機級指標和特定的代理相關的指標,比如Java代理中的JVM指標和Go代理中的Go運行時指標。

Elastic APM 包含4個主要部分: APM agents, Elastic APM integration, Elasticsearch, and Kibana , 它們的主要工程架構包括如下兩種:
1) 邊緣機器上的APM agents 將數據發送到集中托管的APM集成是
在這裏插入圖片描述
2)APM agents和APM集成運行在邊緣機器上,並通過集中托管的Elastic agent 進行注册

在這裏插入圖片描述

以上為Elastic APM的主要功能和架構,在了解Elastic APM 主要功能後,本文將從基礎開安裝 APM server,並通過 python 案例加以展示。

2 安裝測試

2.1 安裝 APM server

docker pull docker.elastic.co/apm/apm-server:7.15.2

curl -L -O https://raw.githubusercontent.com/elastic/apm-server/7.15/apm-server.docker.yml

docker run -d \
  -p 8200:8200 \
  --name=apm-server-7.15.2 \
  --user=apm-server \
  --volume="/home/xg/soft/elk/apm-7.15.2/apm-server.docker.yml:/usr/share/apm-server/apm-server.yml:ro" \
  docker.elastic.co/apm/apm-server:7.15.2 \
  --strict.perms=false -e \
  -E output.elasticsearch.hosts=["es_ip:9200"] -E output.elasticsearch.username="es_user" -E output.elasticsearch.password="es_pwd"

2.2 python測試用例

#!/usr/bin/python3

""" pip3 install elastic-apm[flask] """

import time
from flask import Flask
import requests
import json
from elasticapm.contrib.flask import ElasticAPM


app = Flask(__name__)
app.config['ELASTIC_APM'] = {
    
    'SERVICE_NAME': 'xg-flask-01',
    'SECRET_TOKEN': 'not-set',
    'SERVER_URL': 'http://localhost:8200'
}
apm = ElasticAPM(app)


@app.route("/")
def hello_world():
    ret_dict = {
    
        "main": "/ , Hello. World",
        "test_error": "/api/test-error",
        "test_wait": "/api/test-wait",
        "test_get": "/api/test-get"
    }
    return json.dumps(ret_dict)


@app.route("/api/test-error")
def test_error():
    try:
        print(10/0)
    except Exception as e:
        print(f"error: {
      e}")
    print(101 + "error")
    return json.dumps({
    'msg': "test-error"})


def my_wait(ts=1):
    time.sleep(ts)


@app.route("/api/test-wait")
def test_wait():
    ts = 5
    print("wait")
    my_wait(ts)
    return json.dumps({
    'msg': f"wait {
      ts}s"})



@app.route("/api/test-get")
def test_get():
    r = requests.get(url='http://www.baidu.com')
    return json.dumps({
    'msg': f"get www.baidu.com, status_code={
      r.status_code}"})


if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8080)

2.3 kibana APM 展示信息

Services
在這裏插入圖片描述
Traces
在這裏插入圖片描述
Dependencies
在這裏插入圖片描述
Overview
在這裏插入圖片描述
Transactions
在這裏插入圖片描述
Dependencies
在這裏插入圖片描述
Errors
在這裏插入圖片描述
Metrics
[圖片]

3 注意事項

  1. 看APM官方文檔,發現Elastic 的 apm-server 支持將數據寫入到 kafka, 因此可以考慮使用其 apm-server 將數據寫入 kafka, 然後再進一步將數據導入到 clickhouse或者其它db, 最上層封裝自己的 APM 查詢前端,那麼就可以實現有個人特色的APM了.
    優點: 可以直接使用 elastic 的 apm-server 和 agent 接入規範,我們只需要關注用戶查詢即可
    缺點:需要自己實現 APM 的前端,可以參考 elastic 的 apm 功能
    Configure the Kafka output

4 說明

測試環境:
elk 7.15.2
apm-server 7.15.2
參考文檔:
APM User Guide
Run APM Server on Docker
agent code example

版權聲明
本文為[昕光xg]所創,轉載請帶上原文鏈接,感謝
https://cht.chowdera.com/2022/204/202207231715484878.html

隨機推薦