文章目录
  1. 1. 对zabbix的理解
  2. 2. 使用背景
  3. 3. QuickStart
    1. 3.1. 安装zabbix-server
    2. 3.2. 安装zabbix-agent
    3. 3.3. 在zabbix web管理界面上查看数据图
  4. 4. 使用细节
    1. 4.1. 配置active agent
    2. 4.2. 监控mysqld
      1. 4.2.1. agent端配置
      2. 4.2.2. server端配置
    3. 4.3. 监控磁盘
    4. 4.4. 监控redis
    5. 4.5. 自动注册新的受监控端
    6. 4.6. 打包zabbix-agent(开箱即用)
    7. 4.7. 根据host自动创建screen
  5. 5. 其他

对zabbix的理解

zabbix(音同 zæbix)是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。

zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。
百度百科

我认为Zabbix的功能主要分这样几个部分:

  • zabbix-agent 负责收集数据并格式化
  • zabbix-server 接收数据,并存储到mysql
  • 通过在zabbix web管理界面上进行一系列的配置,即可看到直观的数据展示图

简言之,zabbix提供了一套能把服务器关键指标转化为与时间相关的图表的流程。
系统管理员可以从这些图表中更容易地分析出系统存在的问题。(单纯使用top等命令是很难发现一些偶发问题的)

使用背景

我遇到的场景比较特殊:

  • 目前我们有一批硬件,跑linux系统,后台跑着一批脚本。
  • 从top数据看,系统load常常超过系统最大负载,但是并没有发现占用cpu很高的进程。
  • 需要定位占用系统资源的进程,并进行优化。

QuickStart

让我们简单的看一下zabbix的效果:

安装zabbix-server

请参考Ubuntu12.04安装Zabbix

安装完毕后,在web管理界面上新增一个的host,这个host名称需要和下面的zabbix-agent中的配置一致。zabbix根据host名称匹配数据与图表。

安装zabbix-agent

可以直接使用yum或者apt-get安装

1
yum install -y zabbix zabbix-agent

如果需要监控多台配置一样的服务器,而监控项也一样,那么完全可以把zabbix-agent打成一个免安装包,直接copy到目标服务器即可使用。(见本文【打包zabbix-agent】部分)

在zabbix web管理界面上查看数据图

贴一张图,可以看到cpu使用率周期性升高,提示我们去排查定时脚本。
zabbix效果图

你也可以在Screen中手工配置,把一组相关的图表显示在同一页面中。(这里不展开细说,请自行google)

使用细节

配置active agent

zabbix agent分两种:passive和active。
默认是passive,也就是agent被动等待server前来获取数据。而我的zabbix server在公网,agent全部在内网,server不能直接访问agent。于是需要将agent切换为active模式,即每隔一段时间主动把数据上报给server。

  • 修改zabbix-agent.conf
1
2
3
4
# 不启动passive的客户端
StartAgents=0
# 配置zabbix server地址
ServerActive=your-zabbix-server.com
  • 在zabbix web页面上调整item的type为zabbix-agent(active)
    • 在Configuration->Hosts下可以看到已经监控到的服务器列表
    • 点击需要修改的服务器的Items字段,选中要动态上报的项目,然后在页尾选择mass update,即可批量修改。
  • Configuration->Hosts 里的discovery也需要调整为zabbix-agent(active)类型

  • 做完如上调整后,需要重启zabbix-agent

监控mysqld

agent端配置

zabbix提供了监控mysql server的扩展,只是默认未打开。只需要修改zabbix-agent.conf,将以下参数的注释去掉即可。

1
Include=/hard/zabbix/zabbix_agentd.d/

这样,在zabbix_agentd.d下的userparameter_mysql.conf就会自动被引用。

server端配置

在服务端管理页面上,将对应的host添加这个template即可:Template App MySQL

以上都修改完毕后,重启agent,过一会就可以看到数据了。

监控磁盘

需要自己添加扩展,与mysqld扩展类似。
参考zabbix应用之Low-level discovery监控磁盘IO

  • 在zabbix_agentd.d下添加disk_lld.conf
  • 在disk_lld.conf中指定的位置添加mount_disk_discovery.sh
  • 在管理页面import新的template:Template Linux DiskIO
  • 给指定的host添加这个template
  • 重启agent

监控redis

与添加磁盘监控步骤完全一致,参考这里

需要注意的一点是,这个脚本中用到了nc来获取redis数据。由于我们的基础软件中没有nc,我直接改为用redis-cli info,有相同情况的同学可以参考这个做法。

自动注册新的受监控端

每次新增agent,都需要在服务端配置新的host,很麻烦。那么,有没有办法让server端自动添加新发现的agent呢?答案是肯定的。

  • 打开web管理界面的Configuration->Actions页面
  • 点击create action,添加一个新动作
  • 可以配置发现一个新agent的时候,校验hostname,如果匹配,则新增一个host,并添加指定的template

具体细节,可参考这里

打包zabbix-agent(开箱即用)

其实要执行zabbix-agent,只需要

  1. agent主程序:zabbix-agentd
  2. 配置文件:zabbix-agentd.conf

其余的配置都围绕着配置文件展开。所以,重复部署时,只需要把改好的配置打到一个包里,直接丢到想监控的服务器上就可以用了。

1
./zabbix_agentd -c /hard/zabbix/zabbix_agentd.conf

根据host自动创建screen

每个host可能对应十几个图表,手工创建screen很麻烦。好在已经有人提供了一个python脚本,可以快速的创建screen。用法很简单:

1
2
./createScreen -c 2 hostname screenname
# 其中 -c 2 表示分两栏显示图表

createScreen 源码请看这里

其他

在生产环境中,zabbix的另一个重要的用途是报警管理。在template的trigger里,可以配置某个指标的报警阈值,至于trigger被触发后是发邮件还是触发脚本,这个就看你怎么配置了。

关于报警管理的使用,我暂时没有深入看。先留个坑,实践过之后再填。

文章目录
  1. 1. 对zabbix的理解
  2. 2. 使用背景
  3. 3. QuickStart
    1. 3.1. 安装zabbix-server
    2. 3.2. 安装zabbix-agent
    3. 3.3. 在zabbix web管理界面上查看数据图
  4. 4. 使用细节
    1. 4.1. 配置active agent
    2. 4.2. 监控mysqld
      1. 4.2.1. agent端配置
      2. 4.2.2. server端配置
    3. 4.3. 监控磁盘
    4. 4.4. 监控redis
    5. 4.5. 自动注册新的受监控端
    6. 4.6. 打包zabbix-agent(开箱即用)
    7. 4.7. 根据host自动创建screen
  5. 5. 其他