本文章说到一切的功用都能够在 KuebGems的在线 Demo 环境中运用,欢迎体会!
可观测性 Observability 是近几年来随着运用微服务和容器化推进而引领出来的一个概念。其提出的最中心的三个方向 Monitoring 、Logging 和 Tracing 现在也已广泛的被各从业人员和SaaS 服务商接受,并运用在项目傍边。当下具备一个可观测性剖析的途径以及作为云原生时代微服务体系基础组件,不管是从 CNCF 社区仍是公有云途径开放性与功能是决议途径价值的中心要素。在复杂的微服务场景下和多维度的监控数据,对 KubeGems 的可观测性设计完成带了许多挑战。本次共享也从一个运用者的视点快速介绍当时 KubeGems 可观测性的功用。
接入中心
接入中心是 KubeGems 可观测性数据接入途径的仅有入口。这里边途径供给了运用的 OpenTelemetry SDK、运用日志采集和中间件metrics 的数据采集。在这里边,用户可依据自己实际的需求灵活挑选接入计划。
接下来本文所说到的一切操作也环绕此展开
Monitoring
微服务监控数据是云社区最早提出以 Prometheus 为主要手段,并在当下已具备较为完好的整体解决计划。KubeGems 环绕 Prometheus Operator 供给了环绕支持中间件目标
、运用 exporter
和 RemoteWrite
三种途径的接入,并在云途径多租户的场景下完成数据展现的彼此独立。
目标接入
以 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 运用,用户便能够按照弹出窗口辅导进行接入。
-
在用户 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)
-
设置Docker 的 entrypoint.sh (事务发动脚本)
java -javaagent:<path/to/opentelemetry-javaagent.jar>
-jar myapp.jar
-
在 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 上体会功用,咱们计划布置此运用来模仿租户运用接入后的功用。
- 在 KubeGems 中创立一个租户环境otel
-
运用 helm 将运用布置在该环境下
helm install otel-demo raw.githubusercontent.com/kubegems/ap…
运用功能
运用功能是一个微服务运转功能状况的监控面板, KubeGems 依据 OpenTelemetry 上报的数据主动处理成监控目标,以展现运用内部办法/函数的执行状况。包含了 请求数(Request)、错误率(ErrorRate)和接口响应(Duration)等黄金RED目标。
链路查看器
链路查看器是 KubeGems 用于查看运用 Trace 链路概况的页面,凭借 Jaeger UI用户在此进行相关的链路信息搜索和剖析。
Alerting
途径告警也是 KubeGems 最重要的功用之一,将途径内产生的各类事情、告警及时推送到用户终端是对运用可靠性保证的一件十分重要的目标。当下 KubeGems 的告警通道支持Email
、飞书 Robot
和 Webhook
告警途径
KubeGems 的告警机制依靠 AlertManager 完成,并支持租户装备独立的告警通道,可将通道独立运用在运用的告警规矩傍边。当咱们进入到 KuebGems 客观性页面傍边,挑选”装备中心”便可开始告警接收器的装备。
告警规矩
KubeGems的告警规矩运用在租户环境空间之下,它们能够由用户自行修改规矩或许在接入中心时由途径主动创立,也可自行决议是否屏蔽某些目标
用户能够为每条规矩设置独立的告警通道,并设置告警的频率,真正的做到专项目标专人担任的功用
告警事情
当呈现告警时,KubeGems 内置的 WebHook会收到相关的事情,在第一时刻经过弹窗的方式在用户界面上告诉出来,当用户点击即可进入告警的概况页。
此外,假如该告警设置了多个告警途径,此条告警还会推送到设置的通道傍边,例如
KubeGems可观测性未来
当下 KubeGems-v1.22.0 版本的可观测性的部分功用模块正在重构,咱们仍有很多Feature 待完善例如,otel运用功能剖析优化
、完成监控/日志/链路多维度数据间的联动
、运用 Profiling剖析
等,这都需要消耗咱们很多时刻和人力成本。KubeGems 是一个100%纯开源的多云容器管理途径,在此希望广大云原生爱好者能够加入咱们社区,无论你是开发者、运维或其它人员,任何一个 idea 都值得被尊重!