Monitor is all for ops

  • 562 views
Uploaded on

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

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

More in: Technology , Education
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
562
On Slideshare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
12
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. 运维的立身之本:监控 monitor is all
  • 2. About Me • 人人公司网络运营部高级研发工程师 • 《网站运维技术与实践》作者 • Perl语言中国大会组织人 • 博客:http://chenlinux.com • 微博:@ARGV
  • 3. About Operation • 五年前: – 单手上架2U服务器 – 熟练部署apache软件 – 半夜三点重启 – 每周四上传压缩包更新应用 – 背黑锅
  • 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. About Operation
  • 6. About Operation
  • 7. 我靠
  • 8. About ―敌情‖
  • 9. About ―未来‖ • DevOps是抢―应用上线‖的活; • NoOps是抢―服务器上线和配置管理‖的活; • 那Ops还能靠什么活着?  投身前两者去换个方式抢回自己饭碗  祭大招:监控
  • 10. About Monitor • 监控工作是怎样的?
  • 11. About Monitor • 你猜监控工作是这样的?
  • 12. About Monitor • 监控工程师都是这样的?
  • 13. About Monitor • 工作环境是这样的?
  • 14. System Monitor • command and procfs • systemtap • monit
  • 15. command • 命令是我们了解Linux系统最直接和有效的 途径 – 网络 – 磁盘 – CPU – 内存 – 进程
  • 16. 网络 • ifconfig • ping • traceroute • arp • ethtool • iptraf • netstat • tcpdump
  • 17. ifconfig • MAC地址 • ip地址 • MTU大小 • 收发包字节数 • 错误包、丢包、重发包、巨型包数目
  • 18. ping • 每秒一次的普通模式 • 洪水攻击的疯狂模式
  • 19. traceroute • mtr命令(推荐) • 每一跳导致的延时
  • 20. netstat • 监听端口 • 建连状态
  • 21. tcpdump • 从TCP层面看建连IP对不对; • seq次序是不是正常; • win大小有没有协商加大;
  • 22. 磁盘 • df • iostat • smartctl
  • 23. df • df -Ti – 文件系统的inode问题、目录最大文件数问题 • df -h
  • 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. iostat => iops问题 • 机械磁盘的IOPS上限 – d:磁盘数量 – dIOPS:每块盘的IOPS – %r:读负载的百分比 – %w:写负载的百分比 – F:对应RAID级别的写操作次数 通过iostat输出的rsec/s和wsec/s数据计算
  • 26. Raid 级别 写操 作 读操 作 具体说明 0 1 1 高吞吐,低 1 2 1 写请求:和单盘速率一样;读请求:有两种模式。同时从两块盘读取,或者从先返回响 应的盘读取。前者吞吐量更大,后者寻道时间更短。 5 4 1 写请求:读读请求:通常吞吐量大二期 6 5 1 写请求:读读请求:通常吞吐量大二期 ―F码‖对照表
  • 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. 内存 • free • swap的意义 • vmstat看到的si/so
  • 29. 进程 • ps auxfww
  • 30. 进程 • ps awxo pid,rss,vsz,etime,args --sort=rss
  • 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. 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. CPU负载 • dstat命令 – hiq:硬中断 – siq:软中断
  • 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. /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. /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. systemtap • yum install systemtap systemtap-runtime
  • 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. 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. stap示例(socktop)
  • 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. monit命令 • monit命令通过HTTP接口和monit进程交互
  • 43. Cluster Monitor • Howto • passtive collect – nrpe/snmp • active broadcast – nsca/gmond
  • 44. HOWTO • 开几十个终端窗口 • 写shell脚本循环ssh服务器 • rsync收集服务器的sar输出 • 还有什么?
  • 45. Nagios • Nagios原理 • Nrpe原理 • Nagios-Plugins示例 • Nagios-Addons推荐 • Mod_Gearman实现分布式 "All monitoring software evolves towards becoming an implementation of Nagios." —— Etsy官方博客
  • 46. 快速部署 • yum install omd
  • 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. 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. 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. 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. 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. 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. 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. 页面浏览和配置
  • 55. Nagios报警 • 分时间、分级别、分归属、分上下游
  • 56. 报警配置 • notification_period • notifications_enabled • host_notification_options • service_notification_options • notification_interval • first_notification_delay • hostescalation • serviceescalation
  • 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. 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. Nagios原理
  • 60. Nrpe原理
  • 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. 插件示例 • # /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. 插件示例 • # /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. 扩展推荐 • PNP4Nagios • check_mk • NdoUtils
  • 65. Mod_Gearman原理
  • 66. Mod_Gearman配置
  • 67. Ganglia • Ganglia原理 • Gmond原理 • Gmond的python插件开发
  • 68. 快速部署 • yum install ganglia ganglia-gmond ganglia- gmetad ganglia-gmond-python ganglia- web
  • 69. Ganglia原理
  • 70. Gmond原理
  • 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. python_module示例
  • 73. python脚本规范示例
  • 74. pyconf配置示例
  • 75. 其他流行软件 • Cacti – 只支持snmp。一般就只用于流量监控 • Zabbix – MySQL存储,IO是瓶颈。其他功能很全 • OpenTSDB – GNUplot画图,太简陋。HBase存储易扩展
  • 76. Web Monitor • 为什么监控WEB • WEB上应该监控什么 • NetworkBench • Boomerang
  • 77. WHY • ―我这里是好的啊?‖ • ―我这里很快啊?‖
  • 78. Because...
  • 79. Also because... • AJAX • jQuery • CoffeeScript • NodeJS • Chrome Apps • ChromeOS • HTML5 • ...
  • 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. 单机检测 • # 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. 单机检测(Firebug)
  • 83. 瀑布图要点
  • 84. 八秒定律 • 谷歌每天处理的搜索量超过30亿次,如果将搜索结果的提交时 间放慢0.4秒,一天的搜索量就会减少800万次。 • 如果网页加载时间超过4秒,约有四分之一的人会放弃打开该网 页。 • 如果网页加载时间超过10秒,50%的移动用户会放弃该网页, 约五分之三的人不会再返回该网站。 • 79%的移动网络用户使用手机购物。40%的移动购物者会放弃 加载时间超过3秒的电子商务网站。 • 亚马逊(微博)每天的销售额约为6700万美元。网页延迟1秒可能 导致该公司全年最高损失16亿美元。 ——2012年3月 美国OnlineGraduatePrograms.com
  • 85. networkbench示例 当然还有类似的高明、博睿、红蜘蛛、监控宝等等。。。
  • 86. 基调行业报告
  • 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. 基础原理 • 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. 网络延时与丢包率的影响
  • 90. Futures • 预警分析 – RRD – Kale • 趋势报表 – sar sar -u sar -n DEV sar -r • 大数据搜索 – Logstash+Elasticsearch+Kibana
  • 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. 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. Kale • 异常探测的skyline(左边) • 相似查找的oculus(右边)
  • 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. skyline示例
  • 96. oculus原理 • 欧几里德算法原理:根据两点的坐标系计算直线距离; • 动态时间归整原理:将时间序列进行延伸或者缩短再计算。
  • 97. LEK
  • 98. Q & A!