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

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
日志服务 SLS,月写入数据量 50GB 1个月
可观测监控 Prometheus 版,每月50GB免费额度
简介: 在 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 Docker
利用Docker和Kubernetes构建微服务架构
利用Docker和Kubernetes构建微服务架构
|
3月前
|
Kubernetes 容器
K8S的Service的LoadBanlance之Metallb解决方案
本文介绍了如何在Kubernetes中使用MetalLB来实现Service的LoadBalancer功能,包括MetalLB的部署、配置、以及通过创建地址池和部署服务来测试MetalLB的过程。
158 1
K8S的Service的LoadBanlance之Metallb解决方案
|
1月前
|
Ubuntu 网络安全 容器
KubeSphere 是一个开源的容器平台,提供丰富的功能和便捷的操作界面,适用于企业容器化部署和管理
KubeSphere 是一个开源的容器平台,提供丰富的功能和便捷的操作界面,适用于企业容器化部署和管理。本文详细介绍了如何在 Ubuntu 22.04 上安装 KubeSphere,包括系统要求、安装依赖项、设置防火墙、下载安装脚本、选择安装选项、验证安装结果等步骤,并提供了常见问题的解决方法。希望本文能为读者提供实用的参考和帮助。
33 3
|
2月前
|
Kubernetes 负载均衡 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
本文介绍了Docker和Kubernetes在构建高效微服务架构中的应用,涵盖基本概念、在微服务架构中的作用及其实现方法。通过具体实例,如用户服务、商品服务和订单服务,展示了如何利用Docker和Kubernetes实现服务的打包、部署、扩展及管理,确保微服务架构的稳定性和可靠性。
103 7
|
1月前
|
Kubernetes 安全 容器
关于K8s,不错的开源工具
【10月更文挑战第12天】
|
1月前
|
Kubernetes 负载均衡 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
【10月更文挑战第22天】随着云计算和容器技术的快速发展,微服务架构逐渐成为现代企业级应用的首选架构。微服务架构将一个大型应用程序拆分为多个小型、独立的服务,每个服务负责完成一个特定的功能。这种架构具有灵活性、可扩展性和易于维护的特点。在构建微服务架构时,Docker和Kubernetes是两个不可或缺的工具,它们可以完美搭档,为微服务架构提供高效的支持。本文将从三个方面探讨Docker和Kubernetes在构建高效微服务架构中的应用:一是Docker和Kubernetes的基本概念;二是它们在微服务架构中的作用;三是通过实例讲解如何使用Docker和Kubernetes构建微服务架构。
66 6
|
3月前
|
Kubernetes 网络虚拟化 Docker
K8S镜像下载报错解决方案(使用阿里云镜像去下载kubeadm需要的镜像文件)
文章提供了一个解决方案,用于在无法直接访问Google镜像仓库的情况下,通过使用阿里云镜像来下载kubeadm所需的Kubernetes镜像。
400 4
K8S镜像下载报错解决方案(使用阿里云镜像去下载kubeadm需要的镜像文件)
|
3月前
|
Linux pouch 容器
CentOS7部署阿里巴巴开源的pouch容器管理工具实战
关于如何在CentOS 7.6操作系统上安装和使用阿里巴巴开源的Pouch容器管理工具的实战教程。
138 2
CentOS7部署阿里巴巴开源的pouch容器管理工具实战
|
3月前
|
Kubernetes Docker 微服务
构建高效的微服务架构:基于Docker和Kubernetes的最佳实践
在现代软件开发中,微服务架构因其灵活性和可扩展性而受到广泛青睐。本文探讨了如何利用Docker和Kubernetes来构建高效的微服务架构。我们将深入分析Docker容器的优势、Kubernetes的编排能力,以及它们如何结合实现高可用性、自动扩展和持续部署。通过具体的最佳实践和实际案例,读者将能够理解如何优化微服务的管理和部署过程,从而提高开发效率和系统稳定性。
|
3月前
|
Kubernetes 负载均衡 应用服务中间件
kubeadm快速构建K8S1.28.1高可用集群
关于如何使用kubeadm快速构建Kubernetes 1.28.1高可用集群的详细教程。
172 2
下一篇
DataWorks