4

【监控体系】最全面系统的Zabbix讲解 | 含源码&监控类型整理

 2 years ago
source link: https://my.oschina.net/yunzhihui/blog/5412157
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

【监控体系】最全面系统的Zabbix讲解 | 含源码&监控类型整理 - 云智慧技术社区 - OSCHINA - 中文开源技术交流社区

主讲人:王鸿杰,云智慧/企业效能部/架构师

讲师简介:云智慧架构师,PHP/PECL 开发组成员,PECL/SeasClick、PECL/SeasLog Maintainer。6 年研发经验,2018 年加入透视宝团队,致力于 APM 产品的架构与研发,专注于服务的性能分析与优化。2021 年加入效能工程团队,为高效而生,立足于使用最少的资源来解决最大的问题,研究各种不同的 bot 技术,让整个团队更高效运转。

公司简介:云智慧集团成立于2009年,是国内领先的全栈智能业务运维解决方案服务商。经过多年自主研发,公司形成了从IT运维、电力运维到IoT运维的产业布局,覆盖ITOM、ITOA、ITSM、DevOps以及IoT几大领域,为金融、政府、运营商、能源、交通、制造等上百家行业的客户,提供了数字化运维体系建设及全生命周期运维管理解决方案。云智慧秉承Make Digital Online的使命,致力于通过先进的产品技术,为企业数字化转型和提升IT运营效率持续赋能。

从本篇内容你能得到:

1. Zabbix是什么、能做到什么

2. Zabbix组件详解、架构和处理工作流程

3. Zabbix各监控项类型的采集实现(SNMP、ICMP、Ping、简单检查等)

4. Zabbix 模板组成结构与实现

5. Zabbix Agent源码结构与实现分析

6. Zabbix 自动发现逻辑的源码结构与实现详解

全栈监控是什么?

监控一切需要监控的东西,只要能够想到,能够用命令实现的都能用来监控。

基础层:主要偏硬件,监控主机和底层资源。比如cpu、 内存、网络吞吐、硬盘I/O、硬盘使用等

中间层:包括nginx、Redis、MQ、MySQL、 Tomcat等

应用层: HTTP访问的吞吐量、响应时间、 返回码、调用链路分析、性能瓶颈, 还包括用户端的监控等

日志:syslog、nginx log、mysql log等

333a954f9ea20d2dc15d476d265a7ca0.png

为什么使用Zabbix?

目前开源的解决方案中,Zabbix和Prometheus是使用较多的两个方案,这两个方案的区别和优势是什么?

db7c1ec3f77085ff70178bd2b7b6d063.png

对于偏传统的行业,云环境较少的场景下,是比较适合于Zabbix的使用,当然Prometheus是未来发展的方向。

Zabbix是什么?

Zabbix源码主要组成:

frontends:php,主要负责前端的业务操作

Zabbix agent:采集数据

Zabbx server:同步配置,处理数据,分析告警等。

ea86e25da8797f83d17d1be8da9c7045.png

Zabbix处理流程:

主要由四部分组成:

Portal-DB-Server-Agent

详细的工作流程如下:

f38c5c7ced263a8cc957b6922e8514a7.png

详细流程可查看下图:

3e518af618a8ea7d186301f6bfebd116.png

Zabbix是怎么做的?

Zabbix Process

  1. 当添加(自动发现)一个 host,并且为 host 添加对应的模板的时候,Portal 会解析出来对应的 item, preprocess,trigger 然后放在对应的 Db 表里面。

  2. Server 的 dbconfig_thread 会从 Db 拿到对应的数据放在共享内存中,然后poller_thread 进程读取到对应的 items,开启与 Agent 建立连接,遍历 items 从 Agent(snmp,简单检查 等) 获取到对应的指标数据

  3. 然后将 指标数据给 preprocessing_manager_thread 进程,preprocessing_manager_thread 进程会安排对应的preprocessing_worker 进程对数据进行 preprocess

  4. 最后由 dbsyncer_thread 进程将数据放入 Db 中,Portal 界面从 Db 拿到对应的数据信息绘制和显示

  5. dbsyncer_thread 同步数据到DB,遍历数据 并计算 expression 表达式计算指标,最后触发 escalator_thread 和 alerter_thread 做出相应的动作。

  6. 对于可监控指标,Agent 自带多种可监控指标 cmd,Agent 只能监控内置的监控指标,可以通过插件拓展 可监控指标。

Zabbix Server

  • dbconfig_thread: 配置同步到共享内存,保证所有进程都可读

  • poller_thread: 主动监控,解析 items 调用 Agent

  • *trapper_thread: 收集 Agent 上报上来的数据

  • pinger_thread: 定期 ping 所有监控主机,简单检查 ICMP

  • *alerter_thread: 告警消息处理进程从 IPC 读出需要发动的消息,发出告警

  • housekeeper_thread: 管家进程,过期数据清理

  • discoverer_thread: 主机、服务的自动发现

  • escalator_thread: 根据触发器的值判断是否告警,具体执行什么动作

  • dbsyncer_thread:同步数据到 db,并计算触发器值也同步到db

  • selfmon_thread: 自监控

  • preprocessing_worker_thread: 数据预处理进程,数据从 poller 和 trapper 进程过来

Zabbix Agent

  • collector_thread 周期采集基础信息,主要是内存和 CPU,储存于共享内存中

  • listener_thread 用于接收 server 或者 proxy 分配的的采集任务,被动采采集

  • active_checks_thread 主动采集上报

按进程(处理方式)划分指标类型

Poller 进程(被动)

  1. 1. snmp|SNMP代理检查

  2. simple_checks|简单检查(应用层状态检查)

  3. calculated|计算监控项

  4. internal|Zabbix内部检查

  5. ssh_checks|SSH检查

  6. telnet_checks|Telnet检查

  7. external|外部检查

  8. aggregate|汇总检查

  9. odbc_checks|ODBC监控

httppoller 进程(被动)

  • http|HTTP 检查

ipmi_poller_thread 进程(被动)

  • ipmi|IPMI检查

icmp pinger 进程(被动)

  • simple_checks|简单检查(icmp 检查)

trapper 进程(主动)

  1. trapper|捕捉器监控项

  2. log_items|日志文件监控

  3. snmptrap|SNMP traps

preprocess 进程(Follow me)

  • dependent_items|相关项目(从属监控项)

按客户端依赖划分指标类型

  1. snmp|SNMP代理检查

  2. ipmi|IPMI检查

  3. simple_checks|简单检查

  4. external|外部检查

  5. odbc_checks|ODBC监控

依赖其他监控项

  1. calculated|计算监控项

  2. aggregate|汇总检查

依赖第三方

  1. zabbix_agent|Zabbix代理检查 (Agent)

  2. snmptrap|SNMP traps (snmptrap)

  3. log_items|日志文件监控 (Agent)

  4. ssh_checks|SSH检查 (ssh 秘钥或密码)

  5. telnet_checks|Telnet检查 (Telnet Server和 Telnet 密码)

  6. trapper|捕捉器监控项 (Zabbix Sender)

  7. http|HTTP 检查 (http 接口)

被动监控对 Zabbix Server 来说会有大的压力

从监控类型来看,Zabbix 更多的是被动监控,主动监控只有 Agent Active、SnmpTrap,Sender,但是由于 Zabbix Agent 的强大,很多场景下主动监控的指标覆盖度完全能跟被动监控硬怼。

所以要根据具体监控场景,主动和被动互相搭配,耗时的指标更加倾向于主动监控。

Zabbix监控项类型梳理

请您添加:xiaoyuerwise,备注“附件”获取,或从本文底部扫码获取。

e2f70a13a32987a188d63604ea652658.png

Zabbix的自动发现

5fdd3aee69f6c03ef3361a71f611792e.png

自动发现是伴随着指标监控来的,当发现能有采集到预设的指标时,这台主机就会被标记为可用,然后触发预设的Action,通知或者自动添加监控模板等。

自动发现分类

  1. 简单检查类

  2. Agent 类型

  3. snmp 类型

  4. ICMP (ping) 类型

自动发现流程

  1. 配置 IP 段

  2. 配置自动发现指标

  3. 配置发现动作 Action

  4. 发现主机后添加 event

  5. escalator_thread 进程处理对应的 event

Zabbix的模板结构

005f04254046348590fd88010e9766c9.png

fbddfcb0e393c6289b5eb8beed8ba6f7.png

d08853970772c61a52279048aef6dc16.png

Agent源码

请您添加:xiaoyuerwise,备注“附件”获取,或从本文底部扫码获取。

4cddb211a70e3b31d11d5813ab4ff242.png

3b098ed9ac6aa44a160650ab628f413b.png

近年来,在AIOps领域极速发展的背景下,IT工具、平台能力、解决方案、AI场景及可用数据集的迫切需求在各行业迸发。基于此,云智慧在2021年8月发布了AIOps社区,旨在树起一面开源旗帜,为各行业客户、用户、研究者和开发者们构建活跃的用户及开发者社区,共同贡献及解决行业难题、促进该领域技术发展。

成立近半年,社区先后开源了数据可视化编排平台-FlyFish、运维管理平台OMP、云服务管理平台-摩尔平台、Hours算法等产品。其中FlyFish斩获中国开源云联盟2021优秀开源项目奖。OMP运维管理平台入选2021 年度 OSC 中国开源项目「最受欢迎项目」榜单。并在业内首次开源了智能运维开源数据集-GAIA数据集,填补了AIOps开源集数据领域的空白。

2021年11月,云智慧正式成为中国开源云联盟成员单位,2022年1月,云智慧入选SegmentFault 思否「2021 中国技术品牌影响力企业榜单」,这一切都代表着开发者和社区对我们的认可,这也更加坚定了云智慧开源战略的决心。

如果您对云智慧AIOps感兴趣,可以通过下方链接了解我们,也可以添加小助手微信,申请加入开发者交流群,可与大咖进行1V1交流!

云智慧AIOps社区:https://www.cloudwise.ai/

Github地址: https://github.com/CloudWise-OpenSource/FlyFish

Gitee地址: https://gitee.com/CloudWise/fly-fish

2c911238ff94a2c427ceace11db4d1cf.png


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK