zabbix 简介

Zabbix 是一个企业级的分布式开源监控方案。

Zabbix 是一款能够监控各种 网络参数 以及 服务器健康性完整性 的软件。Zabbix 使用灵活的通知机制,允许用户为几乎任何事件配置 基于邮件 的告警。这样可以快速反馈服务器的问题。基于已存储的数据,Zabbix 提供了出色的报告和数据可视化功能。这些功能使得 Zabbix 成为容量规划的理想方案。

Zabbix 支持 主动轮询被动捕获。Zabbix 所有的报告、统计信息和配置参数都可以通过基于Web的前端页面进行访问。基于Web的前端页面可以确保您从任何方面评估您的网络状态和服务器的健康性。适当的配置后,Zabbix可以在IT基础架构监控方面扮演重要的角色。对于只有少量服务器的小型组织和拥有大量服务器的大型公司也同样如此。

Zabbix 使用 MySQL、PostgreSQL、SQLite、Oracle 或 IBM DB2 储存资料。管理端基于 C 语言,Web 前端则是基于 PHP 的。Zabbix 可以使用多种方式监视。不安装受控端也可以使用,亦可基于 SMTP 或 HTTP 等各种协议做死活监视。在受控端如 UNIX、Windows 中安装 Zabbix Agent 之后,可监视 CPU 负载、网络使用情况、磁盘容量等信息。即使不安装受控端,Zabbix 也可以使用 SNMP、TCP、ICMP 协议来检查,还可以利用 IPMI、SSH、telnet 对目标进行监视。

Zabbix 的结构

Zabbix 由几个主要的软件组件构成,这些组件的功能如下。

管理端

Zabbix server 是受控端程序报告系统可用性、系统完整性和统计数据的核心组件,是所有配置信息、统计信息和操作数据的核心存储器。

数据库存储

所有配置信息和 Zabbix 收集到的数据都被存储在数据库中。

Web 界面

即 Zabbix 前端,是用 PHP 开发的,它 依赖于 LAMP 平台,如果系统当前没有安装对应的软件,如 apache,它会自动安装。

为了从任何地方和任何平台都可以轻松的访问 Zabbix, 我们提供基于 Web 的 Zabbix 界面。该界面是 Zabbix Server 的一部分,通常(但不一定)跟 Zabbix Server 运行在同一台物理机器上。

如果使用 SQLite, Zabbix Web 界面必须要跟 Zabbix Server 运行在同一台物理机器上。

image-center

代理服务器

Zabbix proxy 可以代替 Zabbix Server 收集性能和可用性数据。Proxy 是 Zabbix 软件可选择部署的一部分;当然,Proxy 可以帮助单台 Zabbix Server 分担负载压力。

受控端

Zabbix agents,监控受控端部署在监控目标上,能够主动监控本地资源和应用程序,并将收集到的数据报告给 Zabbix Server。

虽然 agent 也译为 “代理”,但为了避免与 proxy 的 “代理” 混淆,我们这里译为受控端。

数据流

此外,了解 Zabbix 内部的数据流同样很重要。

监控方面,为了创建一个用于采集数据的监控项(item),必须先创建一个主机(host)。

告警方面,在监控项里创建触发器(trigger),通过触发器(trigger)来触发告警动作(action)。 因此,如果你想收到 _Server X_CPU 负载过高的告警,你必须:

  1. Server X 创建一个 host 并关联一个用于对CPU进行监控的监控项(Item)。
  2. 创建一个 Trigger,设置成当 CPU 负载过高时会触发
  3. Trigger 被触发,发送告警邮件

虽然看起来有很多步骤,但是使用模板的话操作起来其实很简单,Zabbix 这样的设计使得配置机制非常灵活易用。

主要特点

Zabbix 是一个高度集成的网络监控解决方案,一个简单的安装包中提供多样性的功能。

数据收集
  • 可用性和性能检查
  • 支持 SNMP(包括主动轮训和被动获取),IPMI,JMX,VMware监控
  • 自定义检查
  • 按照自定义的间隔收集需要的数据
  • 通过 server/proxy + agents 来执行
灵活的阈值定义
  • 您可以非常灵活的定义问题阈值,称之为触发器,触发器从后端数据库获取参考值
高度可配置化的告警
  • 可根据递增机制,接收方和媒介类型自定义发送告警通知
  • 使用宏变量可以使告警通知更加高效有用
  • 自动相应动作可包含远程命令
实时图表绘制
  • 使用内置图表绘制功能可以将监控项的内容实时绘制成图表
Web 监控功能
  • Zabbix 可以追踪模拟鼠标在 Web 网站上的点击操作,来检查 Web 的功能和响应时间
丰富的可视化选项
  • 支持创建自定义的图表,一个试图集中展现多个监控项
  • 网络拓扑图
  • 以仪表盘的样式自定义大屏展现和幻灯片轮询播放
  • 报表
  • 监控内容的高级(业务)视图
历史数据存储
  • 数据库数据
  • 可配置历史数据
  • 内置数据管理机制(housekeeping)
配置简单
  • 将被监控对象添加为主机
  • 在数据库中获取主机进行监视
  • 应用模板来监控设备
使用模板
  • 在模板中分组检查
  • 模板可以关联其他模板
网络发现
  • 自动发现网络设备
  • 监控代理自动注册
  • 发现文件系统,网络接口和 SNMP OID 值
快捷的Web界面
  • PHP Web前端
  • 可从任何地方访问
  • 你可以定制自己的操作方式
  • 审核日志
Zabbix API
  • Zabbix API 为 Zabbix 提供了对外的可编程接口,用于批量操作,第三方软件集成和其他目的
权限管理系统
  • 安全用户认证
  • 特定用户可以限制访问特定的视图
功能强大,易于扩展的 agent
  • 部署在被监控对象上
  • 支持 Linux 和 Windows
二进制代码
  • 为了性能和更少内存的占用,用 C 语言编写
  • 便于移植
为复杂环境准备
  • 使用 Zabbix proxy 代理服务器,使得远程监控更简单

Zabbix 的安装

在 CentOS 7 中安装 Zabbix。

添加 Zabbix 仓库

$ sudo rpm -ivh https://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm

安装

安装 Zabbix server

$ sudo yum install zabbix-server-mysql

安装 Zabbix porxy

$ sudo yum install zabbix-porxy-mysql

安装 Zabbix frontend

$ sudo yum install zabbix-web-mysql

安装 Zabbix agent

$ sudo yum install zabbix-agent

创建数据库

Zabbix server 和 proxy 这两个 daemon 运行时是需要数据库的支持的,而 Zabbix agent 则不需要。

如果 Zabbix server 和 proxy 安装于同一台主机,它们必须使用不同的数据库。

CREATE DATABASE zabbix DEFAULT CHARSET utf8;

建议设定字符集为 utf8,否则切换到中文会乱码。

创建数据库用户,并为其授权:

GRANT ALL ON zabbix.* TO 'zabbix'@'localhost' IDENTIFIED BY 'zabbix';
FLUSH PRIVILEGES;

导入数据

为 zabbix server 导入初始化数据:

$ zcat /usr/share/doc/zabbix-server-mysql-3.4.14/create.sql.gz | mysql -uzabbix -p zabbix

为 zabbix proxy 导入初始化数据:

$ zcat /usr/share/doc/zabbix-server-mysql-3.4.14/schema.sql.gz | mysql -uzabbix -p zabbix

为 server/porxy 配置数据库

修改 /etc/zabbix/zabbix_server.conf/etc/zabbix/zabbix_proxy.conf

$ sudo vi /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=<password>

启动 Zabbix server

$ sudo systemctl start zabbix-server
$ sudo systemctl enable zabbix-server

配置 Zabbix 前端

对于 CentOS 7 来说,zabbix 前端的 apache 配置文件为 /etc/httpd/conf.d/zabbix.conf

在安装过程中,已经进行了一些 PHP 的配置,但仍然需要手动将时区的参数去掉注释:

/etc/php.ini

php_value max_execution_time 300
php_value memory_limit 128M
php_value post_max_size 16M
php_value upload_max_filesize 2M
php_value max_input_time 300
php_value max_input_vars 10000
php_value always_populate_raw_post_data -1
# php_value date.timezone Asia/Shanghai

配置 SELinux

如果启用了 SELinux,则需要进行以下操作:

$ sudo setsebool -P httpd_can_connect_zabbix on
$ sudo setsebool -P httpd_can_network_connect_db on

重启 apache

在修改了前端与 SELinux 的配置以后,需要重启 apache。

$ sudo systemctl restart httpd

SELinux 问题

此时如果查看 zabbix 的状态,会发现 zabbix 无法正常启动。

查看日志:

$  tail /var/log/zabbix/zabbix_server.log
 35144:20181018:151611.687 cannot start alert manager service: Cannot bind socket to "/var/run/zabbix/zabbix_server_alerter.sock": [13] Permission denied.
 35145:20181018:151611.687 server #30 started [preprocessing manager #1]
 35145:20181018:151611.687 cannot start preprocessing service: Cannot bind socket to "/var/run/zabbix/zabbix_server_preprocessing.sock": [13] Permission denied.

SELinux 仍然在限制着 zabbix 的正常启动。

为 zabbix server 创建 SELinux 策略

$ sudo cat /var/log/audit/audit.log | grep zabbix_server | grep denied | audit2allow -M zabbix_server.limits
******************** IMPORTANT ***********************
To make this policy package active, execute:

semodule -i zabbix_server.limits.pp

会生成两个文件:zabbix_server.limits.ppzabbix_server.limits.te

文件内容:

$ cat zabbix_server.limits.te

module zabbix_server.limits 1.0;

require {
    type zabbix_var_run_t;
    type zabbix_t;
    class sock_file create;
}

#============= zabbix_t ==============
allow zabbix_t zabbix_var_run_t:sock_file create;

加载该 SELinux 策略:

$ sudo semodule -i zabbix_server.limits.pp

为 MySQL 创建 SELinux 策略

$ sudo cat /var/log/audit/audit.log | grep zabbix_server | grep denied | audit2allow -M zabbix_server.ports
******************** IMPORTANT ***********************
To make this policy package active, execute:

semodule -i zabbix_server.ports.pp

这一次会生成另外两个文件:zabbix_server.ports.ppzabbix_server.ports.te

文件内容:

$ cat zabbix_server.ports.te

module zabbix_server.ports 1.0;

require {
    type zabbix_var_run_t;
    type zabbix_t;
    class sock_file create;
}

#============= zabbix_t ==============

#!!!! This avc is allowed in the current policy
allow zabbix_t zabbix_var_run_t:sock_file create;

加载该 SELinux 策略:

$ sudo semodule -i zabbix_server.ports.pp

重新启动 zabbix :

$ sudo systemctl restart zabbix-server

进入前端进行配置

到这一步,一切顺利的话,应该可以通过浏览器访问前端了,如 http://192.168.1.103/zabbix。

image-center

检查安装环境

确保所有条件都已经满足 zabbix 的运行:

image-center

配置数据库

image-center

配置 zabbix server

image-center

server 的名称是可选的,如果输入名称,随后会在菜单栏页面标题中显示。

安装信息总览

image-center

生成配置文件

之前的步骤会自动生成一个配置文件,将其保存为 /etc/zabbix/web/zabbix.conf.php

image-center

登陆 zabbix

image-center

安装完毕,默认用户名为 Admin,密码为 zabbix。