我们一起聊聊数据库的可观测性

news/2025/3/11 2:59:59/文章来源:https://www.cnblogs.com/yaoyangding/p/18672001

我们一起聊聊数据库的可观测性

数据库其他数据库
云原生应用来是更为复杂和无序的,而对于数据库来说,相对来说要简单一些。因为数据库系统是按照某种客观规律组织起来的,其内在规律可以被数字化。因此也有一些运维专家认为数据库不需要搞什么可观测性,做监控就好了。其实讨论到这里就已经出现了一个比较头疼的问题了。可观测性和监控到底是个什么关系呢?

本周五我会在信通院组织的一个线上沙龙里分享数据库可观测性的话题,这两天在准备PPT,今天我们就顺便聊聊这个话题吧。

实际上可观测性这个概念最初并不是数据库领域发明的,APM厂家最早提出了可观测性的概念。他们认为IT基础设施可以通过监控来解决问题,但是云原生应用系统太复杂了,仅仅通过监控是搞不定的,因此需要通过可观测性能力的建设来解决这方面的问题。

实际上可观测性最初指的是一种IT运维管理策略,目的是将最相关、最重要和最核心的问题提供给运维人员,并将关键信息与常规信息分离,从而达到更好的运维效果。

可观察性是控制理论中的一个要素,它认为 IT 系统的内部状态可以从它们的输入和输出之间的关系中推断出来。因此,它也经常被描述为自上而下的评估。可观察性的挑战不在于从观察中得出内部状态,而在于收集正确的观察。如何进行观察是可观测性发挥作用的关键,而正确的观察往往来自于对于内在原理的理解与存在于现实中的客观规律。

云原生应用来是更为复杂和无序的,而对于数据库来说,相对来说要简单一些。因为数据库系统是按照某种客观规律组织起来的,其内在规律可以被数字化。因此也有一些运维专家认为数据库不需要搞什么可观测性,做监控就好了。其实讨论到这里就已经出现了一个比较头疼的问题了。可观测性和监控到底是个什么关系呢?

一般来说,监控是对一个预知的场景进行数据采集,基线分析与预警,比较依赖于已知的知识,在已知的前提假设下发挥作用。这种方式比较容易发现一些已知的唯一性问题,但是无法进行根因溯源。比如监控很容易发现某个数据库宕掉了,但是比较难以发现数据库中存在的性能问题和一些局部的问题。因此基于监控的网管系统可以帮助运维人员发现系统出现的一些异常,但是不能帮我们精准定位。而告警风暴的出现又会淹没运维工作,给运维工作带来巨大的压力。因此现在很多企业也都希望通过一些AI算法来收敛告警,让监控告警更加精准。

而可观测性则提供了综合的,全面的数据,通过算法的支撑,可以用于复杂问题的分析。可观测性既可以提供带有前提假设性的问题分析,也可以用于未知的问题的分析,还可以通过算法收敛告警,将多类告警信息归类于某个问题,也可以利用丰富的数据做多维度的对比分析,从而确定问题的根源,因此可观测性可以用于十分复杂环境下的问题分析。

如果简单的比较可观测性与监控的含义,我们作为识货的人,肯定是会选择后者的。谁不希望自己的运维自动化系统有更强的能力呢。只不过建设可观测性能力也面临极大的挑战。实际上,如果我们抛开“可观测性”这个看上去十分高大上的词汇,来看看我们日常运维中所遇到的问题。

第一个问题是关键数据缺失的问题,这是我们经常会遇到的问题,分析某个已经发生的故障的根因的时候,由于某些数据没有采集,导致本次分析只能以推测作为终点,或者需要等故障再次发生时才能继续分析。因此要构建强大的可观测性能力,必须实现对关键数据采集的全覆盖,全覆盖这个事情好说不好做。

第二个问题是关键数据出现意外不可见情况,我们认为某个指标异常的时候,系统是异常的,但是系统异常的时候,这个关键数据往往是不可获得的,或者说获得这个数据是存在更大的风险的。这种情况在可观测性方面最常遇到的事情,系统不出问题的时候,可观测性分析都是正常的,但是系统一出问题,可观测性分析工具也出问题了。遇到这种情况,往往是因为可观测性分析工具的建设者经验不足,或者考虑不周。通过更为细致的指标设计,是完全可以规避这个问题的。

第三个问题是多种数据格式与数据来源的复杂性,这导致在一些复杂的场景下,很难正确的采集并正确的解析相关的数据。需要通过专业的模型建立起数据质量的标准,以及数据解读的标准。在D-SMART中,我们就是以运维知识图谱的方式进行知识梳理,并以此来解析这些数据。

对于数据库系统来说,我们其可观测性能力可以通过四个方面的数据来获得。

图片

从日志告警、指标体系、全面跟踪、用户体验这四个方面,我们可以构建数据库系统的可观测性体系。前两个可能大家都比较熟悉,第三个跟踪在数据库里包含各种TRACE的能力,比如Oracle的oradebug,event事件跟踪、各种DUMP等。而用户体验有时候无法在数据库内部获得,需要从数据库之外的应用中去获取。

看上去很简单,不过在数据库中要获得这些能力也并不容易。现在的数据库系统都提供大量的指标,不过指标难以标记和排序,并且难以用于故障排除;而对日志进行排序和汇总,从而得出有意义的结论或与某个故障现象的关系可能具有挑战性;跟踪会产生大量不必要的数据,甚至会引发一些数据库的BUG,导致服务不可用;用户体验的获得也可能不够准确。这些问题都将导致可观测性能力大打折扣。

基于上述原因,我们的国产数据库在建设可观测性能力方面还比较滞后,一般是先搞定了数据库的基本功能,然后才考虑添加可观测性的接口。不幸的是,可观测性能力的基础是和数据库内核关系十分紧密的基础数据采集,通过外挂方式或者通过一些钩子向外输出数据库核心指标会引发一系列的性能与稳定性的问题。因此可观测性能力的构建必须从数据库核心做起才能够更为准确与有效。

目前我们的国产数据库也提供了一些可观测性的能力,只不过与Oracle比起来还有些不足。如果我们能够充分利用这些能力,还是可以获得不错的效果的。我们以openGauss为例,分析一下国产数据库提供的可观测性能力,以及我们利用这些能力能做些什么。

图片

在openGauss数据库中我们可以看到的可观测性接口十分丰富。总结起来有以下几个方面:

  • 基础运行状态:PG_STAT_*/DBE_PERF等
  • 等待事件:pg_stat_activity/pg_thread_wait_status/dbe_perf.wait_events
  • TOP_SQL:发现TOP SQL,慢SQL,进行SQL优化分析
  • ASP:GS_ASP/DBE_PERF.LOCAL_ACTIVE_SESSION:分析当前和历史会话的情况,定位微观问题,类似Oracle的ASH
  • WDR:一定时间内系统运行情况,用于分析性能问题,宏观方面的故障定位等,类似Oracle的AWR

利用这些可观测性接口我们可以构建起数据库的健康模型,通过健康模型展示数据库的健康状态。

图片

从而帮助我们随时了解数据库的运行情况与问题所在。利用等待事件接口,我们利用知识图谱与智能诊断算法,可以大体定位系统存在的主要问题。

图片

图片

也可以通过可观测性接口,对系统进行快速分析,发现系统中需要优化的点,并推荐优化工具给DBA。

图片

自动化巡检,安全审计,SQL优化等也就更不在话下了。说数据库只需要监控,不需要可观测性的说法已经过时了,随着业务系统复杂性的增加,数据库的复杂度也越来越大,因此数据库具有强大的可观测性能力十分重要。当然你也可以选择另外一条路,把复杂性交给应用,而让数据库变得十分简单。那么你可以使用APM去解决更为复杂而无序的应用,而不用考虑数据库的可观测性了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/869338.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ansible模块使用指南

作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 目录一.ansible模块概述1.ansible模块数量井喷式增长2.模块分类二.Ansible常用模块1.command模块1.1 command模块概述1.2 command模块示例2.shell模块2.1 shell模块概述2.2 shell模块示例3.script模块3.1 scr…

【Linux搭建教程】Linux 安装多个jdk版本并进行快速切换、以jdk8和jdk17为例【测试成功】

一、问题背景 由于项目需要,环境分别使用到jdk 8版本和jdk 17版本,故需要共存并配置快速切换。 二、具体实现 1、正常配置俩个jdk环境变量; 2、修改环境变量alias配置快速切换 vim /etc/profile #编辑以下内容信息alias java17=export JAVA_HOME=/usr/java/jdk-17.0…

【Redis源码】轻松看懂 rdb 文件

一、数据存储格式二、查看rdb文件 查看文件16进制编码 #od -A x -t x1c -v dump.rdbRDB文件格式如下: 0000000 52 45 44 49 53 30 30 30 38 fa 09 72 65 64 69 73R E D I S 0 0 0 8 372 \t r e d i s 0000010 2d 76 65 72…

【供应链管理系统】你了解供应链管理的五大系统(ERP、WMS、TMS、CRM和OMS)吗?

供应链管理听起来可能很复杂,但它其实是现代企业运营中不可或缺的一部分。 想象一下,从生产原材料到产品配送到客户手中,这整个过程是如何协调运作的。 每个环节需要无缝对接,确保产品的及时生产、运输和交付。 而要想高效地完成这些任务,企业就需要依赖一系列强大的系统工…

【C++安全】C++ 直接编写 Shellcode 和使用常量字符串

免责声明: 该公众号分享的安全工具和项目均来源于网络,仅供安全研究与学习之用,如用于其他用途,由使用者承担全部法律及连带责任,与工具作者和本公众号无关。一、基础知识1. PE 文件的基本结构和作用2. PE 文件加载流程3. 章节总结 二、编写 MessageBox Shellcode1. 开始2…

Easysearch Rollup 使用指南

背景 在现代数据驱动的世界中,时序数据的处理变得越来越重要。无论是监控系统、日志分析,还是物联网设备的数据收集,时序数据都占据了大量的存储空间。随着时间的推移,这些数据的存储成本和管理复杂度也在不断增加。 为了解决这一问题,Rollup 技术应运而生。本文将带你深入…

.NET 数据拷贝方案选择

应用中我们经常使用到数据的复制,在.NET中有多种方式可以实现复制数据或对象。选择哪种方式通、是浅拷贝还是深拷贝,取决于对象的复杂性、数据量以及具体需求场景。1. MemberwiseClone拷贝 浅拷贝 Object.MemberwiseClone 方法 (System) | Microsoft Learn,指针对对象执行非…

1.14 eclipse配置spring

今天完成了eclipse配置springboot eclipse本身并没有spring项目,需要在eclipse市场下载插件选择tool4安装安装完成等待eclipse加载,全部安装完成后即可创建spring项目

英语语法(标点符号:逗号和撇号)

结束句子的三种方法 认识逗号

深入浅出:Agent如何调用工具——从OpenAI Function Call到CrewAI框架

深入浅出:Agent如何调用工具——从OpenAI Function Call到CrewAI框架 嗨,大家好!作为一个喜欢折腾AI新技术的算法攻城狮,最近又学习了一些Agent工作流调用工具的文章,学完之后,我真的是“啊这”,一边感慨AI技术的强大,一边觉得自己打开了新世界的大门。于是,我决定写这…

在Ubantu中安装pycharm

1.下载pycharm linux版,我下载的是2022.3.3专业版 2. 更改host文件,输入: sudo gedit /etc/hosts在弹出的文件中的末尾加以下代码: 0.0.0.0 account.jetbrains.com3.激活pycharm: 将pycharm补丁jet-netfilter拷入ubantu中某一路径(注意是整个文件夹放进去,不要只放jar包…

docker-compose自动部署go项目全流程,本地到镜像仓库到服务器,踩坑笔记

声明:个人所学记录,有可以改进的地方希望不吝指教 Dockerfile # 使用golang官方镜像作为构建环境 FROM golang:1.23-alpine AS builder# 设置工作目录 WORKDIR /app# 设置环境变量镜像变量 ENV GO111MODULE=on ENV GOPROXY=https://goproxy.cn,direct# 复制go.mod 和 go.sum文…