- Zabbix简要介绍
- Zabbix的监控配置
- Zabbix的展示接口
- templates,模板
- macros,宏
一、Zabbix简要介绍:
(一)监控系统的四种基本功能:
(1)采样:
- 数据采集通道:SNMP, ssh, telnet, IPMI, agent, JMX(Java Management eXtension)
(2)存储:
- 数据:历史数据、趋势数据
- 存储系统:关系型数据库(MySQL),rrd(round-robin database),No-SQL数据库(时间序列存储)
(3)报警:
- 可以通过脚本执行操作
- 媒介:邮件,短信,即时通讯工具
(4)展示:直观的可视界面
(二)Zabbix的特征
数据采样:
数据采集通道:snmp, ssh/telnet, agent, ipmi, jmx(java Management eXtensions)
自定义采样机制:UserPrameter(基于agent实现)报警:根据设定的条件,报警可能向更高一级的管理员上报
数据存储:支持mysql/pgsql
展示:
实时绘图:graph, screen, slide show, map支持模板、网络自动发现、分布式监控
(三)Zabbix的逻辑组件
- 主机 (host)
- 主机组(host groups):多台主机组成,方便管理
- 监控项(item)
key:实现获取监控目标上的数据的命令或脚本的名称 - 应用(application):同一类监控项的集合
- 触发器(trigger):监控项符合某种条件的表达式
- 事件(event):触发器条件符合时引发
- 动作(action):分为条件(condition)和操作(operation)组件
通知(notification):通知发生的事件
远程命令(remote command):事件触发动作的一类,在远程主机上执行命令
报警升级:当事件触发动作在规定时间没有发挥作用,可能会向上一级管理员报警
媒介(media):发送通知的通道 - 模板(template):快速定义被监控主机的各监控项的预设项目集合
- 图形(graph):用于展示历史数据或趋势数据的图像
- 屏幕(screen):由多个graph组成
(四)Zabbix的程序组成结构
(1)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:Web GUI
(2)zabbix的安装:
实验1:实现在server端和agent端的zabbix安装
本文中所有实验主机ip情况:
node0.hellopeiyang.com: 192.168.136.230, zabbix agent
node1.hellopieyang.com: 192.168.136.130, zabbix agent
node2.hellopeiyang.com: 192.168.136.131, zabbix server
步骤1-5步骤为zabbix服务器端配置,步骤6-7为zabbix客户端配置
- 步骤1:安装并配置数据库
yum install mariadb-server
vim /etc/my.cnf.d/server.cnf // 配置mysql服务器端参数
skip_name_resolve = ON
innodb_file_per_table = ON
innodb_buffer_pool_size = 256M
max_connections = 2000
systemctl start mariadb.service
mysql_secure_installation
mysql -uroot -pcentos // 创建zabbix数据库并建立专属管理员账户
MariaDB [(none)]> create database zbxdb;
MariaDB [(none)]> grant all on zbxdb.* to 'zbxuser'@'192.168.136.%' identified by 'zbxpass';
- 步骤2:安装zabbix的server端和agent端
wget http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-1.el7.centos.noarch.rpm
rpm -ivh zabbix-release-3.4-1.el7.centos.noarch.rpm // 配置zabbix源的小工具
yum install zabbix-server-mysql zabbix-web zabbix-web-mysql zabbix-agent zabbix-get zabbix-sender
- 步骤3:配置zabbix数据库,生成zabbix数据库的专属表
cp /usr/share/doc/zabbix-server-mysql-3.4.4/create.sql.gz /root/
gzip -d /root/create.sql.gz
mysql -umzbxuser -pzbxpass -h192.168.136.131
MariaDB [(none)]> USE zbxdb;
MariaDB [(zbxdb)]> source /root/create.sql
- 步骤4:修改zabbix的server端配置
cd /etc/zabbix
cp zabbix_server.conf zabbix_server.conf.bak
vim zabbix_server.conf
ListenPort=10051
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_server.pid
SocketDir=/var/run/zabbix
DBHost=192.168.136.131
DBName=zbxdb
DBUser=zbxuser
DBPassword=zbxpass
DBPort=3306
systemctl start zabbix-server
- 步骤5:修改zabbix的web端配置,时区设置
vim /etc/httpd/conf.d/zabbix.conf // 只在zabbix中生效
php_value date.timezone Asia/Shanghai
或者
vim /etc/php.ini // 在所有php应用中生效
date.timezone = Asia/Shanghai
systemctl start httpd
- 步骤6:安装zabbix的agent端
wget http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-1.el7.centos.noarch.rpm
rpm -ivh zabbix-release-3.4-1.el7.centos.noarch.rpm
yum install zabbix-agent zabbix-sender
- 步骤7:配置zabbix的agent端配置
vim /etc/zabbix/zabbix_agentd.conf
##### Passive checks related // 被动监控相关配置
Server=192.168.136.131
ListenPort=10050
ListenIP=0.0.0.0
##### Active checks related // 主动监控相关配置,agent端主动向server周期性发送数据
ServerActive=192.168.136.131
Hostname=node1.hellopeiyang.com // 必须与监控主机的主机名称保持一致
systemctl start zabbix-agent
- 步骤8:此时可以登录监控主机的http服务,完成zabbix的web控制台初始化
浏览器登录:http://192.168.136.131/zabbix
,ip地址为监控主机
在配置数据库连接步骤时,注意按照之前的设置填写,其他按照提示内容配置即可
二、Zabbix的监控配置
(一)监控配置的一般顺序
host groups --> host --> application --> item --> trigger --> action (conditions, operations)
(二)items的设置: key+parameter
(1)key:分为两种
zabbix内建:按照数据采集通道的不同分布不同的类别,如:
agent (server:pull)
agent(active) (agent:push)
snmp v1用户自定义(UserParameter)
(2)采集到的数据的类型:
- 数值:整数,浮点数
- 字符串:字符串,文本
(3)存储的值:
- As is:不对数据做任何处理
- Delta(simple change):本次采样减去前一次采样的值的结果
- Delta(speed per second):本次采样减去前一次采样的值,再除以经过的时长
(三)trigger的配置:
逻辑表达式,通常用于定义数据的不合理区间(阈值)
OK:正常状态
PROBLEM:非正常状态触发器表达式:
{hostname:key[paramters].function(arguments) }触发器存在可调用的函数:
nodata(), last(), date(), time(), now(), dayofmonth()等Severity:严重等级,依次递增
Not classified, Information, Warning, Average, High, Disaster
(四)event事件机制:
(1)四种事件源:
trigger, discovery, auto registration, internal
(2)Media:媒介,告警信息的传递通道
类型:
Email:邮件
Script:自定义脚本
SMS:短信接收信息的目标为zabbix用户:需要用户上定义对应各种媒介通道的接收方式
(3)Action:
- conditions:多个条件之间存在逻辑关系
- operations:条件满足时触发的操作
(4)send message,通知:
-
Media type:传递信息的通道
- Script:报警脚本
脚本放置路径:zabbix_server.conf配置文件中AlertScriptsPath参数定义的路径下,默认/usr/lib/zabbix/alertscripts/
zabbix服务器在调用脚本时,会向其传递三个参数,此三个变量定义为内部宏:
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
信息接收人:
User Groups
Users: Admin
(5)remote command,远程命令:
功能:在agent所在的主机上运行用户指定的命令或脚本
-
前提:在agent需要完成的配置
zabbix用户拥有所需要的管理权限
编辑/etc/sudoers文件,注释如下行
Defaults requiretty
添加如下行:
zabbix ALL=(ALL) NOPASSWD: ALLagent进程要允许执行远程命令
编辑/etc/zabbix/zabbix_agentd.conf,设置如下配置:
EnableRemoteCommands=1
(五)实验:实现监控远程主机
实验2:监控远程主机的nginx服务是否正常运行;若不正常,尝试重启服务;若重启服务仍旧不能使服务恢复运行,则向指定地址发送告警邮件
实验前提:按照实验1的要求,在被监控的远程主机上安装agent端并正确配置
- 步骤1:建立host groups,名为websrvs
- 步骤2:建立hosts,监控主机node0.hellopeiyang.com
- 步骤3:建立items
通过监听80端口确认nginx服务状态,监控间隔时间5s,返回值转换为"Service state"格式,将本item归集至名为"nginx stats"的application中
- 步骤4:建立triggers
严重性定义为"High",当最近3次测试tcp的80端口服务均不可用时,触发本trigger
- 步骤5:建立event前先定义media媒介
本实验报警信息通过email方式发送,故需要配置Media types中email的选项卡
- 步骤6:定义actions
设定执行action的条件是“不处于维护状态,并且触发了nginx服务不可用为真的trigger”
设定支持action的动作:1. 在远程主机重启nginx服务;2. 若执行动作1的60s后仍旧无法恢复正常,则向指定用户发送邮件
定义动作1的具体配置,为了能够成功执行远程命令,还需要在被监控主机上做如下配置
visudo
zabbix ALL=(ALL) NOPASSWD: ALL // 配置sudo权限
vim /etc/zabbix/zabbix_agentd.conf
EnableRemoteCommands=1 // 允许执行远程命令
systemctl restart zabbix-agent
定义动作2的具体配置,注意按照步骤5定义选择媒介
定义异常成功恢复时的操作,此处定义为发邮件
- 步骤7:测试
关闭被监控主机,同时确保不能重启nginx服务。可以在dashboard中看到监控到nginx服务不可用,触发了设置的trigger,同时执行了actions
执行actions的详细情况:先执行重启服务的远程命令失败,60s后发送邮件成功
确认成功接收到了邮件
手动启动nginx服务,dashboard中的监控已经恢复正常,同时acitons数增加1
查看actions具体情况,增加的action为恢复服务发送邮件
确认成功接收到了服务恢复通知邮件
此次确保在nginx服务不可用时远程执行命令重启服务成功;当nginx服务不可用时,自动恢复服务成功,只执行了2个actions
查看actions具体情况,分别是成功执行远程命令重启nginx服务和发送服务恢复通知邮件
三、Zabbix的展示接口
(一)graph:图形
(1)graph的分类:
- simple:默认生成,一张图展示一个item
- custom:自定义,可以将多个item的指标展示在一张图中
(2)实验:实现自定义graph
实验3:自定义一张图,实现在一张图中显示rate of packets(in) 和 rate of packets(out)两个item
- 步骤1:自定义图,Y轴最大值120,rate of packets(in)的绘制风格为渐进色
- 步骤2:在Monitoring=>Graphs中,可以看到自定义的graph
(二)screen:
把多个graph整合于同一屏幕进行展示
-
实验4:实现将多个graph整合在一个screen中
- 步骤1:定义screen的名称"node1 status",2行×2列排布
- 步骤2:分别编辑每个“格子”链接的graph
- 步骤3:最终效果如下
(三)slide show:幻灯片
把多个screen以slide show的方式进行展示
-
实验5:实现多个screen幻灯片方式循环展示
- 步骤1:首先准备好两个以上的screen
- 步骤2:创建slide_shows,包含之前定义的screen,切换间隔5s
(四)map:
- 用于展示网络连接拓扑,直观查看连接状态
四、templates,模板:
主机配置模板:用于链接至目标主机实现快速监控管理
实现:通过在主机选项中链接模板,快速添加items, triggers, graphs等
- 模板可继承:一个模板可以链接至其他模板
五、macros,宏:
定义:预设的文本替换模式
用途:当需要重复使用某个值,且此值需要统一变动时,此时适用宏的使用
级别:
全局:Administration --> General --> Macros
模板:编辑模板 --> Macros
主机:编辑主机 --> Macros类型:
内建:{MACRO_NAME}
自定义:{$MACRO_NAME},命名方式:大写字母、数字和下划线-
实验6:使用宏定义redis的监听端口,在定义item过程中使用宏
- 步骤1:定义主机宏{$REDIS_PORT}
- 步骤2:定义items,端口号可以直接用定义的宏{$REDIS_PORT}代替