运维的立身之本:监控
monitor is all
About Me
• 人人公司网络运营部高级研发工程师
• 《网站运维技术与实践》作者
• Perl语言中国大会组织人
• 博客:http://chenlinux.com
• 微博:@ARGV
About Operation
• 五年前:
– 单手上架2U服务器
– 熟练部署apache软件
– 半夜三点重启
– 每周四上传压缩包更新应用
– 背黑锅
About Operation
• 现在:
– SRE(Google)
Keep the site up
Work at a Large Scale
Balance competing demands
– PE(淘宝)
– DevOps(...
About Operation
About Operation
我靠
About ―敌情‖
About ―未来‖
• DevOps是抢―应用上线‖的活;
• NoOps是抢―服务器上线和配置管理‖的活;
• 那Ops还能靠什么活着?
 投身前两者去换个方式抢回自己饭碗
 祭大招:监控
About Monitor
• 监控工作是怎样的?
About Monitor
• 你猜监控工作是这样的?
About Monitor
• 监控工程师都是这样的?
About Monitor
• 工作环境是这样的?
System Monitor
• command and procfs
• systemtap
• monit
command
• 命令是我们了解Linux系统最直接和有效的
途径
– 网络
– 磁盘
– CPU
– 内存
– 进程
网络
• ifconfig
• ping
• traceroute
• arp
• ethtool
• iptraf
• netstat
• tcpdump
ifconfig
• MAC地址
• ip地址
• MTU大小
• 收发包字节数
• 错误包、丢包、重发包、巨型包数目
ping
• 每秒一次的普通模式
• 洪水攻击的疯狂模式
traceroute
• mtr命令(推荐)
• 每一跳导致的延时
netstat
• 监听端口
• 建连状态
tcpdump
• 从TCP层面看建连IP对不对;
• seq次序是不是正常;
• win大小有没有协商加大;
磁盘
• df
• iostat
• smartctl
df
• df -Ti
– 文件系统的inode问题、目录最大文件数问题
• df -h
iostat
• rrqm/s:合并后每秒发送到设备的读入请求数
• wrqm/s:合并后每秒发送到设备的写入请求数
• r/s:每秒发送到设备的读入请求数
• w/s:每秒发送到设备的写入请求数
• rsec/s:每秒从设备读入的扇区数
• ...
iostat => iops问题
• 机械磁盘的IOPS上限
– d:磁盘数量
– dIOPS:每块盘的IOPS
– %r:读负载的百分比
– %w:写负载的百分比
– F:对应RAID级别的写操作次数
通过iostat输出的rsec/s和ws...
Raid 级别
写操
作
读操
作 具体说明
0 1 1 高吞吐,低
1 2 1
写请求:和单盘速率一样;读请求:有两种模式。同时从两块盘读取,或者从先返回响
应的盘读取。前者吞吐量更大,后者寻道时间更短。
5 4 1 写请求:读读请求:通常吞...
iops=> SSD解决
• SSD的寿命
# smartctl -A /dev/sdc
5 Reallocated_Sector_Ct 0x0032 100 100 000
Old_age Always - 0
232 Available_R...
内存
• free
• swap的意义
• vmstat看到的si/so
进程
• ps auxfww
进程
• ps awxo pid,rss,vsz,etime,args --sort=rss
VSZ和RSS的意义
• VSZ(virtual memory size):这指的是进程
可以占用的内存地址空间的大小
• RSS(resident set size):这指的是进程实际
占用的内存地址空间的大小。
# pmap -d 3026...
CPU负载
• w命令
15:10:26 up 442 days, 23:53, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
r...
CPU负载
• dstat命令
– hiq:硬中断
– siq:软中断
procfs
• 现在:
 /proc/net/dev
 /proc/meminfo
 /proc/cpuinfo
 /proc/loadavg
• 未来:
 /sys/fs/cgroup/memory/*/memory.stat
...
/proc/net/dev格式
sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout
inode
0: 00000000:0050 ...
/proc/net/dev应用示例
netstat -ant|grep '$port '|wc -l
转换成:
port_16=`echo $port | awk -F,
'{for(i=1;i<=NF;i++){printf "|%.4X",...
systemtap
• yum install systemtap systemtap-runtime
stap语法
• # stap -e 'probe kernel.function("vfs_read")
{printf("%sn", $$parms$); exit(); }'
• file={.f_u={...}, .f_path={.....
stap用法
• # cat tcp_init_cwnd.stp
• probe
kernel.function("tcp_init_cwnd").return {
• $return = $1
• }
• # stap -p4 -g -m i...
stap示例(socktop)
monit
set httpd port 2812 and
use address localhost
allow localhost
set daemon 60
set alert 'noreply@admin.com'
check syst...
monit命令
• monit命令通过HTTP接口和monit进程交互
Cluster Monitor
• Howto
• passtive collect
– nrpe/snmp
• active broadcast
– nsca/gmond
HOWTO
• 开几十个终端窗口
• 写shell脚本循环ssh服务器
• rsync收集服务器的sar输出
• 还有什么?
Nagios
• Nagios原理
• Nrpe原理
• Nagios-Plugins示例
• Nagios-Addons推荐
• Mod_Gearman实现分布式
"All monitoring software evolves toward...
快速部署
• yum install omd
nagios.cfg示例
define timeperiod{
timeperiod_name 24x7
alias 24 Hours A Day, 7 Days A Week
sunday 00:00-24:00
monday 00:00-2...
nagios.cfg示例
define contact{
name generic-contact
service_notification_period 24x7
host_notification_period 24x7
service_n...
nagios.cfg示例
define host{
name generic-host
notifications_enabled 1
event_handler_enabled 1
flap_detection_enabled 1
failu...
nagios.cfg示例
define host {
host_name XADX3-136.opi.com
alias cdn-hdn-xadx-136
address 10.10.16.136
parent XADX3-1.opi.com
...
nagios.cfg示例
define service{
name generic-service
active_checks_enabled 1
passive_checks_enabled 1
obsess_over_service 1
c...
nagios.cfg示例
define service {
service_description CDNXADX hdn cpu wait io
host_name XADX3-111.opi.com,XADX3-112.opi.com
us...
nagios.cfg示例
define command{
command_name check_by_gmond
command_line $USER1$/check_by_gmond -H
$HOSTADDRESS$ -w $ARG1$ -c...
页面浏览和配置
Nagios报警
• 分时间、分级别、分归属、分上下游
报警配置
• notification_period
• notifications_enabled
• host_notification_options
• service_notification_options
• notificati...
natification_options
 r = Recovery(恢复)
 f = Flapping(抖动)
 s = Scheduled downtime(规划内停止和恢复)
 n = None(不发送)
 d = Down(h...
escalation示例
define serviceescalation{
service_description CDNXADX hdn cpu wait io
first_notification 4
last_notification ...
Nagios原理
Nrpe原理
插件示例
• # /omd/sites/cdn/lib/nagios/plugins/check_http
10.9.16.45 -p 80 -H hdn.xnimg.cn -u /10k.html
• HTTP OK: HTTP/1.1 20...
插件示例
• # /omd/sites/cdn/lib/nagios/plugins/check_http
10.9.16.45 -p 80 -H hdn.xnimg.cn -u /10k.htm
• HTTP WARNING: HTTP/1....
插件示例
• # /omd/sites/cdn/lib/nagios/plugins/check_http
10.9.16.240 -p 80 -H hdn.xnimg.cn -u /10k.html
• CRITICAL - Socket t...
扩展推荐
• PNP4Nagios
• check_mk
• NdoUtils
Mod_Gearman原理
Mod_Gearman配置
Ganglia
• Ganglia原理
• Gmond原理
• Gmond的python插件开发
快速部署
• yum install ganglia ganglia-gmond ganglia-
gmetad ganglia-gmond-python ganglia-
web
Ganglia原理
Gmond原理
ganglia.conf要点示例
cluster {
name = "CdnXianTelecom"
owner = "renren.com"
latlong = "unspecified"
url = "http://www.renren.c...
python_module示例
python脚本规范示例
pyconf配置示例
其他流行软件
• Cacti
– 只支持snmp。一般就只用于流量监控
• Zabbix
– MySQL存储,IO是瓶颈。其他功能很全
• OpenTSDB
– GNUplot画图,太简陋。HBase存储易扩展
Web Monitor
• 为什么监控WEB
• WEB上应该监控什么
• NetworkBench
• Boomerang
WHY
• ―我这里是好的啊?‖
• ―我这里很快啊?‖
Because...
Also because...
• AJAX
• jQuery
• CoffeeScript
• NodeJS
• Chrome Apps
• ChromeOS
• HTML5
• ...
What
• HTTP
– duration_connect_msec (u_int32)
– duration_firstbyte_msec (u_int32)
– duration_total_msec (u_int32)
– reques...
单机检测
• # curl -s -o /dev/null http://www.baidu.com
-w "%{http_code} %{time_namelookup}
%{time_connect} %{time_starttransfe...
单机检测(Firebug)
瀑布图要点
八秒定律
• 谷歌每天处理的搜索量超过30亿次,如果将搜索结果的提交时
间放慢0.4秒,一天的搜索量就会减少800万次。
• 如果网页加载时间超过4秒,约有四分之一的人会放弃打开该网
页。
• 如果网页加载时间超过10秒,50%的移动用户会放弃...
networkbench示例
当然还有类似的高明、博睿、红蜘蛛、监控宝等等。。。
基调行业报告
Boomerang
<script src="boomerang.js" type="text/javascript"></script>
<script type="text/javascript">
BOOMR.init({
beacon_...
基础原理
• HTML页面嵌入如下代码:
testdiv = $("#testing");
testdiv.css("display","none");
begin = new Date;
testdiv.attr("src", testurl...
网络延时与丢包率的影响
Futures
• 预警分析
– RRD
– Kale
• 趋势报表
– sar
sar -u
sar -n DEV
sar -r
• 大数据搜索
– Logstash+Elasticsearch+Kibana
RRDtool
• RRDtool通过 Holt-Winters 预测算法,为数据源提供数据
平滑,置信区间,发展预测等扩展功能。
# rrdtool create monitor.rrd --step 300 
DS:ifOutOctets:...
RRDtool示例
# rrdtool graph - --alt-y-grid --rigid --color 'BACK#E0E0E0' 
--color 'SHADEA#FFFFFF' --color 'SHADEB#FFFFFF' 
-...
Kale
• 异常探测的skyline(左边)
• 相似查找的oculus(右边)
skyline原理
• first_hour_average
• simple_stddev_from_moving_average
• stddev_from_moving_average
• mean_subtraction_cumulat...
skyline示例
oculus原理
• 欧几里德算法原理:根据两点的坐标系计算直线距离;
• 动态时间归整原理:将时间序列进行延伸或者缩短再计算。
LEK
Q & A!
Monitor is all for ops
Monitor is all for ops
Monitor is all for ops
Upcoming SlideShare
Loading in …5
×

Monitor is all for ops

1,689 views

Published on

Howto against with DevOps and NoOps? We can do and analyse the monitor!

Published in: Technology, Education

Monitor is all for ops

  1. 1. 运维的立身之本:监控 monitor is all
  2. 2. About Me • 人人公司网络运营部高级研发工程师 • 《网站运维技术与实践》作者 • Perl语言中国大会组织人 • 博客:http://chenlinux.com • 微博:@ARGV
  3. 3. About Operation • 五年前: – 单手上架2U服务器 – 熟练部署apache软件 – 半夜三点重启 – 每周四上传压缩包更新应用 – 背黑锅
  4. 4. About Operation • 现在: – SRE(Google) Keep the site up Work at a Large Scale Balance competing demands – PE(淘宝) – DevOps(Facebook) Move Fast, Monitor Close – SDN
  5. 5. About Operation
  6. 6. About Operation
  7. 7. 我靠
  8. 8. About ―敌情‖
  9. 9. About ―未来‖ • DevOps是抢―应用上线‖的活; • NoOps是抢―服务器上线和配置管理‖的活; • 那Ops还能靠什么活着?  投身前两者去换个方式抢回自己饭碗  祭大招:监控
  10. 10. About Monitor • 监控工作是怎样的?
  11. 11. About Monitor • 你猜监控工作是这样的?
  12. 12. About Monitor • 监控工程师都是这样的?
  13. 13. About Monitor • 工作环境是这样的?
  14. 14. System Monitor • command and procfs • systemtap • monit
  15. 15. command • 命令是我们了解Linux系统最直接和有效的 途径 – 网络 – 磁盘 – CPU – 内存 – 进程
  16. 16. 网络 • ifconfig • ping • traceroute • arp • ethtool • iptraf • netstat • tcpdump
  17. 17. ifconfig • MAC地址 • ip地址 • MTU大小 • 收发包字节数 • 错误包、丢包、重发包、巨型包数目
  18. 18. ping • 每秒一次的普通模式 • 洪水攻击的疯狂模式
  19. 19. traceroute • mtr命令(推荐) • 每一跳导致的延时
  20. 20. netstat • 监听端口 • 建连状态
  21. 21. tcpdump • 从TCP层面看建连IP对不对; • seq次序是不是正常; • win大小有没有协商加大;
  22. 22. 磁盘 • df • iostat • smartctl
  23. 23. df • df -Ti – 文件系统的inode问题、目录最大文件数问题 • df -h
  24. 24. iostat • rrqm/s:合并后每秒发送到设备的读入请求数 • wrqm/s:合并后每秒发送到设备的写入请求数 • r/s:每秒发送到设备的读入请求数 • w/s:每秒发送到设备的写入请求数 • rsec/s:每秒从设备读入的扇区数 • wsec/s:每秒向设备写入的扇区数 • rkB/s:每秒从设备读入的数据量,单位为K • wkB/s:每秒向设备写入的数据量,单位为K • avgrq-sz:发送到设备的请求的平均大小,单位是扇区 • avgqu-sz:发送到设备的请求的平均队列长度 • await:I/O请求平均执行时间.包括发送请求和执行的时间.单位是毫秒 • svctm:发送到设备的I/O请求的平均执行时间.单位是毫秒 • %util:在I/O请求发送到设备期间,占用CPU时间的百分比
  25. 25. iostat => iops问题 • 机械磁盘的IOPS上限 – d:磁盘数量 – dIOPS:每块盘的IOPS – %r:读负载的百分比 – %w:写负载的百分比 – F:对应RAID级别的写操作次数 通过iostat输出的rsec/s和wsec/s数据计算
  26. 26. Raid 级别 写操 作 读操 作 具体说明 0 1 1 高吞吐,低 1 2 1 写请求:和单盘速率一样;读请求:有两种模式。同时从两块盘读取,或者从先返回响 应的盘读取。前者吞吐量更大,后者寻道时间更短。 5 4 1 写请求:读读请求:通常吞吐量大二期 6 5 1 写请求:读读请求:通常吞吐量大二期 ―F码‖对照表
  27. 27. iops=> SSD解决 • SSD的寿命 # smartctl -A /dev/sdc 5 Reallocated_Sector_Ct 0x0032 100 100 000 Old_age Always - 0 232 Available_Reservd_Space 0x0033 100 100 010 Pre-fail Always - 0 233 Media_Wearout_Indicator 0x0032 090 090 000 Old_age Always - 0 241 Host_Writes_32MiB 0x0032 100 100 000 Old_age Always - 151100
  28. 28. 内存 • free • swap的意义 • vmstat看到的si/so
  29. 29. 进程 • ps auxfww
  30. 30. 进程 • ps awxo pid,rss,vsz,etime,args --sort=rss
  31. 31. VSZ和RSS的意义 • VSZ(virtual memory size):这指的是进程 可以占用的内存地址空间的大小 • RSS(resident set size):这指的是进程实际 占用的内存地址空间的大小。 # pmap -d 30269 30269: /usr/sbin/apache2 -k start Address Kbytes Mode Offset Device Mapping b74c7000 1676 r-x-- 0000000000000000 000:00010 libc-2.15.so b766a000 4 ----- 00000000001a3000 000:00010 libc-2.15.so b766b000 8 r---- 00000000001a3000 000:00010 libc-2.15.so b766d000 4 rw--- 00000000001a5000 000:00010 libc-2.15.so
  32. 32. CPU负载 • w命令 15:10:26 up 442 days, 23:53, 1 user, load average: 0.00, 0.00, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 10.4.250.84 14:50 0.00s 0.07s 0.00s w • load average的含义 • linux会每5秒钟统计一次当前正在运行的任务(kernel代码中的 TASK_RUNNING)数和正在等待磁盘IO的任务( TASK_UNINTERRUPTIBLE)数,然后每1、5和15分钟计算一次平 均值,这就是平均负载。 • 如果是多CPU的服务器,那么linux先对每个CPU进行平均负载计算, 然后求和。
  33. 33. CPU负载 • dstat命令 – hiq:硬中断 – siq:软中断
  34. 34. procfs • 现在:  /proc/net/dev  /proc/meminfo  /proc/cpuinfo  /proc/loadavg • 未来:  /sys/fs/cgroup/memory/*/memory.stat  /sys/fs/cgroup/blkio/*/blkio.*  /sys/fs/cgroup/cpuacct/*/cpuacct.stat  /proc/`cat /sys/fs/cgroup/devices/*/tasks`/ns/net
  35. 35. /proc/net/dev格式 sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode 0: 00000000:0050 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 22714864 1 ffff88004f918740 750 0 0 2 -1 • 数据都采用十六进制,所以这个0050其实是80端口 • st含义如下: – 00 "ERROR_STATUS", – 01 "TCP_ESTABLISHED", – 02 "TCP_SYN_SENT", – 03 "TCP_SYN_RECV", – 04 "TCP_FIN_WAIT1", – 05 "TCP_FIN_WAIT2", – 06 "TCP_TIME_WAIT", – 07 "TCP_CLOSE", – 08 "TCP_CLOSE_WAIT", – 09 "TCP_LAST_ACK", – 0A "TCP_LISTEN", – 0B "TCP_CLOSING",
  36. 36. /proc/net/dev应用示例 netstat -ant|grep '$port '|wc -l 转换成: port_16=`echo $port | awk -F, '{for(i=1;i<=NF;i++){printf "|%.4X",$i}'} | sed 's/|//'` cat /proc/net/tcp* | awk '$2~/:('$port_16')$/' | wc -l • 2万链接的情况下计算耗时从20秒降低到5秒。
  37. 37. systemtap • yum install systemtap systemtap-runtime
  38. 38. stap语法 • # stap -e 'probe kernel.function("vfs_read") {printf("%sn", $$parms$); exit(); }' • file={.f_u={...}, .f_path={...}, .f_op=0xffffffffa06e1d80, .f_lo ck={...}, .f_count={...}, .f_flags=34818, buf="" count=8196 pos=-131938753921208 • # stap -e 'probe kernel.function("vfs_read") {printf("%sn", $$parms$$); exit(); }' • file={.f_u={.fu_list={.next=0xffff8801336ca0e8,.prev=0xfff f88012ded0840 }, .fu_rcuhead={.next=0xffff8801336ca0e8
  39. 39. stap用法 • # cat tcp_init_cwnd.stp • probe kernel.function("tcp_init_cwnd").return { • $return = $1 • } • # stap -p4 -g -m initcwnd tcp_init_cwnd.stp 10 • # insmod initcwnd.ko
  40. 40. stap示例(socktop)
  41. 41. monit set httpd port 2812 and use address localhost allow localhost set daemon 60 set alert 'noreply@admin.com' check system localhost if cpu usage (wait) > 5% for 2 cycles then alert check process squid with pidfile '/var/run/squid.pid' start program = '/etc/init.d/squid start' stop program = '/etc/init.d/squid stop' if totalmem > 8192 Mb then restart squid check file cache_log with path /var/log/squid/cache.log if match "COSS: /data/stripe: Rebuild Completed" then exec "/usr/libexec/squid/online" every 10 cycles
  42. 42. monit命令 • monit命令通过HTTP接口和monit进程交互
  43. 43. Cluster Monitor • Howto • passtive collect – nrpe/snmp • active broadcast – nsca/gmond
  44. 44. HOWTO • 开几十个终端窗口 • 写shell脚本循环ssh服务器 • rsync收集服务器的sar输出 • 还有什么?
  45. 45. Nagios • Nagios原理 • Nrpe原理 • Nagios-Plugins示例 • Nagios-Addons推荐 • Mod_Gearman实现分布式 "All monitoring software evolves towards becoming an implementation of Nagios." —— Etsy官方博客
  46. 46. 快速部署 • yum install omd
  47. 47. nagios.cfg示例 define timeperiod{ timeperiod_name 24x7 alias 24 Hours A Day, 7 Days A Week sunday 00:00-24:00 monday 00:00-24:00 tuesday 00:00-24:00 wednesday 00:00-24:00 thursday 00:00-24:00 friday 00:00-24:00 saturday 00:00-24:00 }
  48. 48. nagios.cfg示例 define contact{ name generic-contact service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r,f,s host_notification_options d,u,r,f,s service_notification_commands service-notify-by-email host_notification_commands host-notify-by-email register 0 } define contact { contact_name zhangling alias zhangling email zhangling@renren-inc.com use generic-contact } define contactgroup { contactgroup_name rradmin alias renren administrator members raochenlin,xiehaichao,zhangling }
  49. 49. nagios.cfg示例 define host{ name generic-host notifications_enabled 1 event_handler_enabled 1 flap_detection_enabled 1 failure_prediction_enabled 1 process_perf_data 1 retain_status_information 1 retain_nonstatus_information 1 notification_period 24x7 check_period 24x7 check_interval 5 retry_interval 1 max_check_attempts 3 check_command check-host-alive notification_interval 120 notification_options d,u,r register 0 }
  50. 50. nagios.cfg示例 define host { host_name XADX3-136.opi.com alias cdn-hdn-xadx-136 address 10.10.16.136 parent XADX3-1.opi.com use host-pnp contact_groups rradmin hostgroups cdn-xa-squid }
  51. 51. nagios.cfg示例 define service{ name generic-service active_checks_enabled 1 passive_checks_enabled 1 obsess_over_service 1 check_freshness 0 notifications_enabled 1 event_handler_enabled 1 flap_detection_enabled 1 failure_prediction_enabled 1 process_perf_data 1 retain_status_information 1 retain_nonstatus_information 1 is_volatile 0 check_period 24x7 max_check_attempts 3 normal_check_interval 10 retry_check_interval 2 notification_options w,u,c,r notification_interval 60 notification_period 24x7 register 0 }
  52. 52. nagios.cfg示例 define service { service_description CDNXADX hdn cpu wait io host_name XADX3-111.opi.com,XADX3-112.opi.com use srv-pnp active_checks_enabled 1 check_command check_by_gmond!10!20!cpu_wio check_interval 5 contact_groups rradmin first_notification_delay 2 retry_interval 1 } • retry_interval —— 覆盖了use模板内已经定义的原有值
  53. 53. nagios.cfg示例 define command{ command_name check_by_gmond command_line $USER1$/check_by_gmond -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -m $ARG3$ } • $USER1$ —— 默认宏定义,指向plugin目录,可以自定 义
  54. 54. 页面浏览和配置
  55. 55. Nagios报警 • 分时间、分级别、分归属、分上下游
  56. 56. 报警配置 • notification_period • notifications_enabled • host_notification_options • service_notification_options • notification_interval • first_notification_delay • hostescalation • serviceescalation
  57. 57. natification_options  r = Recovery(恢复)  f = Flapping(抖动)  s = Scheduled downtime(规划内停止和恢复)  n = None(不发送)  d = Down(host状态)  u = Unreachable(host不可达)或Unknown(service未知)  w = Warning(service警告)  c = Critical(service危险)
  58. 58. escalation示例 define serviceescalation{ service_description CDNXADX hdn cpu wait io first_notification 4 last_notification 0 notification_interval 30 contact_groups sysadmin_email } • 不在escalation范围的,按照普通 notification定义运行
  59. 59. Nagios原理
  60. 60. Nrpe原理
  61. 61. 插件示例 • # /omd/sites/cdn/lib/nagios/plugins/check_http 10.9.16.45 -p 80 -H hdn.xnimg.cn -u /10k.html • HTTP OK: HTTP/1.1 200 OK - 9747 bytes in 0.011 second response time | time=0.010561s;;;0.000000 size=9747B;;;0 • # echo $? • 0
  62. 62. 插件示例 • # /omd/sites/cdn/lib/nagios/plugins/check_http 10.9.16.45 -p 80 -H hdn.xnimg.cn -u /10k.htm • HTTP WARNING: HTTP/1.1 404 Not Found - 319 bytes in 0.591 second response time |time=0.591065s;;;0.000000 size=319B;;;0 • # echo $? • 1
  63. 63. 插件示例 • # /omd/sites/cdn/lib/nagios/plugins/check_http 10.9.16.240 -p 80 -H hdn.xnimg.cn -u /10k.html • CRITICAL - Socket timeout after 10 seconds • # echo $? • 2
  64. 64. 扩展推荐 • PNP4Nagios • check_mk • NdoUtils
  65. 65. Mod_Gearman原理
  66. 66. Mod_Gearman配置
  67. 67. Ganglia • Ganglia原理 • Gmond原理 • Gmond的python插件开发
  68. 68. 快速部署 • yum install ganglia ganglia-gmond ganglia- gmetad ganglia-gmond-python ganglia- web
  69. 69. Ganglia原理
  70. 70. Gmond原理
  71. 71. ganglia.conf要点示例 cluster { name = "CdnXianTelecom" owner = "renren.com" latlong = "unspecified" url = "http://www.renren.com" } udp_send_channel { port = 8649 host = 10.10.16.111 } udp_recv_channel { port = 8649 bind = 10.10.16.131 } tcp_accept_channel { port = 8649 }
  72. 72. python_module示例
  73. 73. python脚本规范示例
  74. 74. pyconf配置示例
  75. 75. 其他流行软件 • Cacti – 只支持snmp。一般就只用于流量监控 • Zabbix – MySQL存储,IO是瓶颈。其他功能很全 • OpenTSDB – GNUplot画图,太简陋。HBase存储易扩展
  76. 76. Web Monitor • 为什么监控WEB • WEB上应该监控什么 • NetworkBench • Boomerang
  77. 77. WHY • ―我这里是好的啊?‖ • ―我这里很快啊?‖
  78. 78. Because...
  79. 79. Also because... • AJAX • jQuery • CoffeeScript • NodeJS • Chrome Apps • ChromeOS • HTML5 • ...
  80. 80. What • HTTP – duration_connect_msec (u_int32) – duration_firstbyte_msec (u_int32) – duration_total_msec (u_int32) – request_bytes (u_int32) – response_bytes (u_int32) – response_code (string) • HTTPS – ssl_expire_in_sec (u_int64) • JBOSS(Monitor via JMX, SNMP, j4p) – session_count (u_int32) – free_mem (u_int64) – ajpthread_count (u_int32)
  81. 81. 单机检测 • # curl -s -o /dev/null http://www.baidu.com -w "%{http_code} %{time_namelookup} %{time_connect} %{time_starttransfer} %{time_total} %{size_download}n" • 200 0.001 0.003 0.006 0.011 53592
  82. 82. 单机检测(Firebug)
  83. 83. 瀑布图要点
  84. 84. 八秒定律 • 谷歌每天处理的搜索量超过30亿次,如果将搜索结果的提交时 间放慢0.4秒,一天的搜索量就会减少800万次。 • 如果网页加载时间超过4秒,约有四分之一的人会放弃打开该网 页。 • 如果网页加载时间超过10秒,50%的移动用户会放弃该网页, 约五分之三的人不会再返回该网站。 • 79%的移动网络用户使用手机购物。40%的移动购物者会放弃 加载时间超过3秒的电子商务网站。 • 亚马逊(微博)每天的销售额约为6700万美元。网页延迟1秒可能 导致该公司全年最高损失16亿美元。 ——2012年3月 美国OnlineGraduatePrograms.com
  85. 85. networkbench示例 当然还有类似的高明、博睿、红蜘蛛、监控宝等等。。。
  86. 86. 基调行业报告
  87. 87. Boomerang <script src="boomerang.js" type="text/javascript"></script> <script type="text/javascript"> BOOMR.init({ beacon_url: "http://yoursite.com/beacon.php", user_ip: "<user's ip>", BW: { base_url: "http://base_url/images/", cookie: "BW" } }); </script>
  88. 88. 基础原理 • HTML页面嵌入如下代码: testdiv = $("#testing"); testdiv.css("display","none"); begin = new Date; testdiv.attr("src", testurl); end = new Date; msec = end.getTime() - begin.getTime(); $.get("http://monitor.com/api",{time: msec, url: testurl}); • Nginx配置定义如下日志格式: log_format js_record '$time_local $status $remote_addr $COOKIE_id $arg_time $arg_url $http_referer $http_x_forwarded_for' • 根据$arg_time统计访问耗时低于2秒的百分比
  89. 89. 网络延时与丢包率的影响
  90. 90. Futures • 预警分析 – RRD – Kale • 趋势报表 – sar sar -u sar -n DEV sar -r • 大数据搜索 – Logstash+Elasticsearch+Kibana
  91. 91. RRDtool • RRDtool通过 Holt-Winters 预测算法,为数据源提供数据 平滑,置信区间,发展预测等扩展功能。 # rrdtool create monitor.rrd --step 300 DS:ifOutOctets:COUNTER:1800:0:4294967295 RRA:AVERAGE:0.5:1:2016 RRA:HWPREDICT:1440:0.1:0.0035:288:3 RRA:SEASONAL:288:0.1:2 RRA:DEVPREDICT:1440:5 RRA:DEVSEASONAL:288:0.1:2 RRA:FAILURES:288:7:9:5
  92. 92. RRDtool示例 # rrdtool graph - --alt-y-grid --rigid --color 'BACK#E0E0E0' --color 'SHADEA#FFFFFF' --color 'SHADEB#FFFFFF' --start '-1D' --end N --width 280 --height 200 --title '__SUMMARY__:__SUMMARY__[ last 1D]' --vertical-label ' per secend' DEF:value=requests.rrd:value:AVERAGE DEF:seasonal=requests.rrd:value:SEASONAL DEF:hwpredict=requests.rrd:value:HWPREDICT DEF:devpredict=requests.rrd:value:DEVPREDICT DEF:failures=requests.rrd:value:FAILURES CDEF:predict_upper=hwpredict,devpredict,2,*,+ CDEF:predict_lowper=hwpredict,devpredict,2,*,- TICK:failures#ffffa0:1.0:'Failures Average bits out' LINE:value#0022e9: requests.rrd GPRINT:value:LAST:' Predict:%8.2lf %s' GPRINT:value:MAX:' Max:%8.2lf %s' GPRINT:value:AVERAGE:' Average:%8.2lf %s' LINE:seasonal#2266ee:SEASONAL_requests.rrd LINE:predict_upper#229900:PREDICT_UP_requests.rrd LINE:predict_lowper#992200:PREDICT_LOW_requests.rrd
  93. 93. Kale • 异常探测的skyline(左边) • 相似查找的oculus(右边)
  94. 94. skyline原理 • first_hour_average • simple_stddev_from_moving_average • stddev_from_moving_average • mean_subtraction_cumulation • least_squares • histogram_bins • grubbs • median_absolute_deviation • Kolmogorov-Smirnov_test
  95. 95. skyline示例
  96. 96. oculus原理 • 欧几里德算法原理:根据两点的坐标系计算直线距离; • 动态时间归整原理:将时间序列进行延伸或者缩短再计算。
  97. 97. LEK
  98. 98. Q & A!

×