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)。

telemetry diagram

3.6.1.4. Che-Theia 遥测插件发送到后端的事件

事件描述

WORKSPACE_OPENED

当 Che-Theia 开始运行时发送

COMMIT_LOCALLY

使用 git.commit Theia 命令在本地发出提交时发送

PUSH_TO_REMOTE

使用 git.push Theia 命令发送 Git 推送

EDITOR_USED

在编辑器中更改文件时发送

WORKSPACE_INACTIVEWORKSPACE_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 服务器中。

    1. 配置 CheCluster 自定义资源。请参阅 第 3.1.2 节 “使用 CLI 配置 CheCluster 自定义资源”

      spec:
        devEnvironments:
          defaultPlugins:
          - editor: eclipse/che-theia/next     1
            plugins:                           2
            - 'https://your-web-server/plugin.yaml'
      1
      用于设置遥测插件的 editorId
      2
      遥测插件的 devfile v2 定义的 URL。

3.6.1.6. 创建遥测插件

本节演示了如何创建 AnalyticsManager 类来扩展 Abstract AnalyticsManager 并实现以下任一方法:

  • isEnabled() - 决定遥测后端是否正常工作。这意味着始终返回 true 或具有更复杂的检查,例如缺少连接属性时返回错误。
  • destroy() - 清理方法,然后再关闭遥测后端。这个方法发送 WORKSPACE_STOPPED 事件。
  • onActivity() - 表示给定用户仍然会发生某些活动。这主要用于发送 WORKSPACE_INACTIVE 事件。
  • onEvent() - 将遥测事件提交到遥测服务器,如 WORKSPACE_USEDWORKSPACE_STARTED
  • increaseDuration() - 增加当前事件的持续时间,而不是在少量时间内发送多个事件。

以下部分涵盖以下内容:

  • 创建遥测服务器以将事件回显到标准输出。
  • 扩展 OpenShift Dev Spaces 遥测客户端并实施用户的自定义后端。
  • 为自定义后端创建一个 plugin.yaml 文件,它代表 DevWorkspace 插件。
  • 通过设置 CheCluster 自定义资源的 workspacesDefaultPlugins 属性来指定自定义插件到 OpenShift Dev Spaces 的位置。
3.6.1.6.1. 开始使用

本文档描述了扩展 OpenShift Dev Spaces 遥测系统以与自定义后端通信所需的步骤:

  1. 创建接收事件的服务器进程
  2. 扩展 OpenShift Dev Spaces 库以创建将事件发送到服务器的后端
  3. 在容器中打包遥测后端并将其部署到镜像 registry
  4. 为您的后端添加一个插件,并指示 OpenShift Dev Spaces 在您的 DevWorkspace 中加载插件

遥测后端的完整示例位于 https://github.com/che-incubator/devworkspace-telemetry-example-plugin

创建接收事件的服务器

出于演示目的,本例演示了如何创建服务器,从遥测插件接收事件并将其写入标准输出。

对于生产环境,请考虑与第三方遥测系统(例如,Segment、Woopra)集成,而不是创建自己的遥测服务器。在这种情况下,请使用您的供应商的 API 将事件从自定义后端发送到其系统。

以下 Go 代码在端口 8080 上启动服务器,并将事件写入标准输出:

例 3.12. main.go

package main

import (
	"io/ioutil"
	"net/http"

	"go.uber.org/zap"
)

var logger *zap.SugaredLogger

func event(w http.ResponseWriter, req *http.Request) {
	switch req.Method {
	case "GET":
		logger.Info("GET /event")
	case "POST":
		logger.Info("POST /event")
	}
	body, err := req.GetBody()
	if err != nil {
		logger.With("err", err).Info("error getting body")
		return
	}
	responseBody, err := ioutil.ReadAll(body)
	if err != nil {
		logger.With("error", err).Info("error reading response body")
		return
	}
	logger.With("body", string(responseBody)).Info("got event")
}

func activity(w http.ResponseWriter, req *http.Request) {
	switch req.Method {
	case "GET":
		logger.Info("GET /activity, doing nothing")
	case "POST":
		logger.Info("POST /activity")
		body, err := req.GetBody()
		if err != nil {
			logger.With("error", err).Info("error getting body")
			return
		}
		responseBody, err := ioutil.ReadAll(body)
		if err != nil {
			logger.With("error", err).Info("error reading response body")
			return
		}
		logger.With("body", string(responseBody)).Info("got activity")
	}
}

func main() {

	log, _ := zap.NewProduction()
	logger = log.Sugar()

	http.HandleFunc("/event", event)
	http.HandleFunc("/activity", activity)
	logger.Info("Added Handlers")

	logger.Info("Starting to serve")
	http.ListenAndServe(":8080", nil)
}

基于此代码创建容器镜像,并将它公开为 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

manifest_with_ingress.yamlmanifest_with_route 都包含 Deployment 和 Service 的定义。前者也定义了 Kubernetes 入口,而后者则定义了 OpenShift 路由。

在 清单文件中,替换 imagehost 字段,以匹配您推送的镜像和 OpenShift 集群的公共主机名。然后运行:

$ kubectl apply -f manifest_with_[ingress|route].yaml -n openshift-devspaces
3.6.1.6.2. 创建后端项目
注意

为了在开发 时快速反馈意见,建议在 DevWorkspace 中进行开发。这样,您可以在集群中运行应用程序,并从前端遥测插件接收事件。

  1. 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
  2. 删除 src/main/java/mygroup 下的文件,以及 src/test/java/mygroup
  3. 如需最新版本的 GitHub 软件包,请参阅 后端基础 的 Maven 协调。
  4. 在您的 pom.xml 中添加以下依赖项:

    例 3.13. pom.xml

    <!-- Required -->
    <dependency>
        <groupId>org.eclipse.che.incubator.workspace-telemetry</groupId>
        <artifactId>backend-base</artifactId>
        <version>LATEST VERSION FROM PREVIOUS STEP</version>
    </dependency>
    
    
    <!-- Used to make http requests to the telemetry server -->
    <dependency>
        <groupId>io.quarkus</groupId>
        <artifactId>quarkus-rest-client</artifactId>
    </dependency>
    <dependency>
        <groupId>io.quarkus</groupId>
        <artifactId>quarkus-rest-client-jackson</artifactId>
    </dependency>
  5. 使用 read:packages 权限创建一个个人访问令牌,从 GitHub 软件包下载 org.eclipse.che.incubator.workspace-telemetry:backend-base 依赖项。
  6. ~/.m2/settings.xml 文件中,添加 GitHub 用户名、个人访问令牌和 che-incubator 存储库详情:

    例 3.14. settings.xml

    <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
    http://maven.apache.org/xsd/settings-1.0.0.xsd">
       <servers>
          <server>
             <id>che-incubator</id>
             <username>YOUR GITHUB USERNAME</username>
             <password>YOUR GITHUB TOKEN</password>
          </server>
       </servers>
    
       <profiles>
          <profile>
             <id>github</id>
             <activation>
                <activeByDefault>true</activeByDefault>
             </activation>
             <repositories>
                <repository>
                   <id>central</id>
                   <url>https://repo1.maven.org/maven2</url>
                   <releases><enabled>true</enabled></releases>
                   <snapshots><enabled>false</enabled></snapshots>
                   </repository>
                   <repository>
                   <id>che-incubator</id>
                   <url>https://maven.pkg.github.com/che-incubator/che-workspace-telemetry-client</url>
                </repository>
             </repositories>
          </profile>
       </profiles>
    </settings>
3.6.1.6.3. 创建 AnalyticsManager 的 concrete 实现并添加专用逻辑

src/main/java/mygroup 下,在项目中创建两个文件:

  • MainConfiguration.java - 包含为 AnalyticsManager 提供的配置。
  • AnalyticsManager.java - 包含特定于遥测系统的逻辑。

例 3.15. MainConfiguration.java

package org.my.group;

import java.util.Optional;

import javax.enterprise.context.Dependent;
import javax.enterprise.inject.Alternative;

import org.eclipse.che.incubator.workspace.telemetry.base.BaseConfiguration;
import org.eclipse.microprofile.config.inject.ConfigProperty;

@Dependent
@Alternative
public class MainConfiguration extends BaseConfiguration {
    @ConfigProperty(name = "welcome.message")      1
    Optional<String> welcomeMessage;               2
}
1
MicroProfile 配置注释用于注入 welcome.message 配置。

有关如何设置特定于后端的配置属性的详情,请查看 Quarkus 配置参考指南

例 3.16. AnalyticsManager.java

package org.my.group;

import java.util.HashMap;
import java.util.Map;

import javax.enterprise.context.Dependent;
import javax.enterprise.inject.Alternative;
import javax.inject.Inject;

import org.eclipse.che.incubator.workspace.telemetry.base.AbstractAnalyticsManager;
import org.eclipse.che.incubator.workspace.telemetry.base.AnalyticsEvent;
import org.eclipse.che.incubator.workspace.telemetry.finder.DevWorkspaceFinder;
import org.eclipse.che.incubator.workspace.telemetry.finder.UsernameFinder;
import org.eclipse.microprofile.rest.client.inject.RestClient;
import org.slf4j.Logger;

import static org.slf4j.LoggerFactory.getLogger;

@Dependent
@Alternative
public class AnalyticsManager extends AbstractAnalyticsManager {

    private static final Logger LOG = getLogger(AbstractAnalyticsManager.class);

    public AnalyticsManager(MainConfiguration mainConfiguration, DevWorkspaceFinder devworkspaceFinder, UsernameFinder usernameFinder) {
        super(mainConfiguration, devworkspaceFinder, usernameFinder);

        mainConfiguration.welcomeMessage.ifPresentOrElse(     1
            (str) -> LOG.info("The welcome message is: {}", str),
            () -> LOG.info("No welcome message provided")
        );
    }

    @Override
    public boolean isEnabled() {
        return true;
    }

    @Override
    public void destroy() {}

    @Override
    public void onEvent(AnalyticsEvent event, String ownerId, String ip, String userAgent, String resolution, Map<String, Object> properties) {
        LOG.info("The received event is: {}", event);         2
    }

    @Override
    public void increaseDuration(AnalyticsEvent event, Map<String, Object> properties) { }

    @Override
    public void onActivity() {}
}
1
如果提供了欢迎信息,请记录它。
2
记录从前端插件接收的事件。

由于 org.my.group.AnalyticsManagerorg.my.group.MainConfiguration 是 alternatives Bean,因此请使用 src/main/resources/application.properties 中的 quarkus.arc.selected-alternatives 属性来指定它们。

例 3.17. application.properties

quarkus.arc.selected-alternatives=MainConfiguration,AnalyticsManager
3.6.1.6.4. 在 DevWorkspace 中运行应用程序
  1. 在 DevWorkspace 中设置 DEVWORKSPACE_TELEMETRY_BACKEND_PORT 环境变量。在这里,该值设置为 4167

    spec:
      template:
        attributes:
          workspaceEnv:
            - name: DEVWORKSPACE_TELEMETRY_BACKEND_PORT
              value: '4167'
  2. 从 Red Hat OpenShift Dev Spaces 仪表板中重启 DevWorkspace。
  3. 在 DevWorkspace 的终端窗口中运行以下命令,以启动应用程序。使用 --settings 标志指定包含 GitHub 访问令牌的 settings.xml 文件的位置的路径。

    $ mvn --settings=settings.xml quarkus:dev -Dquarkus.http.port=${DEVWORKSPACE_TELEMETRY_BACKEND_PORT}

    现在,应用程序通过来自前端插件的端口 4167 接收遥测事件。

验证步骤

  1. 验证以下输出是否已记录:

    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]
  2. 要验证 AnalyticsManageronEvent() 方法是否从前端插件接收事件,请按 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
3.6.1.6.5. 实现 isEnabled()

就示例而言,每当调用这个方法时,这个方法始终返回为 true

例 3.18. AnalyticsManager.java

@Override
public boolean isEnabled() {
    return true;
}

可以将更复杂的逻辑放在 isEnabled() 中。例如,托管的 OpenShift Dev Spaces Woopra 后端 会在确定后端是否已启用前检查配置属性是否存在。

3.6.1.6.6. Implementing onEvent()

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 集群的入口域名。

  1. 通过创建 TelemetryService.java来设置 RESTEasy REST 客户端

    例 3.19. TelemetryService.java

    package org.my.group;
    
    import java.util.Map;
    
    import javax.ws.rs.Consumes;
    import javax.ws.rs.POST;
    import javax.ws.rs.Path;
    import javax.ws.rs.core.MediaType;
    import javax.ws.rs.core.Response;
    
    import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
    
    @RegisterRestClient
    public interface TelemetryService {
        @POST
        @Path("/event") 1
        @Consumes(MediaType.APPLICATION_JSON)
        Response sendEvent(Map<String, Object> payload);
    }
    1
    向其发出 POST 请求的端点。
  2. 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
  3. TelemetryService 注入 AnalyticsManager,并在 onEvent()中发送 POST 请求

    例 3.21. AnalyticsManager.java

    @Dependent
    @Alternative
    public class AnalyticsManager extends AbstractAnalyticsManager {
        @Inject
        @RestClient
        TelemetryService telemetryService;
    
    ...
    
    @Override
    public void onEvent(AnalyticsEvent event, String ownerId, String ip, String userAgent, String resolution, Map<String, Object> properties) {
        Map<String, Object> payload = new HashMap<String, Object>(properties);
        payload.put("event", event);
        telemetryService.sendEvent(payload);
    }

    这会将 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) {}
3.6.1.6.8. 实施 On Activity()

设置一个不活跃的超时限制,并使用 onActivity() 发送 WORKSPACE_INACTIVE 事件(如果最后一次事件时间超过超时)。

例 3.23. AnalyticsManager.java

public class AnalyticsManager extends AbstractAnalyticsManager {

    ...

    private long inactiveTimeLimit = 60000 * 3;

    ...

    @Override
    public void onActivity() {
        if (System.currentTimeMillis() - lastEventTime >= inactiveTimeLimit) {
            onEvent(WORKSPACE_INACTIVE, lastOwnerId, lastIp, lastUserAgent, lastResolution, commonProperties);
        }
    }
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);       
}

运行 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

FROM registry.access.redhat.com/ubi8/openjdk-11:1.11

ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en'

COPY --chown=185 target/quarkus-app/lib/ /deployments/lib/
COPY --chown=185 target/quarkus-app/*.jar /deployments/
COPY --chown=185 target/quarkus-app/app/ /deployments/app/
COPY --chown=185 target/quarkus-app/quarkus/ /deployments/quarkus/

EXPOSE 8080
USER 185

ENTRYPOINT ["java", "-Dquarkus.http.host=0.0.0.0", "-Djava.util.logging.manager=org.jboss.logmanager.LogManager", "-Dquarkus.http.port=${DEVWORKSPACE_TELEMETRY_BACKEND_PORT}", "-jar", "/deployments/quarkus-run.jar"]

要构建镜像,请运行:

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

FROM registry.access.redhat.com/ubi8/ubi-minimal:8.5
WORKDIR /work/
RUN chown 1001 /work \
    && chmod "g+rwX" /work \
    && chown 1001:root /work
COPY --chown=1001:root target/*-runner /work/application

EXPOSE 8080
USER 1001

CMD ["./application", "-Dquarkus.http.host=0.0.0.0", "-Dquarkus.http.port=$DEVWORKSPACE_TELEMETRY_BACKEND_PORT}"]

要构建镜像,请运行:

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

schemaVersion: 2.1.0
metadata:
  name: devworkspace-telemetry-backend-plugin
  version: 0.0.1
  description: A Demo telemetry backend
  displayName: Devworkspace Telemetry Backend
components:
  - name: devworkspace-telemetry-backend-plugin
    attributes:
      workspaceEnv:
        - name: DEVWORKSPACE_TELEMETRY_BACKEND_PORT
          value: '4167'
    container:
      image: YOUR IMAGE            1
      env:
        - name: WELCOME_MESSAGE    2
          value: 'hello world!'
1
指定从 第 3.6.1.6.10 节 “打包 Quarkus 应用程序” 构建的容器镜像。
2
为 Example 4 中的 welcome.message 可选配置属性设置值。

通常,用户将此文件部署到公司 Web 服务器。本指南演示了如何在 OpenShift 中创建 Apache Web 服务器并在此处托管插件。

创建一个 ConfigMap 对象来引用新 plugin.yaml 文件。

$ oc create configmap --from-file=plugin.yaml -n openshift-devspaces telemetry-plugin-yaml

创建部署、服务和路由,以公开 Web 服务器。部署引用此 ConfigMap 对象,并将其放置在 /var/www/html 目录中。

例 3.28. manifest.yaml

kind: Deployment
apiVersion: apps/v1
metadata:
  name: apache
spec:
  replicas: 1
  selector:
    matchLabels:
      app: apache
  template:
    metadata:
      labels:
        app: apache
    spec:
      volumes:
        - name: plugin-yaml
          configMap:
            name: telemetry-plugin-yaml
            defaultMode: 420
      containers:
        - name: apache
          image: 'registry.redhat.io/rhscl/httpd-24-rhel7:latest'
          ports:
            - containerPort: 8080
              protocol: TCP
          resources: {}
          volumeMounts:
            - name: plugin-yaml
              mountPath: /var/www/html
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 25%
      maxSurge: 25%
  revisionHistoryLimit: 10
  progressDeadlineSeconds: 600
---
kind: Service
apiVersion: v1
metadata:
  name: apache
spec:
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080
  selector:
    app: apache
  type: ClusterIP
---
kind: Route
apiVersion: route.openshift.io/v1
metadata:
  name: apache
spec:
  host: apache-che.apps-crc.testing
  to:
    kind: Service
    name: apache
    weight: 100
  port:
    targetPort: 8080
  wildcardPolicy: None
$ oc apply -f manifest.yaml

验证步骤

部署启动后,确认 web 服务器中存在 plugin.yaml

$ curl apache-che.apps-crc.testing/plugin.yaml
3.6.1.6.12. 在 DevWorkspace 中指定遥测插件
  1. 在现有 DevWorkspace 的组件 字段中添加以下内容:

    components:
      ...
      - name: telemetry-plug-in
        plugin:
          uri: http://apache-che.apps-crc.testing/plugin.yaml
  2. 从 OpenShift Dev Spaces 仪表板启动 DevWorkspace。

验证步骤

  1. 验证 telemetry-plug-in 容器是否在 DevWorkspace pod 中运行。在这里,可通过在编辑器中检查 Workspace 视图来验证这一点。

    DevWorkspace 遥测插件
  2. 在编辑器中编辑文件,并在示例遥测服务器日志中观察其事件。
3.6.1.6.13. 为所有 DevWorkspace 应用遥测插件

将遥测插件设置为默认插件。默认插件在 DevWorkspace 启动中适用于新的和现有的 DevWorkspace。

验证步骤

  1. 从 Red Hat OpenShift Dev Spaces 仪表板启动新的或现有的 DevWorkspace。
  2. 通过对 第 3.6.1.6.12 节 “在 DevWorkspace 中指定遥测插件” 的验证步骤验证遥测插件是否正常工作。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.