作者:吴兆松(网名:itnihao)
“他始终坚信,技术的积累只是时间问题,解决问题的思路和思想高于具体的技术细节”
第一章 监控系统简介
1,那些东西需要监控
底层支持,硬件,存储,网络设备,网络环境
系统架构,操作系统,虚拟化,集群
上层应用,数据库,应用软件
2,监控系统的实现
数据采集,客户端实现
数据存储分析展示告警,服务端实现
a,被动模式:对server开销大,可以实现无agent方式
b,主动模式:客户端实现,server保持心跳
一个监控系统应该支持主动上报(主动模式)和定时采集(被动模式),这里站的角度是agent的角度
一个大规模分布式的监控系统,需要支持C/P/S(client,proxy,server),兼容异地多机房
可能存在的问题,告警洪水?数据延迟?专线带宽占用?
3,开源监控系统现状
Cacti,仙人掌,RRDtool绘图,网络流量监测图形分析软件
Smokeping,常规的ping,dns,ssh性能监控,RRDtool底层,网络丢包和延时
Opentsdb,开源时序数据库,支持秒级数据采集和告警
Zabbix,大规模分布式监控系统,功能丰富,可扩展,易用,支持二次开发等优点
4,监控系统的前世今生
为什么监控?突发的流量,突发的访问量,突发的负载,通知运维,介入修复
怎么实现?
a,支持完整的指标
b,支持和其他业务的扩展关联,包括cmdb,cas,和告警需求
c,api接口和api文档
d,数据汇总和容量评估
未来的目标?业务价值的持续提升,业务无中断
第二章 zabbix介绍
1,zabbix先知
zabbix用户群体大,文档齐全,社区繁荣,单节点理论支持 5w设备,适合企业需要
zabbix使用简单,从入门都高级,都有可以扩展和参考的地方
2,zabbix架构,数据压力,nvps,number of processed values per second(每秒处理的数据值)
通用 C/S 分布式 C/P/S or C/N/S
watchdog,
housekeeper,删除过期数据
alerter,
poller,
httppoller,
discoverer,
pinger,
db_config_syncer,
db_data_syncer,
nodewather,
timer,
escalator,
3,zabbix功能特性
a,多样化的数据收集,自带的和扩展的,支持网络发现
b,高度定制的告警触发,通知,处理
c,实时的绘图,历史的存储,多样话的界面展示
d,访问快速,配置简单,自带审计
e,api完备,c语言编写,性能非常高
第三章 安装与部署
1,安装条件
a,内存 4core 4GB >1000, 8core 8GB >10000
b,硬盘占用:history=items*3600*24*days*byte(byte取决于数据库引擎,一般是 50B)
trends=items*3600*24*day*byte(byte取决于数据库引擎,一般是128B)
events=events*24*3600*byte(byte取决于数据库引擎,一般是130B)
c,操作系统,数据库版本,web前端,zabbix-server依赖库,ntp时间同步
2,zabbix-server端安装步骤
a,安装zabbix官方源和 epel源
b,yum 安装zabbix-server
c,安装mysq数据库,导入数据表
d,配置zabbix_server.conf文件,启动zabbix-server
e,配置防火墙,selinux和文件权限
f,配置web界面,指定数据库和php页面配置
g,常见的异常和故障解决
3,zabbix-agent安装
a,linux安装
rpm -ivh 安装,rpm包可以定制,参考第十五章
iptables打开防火墙
配置zabbix_agentd.conf文件
b,windows安装
安装配置,下载安装包解压
注册服务,zabbix_agentd.exe --install
启动服务,net start “Zabbix Agent” net stop "Zabbix Agent"
c,zabbix_get 数据获取测试命令,相当于 snmp中的snmpwalk
zabbix_get -s <host/ip> -p <port> -I <ip addr> -k <key>
4,zabbix-server
a,存储,优化housekeeper,数据表分区
b,源码init阅读
c,高可用和安全,设置严格的防火墙策略,关注漏洞
d,数据备份,排除历史数据表,保留配置表
删除 history* trends* Acknowledges* Alerts Auditlog Events service_alarms
第四章 快速配置和使用
1,忘记zabbix密码
mysql> select * from zabbix.users where alais='Admin';
mysql> update zabbix.users set passwd=md5('zabbix') where alias='Admin';
mysql> flush privileges;
2,配置流程
Host groups 主机组 ----> Hosts 主机 ----> Applications 监控项组 ----> Items 监控项 ----> Triggers 触发器 ----> Event 事件 ----> Actions 处理动作 ----> User groups 用户组 ----> Users 用户 ----> Medias 告警媒介----> Audit 审计日志
3,主机组的添加
分组管理策略:
a,以地理位置的维度划分
b,以业务为单位划分
c,以机器用户划分
d,以系统版本划分
e,以应用程序划分
f,其他方式划分方法
mysql> select * from zabbix.groups;
4,模板的添加
基于主机的同类数据的归纳抽象,统一成模板。模板可以继承,模板可以关联模板
模板中 宏的概念?
5,添加主机
必填项 hostname,visible name,groups,agent interfaces,ip address,port,status
主机使用link关联模板,取消模板关联的时候,unlink不会把已经添加的数据给清理掉,unlink and clear,不仅去除关联,而且清除模板中的关联指标和数据
6,graphs图像 >> screen 视图 >> slide shows 幻灯片
graphs type,normal线条图,stacked叠图,pie饼图,exploded分解饼图
simple graph是item自带的绘图,不需要单独配置
7,map地图
8,web scenario拨测
监控web程序的下载速度,放回码及相应时间,可以把一组连续的web作为一组拨测场景
通过脚本或者程序,使用curl命令,http库实现需求
9,IT服务
IT服务时间可用性度量带来的好处:
a,对提高服务的持续性提供数据依据
b,明确服务提供过程中的薄弱点
c,迫使服务得到有效的监控
d,为服务成本提供数据支撑
IT服务可用性指标包括:
a,服务的范围和定义,划分边界
b,服务重要性定义,区分核心和非核心
c,服务数量级定义
d,服务不可用造成的业务影响程度评估
e,服务的可用时间,关键时间,次要时间,计划中断时间,容许的不可用时间等时间指标定义
可用性分级为,持续性100%,容错性100.00%,弹性99.99%,高可用99.90%,一般可用99%-95%
10,Availability report可用性报表,Host inventory资产管理
第五章 深入配置和使用
1,Items 监控项
Item里面有什么? 获取数据的方式,取值的数据类型,取值的间隔,历史数据保存周期,趋势数据保存周期,key分组等
Items添加,必选项,name,type,key,host interface。。。
2,key 键值
key格式 key[接参数],参数分为 引号字符串,非引号字符串,数组
引号字符串,用反斜杠 \ 转义,非引号字符串一般能用,数据字符串用逗号 ,分开
key值返回类型,character,log,text,无效显示为ZBX_NOTSUPPORTED
3,Items类型
zabbix-agent,默认被动模式,passive,主动模式,active
自带的常用key 分类和示例:
a,网络的
net.if.in[eth0] 获取eth0 的流量,等同于 net,if.in[eth0,bytes]
net.if.in[eth0,packets] 获取eth0网卡接收的包量
net.if.out[if,<model>]
net.if.colisions[if]
net.if.total[if,<mode>]
数据来源于,ip a
b,端口的
net.tcp.listen[port]
net.tcp.port[<ip>,<port>]
net.tcp.service[service,<ip>,<port>]
net.tcp.service.perf[service,<ip>,<port>]
net.udp.listen[port]
数据来源于 netstat
c,监控进程的
kernel.maxfiles
kernel.maxproc
proc.mem[<name>,<user>,<mode>,<cmdline>]
proc.nu[<name>,<user>,<state>,<cmdline>]
数据来源于 proc文件
d,监控CPU和内存的
system.cpu.intr
system.cpu.load[<cpu>,<mode>]
system.cpu.num[<type>]
system.cpu.switches
system.cpu.util[<cpu>,<type>,<mode>]
vm.memory.size[<mode>]
system.swap.in[<device>,<type>]
system.swap.out[<device>,<type>]
system.swap.total[<device>,<type>]
e,磁盘IO的
vfs.dev.read[<device>,<type>,<mode>]
vfs.dev.read[<device>,<type>,<mode>]
vfs.fs.inode[fs,<mode>]
f,文件监控的
vfs.file.cksum[file]
vfs.file.contents[file,<encoding>]
vfs.file.exits[file]
vfs.file.md5sum[file]
vfs.file.regexp[file,regex,<encoding>,<start line>,<end line>,<output>]
vfs.file.size[file]
vfs.file.time[file,<mode>]
vfs.fs.discovery
vfs.fs.size[fs,<mode>]
g,日志监控的
log[file,<regexp>,<encoding>,<maxlines>,<mode>,<output>]
logrt[file_pattern,<regexp>,<encoding>,<maxlines>,<mode>,<output>]
simple-check用于无客户端环境的检查
常用key 分类和示例:
icmpping[<target>,<packets>,<interval>,<size>,<timeout>]
icmppinglosss[<target>,<packets>,<interval>,<size>,<timeout>]
icmppingsec[<target>,<packetes>,<interval>,<size>,<timeout>,<mode>]
net.tcp.service[service,<ip>,<port>]
zabbix-agent active模式
案例:日志的监控,这里选日志是因为日志的监控需要使用主动模式
zabbix internal 监测zabbix server或者proxy 的自身性能数据,自带又server,proxy,agent
SSH,Telent和扩展检测
4,Macros 宏的配置
宏的作用是便于在模板 Template,指标 Items,触发器 Trigger中的引用,{$名称},比如{$SSH_PORT}
全局宏,Administration > General > Macros,作用于 模板,主机
模板宏,顾名思义,作用于模板,Configuration > Template > Macros
主机宏,Configuration > Hosts > Macros
5,维护时间 Maintenance
6,事件确认 Ack
第六章 告警和配置
告警是监控的职能,zabbix的告警流程如下:
Host Groups 设备组 ---> Hosts 设备 ---> Applications 监控项组 ---> Items 监控项 ---> Triggers 触发器 ---> Actions告警动作 ---> Medias告警媒介 ---> User Groups用户组 ---> Users 用户
告警的必备条件:有触发器,有告警动作,有通知用户,有通知媒介
1,Trigger 的配置
Trigger状态两种,OK,PROBLEM,tigger之间可以有不同的安全级别
Trigger 添加配置,name,expression,description,url,serverity,enable等项目
一个expression包含,item 监控值,function正则逻辑表达式,last of time时间,time shit,时间偏移
serverity的等级分类,基本上通用所有监控系统
a,Not classified,未知等级
b,Information,一般信息
c,Warning,警告信息
d,Average,一般故障
e,High,高级别故障
f,Disaster,致命故障
2,Trigger 告警依赖
场景:机房路由异常,agent会批量告警
3,常用单位
计时单位:S,second秒 m,minutes分钟 h,hour小时 d,days天数 w,weeks星期
计量单位:K,kilo M,mega G,giga
4,表达式 function+function parameter +运算符+ 滞留状态
eg,
滞留状态? {TRIGGER.VALUE}=0 OR 1
温度大于20度告警,小于15度才算恢复,告警和恢复的阈值之间是一个间隔,不是一个具体值
({TRIGGER.VALUE}=0&{&SERVER:TEMP.LAST(0)}>20 )| ({TRIGGER.VALUE}=1&{SERVER:TEMP.LAST(0)}>15)
5,trigger函数,这个一次是记不住的,只能是后面边学习边使用
a,abschange,差值的绝对值
b,avg,时间间隔的平均值
c,change
d,count,指定时间间隔的数值统计
e,date,返回当前日期,dayteofmonth,返回当前月的第几天,dayofweek,返回当前星期的第几天
f,delta,max()-min(),最大值减去最小值
g,diff,返回1说明有差异,返回0为其他情况
h,fuzzytime,常用system.localtime来检查本地时间与zabbix-server的时间同步
i,iregexp,与regexp类似,区别是不区分大小写,支持 str,log,text
j,last,最近的值,#num表示最近的第n个值(往前数),当前的#num和其他函数的#num有差别
k,logeventid,返回日志条目的id是否符合正则,logserverity,返回最近日志条目的日志等级,logsource,检查是否匹配日志来源
l,max,返回指定时间间隔的最大值,min,返回指定时间间隔的最小值
m,nodata,返回值为1表示指定时间(间隔不小于30s)没有数据,0为其他情况
n,now,返回距离Epoch(1970年1月1日 00:00:00 UTC)时间的秒数
o,pre,返回之前的值,类似于last(#2)
p,str,查找最近值中的字符串
q,strlen,指定最近值的字符串长度,用法类似 last(#3)
r,sum,返回指定时间间隔内的值总和,float 和int
s,time,放回当前时间,yyyyddmm HHMMSS
6,Action 是触发器 trigger被触发后,产生事件 events之后的一系列动作 actions,
Trigger events,discovery events,auto registration events,internal events
Action 配置内容,Action 动作 --> Conditions --> Operations
a,Action的基本内容,name,subjiect,message defind,status。subject和message都是需要用 macros 宏
常用的macros宏包括:{TRIGGER.NAME},{TRIGGER.STATUS},{HOST.HOST},{ITEM.KEY},{TRIGGER.EXPRESSION},{EVENT.STATUS},{EVENT.AGE}
b,Condiction配置中的逻辑运算
=,条件等于 >=,条件大于或等于 <=,条件小于或等于 <>,排除 like,部分匹配 not like,部分不匹配 in,在范围内 not in,不在范围内
默认创建的action会包含两个condiction,Trigger.value = problem && maintenance status = not in mantainance
Operation功能,send message发送消息,执行远程命令 remote command
告警消息发送配置注意点,media配置,user permission用户权限,message audit日志审计
Romote command执行远程命令配置
a,操作涵盖,拉起应用服务(web服务,中间件,crm),通过IPMI协议远程重启,磁盘满了之后,清理磁盘空间,CPU负载高后的VM迁移,资源不足下的扩容
b,注意点,远程命令不支持agent主动模式,server -->agent,不支持代理,长度限制255字符,zabbix用户有命令执行权限,开通防火墙,zabbix不返回命令执行状态
c,EnableRometCommands =1
Media 告警媒介配置,mail邮件,sms短信,wechat微信,dingding钉钉
自定义告警脚本,/etc/zabbix/zabbix_server.conf AlaertScriptsPath=/etc/zabbix/alertscripts
zabbix-server 在调用脚本的时候,会传递三个变量参数给脚本作为位置参数,$1是收件人,$2是主题,$3是内容
7,告警升级机制,梯度告警处理
eg,示例1
default operation step duraton,告警时间间隔,120(minimum 60 seconds)
steps details start in durations(seconds)
1-2 send message to users(admin) via send-mail immediately 60
3-5 send message to users(admin) via send-sms 00:02:00 60
6-7 send message to users(manager) via send-sms 00:05:00 default
第一梯度,1,2步,通过邮件发送给admin用户,间隔60s,发送2次
第二梯度,3,5步,告警发送2分钟后,通过短信发送给admin用户,间隔60s,发送3次
第三梯度,6,7步,告警发生5分钟后,通过短信发送给manager用户,默认时间间隔 120s,发送2次
eg,示例2
default operation step duration,告警时间间隔,120(minimum 60 seconds)
steps details start in durations(seconds)
1-0 send message to users(admin) via send-mail immediately 60
5-7 send message to users(manager) via send-sms 00:04:00 90
第一梯度,1,0步,通过邮件发送给admin用户,间隔60s,发送次数不限制,直到告警恢复为止
第二梯度,5,7步,告警发生4分钟后,通过短信发送给manager用户,间隔90s,发送3次
eg,示例3
default operation step duration,告警时间间隔,1800(minimum 60 seconds)
steps details start in durations(seconds)
1-0 send message to users groups(mysql admin) via send-mail immediately default
5 send message to users groups(mysql manager) via send-mail 02:00:00 default
6 run remote commands on current host 02:30:00 default
7 send message to user groups(mysql admin) via send-sms 03:00:00 default
8 run remote commands on current host 04:00:00 default
第一梯度,1,0步,通过邮件发送给mysql admin用户组,间隔1800s即30分钟,发送次数不限制,直到告警恢复为止
第二梯度,5步,告警发生2小时后,通过邮件发送给mysql manager用户,发送1次
第三梯度,6步,告警发生后的2小时30分钟,执行远程重启mysql命令
第四梯度,7步,告警发生后的3小时,短信通知mysql admin用户组
第五梯度,8步,告警发生的4小时候后,执行远程命令,通过IPMI重启当前主机
step设置从1 --> 0 时,一直发送告警,直到告警恢复
step设置从1 --> 1 时,告警只发送1次,后面不再重复发送
8,常见故障排查
a,检查脚本权限,告警账号配置
b,检查告警机器读取权限,检查告警屏蔽策略
c,检查zabbix-server日志和audit审核日志
第七章 监控方式剖析
1,zabbix支持的监控方式包括 Agent(tcp端口)、SNMP(udp端口)、JMX(jmx服务)、IPMI(ipmi协议)
2,Agent监控方式,主动和被动,第八章详细讲
3,Trapper监控方式
trapper可以发送任意数据到服务器,主动推送,需要安装 zabbix-sender
zabbix_sender -z host -p port -s “hostname” -k key -o message -vv verbose
4,SNMP监控方式
Simple Network Managerment Protocol,简单网络管理协议,管理进程 和被管理设备
基于TCP/IP的网络管理包含三部分:
a,管理信息库,management information base,MIB,主要是参数
b,管理信息结构,stucture fo management information,SIM,主要是公式和表示符号
c,简单网络管理协议,simple network management protocol,通讯协议
协议包含的命令有:Get,GetNext,Set,Response,Trap,前4个命令使用UDP协议,使用161端口,trap命令,使用UDP协议,使用162端口
snmpwalk -v 2c -c public 127.0.0.1 snmpwalk -v 2c -c public 127.0.0.1 SNMPv2-MIB::sysUpTime.0
5,IPMI监控方式
IPMI,Intelligent Platform Managerment Interface,智能平台管理接口,可以利用IPMI检测服务器的物理特征,包括温度,电压,电扇,电源和机箱
yum install -y OpenIPMI impitool && /etc/init.d/ipmi start && /etc/init.d/ipmievd start
6,JMX监控方式
JMX,Java Management Extendions,JAVA扩展管理,是管理功能框架
java application --> zabbix-java-gateway --> zabbix server
配置JMX监控的步骤:
a,安装Zabbix-Java-Gateway,配置 zabbix_java_gateway.conf参数
b,配置zabbix_server.conf参数
c,java application 开启JMX协议
d,web配置监控的指标和阈值
监控java程序,配置java启动参数,监控tomcat,配置catalina.sh脚本,监控weblogic,配置setDomianEnv.sh
7,命令的执行
system.run是zabbix agent 自带的一个key,默认不能使用,要使用需要打开 zabbix_agentd.conf中的 EnableRemoteCommands=1
第八章 分布式监控
1,zabbix是一个分布式的监控系统,支持一个中心,多个节点的分布模式,适用于跨机房,跨地域的网络监控
zabbix agent --> zabbix proxy --> firewalld --> zabbix server
2,agent的主动模式 和被动模式
默认是被动模式,zabbix_agentd.conf中的 Server= 配置
server 向 agent请求数据,<item key>\n,agent 向 server响应数据,<HEADER><DATALEN><DATA>
被动模式的流程:
a,server打开一个tcp链接
b,server发送一个key为agent.ping\n
c,agent接收到这个请求,然后响应数据<HEADER><DATALEN>1
d,server对接收的数据进行处理
e,tcp连接关闭
主动模式的配置,需要配置 ServerActive=Server IP,配置后重启agent生效
批量修改模式,可以选择所有item 后,选择 mass update 批量修改
agent向server请求检测列表,返回的item以json返回,包括 key,delay
请求列表的运行流程:
a,agent向server建立一个tcp连接
b,agent请求需要检测的数据列表
c,server响应agent,发送一个item列表,(item key,delay)
d,agent响应请求
e,tcp连接完成本次会话后关闭
f,agent开始周期的收集数据
agent向server发送采集数据,也是以json,host,keyi,value,clock
发送数据的运行流程:
a,agent向server建立一个tcp连接
b,agent发送在采集周期内,需要采集的数据给server
c,server处理agent发送的数据
d,tcp连接关闭
第九章 zabbix与自动化运维
zabbix的自动化,网络自动发现,主动注册,LLD等自带的自动化功能,对解决监控自动化运维具有不可比拟的优势,同时考虑对配置的文件的管理,涉及到salt自动化配置工具,从工具层面展示自动化运维底层的配置管理。
自动化的目的,使用是减少工作量,提高工作效率
1, 自动添加主机,自动添加模板,自动分组,自动添加监控项,触发器等 --->>> 网络自动发现,自动注册
自动添加监控项中有规律的变量 --->>> LLD,自动发现
2,server端网络发现,完成快速发现并添加主机,简单的管理,随着环境改变快速更新监控系统
网络发现实现基于以下信息:ip地址段,基于服务的ftp,ssh,pop协议信息,zabbix-agent上报,snmp agent上报
a,配置自动发现规则,Configuration 配置 ---> Discovery 发现 ---> Creat discovery rule 创建自动发现规则
b,配置自动发现动作,Configuration 配置 ---> Action 动作 ---> 选择 event source ---> Discovery ---> 添加actions
sending notification #发送通知 adding/removing hosts #添加/删除监控主机 enabling/diabling hosts #开启/关闭主机监控
removing hosts from a group #从一个组中移除一个监控设备 excuting remote scripts #执行远程脚本
c,检查自动发现历史,Monitoring 监控 ---> Discovery 自动发现
网络发现的强大在于,短时间自动添加成百上千的机器,自动添加模板,自动分组功能依赖于标准化交付
3,agent主动方式的自动注册,Active Agent Auto-Registration,主动自动发现功能,适用于云环境下,ip端不集中,agent可以和server联系,使用 HostMetadata 或者HostMetaDataItem 来做自动注册的条件判断,扩展自动注册的筛选过滤
4,Low level discovery,LLD自动发现,适用于具有共同特性的一组变量,完成过程分为两步,1、自动发现特定变量的名称,2、添加变量的item
LLD发现的数据是一个json格式,设计到转制的问题,使用 zabbix-get验证
5,LLD配置案例,监控多个url的状态码
a,zabbix agent 配置,添加server serveractiv配置,添加zabbix_agentd.conf/下配置
b,编写low level discovery脚本,可以使用shell,使用python,perl代码会更简洁,目的是输出json格式内容
c,自定义key配置文件,设置 userparameter值,使用zabbix_get验证数据
d,页面先添加模板,添加 LLD规则,使用{#SITENAME}定义宏(macro),使用$1来代表检测出来的url,配置item,trigger,graph
e,host管理模板,完成LLD规则对应
6,saltstack,chef,puppet等自动化部署、配置文件管理与zabbix的协作
第十章 使用经验和技巧分享
1、如何有效的设置监控告警
监控告警消息的发送,是一件特别慎重的事情,处理得好,会提高响应速度,反之,则会影响工作情绪,影响工作效率,进而导致反感
监控告警信息的需求有:
a,基于业务类型,区分基础运维,应用运维,网络运维,业务运维,不同的告警发送不同的用户
b,基于故障级别,低级故障一线运维处理,严重故障运维负责人处理,灾难故障通知部门负责人,特大故障周知其他部门领导
c,基于时间发送,设置维护期,设置非工作时间的告警发送级别
d,基于故障的相关依赖,避免告警的洪水泛滥,关联业务尝试脚本自动操作
告警信息的定制需要关注以下内容:
a,哪些业务需要告警?
b,哪种故障需要告警?
c,告警等级如何划分/
d,故障依赖关系如何定义?
e,告警信息如何汇总?
f,如何做到精准有效的告警
2,监控项适当添加item图形,扩展默认图标
3,针对默认的触发器调整,以适应本地生产需求
4,数据图断图的情况,此类情况有通用思路,但是要具体问题具体分析
a,系统负载高
b,tcp连接数过多
c,网络异常
d,数据获取异常
e,数据库无法更新
第十一章 监控案例
1,监控TCP连接数
ss命令,ss state all |awk '{++S[$1]}' END {for (a in S) {printf "%ll -s %s\n",a,S[a]}}'
netstat命令,netstat -an|awk '/^tcp/ {++S[$NF] }' END {for (a in S) {printf "%ll -s %s\n",a,S[a]}}'
cat /proc/net/tcp文件,0A代表tcp_listen,0B代表tcp_closing
2,监控nginx
nginx.conf配置中添加 /nginx_status页面,curl "127.0.0.1/nginx_status” |awk ‘/active/reading/writing’ {priint $3}
3,监控PHP-FPM
php-fpm.conf中配置pm.status_path=/phpfpmstatus,nginx.conf中配置location phpfpmstatu的 fastcgi_pass uninx:/tmp/fpm.sock
4,自带模板监控mysql
mysql的监控比较简单,使用show status可以查看相关的性能参数
在脚本中配置mysql_user=$2,mysql_password=$3,mysql_host=$4,这里的参数可以作为web界面宏macro传进来的自定义变量
5,使用percona监控mysql
perconna对mysql服务器进行了改进,提升了高负载下innodb的性能,使用perconna monitoring plugins可以补充perconna的监控
先下载安装percona monitoring plugins,再安装perconna-zabbix-templates,测试key值,导入模板,完成监控
6,监控DELL服务器
导入DELL IPMI 监控模板
7,监控cisco路由器
配置cisco的snmp服务,安装net-snmp-utils,使用 snmpwalk -v 2c public 127.0.0.1 MIB 验证
8,监控vmware
配置zabbix-agentd.conf中的 startvmwarecollectors=1,使用系统自带的vmware模板添加监控
第十二章 zabbix性能优化
1,zabbix性能低下的表现:
a,zabbix队列中有比较多的延迟,通过Admiinistration --> Queen查看
b,zabbix绘图中有断图,item没有数据
c,带有nodata的触发器经常出现 False
d,前端页面无响应,打开慢
2,性能优化的依据,每秒处理的数量,nvps,等待的队列数量,queen
3,配置文件中的参数优化
a,进程的数量,包括startpollers,startpollersunreachable,starttrappers,startpingers,startdiscoverers
b,缓存的大小,缓存的大小和内容的大小有关,要具体看
c,超时的时间,包括自动发现时间,数据上报时间
4,zabbix数据库优化
a,数据库软件本身优化,使用更高性能的percona版本
b,数据库参数调优
c,表结构优化,分表等形式。注意,分表后,houserkeeper需要关闭
d,开启慢查询,针对慢查询优化
5,最后,扩容zabbix集群规模,使用更好的硬件和配置,是银弹
第十三章 zabbix-api使用
zabbix api具有重要功能,可以实现第三方调用,批量操作,与其他运维系统集成,使用JSON RPC协议
1,json-rpc协议是什么? 基于json的跨语言远程调用协议,相比webservice,java-rpc更便于调试,实现,扩展
a,调用和响应:
调用,{“method”:“getid”,“params”:["args"],“id”:1},method是调用方法名,params是参数,id是调用标识符,标记一次调用过程
响应,{“result”:“id is 000”,“error”:null,“id”:1},result是方法返回值,error是调用时错误,无错误返回null,id是调用标识符,与传入的id一致
b,支持的数据类型,bool,flag,integer,float,ftring,timestamp,array,object,query
2,zabbix api中的代码路ing位于前端php中的api/api_jsonapi.php,是api的入口文件,调用时的url为 http://x.x.x.x/api_jsonrpc.php
3,zabbix api 的使用流程
a,连接http://x.x.x.x/api_jsonrpc.php,提供用户名和密码,表示头部json,使用post方法
b,获得sessionid
c,通过sessionid,建立后续的连接,
d,提交post数据,格式为json,使用对应的方法,获取需要的数据
4,使用curl 模拟api 的使用
a,获取session的语句:
curl -i -X POST -H 'Conten-Type:application/json' -d '{"jsonrpc":"2.0","method":"user.authenticate","params":{"user":"Admin","password":"zabbix"},"auth":null,id:0}' http://192.168.0.0:8090/zabbix/api_jsonapi.php
b,响应的结果
{“jsconrpc”:“2.0”,“result”:“abcdefghijklmn”,“id”:0}
c,使用session请求调用api 的host.get方法
curl -i -X POST -H 'Content-Type:application/json' -d '{"jsonrcp":"2.0","method":"host.get","params":{"ouput":"extend","filter":{"host":""}},"auth":"abcdefghijklmn","id":1}'
d,得到响应如下:
{“jsonrpc”:“2.0”,“result”:[{"maintainances":[],"hostid":"10010","host":"zabbix server","status":"0"}],"id":1}
5,常用的接口方法和示例
a,用户认证
b,获取主机
c,添加host
d,删除host
6,使用第三方zabbix api模块
第十四章 zabbix协议讲解(跳过)
第十五章 定制zabbix-agent安装包
定制安装包,减少依赖问题,添加自定义配置,开箱即用
1,定制安装包的步骤
a,yum install -y rpm-build git
b,useradd admin
c,su - admin
d,echo “% _topdir /home/admin/rpmbuild” >~/.rpmmacros
e,rpm2cpio zabbix-2.2.2.el6.zbx.src.rpm |cpio -div
f,mv zabbix2.2.2.spec /home/admin/rpmbuild/specs
g,mv * /home/admin/rpmbuild/sources
h,cd /home/admin/rpmbuild/specs
i,rpmbuild -ba zabbix2.2.2.spec
2,参数的配置,命令的编写,都在spec文件中,修改后打包,这样安装好之后,就无需再次配置,可以开箱即用
第十六章 大型分布式监控案例
1,大规模的监控系统中,需要考虑一下因素
a,分布式架构为首要考虑因素,将中心节点压力分散到个边缘节点
b,对数据存储的可扩展性成为一个必须解决的问题,是监控系统能否正常工作的前提
c,系统的高可用和健壮性,灾备能力
d,具备为其他业务提供api的能力,和其他业务系统的联系更为紧密
e,具备自动化功能,解决以业务为核心的运维智能
2,应用安装部署
a,机器资源规划,ip地址规划,应用角色规划
b,zabbix DB安装,安装perconna server,设置开机启动
c,初始化db数据库,导入zabbix数据,设置db 主从和定期备份
d,安装zabbix server
e,配置keepalive 高可用,编写keepalive检测脚本
f,安装zabbix-gui,配置nginx和php-fpm
g,安装 zabbix-proxy,设置 zabbix-proxy服务开机自启动,web页面添加proxy
h,配置zabbix agent conf文件
3,业务相关配置
a,用户的配置,包括媒介media,用户组 user groups
b,业务组配置,按照分组方法分
c,添加和定制监控模板
d,配置自动发现等功能
f,针对其他功能的二次开发
4,最重要的是,定时检查,修补遗漏。大胆假设,仔细验证