Linux Zabbix监控
zabbix监控系统:
zabbix是基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位解决存在的各种问题。zabbix有两部分组成,zabbix server与可选组件zabbix agent。zabbix server可以通过snmp、zabbix agent、ping端口监视等方法提供对远程主机服务器网络状态的监视,数据收集等功能,它可以运行在Linux,Solaris,HP-UX,AIX,FreeBSD,OpenBSD,OS X等平台上。
监控系统:硬件监控、软件监控、业务监控
采样:sensor
存储:
数据:历史数据、趋势数据;
展示:
报警:
被监控对象:主机、交换机、路由器、UPS、…
采样:周期性地获取某个关注指标相关的数据;
监控系统采集数据通道:
ssh/telnet
agent:较为理想的监控系统采集数据通道;
master/agent
IPMI:
SNMP:Simple Network Management Protocol(简单网络管理协议)
v1, v2c (community, public),v3
JMX:Java Management eXtension
JVM: Java Virtual Machine
存储系统:
历史数据:每次采样的结果,保存时长较短;
趋势数据:聚合数据,保存时长较长周期内的数据;
存储系统:
关系型数据库:MySQL, PGSQL, Oracle, …
rrd:RoundRobin Database (轮循数据库)时间序列数据库
NoSQL:redis/mongo
时间序列数据库
报警:
邮件、短信、微信
脚本
展示:
WebGUI
GUI
APP
开源监控项目:
cacti, nagios两者结合使用;
zabbix:采样、存储、报警、展示都可以;
ganglia
zabbix版本:
Version:
LTS:Long Time Support (长期维护版)
zabbix 3.0版本(长期维护版)
zabbix特性:
数据采样:snmp, agent, ipmi, jmx;
注:如果监控的是主机我们应优先采用agent数据采样;
报警:
升级:步进
数据存储:
mysql/pgsql:关系型数据库;
展示:php程序
实时绘图:graph, screen, slide show, map
支持监控模板
网络自动发现
分布式监控
API:支持二次开发
zabbix程序组件:
zabbix_server:服务端守护进程;
zabbix_agentd:agent守护进程;
zabbix_proxy:代理服务器,可选;
zabbix_database:存储系统,MySQL/PGSQL
zabbix_web: Web GUI
zabbix_get:命令行工具,测试向agent端发起数据采集请求;
zabbix_sender:命令行,测试向server端发送数据;
zabbix_java_gateway:java网关;
zabbix逻辑组件:
主机组(host groups)
主机(hosts)
应用(applications)
监控项(items)
触发器(triggers)
事件(events)
动作(actions):条件(conditions)和操作(operations)
媒介(media):发送通知的通道;
通知(notifications)
远程命令(remote command)
报警升级(escalation)
模板(template)
图形(graph)
屏幕(screens)
幻灯(slide show)
zabbix 3.x版本:
zabbix Server端安装的软件:zabbix-server-mysql、zabbix-get 、mysql
Web Gui:zabbix-web, zabbix-web-mysql
zabbix被监控主机端安装的软件::zabbix-agent, zabbix-sender
Proxy:zabbix_proxy
安装zabbix监控服务端:
实验环境:
zabbix-server服务器IP地址:192.168.3.101
安装zabbix3.0版本;
在zabbix server端安装mariadb数据库,安装httpd、php及相关的php组件,安装zabbix-server-mysql,安装zabbix-agent;
注意:如果是在生产环境中,建议将zabbix-sever、mariadb、webGUI都各自按在不同的主机上。
1)安装zabbix database:
2)配置数据库服务:
3)启动mariadb数据库并设置开机自启动:
4)设置mariadb数据库的安全配置:
5)使用root用户输入密码进入数据库并创建zabbix数据库和授权用户zbxuser可以远程连接访问zabbix数据库中的所有内容:
创建数据库zabbix数据库并使用utf8字符集:
授权远程用户zbxuser用户可以通过192.168.3.0网络访问zabbix数据中的所有表:
6)安装zabbix-server-mysql和zabbix-get:
注意:安装zabbix-server-mysql时需要依赖到epel源中的程序包如下:
iksemel-1.4-6.el7.x86_64.rpm
fping-3.10-4.el7.x86_64.rpm
zabbix-server-mysql程序环境:
配置文件:/etc/zabbix/zabbix_server.conf
Unit File:zabbix-server.service
7)导入数据库脚本,以生成数据库环境:
zabbix的数据库脚本文件:
/usr/share/doc/zabbix-server-mysql-3.0.2/create.sql.gz
解压 zabbix的数据库脚本文件到当前目录下:
导入数据库脚本,以生成数据库环境:
注意:zabbix 2.2版本的sql脚本有三个,需要依次导入;
zabbix server主配置文件:
通用配置相关的参数:
ListenPort=10051 zabbix默认监听的端口;
SourceIP= 连接agent客户端使用的源ip;
LogType=file 使用的日志类型;
LogFile=/var/log/zabbix/zabbix_server.log zabbix日志默认存放的位置;
LogFileSize=0 是否启动日志滚动;0为禁用;
DebugLevel=3 记录日志的级别;
DBHost=localhost 数据库主机名;
DBName=zabbix 数据库名;
DBUser=zbxuser 可登录数据库使用的用户名;
DBPassword=zbxpass 登录数据库使用的密码;
DBPort=3306 数据库的端口
DBSocket=/tmp/mysql.sock
8)配置zabbix-server-mysql的主配置文件:
DBHost=192.168.3.101
DBName=zabbix
DBUser=zbxuser
DBPassword=redhat
启动zabbix-server服务并开机自启动:
注意:如果安装的系统是centos系统版本是7.1的默认trousers包的的版本是0.3.11的版本过低启动zabbix-server时会报错,需要安装trousers 0.3.12以上的版本。
例如:trousers-0.3.13-1.el7.x86_64.rpm
zabbix webGUI配置:
(1)解决依赖关系
~]# yum install httpd php php-mysql php-mbstring php-gd php-bcmath php-ldap php-xml
(2) 安装web GUI
~]# yum install zabbix-web-3.0.2-1.el7.noarch.rpm zabbix-web-mysql-3.0.2-1.el7.noarch.rpm
(3)配置php时区参数
(a) php.ini
(b) /etc/httpd/conf.d/zabbix.conf
php_value date.timezone Asia/Shanghai
(4)启动web服务
~]# systemctl start httpd.service
(5)访问web
http://HOST/zabbix
安装后生成的配置文件:/etc/zabbix/web/zabbix.conf.php
登录的管理员:
admin/zabbix
(6)菜单:
Monitoring:查看监控
Inventory :主机清单
Reports :监控报告
Configuration :配置监控项
Administration :管理zabbix监控
9)安装http php相关的程序包及组件:
10)安装webGUI
11)编辑/etc/httpd/conf.d/zabbix.conf
12)启动httpd服务并开机自启动:
13)使用web访问zabbix:
配置zabbix数据库连接:
zabbix agent安装配置:
(1)安装
~]# yum install zabbix-agent-3.0.2-1.el7.x86_64.rpm zabbix-sender-3.0.2-1.el7.x86_64.rpm
程序环境:
配置文件:/etc/zabbix/zabbix_agentd.conf
Unit File:zabbix-agent.service
(2)配置
# grep -i "^####" zabbix_agentd.conf
############ GENERAL PARAMETERS #################
##### Passive checks related 被动监控相关的配置
##### Active checks related 主动监控相关的配置
############ ADVANCED PARAMETERS #################
####### USER-DEFINED MONITORED PARAMETERS ####### 用户自定义的监控参数,UserParamter
####### LOADABLE MODULES #######
####### TLS-RELATED PARAMETERS #######
##### Passive checks related
Server=IP1,IP2,… 监控端主机ip地址;
ListenPort=10050 默认监听端口;
ListenIP=0.0.0.0 表示监听本机的所有地址;
StartAgents=3
##### Active checks related
ServerActive=IP1,IP2,… 监控端主机ip地址;
Hostname=HOST-ID 指明zabbix-server的主机名;
(3)启动服务
# systemctl start zabbix-agent.service
在webGUI配置监控项:
快速配置一个监控项:
hostgroups –>host –> applications –> item –> triggers (events事件) –> action (condtions条件, operations操作)–>发送通知—>operations:remote command(执行远程命令)–>alert(报警)—–>graph—->screen—->slideshow
主机组—》主机—》应用—-》监控向—-》触发器—》事件—-》动作—》条件—-》操作—-》通知—-》执行远程命令—》报警升级—-》图表—–》屏幕——》幻灯
item –> simple graph
items –> graph
grapps –> screen
screens –> slide show
item:item key
zabbix agent安装配置实例:
实验环境:
在192.168.3.8被监控主机上安装zabbix-agent和zabbix-sender:
把192.168.3.101主机上的zabbix-agent包和zabbix-sender包复制到192.168.3.8主机的/root目录下。
1)在192.168.3.8被监控主机上安装zabbix-agent和zabbix-sender:
2)配置zabbix-agent主配置文件:
##### Passive checks related
### Option: Server
Server=192.168.3.101
### Option: ServerActive
ServerActive=192.168.3.101
### Option: Hostname
Hostname=centos7.1
3)启动zabbix-agent服务并开机自启动:
先测试一下在zabbix-server端使用zabbix_get命令手动获取一下system.cpu.switches数据:
4)在webGUI中配置监控CPU 上下文切换次序的监控项:
(3)Monitoring——》Latest data——-》SelectHost—–》Filter—–》Graph(图表)
Graph(图表)示例:
zabbix监控配置:
host group –> host –> application –> item (simple graph) –> trigger (event)
action(condition, operation)
graph –> screen –> slide show
item:item key
item的值有两类:
zabbix 内建:
zabbix agent:被动模式下专用的key
zabbix agent(active):主动模式下专用的key
用户自定义(UserParamter)
采集到的数据类型:
数值:
整数
浮点数
字符型:
string:字符串
text :文本
log :日志
存储的值:
As is:不对数据做任何处理,存储采集到的数据本身;
Delta(simple change):本次采样的数据减去前一次采样的数据;
Delta(speed per second):本次采样的数据减去前一次采样的数据,再除以经过的时长;速率数据;
使用zabbix_get命令执行用户自定义key参数:收集被监控主机上网卡接受和发送字节大小:
在zabbix webGUI中配置用户自定义key参数的items:
触发器:
逻辑表达式,阈值,通常用于定义数据的不合理区间; 条件满足时,TRUE,表示PROBLEM状态,反之,则OK状态;
OK –> PROBLEM
Recovery:PROBLEM –> OK
{<server>:<item>.<fuction>(<parameters>)}<operator><constant>
触发器间可存在依赖关系;
在zabbix webGUI中配置触发器:
点击Hosts—-》点击要配置的主机名中的Triggers——》点击右上角的Createtrigger—-》到达如下界面:
使用模板选项生成触发器逻辑表达式:
使用模板选项生成触发器逻辑表达式结果:
现在我们点击Monitoring—–》Latest data——》inboud packets(item)—–》graph会看到如下图表:
现在我们点击Monitoring—–》Events:可以查看到事件从 OK—》PROBLEM—》OK,如下图:
媒介类型(Media Types):
报警信息的传递方式;
类型:
Email:邮件,需要定义发件人邮箱地址和SMTP服务器;
Script:自定义脚本,此脚本有发送信息至相关用户的功能;
SMS、Jabber、Ez Texting
接收通知信息者为zabbix的用户:需要为用户定义对应各种媒介通道的接收方式;
localmail:
script:
Action动作:
conditions:触发此动作的条件,一般通过“事件”触发;
operations:触发条件满足时要采取的动作;
send message:发送信息
功能:发报警信息给关联的用户;
(1)可用传递方式:
(a) Email
(b) script:报警脚本
位于server主机的AlertScriptsPath参数定义的目录下,默认为/usr/lib/zabbix/alertscripts;
zabbix调用脚本时会向其传递参数;3.0之前的版本通过
$1:消息接收人;
$2:消息主题;
$3:消息主体;
3.x之后的版本,此三个参数默认不再传递,需自行定义; 可以使用宏来模拟此前的行为:
{ALTET.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
注意:每个信息接收人相对于此媒介来说,得配置相应的接收地址;
发信息的信道:
邮件
脚本
remote command:执行远程命令
功能:
在agent所在的主机上运行用户指定的命令或脚本来尝试着恢复故障;例如:
重启服务;
任何由用户自定义的脚本;
在zabbix webGUI上配置监控nginx服务及故障时采取的action(条件、操作)
条件:net.tcp.listen[80] 监控nginx的80端口是否正常;
操作:1、重启服务 2、发送邮件给管理员;
1)点击Hosts——》点击要配置的主机名中的items——-》点击Create item—–》如下图:
2)配置web server item(监控项)的trigger触发器:
点击Hosts——》点击要配置的主机名中的trigger—–》Createtrigger如下图:
3)配置邮件报警通知媒介类型和收件人地址:
点击Administration—》点击Media types(媒介类型)—-》点击右上角Create Media types—》
配置邮件收件人地址:
点击Administration—》点击Users—–》点击Media—-点击Add如下图 :
4)点击Actions—–》点击Create action如下图:
配置Conditions(条件):
配置Operations(操作):基于ssh执行remote command:
配置Operations(操作):基于自定义脚本sudo执行remote command:
由于第二次操作使用了sudo权限,所以要在远程被控主机上要给zabbix用户授权执行systemctl命令的权限:
在监控主机上配置/etc/zabbix/zabbix_agentd.conf主配置文件允许远程主机执行命令:
重新zabbix-agent.service服务:
配置Operations(操作):添加邮件通知报警服务:
到此action动作已经配置完成:
注:action名称和trigger名称不小心重名了。
测试action动作:
停止远端被监控主机的nginx服务:
在上图中时间我们可得知:nginx故障持续了5秒中就已经恢复了,也就是说在action第一步ssh远程重启就成功了。
定义邮件报警脚本:
点击Administration—–》点击Mediatype——-》点击右上角的CreateMediatype如下图:
配置邮件收件人地址:
点击Administration—》点击Users—–》点击Media—-点击Add如下图 :
在名称为web server down的actions中的Operations中添加脚本报警邮件:
已添加成功:
这时我们还需在 /usr/lib/zabbix/alertscripts/目录下定义一个脚本文件:
给脚本加上执行权限:
现在需重启zabbix-server服务,使其重新加载mailscript脚本文件:
测试sendmail.sh脚本文件是否能正常发送邮件:
(1)修改远程被监控主机上的nginx的监听端口为:8080
(2)重新启动远程被监控主机的nginx服务;
测试结果如下:
恢复故障后邮件:
配置Graphs图表:
点击Configuration——》Hosts——》点击选择要配置graphs的主机点击Graphs—》点击右上角的Create graph如下图:
配置screen图表:
依照上面的上面的方法多创建几个graphs如下图:
点击Monitoring—-》点击Screens—–》点击创建Create screen如下图:
点击下图中的Constructor:
点击 Change添加图表:
完成结果如下:
配置Slideshows图表:
点击Monitoring—》Screens—–》在右上角的screen下拉菜单中选择Slideshows——》点击Cteate slide show如下图:
点击slide show名称,进行展示幻灯片:
图表总结:
item——>graph
items—–>graph
graphs—–>screen
screens——->slide show
模板:
主机配置模板,可链接至主机,从而实现主机的快速监控配置;
模板可继承;
在模板之上link其它模板即可;
从主机上删除模板:
unlink:反链接
unlink and clear:反链接并清除数据;
模板可导出,也可以从指定文件导入;
创建主机监控templates模板:
点击Configuration—–》点击Templates—-》点击右上角的Create template如下图:
创建完成的templates模板:这时我们就可以在上面添加item、trigger、Graph、screen等;
在templates模板上创建item、trigger、Graph、screen和在zabbix webGUI上创建进本类似,只是在模板上不能添加hosts。
templates可以链接模板:
可以使一个模板聚合多个模板;
模板可以导出(Export)/导入(Import);
宏:MACRO
预设的文本替换模式;
宏级别:
全局宏:Administration –> General –> Macros
模板宏:Configuration –> Templates –> TEMPLATE –> Macros
主机宏:Configuration –> Hosts –> HOST –> Macros
宏类型:
内建:{MACRO_NAME} 内建宏不能使用$符;
自定义:{$MARCRO_NAME} 自定义宏必须使用$符;
自定义宏命名方式:大写字母、数字和下划线;
网络发现hosts:
zabbix server扫描指定网络范围内的主机;
发现方式:
ip地址范围:
可用服务探测(ftp, ssh, http, …)
zabbix_agentd的响应对某个key的请求;
snmp_agent响应;
一旦发现某主机,就会产生发现事件;
事件有8类:
Host, Service
Up/Down, Discovered/Lost
发现操作分两步:
discover:发现
actions:
conditions:条件
operations:操作
可采取的动作:
send message, remote command
add/remove host
enable/disable host
add host to group
link template to host
在zabbix-server上配置网络发现:
点击Configuration—-》点击Discovery—-》点击右上角的create discovery rule如下图:
定义actions:
点击Configuration—-》点击Actions—–》在Event source 下拉菜单中选择Discovy——》点击Create ation如下图:
点击Monitoring—-》点击Events——在右上角Source下拉菜单中选择Discovery如下图:
点击Configuration—-》点击Hosts如下图:
zabbix-agent端设置自定义key:
自定义key:在zabbix agent端的配置文件中由用户通过UserParameter指令定义用户自定义参数;
UserParamter=<key>,<command>
UserParamter=<key[*]>,<command> $1…$9
注意:类似awk命令自带$1…$9,需要改写为$$1, $$2, …$$9;
在zabbix-agent端的主配置文件中:
UnsafeUserParameter=0|1 等于0表示禁止使用不安全的符号,1表示可以使用不安全的符号;
不安全符号: \ ' " ` * ? [ ] { } ~ $ ! & ; ( ) < > | # @
UserParameter=<key> 定义key值
示例(1):
在zabbix-agent端设置自定义的用户参数key:去获取内存的可用空间;
在zabbix-agent端设置完自定义用户参数key后需要重启服务:
在zabbix-server端使用zabbix_get工具获取一下zabbix-agent端的空闲内存:
示例(2)
在zabbix-agent端设置自定义的用户参数key并传递位置参数,去获取相应的值:
在zabbix-agent端设置完自定义用户参数key后需要重启服务:
在zabbix-server端使用zabbix_get工具获取一下zabbix-agent端相应的值:
示例:
使用脚本自定义用户参数key
配置nginx默认配置文件中的nginx状态location:
在zabbix-agent端编写userparamenter脚本:
在zabbix-agent端设置自定义的用户参数key脚本传递参数:
在zabbix-server端测试结果:
主动/被动 检测:
被动监控:
Server=
主动监控:
ServerActive=
Hostname=
基于SNMP监控:
SNMP:简单网络管理协议;基于UDP协议;
读(get, getnext), 写(set), 陷阱(trap)
161/udp(agent), 162/udp
snmpv1: 1989
snmpv2c: 1993
snmpv3: 1998
MIB: Management Information Base
OID: Object ID
基于SNMP监控主机:
1)在被监控主机上安装snmp软件包:
net-snmp.x86_64 1:5.7.2-24.el7 :snmp服务包
net-snmp-utils.x86_64 1:5.7.2-24.el7 :snmp客户端工具包
在zabbix-agent端编辑snmp的配置文件:
启动snmp服务:
使用snmpwalk命令获取主机名:
在zabbix-server添加基于snmp监控主机:
点击Configuration—-》点击Hosts—》点击Create host如下图:
给主机centos7.1添加基于snmp的监控template模板:
点击Configuration—-》点击Hosts—–》点击主机centos7.1——》点击Templates如下图:
配置基于snmp的item时最需要注意的是:
监控交换机或打印的时候,在交换机或打印机上开启snmp服务,查看说明书看它们支持什么OID进行添加即可。
配置zabbix proxy:
实验环境:
zabbix-server ip:192.168.3.101;
zabbix-proxy ip:192.168.3.7;
zabbix-agent ip:192.168.3.9;
1)安装数据库服务:
启动mariadb服务并开机自启动:
设置mariadb数据库的安全配置:
创建zabbix_proxy数据库并授权远程用户:
2)从zabbix-server中拷贝zabbix-proxy-mysql和zabbix-get安装包到192.168.3.7的/root目录下:
3)在zabbix-proxy中安装zabbix-proxy-mysql和zabbix-get:
注意:安装时需要依赖到epel源中的fping-3.10-4.el7.x86_64.rpm同时也把zabbix-agent包安装上。
4)解压/usr/share/doc/zabbix-proxy-mysql-3.0.2/schema.sql.gz
5)重定向/usr/share/doc/zabbix-proxy-mysql-3.0.2/schema.sql到zabbix_proxy数据库中:
6)编辑zabbix-proxy的主配置文件
### Option: Server
Server=192.168.3.101
### Option: Hostname
Hostname=centos7 //zabbix-proxy服务器的名称;
### Option: DBHost
DBHost=192.168.3.7 //mariadb服务器名;
### Option: DBName
DBName=zabbix_proxy //数据库名称;
### Option: DBUser
DBUser=zabbix //数据库用户名;
### Option: DBPassword
DBPassword=redhat //数据库密码;
### Option: ConfigFrequency(频率)
ConfigFrequency=600 //设置zabbix-server多久向zabbix-proxy推送配置;
### Option: DataSenderFrequency
DataSenderFrequency=1 //设置数据发送频率;
启动zabbix-proxy服务并开机自启动:
7)在zabbix-server 的webGUI界面添加zabbix-proxy服务:
点击Administration——》点击Proxies—–》点击Create proxy如下图:
点击Add之后到达如下界面:
配置被监控主机:
在被监控主机上安装zabbix-agent和zabbix-sender软件包:
把192.168.3.101主机上的zabbix-agent包和zabbix-sender包复制到192.168.3.9主机的/root目录下。
1)在192.168.3.8被监控主机上安装zabbix-agent和zabbix-sender:
2)配置zabbix-agent主配置文件:
##### Passive checks related
### Option: Server
Server=192.168.3.7
### Option: ServerActive
ServerActive=192.168.3.7
### Option: Hostname
Hostname=192.168.3.7
3)启动zabbix-agent服务并开机自启动:
先测试一下在zabbix-server端使用zabbix_get命令手动获取一下system.cpu.switches数据:
在zabbix-server webGUI上配置被监控主机192.168.3.9:
点击Configuration—–》点击Hosts—–》点击Createhost如下图:
在zabbix-server webGUI中配置完使用zabbix-proxy主机(zbxproxy)后的Hosts效果:
在主机zbxproxy上配置一个item监控项:
点击Configuration—–》点击Hosts——》点击选择zbxproxy主机—-》点击item—–》点击Createitem如下图:
在zabbix-server webGUI中配置完主机(zbxproxy)item监控项后的效果:
在zabbix-server webGUI中查看监控结果:
注意:
(1) 在server添加的Proxy的名称,要与proxy的配置文件中Hostname的值保持一致;
(2) 通过proxy监控的主机,agent要授权proxy有监控权限;
server=Proxy_Server_IP
zabbix performance tuning:
NVPS:New Value Per Second
100w/m, 15000/s
zabbix服务器进程数量调整:
alerter, discoverer, escalator, http poller, housekeeper, poller, trapper, configration syncer, ipmi poller, …
StartPollers=50
StartPingers=10
…
StartDBSyncers=2
…
数据库优化:
分表:
history_*
trend*
events*
建议:
Database:历史数据不要保存太长时间;尽量让数据缓存数据库服务器内存中;
触发器的表达式:减少使用min(), max(), avg();尽量使用last(), nodata();
数据收集:polling较慢时,减少使用snmp/agentless/agent, 尽量使用trapping方式,即agent(active);
数据类型:文本型数据处理速度较慢,尽量少收集类型为text或string或log型的数据,多使用numeric型数据;
原创文章,作者:zhengyibo,如若转载,请注明出处:http://www.178linux.com/60054