一、什么是监控
我们的生活里,离不开监控,监控能够最大程度上,发挥如下作用
- 实时监测,即使你不在电脑前,也能实时掌握监控区域情况,提高工作效率
- 事后录像查询,如果不法事件未能即使发现制止,可以调取录像,让不法分子无处遁形。
- 给与不法分子震慑作用,当不法分子意识到自己暴露在监控内,就不敢使坏。
- 远程查看,远程操控,只需要联网,即可在任何设备上,试试查看监控。
二、运维的职责
1、保障企业数据的安全可靠。
2、为客户提供7*24小时服务。
3、不断提升用户的体验。
4、在关键时刻,提前提醒我们服务器要出问题了。
5、当出问题之后,可以便于找到问题的根源。
三、互联网公司里的运维
一般公司里的运维,大致可以分为基础运维、应用运维、运维开发、监控组四大部分。
- 基础运维,负责IDC运维,服务器上下架,网络设备等
- 应用运维,也就是system administrator,系统管理员
- 运维开发,负责运维工具的开发,系统开发等,例如开发监控系统,代码发布系统
- 监控组,也就是24小时值班的人员,需要时刻关注服务器,网站的状况,出现问题后,第一时间联系相关运维以及研发人员。
四、运维的难处
国内的互联网大厂,拥有几百,几千台服务器是很常见的,每天在几千台服务器上敲命令,查看系统状态,发布代码,任务非常繁琐。
- 服务器崩溃,网站后台500挂了,由于没有监控,不能即使发现;
- 代码发布太过于繁琐,每一台机器都要自己手动执行部署,一台一台的检查;
- 机器之间环境不统一,代码一样,但是这台能正常运行,另一台就不能正常运行;
- 分析问题困难,想要知道服务器历史状态,就比较麻烦;
五、为什么需要监控
监控:监视,控制
举例
随着用户的增多,服务随时可能会被系统 OOM out of memory内存溢出
kill -9 mysql
你怎么判断,web服务是因为用户访问过多,达到了瓶颈?还是程序代码bug导致的,内存过多?
上线一个新网站:压力测试2000并发,oom: out of memoery
压力测试
tailf
从尾部开始倒序来不间断查看一个文件,可以用于日志监控
tailf /var/log/messages
tailf /var/log/messages
free
查看内存使用信息,配合watch就可以实现对内存的一个简单监控
watch free -m
ab
做压力测试的,可用于httpd,nginx,iis
ab -help
- -n 在测试会话中所执行的请求个数(理解为轮数)。默认时,仅执行一个请求。
- -c 一次产生的请求个数(并发数)。默认是一次一个。
ab -n 300000 -c 6000 http://192.168.100.100/zabbix
六、没有监控系统之前
在有监控系统之前,运维人员需要登录服务器手动敲打命令来获取系统数据,例如交给大家的iotop,glances,top,free,ps等查看服务器状态的命令。
运维人员通过系统管理的命令来获取服务器数据,为了分析问题,可能会把数据复制到本地机器,通过excel等工具进行制表,画图分析服务器性能动态。
这种手动管理服务器的麻烦在于,服务器出现问题的时候,运维无法即使的发现,可能服务器内存满了,网站应用挂了,用户过来投诉才能发现。
1、free
2、df
3、iostat
- iostat是I/O statistics(输入/输出统计)的缩写,iostat工具将对系统的磁盘操作活动进行监视。
- 它的特点是汇报磁盘活动统计情况,同时也会汇报出CPU使用情况。
1)安装
yum install sysstat
2)使用
iostat
单独执行iostat,显示的结果为从系统开机到当前执行时刻的统计信息。
输出中,包含三部分:
选项 | 说明 |
---|---|
第一行 | 最上面指示系统版本、主机名和当前日期 |
avg-cpu | 总体cpu使用情况统计信息,对于多核cpu,这里为所有cpu的平均值 |
Device | 各磁盘设备的IO统计信息 |
avg-cpu中各列参数含义如下:
选项 | 说明 |
---|---|
%user | CPU在用户态执行进程的时间百分比。 |
%nice | CPU在用户态模式下,用于nice操作,所占用CPU总时间的百分比 |
%system | CPU处在内核态执行进程的时间百分比 |
%iowait | CPU用于等待I/O操作占用CPU总时间的百分比 |
%steal | 管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟CPU的百分比 |
%idle | CPU空闲时间百分比 |
- 若 %iowait 的值过高,表示硬盘存在I/O瓶颈
- 若 %idle 的值高但系统响应慢时,有可能是CPU等待分配内存,此时应加大内存容量
- 若 %idle 的值持续低于1,则系统的CPU处理能力相对较低,表明系统中最需要解决的资源是 CPU
Device中各列参数含义如下:
选项 | 说明 |
---|---|
Device | 设备名称 |
tps | 每秒向磁盘设备请求数据的次数 |
Blk_read/s | 每秒从设备(drive expressed)读取的数据量; |
Blk_wrtn/s | 每秒向设备(drive expressed)写入的数据量; |
Blk_read | 读取的总数据量; |
Blk_wrtn | 写入的总数量数据量; |
只看CPU
iostat -c
只看磁盘
iostat -d
只看磁盘 如sda
iostat -d sda
4、uptime
查看系统的启动时间,有多少个用户连接,1、5、15 min 系统的平均负载
uptime
5、top
uptime,free… 类似于windows中的任务管理器
top
6、htop
top作为日常管理工作中最常用也是最重要的Linux系统监控工具之一,可以动态观察系统进程状况。但其缺点就是只支持键盘操作,显示也单调。现在有了一个更好的选择:htop。
1)安装
epel-release centos扩展源
yum -y install epel-release
yum -y install htop
2)使用
htop
F1-F10功能键中定义的快捷功能。 F1:显示帮助信息;
F2:配置界面中的显示信息;
7、Glances
linux最好用的资源监控工具-glances
Glances 是一个由 Python 编写,使用 psutil 库来从系统抓取信息的基于 curses 开发的跨平台命令行系统监视工具。 通过 Glances,我们可以监视 CPU,平均负载,内存,网络流量,磁盘 I/O,其他处理器 和 文件系统 空间的利用情况。
- CPU 信息 (用户的相关应用, 系统核心程序和空闲程序)
- 总内存信息,包括了物理内存,交换空间和空闲内存等等
- 之前的 1 分钟、5 分钟和 15 分钟平均的 CPU 负载
- 网络链接的下行和上行速度
- 处理器总数,以及其活动状态
- 硬盘 I/O 相关(读写)速度详情
- 当前挂载设备的磁盘使用情况
- 高 CPU 和内存使用的进程名,和相关应用的位置
- 在底部显示当前日期和时间
- 将消耗最高系统资源的进程用红色标出
1)安装
由于glances运行需要python环境,所以我们需要首先安装好python环境**(如果系统是最小安装)**
yum -y install glances
2)使用
glances
Glances 会用一下几种颜色来代表状态:
- 绿色:OK(一切正常)
- 蓝色:CAREFUL(需要注意)
- 紫色:WARNING(警告)
- 红色:CRITICAL(严重)
Glances 的默认刷新频率是 1 (秒),但是你可以通过在终端指定参数来手动定义其刷新频率
8、iotop
iotop是一个用来监视磁盘I/O使用状况的 top 类工具,可监测到哪一个程序使用的磁盘IO的信息。
1)安装
yum -y install iotop
2)使用
iotop -参数
- 左右箭头操作,按 r 是相反方向,按 o 是动态切换
- -version 查看版本信息
- -h, -help 查看帮助信息
- -o, -only 只显示在操作硬盘的程序
- -b, -batch 批量处理,用来记录日志
- -n NUM 设定循环几次
- -d SEC, -delay=SEC 设定显示时间间隔
9、mailx
1)安装
yum install mailx # centos
2)配置
smtp
SMTP是一种提供可靠且有效的电子邮件传输的协议。SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知。SMTP独立于特定的传输子系统,且只需要可靠有序的数据流信道支持,SMTP的重要特性之一是其能跨越网络传输邮件,即“SMTP邮件中继”。使用SMTP,可实现相同网络处理进程之间的邮件传输,也可通过中继器或网关实现某处理进程与其他网络之间的邮件传输。
-
中文名
简单邮件传输协议
-
外文名
Simple Mail Transfer Protocol
-
简 称
SMTP
-
作 用
传输系统之间的邮件信息
-
端 口
25
vim /etc/mail.rc
set from=zmstemp@163.com # 对方收到邮件时显示的发件人
set smtp=smtp.163.com # 第三方发邮件的smtp服务器地址
set smtp-auth-user=zmstemp@163.com # 第三方发邮件的用户名
set smtp-auth-password=WTHEZUXQINBCNORH # 我不能直接使用密码,不安全。用密码来生成授权码
set smtp-auth=login # SMTP的认证方式
3)测试
echo "测试邮件" | mail -s -v "测试" 117765560@qq.com
10、awk
AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。
之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。
1)参数
这里要用它来取值
-F 指定分割符 默认的分隔符是 空格
常用内置变量
$1, 2.... 2.... 2....n | 提取当前记录的第n个字段,字段间由FS分隔 |
---|---|
$0 | 完整的输入记录 |
FILENAME | 当前文件名 |
NF | 一条记录的字段的数目,field列数 |
NR | 已经读出的记录数**,就是行号**,从1开始 |
2)实例
111 222 333 $0
111 $1
333 $3
awk '{print}' /etc/passwd
awk '{print $1}' /etc/passwd
awk -F ':' '{print $1}' /etc/passwd
awk -F ':' 'NR==1 {print $1}' /etc/passwd
11、通过脚本监控服务器
适用于公司规模不大的情况。
#!/bin/bash
while true
doFree=`free -m | awk NR==2'{print $NF}'`if [ $Free -lt 84 ]thenecho $Freeecho $Free | mail -s" 当前内存" 117765560@qq.comfisleep 60
done#!/bin/bash
while true
doFree=`iostat | awk NR==4'{print $6}'`if [ $Free -lt 200 ]thenecho $Freeecho $Free | mail -s" 当前内存" 117765560@qq.comfisleep 60
done当登录有数据数量超过3个时,发邮件告警#!/bin/bash
while true
doFree=`w | awk NR==1'{print $4}'`if [ $Free -gt 3 ]thenecho $Freeecho $Free | mail -s" 当前登录用户数量过多" 117765560@qq.comfisleep 60
done当磁盘的剩余空间<90%时,发邮件告警
授权
chmon 755 demo.sh
七、有了监控软件之后
利用一个优秀的监控软件,我们可以:
通过一个友好的界面进行浏览整个网站所有的服务器状态
可以在web前端方便的查看监控数据
可以回溯寻找事故发生时系统的问题和报警情况
1、zabbix介绍
Zabbix 是由 Alexei Vladishev 开发的一种网络监视、管理系统,基于 Server-Client 架构。
可用于监视各种网络服务、服务器和网络机器等状态。
可以使用各种 Database-end 如 MySQL, PostgreSQL, SQLite, Oracle 或 IBM DB2 储存资料。
Server 端基于 C语言、Web 管理端 frontend 则是基于 PHP 所制作的。
Zabbix 可以使用多种方式监视。可以只使用 Simple Check 不需要安装 Client 端,亦可基**于 SNMP (简单网络管理协议)**或 HTTP 各种协议定制监视。
在客户端如 UNIX, Windows 中安装 Zabbix Agent 之后,可监视 CPU Load、网络使用状况、硬盘容量等各种状态。而就算没有安装 Agent 在监视对象中,Zabbix 也可以经由 SNMP、TCP、ICMP、利用 IPMI、SSH、telnet 对目标进行监视。
Zabbbix自带的Item足够满足普通小公司的监控需求,对于大公司也可以设定自定义的Item,自动生成报表,也有API可以和其他系统集成。
2、zabbix架构
3、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网关
3、Zabbix监控方式
1)被动模式
- 被动检测:相对于agent而言; agent,server向agent请求获取配置的各监控项相关的数据,agent接收请求、获取数据并响应给server;
2)主动模式
- 主动检测:相对于agent而言; agent(active),agent向server请求与自己相关监控项配置,主动地将server配置的监控项相关的数据发送给server;
- 主动监控能极大节约监控server的资源。
4、zabbix专有词汇
1)主机(host)
不是仅仅指的一台电脑,一台你想监控的网络设备,用IP或域名表示 被监控的设备
2)主机组(host group)
主机的逻辑组;它包含主机和模板。一个主机组里的主机和模板之间并没有任何直接的关联。通常在给不同用
户组的主机分配权限时候使用主机组。
3)监控项(item)
你想要接收的主机的特定数据,一个度量数据。 要监控的项目是什么 比如磁盘大小,内存大小
4)触发器(trigger)
当内存《200 时,我要去通知老钟。
一个被用于定义问题阈值和评估"监控项接收到的数据的逻辑表达式
当接收到的数据高于阈值时,触发器从"OK"“变成"Problem"状态。当接收到的数据低于阈值时,触发器保留/返回一个OK”"的状态。
5)事件(event)
单次发生的需要注意的事情。例如触发器状态改变或发现有监控代理自动注册
6)异常(problem)
一个处在"异常""状态的触发器
7)动作(action)
一个对事件做出反应的预定义的操作。
8)升级(escalation)
一个在动作内执行操作的自定义场景,发送通知/执行远程命令的序列
9)媒介(media)
发送告警通知的手段,告警通知的途径
10)通知(notification)
利用已选择的媒体途径把跟事件相关的信息发送给用户
11)远程命令(remote command)
一个预定义好的,满足一些条件的情况下,可以在被监控主机上自动执行的命令
12)模版(template)
- 一组可以被应用到一个或多个主机上的实体(监控项,触发器,图形,聚合图形,应用,LLD,Web场景)的集合
- 模版的任务就是加快对主机监控任务的实施;也可以使监控任务的批量修改更简单。模版是直接关联到每台单独的主机上。
14)web场景(web scenario)
利用一个或多个HTTP请求来检查网站的可用性 通常用于API的监控
13)应用(application)。
—组监控项组成的逻辑分组
15)前端(frontend)
Zabbix提供的web界面
16)Zabbix API
Zabbix API允许你使用JSON RPC协议(是一个无状态且轻量级的远程过程调用(RPC)传送协议,其传递内容透过JSON为主)来创建、更新和获取Zabbix对象(如主机、监控项、图形和其他)信息或者执行任何其他的自定义的任务
17)Zabbix server
Zabbix软件实现监控的核心程序,主要功能是与Zabbix proxies和Agents进行交互、触发器计算、发送告警通知;并将数据集中保存等
18)Zabbix agent
- 一个部署在监控对象上的,能够主动监控本地资源和应用的程序
- Zabbix agent部署在监控的目标上,主动监测本地的资源和应用(硬件驱动,内存,处理器统计等)
- Zabbix agent收集本地的操作信息并将数据报告给Zabbix server用于进一步处理。一旦出现异常(比如硬盘空间已满或者有崩溃的服务进程),Zabbix server会主动警告管理员指定机器上的异常。
- Zabbix agents 的极端高效缘于它可以利用本地系统调用来完成统计数据的收集。
19)被动和主动检查
Zabbix agents 可以执行被动和主动两种检查方式
- 被动检查(passive check)模式中 agent应答数据请求,Zabbix server(或者proxy)询问agent数据,如CPU的负载情况,然后Zabbix agent回送结果。
- 主动检查(Active checks)处理过程将相对复杂。Agent必须首先从Zabbix sever索取监控项列表以进行独立处理,然后周期性地发送新的值给server。
20)zabbix proxy
- 一个帮助Zabbix Server收集数据,分担Zabbix Server的负载的程序
- Zabbix Proxy是一个可以从一个或多个受监控设备收集监控数据,并将信息发送到Zabbix sever的进程,基本上是代表sever工作的。
- 所有收集的数据都在本地进行缓存,然后传送到proxy所属的Zabbix sever。部署Proxy是可选的
- Zabbix proxy需要使用独立的数据库。