HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

下一届 HighLoad++ 会议将于 6 年 7 月 2020 日至 XNUMX 日在圣彼得堡举行 详情和门票 链接。 HighLoad++ 莫斯科 2018。“莫斯科”大厅。 9 月 15 日 00:XNUMX。 论文和 介绍.

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

* 监控 - 在线和分析。
* Zabbix平台的基本限制。
* 扩展分析存储的解决方案。
* Zabbix服务器的优化。
* 界面优化。
* 具有在超过 40k NVPS 负载下操作系统的经验。
* 简要结论。

米哈伊尔·马库洛夫(以下简称“MM”): - 大家好!

马克西姆·切尔涅佐夫(以下简称“MCH”): - 下午好!

毫米: – 让我介绍一下马克西姆。 马克斯是一位才华横溢的工程师,是我所认识的最好的网络专家。 Maxim 涉足网络和服务及其开发和运营。

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

妇幼保健院: – 我想告诉你关于米哈伊尔的事。 Mikhail 是一名 C 开发人员。 他为我们公司编写了多个高负载流量处理解决方案。 我们在乌拉尔地区、车里雅宾斯克硬汉之城、Intersvyaz 公司生活和工作。 我们公司是一家为 16 个城市的 XNUMX 万人提供互联网和有线电视服务的提供商。

毫米: – 值得一提的是,Intersvyaz 不仅仅是一家提供商,它还是一家 IT 公司。 我们的大部分解决方案都是由我们的 IT 部门制定的。

答: 从处理流量的服务器到呼叫中心和移动应用程序。 IT 部门现在约有 80 名员工,他们的能力非常非常多样化。

关于 Zabbix 及其架构

妇幼保健院: – 现在我将尝试创下个人记录,在一分钟内说出Zabbix是什么(以下简称“Zabbix”)。

Zabbix将自己定位为企业级开箱即用的监控系统。 它具有许多让生活变得更轻松的功能:高级升级规则、用于集成的 API、主机和指标的分组和自动检测。 Zabbix 有所谓的扩展工具——代理。 Zabbix是一个开源系统。

简要介绍一下建筑。 我们可以说它由三个部分组成:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

  • 服务器。 用C写成。 线程之间的信息处理和传输相当复杂。 所有处理都在其中进行:从接收到保存到数据库。
  • 所有数据都存储在数据库中。 Zabbix 支持 MySQL、PostreSQL 和 Oracle。
  • Web 界面是用 PHP 编写的。 在大多数系统上,它都配备了 Apache 服务器,但与 nginx + php 结合使用会更有效。

今天我们想讲述一个与 Zabbix 有关的我们公司生活中的故事......

Intersvyaz 公司的故事。 我们拥有什么以及我们需要什么?

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS
五六个月前。 一天下班后...

妇幼保健院: - 米莎,你好! 我很高兴能找到你——正在交谈。 我们再次遇到了监控问题。 在一次重大事故期间,一切都很慢,并且没有有关网络状态的信息。 不幸的是,这并不是第一次发生这种情况。 我需要你的帮助。 让我们的监控在任何情况下都能发挥作用!

毫米: - 但我们首先要同步。 我已经好几年没看过那里了。 据我记得,大约 8 年前我们放弃了 Nagios,转而使用 Zabbix。 现在我们似乎拥有 6 台强大的服务器和大约十几个代理。 我混淆了什么吗?

妇幼保健院: - 几乎。 15台服务器,其中一些是虚拟机。 最重要的是它并没有在我们最需要的时候拯救我们。 就像一场意外——服务器速度变慢,你看不到任何东西。 我们尝试优化配置,但这并没有提供最佳的性能提升。

毫米: - 天气晴朗。 您是否查看过某些内容,是否已经从诊断中挖掘出某些内容?

妇幼保健院: – 您首先要处理的是数据库。 MySQL 已经在不断加载,存储新的指标,当 Zabbix 开始生成一堆事件时,数据库会进入超速运行几个小时。 我已经告诉过您有关优化配置的信息,但实际上今年他们更新了硬件:服务器拥有超过 XNUMX GB 的内存和 SSD RAID 磁盘阵列 - 线性增长是没有意义的。 我们做什么?

毫米: - 天气晴朗。 一般来说,MySQL是一个LTP数据库。 显然,它不再适合存储我们规模的指标档案。 让我们弄清楚一下。

妇幼保健院: - 让我们!

黑客马拉松的结果是 Zabbix 和 Clickhouse 的集成

一段时间后,我们收到了有趣的数据:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

我们数据库中的大部分空间被指标存档占用,不到 1% 用于配置、模板和设置。 那时我们基于Clickhouse的大数据解决方案已经运营一年多了。 运动的方向对我们来说是显而易见的。 在我们的春季黑客马拉松上,我编写了 Zabbix 与 Clickhouse 的服务器和前端集成。 当时Zabbix已经支持ElasticSearch,我们决定对它们进行比较。

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

Clickhouse 和 Elasticsearch 的比较

毫米: – 为了进行比较,我们生成了与 Zabbix 服务器提供的相同的负载,并观察了系统的行为方式。 我们使用 CURL 批量写入数据,每行 1000 行。 我们事先假设 Clickhouse 对于 Zabbix 的负载配置文件会更有效。 结果甚至超出了我们的预期:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

在相同的测试条件下,Clickhouse 写入的数据是原来的三倍。 同时,两个系统在读取数据时消耗的效率都非常高(少量资源)。 但是Elastics在录制时需要大量的处理器:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

总的来说,Clickhouse 在处理器消耗和速度方面明显优于 Elastix。 同时,由于数据压缩,Clickhouse 在硬盘上的使用量减少了 11 倍,执行的磁盘操作也减少了约 30 倍:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

妇幼保健院: – 是的,Clickhouse 与磁盘子系统的配合非常高效。 您可以使用巨大的 SATA 磁盘作为数据库,并获得每秒数十万行的写入速度。 开箱即用的系统支持分片、复制,并且非常易于配置。 我们对它全年的使用非常满意。

为了优化资源,您可以将 Clickhouse 安装在现有主数据库旁边,从而节省大量 CPU 时间和磁盘操作。 我们已将指标存档移至现有的 Clickhouse 集群:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

我们极大地减轻了主MySQL数据库的负担,以至于我们可以将其与Zabbix服务器合并在一台机器上,并放弃MySQL的专用服务器。

Zabbix 中的轮询是如何工作的?

4几个月前

毫米: – 好吧,我们可以忘记基地的问题吗?

妇幼保健院: - 这是肯定的! 我们需要解决的另一个问题是数据收集速度慢。 现在,我们所有 15 台代理服务器都因 SNMP 和轮询进程而超载。 而且除了安装新的、新的服务器之外,没有办法。

毫米: - 伟大的。 但首先,告诉我们轮询在 Zabbix 中是如何工作的?

妇幼保健院: – 简而言之,指标有 20 种类型和十几种获取方法。 Zabbix 可以通过“请求-响应”模式收集数据,也可以通过“Trapper Interface”等待新数据。

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

值得注意的是,在原来的Zabbix中这个方法(Trapper)是最快的。

有代理服务器用于负载分配:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

代理可以执行与 Zabbix 服务器相同的收集功能,从其接收任务并通过 Trapper 接口发送收集到的指标。 这是官方推荐的负载分配方式。 代理对于监控通过 NAT 或慢速通道运行的远程基础设施也很有用:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

毫米: – 建筑的一切都很清楚。 我们需要查看来源...

几天后

nmap fping 如何获胜的故事

毫米: “我想我挖出了一些东西。”

妇幼保健院: - 告诉我!

毫米: – 我发现在检查可用性时,Zabbix 一次最多检查 128 个主机。 我尝试将这个数字增加到 500,并删除 ping (ping) 中的数据包间间隔 - 这使性能翻倍。 但我想要更大的数字。

妇幼保健院: – 在我的实践中,我有时必须检查数千台主机的可用性,而我从未见过比 nmap 更快的东西。 我确信这是最快的方法。 我们来试试吧! 我们需要显着增加每次迭代的主机数量。

毫米: ——查五百多? 600?

妇幼保健院: - 至少有几千。

毫米: - 好的。 我最想说的是,我发现Zabbix中的大多数轮询都是同步完成的。 我们肯定需要将其更改为异步模式。 然后,我们可以显着增加轮询器收集的指标数量,特别是如果我们增加每次迭代的指标数量。

妇幼保健院: - 伟大的! 什么时候?

毫米: – 和往常一样,昨天。

妇幼保健院: – 我们比较了 fping 和 nmap 的两个版本:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

在大量主机上,nmap 的效率预计最高可达五倍。 由于 nmap 仅检查可用性和响应时间,因此我们将损失的计算转移到触发器中,并显着缩短了可用性检查间隔。 我们发现每次迭代 nmap 的最佳主机数量约为 4 个。 Nmap 使我们能够将可用性检查的 CPU 成本降低三倍,并将间隔从 120 秒减少到 10 秒。

轮询优化

毫米: “然后我们开始做民意调查。 我们主要对 SNMP 检测和代理感兴趣。 在Zabbix中,轮询是同步完成的,并采取了特殊措施来提高系统的效率。 在同步模式下,主机不可用会导致轮询性能显着下降。 有一个完整的状态系统,有特殊的进程 - 所谓的无法访问的轮询器,仅适用于无法访问的主机:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

这是一个评论,展示了状态矩阵,以及系统保持有效所需的所有转换系统的复杂性。 此外,同步轮询本身相当慢:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

这就是为什么数十个代理上的数千个轮询器流无法为我们收集所需的数据量的原因。 异步实现不仅解决了线程数量的问题,而且还显着简化了不可用主机的状态系统,因为对于一次轮询迭代中检查的任何数量,最大等待时间为 1 个超时:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

此外,我们还修改和改进了 SNMP 请求的轮询系统。 事实上,大多数人无法同时响应多个 SNMP 请求。 因此,我们采用了混合模式,同一主机的 SNMP 轮询是异步完成的:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

这是针对整个主机包完成的。 这种模式最终并不比完全异步的模式慢,因为轮询 1 个 SNMP 值仍然比 XNUMX 个超时快得多。

我们的实验表明,使用 SNMP 轮询时,一次迭代中的最佳请求数约为 8 个。 总的来说,转换到异步模式使我们能够将轮询性能加快 200 倍、数百倍。

妇幼保健院: – 由此产生的轮询优化表明,我们不仅可以摆脱所有代理,还可以减少许多检查的间隔,并且不再需要代理作为分担负载的方式。

大约三个月前

改变架构——增加负载!

毫米: - 好吧,麦克斯,是时候提高工作效率了吗? 我需要一个强大的服务器和一个优秀的工程师。

妇幼保健院: - 好吧,我们计划一下吧。 现在是摆脱每秒 5 个指标的死点的时候了。

升级后的早上

妇幼保健院: - Misha,我们更新了自己,但到了早上我们又回滚了......猜猜我们达到了多少速度?

毫米: – 最多 20。

妇幼保健院: - 是的,25岁! 不幸的是,我们仍处于起点。

毫米: - 为什么? 您进行过任何诊断吗?

妇幼保健院: - 是的,当然! 例如,这是一个有趣的上衣:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

毫米: - 让我们来看吧。 我看到我们已经尝试了大量的轮询线程:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

但与此同时,他们甚至无法回收系统的一半:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

而且整体性能相当小,每秒大约 4 个指标:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

还有别的事吗?

妇幼保健院: – 是的,其中一位轮询者的 strace:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

毫米: – 在这里你可以清楚地看到轮询过程正在等待“信号量”。 这些是锁:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

妇幼保健院: - 不清楚。

毫米: – 看,这类似于一组线程尝试使用一次只有一个线程可以使用的资源的情况。 然后他们所能做的就是随着时间的推移共享这个资源:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

使用此类资源的总性能受到一个核心速度的限制:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

有两种方法可以解决这个问题。

升级机器的硬件,切换到更快的核心:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

或者改变架构,同时改变负载:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

妇幼保健院: – 顺便说一句,在测试机器上我们将使用比战斗机器更少的核心,但它们的每个核心频率快 1,5 倍!

毫米: - 清除? 您需要查看服务器代码。

Zabbix服务器中的数据路径

妇幼保健院: – 为了弄清楚这一点,我们开始分析数据在Zabbix服务器内部是如何传输的:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

很酷的图片,对吧? 让我们一步一步地看一下,或多或少地清楚一点。 有负责收集数据的线程和服务:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

它们通过套接字将收集到的指标传输到预处理器管理器,并保存在队列中:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

“预处理器管理器”将数据传输给其工作人员,工作人员执行预处理指令并通过同一套接字将它们返回:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

之后,预处理器管理器将它们存储在历史缓存中:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

从那里,它们被历史接收器获取,历史接收器执行相当多的功能:例如,计算触发器、填充值缓存,以及最重要的是,在历史存储中保存指标。 总的来说,这个过程很复杂,也很混乱。

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

毫米: – 我们看到的第一件事是大多数线程争夺所谓的“配置缓存”(存储所有服务器配置的内存区域)。 负责收集数据的线程尤其会发生大量阻塞:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

...因为配置不仅存储指标及其参数,还存储轮询器从中获取有关下一步操作的信息的队列。 当有很多轮询器并且其中一个阻塞配置时,其他轮询器等待请求:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

轮询者不应发生冲突

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

因此,我们做的第一件事就是将队列分为 4 个部分,并允许轮询器在安全条件下同时阻塞这些队列:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

这消除了对配置缓存的竞争,并且轮询器的速度显着提高。 但后来我们遇到了这样一个事实:预处理器管理器开始积累作业队列:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

预处理器管理器必须能够确定优先级

这种情况发生在他表现不佳的情况下。 然后他所能做的就是累积来自数据收集进程的请求并将其缓冲区相加,直到耗尽所有内存并崩溃:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

为了解决这个问题,我们添加了第二个专门用于工作人员的套接字:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

因此,预处理器管理器有机会确定其工作的优先级,如果缓冲区增长,则任务是减慢删除速度,让工作人员有机会占用此缓冲区:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

然后我们发现,速度放缓的原因之一是工人本身,因为他们正在争夺对他们的工作完全不重要的资源。 我们将此问题记录为错误修复,并且已在新版本的 Zabbix 中得到解决:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

我们增加套接字数量 - 我们得到结果

此外,预处理器管理器本身也成为了一个瓶颈,因为它是一个线程。 它依赖于核心速度,最高速度约为每秒 70 个指标:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

因此,我们制作了四个,具有四组插座的工人:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

这使我们能够将速度提高到大约 130 个指标:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

增长的非线性可以通过历史缓存竞争的出现来解释。 4 名预处理器管理者和历史沉降者争夺它。 此时,我们在测试机器上每秒接收大约 130 万个指标,大约 95% 的处理器使用它:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

大约2,5个月前

来自 snmp 社区的拒绝使 NVP 增加了一倍半

毫米: – 麦克斯,我需要一辆新的测试车! 我们不再适应当前的情况。

妇幼保健院: - 你现在有什么?

毫米: – 现在 – 130k NVP 和现成的处理器。

妇幼保健院: - 哇! 凉爽的! 等等,我有两个问题。 根据我的计算,我们每秒需要大约 15-20 个指标。 为什么我们需要更多?

毫米: “我想完成工作。” 我想看看我们能从这个系统中榨取多少。

妇幼保健院: - 但 ...

毫米: “但这对商业来说毫无用处。”

妇幼保健院: - 天气晴朗。 第二个问题:我们可以在没有开发人员帮助的情况下独立支持我们现在拥有的东西吗?

毫米: - 我不认为。 改变配置缓存的工作方式是一个问题。 它会影响大多数线程的变化并且相当难以维护。 最有可能的是,维护它会非常困难。

妇幼保健院: “那么我们需要某种替代方案。”

毫米: - 有这样一个选项。 我们可以切换到快速核心,同时放弃新的锁定系统。 我们仍然会得到 60-80 个指标的性能。 同时,我们可以留下所有其余的代码。 Clickhouse 和异步轮询将起作用。 而且它很容易维护。

妇幼保健院: - 惊人的! 我建议我们停在这里。

优化服务器端后,我们终于能够将新代码投入生产。 我们放弃了一些更改,转而改用具有快速内核的机器并最大限度地减少代码更改的数量。 我们还简化了配置并尽可能消除了数据项中的宏,因为它们引入了额外的锁定。

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

例如,在我们的案例中,放弃经常在文档和示例中找到的 snmp-community 宏,可以将 NVP 进一步加速约 1,5 倍。

经过两天的制作

删除事件历史弹出窗口

妇幼保健院: – Misha,我们已经使用该系统两天了,一切正常。 但只有当一切正常时! 我们计划对相当大一部分网络进行传输,然后我们再次用手检查哪些内容已上线,哪些内容未上线。

毫米: - 不可能! 我们检查了一切 10 遍。 服务器甚至可以立即处理完全的网络不可用。

妇幼保健院: - 是的,我了解一切:服务器、数据库、top、austat、日志 - 一切都很快...但是我们查看 Web 界面,服务器上“架子上”有一个处理器,如下所示:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

毫米: - 天气晴朗。 我们来看看网络吧。 我们发现,在存在大量活动事件的情况下,大多数活动小部件开始运行非常缓慢:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

其原因是为列表中的每个项目生成事件历史记录弹出窗口。 因此,我们放弃了这些窗口的生成(在代码中注释掉了5行),这解决了我们的问题。

小部件的加载时间,即使在完全不可用的情况下,也从几分钟缩短到了我们可以接受的10-15秒,并且仍然可以通过点击时间来查看历史记录:

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

下班以后。 2个月前

妇幼保健院: - 米莎,你要走了吗? 我们得谈谈。

毫米: - 我不是故意的。 Zabbix 又出事了?

妇幼保健院: - 不,放松! 我只想说:一切顺利,谢谢! 我有一瓶啤酒。

Zabbix高效

Zabbix是一个相当通用且丰富的系统和功能。 它可以立即用于小型安装,但随着需求的增长,必须对其进行优化。 要存储大量指标档案,请使用合适的存储:

  • 您可以使用与 Elasticsearch 集成或将历史记录上传到文本文件的形式的内置工具(从版本 XNUMX 开始提供);
  • 您可以利用我们的经验以及与 Clickhouse 的集成。

为了显着提高收集指标的速度,可以使用异步方法收集它们,并通过 trapper 接口传输到 Zabbix 服务器; 或者您可以使用补丁使 Zabbix 轮询器异步。

Zabbix是用C语言编写的,效率相当高。 解决多个架构瓶颈可以让您进一步提高其性能,根据我们的经验,可以在单处理器机器上获得超过 100 万个指标。

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

相同的 Zabbix 补丁

毫米: – 我想补充几点。 当前的整个报告、所有测试、数字均针对我们使用的配置给出。 我们现在每秒从中获取大约 20 个指标。 如果您想了解这是否适合您,可以进行比较。 今天讨论的内容以补丁的形式发布在 GitHub 上: github.com/miklert/zabbix

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

该补丁包括:

  • 与 Clickhouse 完全集成(Zabbix 服务器和前端);
  • 解决预处理器管理器的问题;
  • 异步轮询。

该补丁与所有版本 4 兼容,包括 lts。 最有可能的是,只需进行最小的更改,它就可以在 3.4 版本上运行。

感谢您的关注。

问题

观众提问(以下简称——A):——下午好! 请告诉我,您是否有计划与 Zabbix 团队或他们与您进行深入互动,以便这不是补丁,而是 Zabbix 的正常行为?

毫米: – 是的,我们肯定会做出一些改变。 有些事情会发生,有些事情会保留在补丁中。

答: – 非常感谢您的精彩报告! 请告诉我,应用补丁后,Zabbix的支持仍然存在,如何继续更新到更高版本? 补丁到4.2、5.0后可以更新Zabbix吗?

毫米: – 关于支持我无话可说。 如果我是Zabbix技术支持,我可能会说不,因为这是别人的代码。 至于 4.2 代码库,我们的立场是:“我们将与时俱进,我们将在下一个版本中更新自己。” 因此,一段时间内我们将发布更新版本的补丁。 我在报告中已经说过:版本变化的数量还是很小的。 我认为从 3.4 到 4 的过渡大约花了我们 15 分钟。那里发生了一些变化,但不是很重要。

答: – 那么您计划支持您的补丁,并且可以在生产中安全地安装它并在将来以某种方式接收更新?

毫米: – 我们强烈推荐它。 这为我们解决了很多问题。

妇幼保健院: – 我想再次提请注意这样一个事实,即与架构无关、与阻塞或队列无关的更改是模块化的,它们位于单独的模块中。 即使进行微小的更改,您也可以轻松维护它们。

毫米: – 如果您对细节感兴趣,那么“Clickhouse”使用所谓的历史库。 它是解开的 - 它是 Elastics 支持的副本,也就是说,它是可配置的。 轮询仅改变轮询者。 我们相信这将长期有效。

答: - 多谢。 告诉我,是否有任何有关所做更改的文档?

HighLoad++、Mikhail Makurov、Maxim Chernetsov (Intersvyaz):一台服务器上的 Zabbix、100kNVPS

毫米: – 文档是一个补丁。 显然,随着 Clickhouse 的引入,随着新型轮询器的引入,新的配置选项出现了。 最后一张幻灯片的链接有一个关于如何使用它的简短描述。

关于用 nmap 替换 fping

答: – 你最终是如何实现这个的? 您能举出具体的例子吗:您有捆绑器和外部脚本吗? 是什么导致如此快地检查如此大量的主机? 你如何挖掘这些主机? 我们是否需要以某种方式将它们提供给 nmap,从某个地方获取它们,将它们放入,运行一些东西?...

毫米: - 凉爽的。 非常正确的一个问题! 重点是这个。 我们修改了用于 ICMP 检查的库(ICMP ping,Zabbix 的一部分),它指示数据包的数量 - 一 (1),并且代码尝试使用 nmap。 也就是说,这是Zabbix的内部工作,变成了pinger的内部工作。 因此,不需要同步或使用捕获器。 这是故意这样做的,以便使系统保持完整,而不必处理两个数据库系统的同步:要检查什么,通过轮询器上传,以及我们的上传是否损坏?..这要简单得多。

答: – 它也适用于代理吗?

毫米: – 是的,但我们没有检查。 Zabbix 和服务器中的轮询代码是相同的。 应该管用。 让我再次强调:系统的性能使我们不需要代理。

妇幼保健院: – 问题的正确答案是:“为什么需要具有这样系统的代理?” 只是因为 NAT 或通过某种慢速通道进行监控...

答: – 如果我理解正确的话,你使用 Zabbix 作为警报器。 或者将您的图形(存档层所在的位置)移动到另一个系统,例如 Grafana? 或者你没有使用这个功能?

毫米: ——我再次强调:我们已经实现了彻底的融合。 我们正在将历史注入 Clickhouse,但同时我们也更改了 php 前端。 Php 前端转到 Clickhouse 并从那里处理所有图形。 同时,说实话,我们有一部分可以从同一个 Clickhouse、同一个 Zabbix 数据在其他图形显示系统中构建数据。

妇幼保健院: – 也在“格拉凡”中。

资源分配决策是如何做出的?

答: – 分享一些你的内部厨房。 如何决定需要分配资源来认真加工产品? 一般来说,这些是某些风险。 请告诉我,在您将支持新版本这一事实的背景下:从管理的角度来看,这个决定如何证明是合理的?

毫米: – 显然,我们没有很好地讲述历史的戏剧。 我们发现自己处于必须采取行动的境地,我们基本上与两个平行的团队一起进行:

  • 其中一个是使用新方法启动监控系统:监控即服务,这是一组标准的开源解决方案,我们将其组合起来,然后尝试更改业务流程,以便与新的监控系统配合使用。
  • 与此同时,我们有一位热心的程序员正在做这件事(关于他自己)。 碰巧他赢了。

答: – 团队规模有多大?

妇幼保健院: - 她就在你面前。

答: – 所以,一如既往,你需要一个激情的人吗?

毫米: ——我不知道什么是激情。

答: - 在这种情况下,显然是你。 非常感谢你,你太棒了。

毫米: - 谢谢。

关于 Zabbix 的补丁

答: – 对于使用代理的系统(例如,在某些分布式系统中),是否可以调整和修补,例如轮询器、代理以及 Zabbix 本身的部分预处理器; 以及他们的互动? 是否可以优化具有多个代理的系统的现有开发?

毫米: – 我知道Zabbix服务器是使用代理组装的(代码编译获得)。 我们尚未在生产中对此进行测试。 我对此不确定,但我认为代理中未使用预处理器管理器。 代理的任务是从 Zabbix 获取一组指标,合并它们(它还记录配置、本地数据库)并将其返回给 Zabbix 服务器。 服务器收到数据后会自行进行预处理。

对代理的兴趣是可以理解的。 我们会检查一下。 这是一个有趣的话题。

答: – 这个想法是这样的:如果你可以修补轮询器,你就可以在代理上修补它们并修补与服务器的交互,并仅在服务器上调整预处理器以实现这些目的。

毫米: – 我认为这更简单。 您获取代码,应用补丁,然后按照您需要的方式对其进行配置 - 收集代理服务器(例如,使用 ODBC)并跨系统分发修补后的代码。 必要时 - 收集代理,必要时 - 服务器。

答: – 最有可能的是,您不必另外修补到服务器的代理传输?

妇幼保健院: - 不,这是标准的。

毫米: ——事实上,其中一个想法并不听起来。 我们始终在想法的爆发与变化的数量以及支持的便利性之间保持平衡。

一些广告🙂

感谢您与我们在一起。 你喜欢我们的文章吗? 想看更多有趣的内容? 通过下订单或推荐给朋友来支持我们, 面向开发人员的云 VPS,4.99 美元起, 我们为您发明的入门级服务器的独特模拟: VPS (KVM) E5-2697 v3(6 核)10​​4GB DDR480 1GB SSD 19Gbps XNUMX 美元或如何共享服务器的全部真相? (适用于 RAID1 和 RAID10,最多 24 个内核和最多 40GB DDR4)。

Dell R730xd 在阿姆斯特丹的 Equinix Tier IV 数据中心便宜 2 倍? 只有这里 2 x Intel TetraDeca-Core Xeon 2x E5-2697v3 2.6GHz 14C 64GB DDR4 4x960GB SSD 1Gbps 100 电视低至 199 美元 在荷兰! Dell R420 - 2x E5-2430 2.2Ghz 6C 128GB DDR3 2x960GB SSD 1Gbps 100TB - 99 美元起! 阅读 如何建设基础设施公司同级使用价值730欧元的Dell R5xd E2650-4 v9000服务器一分钱?

来源: habr.com

添加评论