长文|基于Zabbix的可观测性监控

news2024/11/25 5:38:51

01 可观测性与可观测性监控

02 基于ZABBIX的可观测性监控

03 可观测性监控的探索

——王小东,多年运维老兵,《nginx应用与运维实战》作者

在这里插入图片描述

本文整理自王小东在2022Zabbix峰会演讲分享。ppt可在公众号后台回复“ppt"。

1、可观测性与可观测性监控

我从事运维近20年从Zabbix 1.0一直使用到6.0 ,基于多年的使用和Zabbix不断的演进和发展,给大家分享下基于Zabbix可观测性监控。

可观测性是什么?可观测性监控如何实施?认知一个新事物是从了解到熟悉的过程,了解的过程,我认为就是可观测性。

图片

对于自然界里的物质,其可观测性的对象是物质,而对云原生世界里的物质,观测对象应该是微服务架构里的应用。

图片

真正的自然界物质,如何去观测?常见可观测性的三个维度,分别是Metrics、 Logs及Trace三大支柱。当打开一个页面,就与页面进行了交互,该页面是否展示出所预期的页面?这面临着一致性和安全问题。安全分为两个层面,1.探测它是否安全;2.安全技术加固。随着对应用的认知和技术的不断发展,可能还会存在着更多可观测性的层面和属性。在自然界,所有物质都随着时间而呈现不同状态。对于监控,每一个应用都随着时间而发展为不同状态。

从四维时空理论,我们对于可观性监控更要以时间为切面去观测应用的多维度,从一个时间点或一个时间区间去看可观测性所展示出来相关的各种监控指标。

分享下我对可观性监控的看法。

01客观性。客观性对所监控的应用要有低嵌入方法。同时需从第三方的客观角度去观测或采集数据。

02系统性。不能单一地看某个指标,可观测性早先有三个维度,后来扩展并不断增加,如若只看一个角度,整体性将被忽略,无法对每个方面都进行观测数据。

03关联性。观察每一个监控指标时,除了要具有独立性,同时还要建立所有监控指标之间的关联性和各不同应用外部的关联性来实现整体的观测。

04可预见性。任何事物和应用、观察都基于时间的动态行为。监控的目的是提早发现风险和避免发生故障。

可观测性监控的认知观分为以下2点。

01云原生世界可观测性的观测对象是微服务框架的应用可观测性的观测对象,可观测性是具备固有属性及能力。可观测性的内容可对照认知物质世界的物理、化学方法去不断探索。

图片

02可观测性监控的四个原则,客观性、系统性、关联性、预见性。

03可观测性监控,一定要建立以时间为视角的观察与分析,可观测性监控的能力取决于我们对可观测性的认知以及相关采取的技术手段。

2、基于Zabbix可观测性监控的实践

01 Zabbix和Prometheus实现有效的集成。

中国监控场景覆盖的现实情况在现有的架构中既有虚拟机又有云产品如K8s,监控工具通过Zabbix或者Prometheus某一个方面无法满足监控需求,因此需要配置包括监控的监控项、告警方法。每个工具都有独立的技术站,相应的维护成本是较高的。

每一个告警都要配相应的预值和告警人。方法如:Prometheus负责它专长的部分叫Exporter和Kubernetes。利用Zabbix的HTTP方式来查询多个Prometheus的接口,通过Zabbix现有的监控模板功能、预处理和自动发现功能,通过Prometheus API,用Prometheus把不同的监控项获取数据在Zabbix里自动创建监控项,包括预值创建,通过统一的应用关系标识,自动关联好监控的告警人,整体过程都是全自动的。

在查询时,以最低标准来查询,如:CPU使用率是80%或90%,告警的时候只需60%。60%时,数据已经获取到Zabbix服务器里,通过Zabbix自有的多分级的预值和设计能力,进行多级别、告警级别的管理。

优化了Prometheus的架构。Prometheus不集成在Kubernetes平台里,他是独立的,在实施的过程中利用的Prometheus的远程读写的功能进行多集群、多点Prometheus的部署,统一数据,通过influxDB进行数据汇总。通过只读的Prometheus向外进行数据展示,这便解决了展示问题。

Zabbix实现了统一的告警配置和统一告警人管理,当然整个架构也在Devops过程中持续监控的概念,监控不只是监控生产环境,测试过程的环境是全面监控的,通过整体的设计改造实现如上收益。

图片

02如何做Elk集成。监控场景中Zabbix目前在日志方面还是无法进行有效实现的,Elk对日志的收集和展示较好,但在原有的Elk架构里面,大家都是统一一个大集群,不便于维护。

基于敏捷和最小实用原则,可以拆分出多个小集群,小集群如何进行构建和数据转发?使用集中化的Logstash集群进行日志收集路由,通过比各个不同的Kubernetes集群或者各个主机里面日志,统一发送到Logstash集群,根据不同的标识或者应用名分散到不同的一个 Elk集群。

随着业务的增长,以最小的集群,构建Elk集群,对集群做扩容或更复杂的操作,再同步、增加多个ES集群便可。Elk解决方案有很多,但需要有更多的技术方法,只要在Logstash中启用HTTP插件,将不同的告警策略写到Redis中,当有日志过滤时,通过Logstash的filter进行脚本重新过滤,通过falsk搭建Webserver,将相应的数据进行梳理修正为Zabbix_sender的数据格式发送到Zabbix的服务器上,服务器同样利用监控模板和监控模板里配置的预处理及自动发现功能,监控项是自动实时创建的不需要手动创建,根据整个日志级别,进行跨级别告警,整合统一的告警人,不需要配置更复杂的告警人,直接发送至邮件或者钉钉通知,

通过以上整个设计,优化了Elk的部署结构,小成本以适用企业的运维发展,运用Zabbix告警模板,简化了运维方式无需手动配置,全自动化,完成了自动化的落地。

图片

03 TRACE与Skywalking集成。Skywalking基于最小构建原则。网上构建Skywalking集群需要很多设备和服务器,故此我们选择了最简单的Server端和ES数据库服务器。

集群存储的告警配置都是基于文件,配置很复杂且无法同步。Skywalking可以一次性配置完毕,包括告警预值、告警方式等。

Skywalking也有HTTP的输出的能力,可以输出到falsk,构建外部服务器,进行数据修正,将Skywalking的告警文件数据修正为Zabbix支持的方式,发送到Zabbix Server上,进行监控模板预处理,自动处理,自动发现,告警创建都是全自动的且不需要维护,优化了Skywalking的部署结构,按照企业当前最适用的最小构建原则,统一了告警人管理,实现了唯一的告警人和事件处理。

图片

对于任何监控系统,都有采集、存储、事件、动作和展示这五个模块,把这5个模块进行拆分,拆分成由多个工具进行相应的组合集成而实现。

01轻架构以最小适用原则来实现整体架构设计,不做过多浪费或超前设计,实现整个架构的使用。

02模块化,开源工具都是用相应的接口来实现的,如:各个不同阶段用不同工具在Zabbix进行集成。

03低嵌入。坚持第三方低嵌入原则,客观地去采集数据。如:Prometheus从Kubernetes集群里拿出来做独立部署。

04微服务化。运维工具要微服务化,通过API互相调用和实现,互相拆分模块处理,统一地基于Zabbix事件的处理能力和统一的告警输出。

05实现敏捷运维,模块化拆分。Docker环境没有使用复杂的Kubernetes集群,是纯Docker。当数据存储在本地或者相应的存储服务器上时,快速恢复或搭建只需Docker compose的文件快速秒集就可以实现。

06低成本。在运维的过程中,不只要实现运维工作,同时要坚持为企业降低成本,不要过多设计,遵循当前最实用的原则。

图片

监控架构关于可观测性功能和一致性上如何实现?基于业务监控的能力以业务为驱动,在服务器部署好之后,是否做到为用户可用。

如:当用户从登录到整个业务链路的过程是需要监控的。利用Zabbix中Agent支持脚本的功能,编写Python脚本。

当任何异常都发送到Zabbix,实现业务一致性和端到端的检测,并非只监控CPU或某一资源目标。基于Zabbix统一事件的处理能力,可以进行前置统一收集、统一告警、告警抑制和关联降噪。

无需花费过大的精力做后端数据分析。可利用Zabbix告警的脚本定义功能,只需在Redis中不断记录不同应用的关系,直接读取,如与cmdb做关联,记录相应关系,编写Python脚本便可解决。基于此,只需不断优化Zabbix提供的功能,,就可以实现告警抑制和关联降噪的功能。

在这里插入图片描述

3、可观测性监控的探索

可观性监控,在认知中是要以时间为视角去观测查看的。Zabbix提供了非常好的功能:基于问题管理页面实现同一时间区间内多维度的统一查看。

页面中的所有应用、事件会记录到Zabbix中,可用时间点或时间区间来查看某应用在这个时间点或时间段的多视角多维度所发生的问题,如:Metric、Logs、Trace方面的告警问题。

智能监控的概念是用数据做存储和统一收集。可以做趋势预测,按时间维度来做,如:CPU使用率,根据时间维度不断的进行模拟曲线,实现下一个时间点可能产生趋势的预测,做未来预测。

按照时间点所形成的数据是可以用函数所表示的,引入毕达格拉斯:数学支配着宇宙,y=kx+b的数字可以铺满整个宇宙,存储原数据时,只存一个公式就不需要有大数据的存储了,科学可能需要我们进一步探索是否真正要存原数据。是否只存一个函数就可以。

图片

微服架构的应用不断演进,会变得越发庞大,可能会超越我们人类所处理的能力,黑客帝国这个电影就已经拟人化的演示应用治理的场景,应用的压力测试和混沌工程。

通过人工智能,构建可控的治理环境,进行不断的自我破坏和实时的观测各种可观测性数据,进行反馈实现应用迭代,我觉得是应用可观测性给我们带来的现实的意义。如上就是我所分享的内容,谢谢!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

拷贝构造函数

拷贝构造函数 以值传递的方式调用函数时,如果实参为对象,会调用拷贝构造函数。函数以值的方式返回对象时,可能会调用拷贝构造函数(VS会调用,Linux不会,g编译器做了优化) 类似于构造函数和析构函…

Python控制流程盘点及高级用法、神秘技巧大揭秘!

在这篇文章中我们将全面深入地介绍 Python 的控制流程,包括条件语句、循环结构和异常处理等关键部分,尤其会将列表解析、生成器、装饰器等高级用法一网打尽。此外,我还将分享一些独特的见解和研究发现,希望能给你带来新的启发。文…

让你不再疑惑图片翻译怎么弄

你是否曾遇到过在阅读外语文章或资料时,遇到了图片上的文字无法翻译的困扰?别担心,如果你还不知道如何翻译图片上的文字的话,接下来我将教你三种图片翻译的实用小技巧,一起来看看吧。 翻译图片的实用方法一&#xff1a…

Python语法基础01(列表,元组,字典)

Python基础语法 变量的命名与使用 变量名只能包含字母、数字和下划线,只能以字母和下划线为开头不能包含空格不能使用python保留字 列表,元组,字典 列表 定义列表(元素之间可以没有任何关系):[] 例如 fruits["apple&qu…

oracle如何才能卸载干净

windows系统下oracle如何才能卸载干净 1.关闭oracle所有的服务。2.删除注册表中相关信息3.删除注册表中相关Oracle安装信息4.删除注册的oracle事件日志5.删除环境变量path中关于oracle的内容6.重新启动操作系统7.删除Oracle_Home下的所有数据8.删除oracle安装目录。9.删除开始菜…

灰度图像逻辑运算之逻辑或

目录 note code test note out max(x1,x2) code void img_logic_or_fun(uchar& in1, uchar& in2, uchar& out) {out in1 > in2 ? in1 : in2; } void img_logic_or(Mat& src1, Mat& src2, Mat& res) {if (src1.size() ! src2.size()) {retur…

基于html+css的图展示128

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

【微信支付】微信v3支付案例,SpringBoot集成IJPay实现微信v3支付

前言 这篇文章主要实现一下通过IJPay来实现微信v3支付案例&#xff0c;本篇文章使用的是JSAPI即小程序支付 IJPay码云仓库&#xff1a;https://gitee.com/javen205/IJPay/tree/dev IJPay官方文档&#xff1a;https://javen205.gitee.io/ijpay/ 准备工作 导入依赖 <depen…

Python学习48:简易英汉字典

类型&#xff1a;字典‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬ 描述‪‬‪‬…

SpringBoot+Mybatis 实现长字符串保存和更新

数据库字段&#xff0c;写成长字符 插入xml&#xff0c;注意两个点&#xff0c;否则会报错 1、长字符串字段不能写if判断&#xff1a;<if test"name ! null and name ! "> 2、插入的时候做字符串转码&#xff1a;<![CDATA[#{fileCode}]]> <insert …

验证FeignClient类型:FeignClient集成OkHttp

验证FeignClient类型 验证FeignClient类型 验证FeignClient类型 在SynchronousMethodHandler类中查看client类型

【自监督学习1】SimCLR论文阅读

文章目录 一、摘要二、引言三、方法3.1 主要框架3.2 训练一个大的batchsize 四、数据增强4.1 实验一 数据增强的组合对学习好的特征表达非常重要4.2 对比学习需要更多的数据增强 五、一些实验证明5.1 大模型更有利于无监督对比学习5.2 非线性层的预测头增加了特征表示5.3可调节…

字符设备实现内部驱动原理及分步注册流程

字符设备实现内部驱动原理&#xff1a; 应用层&#xff1a;open函数回调到驱动中open操作方法的路线&#xff1a; open&#xff08;&#xff09;--->sys_open()--->struct inode结构体--->struct cdev结构体--->struct file_operations结构体--->mycdev_open()…

RVEA多目标优化

A Reference Vector Guided Evolutionary Algorithm for Many-objective Optimization 目标函数预备知识参考向量引导选择更新参考向量流程整体框架参考向量引导选择参考向量自适应 for Many-objective Optimization) 目标函数 min ⁡ X f ( X ) ( f 1 ( X ) , f 2 ( X ) , . …

游泳耳机买什么牌子好一点?推荐四款出色的游泳耳机

游泳和跑步类似&#xff0c;短距离冲刺时&#xff0c;大脑没什么想法&#xff0c;而中长距离的有氧运动时&#xff0c;肉体是疲惫的&#xff0c;大脑是异常清晰的&#xff0c;时间却是格外难熬的。如何打发时间&#xff0c;让游泳锻炼变得不无聊&#xff0c;这是我从孩子时期就…

从零开始 Spring Boot 41:事件

从零开始 Spring Boot 41&#xff1a;事件 图源&#xff1a;简书 (jianshu.com) Spring 实现了一个简单、实用的事件框架&#xff0c;利用它我们可以在多个组件之间进行松耦合式的通信。 简单示例 让我们从一个简单的示例开始&#xff1a; public record Email(String addr…

sqli-labs靶场通关(21-30)

Less-21 还是adminadmin登录 可以看出uname是base64加密过的&#xff0c;解码得到&#xff1a;admin。 那么本关和less-20相似&#xff0c;只是cookie的uname值经过base64编码了。 抓包看一下也是如此 那么我们只需要上传paylaod的时候base64加密一下就可以了 base64加密工…

多线程-线程的创建的方式3、4:实现Callable与线程池

JDK5.0新增线程创建方式 简要概况&#xff1a; 1. 创建多线程的方式三&#xff1a;实现Callable&#xff08;jdk5.0新增的&#xff09;与之前的方式的对比&#xff1a;与Runnable方式的对比的好处 > call()可以有返回值&#xff0c;更灵活 > call()可以使用throws的方式…

模板模式(十六)

相信自己&#xff0c;请一定要相信自己 上一章简单介绍了代理模式(十五), 如果没有看过, 请观看上一章 一. 模板模式 引用 菜鸟教程里面的 模板模式介绍: https://www.runoob.com/design-pattern/template-pattern.html 在模板模式&#xff08;Template Pattern&#xff09;…

简要介绍 | 三维点云配准:理论、方法与挑战

三维点云配准&#xff1a;理论、方法与挑战 注&#xff1a;”简要介绍“系列仅从概念上对某一领域进行非常简要的介绍&#xff0c;不适合用于深入和详细的了解 三维点云配准 是计算机视觉和机器人领域的重要课题&#xff0c;涉及从不同视角或时间点采集的三维点云数据之间寻找最…