#zabbix 基本
一. 监控的重要性
应用运维的三大任务之一: 故障处理. 如何找到故障就成了一个问题.
通过客户反馈可以得知故障的发生, 但是从客户感知到故障到提交故障可能周期很长. 因为有些客户即使发现了无法访问服务也不会提交故障.
即使客户提交故障了, 还需要从客户的描述中找出故障发生的位置, 这中间可能还需要很长的时间.
这时, 我们就需要一个能随时监控系统并提供报警功能的软件了.
二. 监控的项目有哪些
我们的整个应用系统包括硬件和软件两大部分.
硬件: 包括主机, 交换机, 路由器, 网线等各种肉眼能看得到的设备.
软件: 提供服务的各种软件, 各项软件的相关指标, 系统使用率等
以上无论哪个部分发生故障都可能导致业务的中断.
并且因业务系统访问压力的增大, 对系统资源的使用率持续上升, 直至上升到系统资源完全被占用导致业务不可用, 这种情况也是非常有必要注意的. 这种情况下, 就需要我们通过向外扩展增加提供服务的主机, 来减轻系统的压力.
三. 监控系统的实现:
数据采集
在对一个应用系统进行监控时, 各项数据可以通过系统内建的接口获取信息, 也可以自己收集, 有时数据采集后还需要计算. 如 ifconfig 中 RX packets 是一个累加数据, 单纯采集数据无实际意义, 我们需要的单位时间内的数量, 这种情况下就需要进行计算.
需要监控的指标项:
通用指标项: 许多服务都需要监控的项目, 可定义为模板使用
自定义监控指标: 通用监控指标不够用, 可自定义一些需要关注的指标, 并且还可以再定义为模板使用.
数据采集的方式:
可通过侵入式: 如在需监控的主机上安装 agent.
通过非侵入式: 不需要安装 agent. 基于 SSH,telnet 实现.
若监控系统布署好之后, 系统内又新增了主机, 为了方便新增监控主机, 监控系统有自动发现能力. 自动发现的方式通常有以下两种:
可以自动发现网络中新加入的主机, 并基于某种认证机制进行监控.
可以自动发现主机中的服务, 对于后期新增的服务也可自动发现
数据存储
监控系统获取的各项指标数据需要保存在本地磁盘上, 若是零散的数据, 对统计和查看都各种不方便, 故可保存在自开发的数据系统中, 也可以使用现有的数据系统.
zabbix 使用 MySQL 和 pgsql, 因这些数据系统自身的局限性, 在某些大型场景下, 数据库很容易成为系统瓶颈.
定义合理的阈值区间并向有能力处理的人发出警告
前提: 基于某个监控项的某个采集数据高于合理阈值范围. 这就需要长期对系统监控, 并调整各项指标项的阈值. 之后再根据阈值, 设定一个布尔表达式, 满足条件时 (true) 就发出警告.
另外还可以借助一些配置系统, 在警告前做出一些自愈操作. 如重启服务等.
数据可视化处理
人类在几千年的进化中, 并没有进化为擅长处理数据的物种. 所以就需要把数据以流式化方式处理为图表, 以便于人处理数据.
四. 现有监控系统简单比较:
cacti: 基于 snmp, 结合 crontab 采集数据, 把采集的数据存入 rrd(round robin databases)数据库. 且 cacti 的报警功能弱暴了. 通常配合 nagios 使用. 但这两种数据库结合使用经常会出现各种问题.
rrd 数据库保存下来的数据只有一定时长的. 如保存一年的数据, 无论什么时候看, 只能看到一整年的数据, 之前的数据全部被删除.
nagios: 周期性采集数据, 采集后立即判定数据是否达到指定的阈值, 达到或超过就告警, 达不到就把数据丢掉.
zabbix: 传统意义上的监控系统
内建有数据采集功能, 存储数据借助于 MySQL(pgsql)实现.
告警: 告警前可做阈操作. 有报警升级操作. 先给处理人员告警, 过一小时未处理好, 向上一级领导告警, 再过一小时未处理好, 再向更上一级领导告警.
可通过流式化处理把数据以图形化方式显示出来.
五. zabbix 的特性:
数据采集:
zabbix 可通过 snmp, SSH/telnet, agent, ipmi, jmx(java Management eXtensions)等方式采集数据, 也可自定义采样机制(基于 agent 实现).
告警:
告警前可做阈操作.
告警升级机制:
先给处理人员告警, 过一小时未处理好, 向上一级领导告警, 再过一小时未处理好, 再向更上一级领导告警.
数据存储:
支持 MySQL 及 pgsql
数据展示:
通过流式化处理把数据以图形化方式显示出来.
实时绘图: graph, screen, slide show, map
另外还支持模板, 网络自动发现, 分布式监控
六. zabbix 的架构体系:
zabbix_server: 服务端守护进程: 负责数据采集
zabbix_agentd:agent 守护进程;
zabbix_proxy: 代理服务器, 可选组件;
zabbix_get: 命令行工具, 手动测试向 agent 发起数据采集请求;
zabbix_sender: 命令行工具, 运行于 agent 端, 手动向 server 端发送数据;
zabbix_java_gateway: java 网关;
zabbix_database: 统一存储, 监控数据及配置. MySQL 或 PostgreSQL;
zabbix_web: 图形化界面, 可查看数据, 可管理 zabbix
zabbix proxy: 采集数据, 发送给 zabbix server. 分布式监控的实现, 小型网络没必要用.
七. 各种安装包:
zabbix-agent: 被监控端需要安装的组件
get 和 sender: 手动测试的命令行工具
zabbix-java-gateway:zabbix 监控 java 程序所需要安装的包
zabbix-proxy-MySQL,zabbix-proxy-sqlite3:zabbix 代理端通过什么数据库存储, 就安装哪个组件
zabbix-server-MySQL,zabbix-server-pgsql: zabbix 服务端基于 MySQL 和 pgsql 做存储所需要的包
zabbix-Web: 提供 zabbix-gui 接口
八. zabbix 逻辑组件:
主机组(hostgroups): 根据功能定义
主机 (host)
监控项(item)
key: 实现获取监控的目标上的数据的命令或脚本的名称;
应用(application): 同一类监控项的集合;
触发器(trigger): 表达式; PROBLEM, OK;
事件(event):
动作 (action): 由条件(condition) 和操作 (operation) 组件;
媒介(media): 发送通知的通道;
通知(notification):
远程命令(remote command):
报警升级():
模板(template): 快速定义被监控主机的各监控项的预设项目集合;
图形(graph): 用于展示历史数据或趋势数据的图像;
屏幕(screen): 由多个 graph 组成;
维护周期(maintenance)
周期性数据采集的(zobbix poller)
添加主机的方式:
手动添加主机: 分成组, 向组上的主机套模板. zabbix 定义被监控项, 监控项定义触发器, 根据触发器触发事件(一个触发器上可以触发多个事件).actions 上定义事件. 满足触发器条件触发事件.
自动发现: 通过 ansible 或 cobbler 安装 agent,zabbix-server 自动扫描主机, 通过 ping, 若回应 pong, 添加到主机列表并套用模板.
九. zabbix 的安装:
安装 Repository
# rpm -i http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm
也可直接创建 repo 文件, 使用如下 repo 内容:
以下为 repo 文件内容:
- [zabbix] #提供了 zabbx 各种功能包.
- name=Zabbix Official Repository - $basearch
- baseurl=https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/
- enabled=1
- gpgcheck=0
- gpgkey=http://repo.zabbix.com/RPM-GPG-KEY-ZABBIX
- [Zabbix Official Repository] #提供了 iksemel 及 fping.
- name=Zabbix Official Repository
- baseurl=http://repo.zabbix.com/non-supported/rhel/7/x86_64/
- enabled=1
- gpgcheck=0
- gpgkey=http://repo.zabbix.com/RPM-GPG-KEY-ZABBIX
若不添加 Zabbix Official Repository, 安装 zabbix 时会出现如下提示:
- Error: Execution of '/bin/yum -d 0 -e 0 -y install zabbix-server-mysql' returned 1: Error: Package: zabbix-server-2.4.8-1.el7.x86_64 (zabbix-2.4)
- Requires: iksemel
- Error: Package: zabbix-server-MySQL-2.4.8-1.el7.x86_64 (zabbix-2.4)
- Requires: libiksemel.so.3()(64bit)
- You could try using --skip-broken to work around the problem
- You could try running: rpm -Va --nofiles --nodigest
安装 Zabbix server, frontend, agent(若所有主机都在一个局域网内, 可不安装 zabbix-proxy-MySQL)
# yum -y install zabbix-server-MySQL zabbix-proxy-MySQL zabbix-Web-MySQL zabbix-agent mariadb-server
初始化数据库
提示: 如果 Zabbix server 和 Zabbix proxy 安装在相同的主机, 它们必须创建不同名字的数据库!
默认情况下, zabbix server 配置文件中的 DBName 是 zabbix,zabbix proxy 配置文件中 DBName 是 zabbix_proxy.
创建用户
- # MySQL -uroot -p
- password
- MySQL> create database zabbix character set utf8 collate utf8_bin;
- MySQL> create database zabbix_proxy character set utf8 collate utf8_bin; #可选
- MySQL> grant all privileges on zabbix.* to zabbix@localhost identified by 'password';
- MySQL> grant all privileges on zabbix_proxy.* to zabbix@localhost identified by 'password'; #可选
- MySQL> flush privileges;
- MySQL> quit;
初始化数据库
- [root@lxk ~]# cd /usr/share/doc/zabbix-proxy-MySQL-4.0.2/
- [root@lxk zabbix-proxy-MySQL-4.0.2]# zcat schema.sql.gz> schema.sql #可选
- [root@lxk zabbix-proxy-MySQL-4.0.2]# cd ../zabbix-server-MySQL-4.0.2/ #可选
- [root@lxk zabbix-server-MySQL-4.0.2]# zcat create.sql.gz> create.sql
- [root@lxk zabbix-server-MySQL-4.0.2]# MySQL -uroot -hlocalhost -p
- MariaDB [(none)]> use zabbix_proxy; #可选
- MariaDB [zabbix_proxy]> source /usr/share/doc/zabbix-proxy-MySQL-4.0.2/schema.sql; #可选
- MariaDB [zabbix_proxy]> use zabbix;
- MariaDB [zabbix]> source /usr/share/doc/zabbix-server-MySQL-4.0.2/create.sql;
为服务端指定数据库密码
编辑 /etc/zabbix/zabbix_server.conf 以及 / etc/zabbix/zabbix_proxy.conf, 把其中的 DBPassword 值改为对应密码
DBPassword=password
设置时区
编辑 /etc/httpd/conf.d/zabbix.conf, 设置时区
# php_value date.timezone Asia/Shanghai
启动 zabbix 服务端和 agent 线程
- # systemctl restart zabbix-server zabbix-agent httpd
- # systemctl enable zabbix-server zabbix-agent httpd
修改 / usr/share/zabbix
[root@nfs zabbix]# chown -R apache.apache ../zabbix/
图形化安装:
访问 zabbix-server
http://zabbix-server IP/zabbix/setup.PHP
配置完成后配置文件会保存在以下文件
/etc/zabbix/Web/zabbix.conf.PHP
安装完成后, 默认用户为 Admin, 默认密码为 zabbix
十. 服务端基本配置:
- [root@nfs ~]# grep "^[^[:space:]]#\+" /etc/zabbix/zabbix_server.conf
- ############ GENERAL PARAMETERS #################
- ### Option: ListenPort #服务监听的端口
- ### Option: SourceIP #服务器端若有多个地址, 使用哪个地址与 agent 端连接.
- ### Option: LogType #指明日志保存位置, syslog, 文件, 标准输出
- ### Option: LogFile #日志保存的文件名
- ### Option: LogFileSize #日志文件大小, 超出大小自动滚动, 0 为不限制大小.
- ### Option: DebugLevel #debug 级别, 详见配置文件解释. 一般为 3
- ### Option: PidFile #PID 文件位置
- ### Option: SocketDir #基于 UNIX SOCKET 通讯时的 SOCKET 文件位置
- ### Option: DBHost #数据库 IP
- ### Option: DBName #数据库名称
- ### Option: DBSchema #数据库方案, 即 MySQL 还是 pgsql
- ### Option: DBUser #连接数据库的用户
- ### Option: DBPassword #连接数据库用户的密码
- ### Option: DBSocket #DBSocket 位置
- ### Option: DBPort #数据库端口
- ### Option: HistoryStorageURL #
- ### Option: HistoryStorageTypes #
十一. zabbix-agent 端配置:
[root@nfs ~]# grep "^[^[:space:]]####\+" /etc/zabbix/zabbix_agentd.conf
一般参数
############ GENERAL PARAMETERS #################
被动检查相关
##### Passive checks related
主动检查相关
##### Active checks related
高级配置
############ ADVANCED PARAMETERS #################
自定义监控参数
####### USER-DEFINED MONITORED PARAMETERS #######
加载的模块
####### LOADABLE MODULES #######
安全认证相关: 局域网内无需配置
- ####### TLS-RELATED PARAMETERS #######
- GENERAL PARAMETERS
- ### Option: PidFile #PID 文件路径
- ### Option: LogType #日志类型
- ### Option: LogFile #日志文件位置
- ### Option: LogFileSize #日志文件大小
- ### Option: DebugLevel #debug 级别
- ### Option: SourceIP #与 server 端连接的 IP 地址
- ### Option: EnableRemoteCommands #是否允许远程命令
- ### Option: LogRemoteCommands #远程命令是否记录在日志中.
- Passive checks related
- ### Option: Server #server 端 IP
- ### Option: ListenPort #server 端端口
- ### Option: ListenIP #agent 监听的地址
- ### Option: StartAgents #启动几个 agent
- Active checks related
- ### Option: ServerActive
- ### Option: Hostname
- ### Option: HostnameItem
- ### Option: HostMetadata
- ### Option: HostMetadataItem
- ### Option: RefreshActiveChecks
- ### Option: BufferSend
- ### Option: BufferSize
- ### Option: MaxLinesPerSecond
十二. 启动 zabbix-agent:
server 端的 agent 无需设置选项, 安装好之后纳入 server 端监控的方法:
直接启动 agent--> 在 zabbix-server 的 Web-gui 页上点击 configuration --> hosts. 找到 Zabbix server 并点击 disabled --> 在弹出的消息中点击 enable.
zabbix server 的 Availability 列会显示当前采集数据的方式. ZBX 为通过 zabbix-agent 方式.
来源: http://www.bubuko.com/infodetail-2928966.html