使用 ES|QL 优化可观察性:简化 Kubernetes 和 OTel 的 SRE 操作和问题解决

2024-02-24 18:52

本文主要是介绍使用 ES|QL 优化可观察性:简化 Kubernetes 和 OTel 的 SRE 操作和问题解决,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作者:Bahubali Shetti

作为一名运营工程师(SRE、IT 运营、DevOps),管理技术和数据蔓延是一项持续的挑战。 简单地管理大量高维和高基数数据是令人难以承受的。

作为单一平台,Elastic® 帮助 SRE 将无限的遥测数据(包括指标、日志、跟踪和分析)统一并关联到单一数据存储 — Elasticsearch® 中。 然后,通过应用 Elastic 的高级机器学习 (ML)、AIOps、AI Assistant 和分析的强大功能,你可以打破孤岛并将数据转化为见解。 作为全栈可观测性解决方案,从基础设施监控到日志监控和应用程序性能监控 (APM) 的所有内容都可以在单一、统一的体验中找到。

在 Elastic 8.11 中,Elastic 的新管道查询语言 ES|QL(Elasticsearch 查询语言)现已提供技术预览,它可以转换、丰富和简化数据调查。 在新的查询引擎的支持下,ES|QL 提供了具有并发处理的高级搜索功能,从而提高了速度和效率,而不受数据源和结构的影响。 通过从一个屏幕创建聚合和可视化来加速解决问题,提供迭代、不间断的工作流程。

ES|QL 对于 SRE 的优势

使用 Elastic Observability 的 SRE 可以利用 ES|QL 来分析日志、指标、跟踪和分析数据,使他们能够通过单个查询查明性能瓶颈和系统问题。 在 Elastic Observability 中使用 ES|QL 管理高维和高基数数据时,SRE 具有以下优势:

  • 提高运营效率:通过使用 ES|QL,SRE 可以使用聚合值作为单个查询的阈值来创建更多可操作的通知,这些通知也可以通过 Elastic API 进行管理并集成到 DevOps 流程中。
  • 通过洞察增强分析:ES|QL 可以处理各种可观测数据,包括应用程序、基础设施、业务数据等,无论来源和结构如何。 ES|QL 可以轻松地通过附加字段和上下文丰富数据,从而允许通过单个查询创建仪表板可视化或问题分析。
  • 缩短解决问题的平均时间:ES|QL 与 Elastic Observability 的 AIOps 和 AI Assistant 结合使用,可通过识别趋势、隔离事件和减少误报来提高检测准确性。 这种上下文的改进有助于故障排除以及快速查明和解决问题。

Elastic Observability 中的 ES|QL 不仅增强了 SRE 更有效地管理客户体验、组织收入和 SLO 的能力,而且还通过提供上下文聚合数据来促进与开发人员和 DevOps 的协作。

在本博客中,我们将介绍 SRE 可以利用 ES|QL 的一些关键用例:

  • ES|QL 与 Elastic AI Assistant 集成,使用公共 LLM 和私有数据,增强了 Elastic Observability 中任何地方的分析体验。
  • SRE 可以在单个 ES|QL 查询中分解、分析和可视化来自多个来源和跨任何时间范围的可观察性数据。
  • 可以通过单个 ES|QL 查询轻松创建可操作的警报,从而增强操作。

我将通过展示 SRE 如何解决使用 OpenTelemetry 检测并在 Kubernetes 上运行的应用程序中的问题来完成这些用例。 OpenTelemetry (OTel) 演示位于 Amazon EKS 集群上,并配置了 Elastic Cloud 8.11。

你还可以查看我们的 Elastic Observability ES|QL 演示,该演示演示了可观察性的 ES|QL 功能。

ES|QL 与 AI 助手

作为 SRE,你正在使用 Elastic Observability 监控 OTel 仪表化应用程序,而在 Elastic APM 中,你会注意到 service map 中突出显示的一些问题。

使用 Elastic AI Assistant,你可以轻松要求进行分析,特别是,我们会检查应用程序服务的总体延迟情况。

My APM data is in traces-apm*. What's the average latency per service over the last hour? Use ESQL, the data is mapped to ECS

Elastic AI Assistant 生成一个 ES|QL 查询,我们在 AI Assistant 中运行该查询以获取所有应用程序服务的平均延迟列表。 我们可以很容易地看到前四名是:

  • load generator
  • front-end proxy
  • frontendservice
  • checkoutservice

通过 AI Assistant 中的简单自然语言查询,它生成了单个 ES|QL 查询,帮助列出跨服务的延迟。

注意到多个服务存在问题,我们决定从前端代理(front-end proxy)开始。 当我们研究细节时,我们看到了重大故障,并且通过 Elastic APM 故障关联,很明显前端代理没有正确完成对下游服务的调用。

Discover 中的 ES|QL 洞察力和上下文分析

了解应用程序在 Kubernetes 上运行后,我们会调查 Kubernetes 中是否存在问题。 我们特别想查看是否有任何服务存在问题。

我们在 Elastic Discover 的 ES|QL 中使用以下查询:

from metrics-* | where kubernetes.container.status.last_terminated_reason != "" and kubernetes.namespace == "default" | stats reason_count=count(kubernetes.container.status.last_terminated_reason) by kubernetes.container.name, kubernetes.container.status.last_terminated_reason | where reason_count > 0

ES|QL 帮助分析来自 Kubernetes 的 1,000 个/10,000 个指标事件,并突出显示由于 OOMKilled 而重新启动的两个服务。

当被问及 OOMKilled 时,Elastic AI Assistant 表示 pod 中的容器由于内存不足而被终止。

我们运行另一个 ES|QL 查询来了解电子邮件服务和产品目录服务的内存使用情况。

ES|QL 很容易发现平均内存使用量相当高。

我们现在可以进一步调查这两个服务的日志、指标和 Kubernetes 相关数据。 然而,在继续之前,我们创建一个警报来跟踪大量内存使用情况。

使用 ES|QL 发出可操作的警报

怀疑可能会再次出现的特定问题,我们只需创建一个警报,引入我们刚刚运行的 ES|QL 查询,该查询将跟踪内存利用率超过 50% 的任何服务。

我们修改最后一个查询以查找内存使用率高的任何服务:

FROM metrics*
| WHERE @timestamp >= NOW() - 1 hours
| STATS avg_memory_usage = AVG(kubernetes.pod.memory.usage.limit.pct) BY kubernetes.deployment.name | where avg_memory_usage > .5

通过该查询,我们创建一个简单的警报。 请注意如何将 ES|QL 查询引入警报中。 我们简单地将其与寻呼机职责联系起来。 但我们可以从多个连接器中进行选择,例如 ServiceNow、Opsgenie、电子邮件等。

通过此警报,我们现在可以轻松监控 pod 中内存利用率超过 50% 的任何服务。

使用 ES|QL 充分利用你的数据

在这篇文章中,我们展示了 ES|QL 为分析、操作和减少 MTTR 带来的强大功能。 综上所述,Elastic Observability 中 ES|QL 的三个用例如下:

  • ES|QL 与 Elastic AI Assistant 集成,使用公共 LLM 和私有数据,增强了 Elastic Observability 中任何地方的分析体验。
  • SRE 可以在单个 ES|QL 查询中分解、分析和可视化来自多个来源和跨任何时间范围的可观察性数据。
  • 可以通过单个 ES|QL 查询轻松创建可操作的警报,从而增强操作。

Elastic 邀请 SRE 和开发人员亲身体验这种变革性语言,并开启数据任务的新视野。 今天就在 https://ela.st/free-Trial上尝试一下,现在处于技术预览版。

本文中描述的任何特性或功能的发布和时间安排均由 Elastic 自行决定。 当前不可用的任何特性或功能可能无法按时交付或根本无法交付。

原文:Optimizing SRE efficiency and issue resolution with ES|QL in Elastic Observability, OTel, and Kubernetes | Elastic Blog

这篇关于使用 ES|QL 优化可观察性:简化 Kubernetes 和 OTel 的 SRE 操作和问题解决的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/743038

相关文章

vue使用docxtemplater导出word

《vue使用docxtemplater导出word》docxtemplater是一种邮件合并工具,以编程方式使用并处理条件、循环,并且可以扩展以插入任何内容,下面我们来看看如何使用docxtempl... 目录docxtemplatervue使用docxtemplater导出word安装常用语法 封装导出方

SpringBoot3实现Gzip压缩优化的技术指南

《SpringBoot3实现Gzip压缩优化的技术指南》随着Web应用的用户量和数据量增加,网络带宽和页面加载速度逐渐成为瓶颈,为了减少数据传输量,提高用户体验,我们可以使用Gzip压缩HTTP响应,... 目录1、简述2、配置2.1 添加依赖2.2 配置 Gzip 压缩3、服务端应用4、前端应用4.1 N

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面