elk笔记25--快速体验APM

elk笔记25--快速体验APM

  • 1 介绍
  • 2 安装测试
    • 2.1 安装 APM server
    • 2.2 python测试用例
    • 2.3 kibana APM 展示信息
  • 3 注意事项
  • 4 说明

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集成是
elk笔记25--快速体验APM_第1张图片
2)APM agents和APM集成运行在边缘机器上,并通过集中托管的Elastic agent 进行注册

elk笔记25--快速体验APM_第2张图片

以上为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
elk笔记25--快速体验APM_第3张图片
Traces
elk笔记25--快速体验APM_第4张图片
Dependencies
elk笔记25--快速体验APM_第5张图片
Overview
elk笔记25--快速体验APM_第6张图片
Transactions
elk笔记25--快速体验APM_第7张图片
Dependencies
elk笔记25--快速体验APM_第8张图片
Errors
elk笔记25--快速体验APM_第9张图片
Metrics
elk笔记25--快速体验APM_第10张图片

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

你可能感兴趣的:(Bigdata,elk,快速体验APM,Elastic,APM,应用性能监控系统)