1 个不稳定版本
0.1.0 | 2024年6月23日 |
---|
#3 在 #zabbix 中
43KB
356 行
简介
由于环境本身的复杂性,观察和监控复杂环境可能是一项艰巨的任务。随着环境复杂性的增加,设置具有影响力的代表性可观察性配置变得更加具有挑战性。管理可观察性基础设施的关键在于理解和控制其复杂性,而不仅仅是可扩展性。虽然可扩展性很重要,但它比复杂性更易于管理,是可观察性基础设施管理的一个更可控的方面。因此,可观察性基础设施的成功在很大程度上取决于其复杂性管理得如何。但成功管理复杂性的关键以及将可扩展性作为次要目标是什么?我们必须牢记一些将帮助我们克服这些障碍的方面
讲故事。
不建议仅根据原始遥测数据评估受控环境。相反,必须整合各种遥测项以创建全面的叙述。这个构建的叙述可以作为进一步分析的基础,这是解决可观察性复杂性挑战的第一步。
聚合
在监控受控环境时,避免依赖于单个数据点或观察结果是很重要的。相反,最好使用各种方法收集和分析一段时间内的数据。这些努力将提供对过程的更全面理解,以及对数据的更深入洞察,而不仅仅是观察随机的遥测值。
分离和依赖管理
随着受控环境的复杂性增加,会产生更多的数据和警报。这种复杂性和规模有时会使可观察性平台因生成的海量工件而不知所措。为了处理这种大量数据,关键是在处理特定工件的不同平台组件之间创建良好的隔离区。将这些组件视为具有明确和精确的输入和输出的黑盒是至关重要的。这样做将使您能够通过控制单个组件的性能和规模来有效地应对增加的复杂性和规模。
解决方案。
不同的供应商提出了许多解决方案来应对前面提到的问题。其中一些解决方案已被证明在解决这些问题方面是有效的。然而,根据我在监控和可观察性架构和实践方面的经验,在声称解决了问题之前,可观察性架构师或集成商必须克服一些特定的挑战。
平坦化指标。
不同的收集点产生不同格式的指标。可观测性平台将它们统一。
实时提供指标。
可观测性平台应允许轻松快速地访问实时公认的指标。
创建黑盒。
可观测性平台应由可观测性组件的层次结构组成。每个组件处理特定的遥测项目和故事,产生预定的衍生项目、警报和SLA。
管理遥测、警报和SLA的全局可访问缓存。
分布式或我更愿意使用“联邦”可观测性平台,需要透明访问组件联邦产生的所有工件。
显示给我
我选择了几个现成的软件解决方案,以提供联邦可观测性平台的证明概念。
-
Zabbix 是一个经过实战考验的开源可观测性平台,可以处理复杂的数据收集、警报生成和升级。对于我的原型来说,它提供了一种简单而有效的方式来捕获遥测、警报和其他生成的工件。
-
Zenoh 是一个经过充分测试的P2P网络解决方案,具有简单有效的API和现有的插件,支持将数据“存储和传递”到多个订阅者。在所有现有的pub/sub解决方案中,我选择了一个特定的P2P解决方案,这将有助于创建复杂可观测性解决方案。
为了使这些组件“协同工作”,我创建了两个“缺失”的软件组件。
-
zbus 是一个命令行工具,它为Zabbix和Zenoh之间提供所有必要的接口。
-
zabbix_zbus_module 是一个可加载的模块,您可以在Zabbix Agent中加载它,并通过该代理查询存储在Zenoh P2P网络中的数据。
如何启动Zenoh服务器?
zenohd --adminspace-permissions=rw --cfg='plugins/storage_manager/storages/demo:{key_expr:"zbus/**",volume:"memory"}'
将遥测项目存储在Zenoh网络中。
zbus put --key pi --value 3.1401
此命令在Zenoh p2p网络上存储一个名为“pi”的单个键,值为3.1401。如果我们的Zabbix代理已启动并且zbus可加载模块已加载,我们可以通过Zabbix查询这些数据。
zabbix_get -s 192.X.X.X -k "zbus.get_float[zbus/metric/v1/local/home.lan/pi]"
该模块支持三个目标:zbus.get_int、zbus.get_str和zbus.get_float,分别获取整数、字符串和浮点值。请求的参数是指标键。指标键由以下组成:
zbus "/" 指标类型 "/" zbus交换的版本 "/" Zabbix实例名称 "/" 主机名 "/" 键
其中,指标类型可以是“metric”、“event”、“log”。
使用CLI从Zenoh网络检索遥测项目。
zbus get --key pi
输出将是
{"key":"zbus/metric/v1/local/home.lan/pi","platform":"local","skey":"pi","src":"home.lan","ts":1702077425285763000,"value":3.1401}
您可以使用该命令向Zenoh总线发送完整的键查询
zbus query query-raw --key "zbus/metric/v1/local/home.lan/pi"
如何从Zabbix发送数据到Zenoh总线?
目前,您必须使用zbus工具从Zabbix历史JSON文件中导出数据。但在发送导出之前,您必须更新Zenoh上的Zabbix元数据。
zbus api --endpoint=http://192.X.X.X/zabbix metadata --token=XXXXXXXXXXXXXXXXX --sync-zbus
您可以通过Zabbix UI生成API访问令牌,或从命令的stdout中获取它
zbus api login --login loginname --password password
在同步元数据后,您可以将Zabbix遥测数据导出到总线
zbus export history --path ./example/data --search "history*"
您传递给--path的路径必须包含历史JSON文件。您可以检查导出的结果
zabbix_get -s 192.X.X.X -k "zbus.get_str[zbus/metric/v1/local/Zabbix server/vfs.fs.dependent/\boot/data]"
作为使用JSON文件的替代方案,您可以从实时连接器启动,并配置Zabbix通过该连接器发送历史数据
zbus -d export stream --history --bus --threads 4 --listen http://127.0.0.1:10055
您还可以从Prometheus导出器抓取数据并将其导入遥测总线
zbus export prometheus --in-loop --every 15 --exporter http://127.0.0.1:9100/metrics
如何将SLA数据从Zabbix服务器发送到Zenoh总线?
访问计算出的“服务级别指标”是可观测性平台的关键特性之一。在联邦环境中,多个服务器可以计算它们所控制服务的SLI。为了获得对服务可用性的正确视角和高级视图,我们现在可以在低级SLI作为计算基础的同时计算复合SLI。
此命令将当前计算的SLI导出到zbus。
zbus export sla --endpoint=http://192.X.X.X/zabbix --token=XXXXXXXXXXXXXXXXX
存储在总线上的SLI可查询。
zbus query query-raw --key "zbus/sli/v1/local/SLA 1/SLA test service" --all
结果如下
{"downtime":853,"name":"SLA 1","service":"SLA test service","sli":8.867521367521368,"uptime":83}
您还可以通过使用Zabbix Agent的zbus.get_raw键来获取JSON输出,并在Zabbix中根据需要处理JSON键
zabbix_get -s 192.X.X.X -k "zbus.get_raw[zbus/sli/v1/local/SLA 1/SLA test service]"
输出将相同
{"downtime":853,"name":"SLA 1","service":"SLA test service","sli":8.867521367521368,"uptime":83}
如何使用zbus工具执行ZB脚本脚本
子命令"script"将启动ZB脚本解释器并将脚本传递给执行。此子命令的键是
- --stdin - 从标准输入获取脚本。
- --file - 从本地文件获取脚本。期望文件的全路径。
- --uri - 从HTTP/HTTPS服务器获取脚本。
- --eval - 通过CLI传递脚本片段
您可以在""--""之后传递参数到ZB脚本引擎,如下所示
zbus script --eval "print(ARGV)" -- 1 2 3
参数将被传递到ZB脚本引擎的全局变量ARGV中。
依赖关系
~25–38MB
~594K SLoC