3.6. 可観測性の設定
OpenShift Dev Spaces 可観測性機能を設定するには、以下を参照してください。
3.6.1. Che-Theia ワークスペース
3.6.1.1. Telemetry の概要
Telemetry は、操作データの明示的かつ論理的なコレクションです。デフォルトで、Telemetry は Red Hat OpenShift Dev Spaces では利用できませんが、Che-Theia エディターにはプラグインメカニズムを使用し、chectl
コマンドラインツールの使用データをセグメントを使用して収集できる抽象 API があります。このアプローチは、すべての Che-Theia ワークスペースでテレメトリーが有効になっている Eclipse Che hosted by Red Hat サービスで使用されます。
以下では、Red Hat OpenShift Dev Spaces に独自の Telemetry クライアントを作成する方法について説明し、次に Red Hat OpenShift Dev Spaces Woopra Telemetry プラグイン の概要を示します。
3.6.1.2. ユースケース
Red Hat OpenShift Dev Spaces Telemetry API では、以下の追跡が可能です。
- ワークスペース使用の期間
- ファイルの編集、コミット、およびリモートリポジトリーへのプッシュなどのユーザー駆動型アクション
- ワークスペースで使用されるプログラミング言語および devfile
3.6.1.3. 仕組み
DevWorkspace が起動すると、che-theia
コンテナーは、テレメトリーイベントをバックエンドに送信するロールを担うテレメトリープラグインを起動します。$DEVWORKSPACE_TELEMETRY_BACKEND_PORT
環境変数が DevWorkspace Pod で設定されている場合、テレメトリープラグインはそのポートでリッスンしているバックエンドにイベントを送信します。バックエンドは、受信したイベントをイベントのバックエンド固有の表現に変換し、設定された分析バックエンド (Segment や Woopra など) に送信します。
3.6.1.4. Che-Theia Telemetry プラグインによってバックエンドに送信されるイベント
イベント | 詳細 |
---|---|
WORKSPACE_OPENED | Che-Theia の起動時に送信されます。 |
COMMIT_LOCALLY |
|
PUSH_TO_REMOTE |
|
EDITOR_USED | エディターでファイルが変更されたときに送信されます |
WORKSPACE_INACTIVE
や WORKSPACE_STOPPED
などの他のイベントは、バックエンドプラグイン内で検出できます。
3.6.1.5. Woopra Telemetry プラグイン
Woopra Telemetry プラグイン は、Telemetry を Red Hat OpenShift Dev Spaces インストールから Segment および Woopra に送信するためにビルドされたプラグインです。このプラグインは 、Red Hat によってホストされる Eclipse Che によって使用されますが、Red Hat OpenShift Dev Spaces デプロイメントはこのプラグインを利用できます。有効な Woopra ドメインおよびセグメント書き込みキー以外の依存関係はありません。プラグインである plugin.yaml の devfile v2 には、プラグインに渡すことのできる 4 つの環境変数があります。
-
WOOPRA_DOMAIN
- イベントの送信先となる Woopra ドメイン。 -
SEGMENT_WRITE_KEY
- セグメントおよび Woopra にイベントを送信するための書き込みキー。 -
WOOPRA_DOMAIN_ENDPOINT
- Woopra ドメインを直接渡さない場合、プラグインは Woopra ドメインを返す指定の HTTP エンドポイントからこれを取得します。 -
SEGMENT_WRITE_KEY_ENDPOINT
- セグメント書き込みキーを直接渡さない場合、プラグインはセグメント書き込みキーを返す指定された HTTP エンドポイントからこれを取得します。
Red Hat OpenShift Dev Spaces インストールで Woopra プラグインを有効にするには、以下を実行します。
手順
plugin.yaml
devfile v2 ファイルを、環境変数が正しく設定された HTTP サーバーにデプロイします。CheCluster
カスタムリソースを設定します。「CLI を使用して CheCluster カスタムリソースの設定」を参照してください。spec: devEnvironments: defaultPlugins: - editor: eclipse/che-theia/next 1 plugins: 2 - 'https://your-web-server/plugin.yaml'
3.6.1.6. Telemetry プラグインの作成
本セクションでは、AbstractAnalyticsManager
を拡張し、以下のメソッドを実装する AnalyticsManager
クラスを作成する方法を説明します。
-
isEnabled()
: Telemetry バックエンドが正しく機能しているかどうかを判断します。これは、常にtrue
を返すか、または接続プロパティーがない場合にfalse
を返すなど、より複雑なチェックがあることを意味します。 -
destroy()
: Telemetry バックエンドをシャットダウンする前に実行されるクリーンアップ方法。このメソッドは、WORKSPACE_STOPPED
イベントを送信します。 -
onActivity()
- 特定のユーザーについて一部のアクティビティーが依然として実行されていることを通知します。これは主にWORKSPACE_INACTIVE
イベントを送信するために使用されます。 -
onEvent()
- Telemetry イベントをWORKSPACE_USED
またはWORKSPACE_STARTED
などの Telemetry サーバーに送信します。 -
increaseDuration()
- 短時間に多くのイベントを送信するのではなく、現在のイベントの期間を長くします。
次のセクションでは、以下について説明します。
- Telemetry サーバーを作成してイベントを標準出力にエコーします。
- OpenShift Dev Spaces Telemetry クライアントを拡張して、ユーザーのカスタムバックエンドを実装します。
-
カスタムバックエンドの DevWorkspace プラグインを表す
plugin.yaml
ファイルを作成します。 -
CheCluster
カスタムリソースからworkspacesDefaultPlugins
属性を設定して、カスタムプラグインの場所を OpenShift Dev Spaces に指定します。
3.6.1.6.1. はじめに
以下では、OpenShift Dev Spaces Telemetry システムを拡張してカスタムバックエンドと通信するために必要な手順を説明します。
- イベントを受信するサーバープロセスの作成
- イベントをサーバーに送信するバックエンドを作成する OpenShift Dev Spaces ライブラリーの拡張
- コンテナーでの Telemetry バックエンドのパッケージ化およびイメージレジストリーへのデプロイ
- バックエンドのプラグインを追加し、OpenShift Dev Space に DevWorkspaces にプラグインを読み込むよう指示
Telemetry バックエンドの最終的な例については、here を参照してください。
イベントを受信するサーバーの作成
この例は、Telemetry プラグインからイベントを受信し、標準出力に書き込むサーバーを作成する方法を示しています。
実稼働環境のユースケースでは、独自の Telemetry サーバーを作成するのではなく、サードパーティーの Telemetry システム (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 の openshift-devspaces プロジェクトでデプロイメントとして公開します。サンプル Telemetry サーバーのコードは Telemetry-server-example で利用できます。Telemetry サーバーをデプロイするには、リポジトリーのクローンを作成し、コンテナーをビルドします。
$ 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 およびサービスの定義が含まれます。また、前者は Kubernetes Ingress も定義しますが、後者は OpenShift Route を定義します。
マニフェストファイルで、プッシュした image
に一致する image および host
フィールドと、OpenShift クラスターのパブリックホスト名を置き換えます。次に、以下を実行します。
$ kubectl apply -f manifest_with_[ingress|route].yaml -n {prod-namespace}
3.6.1.6.2. バックエンドプロジェクトの作成
開発時に迅速なフィードバックを得るには、DevWorkspace 内で開発を行うことが推奨されます。これにより、クラスターでアプリケーションを実行し、フロントエンドの Telemetry プラグインからイベントを受信できます。
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
-
src/main/java/mygroup
とsrc/test/java/mygroup
の下にあるファイルを削除します。 -
backend-base
の最新バージョンおよび Maven コーディネートについては、GitHub パッケージ を参照してください。 以下の依存関係を
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>
-
read:packages
パーミッションでパーソナルアクセストークンを作成し、GitHub パッケージ からorg.eclipse.che.incubator.workspace-telemetry:backend-base
依存関係をダウンロードします。 GitHub ユーザー名、個人アクセストークン、
che-incubator
リポジトリーの詳細を~/.m2/settings.xml
ファイルに追加します。例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 の具体的な実装の作成および特殊なロジックの追加
src/main/java/mygroup
の下に、プロジェクトに 2 つのファイルを作成します。
-
MainConfiguration.java
-AnalyticsManager
に提供される設定が含まれます。 -
AnalyticsManager.java
: Telemetry システム固有のロジックが含まれます。
例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() {} }
org.my.group.AnalyticsManager
と org.my.group.MainConfiguration
は代替の 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 内でのアプリケーションの実行
DevWorkspace に
DEVWORKSPACE_TELEMETRY_BACKEND_PORT
環境変数を設定します。ここで、値は4167
に設定されます。spec: template: attributes: workspaceEnv: - name: DEVWORKSPACE_TELEMETRY_BACKEND_PORT value: '4167'
- Red Hat OpenShift DevSpaces ダッシュボードから DevWorkspace を再起動します。
DevWorkspace のターミナルウィンドウ内で以下のコマンドを実行し、アプリケーションを起動します。
--settings
フラグを使用して、GitHub アクセストークンが含まれるsettings.xml
ファイルの場所へのパスを指定します。$ mvn --settings=settings.xml quarkus:dev -Dquarkus.http.port=${DEVWORKSPACE_TELEMETRY_BACKEND_PORT}
アプリケーションは、フロントエンドプラグインからポート
4167
を使用して Telemetry イベントを受け取るようになりました。
検証手順
以下の出力がログに記録されていることを確認します。
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]
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
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. onEvent()
の実装
onEvent()
は、バックエンドが受信したイベントを Telemetry システムに送信します。サンプルアプリケーションでは、HTTP POST ペイロードを Telemetry サーバーから /event
エンドポイントに送信します。
3.6.1.6.6.1. サンプル Telemetry サーバーへの POST 要求の送信
以下の例では、Telemetry サーバーアプリケーションは http://little-telemetry-server-che.apps-crc.testing
の URL で OpenShift にデプロイされます。ここで、apps-crc.testing
は OpenShift クラスターの Ingress ドメイン名です。
TelemetryService.java
を作成して RESTEasy REST Client を設定します。例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
リクエストを行うエンドポイント。
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
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 要求が Telemetry サーバーに送信され、短期間同じイベントが自動的に遅延します。デフォルトの期間は 1500 ミリ秒です。
3.6.1.6.7. increaseDuration()
の実装
多くの Telemetry システムはイベント期間を認識します。AbstractAnalyticsManager
は、同じ期間内で発生する同様のイベントを 1 つのイベントにマージします。increaseDuration()
のこの実装は no-op です。この方法では、ユーザーの Telemetry プロバイダーの API を使用してイベントまたはイベントプロパティーを変更し、イベントの延長期間を反映します。
例3.22 AnalyticsManager.java
@Override public void increaseDuration(AnalyticsEvent event, Map<String, Object> properties) {}
3.6.1.6.8. onActivity()
の実装
非アクティブなタイムアウトの制限を設定し、最後のイベント時間がタイムアウトよりも長くなる場合は、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); }
「DevWorkspace 内でのアプリケーションの実行」 で説明されているように mvnquarkus:dev
を実行するCtrl+C を使用してアプリケーションを終了すると、WORKSPACE_STOPPED
イベントがサーバーに送信されます。
3.6.1.6.10. Quarkus アプリケーションのパッケージ化
アプリケーションをコンテナーにパッケージ化する最適な方法については、Quarkus ドキュメント を参照してください。コンテナーをビルドし、選択したコンテナーレジストリーにプッシュします。
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
の作成
DevWorkspacePod でカスタムバックエンドを実行する DevWorkspace
プラグインを表す plugin.yamldevfilev2 ファイルを作成します。devfile v2 の詳細については、Devfile v2 documentation を参照してください。
例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
- 「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
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 での Telemetry プラグインの指定
以下を既存の DevWorkspace の
components
フィールドに追加します。components: ... - name: telemetry-plug-in plugin: uri: http://apache-che.apps-crc.testing/plugin.yaml
- OpenShift DevSpaces ダッシュボードから DevWorkspace を起動します。
検証手順
Telemetry-plug-in
コンテナーが DevWorkspace Pod で稼働していることを確認します。ここでは、これはエディターで Workspace ビューをチェックして検証されます。- エディター内のファイルを編集し、Telemetry サーバーのログのサンプルでイベントを確認します。
3.6.1.6.13. すべての DevWorkspaces の Telemetry プラグインの適用
テレメトリープラグインをデフォルトのプラグインとして設定します。デフォルトのプラグインは、新規および既存の DevWorkspaces の DevWorkspace 起動時に適用されます。
CheCluster
カスタムリソースを設定します。「CLI を使用して CheCluster カスタムリソースの設定」を参照してください。spec: devEnvironments: defaultPlugins: - editor: eclipse/che-theia/next 1 plugins: 2 - 'http://apache-che.apps-crc.testing/plugin.yaml'
検証手順
- Red Hat OpenShift DevSpaces ダッシュボードから新規または既存の DevWorkspace を起動します。
- 「DevWorkspace での Telemetry プラグインの指定」 の検証手順に従って、Telemetry プラグインが機能していることを確認します。