使用 Appsody、OpenShift 和 Open Liberty 配置可观测的微服务

栏目: IT技术 · 发布时间: 4年前

内容简介:Appsody Operator 与 OpenShift 搭配使用,让您能够快速、轻松地部署各种运行时模板。这些模板可以创建一个简单的基础项目工作空间,供您开始开发工作。其中一个模板是为什么要采用 MicroProfile?因为 Eclipse MicroProfile 规范已经提供了重要的可观察性功能,例如 MicroProfile Metrics 和 MicroProfile Health。MicroProfile Health

Appsody Operator 与 OpenShift 搭配使用,让您能够快速、轻松地部署各种运行时模板。这些模板可以创建一个简单的基础项目工作空间,供您开始开发工作。

其中一个模板是 Open Liberty 支持的 Java MicroProfile Appsody 应用程序堆栈,该堆栈利用 Eclipse MicroProfile 3.0 技术来开发微服务。这是开发可观察的微服务的坚实基础。

为什么要采用 MicroProfile?因为 Eclipse MicroProfile 规范已经提供了重要的可观察性功能,例如 MicroProfile Metrics 和 MicroProfile Health。MicroProfile Health 功能允许服务通过两个不同的端点来报告各自就绪情况和活动状态。MicroProfile Metrics 功能允许运行时跟踪和公开用于通过端点进行监控的指标。

在本教程中,我们会向您展示如何自定义应用程序部署,并介绍各种监控工具,以便您使用和可视化运行状况和指标数据。此外,我们还将向您展示如何利用 Open Liberty 运行时的 JSON 日志记录功能,以使用 Kibana 来可视化日志记录数据。

前提条件

要完成本教程中的步骤,您需要:

  • 安装 Appsody
  • 登录到某个 Docker 注册表
  • 登录到您的 OpenShift 集群
  • 在 OpenShift 集群上部署了以下堆栈:
    • Prometheus 和 Grafana 堆栈。 阅读文档 以了解有关如何在 OpenShift 集群上部署此堆栈的说明。
    • Elasticsearch、Fluentd 和 Kibana(EFK)堆栈。 阅读文档 以了解有关如何在 OpenShift 集群上部署 EFK 堆栈的说明。

要使用 Prometheus 安全地从 Open Liberty 抓取指标数据,您的开发和运维团队需要共同努力来配置身份验证凭证。可以在以下章节中找到有关本主题的详细信息:配置 Open Liberty 安全性。

本教程已经通过 Kabanero 0.2.0 和 OpenShift Cluster 3.11 进行了测试。

自定义和部署 Java MicroProfile 堆栈

在您的本地系统上,创建一个空目录作为项目目录。Appsody 将使用此目录的名称作为您的应用程序的名称。

在空白项目目录中,通过调用以下命令来初始化 Java MicroProfile 堆栈:

appsody init java-microprofile

Java MicroProfile 模板现已部署到当前目录中。现在您可以开始自定义代码了。

我们可以从这里开始进行自定义。有关 MicroProfile 堆栈的详细信息,请参阅 Appsody 堆栈 Github 页面

在您的 OpenShift 集群中,您需要创建一个项目名称空间以供部署 Appsody 应用程序堆栈。以下代码向您展示了如何创建此名称空间;在我们的示例中, appsody-application 用作项目名称空间。

oc new-project appsody-application

配置 Open Liberty 安全性

已经使用 <quickStartSecurity> 元素为 Java MicroProfile Appsody 堆栈配置了基本身份验证。缺省用户名是 admin ,缺省密码是 adminpwd

通过修改 server.xml<appsody_project_directory>/src/main/liberty/config 下面的 <quickStartSecurity> 属性来配置您自己的用户名和密码值。

此身份验证配置会影响运维团队如何配置 Prometheus 以从 Open Liberty 运行时中抓取数据。运维团队将创建并应用一个 密钥 ,其中包含用户名和密码。抓取 Open Liberty 运行时的 /metric 端点时,Prometheus Service Monitor 将利用此_密钥_来对自己进行身份验证。

运维团队可能已经指定了用户名和密码。如果是,请在 server.xml 配置中替换此用户名和密码。或者,作为一位开发者,您也可以部署您自己的 服务监控器 (Service Monitor),以便 Prometheus 部署可以从中拉取数据。请参阅一节。

以下代码列表显示指定了身份验证的 server.xml

<server description="Liberty server">
    <featureManager>
        <feature>microProfile-3.0</feature>
    </featureManager>

    <quickStartSecurity userName="admin" userPassword="adminpwd"/>
    <keyStore id="defaultKeyStore" location="key.jks" type="jks" password="mpKeystore"/>
    <httpEndpoint host="*" httpPort="${default.http.port}" httpsPort="${default.https.port}" id="defaultHttpEndpoint"/>

    <webApplication location="starter-app.war" contextRoot="/"/>
</server>

启用 Open Liberty JSON 日志记录

Open Liberty 运行时能够将日志记录事件以 JSON 格式发送到标准输出/控制台。这让强大的监控堆栈(如 Elasticsearch、Fluentd 和 Kibana(EFK)来更高效地使用、存储和可视化数据。

要启用 Open Liberty 的 JSON 日志记录功能,请修改 pom.xml 以使用所需的配置值来生成 bootstrap.properties 文件。

例如,将代码从:

...
    <bootstrapProperties>
        <default.http.port>${http.port}</default.http.port>
        <default.https.port>${https.port}</default.https.port>
        <app.context.root>${app.name}</app.context.root>
    </bootstrapProperties>
...

更改为:

...
    <bootstrapProperties>
        <default.http.port>${http.port}</default.http.port>
        <default.https.port>${https.port}</default.https.port>
        <app.context.root>${app.name}</app.context.root>
        <com.ibm.ws.logging.console.format>json</com.ibm.ws.logging.console.format>
        <com.ibm.ws.logging.console.source>message,trace,accessLog,ffdc,audit</com.ibm.ws.logging.console.source>
        <com.ibm.ws.logging.console.log.level>info</com.ibm.ws.logging.console.log.level>
        <com.ibm.ws.logging.message.format>json</com.ibm.ws.logging.message.format>
        <com.ibm.ws.logging.message.source></com.ibm.ws.logging.message.source>
        <com.ibm.ws.logging.trace.file.name>stdout</com.ibm.ws.logging.trace.file.name>
    </bootstrapProperties>
...

当您的服务器启动时,Open Liberty 运行时将解释这些值,并且发送到 控制台 的所有后续日志将由环境变量定义的 组成。另外,代码段中定义的设置将禁用向 messages.logtraces.log 的输出。

有关后续步骤,请参阅分析 Open Liberty 日志。

要了解有关 Open Liberty 的日志记录功能配置的详细信息,请参阅 Open Liberty 日志记录文档

启用 Open Liberty

同时配置了 monitor-1.0mpMetrics-x.x 功能时,额外指标将由 Open Liberty 运行时跟踪。 microProfile-3.0 功能将启动 mpMetrics-2.0 功能。

<appsody_project_directory>/src/main/liberty/config/server.xml 中配置 monitor-1.0 功能,方法是添加以下内容:

server.xml 代码片段:

<featureManager>
   <feature>microProfile-3.0</feature>
   <feature>monitor-1.0</feature>
</featureManager>

通过调用以下命令首先在本地测试您的 Appsody 应用程序:

appsody run

可以转到 http://localhost:9080/metrics/metrics 端点上查看您的指标。提示输入身份验证凭据时,请使用您在上面配置的用户名和密码。

将应用程序部署至 OpenShift

现在,您的 Appsody 应用程序已完成,请确保您已登录 Docker 存储库,然后使用以下命令将该应用程序部署到 OpenShift 集群:

appsody deploy -t demo-repo/java-microprofile-demo:latest --push --namespace appsody-application

代码发生了什么变化?我们来简单看看:

-t
--push
--namespace
demo-repo
appsody-application

作为部署过程的一部分,Appsody CLI 将检查是否已在名称空间中部署了 Appsody Operator,并在需要的情况下进行部署。然后,部署流程将生成适用于该操作符的 Appsody 应用程序的部署清单,并应用此部署清单。您的应用程序现在已经部署到 OpenShift 集群中。

将在您的本地项目目录中生成一个名为 app-deploy.yaml 的文件。这是部署到您的 OpenShift 集群的 yaml 文件。您可以通过额外的配置进一步修改此文件,然后执行以下命令重新应用此文件:

oc apply -f app-deploy.yaml

运维团队创建的 Service Monitor 将配置为监控包含特定标签的部署。与您的运维团队沟通以确定此标签的键值的内容。您需要将这些标签应用于 app-deploy.yaml ,然后重新部署此文件。

例如,如果 Service Monitor 在监视值为 demo 的标签 app

metadata:
  labels:

或者,您也可以通过 Appsody 运维人员部署自己的服务监控程序,此时,您自己的服务监控程序将为您处理标签匹配。请参阅以下章节。

部署 Service Monitor

作为额外步骤,您可以通过修改并重新部署 app-deploy.yamlService Monitor 部署到您的 OpenShift 集群中。对于开发者来说,这让您能够更直接地控制应用程序部署与 Prometheus 的连接。不必等待运维团队成员来配置 Service Monitor ,您可以自己配置。

添加以下配置:

monitoring:
    endpoints:
    - basicAuth:
        password:
          key: password
          name: metrics-liberty
        username:
          key: username
          name: metrics-liberty
      interval: 10s
      tlsConfig:
        insecureSkipVerify: true
    labels:
      k8s-app: ""

Prometheus 部署可以监控包含特定标签的 Service Monitors 。在此示例中,Prometheus 部署需要监控包含 k8s-app 标签的 Service Monitors 。此外,Prometheus 部署只能监控包含特定标签的名称空间。

您需要与您的运维团队沟通以了解需要哪个标签,以便获取您的 Service Monitor 和名称空间。

basicAuth 代码部分定义了在访问 /metrics 端点时应该用来进行身份验证的用户名和密码。

在此示例中, metrics-liberty 是对名为 metrics-libertysecret 的引用,其中包含加密的用户名和密码值。开发或运维团队都可以创建此密钥。需要在与应用程序部署和服务监控相同的项目名称空间中创建密钥。参阅配置 Open Liberty 安全性,查看如何为底层 Open Liberty 运行时设置身份验证安全性。

以下代码显示了包含 monitoring 代码部分的 app-deploy.yaml

apiVersion: appsody.dev/v1beta1
kind: AppsodyApplication
metadata:
  name: myAppsodyApplication
spec:
  # Add fields here
  version: 1.0.0
  applicationImage: demo-repo/java-microprofile-demo:latest
  stack: java-microprofile
  service:
    type: NodePort
    port: 9080
    annotations:
      prometheus.io/scrape: 'true'
  readinessProbe:
    failureThreshold: 12
    httpGet:
      path: /health/ready
      port: 9080
    initialDelaySeconds: 5
    periodSeconds: 2
  livenessProbe:
    failureThreshold: 12
    httpGet:
      path: /health/live
      port: 9080
    initialDelaySeconds: 5
    periodSeconds: 2
  monitoring:
    endpoints:
    - basicAuth:
        password:
          key: password
          name: metrics-liberty
        username:
          key: username
          name: metrics-liberty
      interval: 10s
      tlsConfig:
        insecureSkipVerify: true
    labels:
      k8s-app: ""
  expose: true
  createKnativeService: false

分析 Open Liberty 日志

使用 Kibana 仪表板查看日志

由于 Open Liberty 运行时发送 JSON 格式的日志,因此我们可以利用 EFK 堆栈来帮助我们监控这些日志记录事件。Fluentd 收集 JSON 数据,然后将其发送到 Elasticsearch 以进行存储和索引编制。然后,Kibana 将数据可视化。

提供了 Kibana 仪表板以可视化来自 Open Liberty 运行时的事件。在 此处 检索专为分析 Liberty 日志记录事件而设计的 Kibana 仪表板。

注意:要使用这些仪表板,日志记录事件必须以 JSON 格式发送到标准输出。如果尚未配置 Open Liberty 运行时,请参阅启用 Open Liberty JSON 日志记录。

从命令行中查看日志

要从命令行查看日志,可使用 oc logs 命令,如下所示:

oc logs -f pod_name -n namespace

其中 pod_name 是您的 Open Liberty Pod 的名称, namespace 是运行 Pod 的名称空间。

您可以使用命令行 JSON 解析器,比如 JSON Query 工具(jq),来创建 JSON 格式日志的人类可读视图。在以下示例中,日志将通过 grep 在管道中传递,以确保在 jq 解析该行之前,消息字段已经存在:

oc logs -f pod_name -n namespace | \
  grep --line-buffered message | \
  jq .message -r

监控 Java MicroProfile Appsody 堆栈的运行状况

MicroProfile Health 允许服务报告其就绪状态和活跃状态,并会将总体运行状况发布到已定义的端点。如果某个服务报告 "UP",则此服务可用。如果某个服务报告 "DOWN",则此服务不可用。MicroProfile Health 在端点上报告各个服务的状态,如果所有服务的状态均为 "UP",则指示总体总状态为 "UP"。然后,服务管理员可以根据运行状态来制定决策。

/health/live/health/ready 端点上提供健康数据,这两个端点分别用于活动状态检查和就绪状态检查。

Kubernetes 提供了活动状态和就绪状态探针,用于检查容器的运行状况。这些探针可以检查容器中的某些文件,检查 TCP 套接字或发出 HTTP 请求。如上所述,MicroProfile Health 会公开微服务上的就绪状态和活动状态端点,Kubernetes 将按照探针的规定方式轮询这些端点,以对微服务状态的任何变化做出适当的反应。

这些 Kubernetes 活动状态和就绪状态探针已经在 Appsody Operator 和 MicroProfile Appsody 堆栈配置文件中预先配置为各自的 MicroProfile Health 端点, 如这里所示

可在 此处 阅读有关 Kubernetes 活动状态和就绪状态配置的详细信息。

监控 MicroProfile Appsody 堆栈的指

支持 MicroProfile Metrics 的 Open Liberty 运行时能够跟踪和观察来自 JVM 和 Open Liberty 服务器的指标,以及跟踪已部署的应用程序中检测到的指标。指标数据在 /metrics 端点上提供。跟踪的指标数据随后可以由 Prometheus 提取,然后通过 Grafana 进行可视化。

IBM 提供的 Grafana 仪表板利用了从 JVM 和 Open Liberty 运行时跟踪的指标。 在 此处 可以找到适当的仪表板。

结束语

现在,使用基于 Open Liberty 的 Java MicroProfile Appsody 堆栈,我们配置了一个微服务,该微服务利用 MicroProfile Health 和 MicroProfile Metrics 以及 Liberty 的 JSON 日志记录与各种监视工具,提高了可观察性。我们已集成了 Elasticsearch、Fluentd 和 Kibana 等强大的监视工具,用于检索、存储和可视化日志数据。我们还使用 Prometheus 和 Grafana 来帮助检索、存储和可视化指标数据。

后续步骤

参考资源

本文翻译自: Configure an observable microservice with Appsody, OpenShift, and Open Liberty (2019-12-17)


以上所述就是小编给大家介绍的《使用 Appsody、OpenShift 和 Open Liberty 配置可观测的微服务》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Handbook of Data Structures and Applications

Handbook of Data Structures and Applications

Dinesh P. Mehta / Chapman and Hall/CRC / 2004-10-28 / USD 135.95

In the late sixties, Donald Knuth, winner of the 1974Turing Award, published his landmark book The Art of Computer Programming: Fundamental Algorithms. This book brought to- gether a body of kno......一起来看看 《Handbook of Data Structures and Applications》 这本书的介绍吧!

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具