Observability:使用 Elastic Agent 提取应用程序跟踪 - Elastic Stack 8.0

161 篇文章 30 订阅

在 Elastic Stack 8.0 之前,我们使用 APM server 来采集 Application Monitoring (APM) 数据。随着 Elastic Agent 在 8.0 的推出,我们可以使用 Elastic Agent 来采集 APM 数据。如果你对 Elastic Stack 的 APM 还不是很熟的话,请阅读我之前的文章 “Solutions:应用程序性能监控/管理(APM)实践”。 

在今天的文章中,我将如何:

  • 收集应用程序性能监控 (APM) 数据
  • 将 APM 数据发送到 Elastic Stack
  • 实时探索和可视化数据

在如下的展示中,我将使用 Elastic Stack 8.1 来进行展示。

安装

你需要 Elasticsearch 来存储和搜索数据,需要 Kibana 来可视化和管理数据。 你可以使用我们在 Elastic Cloud上托管的 Elasticsearch 服务(推荐),或者在你自己的硬件上自行管理 Elastic Stack。在本文章的介绍中,我们将使用 macOS 来安装 Elasticsearch 及 Kibana。你可以参考我之前的文章 “Elastic Stack 8.0 安装 - 保护你的 Elastic Stack 现在比以往任何时候都简单” 来安装 Elasticsearch 及 Kibana。

在启动 Elasticsearch 之前,我们还必须针对 Elasticsearch 的配置文件做一项修改:

config/elasticsearch.yml

xpack.security.authc.api_key.enabled: true

我们把上面的配置添加到 config/elasticsearch.yml 文件的最后面。这个是为了能够我们使用 API key 的方式来访问 Elasticsearch。修改完毕后,我们重新启动 Elasticsearch。

我们还必须为 Kibana 做一项修正。我们首先在 Kibana 的安装目录中使用如下的命令:

./bin/kibana-encryption-keys generate

上面的命令将生成三个 keys:

xpack.encryptedSavedObjects.encryptionKey: dc03f2cd832a9c0e77d2d67491ad7e30
xpack.reporting.encryptionKey: 77c42cd9e34a64d4c651b2f479215722
xpack.security.encryptionKey: cadce1bbc11b88c47882b97d5a67528a

我们把上面的三个 keys 拷贝并粘贴到 config/kibana.yml 文件的最后面:

config/kibana.yml

 添加完毕后,我们重新启动 Kibana。

Kibana 需要 Internet 连接才能从 Elastic Package Registry 下载集成包。 确保 Kibana 服务器可以连接到端口 443 上的 https://epr.elastic.co。如果你的环境有网络限制,则有一些方法可以解决此要求。 有关详细信息,请参阅气隙环境

另外,我们必须注意的一点是 Fleet 在目前只供具有 superuser 角色的用户使用。Fleet 是 Kibana 中的界面。它被用来管理及监控 Elastic Agents。

配置 Fleet 

使用 Kibana 中的 Fleet 来对 Elastic agents 进行管理。第一次使用 Fleet 时,你可能需要对其进行设置并添加 Fleet Server。要部署自我管理的 Fleet Server,请安装 Elastic Agent 并将其注册到包含 Fleet Server 集成的代理策略中:

在上面的图中,我们填入的是 macOS 机器的 IP 地址,因为我们想把 Fleet server 安装到这个机器上。 我们可以通过如下的方式来找到该机器的地址:

$ ifconfig | grep 192
	inet 192.168.0.3 netmask 0xffffff00 broadcast 192.168.0.255

点击上面的 Save and apply settings:

 

从上面的截图中,我们可以看出来,还没有一个含有 Fleet server 的 policy。我们点击 Create policy:

我们需要等一会儿:

上面显示我们已经成功地创建了一个叫做 Fleet Server policy 1。我们也可以到 Agent policies 里进行查看:

我们点击  Fleet Server policy 1,可以看到:

在这个 policy 里它包含采集该机器的  system 日志及指标,同时也部署一个 Fleet Server。

我们再次回到 Agents 界面:

点击上面的 Go to download page。它会自动帮我待到和当前 Elasticsearch 匹配的下载网页来下载 Elastic Agent:

针对我们的情况,我们下载 MAC 版本。并保存到我们想要的目录中:

$ pwd
/Users/liuxg/elastic
$ ls elastic-agent-8.1.0-darwin-x86_64.tar.gz 
elastic-agent-8.1.0-darwin-x86_64.tar.gz
$ tar xzf elastic-agent-8.1.0-darwin-x86_64.tar.gz 
$ cd elastic-agent-8.1.0-darwin-x86_64

我们按照上面的命令来进行解压缩,并进入到解压缩的目录中。我们再次回到 agent 的安装页面:

 

我们点击上面的两个拷贝图标。保存好 Service token。我们使用下面的命令来启动 Fleet Server:

sudo ./elastic-agent install  \
  --fleet-server-es=https://192.168.0.3:9200 \
  --fleet-server-service-token=AAEAAWVsYXN0aWMvZmxlZXQtc2VydmVyL3Rva2VuLTE2NDY3OTk4MDk5NjE6dEJUTW9TLTdRV1d3RTN1cDBfaDRRdw \
  --fleet-server-policy=fleet-server-policy \
  --fleet-server-es-ca-trusted-fingerprint=0472a10f8a6a8a2499e32cb2d9fcb94837cbf521c35ee65afe425b8b313d8d76 \
  --fleet-server-insecure-http

 我们在 Elastic Agent 解压缩的目录中运行上面的命令:

我们看到成功的信息。

上面显示 Fleet Server 已经成功地连接上了。我们点击 Continue:

 上面显示 status 为 updating。我们需要等一段时间:

上面的状态显示 Healthy,表明目前的 Fleet Server 已经成功地运行起来了。

几点说明:

  • 强烈建议为每个 Fleet Server 创建一个唯一的 Service token。你可以使用 elasticsearch-service-tokens 来生成 service tokens
  • 在上面,由于我们使用的自签名证书,所以,我们看到一个选项为 --fleet-server-insecure-http。如果你有自己的证书,你可以使用如下的命令来进行安装。必须注意的是 URL 必须与用于生成由 --fleet-server-cert 指定的证书的 DNS 名称匹配。
sudo ./elastic-agent install --url=https://192.0.2.1:8220 \ 
 -f \
 --fleet-server-es=https://192.0.2.0:9200 \
 --fleet-server-service-token=AAEAaWVsYXN0aWcvZmxlZXQtc2VydmVyL3rva2VuLTE2MzIzNTYcNTQ3MjI6dER1eE9XbW5RRTZqNlJMWEdIRzAtZw \
  --fleet-server-policy=27467ed1-1bfd-11ec-9b88-a7c3d83e2897 \
  --certificate-authorities=<PATH_TO_CA> \
  --fleet-server-es-ca=<PATH_TO_ES_CERT> \
  --fleet-server-cert=<PATH_TO_FLEET_SERVER_CERT> \
  --fleet-server-cert-key=<PATH_TO_FLEET_SERVER_CERT_KEY>

添加 Elastic Agent 到 Fleet

在上面,我们已经成功地运行了一个 Elastic Agent 到我们的 macOS 机器上。它事实上运行了一个 Elastic Agent。这个 Elastic Agent 可以用于收集 system 日志及指标。同时它在 macOS 上也安装了一个 Fleet Server。

Elastic Agent 是一个单一的统一代理,你可以将其部署到主机或容器以收集数据并将其发送到 Elastic Stack。 在后台,Elastic Agent 运行您的配置所需的 Beats shippers 或 Elastic Endpoint。

我们可以按照同样的方法来安装 Elastic Agent 到其它的机器上:

 

请注意,在上面的部署中,许多个 Elastic Agent 可以共同分享一个 Fleet Server。我们不必要为每个 Agent 分别创建一个单独的 Fleet Server。事实上,我们可以直接运行之前的那个 install 命令到其它的机器上,那么就可以在那个机器上安装一个 Elastic Agent。 比如,我运行之前的那个同样的命令到一个树莓派的机器上:

sudo ./elastic-agent install  \
  --fleet-server-es=https://192.168.0.3:9200 \
  --fleet-server-service-token=AAEAAWVsYXN0aWMvZmxlZXQtc2VydmVyL3Rva2VuLTE2NDY3OTk4MDk5NjE6dEJUTW9TLTdRV1d3RTN1cDBfaDRRdw \
  --fleet-server-policy=fleet-server-policy \
  --fleet-server-es-ca-trusted-fingerprint=0472a10f8a6a8a2499e32cb2d9fcb94837cbf521c35ee65afe425b8b313d8d76 \
  --fleet-server-insecure-http

 

 

从上面,我们可以看出来两个机器的 Agents 的状态都是 Healthy。我们甚至可以创建其它的 policy,并把这个 agent 重新分配到其它的 policy 中去:

这里就不再累述了。

添加 APM integration

接下来,将 APM 集成添加到 Elastic Agent 使用的默认策略中。 策略跨一组弹性代理管理设置,并且可能包含任意数量的集成,用于从主机上运行的各种服务收集可观察性数据。

我们首先来看看我们到底已经安装了那些 integrations:

从上图中,我们可以看出来有三个 integrations 已经被安装了。

我们也可以查看一下我们到底有那些 policies:

从上面,我们可以看到只有一个 Fleet Server policy。 我们可以点击 Create agent policy 按钮:

 

从上面我们可以看出来有一个新创建的 apm policy。点击上面的链接:

 

由于我们已经安装 Elastic Agent 到 macOS 的机器上了。我们可以不需要再进行 enroll。我们可以跳过这里的一些步骤。如果你是有新的机器,那么你需要按照这里的步骤一步一步地进行安装。

我们再次回到 Fleet 界面:

我们需要把当前的 macOS 安装的 liuxgm.local 这个 agent 分配到 apm policy 中去,这它可以帮我们采集数据:

安装 APM agents

APM 代理使用与你的服务相同的语言编写。 要监控新服务,你必须安装代理并使用服务名称、APM 服务器主机和秘密令牌对其进行配置。

  • Service name:APM 集成将检测服务的名称(在每个 APM 代理的配置中定义)映射到其数据存储在 Elasticsearch 中的索引。 服务名称不区分大小写,并且必须是唯一的。 例如,你不能拥有一个名为 Foo 的服务和另一个名为 foo 的服务。 特殊字符将从服务名称中删除并替换为下划线 (_)。
  • APM Server URL:APM 服务器侦听事件的主机和端口。 这应该与设置 APM 集成时定义的主机和端口相匹配。
  • Secret token:APM 代理和 APM 服务器通信的身份验证方法。 这应该与设置 APM 集成时定义的秘密令牌相匹配。

下面,我来针对 Java APM agent 来做演示。如我找不到如何安装 agents 的指令,我们可以进入这个页面:

 我们需要去下载 agent jar。 

我们接下参考之前的文章 “Observability:如何为 Java 应用进行 APM” 。我们使用里面的例子来进行展示。我们把上面下载的文件拷贝到项目的根目录中去。

$ pwd
/Users/liuxg/demos/apm/opbeans-java/opbeans
$ ls
elastic-apm-agent-1.29.0.jar mvnw.cmd                     src
mvnw                         pom.xml                      target

 我们使用如下的命令来编译这个 Java 应用:

mvn package

在编译的时候需要选择 Java 8,否则我们可能会有错误。我们可以找到的被编译好的 jar 文件:

$ ls target/opbeans-0.0.1-SNAPSHOT.jar
target/opbeans-0.0.1-SNAPSHOT.jar

我们参考这里的命令来进行修改:

java -javaagent:./elastic-apm-agent-1.29.0.jar \
-Delastic.apm.service_name=opbeans-java \
-Delastic.apm.server_urls=http://localhost:8200 \
-Delastic.apm.secret_token= \
-Delastic.apm.environment=production \
-Delastic.apm.application_packages=co.elastic.apm.opbeans \
-jar ./target/opbeans-0.0.1-SNAPSHOT.jar

运行上面的指令:

在上面,我们成功地启动了 Java Spring Boot 应用。我们带自己的浏览器,并输入地址:http://localhost:8080/

我们在上面的界面中进行一些操作从能够生产一些请求。我们将在后面的 APM 应用中来分析这些请求的性能。

查看数据

我们再回到 Kibana 的界面:

从上面,我们可以看到一个叫做 opbeans-java 的服务。这个是在我们上面的命令中定义的。

我们可以点击上面的 APIResController 来查看对性能影响最大的一个 transaction:

从这里我们可以看出来这个 transaction 的时间到底花在哪里了。

从上面的整个顺序来说,我们和之前的差别不大,只是我们现在可以通过 Fleet 来对 APM server 进行集中管理。这样更容易让我们管理。 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值