1. Zabbix 介绍
1.1 概述
zabbix 是 Alexei Vladishev 创建, 目前由其成立的的公司维护,
Zabbix 是一个企业级分布式开源监控解决方案.
Zabbix 软件可以监控有众多网络参数 和服务器监控度 完整性, Zabbix 使用更加灵活的告警机制, 允许用户位所欲时间配置基于邮件的报警, 可以让用户快速响应服务器问题, Zabbix 基于存储的数据体用出色的报表和数据可视化功能, 功能使得Zabbix 成文容量规划的理想选择.
Zabbix 支持主动获取 和被动获取 数据, 所有的报告, 统计信息和配置参数都可以基于Web 前端访问, 基于Web 前端页面保证 网络状况和服务器状况可以任何地方访问, 通过配置后, Zabbix 可以在监控 IT 基础设施方面发挥重要作用, 无论对于拥有少量服务器的小型组织, 还是拥有大量服务器而言 同样适用.
1.2 Zabbix 功能
Zabbix 是一种高度集成的网络监控解决方案, 单一软件包中提供了多种功能.
-
数据采集
- 可用性 和性能采集
- 支持 SNMP(包括主动轮询和被动捕获), IPMI, JMX, VMware 监控
- 自定义检查
- 按照自定义的时间间隔采集需要的数据
- 通过 Server/Proxy 和 Agents 来执行数据采集
-
灵活的定义阈值
- 自定义非常灵活的告警阈值, 称为触发器, 触发器从后端数据库获取参考值
-
高度可配置话的告警
- 可以根据递增计划, 接受者, 媒介类型自定义发送告警通知
- 使用宏变量可以使 告警统治者变得更加高效
- 自动动作包含远程命令
-
实时图形
- 使用内置图形功能 可以将监控项绘制成图形
-
Web 监控功能
- Zabbix 可以追踪 鼠标在 web 网站上的操作, 检查Web 网站的功能和响应时间.
-
丰富的可视化选项
- 能够创建可以将多个监控项组合到单个视图中的自定义图形
- 网络拓扑图
- 以仪表展示展示自定义聚合图片和幻灯片演示.
- 报表
- 监控资源的高层(业务)视图
-
历史数据存储
- 存储在数据库中的数据
- 可配置的历史数据
- 内置数据管理机制(housekeeping)
-
配置简单
- 将被监控设备添加为主机
- 主机一旦被添加到数据库中, 就会采集主机数据用于监控
- 将模板用于监控设备
-
套用模板
- 在模板中共分组检查
- 模板可以关联其他模板, 获得继承
-
网络发现
- 自动发现网络设备
- Zabbix Agent 发现设备后自动注册
- 自动发现文件系统, 网络接和SNMP OIDs 值
-
快捷的Web 界面
- 基于PHP的 前端
- 可以从任意地方访问
- 可以自定义操作方式
- 审计日志
-
Zabbix API
- zabbix 提供了可编程接口, 用于批量操作, 第三方软件集成和其他用途操作
-
功能强大且易于扩展 Agent
- 部署与被监控的对象上
- 完美支持 Linux 和 Windows
-
二进制守护进程
- 为了更好的性能和更少的内存占用, 采用C语言编写
- 便于移植
-
适应更复杂的环境
- 使用 Zabbix Proxy 代理轻松实现分布式远程监控
1.3 Zabbix 结构
1. Server
Zabbix Server 是整个Zabbix软件的核心程序.
Zabbix Server 负责执行数据的主动轮询和被动获取, 计算触发器条件, 向用户发送通知, 它是Zabbix Agent 和 Proy报告系统可用性和完整性数据的核心组件, Server 自身可以可以通过简单服务远程检查网络服务(如 Web 服务器和邮件服务器)
Zabbix Server 是所有配置, 统计和操作数据的中央存储中心, 也是Zabbix 监控系统和告警中心, 在监控的系统中出现任何异常, 将被发出通知给管理员.
Zabbix 的所有配置信息都存储在Server 和 Web 前端进行交互的数据库中, 例如, 当通过Web 前端(或者API)新增一个监控项时, 会被添加到数据库的监控项表, 然后, Zabbix server 以每一分钟的频率查询监控项表中的有效项时, 会被添加到数据库的监控项表里, 然后, Zabbix Server 以没分钟一次的查询频率查询监控项表中的有效项, 接着春处在Zabbix Server 中的缓存里, 也会就是说Zabbix 前端做任何更改都是需要花费两分钟才能显示最新的数据段原因.
2. Agent
Zabbix agent 部署在被监控目标上, 以主动监控本地资源和应用程序(硬盘, 内存, 处理器统计信息等)
Zabbix agent 收集本地的操作信息并将数据报告给Zabbix server 用于进一步处理, 一旦出现异常(例如硬盘空间已满, 或服务进程崩溃), Zabbix server 会主动报告给管理员指定机器的异常.
agent 拥有两种数据采集方式.
- 主动检测
- agent 应答数据请求, Zabbix server(或proxy) 询求数据, 如 CPU load, 然后 agent 返回结果.
- 主动检测
- 主动检测处理过程相对复杂, Agent 必须首先从 Zabbix server 索取监控项列表以进行独立处理, 然后定期发送采集信息给 Zabbix server.
执行 被动或主动检测 的通过选择相应的监控项类型 来配置的.
3. Proxy
- 概述
Zabbix proxy 是一个或多个受监控设备采集数据并将信息发送到 Zabbix server 进程, 主要是代表Zabbix Server 工作, 所有收集的数据在本地缓存, 然后传输到proxy 所属的 server.
部署 Zabbix proxy 是可选择, 但可能非常有利于分担单个Zabbix server 的负载, 如果只有代理采集数据, 那么server 上会减少CPU 和磁盘 I/O 的开销.
1.4 Zabbix 的 Sender和 Get
Zabbix 提供了两个独立的命令行程序, 用于 发送和接收 数据到server处理.
- Sender agent中使用的, 用于发送数据到 server
- get server端使用, 用于与 agent通讯, 获取需要的信息
2. Zabbix 的安装
2.1 安装方法
2.1.1 获取Zabbix
- 官网下载地址
https://www.zabbix.com/cn/download
2.1.2 从 软件的发行包安装
- 官网提供了 zabbix 的二进制发行包, 可以使用yum 安装, 现在配资
RHEL 7:
# rpm -ivh http://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
RHEL 6:
# rpm -ivh http://repo.zabbix.com/zabbix/4.0/rhel/6/x86_64/zabbix-release-4.0-1.el6.noarch.rpm
RHEL 5:
# rpm -ivh http://repo.zabbix.com/zabbix/4.0/rhel/5/x86_64/zabbix-release-4.0-1.noarch.rpm
- 安装 Server/proxy/web 并且使用 MySQL 数据库
# 安装 Zabbix server
yum install zabbix-server-mysql
# 安装 Zabbix proxy
yum install zabbix-proxy-mysql
# 安装 Zabbix web 前端
yum install zabbix-web-mysql
2.1.3 从源码包安装
-
从官网下载源码包
https://www.zabbix.com/download_sources
配置源码
# 查看支持的配置项
./configure --help
# 配置server 和 proxy 的源码
./configure --enable-server --enable-agent --enable-proxy --with-mysql --enable-net-snmp --with-libcurl --with-libxml2
# 配置serer 源代码使用( PostgreSQL 数据库)
./cinfigure -enable-server --with-postgresql --with-net-snmp
# 仅配置agent
./configure --enable-agent
2.2 安装zabbix
- server 端安装 和 web端
[root@node10009 ~]# yum -y install zabbix-server-mysql zabbix-server-web
....
Installed:
zabbix-server-mysql.x86_64 0:4.0.3-1.el7 zabbix-web-mysql.noarch 0:4.0.3-1.el7
Dependency Installed:
OpenIPMI-libs.x86_64 0:2.0.23-2.el7 OpenIPMI-modalias.x86_64 0:2.0.23-2.el7 fping.x86_64 0:3.10-4.el7
gnutls.x86_64 0:3.3.29-8.el7 iksemel.x86_64 0:1.4-2.el7.centos libtool-ltdl.x86_64 0:2.4.2-22.el7_3
net-snmp-libs.x86_64 1:5.7.2-37.el7 nettle.x86_64 0:2.7.1-8.el7 trousers.x86_64 0:0.3.14-2.el7
unixODBC.x86_64 0:2.3.1-11.el7
Complete!
- agent 安装
[root@node10011 app]# yum -y install zabbix-agent
...
Installed:
zabbix-agent.x86_64 0:4.0.3-1.el7
Complete!
- server 创建数据库 和数据库用户
[root@node10009 ~]# cp /usr/share/doc/zabbix-server-mysql-4.0.3/create.sql.gz /opt/backup/
[root@node10009 ~]# cd /opt/backup/
[root@node10009 backup]# gunzip create.sql.gz
[root@node10009 backup]# ls create.sql
create.sql
[root@node10009 backup]# mysql -uroot -p
...
MySQL [(none)] > CREATE DATABASE zabbix DEFAULT CHARACTER SET='utf8';
Query OK, 1 row affected (0.01 sec)
MySQL [(none)] > GRANT ALL ON zabbix.* TO 'zabbix'@'localhost' IDENTIFIED BY 'zabbix';
Query OK, 0 rows affected, 1 warning (0.00 sec)
MySQL [(none)] > FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
MySQL [(none)] > \q
Bye
[root@node10009 backup]# mysql -uroot -p zabbix < create.sql
Enter password:
[root@node10009 backup]#
- 配置 web
[root@node10009 backup]# cp -r /usr/share/zabbix/ /opt/case/
[root@node10009 backup]#
[root@node10009 backup]# /opt/app/nginx/sbin/nginx
[root@node10009 backup]# /opt/app/php7/sbin/php-fpm
- 编辑nginx 配置文件
[root@node10009 backup]# vim /opt/app/nginx/conf/conf.d/server.conf
...
server {
listen 82;
server_name localhost;
root /opt/case/zabbix;
index index.html index.php;
charset utf8;
access_log logs/zabbix.access.log;
error_log logs/zabbix.error.log;
location ~ .*\.php$ {
root /opt/case/zabbix;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /opt/case/zabbix/$fastcgi_script_name;
include fastcgi_params;
}
}
- zabbix 初始化
- 有部分参数设置需要修改
- 完成配置
3. Zabbix 配置
3.1 账户相关
- 登陆
- zabbix 默认管理员账户为
Admin
, 密码为zabbix
- zabbix 默认管理员账户为
- 修改默认账户和账户密码和添加账户
3.2 添加主机
- 客户端启动服务
- 客户端即为 agent
- 客户端修改配置文件
vim /etc/zabbix/zabbix.agent.conf
...
Server=192.168.10.9 # zabbix-server 的地址
ServerActive=192.168.10.9 # 主动提交模式的 提交地址(一般函数Zabbix-server 或则 zabbix-proxy)
Hostname=node10011 # 这台主机的主机名
...
- 启动服务
[root@node10011 ~]# ss -tanp | grep zabbix
LISTEN 0 128 *:10050 *:* users:(("zabbix_agentd",pid=1646,fd=4),("zabbix_agentd",pid=1645,fd=4),("zabbix_agentd",pid=1644,fd=4),("zabbix_agentd",pid=1643,fd=4),("zabbix_agentd",pid=1642,fd=4),("zabbix_agentd",pid=1641,fd=4))
LISTEN 0 128 :::10050 :::* users:(("zabbix_agentd",pid=1646,fd=5),("zabbix_agentd",pid=1645,fd=5),("zabbix_agentd",pid=1644,fd=5),("zabbix_agentd",pid=1643,fd=5),("zabbix_agentd",pid=1642,fd=5),("zabbix_agentd",pid=1641,fd=5))
[root@node10011 ~]#
3.3 Zabbix 监控相关
- 主机
- Zabbix中主机(Host) 就是想要监控的一个实体(物理的,或虚拟的), 可以是服务器, 物理交换机, 或者KVM.
- 主机组
- 主机的逻辑组, 可以包含主机和 模板, 一个主机组里面的主机和模板没有任何 直接的关联, 是用于在为用户分配权限时使用的.
- 监控项
- 监控项时 Zabbix中获得数据的一个基础, 没有监控项, 就没有数据, 因为一个主机中只有监控项定义了单一的指标或者想要获得的数据.
- 如: 可用内存, cpu1分钟负载, 进程数 等等. 也可以是: icmp 丢包率, 网络流量, 数据库的一条查询.
- 应用集
- 一组监控项的逻辑分组,
- 如: 一个较
MySQL服务器
的应用集, 关联了MySQL 服务器的相关的所有监控项: mysql 的可用性, 磁盘空间, 处理器负载, 每秒事务数, 慢查询数
- 触发器
- 触发器是用于对收集到的数据 做自动评估, 触发器包含一个表达式, 这个表达式表示该项数据可以接受的最大阈值级别.
- 如果数据达到/超过 这个级别, 触发器将会被触发, 进入异常'Problem'状态, 从而引起注意, 当数据恢复到合理状态时, 触发器会恢复到 正常'ok' 状态.
- 模板
- 一组可以用到多个主机上的实体(监控项, 触发器, 图形, 聚合图形, 应用, LLD, Web场景) 的集合,
- 模板的应用使得主机上的监控项可以快速部署, 也可以使得监控任务批量修改更加简单, 模板关联到每个单独的主机上
- Web 场景
- 用于检查网站的可浏览性, 可以用于判断一个或多个 HTTP 请求的响应状态码, 或则响应时间, 下载速度等等.
3.4 主机管理
- 添加主机
- 管理>主机>添加主机
3.4 模板管理
- 模板是可以方便的应用于多个主机的一组实体, 实体可以包含:
- 监控项
- 触发器
- 图形
- 应用
- 聚合图形
- 添加模板
3.5 配置自定义监控项
- 概述
- 用户可以在 agent 上自定义监控项,
- 需要编写一个命令来检索需要的数据, 包含在配置文件的 用户自定义参数(
UserParameter
)中 - 配置定义参数 需要开启
UnsafeUserParameter
配置UnsafeUserParameter=1
- 用户自定义参数语法:
UserParameter=<key>,<command>
- 自定义参数 除了需要配置命令, 还需要包含一个key, 这个key 是用于配置监控项时使用, key 是一台主机中是唯一的,
- 配置完成后需要重启 agent, 并且在web 中添加配置项时 需要用户输入自定义的 key, 且可以携带参数来引用
- 配置
- 编辑脚本
[root@node10011 ~]# mkdir /opt/shell/zabbix/
[root@node10011 ~]# vim /opt/shell/zabbix/check_mysql.sh
[root@node10011 ~]# chmod 755 /opt/shell/zabbix/check_mysql.sh
[root@node10011 ~]# cat/opt/shell/zabbix/check_mysql.sh
#!/bin/sh
res=`/opt/bin/mysqladmin -uroot -p123 ping 2> /dev/null | grep -c alive`
echo $res
[root@node10011 ~]# /opt/shell/zabbix/check_mysql.sh
1
[root@node10011 ~]#
- 编辑配置文件
vim /etc/zabbix/zabbix_agent.conf
...
UnsafeUserParameters=1
UserParameter=check_mysql[*],/opt/shell/zabbix/check_mysql.sh
...
- server端检测
[root@node10009 nginx]# zabbix_get -s 192.168.10.11 -p 10050 -k check_mysql
1
[root@node10009 nginx]#
3.6 配置邮件告警
- 编辑发送邮件的脚本
[root@node10009 nginx]# vim /usr/lib/zabbix/alertscripts/send_mail.py
[root@node10009 nginx]#
- 编辑用户权限
- 用户需要对所组 有读写权限
- 编辑动作
- 测试
- agent 端关闭mysql
[root@node10011 ~]# mysqld.sh stop
Shutdown MySQL...
SUCESS! MySQL Stop [ OK ]
- 邮箱
END