一、 全网监控简介
1.生产环境中全网监控普遍的应用场景--入职前必备技能
在每日工作开始时,首先检查监控服务中是否存在异常,或者报警信息中是否存在尚未解决的问题。
2.精细监控
zabbix监控服务,在Linux中可以做到,只要可以通过命令取值而得到的信息,均可以在zabbix服务中实现实时监控的效果,此过程被称为自定义监控;当然zabbix也自带许多监控内容,如:CPU、内存、磁盘等;而在生产环境中,作为运维人员来说大多数都是采取自定义监控的方式来完成的
3.检查备份
在检查备份的领域中,zabbix也有着得天独厚的优势,通常来讲zabbix可以直接对文件的md5的指纹信息进行对比,而不用通过冗杂的脚本方式,更加高效和精准
二、监控常用软件
1.zabbix+grafana
zabbix服务主要是监控用户端的相关信息,以及服务器、虚拟机或者实体的物理机,可以做到指哪打哪;而grafana是将zabbix监控软件监控到的数据信息优雅的显示出来(注意:与其他监控软件也可配合使用,只不过现在zabbix与grfana的组合市面上较为常见)
2.nagios+cacti
这两款软件的关系与第一种相似,nagios与cacti是大概五年至七年前时下较为普遍的监控组合,但由于nagios的使用和维护成本比较高,配置过程也相对复杂,已逐渐被淘汰,因此nagios又被嬉称为"难够死"(如对这俩个软件比较感兴趣的小伙伴可以自行百度查询,但不建议深入了解)
3.prometheus
Prometheus(普罗米修斯)也是当前比较常见一款监控服务,但与zabbix相比而言prometheus更侧重于对容器的监控,如dockers、k8s等,主要根据实际的生产环境的偏向来决定使用prometheus或者zabbix
4.Open Falcon
该服务软件是小米开源的一种监控软件,了解即可,市面上并不多见
5.监控宝/听云
此类软件主要是针对用户端访问的监控,也就是说在实际的生产环境中为了使用户有更好的体验感,我们同时也要监控不同地区不同时段,模拟各地区访问网站的速度及真实情况,我们可以通过ping.chinaz.com及www.17ce.com俩个完全免费的网站,对我们的服务器进行模拟访问,但无法向我们发送警报或者获取模拟访问的数据信息,同时稳定性也较差,因此如果生产环境中,对此需求较高,建议使用监控宝/听云这俩款软件,有收费版和免费版,可根据实际情况进行选择;当然也可以通过自行搭建smokeping,实现模拟用户访问网站,检测速度的功能,但配置有些繁杂,这里就不一一叙述,详情参考smokeping官方网站:smokeping.org
三、监控框架
对于zabbix监控软件来讲,大多数都是监控整个集群架构内所有服务器,因此便形成zabbix监控框架;参考官方网站:www.zabbix.com我们可以进一步的了解zabbix服务的相关共功能
1.zabbix监控模式:CS模式
CS模式就是client/server即客户端和服务端模式,是zabbix服务最常见也是最经典的模式,如图所示:
CS模式其实就是,zabbix服务端(以下称为server端)将zabbix客户端(以下称为agent端)传输的数据存储到数据库的过程;
server端又分为zabbix-server、LNMP\LAMP、zabbix_get等几个部分,zabbix-server就是server端的进程,实质就是一个二进制的命令,用来收取agent端的数据;LNMP\LAMP就是将agent端收集的数据信息进行web页面显示的环境,从显示环境上来看,不难发现zabbix网站是PHP程序代码编写的,在这里个人更倾向于使用LAMP环境,因为可以直接进行yum安装,但在生产环境中,更倾向于编译安装的方式,可以自定义显示环境的配置文件或日志文件的所在路径以及提高zabbix网站的性能,根据个人的实际情况进行选择;zabbix_get是一个常用的测试或排错命令,在服务端执行,主动向agent端索要数据信息,常用参数-s、-k;
agent端可以获取到各个软件服务的系统信息或监控数据信息,并主动的向server端发送,这里需要注意的是,server端只需安装在一台管理服务器即可,而agent端则需要安装到所有需要监控的服务器中,同时也就包含了server端本身,因为server端也是一台需要监控的服务器。
2.分布式监控简述
当生产环境中,出现在不同地区均有公司的服务器时,便会出现以下情况,即分布式监控,但分布式监控也属于CS模式
分布式监控的优势就在于,当不同地区存在服务器时,由于服务器不在同一机房,无法使用内网,而为了更准更快的向总部的zabbix服务器发送数据,避免因为公网网络波动的原因造成zabbix服务产生误判而触发警报,产生不必要的麻烦,因此分布式监控的核心就是创建一个过度的server端即代理服务端zabbix-proxy,不同地区的服务器将数据统一通过同一机房的内网发送到zabbix-proxy上,再由zabbix-proxy发送到总部的zabbix服务器上,最大程度的降低公网网络波动带来的不确定性和不稳定性
四、多维度的监控体系--针对无经验的正在寻找工作的小伙伴
在我们进行面试的过程中,经常会有面试官问道我们上一家公司是否有监控服务,如果有具体监控了哪些内容,那么针对这个问题,建议一些还没有工作经验的小伙伴可以参考以下的层次进行阐述,你对公司监控内容的一些看法(大牛们请自动略过),一般来讲我们是通过由外向内的方式向其介绍
1.生产情况实际监控项
a.用户访问层
这里就是通过第三方服务软件,如监控宝和听云来模拟在全国各地、不同时段访问公司网站最真实的情况,并提供电话,微信、邮箱报警等业务
b.应用程序层(app)
这一层主要是针对,当在后台监控的数据都是正常的情况下,如端口,进程均未出现报警时,并不代表web页面一定可以实现正常访问,那么这时就需要通过app应用层来对内进行监控
编写简易代码的首页文件并设定访问权限,通过页面反映出nginx+php或php+mysql的当前状态
c.服务层
监控服务层主要常见的方法还是通过一些常见的命令以及不同服务的内置变量或者自身检验的相应函数
端口
查看端口命令:netstat -lntup;namp;ss -lntup
进程
查看进程命令:ps -ef
各服务的内置方法
例如:nginx中的stub_status的状态监控模块、zabbix的zabbix_get命令等
其他
可以根据服务的特点进行监控,如nginx、PHP、tomcat等可以通过curl的方式,nfs、rsync可以通过定时任务备份,监控定时任务的方式进行定期监控
d.系统层
cpu
查看内存使用率命令:ps -aux;top;htop;vmstat;sar;iostat
查看内存信息命令:/proc/cpuinfo(文件);lscpu
内存
查看内存使用率命令:free -h;ps -aux;top;htop;jmap -heap pid(针对Java程序)
磁盘、磁盘io
查看磁盘读写情况的命令:df -h;df -i;du -sh; iotop -o; vmstat;iostat
网络、带宽
查看网络、带宽的命令: iftop(查看整体流量使用情况);nethogs(精确查看某一进程的流量情况);ping;nc;nmap
负载
查看负载情况的命令:top;w;upime
e.物理硬件层
硬件层主要是通过对温度、风扇转速、raid卡状态以及redis网络设备四个方面进行监控,但只针对有物理服务器的公司,想一些云服务器则无需监控
温度
通过ipmitool命令就可以直接监控服务器温度的实时状态,设置高温报警即可,还可以通过yum安装Im_sensors服务来监控物理服务器的温度情况,该服务主要是通过传感器来实现检查的功能
风扇转速
同样也是通过ipmitool命令,设置触发器报警即可
raid卡状态
阵列卡则就使用megacli命令进行查看
redis网络设备
主要指交换机和路由器,尤其是负责网络进入的核心路由器,当然也包括一些硬件防火墙等设备,那么监控内容又是什么,依然是网络的流量,当前整个公司的连接数等
PS1:ipmitool生产环境中的真实数据及使用
那么这里temp代表温度、FAN代表风扇的转速,单位为转/每分钟,这个命令的参数比较多,这里就不一一列举了,小伙伴们可以自己百度了解一下
PS2:生产环境中显示raid状态的命令megacli的真实数据
那么在这里额外跟大家说一下,在生产环境中,raid卡大多数均以raid组的形式出现,也就是如果一共有8各raid卡,可以将2块做成一个raid1,6块做出raid0,这样的俩个raid组,那么又如何区分有几个raid组、每个组分别用了几块阵列卡及做了什么raid级别呢?
表示:有几个Virtual Drive就代表有几个raid组,如图我司就存在俩个raid组
表示:该raid组一共使用了几块raid卡
表示:raid级别,图中显示的则是raid0,那么常见的raid级别都是如何表示的呢,如下所见:
RAID Level: Primary-1, Secondary-0, RAID Level Qualifier-0 RAID 1
RAID Level: Primary-0, Secondary-0, RAID Level Qualifier-0 RAID 0
RAID Level: Primary-5, Secondary-0, RAID Level Qualifier-3 RAID 5
RAID Level: Primary-1, Secondary-3, RAID Level Qualifier-0 RAID 10
这里请大家注意,该命令megacli需要通过rpm包进行安装,无法直接yum下载,如有需要软件包的小伙伴请留言,这里下载使用时建议大家使用64的软件包,并为其设置一个软连接,以防后续在生产环境中操作繁琐,如下图:
2.基于OSI7层模型和用户访问网站流程监控
在查询资料的过程中,查到比较靠谱的,以作参考项
基于OSI7层模型及访问网站流程监控
常用监控命令浅谈及参数
ps
该命令主要是查看各项服务进程信息,常见参数为a,显示现行终端机下的所有程序,包括其他用户的程序;u,以用户为主的格式来显示程序状况;x,显示所有程序,不以终端机来区分; -A 显示所有程序;e 此参数的效果和指定"A"参数相同;f 用ASCII字符显示树状结构,表达程序间的相互关系。主要组合为ps -ef和ps aux两种
其中:VSZ==>表示进程分配的虚拟内存,命令输出结果为占用的虚拟内存大小;
RSS==>常驻内存集(Resident Set Size),表示该进程分配的内存大小。,命令输出结果为占用的物理内存大小。
而我们常说的内存就是一个虚拟内存 = 物理内存+swap
iostat
此命令是用于输出CPU和磁盘I/O相关的统计信息用法:iostat [ 选项 ] [ <时间间隔> [ <次数> ]]
常用参数:
-c:只显示系统CPU统计信息,即单独输出avg-cpu结果,不包括device结果
-d:单独输出Device结果,不包括cpu结果
-k/-m:输出结果以kB/mB为单位,而不是以扇区数为单位
-x:输出更详细的io设备统计信息
interval/count:每次输出间隔时间,count表示输出次数,不带count表示循环输出
例如
以上各列的含义如下:
rrqm/s: 每秒对该设备的读请求被合并次数,文件系统会对读取同块(block)的请求进行合并
wrqm/s: 每秒对该设备的写请求被合并次数
r/s: 每秒完成的读次数
w/s: 每秒完成的写次数
rkB/s: 每秒读数据量(kB为单位)
wkB/s: 每秒写数据量(kB为单位)
avgrq-sz:平均每次IO操作的数据量(扇区数为单位)
avgqu-sz: 平均等待处理的IO请求队列长度
await: 平均每次IO请求等待时间(包括等待时间和处理时间,毫秒为单位)
svctm: 平均每次IO请求的处理时间(毫秒为单位)
%util: 采用周期内用于IO操作的时间比率,即IO队列非空的时间比率
重点关注参数
1、iowait% 表示CPU等待IO时间占整个CPU周期的百分比,如果iowait值超过50%,或者明显大于%system、%user以及%idle,表示IO可能存在问题。
2、avgqu-sz 表示磁盘IO队列长度,即IO等待个数。
3、await 表示每次IO请求等待时间,包括等待时间和处理时间
4、svctm 表示每次IO请求处理的时间
5、%util 表示磁盘忙碌情况,一般该值超过80%表示该磁盘可能处于繁忙状态
nethogs
NetHogs是一个开源、免费的,终端下的网络流量监控工具(类似于Linux的top命令),用来按进程或程序实时统计网络带宽使用率。它只能实时监控进程的网络带宽占用情况。它支持IPv4和IPv6协议,支持本地网卡以及PPP链接。
常用的参数:
-d delay for refresh rate. 数据刷新时间 如nethogs -d 1 就是每秒刷新一次
-h display available commands usage.
-p sniff in promiscious mode (not recommended).混合模式,不推荐
-t tracemode.跟踪模式
-V prints Version info
iftop
iftop是一款实时流量监控工具,监控TCP/IP连接等,缺点就是无报表功能。必须以root身份才能运行。
常用参数:
-n 不要把ip解析域名
-N 不要把端口解析为服务名
-P 显示端口信息
-i 指定网卡