草庐IT

Prometheus最香?大型银行用Zabbix做监控也杠杠的!

马文杰 2023-03-28 原文

引言

随着G行业务的高速发展,业务系统的规模日益增长,监控管理的成本也随之升高,现有的监控手段已无法很好的满足监控管理的需求。因此G行启动了ZABBIX开源监控项目,通过该项目的建设工作,在节约监控管理成本的同时,也完善了国产软件和开源软件的监控手段,提升了G行的自动化监控能力和自主可控能力。

一、ZABBIX开源监控建设背景

不少行业和单位都使用商业监控软件实现本单位的信息系统的日常运行监控,但商业监控软件在管理上存在较多痛点。

图1 监控管理的痛点

为了解决传统监控管理在日常运维中存在的痛点和问题,G行通过对数款开源监控软件的监控能力、灵活性、兼容性以及易用性等多方面进行对比选型,最终选择ZABBIX作为行内今后主要的监控工具。ZABBIX是一款功能强大的开源监控软件,它操作简单,适用于多种平台,能够支持虚拟化、云环境等多种场景的监控,且提供开放的、通用的API接口,在各个行业都有广泛的使用。

  • 支持多平台的企业级分布式开源监控;
  • 可实现复杂多条件告警;
  • 提供多种API接口,支持二次开发;
  • 自动发现和低级别发现功能;
  • 有丰富的社区资源支持。

图2 ZABBIX支持多种监控场景

二、G行ZABBIX开源监控项目

经过前期的调研选型,确定选用ZABBIX作为行内主要监控工具,并以开源软件监控、开发测试环境监控为起点,逐步推进到总、分行生产环境所有主机、所有监控指标全部覆盖,平稳替换行内传统商业监控软件,并且在其基础上逐步实现平台化、自动化的监控统一管理。下面分别从监控部署架构、监控采集方法、监控告警策略和监控自动化四个方面,介绍G行在ZABBIX开源监控的实践历程。

1、监控部署架构

根据总、分行以及生产、测试划分使用多套ZABBIX软件,并采用Server-Proxy-Agent的分布式监控架构,有效地降低Server端的采集压力;同时,根据不同环境的特性采用不同的监控方案:

图3 总分行生产、测试环境监控架构

1)开发测试环境

监控策略的开发测试与验证环境,同时结合开发测试环境的特性(被监控主机的生命周期较短),采用自动发现+自动注册的监控方式进行自动监控。

2)总行生产

按监控对象类型进行分组,每组Proxy承担不同的监控职责,实现监控压力的平衡,并准确定位不同组件的作用范围。

3)分行生产

  • ZABBIX Server部署在总行,集中化统一管理。
  • 按地域划分,每家分行部署独立Proxy,Proxy各模块容器化部署,灵活调度、易于迁移和扩展。
  • Proxy与Server之间数据采用压缩模式、加密传输,保障网络无压力和数据安全。

2、全面支持开源/信创

依赖ZABBIX开源属性,全面支持行内开源软件及信创产品的监控纳管,推进监控自主可控,具体包括:

  • 操作系统:中标麒麟LINUX,银河麒麟ARM等;
  • 数据库:DAMENG,MySQL,KINGBASE等;
  • 中间件:宝兰德,NGINX,ROCKETMQ等;
  • 大数据:KAFKA,SPARK,ES等。

3、监控采集方法

ZABBIX支持多种采集方式,根据监控项的不同自由定制:

  • 使用Agent或SSH、WMI监控服务器软件运行情况。
  • 使用DBforBix插件、JDBC协议或Agent监控数据库。
  • 使用JMX(java管理扩展)、T3协议监控java类服务。
  • 使用ping及web检测监控WEB应用。
  • 使用log日志主动监控及时发现应用的异常。
  • 使用system.run调度现有监控脚本与工具,保证现有监控工具的顺利切换。
  • 使用相关项与预处理功能对监控结果解析解析拆分使用,实现一次采集多次使用,提高监控效率,降低被监控端性能压力。

图4 异构对象全面监控

4、监控告警策略

ZABBIX支持通过邮件、短信、微信、接口等方式发送到指定人,行通过调用ZABBIX API,读取告警数据,对告警数据进行规则解析、丰富处理和维护期处理,告警数据推统一监控管理平台后进行集中展示和告警。

5、监控自动化

G行数据中心的管理已实现标准化,标准化是实现监控自动化的前提。

  • ZABBIX Agent通过母带、SMDB下发或脚本一键式自动部署。
  • Agent开机自启动、状态检测,支持远程重启及停用。
  • LLD自动发现,可自动发现系统分区、网卡,还可自定义发现主机上的数据库或中间件多实例。
  • 自动注册,自动监控新设备、创建主机、关联模板、开启监控。
  • 通过API实现批量添加监控主机,关联监控模版。
  • 统一的监控模版与组合告警触发器相结合,满足多种监控场景。
  • 简单故障自愈功能,可对报警进行分类、分级,结合脚本对一些低级本的告警固化处理方法,满足条件即可自动进行相应操作(如指定文件清理、服务拉起等),达到快速恢复故障,保障系统可用率。

三、ZABBIX开源监控阶段性成果

经过四期持续的建设,G行基本完成对商业软件的监控覆盖,在开源软件监控能力、监控自服务能力等各方面都取得长足的进展,丰富并完善监控手段,并在总、分行生产系统监控管理中发挥重要作用。ZABBIX已完成开发测试环境、总行、39家分行监控全覆盖,使用ZABBIX系统对生产环境HPUX系统进行细粒度监控,实现对商业监控软件的能力替代,同时完成39家分行的全面覆盖,正在进行商业监控软件的全面替换。

图5 ZABBIX阶段性建设成果

四、总结与展望

数字化银行离不开强有力的科技支撑。我们将不断紧跟新技术发展步伐,从基础设施、技术架构、新技术应用等多领域夯实科技基础支撑能力,为众多新技术、新架构的引入,提供全方位的监控服务。

  • 监控思维的转变
数字化思维需要运维人员建立数据意识,以业务价值为导向,以数据服务为目标,实现监控数字化转型。

  • 监控智能化
依赖于大数据技术,通过海量数据和机器算法,实现告警根因分析、动态基线和自动预测等智能化场景的监控应用。

  • 技术创新
保持技术创新能力,更多新技术、新架构的使用,帮助我们更方便、高效地应对数字化转型中遇到的各种问题。

  • 监控管理+服务
强化监控标准化的管控能力,以监控标准化作为基准,进一步优化自服务、自助式的运维监控模式,提升监控服务的覆盖度。

有关Prometheus最香?大型银行用Zabbix做监控也杠杠的!的更多相关文章

  1. Observability:从零开始创建 Java 微服务并监控它 (二) - 2

    这篇文章是继上一篇文章“Observability:从零开始创建Java微服务并监控它(一)”的续篇。在上一篇文章中,我们讲述了如何创建一个Javaweb应用,并使用Filebeat来收集应用所生成的日志。在今天的文章中,我来详述如何收集应用的指标,使用APM来监控应用并监督web服务的在线情况。源码可以在地址 https://github.com/liu-xiao-guo/java_observability 进行下载。摄入指标指标被视为可以随时更改的时间点值。当前请求的数量可以改变任何毫秒。你可能有1000个请求的峰值,然后一切都回到一个请求。这也意味着这些指标可能不准确,你还想提取最小/

  2. ruby-on-rails - 监控多个 Rails 应用程序 - 2

    是否可以在我的服务器上运行任何工具来监控多个Rails应用程序?我需要监控每个应用程序收到的请求数、每个应用程序使用了多少内存、使用了多少CPU以及其他类似的统计信息。我需要查看每个单独的Rails应用程序的统计信息。 最佳答案 我建议你试试NewRelicRPM.免费版:RPMLiteisthemostwidelyusedsolutionforbasicwebapplicationmonitoring.RPMLiteprovidesapplicationmonitoringforunlimitedJava,RubyorJRubya

  3. ruby - 使用 ruby​​-yajl 解析大型 JSON 哈希? - 2

    我有一个包含JSON散列的大文件(>50Mb)。像这样的东西:{"obj1":{"key1":"val1","key2":"val2"},"obj2":{"key1":"val1","key2":"val2"}...}与其解析整个文件并取前十个元素,不如解析散列中的每个项目。我实际上并不关心key,即obj1。如果我将上面的转换为:{"key1":"val1","key2":"val2"}"obj2":{"key1":"val1","key2":"val2"}我可以使用Yajl流轻松实现我想要的:io=File.open(path_to_file)count=10Yajl::Parse

  4. ruby-on-rails - 将大型 Rails 应用程序分解成较小的应用程序? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。我有一个包含600个模型的Rails应用程序,很快就会增加到800-1000个。我想对Rails应用程序进行分段,以便仅加载某些模型,因此充当单独的应用程序,但所有模型都共享相同的基本模型。是否有执行此操作的标准做法?编辑:我在2.3.8编辑2:问题是许多模型是相似的,但不同之处恰恰足以保证编写一个新类,也就是说,将所有模型都放在一个模型中所需的逻辑将是

  5. ruby-on-rails - 如何使用 ruby​​ 加速大型 CSV 的处理 - 2

    对于一个项目,我需要解析一些非常大的CSV文件。一些条目的内容存储在MySQL数据库中。我正在尝试使用多线程来加快速度,但到目前为止,这只会减慢速度。我解析了一个CSV文件(最大10GB),其中一些记录(20M+记录CSV中的大约5M)需要插入到MySQL数据库中。为了确定需要插入的记录,我们使用Redis服务器和包含正确ID/引用的集合。由于我们在任何给定时间处理大约30个这样的文件,并且存在一些依赖关系,我们将每个文件存储在一个Resque队列中,并让多个服务器处理这些(优先级)队列。简而言之:classWorkerdefself.perform(file)CsvParser.ea

  6. ruby-on-rails - 监控 RTMP 流,如果可用则记录 - 2

    我正在寻找一种方法来监视流上的事件,以便我可以确定是否有任何内容通过流。如果有,我将开始使用rtmpdump进行录制。我想象这是通过运行一个每60秒检查一次流的cron任务来实现的。如果它确定流正在通过,则调用rtmpdump开始记录它。如果没有,则什么都不做,并在60秒后再次检查。由于rtmpdump只是在没有流数据时出现错误,因此尝试使用它来监视流似乎不是一个好主意,但也许我错了。如果我在逐个案例的基础上手动执行此操作会很容易,但我正在尝试自动执行自动录制流的任务(如果它们可用)。有没有人遇到过这样做的方法?也许我可以在命令行(linux)中使用其他一些工具?如果有帮助,我正在使用

  7. ruby - 使用 ruby​​ 流式传输和解压缩大型 csv 文件 - 2

    我遇到问题,我需要下载、解压缩,然后逐行处理一个非常大的CSV文件。我认为让您了解文件有多大很有用:big_file.zip~700mbbig_file.csv~23gb这是我希望发生的一些事情:解压缩前不必下载整个文件在解析csv行之前不必解压缩整个文件在执行所有这些操作时不要占用太多内存/磁盘我不知道这是否可能。这是我的想法:require'open-uri'require'rubyzip'require'csv'open('http://foo.bar/big_file.zip')do|zipped|Zip::InputStream.open(zipped)do|unzipped

  8. ruby - 如何在 Node.js/RoR 中监控 20 个网站(Ping 或 HTTP)的正常运行时间 - 2

    每5分钟(例如)ping20个网站的列表以了解该网站是否响应HTTP202的最佳方法是什么?最简单的想法是将20个URLS保存在数据库中,然后运行数据库并对每个URL执行ping操作。但是,当一个人不回答时会发生什么?之后的人会怎样?此外,是否有更好但更简单的解决方案?恐怕该列表会增长到20000个网站,然后没有足够的时间在我需要ping的5分钟内全部ping通它们。基本上,我是在描述PingDom、UptimeRobot等的工作原理。我正在使用node.js和RubyonRails构建这个系统。我也倾向于使用MongoDB来保存所有ping和监控结果的历史记录。建议?非常感谢!

  9. ruby-on-rails - Rails 中的用户监控 - 2

    我们有一个带有广泛管理部分的应用程序。我们对功能有点满意(就像您一样),并且正在寻找一些快速简便的方法来监控“谁使用什么”。理想情况下,一个简单的gem将允许我们在每个用户的基础上跟踪Controller/操作,以构建使用的功能和未使用的功能的图片。任何你会推荐的..谢谢主场 最佳答案 我不知道有什么流行的gem或插件可以解决这个问题;过去,我在ApplicationController中将这种审计实现为before_filter:从内存中:classApplicationControllercurrent_user,:contro

  10. ruby-on-rails - Rails 4 中的 Asset-Pipeline/Turbolinks 对于大型应用程序的优缺点是什么? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我们正在开发一个相当大且广泛的应用程序。该网站将有许多不同的部分,具有一些非常不同的用户界面要求和行为。展望future,Rails4将Assets管道分离到一个单独的gem中,因此我们可以选择包含或不包含它。turbolinks可能会发生同样的事情。这些天我一直在问自己但找不到答案的问题是:我是否应该在我们的项目中使用这些库?我反射(reflect)的主

随机推荐