• 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

  • 相关阅读:
    用Creator实现一个擀面的效果
    游戏开发中的多语言处理
    Docker(六)容器数据卷
    Docker(五)Docker镜像讲解
    Docker(四)Docker镜像安装
    Docker(三)Docker常用命令
    Docker(二)Docker配置
    nginx 与 tomcat 组合搭建web服务
    Zookeeper 使用
    tomcat-manager 设置
  • 原文地址:https://www.cnblogs.com/sanduzxcvbnm/p/12691467.html
Copyright © 2020-2023  润新知