五分钟了解 KubeGems 可观测性

1,866 阅读8分钟

本文章提到所有的功能都可以在 KuebGems的在线 Demo 环境中使用,欢迎体验!

可观测性 Observability 是近几年来随着应用微服务和容器化推进而引领出来的一个概念。其提出的最核心的三个方向 Monitoring 、Logging 和 Tracing 目前也已广泛的被各从业人员和SaaS 服务商接受,并应用在项目当中。当下具备一个可观测性分析的平台以及作为云原生时代微服务系统基础组件,不管是从 CNCF 社区还是公有云平台开放性与性能是决定平台价值的核心要素。在复杂的微服务场景下和多维度的监控数据,对 KubeGems 的可观测性设计实现带了诸多挑战。本次分享也从一个使用者的角度快速介绍当前 KubeGems 可观测性的功能。

接入中心

接入中心是 KubeGems 可观测性数据接入渠道的唯一入口。这里面平台提供了应用的 OpenTelemetry SDK、应用日志采集和中间件metrics 的数据采集。在这里面,用户可根据自己实际的需求灵活选择接入方案。

接下来本文所提到的所有操作也围绕此展开

Monitoring

微服务监控数据是云社区最早提出以 Prometheus 为主要手段,并在当下已具备较为完整的整体解决方案。KubeGems 围绕 Prometheus Operator 提供了围绕支持中间件指标应用 exporterRemoteWrite三种渠道的接入,并在云平台多租户的场景下实现数据展示的相互独立。

指标接入

以 MySQL 为例,在中间件列表中找到 mysql,填入 mysql 的地址和认证信息后即可提交

在数据状态中可以通过"检查数据"来确认数据是否已经入库

指标查询器

指标查询器是 KubeGems 可观测性提供一个用于浏览监控数据的窗口,在里面用户可以通过KuebGems 提供的PromQL 模板或者原生语句来探索应用指标的数据。还是以刚刚接入 MySQL 监控数据为例,用户进入指标查询器可以选择我们内置丰富的模板语句快速预览MySQL 的运行状态

监控面板

监控大盘是 KuebGems 为指标数据提供的一个精简的,可以聚合查看状态的面板,用户可在里面创建各种类型监控面板,当然 KubeGems 也提供了常用的诸如Container、 Mysql、Redis、MongoDB、ElasticSearch、Kafka等面板的模板,用户可以通过模板实现一键导入。我们还是以 MySQL 举例

创建成功后,即可在界面上展示出 MySQL 的实时监控信息

在实际工作中,我们可以创建多个监控面板来快速展示和反应业务的状态。

Logging

在微服务进行容器化后,平台对日志的收集相较于传统会更加统一。日志管理功能作为 KubeGems 可观测性最重要的功能之一,我们很早就开始与 Logging Operator 和 Loki 社区合作,并将其纳入到平台当中,以解决日志的抓取,存储和查询的场景。

日志接入

KubeGems 提供了非常灵活的日志接入方式,用户可以自行决定平台内的日志是否需要采集。当需要采集日志时,在接入中心选择 "Log Collect" 便会引导用户创建日志接入规则。默认我们采取精简模式,即采取租户环境下所有容器的日志到内置的 Loki 服务当中,并监控日志摄入过程中的状态。如果用户有额外的需求,可以自定义容器和输出渠道。

日志查看器

日志查看器是 KubeGems 可观测性中进行日志分析最重要的模块,用户在此页面可以查询应用日志并进行一些LogQL 的高级查询。在此页面聚合了租户环境下应用所有入库的日志,并提供了时间筛选、流式传输、日志下载和历史等常见常见功能方便使用者管理日志。

除此之外,用户也可以通过日志关联的ID 快速定位到容器相关时间节点前后的监控数据,可以说是非常方便了。

Tracing

KubeGems 的微服务链路方案采用 OpenTelemetry 和 Jaeger 的解决方案,它们均经过大量落地实践应用。在 KubeGems 中,开发者可以通过接入中心很容易的将微服务的链路数据接入到平台当中。

OpenTelemery

OpenTelemetry 是 CNCF 的一个可观测性项目,旨在提供可观测性领域的标准化方案,解决观测数据的数据模型、采集、处理、导出等的标准化问题,并为各语言提供与三方 vendor 无关的服务。

OpenTelemetry项目并不仅用于 Tracing 数据,事实上在监控数据上,社区里面已经有个人和企业为项目贡献了大量的采集器。大有对 Prometheus 为主的 Exporter 模式造成冲击之势

KubeGems 目前与 OpenTelemetry 的集成尚处于早期阶段,在接入中心里平台提供了各个语言的SDK 接入方案。

以 Java 应用举例子,在接入中心中选择 java 应用,用户便可以按照弹出窗口指导进行接入。

  1. 在用户 Dockerfile 中添加如下

    下载 java agent

    RUN mkdir -p /opt/otel/lib &&
    curl -o /opt/otel/lib/ github.com/open-teleme…

    设置 OpenTelemetry 环境变量

    env OTEL_SERVICE_NAME=<your_application_name> env OTEL_EXPORTER_OTLP_ENDPOINT=opentelemetry-collector.observability:4317 env OTEL_RESOURCE_ATTRIBUTES=service.name=(OTELSERVICENAME),k8s.namespace.name=(OTEL_SERVICE_NAME),k8s.namespace.name=(OTEL_K8S_NAMESPACE),k8s.node.name=(OTELK8SNODENAME),k8s.pod.name=(OTEL_K8S_NODE_NAME),k8s.pod.name=(OTEL_K8S_POD_NAME)

  1. 设置Docker 的 entrypoint.sh (业务启动脚本)

    java -javaagent:<path/to/opentelemetry-javaagent.jar>
    -jar myapp.jar

  1. 在 KubeGems 中对应用的 Manifest 注入环境变量

    spec: template: spec: containers: - env: - name: OTEL_ENABLED value: "true" - name: OTEL_K8S_NODE_NAME valueFrom: fieldRef: apiVersion: v1 fieldPath: spec.nodeName - name: OTEL_K8S_POD_NAME valueFrom: fieldRef: apiVersion: v1 fieldPath: metadata.name - name: OTEL_K8S_NAMESPACE valueFrom: fieldRef: apiVersion: v1 fieldPath: metadata.namespace

应用重启后应用便开始上报数据。

OpenTelemetry Demo

OpenTelemetry Demo 是 otel 社区用不同语言编写的微服务应用,这些微服务通过 gRPC 和 HTTP 相互通信,通过 Locust 来伪造用户流量来模拟应用使用 OpenTelemetry 后的数据上报行为。

为了更好在 KubeGems 上体验功能,我们打算部署此应用来模拟租户应用接入后的功能。

  1. 在 KubeGems 中创建一个租户环境otel

  1. 使用 helm 将应用部署在该环境下

    helm install otel-demo raw.githubusercontent.com/kubegems/ap…

应用性能

应用性能是一个微服务运行性能状态的监控面板, KubeGems 根据 OpenTelemetry 上报的数据自动处理成监控指标,以展示应用内部方法/函数的执行状态。包含了 请求数(Request)、错误率(ErrorRate)和接口响应(Duration)等黄金RED指标。

链路查看器

链路查看器是 KubeGems 用于查看应用 Trace 链路详情的页面,借助 Jaeger UI用户在此进行相关的链路信息搜索和分析。

Alerting

平台告警也是 KubeGems 最重要的功能之一,将平台内产生的各类事件、告警及时推送到用户终端是对应用可靠性保证的一件非常重要的指标。当下 KubeGems 的告警通道支持Email飞书 RobotWebhook

告警渠道

KubeGems 的告警机制依靠 AlertManager 实现,并支持租户配置独立的告警通道,可将通道独立应用在应用的告警规则当中。当我们进入到 KuebGems 客观性页面当中,选择"配置中心"便可开始告警接收器的配置。

告警规则

KubeGems的告警规则应用在租户环境空间之下,它们可以由用户自行编辑规则或者在接入中心时由平台自动创建,也可自行决定是否屏蔽某些指标

用户可以为每条规则设置独立的告警通道,并设置告警的频率,真正的做到专项指标专人负责的功能

告警事件

当出现告警时,KubeGems 内置的 WebHook会收到相关的事件,在第一时间通过弹窗的方式在用户界面上通知出来,当用户点击即可进入告警的详情页。

此外,如果该告警设置了多个告警渠道,此条告警还会推送到设置的通道当中,例如

KubeGems可观测性未来

当下 KubeGems-v1.22.0 版本的可观测性的部分功能模块正在重构,我们仍有很多Feature 待完善例如,otel应用性能分析优化实现监控/日志/链路多维度数据间的联动应用 Profiling分析等,这都需要消耗我们大量时间和人力成本。KubeGems 是一个100%纯开源的多云容器管理平台,在此希望广大云原生爱好者能够加入我们社区,无论你是开发者、运维或其它人员,任何一个 idea 都值得被尊重!