我们如何更新Zabbix

图片


为什么我们爱普罗米修斯 ? 他有一个配置-他看上去很清楚,程序照她说的去做。 您可以自动执行监视设置,将其存储在VCS中,然后查看命令。 限制了您的MR ,有效的管道,适用于prometheus的新配置。 总的来说, IaC充满荣耀。


说到普罗米修斯。 您是否将其用于铁基础设施? 所以我们不使用。


就像许多长期监视并且拥有“裸机”硬件的人一样,我们使用Zabbix ,顺便说一下,它位于该硬件上。 las,目前,Zabbix和IaC是无关的东西。 Zabbix可以手动配置,也可以通过API配置。


背景知识


Zabbix-4.0于2018年10月发布-一个新的LTS分支。 在3月中旬,我们开始计划将3.4版的安装升级到该版本。


3.4几乎没有特殊问题:


  • 有时某些LLD在某处无法正常工作并发生了“不可能”事件,目前尚不清楚如何在开发人员不支持的版本上进行调试
  • HTTP Puller的内存一直在流动-结果,精心配置的systemd监视并重新启动了它。 大量的服务器内存掩盖了该问题。 该问题是众所周知的,已记录在案

在4.0中,有一些有趣的功能,例如本机HTTP项和服务期限(不适用于整个主机)。


在哪里可以看到,坐在不相关的监视版本上,甚至不在LTS上? 我们必须保持最新。


此外,在计划更新时,发现了一个有趣的细节:进展不会停滞不前,您可以以较低的价格购买速度更快的汽车。 在此过程中,我找到了一种节省同事多个项目中已经不必要的托管服务的方法。 正如他们所说,我们成功输入了它。


前额更新


现在更新zabbix并没有特别复杂。 订购服务器,对其进行配置,合并数据库的副本。 放置监视程序包并向他们显示基础,运行zabbiks-他将亲自为您更新所有内容,滚动所有迁移。 好吧,是的,您可能知道Zabbix升级变得多么容易。


总共,数据库迁移花费了大约15分钟,甚至没有太多的滥用。 而且一切似乎都很好。 ?? 无论如何! 尽管新服务器的IP未列在代理的白名单中,并且它仅从少数测试主机收集数据,但Impossible仍在发生。


对于Zabbix的开发人员,我必须说,他们信守诺言-当时支持4.2版。 在项目跟踪器中进行讨论之后,我们发现不可能的原因是它与数据库表之一的预期结构不一致。


模糊的疑惑蔓延。 回顾一下历史上“最厚”的Zabbix数据库表将是有用的。 首先,出于性能原因,为了掩盖您最喜欢的zabbix愈伤组织-删除RDBMS中的历史数据。 我们在一个新近更新的数据库和一个控件(由服务器本身从头开始创建)中连续比较所有表的结构。 恐惧得到了证实。 除了数据库中缺少某些常量外 ,在许多表中,许多数字列的类型也不正确。


也就是说,实际上,我们没有开发人员支持的基本方案,而是我们自己的“叉子”。 列数据的另一种类型可能是:


  • 其他度量存储成本
  • 不同的数字精度
  • 指标的不同采样/记录速度

想更好? 这是令人怀疑的。 根据过去在技术支持和zabbix开发人员方面的经验,他们可以调整DBMS。


这种类型的列数据是可能的,但是很难更改且需要很长时间。 如果没有长时间的停机监控,这是不可能的。 没有成功的保证,没有未来开发者的支持。 需要另一种方式。


Zabbix拥有它。 因为在2019年4月,zabbix-4.2即将面世


射弹的第二种方法


对我们来说4.2的主要功能是支持使用TimescaleDB开箱即用进行分区。 与Zabbix的代表交谈并熟悉测试该功能的技术支持(在集线器上进行翻译 )的结果后,我们决定使用timescaledb测试安装,并根据结果对过渡做出决定。 更具体地说:一段时间后,所有监视数据都将与旧版本和新版本并行写入。 然后我们只需切换DNS条目。


当然,这种方法不允许您保存历史数据和趋势-从头开始填充新数据库。 但是他们真的需要吗? 历史只在此时此地重要,它将再次迅速积累(看一看普罗米修斯)。 毫无疑问,容量规划趋势毫无用处。 无论如何,包含已收集数据的存档都保留在我们手中(展望未来-对某些客户有用)。 zabbix中timescaledb支持的另一个功能是历史/趋势存储的各个时期不再有效。


我们的客户坚持不惜一切代价“永久”存储所有收集的数据。 我们可以为他们提供考虑使用具有特定设置的单独监视安装的安装/支持。 我们的主要任务是确保客户项目/服务器的稳定运行,同时保持可接受的服务成本,其中还包括监视。


总体而言,迁移将需要以下步骤:


  1. 安装并配置第二个监视安装
  2. 与第一次安装完全相同
  3. 切换!

听起来很简单,对吧? 确实,第一个并不是很困难,因为在以前的方法中,我们编写了一个安装zabbix服务器的角色,仅上传配置就足够了。 第三项看起来也很简单-切换DNS,所有zabbiks代理,代理,API客户端和现场人员都可以使用新版本。 但是,如何提出第二点呢?


最初,我们尝试过一种幼稚的方法。 从当前监视中导入了两个最常用的模板。 使用已经编写的脚本来使用API​​,我们在新监视中启动了与当前监视中相同的项目,通过SCM系统推送了编辑,将新计算机的IP添加到了数据包过滤器和Server / ServerActive代理指令中。 它甚至可以正常工作-许多主机开始同时注册两个监视,新主机为它们分配了模板,并开始与当前主机并行地收集数据。


las,这恰好是简单的迁移方法,仅适用于测试。 结果负载(以nvps为单位 )无法与当前安装进行比较,降低了几个数量级。 这是可以理解的。 就我们而言,监视实际上是许多人和脚本工作的多年,这是操作异构项目的经验的精髓。


例如,在创建项目,监视挂在主机上的模板(带有其自定义宏值),手动创建的项目,复杂的屏幕,图形,仪表板,服务期,代理时,随机生成的用户及其密码怎么办? 所有这些以及更多内容都需要转移才能顺利迁移。


幸运的是,zabbix具有用于导出/导入对象的内置功能-也可以通过API使用。 las,它涵盖的设施不超过所有现有设施的一半。 使用它的代码也需要编写。 通常,您不能只将一个zabbik的配置导入另一个。


还是可能吗?


在这里,大脑可以帮助您从积压的任务中回忆起通过外部方式组织监视配置历史记录存储的工作。 las,这是Zabbix的痛处。 参考有关中心和带有代码文章 。 但是有细微差别:


  • 该代码不会将所有监视对象导出到人类可读的YAML文件(特别是,并非我们需要的全部)
  • 该代码不支持导入对象

幸运的是,有些人会一点项目语言(python),并且对Zabbix API有经验。 唯一的业务是从现成的YAML转储中导入对象。 经过了三周的工作和一百次半的提交,花了很短的时间,但很短,但是叉子很适合我们的目的。 实际上,出于整个演讲的撰写目的:


https://github.com/centosadmin/zabbix-review-export-import


已经做了什么:


  • 添加了对许多新对象的支持
  • 大多数现有对象的YAML导出格式已更改,以便可以导入它们
  • 添加了导入大多数导出对象的功能
  • 添加了用于在不同版本的zabbix之间转换对象的有限功能(如本例所示)

导入几乎完全由新对象的创建来支持。 如果存在对象,则将不会对其进行修改。 这使我们至少可以在某些框架中保持代码的复杂性,节省时间,并冷静地提高工作速度-导入数千个对象时。 使用导入非常简单:


./zabbix-import.py /path/to/file.yaml 

(假定在环境变量中指定了目标监视参数,有关更多详细信息,请参见--help输出)


通常,您可以指定任意数量的输入YAML文件-所有这些文件都将被处理。 但是考虑到对象之间存在很多依赖关系,从最简单,最基本的对象开始逐个导入对象就更有意义了。 另外,如果您从一个文件中导入一个对象,则可以显式指定其类型以加快导入速度-并非所有缓存都已加载,而是仅加载了必要的缓存。


因此,我们的Hitlab中出现了两个存储库,其中包含两个监视版本(当前版本和新版本)的YAML转储的定期更新。 当然,还具有随时还原几乎所有监视对象的能力。


持续监控部署和迁移本身


结果,我们得出的结论是gitlab按计划在新监控的存储库上启动了一条管道,该管道逐步从旧监控中逐级导入一种对象。 这使我们可以导入绝大多数对象,并给我们的管理员团队腾出时间来冷静地解决所发现的问题-多年来这些问题并没有累积太多。 未删除“其他”对象。


用户密码的问题-它们也可以导出/导入,但是在创建过程中分配了一个随机密码-可以通过将具有当前监控凭据的表的SQL转储转换为SQL语句以在新监控中设置正确的密码来解决。


为了在并行操作期间不接收任务的两倍,新监视中的所有操作都将立即关闭并且不再删除。


因此,切换非常容易,归结为以下几点:


  • 删除新监视中的所有主机(为此,通过API编写了两个脚本)
  • 拉SCM以更新zabbix-proxy版本并将代理切换到新服务器
  • 等待从旧监控的转储中导入主机
  • 切换DNS记录

(计划简化以简化)


接下来是什么?


当然,代码不是完美的,也不是特别漂亮。 它不会导入所有内容,特别是某些模板存在问题-在代码中查找FIXME 。 但这对我们来说足够了。 也许这个叉子对别人有用。 逻辑扩展是Terraform实用程序的类似操作的发展,当目标监视完全减少为指定的形式时,例如,由带有YAML转储的目录指定。 包括将现有设施减少到所需形式。


这将使您平静地等待zabbix中具有两个服务器的“本机” HA支持,它们之间的设置会自动同步。 现在,您必须保留一个副本,代理并编写脚本。


迷彩来了吗?


在研究了会议和会议的材料,官方路线图,错误跟踪程序以及与zabbix开发人员的个人交流的(适度)经验之后,似乎他们完全了解了他们现在的处境。 当zabbix启动时,作者在解决问题时并未考虑任何IaC。 十年后,产品成熟并蓬勃发展。 成功的另一面是公司的大量客户,他们的监督解决了他们的问题。 和谁不真正喜欢革命。 在现代条件下,一方面,他们反对破坏一切,从头开始。 另一方面,他们有时缺乏监控功能,“侧眼”,而不是忘记向Zabbix的开发人员表达心愿单。 尽管对新的,方便的,时尚的年轻人表示同情,但该公司不会冒险。


我们不会在不久的将来看到来自Zabbix的新的正确的普罗米修斯。 不管我怎么想。 但是工作显然正在进行中-如果您像zabbix一样周到且耐心,那么未来也将期待万里无云的未来。


使用的来源:


  1. https://gitlab.com/devopshq/zabbix-review-export
  2. https://habr.com/cn/company/pt/blog/433126/
  3. https://habr.com/cn/company/zabbix/blog/458530/

Source: https://habr.com/ru/post/zh-CN468207/


All Articles