正在加载

开始使用跟踪和 APM

无服务器

所需角色

对于可观测性无服务器项目,需要 管理员 角色或更高角色才能将 APM 数据发送到 Elastic。要了解更多信息,请参阅 分配用户角色和权限

在本指南中,您将学习如何收集应用程序性能监控 (APM) 数据并将其发送到 Elastic,然后实时探索和可视化数据。

您将使用 APM 代理将 APM 数据从您的应用程序发送到 Elastic。Elastic 提供用多种语言编写的 APM 代理,并支持 OpenTelemetry。您将使用的代理取决于您的服务中使用的语言。

要将 APM 数据发送到 Elastic,您必须安装 APM 代理并将其配置为将数据发送到您的项目

  1. 创建一个新的 Elastic Observability 无服务器项目,或打开一个现有的项目。

  2. 要安装和配置一个或多个 APM 代理,请执行以下操作之一

    • 在您的可观测性项目中,转到 添加数据应用程序Elastic APM 并按照提示操作。

    • 使用以下说明

      1. 安装代理

      使用 go get 安装 APM 代理包

      go get -u go.elastic.co/apm/v2
      

      2. 配置代理

      为了简化开发和测试,代理默认将数据发送到 Elastic,地址为 http://localhost:8200。要将数据发送到其他位置,您必须配置 ELASTIC_APM_SERVER_URL

      # The APM integration host and port
      export ELASTIC_APM_SERVER_URL=
      
      # If you do not specify `ELASTIC_APM_SERVICE_NAME`, the Go agent will use the
      # executable name. For example, if your executable is called "my-app.exe", then your
      # service will be identified as "my-app".
      export ELASTIC_APM_SERVICE_NAME=
      
      # API keys are used to authorize requests to the APM integration
      export ELASTIC_APM_API_KEY=
      

      3. 植入您的应用程序

      植入是将应用程序的代码扩展为向 Elastic APM 报告跟踪数据的过程。Go 应用程序必须在源代码级别手动植入。要植入您的应用程序,请使用以下方法之一

      在 APM 代理参考中了解更多信息

      使用 -javaagent JVM 选项手动设置和配置代理。不需要更改应用程序代码,但这需要重新启动应用程序。有关此设置方法的更多信息,请参见下文。

      1. 下载 APM 代理

      开始使用 Elastic APM Java 代理的第一步是检索代理 JAR 的副本。Java 代理版本发布到 Maven central。为了获得副本,您可以

      • 从 Maven central 下载 最新代理以前的版本

      • 使用 curl 下载

        curl -o 'elastic-apm-agent.jar' -L 'https://oss.sonatype.org/service/local/artifact/maven/redirect?r=releases&g=co.elastic.apm&a=elastic-apm-agent&v=LATEST'
        

      2. 添加 -javaagent 标志

      启动您的应用程序时,添加 JVM 标志:-javaagent:/path/to/elastic-apm-agent-<version>.jar

      3. 配置

      不同的应用程序服务器具有不同的设置 -javaagent 标志和系统属性的方式。启动您的应用程序(例如 Spring Boot 应用程序或其他嵌入式服务器)并添加 -javaagent JVM 标志。使用 -D 前缀来使用系统属性配置代理

      java -javaagent:/path/to/elastic-apm-agent-<version>.jar -Delastic.apm.service_name=my-cool-service -Delastic.apm.application_packages=org.example,org.another.example -Delastic.apm.server_url=http://127.0.0.1:8200 -jar my-application.jar
      

      请参阅 使用 -javaagent 标志进行手动设置 以了解更多信息。

      备用设置方法

      • 使用 apm-agent-attach-cli.jar 进行自动设置 无需更改 JVM 或应用程序服务器的配置即可自动设置代理。此方法无需更改应用程序代码或 JVM 选项,并允许附加到正在运行的 JVM。有关此设置方法的更多信息,请参阅 Java 代理文档
      • 通过编程 API 设置进行自我附加 通过一行代码更改和一个额外的 apm-agent-attach 依赖项来设置代理。此方法无需更改 JVM 选项,并且代理构件嵌入在打包的应用程序二进制文件中。有关此设置方法的更多信息,请参阅 Java 代理文档

      设置 APM 代理

      • 分析器运行时植入:该代理支持自动植入,无需任何代码更改,也无需重新编译您的项目。请参阅 分析器自动植入
      • NuGet 包:该代理作为一组 NuGet 包 提供,这些包可在 nuget.org 上找到。您可以通过引用这些包中的一个或多个并遵循包文档,将代理和特定的植入添加到 .NET 应用程序。
      • 主机启动挂钩:在 .NET Core 3.0+ 或 .NET 5+ 上,该代理支持自动植入,无需任何代码更改,也无需重新编译您的项目。有关更多详细信息,请参阅 .NET Core 上的零代码更改设置

      在 APM 代理参考中了解更多信息

      1. 安装 APM 代理

      将 Node.js 的 APM 代理作为依赖项安装到您的应用程序中。

      npm install elastic-apm-node --save
      

      2. 初始化

      重要的是,在您要求 Node.js 应用程序中的任何其他模块之前启动代理 - 即,在 http 之前以及在您的路由器之前等。

      这意味着您可能应该在应用程序的主文件中(通常是 index.jsserver.jsapp.js)要求和启动代理。

      这是一个 Elastic APM 通常如何被要求和启动的简单示例

      // Add this to the VERY top of the first file loaded in your app
      var apm = require('elastic-apm-node').start({
        // Override service name from package.json
        // Allowed characters: a-z, A-Z, 0-9, -, _, and space
        serviceName: '',
      
        // API keys are used to authorize requests to the APM integration
        apiKey: '',
      
        // Set custom APM integration host and port (default: http://127.0.0.1:8200)
        serverUrl: '',
      })
      

      现在,代理将监视您的应用程序的性能并记录任何未捕获的异常。

      在 APM 代理参考中了解更多信息

      1. 安装代理

      使用 发布的软件包 之一安装 PHP 代理。

      要使用 RPM 包 (RHEL/CentOS 和 Fedora)

      rpm -ivh <package-file>.rpm
      

      要使用 DEB 包 (Debian 和 Ubuntu)

      dpkg -i <package-file>.deb
      

      要使用 APK 包 (Alpine)

      apk add --allow-untrusted <package-file>.apk
      

      如果找不到您的发行版,则可以通过从源代码构建代理来安装该代理。以下说明将使用 Elastic 用于构建我们的官方软件包的相同 docker 环境来构建 APM 代理。

      注意

      该代理目前仅适用于 Linux 操作系统。

      1. 下载 代理源代码
      2. 执行以下命令来构建和安装代理
      cd apm-agent-php
      # for linux glibc - libc distributions (Ubuntu, Redhat, etc)
      export BUILD_ARCHITECTURE=linux-x86-64
      # for linux with musl - libc distributions (Alpine)
      export BUILD_ARCHITECTURE=linuxmusl-x86-64
      # provide a path to php-config tool
      export PHP_CONFIG=php-config
      
      # build extensions
      make -f .ci/Makefile build
      
      # run extension tests
      PHP_VERSION=`$PHP_CONFIG --version | cut -d'.' -f 1,2` make -f .ci/Makefile run-phpt-tests
      
      # install agent extensions
      sudo cp agent/native/_build/${BUILD_ARCHITECTURE}-release/ext/elastic_apm-*.so `$PHP_CONFIG --extension-dir`
      
      # install automatic loader
      sudo cp agent/native/_build/${BUILD_ARCHITECTURE}-release/loader/code/elastic_apm_loader.so `$PHP_CONFIG --extension-dir`
      

      2. 启用和配置 APM 代理

      php.ini 文件中启用和配置您的代理

      extension=elastic_apm_loader.so
      elastic_apm.bootstrap_php_part_file=<repo root>/agent/php/bootstrap_php_part.php
      

      在 APM 代理参考中了解更多信息

      Django 和 Flask 是 Elastic APM Python 代理支持的几个框架中的两个。有关受支持技术的完整列表,请参阅 Elastic APM Python 代理文档

      Django

      $ pip install elastic-apm
      

      1. 安装 APM 代理

      将 Python 的 APM 代理作为依赖项安装。

      $ pip install elastic-apm
      

      2. 配置 APM 代理

      代理是在您的应用程序进程内部运行的库。APM 服务是基于 SERVICE_NAME 以编程方式创建的。

      # Add the agent to the installed apps
      INSTALLED_APPS = (
        'elasticapm.contrib.django',
        # ...
      )
      
      ELASTIC_APM = {
        # Set required service name. Allowed characters:
        # a-z, A-Z, 0-9, -, _, and space
        'SERVICE_NAME': '',
      
        # API keys are used to authorize requests to the APM integration
        'API_KEY': '',
      
        # Set custom APM integration host and port (default: http://localhost:8200)
        'SERVER_URL': '',
      }
      
      # To send performance metrics, add our tracing middleware:
      MIDDLEWARE = (
        'elasticapm.contrib.django.middleware.TracingMiddleware',
        #...
      )
      

      Flask

      1. 安装 APM 代理

      将 Python 的 APM 代理作为依赖项安装。

      $ pip install elastic-apm[flask]
      

      2. 配置 APM 代理

      代理是在您的应用程序进程内部运行的库。APM 服务是基于 SERVICE_NAME 以编程方式创建的。

      # initialize using environment variables
      from elasticapm.contrib.flask import ElasticAPM
      app = Flask(__name__)
      apm = ElasticAPM(app)
      
      # or configure to use ELASTIC_APM in your application settings
      from elasticapm.contrib.flask import ElasticAPM
      app.config['ELASTIC_APM'] = {
        # Set required service name. Allowed characters:
        # a-z, A-Z, 0-9, -, _, and space
        'SERVICE_NAME': '',
      
        # API keys are used to authorize requests to the APM integration
        'API_KEY': '',
      
        # Set custom APM integration host and port (default: http://localhost:8200)
        'SERVER_URL': '',
      }
      
      apm = ElasticAPM(app)
      

      在 APM 代理参考中了解更多信息

      1. 安装 APM 代理

      将代理添加到您的 Gemfile 中。

      gem 'elastic-apm'
      

      2. 配置代理

      Ruby on Rails

      当您的应用程序启动时,APM 会自动启动。通过创建配置文件 config/elastic_apm.yml 来配置代理

      # config/elastic_apm.yml:
      
      # Set service name - allowed characters: a-z, A-Z, 0-9, -, _ and space
      # Defaults to the name of your Rails app
      service_name: 'my-service'
      
      # API keys are used to authorize requests to the APM integration
      api_key: ''
      
      # Set custom APM integration host and port (default: http://localhost:8200)
      server_url: 'http://localhost:8200'
      

      Rack

      对于 Rack 或兼容的框架(如 Sinatra),请在您的应用程序中包含中间件并启动代理。

      # config.ru
      
      app = lambda do |env|
        [200, {'Content-Type' => 'text/plain'}, ['ok']]
      end
      
      # Wraps all requests in transactions and reports exceptions
      use ElasticAPM::Middleware
      
      # Start an instance of the Agent
      ElasticAPM.start(service_name: 'NothingButRack')
      
      run app
      
      # Gracefully stop the agent when process exits.
      # Makes sure any pending transactions are sent.
      at_exit { ElasticAPM.stop }
      

      创建配置文件 config/elastic_apm.yml

      # config/elastic_apm.yml:
      
      # Set service name - allowed characters: a-z, A-Z, 0-9, -, _ and space
      # Defaults to the name of your Rack app's class.
      service_name: 'my-service'
      
      # API keys are used to authorize requests to the APM integration
      api_key: ''
      
      # Set custom APM integration host and port (default: http://localhost:8200)
      server_url: 'http://localhost:8200'
      

      在 APM 代理参考中了解更多信息

      Elastic 与 OpenTelemetry 集成,允许您重用现有的植入程序以轻松地将可观测性数据发送到 Elastic。

      有关如何组合 Elastic 和 OpenTelemetry 的更多信息,请参阅 OpenTelemetry

      虽然有很多配置选项,但所有 APM 代理都需要

      • 服务名称:APM 集成将已植入服务的名称(在每个 APM 代理的配置中定义)映射到存储其数据的索引。服务名称不区分大小写,并且必须是唯一的。

        例如,您不能有一个名为 Foo 的服务,也不能有另一个名为 foo 的服务。特殊字符将从服务名称中删除,并替换为下划线 (_)。

      • 服务器 URL:托管接收服务侦听事件的主机和端口。

        要查找您项目的 URL

        1. 转到 Cloud 控制台
        2. 在您的项目旁边,选择 管理
        3. 端点旁边,选择 查看
        4. 复制APM 端点
      • API 密钥:APM 代理和托管接收服务之间通信的身份验证方法。

        您可以在应用程序设置中创建和删除 API 密钥

        1. 转到主菜单应用程序部分中的任何页面。
        2. 点击顶部栏中的 Settings(设置)
        3. 转到 Agent keys(代理密钥)选项卡。
      • Environment(环境):此服务部署所在环境的名称,例如“production(生产)”或“staging(暂存)”。

        环境允许您在 UI 中轻松地在全球范围内筛选数据。 在跨代理命名环境时保持一致非常重要。

  3. 如果您正在使用 UI 中的分步说明,则在安装和配置代理后,您可以单击 Check Agent Status(检查代理状态)以验证代理是否正在发送数据。

要了解有关 APM 代理的更多信息,包括如何微调代理向 Elastic 发送跟踪的方式,请参阅 收集应用程序数据

安装一个或多个 APM 代理并成功发送数据后,您可以在 UI 中查看应用程序性能监控数据。

在主菜单的 Applications(应用程序)部分中,选择 Service Inventory(服务清单)。 这将显示所有服务的运行状况和总体性能的高级概述。

了解有关在 查看和分析数据 中可视化 APM 数据的更多信息。

提示

看不到任何数据? 在 问题排查 中查找有用的提示。

现在数据正在流式传输到您的项目中,请将您的调查深入一层。 了解如何使用 Elastic 的内置 APM 数据可视化针对 APM 数据发出警报微调代理向 Elastic 发送跟踪的方式

© . All rights reserved.