作者:Gary Brown
正如Eclipse Che网站上所解释的,“Che将Kubernetes应用程序引入到你的开发环境中,并提供了一个浏览器内IDE,允许你编写、构建、测试和运行应用程序,就像它们在任何机器上运行一样”。然而,在你的生产环境中部署时,可以使用可观察性工具来监视这些相同的应用程序,以了解它们的性能,从而为将来的改进提供帮助。如果我们也能在Che开发环境中利用这些可观察性工具,在对测试(准备阶段)或生产环境进行更改之前识别这些改进机会,不是很好吗?
https://www.eclipse.org/che/
在这篇博客文章中,我们将展示将Jaeger添加到开发工作区是多么简单,并观察应用程序的执行情况。我们将使用che.openshift.io作为主机环境,尽管你可以设置一个本地的Che服务器。
https://www.jaegertracing.io/
http://che.openshift.io/
https://www.eclipse.org/che/docs/che-7/running-che-locally/
创建工作区
Che 7引入了以一种称为devfile的yaml格式定义开发工作区的功能。示例devfile可以在Red Hat开发者GitHub组织中找到。
https://www.eclipse.org/che/docs/che-7/configuring-a-workspace-using-a-devfile/
https://github.com/redhat-developer/devfile
在这篇文章中,我们将使用一个修改过的Spring Boot devfile版本,它将Jaeger一体化后端添加到工作空间中。主要的改变是在commands顶层节点之前添加以下部分:
https://github.com/redhat-developer/devfile/blob/master/getting-started/spring-boot/devfile.yaml
-
type: dockerimage
alias: tracing
image: jaegertracing/all-in-one:latest
env:
- name: MEMORY_MAX_TRACES
value: "5000"
- name: COLLECTOR_ZIPKIN_HTTP_PORT
value: "9411"
memoryLimit: 128Mi
endpoints:
- name: 'tracing-ui'
port: 16686
- name: 'collector-grpc'
port: 14250
attributes:
public: 'false'
- name: 'collector-http'
port: 14268
attributes:
public: 'false'
- name: 'collector-zipkin'
port: 9411
attributes:
public: 'false'
- name: 'agent-config'
port: 5778
attributes:
public: 'false'
- name: '6831/udp'
port: 6831
attributes:
public: 'false'
- name: '6832/udp'
port: 6832
attributes:
public: 'false'
volumes:
- name: tmp
containerPath: /tmp
但是在与che.openshift.io一起使用时,需要进行一些额外的内存限制更改,可以在这里找到devfile的修改版本。
https://gist.github.com/objectiser/a4f00be5433b8a0dd47583589196f19e
在che.openshift.io上启动工作区。打开一个浏览器(由于某些版本的Firefox可能遇到问题,推荐使用Chrome),使用这个url。
http://che.openshift.io/f?url=https://gist.githubusercontent.com/objectiser/667615926a40d6cd8eb675859ddee1a1/raw/06d25e2026d7a689dd8b38a343eec9a9cc431cde/che-spring-boot-devfile.yaml
添加OpenTracing测仪
当工作区最初被打开时,应用程序没有OpenTracing的工具。
可以通过隐式地包含OpenTracing-spring-jaeger-cloud-starter添加OpenTracing测仪,如下面的更新的pom.xml所示,同时将spring-boot-starter-parent版本更新到2.2.0.RELEASE(OpenTracing instrumentation所需要的)。
此依赖项自动对入站和出站HTTP请求进行处理。它还引导Jaeger跟踪程序将跟踪数据报告到Jaeger后端(包括在工作空间中)。跟踪程序的默认配置,将通过UDP向Jaeger代理报告数据,尽管应用程序可以配置为直接通过HTTP向收集器报告数据。
https://github.com/opentracing-contrib/java-spring-jaeger#configuration
最后一步是添加一个属性,将在跟踪数据中定义服务名称。这是通过创建src/main/resources文件夹,然后创建一个包含上面内容的application.properties文件。
跟踪正在运行的应用程序
工作区的右侧是一个立方体符号,当选中它时,将展开树。在User Runtimes/tools节点下有一个名为run webapp的任务。选择此选项将运行Spring Boot应用程序。启动后,将出现一个带有Open Link按钮的窗口。按此按钮启动应用程序的浏览器。
在同一树中,选择User Runtimes/tracing选项tracing-ui,它将在一个单独的浏览器中启动Jaeger UI。
单击浏览器顶部的refresh按钮几次,以在控制台窗口中查看Span reported。
跳到Jaeger UI以查看从应用程序报告的跟踪。
总结
本文演示了如何轻松地将Jaeger的OpenTracing引入到Eclipse Che工作空间中,从而允许开发者在开发期间,从他们的应用程序中获得追踪信息。
虽然这个例子很简单,只从单一服务捕获跟踪,Che所提供的好处是使完整的应用程序(多个服务)中使用相同的工作区,从而生产更多有趣的踪迹,并使开发者能够在完整应用程序的上下文理解他们开发的服务的性能。