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

全栈监控是什么?

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

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

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

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

日志:syslog、nginx log、mysql log等

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

为什么使用Zabbix?

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

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

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

Zabbix是什么?

Zabbix源码主要组成:

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

Zabbix agent:采集数据

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

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

Zabbix处理流程:

主要由四部分组成:

Portal-DB-Server-Agent

详细的工作流程如下:

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

详细流程可查看下图:

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

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 接口)

IDEA

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

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

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

Zabbix监控项类型梳理

附件:

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

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

Zabbix的自动发现

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

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

自动发现分类

  1. 简单检查类
  2. Agent 类型
  3. snmp 类型
  4. ICMP (ping) 类型

自动发现流程

  1. 配置 IP 段
  2. 配置自动发现指标
  3. 配置发现动作 Action
  4. 发现主机后添加 event
  5. escalator_thread 进程处理对应的 event

Zabbix的模板结构

模板结构

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

从属指标

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

计算指标

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

Agent源码

附件:

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

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

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/303395.html

(0)
上一篇 2023年10月10日 19:33
下一篇 2023年10月10日 20:16

相关推荐

发表回复

登录后才能评论