在 K8s 上构建端到端的无侵入开源可观测解决方案

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
日志服务 SLS,月写入数据量 50GB 1个月
可观测可视化 Grafana 版,10个用户账号 1个月
简介: 在 K8s 上构建端到端的无侵入开源可观测解决方案

Odigos(https://github.com/keyval-dev/odigos) 是一个开源的可观测性控制平面,允许企业创建和维护他们的可观测性管道,Odigos 允许应用程序在几分钟内提供追踪、指标和日志,重要的是无需修改任何代码,完全无任何侵入性。

image.png

当你的应用程序在世界各地的数十个节点上的数百个 pod 上运行时,很难全面了解整个应用程序,对于需要跟踪、管理和优化这些环境的性能和可用性的团队来说,可观测性就成为了关键的工作任务。

如果整合得当,可观测性工具可以通过集中你的数据并提供对性能、使用情况和用户行为等关键指标提供更智能的洞察力来监控和排查问题,可观测性工具应支持你使用的语言和框架,与你的容器平台和你使用的其他工具轻松集成,包括任何通信或报警。问题是实施、维护和扩展是持续的任务,如果没有适当的执行和持续的配置,可观测性工具是有限的,很多时候还是无效的。

对于研发团队来说,在云上应用可观测性能力需要特定的技能组合,特别是考虑到向 OpenTelemetry & eBPF 的转变。企业必须确保他们能够在有限的、竞争激烈的人才库中获得特定的技能组合。学习 SDK、添加自动仪表(针对每种语言)、编写代码、部署和维护采集器--这些都需要大量的时间和知识,而大多数组织并不具备这些条件。

为了解决这些集成问题,一些大型的可观测性工具供应商提供自己的代理,提供他们自己的定制解决方案。这样做的问题是,通过使用专有格式摄取和存储数据的专有代理,但是会和这些供应商绑定在一起了。随着企业越来越多地寻求与开源标准的兼容性,以及跨部门共享和访问数据的能力,将数据锁定在一个独立的供应商中会阻碍这些努力并增加成本。

Odigos 可观测性控制平面提供了一个全面的、完全自动化的解决方案,使各组织能够在几分钟内建立他们的可观测性管道。Odigos 专注与第三方集成、开源、开放标准,以及整体上更加综合的方法,减少了结合多个可观测性软件平台和开源软件解决方案的复杂性。

Odigos 自动检测你集群中每个应用程序的编程语言,并相应地进行自动检测。对于已编译的语言(如 Go),使用 eBPF 来检测应用程序,对于虚拟机语言(如 Java)则使用 OpenTelemetry。此外,Odigos 创建的管道遵循最佳实践,例如:将 API 密钥持久化为 Kubernetes 的 Secret,使用最小的采集器镜像,等等。安装、配置和维护一个开源的、不可知的 Observabiity 控制平面的能力将使各种规模的组织有能力在任何时候采用适合他们的工具,并根据需要添加更多工具。

Odigos 使可观测性变得简单,人人都能使用。

使用

准备

接下来我们将安装一个 bank-of-athnos(https://github.com/keyval-dev/bank-of-athnos) 应用,这是一个由 Google 创建的银行应用程序示例,我们使用没有任何检测代码的修改版本来演示 Odigos 如何自动从应用程序收集可观察性数据。

image.png

当然前提是需要一个 Kubernetes 集群,如果是在本地开发环境强烈推荐使用 kind 来创建一个测试集群,只需要使用名 kind create cluster 即可创建一个集群。有了集群后使用下面的命令部署测试应用即可:

kubectl apply -f https://raw.githubusercontent.com/keyval-dev/bank-of-athnos/main/release/kubernetes-manifests.yaml

在进入下一步之前,确保所有的 pod 都处于运行状态(可能需要一些时间)。

安装 Odigos

接下来我们需要先安装 Odigos,最简单的方式是使用 Helm Chart 进行安装:

helm repo add odigos https://keyval-dev.github.io/odigos-charts/
helm install my-odigos odigos/odigos --namespace odigos-system --create-namespace

odigos-system 命名空间中的所有 pod 运行后,通过运行以下命令可以打开 Odigos UI:

kubectl port-forward svc/odigos-ui 3000:3000 -n odigos-system

然后我们就可以在浏览器中通过 http://localhost:3000 访问 Odigos UI 了,正常可以看到如下所示的页面:

image.png

有两种方法可以选择 Odigos 应该使用哪些应用程序进行观测:

  • Opt out(推荐):检测所有程序,包括每一个将要部署的新应用,用户仍然可以手动标记不被检测的应用程序。
  • Opt in:只对用户手动选择的应用程序进行检测。

这里我们就选择使用 Opt out 模式。

配置

接下来是告诉 Odigos 如何访问我们自己的可观测后端,Odigos 支持很多的后端服务:

image.png

比如我们这里选择自己托管的 Prometheus、Tempo、Loki 三个服务,当然也需要提前部署该 3 个服务:

image.png

添加以下三个目的地:

Tempo

Prometheus:要添加其他目的地,请从侧栏中选择目的地,然后单击添加新目的地

Loki

选择后等待几秒钟,让 Odigos 完成部署所需的采集器并对目标应用程序进行检测。你可以通过运行以下程序来监控进度

kubectl get pods -w

等待所有的 pods 都处于运行状态(特别是注意 transactionservice 应用程序,它的启动时间很慢)。最后我们就可以在 Grafana 中探索我们的可观测数据,我们现在可以看到并将指标与追踪和日志数据关联了起来。

同样可以通过运行端口转发到你的 Grafana 实例。

kubectl port-forward svc/observability-grafana -n observability 3100:80

并导航到 http://localhost:3100,输入 admin 作为用户名,对于密码,输入以下命令的输出:

kubectl get secret -n observability observability-grafana -o jsonpath=”{.data.admin-password}” | base64 --decode

Service Graph

现在我们就可以查看微服务的 Service Graph 了。

  1. 点击侧边栏的 Explorer
  2. 选择 Tempo 作为数据源
  3. 选择 Service Graph 标签
  4. 点击 Run query 按钮开始查询

image.png

指标

接着我们可以查看一些指标,从 service graph 中点击 contacts 节点并选择 Request rate

image.png

就会出现如下所示的一个非常熟悉的图表:

image.png

还有很多 Odigos 收集的指标可以从 Prometheus 数据源轻松查询,请查看此文档(https://odigos.io/docs/telemetry-types/)以了解完整的清单 。

追踪

再次点击 Service Graph 中的 contacts 应用,但这次选择请求直方图,为了将指标和追踪联系起来,我们将使用一个叫做 exemplars 的功能,要显示 exemplars,按照如下步骤:

  1. 打开 options 菜单
  2. 打开 exemplars
  3. 注意现在直方图上增加了绿色的菱形

image.png

将鼠标悬停在其中一个添加的点上,点击 Query With Tempo,应该会出现类似于下面的追踪数据。

image.png

在此 trace 中,可以准确地看到整个请求的每个部分花费了多少时间,深入其中一个部分将显示其他信息,例如数据库查询。

日志

要进一步调查具体操作,可以简单地按下小文件图标查询相关日志。按平衡器旁边的文件图标,显示相关日志。

image.png

总结

我们已经展示了仅使用开源解决方案提取和传输日志、追踪和指标是多么容易。此外,我们还能够在几分钟内从一个应用程序中生成追踪、指标和日志数据,现在也有能力在不同的信号之间进行关联。可以将指标与追踪和追踪与日志相关联,现在拥有所有需要的数据来快速检测和修复目标应用中的生产问题。

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
1月前
|
Kubernetes 容器
K8S的Service的LoadBanlance之Metallb解决方案
本文介绍了如何在Kubernetes中使用MetalLB来实现Service的LoadBalancer功能,包括MetalLB的部署、配置、以及通过创建地址池和部署服务来测试MetalLB的过程。
72 1
K8S的Service的LoadBanlance之Metallb解决方案
|
1月前
|
Kubernetes 网络虚拟化 Docker
K8S镜像下载报错解决方案(使用阿里云镜像去下载kubeadm需要的镜像文件)
文章提供了一个解决方案,用于在无法直接访问Google镜像仓库的情况下,通过使用阿里云镜像来下载kubeadm所需的Kubernetes镜像。
167 3
K8S镜像下载报错解决方案(使用阿里云镜像去下载kubeadm需要的镜像文件)
|
1月前
|
Linux pouch 容器
CentOS7部署阿里巴巴开源的pouch容器管理工具实战
关于如何在CentOS 7.6操作系统上安装和使用阿里巴巴开源的Pouch容器管理工具的实战教程。
86 2
CentOS7部署阿里巴巴开源的pouch容器管理工具实战
|
1月前
|
Kubernetes Docker 微服务
构建高效的微服务架构:基于Docker和Kubernetes的最佳实践
在现代软件开发中,微服务架构因其灵活性和可扩展性而受到广泛青睐。本文探讨了如何利用Docker和Kubernetes来构建高效的微服务架构。我们将深入分析Docker容器的优势、Kubernetes的编排能力,以及它们如何结合实现高可用性、自动扩展和持续部署。通过具体的最佳实践和实际案例,读者将能够理解如何优化微服务的管理和部署过程,从而提高开发效率和系统稳定性。
|
1月前
|
Kubernetes 负载均衡 应用服务中间件
kubeadm快速构建K8S1.28.1高可用集群
关于如何使用kubeadm快速构建Kubernetes 1.28.1高可用集群的详细教程。
78 2
|
2月前
|
Kubernetes 监控 容灾
ACK One舰队管理:企业级多集群管理解决方案
ACK One舰队管理是阿里云为您提供的强大的多集群管理方案,功能众多:GitOps应用分发、多集群网关、多集群Service、全局可观测、服务网格、统一权限管理等,方便您轻松应对混合云、多集群、容灾等场景的问题,简化多集群管理。
|
2月前
|
存储 Kubernetes 调度
通过重新构建Kubernetes来实现更具弹性的容器编排系统
通过重新构建Kubernetes来实现更具弹性的容器编排系统
57 8
|
2月前
|
Kubernetes Cloud Native 应用服务中间件
云原生之旅:构建你的首个Kubernetes集群
【8月更文挑战第31天】在这个数字化迅速演进的时代,云原生技术如同星辰般璀璨。它不仅是企业数字化转型的引擎,更是开发者们探索创新的乐园。本文将带你开启一场云原生的奇妙旅程,从零开始,一步步构建属于你自己的Kubernetes集群。想象一下,当你的应用在云端自如地伸缩、滚动更新时,那份成就感和掌控感,是不是已经让你跃跃欲试了呢?那就让我们开始吧!
|
3月前
|
人工智能 运维 安全
阿里云容器服务ACK:高效管理云上应用的容器化解决方案
阿里云容器服务ACK(Alibaba Cloud Container Service for Kubernetes)为开发者提供了一套全面的容器化管理解决方案,旨在简化云上应用的部署、运维和管理。本文将深入探讨ACK的功能、优势及应用场景,为开发者展现容器化技术在云环境下的强大能力。
236 0
|
2月前
|
敏捷开发 Kubernetes 测试技术
阿里云云效产品使用合集之如何在K8s集群上进行构建
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。