Observability: Elastic RUM (真实用户监控)演示

Posted Elastic 中国社区官方博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Observability: Elastic RUM (真实用户监控)演示相关的知识,希望对你有一定的参考价值。

在之前的文章 “Elastic RUM(真实用户监测)浅谈”,我们详细描述了 Elastic RUM (Real User Monitor)。在今天的文章中,我将详细一步一步地对该文章进行演示以便大家也能和我一样进行展示。在今天的展示中,我将使用如下的架构:

APM 集成架构

Elastic APM 集成由四个组件组成:APM 代理Elastic APM 集成ElasticsearchKibana。 通常,这四个组件可以通过两种方式协同工作。边缘机器上的 APM 代理将数据发送到集中托管的 APM 集成:

在本演示中,我们的边缘设备也即 macOS。它通过 Elastic APM agent 采集信息,并传输到一个中央的 APM 集成。

在本次的演示中,我将使用最新的 Elastic Stack 8.6.2 来进行展示。

Elastic RUM(真实用户监测)

安装

我们先按照我之前的文章:

来安装 Kibana 及 Elasticsearch。不过在安装的时候,我们需要做一些调整。在启动 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
xpack.encryptedSavedObjects.encryptionKey: 2d8da4d234eca75fb211e55162db644f
xpack.reporting.encryptionKey: 243a64bcf4f418f5afe0c86b64a0b33c
xpack.security.encryptionKey: f2d976b5bb1784deb9f9cf8e4e7cffd2

我们把上面的三个 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 agent 的管理。第一次使用 Fleet 时,你可能需要对其进行设置并添加 Fleet Server。要部署自我管理的 Fleet Server,请安装 Elastic Agent 并将其注册到包含 Fleet Server 集成的代理策略中:
 

在进行安装之前,我们必须确信 Elasticsearch 的访问地址。否则我们需要在 Settings 里进行修改。按照上面的指令,我们在 Ubuntu OS 机器上打入如上的指令:

sudo ./elastic-agent install \\
  --fleet-server-es=https://192.168.0.3:9200 \\
  --fleet-server-service-token=AAEAAWVsYXN0aWMvZmxlZXQtc2VydmVyL3Rva2VuLTE2ODAyMjY0OTAyOTg6Szl4NUJiamVRc3FfOVdaU29FWmVqQQ \\
  --fleet-server-es-ca-trusted-fingerprint=8dcf777f56e02a0df19f1befa593b2d2c97ca6ec780391ad6f72edaf953244f8

 

在 Kibana 的界面,我们可以看到:

我们退回到 Agents 页面:

稍等一会儿,我们就可以看到 liuxgu,也就是我的 Ubuntu 机器上的 Agents 状态显示未 Healthy。我们点击 Fleet Server Policy:

这样我们就把 apm-1 添加到 Fleet Server Policy 里去了。我们可以再次回到 policy 的页面进行查看:

这样,我们就完成了 Elastic Stack 方面的安装了。

启动测试应用 

我们打入如下的命令来下载应用:

git clone https://github.com/carlyrichmond/carfront
git clone https://github.com/carlyrichmond/cardatabase

我们首先进入到 cardatabase 应用目录中,并打入如下的命令:

./mvnw spring-boot:run

它将启动一个 Spring boot 的应用:

它是一个非常简单的存在于内存里的数据库。

我们接下来进入到 carfront 应用:

$ pwd
/Users/liuxg/demos/apm/sip/carfront
$ ls
README.md         package-lock.json public            yarn.lock
node_modules      package.json      src

由于一些原因,在我的电脑上的 nodejs 的版本高于原来设计时的版本,我们需要针对 package.json 文件做一些调整。具体可以参考这个链接。 

package.json


  "name": "carfront",
  "version": "0.1.0",
  "private": true,
  "dependencies": 
    "@elastic/apm-rum": "^4.9.1",
    "@material-ui/core": "^3.9.4",
    "@material-ui/icons": "^3.0.2",
    "elastic-apm-js-base": "^3.0.0",
    "react": "^16.8.2",
    "react-confirm-alert": "^2.8.0",
    "react-csv": "^1.1.2",
    "react-dom": "^16.8.2",
    "react-scripts": "2.1.5",
    "react-skylight": "^0.5.1",
    "react-table": "^6.11.5"
  ,
  "scripts": 
    "start": "react-scripts --openssl-legacy-provider start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  ,
  "eslintConfig": 
    "extends": "react-app"
  ,
  "browserslist": [
    ">0.2%",
    "not dead",
    "not ie <= 11",
    "not op_mini all"
  ]

在上面,我把 start 部分的命令修改为:

react-scripts --openssl-legacy-provider start

我们可以使用如下的命令来安装所需要的模块:

npm install

我们接下来使用如下的命令来启动:

npm start

这样,我们就可以在浏览器中看到如下的页面:

这点一个非常简单的汽车展示列表。

这样我们的两个应用就基本上安装好了。

安装 Elastic APM agent

现在是时候为我们的 React 应用添加 RUM 了。我们回到 Kibana 的界面:

上面显示我们的 APM Server 状态是正确的。接下来,我们选择 RUM:

在界面中,它详细地描述了如何配置:

针对我们的设计,我们需要修改 rum.js 文件:

import  init as initApm  from '@elastic/apm-rum'
var apm = initApm(
  // Set required service name (allowed characters: a-z, A-Z, 0-9, -, _, and space)
  serviceName: 'carfront',
  // Set the version of your application
  // Used on the APM Server to find the right sourcemap
  serviceVersion: '0.90',
  // Set custom APM Server URL (default: http://localhost:8200)
  serverUrl: 'http://192.168.0.4:8200',
  // For distributed tracing to different origin (CORS)
  // distributedTracingOrigins: ['http://localhost:8080'],
)

export default apm;

请注意上面的 serverUrl。它指向我们在 Ubuntu OS 上部署的 APM server 地址。修改完毕后,我们需要重新启动 carfront 应用:

npm start

我们在 Kibana 中查看 agent 的状态:

上面显示状态良好。

我们尝试查看 Service Map。从上面的显示中,我们可以看出来,它是一个收费的功能。我们点击 Start trial:

我们已经启动试用功能。我们再次回到 Service Map 界面:

它清楚地显示了各个服务之前的关系。目前显示都是灰色。一旦有个服务的颜色变红,则表明该服务出现问题。我们需要去调查这个服务器的问题。

有兴趣的小伙伴,你可以尝试在 carfront 应用里添加一个车型,再看看整个的调用情况:

我们也可以点击 ERROR 来认为地生成一个错误信息。

另外,出来上面自动检测之外,我们也可以针对一段代码进行检测。 详细情况,请阅读文章 “Elastic RUM(真实用户监测)浅谈”。

Observability:集群监控 - Elastic Stack 8.x

这是之前的文章 “Observability:集群监控 (一) - Elastic Stack 8.x” 的续篇。在上一篇文章中,我详细地介绍了如何使用传统的收集器来监控 Elastic Stack。这个是不被推荐的方法。在 Elastic Stack 7.16 推出以后,更为推荐的方法是使用 Metricbeat 来监控 Elastic Stack。在今天的文章中,我将详细地介绍如何使用一个监控 Elasticsearch 集群来监控一个生产环境的集群。

 如上所示,我们使用一个专有的 Elasticsearch 集群来作为监控集群来监控其它的 Elastic Stack 组件。这个方案的好处是,只要监控集群是正常运行的,它独立于其它的处于生产环境中的 Elastic Stack 组件。它不会影响它们的整体表现。在生产环境中的 Elasticsearch 集群宕机了,那么我们也可以照样采集到当时的数据以更进一步地分析问题。

在今天的文章中,我将使用如下的架构以方便阅读:

 如上所示,在我的 macOS 机器上安装有一个监控机器,而在 Ubuntu OS 上安装的是一个被监控的集群。我将采用最新的 Elastic Stack 8.4.3 来进行展示。

安装

如果你已经安装好了 Elasticsearch 及 Kibana,并曾经使用过传统收集器来监控 Elasticsearch 集群的话,那么你可以在界面直接进行修改,并开始部署。你可以参考之前的的文章 Observability:集群监控 (一) - Elastic Stack 8.x 并点击如下的地方开始:

 

 

我们点击上面的 Monitor with Metricbeat 按钮:

然后按照上面的提示一直做下去直到我们完成所有的操作步骤,并退出 setup mode。今天在这里就不再展示了。在下面,我们从完全部署好的两个崭新的集群开来进行展示。

我们可以安装我之前的文章:

分别在 macOS 及 Ubuntu OS 上部署两个 Elasticsearch 集群。在 macOS 上的集群被用作监控集群,而在 Ubuntu OS 上的 Elasticsearch 被用作生产环境的集群。我们需要在 Ubuntu OS 上部署 Metricbeat 来监控在这个机器上的 Elasticsearch 集群。按照我们之前的要求,我们需要安装 Elastic Stack 8.x。在默认的配置中,Elasticsearch 的访问是 HTTPS 连接的。

为了能够得我们的 Kibana 可以被其它的机器所访问,我们可以对 config/kibana.yml 文件做如下的修改:

config/kibana.yml

server.host: "0.0.0.0"

 

启动收集监控数据

我们在生产集群中,也就是 Ubuntu OS 所在的 Elasticsearch 里,设置 xpack.monitoring.collection.enabled 为 true。在默认的情况下这个是 false。我们可以在 elasticsearch.yml 中进行设置,也可以在 Kibana 中使用如下的命令来进行设置:

PUT _cluster/settings

  "persistent": 
    "xpack.monitoring.collection.enabled": true
  

如果启用了 Elasticsearch 安全功能,你必须具有监控集群权限才能查看集群设置并管理集群权限才能更改它们。

安装 Metricbeat 

安装 Metricbeat 的步骤非常简单直接。我们可以参考在文章 “Beats:Beats 入门教程 (二)” 中的步骤来进行安装。我们也可以参考 Elastic 的官方文档来进行安装 Metricbeat quick start: installation and configuration | Metricbeat Reference [8.4] | Elastic。我们必须启动 elasticsearch 模块:

./metricbeat modules enable elasticsearch-xpack
parallels@liuxg:~/elastic/metricbeat-8.4.3-linux-arm64$ pwd
/home/parallels/elastic/metricbeat-8.4.3-linux-arm64
parallels@liuxg:~/elastic/metricbeat-8.4.3-linux-arm64$ ./metricbeat modules enable elasticsearch-xpack
Enabled elasticsearch-xpack

我们可以使用如下的命令来进行查看:

./metricbeat modules list

如上所示,在默认的情况下,system 模块是启动的。在我们的练习中,我们可以禁止这个模块,如果你不需要 system 指标。

我们接下来配置 Metricbeat。我们需要把 macOS 的 Elasticsearch 的证书拷贝到 Ubuntu OS 中,因为这个证书是需要来配置 Elasticsearch 的 output 的。

$ pwd
/Users/liuxg/elastic/elasticsearch-8.4.3
$ cd config/certs/
$ ls
http.p12      http_ca.crt   transport.p12
$ scp http_ca.crt parallels@parallels:/home/parallels/elastic/metricbeat-8.4.3-linux-arm64
http_ca.crt                                                  100% 1915     3.3MB/s   00:00

这样我们在 Ubuntu OS 的机器里可以看到这个被拷贝来的证书:

parallels@liuxg:~/elastic/metricbeat-8.4.3-linux-arm64$ pwd
/home/parallels/elastic/metricbeat-8.4.3-linux-arm64
parallels@liuxg:~/elastic/metricbeat-8.4.3-linux-arm64$ ls http_ca.crt 
http_ca.crt

我们接下来修改 metricbeat.yml 配置文件:

metricbeat.yml

output.elasticsearch:
  # Array of hosts to connect to.
  hosts: ["192.168.0.3:9200"]

  # Protocol - either `http` (default) or `https`.
  protocol: "https"

  # Authentication credentials - either API key or username/password.
  #api_key: "id:api_key"
  username: "elastic"
  password: "dh4ePmn4gIHvj*BwEUt+"
  ssl.certificate_authorities: ["http_ca.crt"]

我们把上面的这个部分需要根据自己的配置进行修改。另外值得指出的是,你在实践中,建议不使用 elastic 这个超级用户来配置。另外,如果你不喜欢把密码放置于这个文件中,你可以参考文章 “Beats:Beats 入门教程 (二)” 把密码置于 keystore 中。另外,我们也可以针对 Kibana 做如下的配置:

setup.kibana:

  # Kibana Host
  # Scheme and port can be left out and will be set to the default (http and 5601)
  # In case you specify and additional path, the scheme is required: http://localhost:5601/path
  # IPv6 addresses should always be defined as: https://[2001:db8::1]:5601
  host: "192.168.0.3:5601"

  # Kibana Space ID
  # ID of the Kibana Space into which the dashboards should be loaded. By default,
  # the Default Space will be used.
  #space.id:

我们保存好 metricbeat.yml 文件。然后我们可以使用如下的命令来测试:

./metricbeat test output

上面的输出表明我们的 Elasticsearch output 及 Kibana 的配置是没有任何问题的。

我们接下来测试一下 elasticsearch-xpack 模块:

./metricbeat test modules elasticsearch-xpack

它不显示任何数据。为了能够让 Metricbeat 采集被监控的 Elasticsearch 集群,我们需要针对 elasticsearch-xpack 模块进行配置。在 Ubuntu OS 集群上打入如下的命令:

parallels@liuxg:~/elastic/metricbeat-8.4.3-linux-arm64$ pwd
/home/parallels/elastic/metricbeat-8.4.3-linux-arm64
parallels@liuxg:~/elastic/metricbeat-8.4.3-linux-arm64$ vi modules.d/elasticsearch-xpack.yml
# Module: elasticsearch
# Docs: https://www.elastic.co/guide/en/beats/metricbeat/8.4/metricbeat-module-elasticsearch.html

- module: elasticsearch
  xpack.enabled: true
  period: 10s
  hosts: ["https://localhost:9200"]
  username: "elastic"
  password: "dMH23uZTruxy2zYq087_"
  ssl.certificate_authorities: ["/home/parallels/elastic/elasticsearch-8.4.3/config/certs/http_ca.crt"]

在这里必须指出的是:我们不建议在生产环境中使用 elastic 这个超级用户来进行配置。 你可以创建有监控权限的用户。关于如何创建用户,请参阅文章 “Elasticsearch:用户安全设置”。

在启动 Metricbeat 之前,我们先查看一下 macOS 上的 Kibana 用户界面:

 

很显然,它没有任何的监控数据。我们接下来在 Ubuntu OS 的 terminal 中打入如下的命令:

./metricbeat -e

 

稍等一小会儿,我们再次回到 macOS 中的 Kibana 监控界面:

 

这个时候,由于有监控数据,界面自动显示到上面看到的画面。我们可以查看到 Elasticsearch 的状态。 如上所示,它显示有 13 个索引。我们可以在 Ubuntu OS 上的 Kibana 创建一个如下的索引:

PUT twitter/_doc/1

  "content": "This is Xiaoguo from Elastic"

我们再次回到监控页面:

 

很显然,上面的索引数值变为 14 了,也就是增加一个了。点击上面的链接:

 

我们可以看到新增加的 twitter 索引。 

好了,在这篇文章中,我展示了如何使用 Metricbeat 来监控 Elasticsearch 集群。如果你想了解如何监控其它的组件,比如 Kibana,Metricbeat 及 Logstash,请更进一不阅读我在文章 “Elastic:开发者上手指南” 中的 “监视及管理” 章节。

以上是关于Observability: Elastic RUM (真实用户监控)演示的主要内容,如果未能解决你的问题,请参考以下文章

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

Observability:在容器里运行 Elastic Agent - Elastic Stack 8.x

Observability:使用 Elastic APM 监控 Elastic Enterprise Search 性能

Observability:使用 Elastic APM 监控 Elastic Enterprise Search 性能

Observability:集群监控 - Elastic Stack 8.x

Observability:使用 Elastic Agent 来进行 Uptime 监控