This documentation is for a release that is no longer maintained
See documentation for the latest supported version.3.6. 配置可观察性
要配置 OpenShift Dev Spaces observability 功能,请参阅:
3.6.1. Che-Theia 工作区 复制链接链接已复制到粘贴板!
3.6.1.1. Telemetry 概述 复制链接链接已复制到粘贴板!
Telemetry 是操作数据的显式和 ethical 集合。默认情况下,Red Hat OpenShift Dev Spaces 中没有 telemetry,但在 Che-ia 编辑器中,可以使用插件机制启用遥测功能,并使用网段收集 chectl
命令行工具使用数据。这种方法用于由红帽"由红帽"托管的 Eclipse Che服务,用于为每个 Che-Theia 工作区启用了 telemetry。
本文档包含指南描述了如何为 Red Hat OpenShift Dev Spaces 创建自己的遥测客户端,后接 Red Hat OpenShift Dev Spaces Woopra Telemetry 插件 的概述。
3.6.1.2. 使用案例 复制链接链接已复制到粘贴板!
Red Hat OpenShift Dev Spaces 遥测 API 允许跟踪:
- 工作区使用率的持续时间
- 用户驱动的操作,如文件编辑、提交和推送到远程存储库。
- 工作区中使用的编程语言和 devfile。
3.6.1.3. 如何使用 复制链接链接已复制到粘贴板!
当 DevWorkspace 启动时,che-theia
容器将启动遥测插件,该插件负责将遥测事件发送到后端。如果在 DevWorkspace Pod 中设置 $DEVWORKSPACE_TEMETRY_BACKEND_PORT
环境变量,则遥测插件会将事件发送到在该端口上侦听的后端。后端将接收的事件转换为事件的特定后端表示,并将其发送到配置的分析后端(例如:Segment 或 Woopra)。
3.6.1.4. Che-Theia 遥测插件发送到后端的事件 复制链接链接已复制到粘贴板!
事件 | 描述 |
---|---|
WORKSPACE_OPENED | 当 Che-Theia 开始运行时发送 |
COMMIT_LOCALLY |
使用 |
PUSH_TO_REMOTE |
使用 |
EDITOR_USED | 在编辑器中更改文件时发送 |
WORKSPACE_INACTIVE
和 WORKSPACE_STOPPED
等其他事件可以在后端插件中检测到。
3.6.1.5. Woopra 遥测插件 复制链接链接已复制到粘贴板!
Woopra Telemetry 插件是一个插件,用于将遥测从 Red Hat OpenShift Dev Spaces 安装发送到 Segment 和 Woopra。此插件 由红帽托管的 Eclipse Che 使用,但任何 Red Hat OpenShift Dev Spaces 部署都可以使用此插件。一个有效的 Woopra 域和 Segment Write 键外没有依赖项。插件 plugin.yaml 的 devfile v2 具有可传递给插件的四个环境变量:
-
WOOPRA_DOMAIN
-要将事件发送到的 Woopra 域。 -
SEGMENT_WRITE_KEY
- 将事件发送到 Segment 和 Woopra 的写入键。 -
WOOPRA_ENDPOINT
- 如果您更喜欢直接传递 Woopra 域,该插件会从返回 Woopra 域提供的 HTTP 端点中获取。 -
SEGMENT_WRITE_KEY_ENDPOINT
- 如果您不想直接传递 Segment write 键,则插件会从提供的 HTTP 端点中获取返回 Segment write 键的 HTTP 端点。
在 Red Hat OpenShift Dev Spaces 安装中启用 Woopra 插件:
流程
使用正确设置的环境变量,将
plugin.yaml
devfile v2 文件部署到 HTTP 服务器中。配置
CheCluster
自定义资源。请参阅 第 3.1.2 节 “使用 CLI 配置 CheCluster 自定义资源”。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.6.1.6. 创建遥测插件 复制链接链接已复制到粘贴板!
本节演示了如何创建 AnalyticsManager
类来扩展 Abstract AnalyticsManager
并实现以下任一方法:
-
isEnabled()
- 决定遥测后端是否正常工作。这意味着始终返回true
或具有更复杂的检查,例如缺少连接属性时返回错误。 -
destroy()
- 清理方法,然后再关闭遥测后端。这个方法发送WORKSPACE_STOPPED
事件。 -
onActivity()
- 表示给定用户仍然会发生某些活动。这主要用于发送WORKSPACE_INACTIVE
事件。 -
onEvent()
- 将遥测事件提交到遥测服务器,如WORKSPACE_USED
或WORKSPACE_STARTED
。 -
increaseDuration()
- 增加当前事件的持续时间,而不是在少量时间内发送多个事件。
以下部分涵盖以下内容:
- 创建遥测服务器以将事件回显到标准输出。
- 扩展 OpenShift Dev Spaces 遥测客户端并实施用户的自定义后端。
-
为自定义后端创建一个
plugin.yaml
文件,它代表 DevWorkspace 插件。 -
通过设置
CheCluster
自定义资源的workspacesDefaultPlugins
属性来指定自定义插件到 OpenShift Dev Spaces 的位置。
3.6.1.6.1. 开始使用 复制链接链接已复制到粘贴板!
本文档描述了扩展 OpenShift Dev Spaces 遥测系统以与自定义后端通信所需的步骤:
- 创建接收事件的服务器进程
- 扩展 OpenShift Dev Spaces 库以创建将事件发送到服务器的后端
- 在容器中打包遥测后端并将其部署到镜像 registry
- 为您的后端添加一个插件,并指示 OpenShift Dev Spaces 在您的 DevWorkspace 中加载插件
遥测后端的完整示例位于 https://github.com/che-incubator/devworkspace-telemetry-example-plugin。
创建接收事件的服务器
出于演示目的,本例演示了如何创建服务器,从遥测插件接收事件并将其写入标准输出。
对于生产环境,请考虑与第三方遥测系统(例如,Segment、Woopra)集成,而不是创建自己的遥测服务器。在这种情况下,请使用您的供应商的 API 将事件从自定义后端发送到其系统。
以下 Go 代码在端口 8080
上启动服务器,并将事件写入标准输出:
例 3.12. main.go
基于此代码创建容器镜像,并将其公开为 openshift-devspaces 项目中的 OpenShift 中的部署。示例遥测服务器的代码位于 telemetry-server-example。要部署遥测服务器,请克隆存储库并构建容器:
git clone https://github.com/che-incubator/telemetry-server-example cd telemetry-server-example podman build -t registry/organization/telemetry-server-example:latest . podman push registry/organization/telemetry-server-example:latest
$ git clone https://github.com/che-incubator/telemetry-server-example
$ cd telemetry-server-example
$ podman build -t registry/organization/telemetry-server-example:latest .
$ podman push registry/organization/telemetry-server-example:latest
manifest_with_ingress.yaml
和 manifest_with_route
都包含 Deployment 和 Service 的定义。前者也定义了 Kubernetes 入口,而后者则定义了 OpenShift 路由。
在 清单文件中,替换 image
和 host
字段,以匹配您推送的镜像和 OpenShift 集群的公共主机名。然后运行:
kubectl apply -f manifest_with_[ingress|route].yaml -n {prod-namespace}
$ kubectl apply -f manifest_with_[ingress|route].yaml -n {prod-namespace}
3.6.1.6.2. 创建后端项目 复制链接链接已复制到粘贴板!
为了在开发 时快速反馈意见,建议在 DevWorkspace 中进行开发。这样,您可以在集群中运行应用程序,并从前端遥测插件接收事件。
Maven Quarkus 项目构建:
mvn io.quarkus:quarkus-maven-plugin:2.7.1.Final:create \ -DprojectGroupId=mygroup -DprojectArtifactId=devworkspace-telemetry-example-plugin \ -DprojectVersion=1.0.0-SNAPSHOT
mvn io.quarkus:quarkus-maven-plugin:2.7.1.Final:create \ -DprojectGroupId=mygroup -DprojectArtifactId=devworkspace-telemetry-example-plugin \ -DprojectVersion=1.0.0-SNAPSHOT
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
删除
src/main/java/mygroup
下的文件,以及src/test/java/mygroup
。 -
如需最新版本的 GitHub 软件包,请参阅
后端基础
的 Maven 协调。 在您的
pom.xml
中添加以下依赖项:例 3.13.
pom.xml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
使用
read:packages
权限创建一个个人访问令牌,从 GitHub 软件包下载org.eclipse.che.incubator.workspace-telemetry:backend-base
依赖项。 在
~/.m2/settings.xml
文件中,添加 GitHub 用户名、个人访问令牌和che-incubator
存储库详情:例 3.14.
settings.xml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.6.1.6.3. 创建 AnalyticsManager 的 concrete 实现并添加专用逻辑 复制链接链接已复制到粘贴板!
在 src/main/java/mygroup
下,在项目中创建两个文件:
-
MainConfiguration.java
- 包含为AnalyticsManager
提供的配置。 -
AnalyticsManager.java
- 包含特定于遥测系统的逻辑。
例 3.15. MainConfiguration.java
- 1
- MicroProfile 配置注释用于注入
welcome.message
配置。
有关如何设置特定于后端的配置属性的详情,请查看 Quarkus 配置参考指南。
例 3.16. AnalyticsManager.java
由于 org.my.group.AnalyticsManager
和 org.my.group.MainConfiguration
是 alternatives Bean,因此请使用 src/main/resources/application.properties
中的 quarkus.arc.selected-alternatives
属性来指定它们。
例 3.17. application.properties
quarkus.arc.selected-alternatives=MainConfiguration,AnalyticsManager
quarkus.arc.selected-alternatives=MainConfiguration,AnalyticsManager
3.6.1.6.4. 在 DevWorkspace 中运行应用程序 复制链接链接已复制到粘贴板!
在 DevWorkspace 中设置
DEVWORKSPACE_TELEMETRY_BACKEND_PORT
环境变量。在这里,该值设置为4167
。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 从 Red Hat OpenShift Dev Spaces 仪表板中重启 DevWorkspace。
在 DevWorkspace 的终端窗口中运行以下命令,以启动应用程序。使用
--settings
标志指定包含 GitHub 访问令牌的settings.xml
文件的位置的路径。mvn --settings=settings.xml quarkus:dev -Dquarkus.http.port=${DEVWORKSPACE_TELEMETRY_BACKEND_PORT}
$ mvn --settings=settings.xml quarkus:dev -Dquarkus.http.port=${DEVWORKSPACE_TELEMETRY_BACKEND_PORT}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 现在,应用程序通过来自前端插件的端口
4167
接收遥测事件。
验证步骤
验证以下输出是否已记录:
INFO [org.ecl.che.inc.AnalyticsManager] (Quarkus Main Thread) No welcome message provided INFO [io.quarkus] (Quarkus Main Thread) devworkspace-telemetry-example-plugin 1.0.0-SNAPSHOT on JVM (powered by Quarkus 2.7.2.Final) started in 0.323s. Listening on: http://localhost:4167 INFO [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated. INFO [io.quarkus] (Quarkus Main Thread) Installed features: [cdi, kubernetes-client, rest-client, rest-client-jackson, resteasy, resteasy-jsonb, smallrye-context-propagation, smallrye-openapi, swagger-ui, vertx]
INFO [org.ecl.che.inc.AnalyticsManager] (Quarkus Main Thread) No welcome message provided INFO [io.quarkus] (Quarkus Main Thread) devworkspace-telemetry-example-plugin 1.0.0-SNAPSHOT on JVM (powered by Quarkus 2.7.2.Final) started in 0.323s. Listening on: http://localhost:4167 INFO [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated. INFO [io.quarkus] (Quarkus Main Thread) Installed features: [cdi, kubernetes-client, rest-client, rest-client-jackson, resteasy, resteasy-jsonb, smallrye-context-propagation, smallrye-openapi, swagger-ui, vertx]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要验证
AnalyticsManager
的onEvent()
方法是否从前端插件接收事件,请按 l 键来禁用 Quarkus 实时编码并在 IDE 中编辑任何文件。应该记录以下输出:INFO [io.qua.dep.dev.RuntimeUpdatesProcessor] (Aesh InputStream Reader) Live reload disabled INFO [org.ecl.che.inc.AnalyticsManager] (executor-thread-2) The received event is: Edit Workspace File in Che
INFO [io.qua.dep.dev.RuntimeUpdatesProcessor] (Aesh InputStream Reader) Live reload disabled INFO [org.ecl.che.inc.AnalyticsManager] (executor-thread-2) The received event is: Edit Workspace File in Che
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.6.1.6.5. 实现 isEnabled() 复制链接链接已复制到粘贴板!
就示例而言,每当调用这个方法时,这个方法始终返回为 true
。
例 3.18. AnalyticsManager.java
@Override public boolean isEnabled() { return true; }
@Override
public boolean isEnabled() {
return true;
}
可以将更复杂的逻辑放在 isEnabled()
中。例如,托管的 OpenShift Dev Spaces Woopra 后端 会在确定后端是否已启用前检查配置属性是否存在。
3.6.1.6.6. 在 Event()上实现 复制链接链接已复制到粘贴板!
onEvent()
将后端接收的事件发送到遥测系统。对于示例应用,它会将 HTTP POST 有效负载发送到来自遥测服务器的 /event
端点。
3.6.1.6.6.1. 将 POST 请求发送到示例遥测服务器 复制链接链接已复制到粘贴板!
在以下示例中,遥测服务器应用通过以下 URL 部署到 OpenShift: http://little-telemetry-server-che.apps-crc.testing
,其中 apps-crc.testing
是 OpenShift 集群的入口域名。
通过创建
TelemetryService.java
来设置 RESTEasy REST 客户端例 3.19.
TelemetryService.java
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 向其发出
POST
请求的端点。
在
src/main/resources/application.properties
文件中指定TelemetryService
的基本 URL:例 3.20.
application.properties
org.my.group.TelemetryService/mp-rest/url=http://little-telemetry-server-che.apps-crc.testing
org.my.group.TelemetryService/mp-rest/url=http://little-telemetry-server-che.apps-crc.testing
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
TelemetryService
注入AnalyticsManager
,并在onEvent()
中发送POST
请求例 3.21.
AnalyticsManager.java
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这会将 HTTP 请求发送到遥测服务器,并在短时间内自动延迟相同的事件。默认持续时间为 1500 毫秒。
3.6.1.6.7. 实施 increaseDuration() 复制链接链接已复制到粘贴板!
许多遥测系统都识别事件持续时间。AbstractAnalyticsManager
将类似事件的事件合并到一个事件中。这个 increaseDuration()
的实现是 no-op。此方法使用用户的遥测提供商 API 来更改事件或事件属性,以反映事件的增加持续时间。
例 3.22. AnalyticsManager.java
@Override public void increaseDuration(AnalyticsEvent event, Map<String, Object> properties) {}
@Override
public void increaseDuration(AnalyticsEvent event, Map<String, Object> properties) {}
3.6.1.6.8. 实施 On Activity() 复制链接链接已复制到粘贴板!
设置一个不活跃的超时限制,并使用 onActivity()
发送 WORKSPACE_INACTIVE
事件(如果最后一次事件时间超过超时)。
例 3.23. AnalyticsManager.java
3.6.1.6.9. 实现 destroy() 复制链接链接已复制到粘贴板!
调用 destroy()
时,发送 WORKSPACE_STOPPED
事件并关闭任何资源,如连接池。
例 3.24. AnalyticsManager.java
@Override public void destroy() { onEvent(WORKSPACE_STOPPED, lastOwnerId, lastIp, lastUserAgent, lastResolution, commonProperties); }
@Override
public void destroy() {
onEvent(WORKSPACE_STOPPED, lastOwnerId, lastIp, lastUserAgent, lastResolution, commonProperties);
}
运行 mvn quarkus:dev
,如 第 3.6.1.6.4 节 “在 DevWorkspace 中运行应用程序” 所述,使用 Ctrl+C 终止应用程序会将 WORKSPACE_STOPPED
事件发送到服务器。
3.6.1.6.10. 打包 Quarkus 应用程序 复制链接链接已复制到粘贴板!
有关在容器中打包应用程序的最佳说明,请参阅 Quarkus 文档。构建容器并将其推送到您选择的容器 registry。
3.6.1.6.10.1. 构建使用 JVM 运行的 Quarkus 镜像的 Dockerfile 示例 复制链接链接已复制到粘贴板!
例 3.25. Dockerfile.jvm
要构建镜像,请运行:
mvn package && \ podman build -f src/main/docker/Dockerfile.jvm -t image:tag .
mvn package && \
podman build -f src/main/docker/Dockerfile.jvm -t image:tag .
3.6.1.6.10.2. 用于构建 Quarkus 原生镜像的 Dockerfile 示例 复制链接链接已复制到粘贴板!
例 3.26. Dockerfile.native
要构建镜像,请运行:
mvn package -Pnative -Dquarkus.native.container-build=true && \ podman build -f src/main/docker/Dockerfile.native -t image:tag .
mvn package -Pnative -Dquarkus.native.container-build=true && \
podman build -f src/main/docker/Dockerfile.native -t image:tag .
3.6.1.6.11. 为您的插件创建 plugin.yaml 复制链接链接已复制到粘贴板!
创建一个 plugin.yaml
devfile v2 文件,该文件代表在 DevWorkspace Pod 中运行您的自定义后端的 DevWorkspace 插件。有关 devfile v2 的更多信息,请参阅 Devfile v2 文档
例 3.27. plugin.yaml
- 1
- 指定从 第 3.6.1.6.10 节 “打包 Quarkus 应用程序” 构建的容器镜像。
- 2
- 为 Example 4 中的
welcome.message
可选配置属性设置值。
通常,用户将此文件部署到公司 Web 服务器。本指南演示了如何在 OpenShift 中创建 Apache Web 服务器并在此处托管插件。
创建引用新 plugin.yaml
文件的 ConfigMap。
oc create configmap --from-file=plugin.yaml -n openshift-devspaces telemetry-plugin-yaml
$ oc create configmap --from-file=plugin.yaml -n openshift-devspaces telemetry-plugin-yaml
创建部署、服务和路由,以公开 Web 服务器。该部署会引用此 ConfigMap,并将其放置在 /var/www/html
目录中。
例 3.28. manifest.yaml
oc apply -f manifest.yaml
$ oc apply -f manifest.yaml
验证步骤
部署启动后,确认 web 服务器中存在 plugin.yaml
:
curl apache-che.apps-crc.testing/plugin.yaml
$ curl apache-che.apps-crc.testing/plugin.yaml
3.6.1.6.12. 在 DevWorkspace 中指定遥测插件 复制链接链接已复制到粘贴板!
在现有 DevWorkspace
的组件
字段中添加以下内容:components: ... - name: telemetry-plug-in plugin: uri: http://apache-che.apps-crc.testing/plugin.yaml
components: ... - name: telemetry-plug-in plugin: uri: http://apache-che.apps-crc.testing/plugin.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 从 OpenShift Dev Spaces 仪表板启动 DevWorkspace。
验证步骤
验证
telemetry-plug-in
容器是否在 DevWorkspace pod 中运行。在这里,可通过在编辑器中检查 Workspace 视图来验证这一点。- 在编辑器中编辑文件,并在示例遥测服务器日志中观察其事件。
3.6.1.6.13. 为所有 DevWorkspace 应用遥测插件 复制链接链接已复制到粘贴板!
将遥测插件设置为默认插件。默认插件在 DevWorkspace 启动中适用于新的和现有的 DevWorkspace。
配置
CheCluster
自定义资源。请参阅 第 3.1.2 节 “使用 CLI 配置 CheCluster 自定义资源”。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证步骤
- 从 Red Hat OpenShift Dev Spaces 仪表板启动新的或现有的 DevWorkspace。
- 通过对 第 3.6.1.6.12 节 “在 DevWorkspace 中指定遥测插件” 的验证步骤验证遥测插件是否正常工作。