Fleet 管理的 APM Server
编辑Fleet 管理的 APM Server
编辑本指南将解释如何设置和配置 Fleet 管理的 APM Server。
先决条件
编辑您需要 Elasticsearch 用于存储和搜索数据,以及 Kibana 用于可视化和管理数据。在设置这些组件时,您需要
- 具有基本许可证或更高版本的 Elasticsearch 集群和 Kibana(版本 8.17)。 了解如何在您自己的硬件上安装 Elastic Stack。
- Kibana 和 Elasticsearch 之间的安全加密连接。有关更多信息,请参阅 启用安全性的情况下启动 Elastic Stack。
- Kibana 从 Elastic Package Registry 下载集成包所需的 Internet 连接。请确保 Kibana 服务器可以连接到端口
443
上的https://epr.elastic.co
。如果您的环境有网络流量限制,则有多种方法可以解决此要求。有关更多信息,请参阅 气隙环境。 - Kibana 用户在 Fleet 和 Integrations 上具有
All
权限。由于许多 Integrations 资产在各个空间之间共享,因此用户需要在所有空间中都拥有 Kibana 权限。 - 在 Elasticsearch 配置中,必须启用 内置 API 密钥服务。(
xpack.security.authc.api_key.enabled: true
) - 在 Kibana 配置中,必须设置已保存对象的加密密钥。Fleet 需要此设置才能保存 API 密钥并在 Kibana 中对其进行加密。您可以将
xpack.encryptedSavedObjects.encryptionKey
设置为至少 32 个字符的字母数字值,或者运行kibana-encryption-keys
命令来生成密钥。
安全设置示例
出于测试目的,您可以使用以下设置快速入门,但请确保在发送真实数据之前正确保护 Elastic Stack。
elasticsearch.yml 示例
xpack.security.enabled: true xpack.security.authc.api_key.enabled: true
kibana.yml 示例
elasticsearch.username: "kibana_system" xpack.encryptedSavedObjects.encryptionKey: "something_at_least_32_characters"
密码应存储在 Kibana 密钥库中,如 Elasticsearch 安全文档中所述。 |
步骤 1:设置 Fleet
编辑使用 Kibana 中的 Fleet 将 APM 数据引入 Elastic Stack。首次使用 Fleet 时,您需要设置它并添加 Fleet Server
要部署自管理的 Fleet Server,您需要安装一个 Elastic Agent 并将其注册到包含 Fleet Server 集成的代理策略中。
每个主机只能安装一个 Elastic Agent,这意味着除非您部署容器化的 Fleet Server,否则您不能在同一主机上运行 Fleet Server 和另一个 Elastic Agent。
- 在 Fleet 中,打开 设置 选项卡。有关这些设置的更多信息,请参阅 Fleet 设置。
-
在 Fleet Server 主机 下,单击 编辑主机 并指定一个或多个 Elastic Agent 将用于连接到 Fleet Server 的主机 URL。例如,
https://192.0.2.1:8220
,其中192.0.2.1
是您将安装 Fleet Server 的主机 IP。保存并应用您的设置。如果 编辑主机 选项灰显,则 Fleet Server 主机在 Fleet 之外配置。有关更多信息,请参阅 Kibana 中的 Fleet 设置。
- 在 Elasticsearch 主机 字段中,指定 Elastic Agent 将向其发送数据的 Elasticsearch URL。例如,
https://192.0.2.0:9200
。如果您已在启用安全性的情况下启动 Elastic Stack,请跳过此步骤(您无法更改此设置,因为它是在 Fleet 之外管理的)。 - 保存并应用设置。
-
单击 代理 选项卡,并按照产品内说明添加 Fleet 服务器
注意
- 如果您希望 Fleet 为您生成 Fleet Server 策略和注册令牌,请选择 快速启动。Fleet Server 策略将包括 Fleet Server 集成以及用于监视 Elastic Agent 的系统集成。此选项会生成自签名证书,不建议用于生产用例。
-
如果您希望
- 使用您自己的 Fleet Server 策略,请选择 高级。您可以创建一个新的 Fleet Server 策略或选择一个现有的策略。或者,您可以在不使用 UI 的情况下创建 Fleet Server 策略,并在此处选择该策略。
- 使用您自己的 TLS 证书来加密 Elastic Agent 和 Fleet Server 之间的流量。要了解如何生成证书,请参阅 为自管理的 Fleet Server 配置 SSL/TLS。
- 建议您为每个 Fleet Server 生成一个唯一的服务令牌。有关生成服务令牌的其他方法,请参阅
elasticsearch-service-tokens
。 -
如果您提供自己的证书
- 在运行
install
命令之前,请确保替换尖括号中的值。 - 请注意,
--url
指定的 URL 必须与用于生成--fleet-server-cert
指定的证书的 DNS 名称匹配。
- 在运行
install
命令将 Elastic Agent 作为托管服务安装,并将其注册到 Fleet Server 策略中。有关更多 Fleet Server 命令,请参阅 Elastic Agent 命令参考。
如果安装成功,您将看到 Fleet Server 已连接的确认信息。单击 继续注册 Elastic Agent 以开始将您的代理注册到 Fleet Server 中。
如果您无法添加 Fleet 管理的代理,请单击 代理 选项卡,并确认运行 Fleet Server 的代理运行状况良好。
有关更多信息,请参阅 Fleet Server。
步骤 2:添加和配置 APM 集成
编辑- 在 Kibana 中,在主菜单中找到 集成 或使用全局搜索字段。
-
选择 Elastic APM。
-
单击 添加 Elastic APM。
-
在 添加 Elastic APM 集成 页面上,定义 APM Server 将侦听的主机和端口。记下此值,您稍后会用到它。
使用 Docker 或 Kubernetes?将主机设置为
0.0.0.0
以绑定到所有接口。 - 在 代理授权 下,设置一个密钥令牌。这将用于授权从 APM 代理到 APM Server 的请求。记下此值,您稍后会用到它。
- 单击 保存并继续。此步骤需要一两分钟才能完成。完成后,您将拥有一个代理策略,其中包含您刚刚指定的配置的 APM 集成策略。
-
要查看新策略,请单击 代理策略 1。
分配给此策略的任何 Elastic Agent 都将从您检测的应用程序收集 APM 数据。
步骤 3:安装 APM 代理
编辑APM 代理使用与您的服务相同的语言编写。要监视新服务,您必须安装代理并使用服务名称、APM Server 主机和密钥令牌对其进行配置。
-
服务名称:APM 集成将每个 APM 代理配置中定义的检测服务的名称映射到其数据存储在 Elasticsearch 中的索引。服务名称不区分大小写且必须唯一。例如,您不能有一个名为
Foo
的服务和另一个名为foo
的服务。特殊字符将从服务名称中删除,并替换为下划线 (_
)。 - APM Server URL:APM Server 侦听事件的主机和端口。这应该与设置 APM 集成时定义的主机和端口匹配。
- 密钥令牌:APM 代理和 APM Server 通信的身份验证方法。这应该与设置 APM 集成时定义的密钥令牌匹配。
如果需要更改 APM Server URL 或密钥令牌以匹配您的 APM 代理,则可以编辑 APM 集成设置。
1. 将代理添加到您的项目
首先,将 Elastic APM 代理插件添加到您应用程序的 build.gradle
文件中,如下所示
// Android app's build.gradle file plugins { id "com.android.application" id "co.elastic.apm.android" version "[latest_version]" }
2. 配置代理
添加代理插件后,对其进行配置。最小配置设置 Elastic APM 集成端点,如下所示
// Android app's build.gradle file plugins { //... id "co.elastic.apm.android" version "[latest_version]" } elasticApm { // Minimal configuration serverUrl = "https://your.elastic.server" // Optional serviceName = "your app name" serviceVersion = "0.0.0" apiKey = "your server api key" secretToken = "your server auth token" }
您可以在 Gradle 插件门户中找到最新版本。 |
|
默认为您的 |
|
默认为您的 |
|
默认为 null。有关 API 密钥的更多信息,请参阅此处。 |
|
默认为 null。 |
当同时提供 secretToken
和 apiKey
时,apiKey 具有优先权,secretToken 将被忽略。
3. 初始化代理
在将您的项目与上述 Gradle 更改同步后,需要在您的 Application 类中初始化 Elastic APM 代理。此示例显示配置代理的最简单方法
// Your Application class class MyApp extends android.app.Application { @Override public void onCreate() { super.onCreate(); ElasticApmAgent.initialize(this); } }
剩下的就是编译并运行您的应用程序。就这样!
在代理参考中了解更多信息
在 APM Android 代理参考中阅读更多内容。
1. 安装代理
使用 go get
安装 Elastic APM Go 代理包
go get -u go.elastic.co/apm/v2
2. 配置代理
为了简化开发和测试,代理默认将数据发送到 https://127.0.0.1:8200
的 Elastic APM 集成。要将数据发送到其他位置,您必须配置 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= # Secret tokens are used to authorize requests to the APM integration export ELASTIC_APM_SECRET_TOKEN=
3. 检测您的应用程序
检测是指扩展应用程序代码以向 Elastic APM 报告跟踪数据的过程。Go 应用程序必须在源代码级别手动进行检测。要检测您的应用程序,请使用以下方法之一
在代理参考中了解更多信息
1. 将代理依赖项添加到您的项目
将 Elastic APM iOS 代理添加到您的 Xcode 项目或您的 Package.swift
。
以下是将程序包依赖项添加到标准 Xcode 项目的说明。
有关将依赖项添加到您的 Package.swift
的详细信息,请参阅添加对另一个 Swift 包的依赖项。这是一个有用的代码片段
Package( dependencies:[ .package(name: "apm-agent-ios", url: "https://github.com/elastic/apm-agent-ios.git", from: "1.0.0"), ], targets:[ .target( name: "MyApp", dependencies: [ .product(name: "ElasticApm", package: "apm-agent-ios") ] ), ])
2. 初始化代理
如果您使用 SwiftUI
构建您的应用程序,请将以下内容添加到您的 App.swift
中
import SwiftUI import ElasticApm class AppDelegate : NSObject, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { var config = AgentConfigBuilder() .withServerUrl(URL(string:"http://127.0.0.1:8200")) .withSecretToken("<SecretToken>") .build() ElasticApmAgent.start(with: config) return true } } @main struct MyApp: App { @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate init() { } var body: some Scene { WindowGroup { ContentView() } } }
如果您不使用 SwiftUI
,则也可以将相同的内容添加到您的 AppDelegate.swift
文件中
import UIKit import ElasticApm @main class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { var config = AgentConfigBuilder() .withServerUrl(URL(string:"http://127.0.0.1:8200")) .withSecretToken("<SecretToken>") .build() ElasticApmAgent.start(with: config) return true } }
在代理参考中了解更多信息
在 APM iOS 代理参考中阅读更多内容。
使用 -javaagent
JVM 选项手动设置和配置代理。不需要更改应用程序代码,但这需要重新启动应用程序。有关此设置方法的更多信息,请参见下文。
1. 下载 APM 代理
开始使用 Elastic APM Java 代理的第一步是检索代理 JAR 的副本。Java 代理版本发布到 Maven Central。为了获取副本,您可以
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 代理
可以使用几种不同的方式将 .NET 代理添加到应用程序中
- 分析器运行时检测:该代理支持自动检测,无需任何代码更改,也无需重新编译您的项目。请参阅分析器自动检测。
- NuGet 包:该代理以 NuGet 包的形式提供,这些包可在 nuget.org 上获得。您可以通过引用一个或多个这些程序包并遵循程序包文档,将代理和特定的检测添加到 .NET 应用程序中。
- 主机启动挂钩:在 .NET Core 3.0+ 或 .NET 5+ 上,代理支持自动检测,无需任何代码更改,也无需重新编译您的项目。有关更多详细信息,请参阅.NET Core 上的零代码更改设置。
在代理参考中了解更多信息
1. 安装 APM 代理
将 Node.js 的 APM 代理作为依赖项安装到您的应用程序中。
npm install elastic-apm-node --save
2. 初始化
重要的是,在您在 Node.js 应用程序中需要 任何其他模块之前启动代理 - 即在 http
之前以及在您的路由器等之前。
这意味着您可能应该在应用程序的主文件(通常是 index.js
、server.js
或 app.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: '', // Use if APM integration requires a token secretToken: '', // Use if APM integration uses API keys for authentication apiKey: '', // Set custom APM integration host and port (default: http://127.0.0.1:8200) serverUrl: '', })
现在,代理将监视您的应用程序的性能并记录任何未捕获的异常。
在代理参考中了解更多信息
1. 安装代理
使用 支持平台的包之一安装代理。
要使用 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 操作系统。
- 从 https://github.com/elastic/apm-agent-php/ 下载代理源代码。
- 执行以下命令以构建代理并安装它
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
在代理参考中了解更多信息
- Django
-
1. 安装 APM 代理
将 Python 的 APM 代理作为依赖项安装。
$ pip install elastic-apm
2. 配置代理
代理是在应用程序进程内部运行的库。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': '', # Use if APM integration requires a token 'SECRET_TOKEN': '', # Set custom APM integration host and port (default: https://127.0.0.1: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 服务是根据
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': '', # Use if APM integration requires a token 'SECRET_TOKEN': '', # Set custom APM integration host and port (default: https://127.0.0.1:8200) 'SERVER_URL': '', } apm = ElasticAPM(app)
在代理参考中了解更多信息
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' # Use if APM integration requires a token secret_token: '' # Set custom APM integration host and port (default: https://127.0.0.1:8200) server_url: 'https://127.0.0.1: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' # Use if APM integration requires a token secret_token: '' # Set custom APM integration host and port (default: https://127.0.0.1:8200) server_url: 'https://127.0.0.1:8200'
在代理参考中了解更多信息
1. 启用真实用户监控 (RUM)
RUM 默认处于禁用状态。通过将 Enable RUM
设置为 true
来启用它。
2. 设置代理
使用 <script>
标签或使用捆绑器设置代理。
同步/阻塞模式
添加 <script> 标签以加载捆绑包,并使用 elasticApm
全局对象初始化代理
<script src="https://<your-cdn-host>.com/path/to/elastic-apm-rum.umd.min-<version>.js" crossorigin></script> <script> elasticApm.init({ serviceName: '<instrumented-app>', serverUrl: '<apm-server-url>', }) </script>
异步/非阻塞模式
异步加载脚本可确保代理脚本不会阻止页面上的其他资源,但是,它仍会阻止浏览器 onload
事件。
<script> ;(function(d, s, c) { var j = d.createElement(s), t = d.getElementsByTagName(s)[0] j.src = 'https://<your-cdn-host>.com/path/to/elastic-apm-rum.umd.min-<version>.js' j.onload = function() {elasticApm.init(c)} t.parentNode.insertBefore(j, t) })(document, 'script', {serviceName: '<instrumented-app>', serverUrl: '<apm-server-url>'}) </script>
使用捆绑器
将真实用户监控 APM 代理作为依赖项安装到您的应用程序中
npm install @elastic/apm-rum --save
配置代理
import { init as initApm } from '@elastic/apm-rum' const apm = initApm({ // Set required service name (allowed characters: a-z, A-Z, 0-9, -, _, and space) serviceName: '', // Set custom APM integration host and port (default: https://127.0.0.1:8200) serverUrl: 'https://127.0.0.1:8200', // Set service version (required for sourcemap feature) serviceVersion: '' })
在代理参考中了解更多信息
Elastic 与 OpenTelemetry 集成,使您可以重用现有检测,以轻松地将可观测性数据发送到 Elastic Stack。
有关如何组合使用 Elastic 和 OpenTelemetry 的更多信息,请参阅OpenTelemetry 集成。
步骤 4:查看您的数据
编辑回到 Kibana,在“可观测性”下,选择“APM”。您应该看到应用程序性能监控数据流入 Elastic Stack!