DevOps的三板斧

开发 项目管理
DevOps代表着未开软件开发的方向,它倡导小团队,强调单兵作战能力,此时的程序员作为团队中的一员,已经不能再仅仅局限于开发的角色,必须在运维方面武装自己,希望大家都能有自己的三板斧,当然我们可不是古惑仔,而是程咬金。

话说这些天电视上正在热映《隋唐英雄》,虽然我并没有看,但是对当年田连元老先生的评书联播《隋唐演义》却是记忆犹新,特别是故事里面讲到的程咬金的三板斧:拍蒜瓣、戳脚指甲盖、胡椒面,每每听来总是让人忍俊不禁,不过这些貌似无厘头的招数在实战中却往往有出奇制胜的效果,由此可以见简单实用永远都是硬道理,在当前这个倡导DevOps的年代,我们这些程序员自然也要学一些运维方面的本事才好安身立命,下面结合一些真实案例说说我在日常工作中常用的三板斧。

 

第一板斧:AWK

Web服务器负载飙升,猜测是访问量激增造成的,如何验证?如果有监控,这自然不是什么难事,但如果没有呢?亦或者监控不能显示即使数据,此时如何是好?

前提:日志已经通过logrotate按天切分,其内容类似下面的样子:

  1. 123.123.123.123 - - [01/Jan/2013:00:01:01 +0800] "GET /path HTTP/1.1" 200 123 "-" "Mozilla" 

利用AWK,我们可以很方便的计算一天中每分钟的访问量是多少:

  1. shell> awk -F: '{ count[$2":"$3]++ } END { for (minute in count) print minute, count[minute] }' /path/to/log | sort > count.log 

下面列出生成的count.log文件中的部分数据,结果一目了然,不多说了:

  1. 18:55 14450  
  2. 18:56 14926  
  3. 18:57 15645  
  4. 18:58 16678  
  5. 18:59 19032  
  6. 19:00 29134  
  7. 19:01 34665  
  8. 19:02 35558  
  9. 19:03 35545  
  10. 19:04 35829  
  11. 19:05 35608 

如果想要以秒为单位来统计,很是类似的方法,这里就不多说了。

第二板斧:Strace

程序运行很慢,我们如何知道到底慢在哪?此时可以利用strace的「r」选项,不过需要注意的是,strace的结果在标准错误里,使用前最好重定向到标准输出。

下面让我们过滤某个PHP进程中操作时间大于0.001秒的操作:

  1. shell> strace -rp <PID> 2>&1 | awk '$1 > 0.001'  
  2. 0.001596 lstat64("/var/www", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0 

如果问题比较简单,通常这样就够了,但如果问题相对复杂,那么我们仅仅过滤出耗时的操作是不够的,最好附上完整的上下文,此时如果用AWK来做的话,代码会变得很复杂,别忘了我们还有grep,通过它的「A」和「B」选项可以很方便的保存上下文,此外利用它的正则功能,可以模拟判断时间的大小。

下面让我们过滤某个PHP进程中操作时间大于0.001秒的操作,并附上前后两行上下文:

  1. shell> strace -rp <PID> 2>&1 | grep -E '^[ ]*([1-9]|0\.[1-9]|0\.0[1-9]|0\.00[1-9])' -A 2 -B 2  
  2. 0.000081 getcwd("/var/www/script", 4096) = 32  
  3. 0.000805 lstat64("/var", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0  
  4. 0.001596 lstat64("/var/www", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0  
  5. 0.000105 lstat64("/var/www/script", {st_mode=S_IFDIR|0755, st_size=4096, ...}) = 0  
  6. 0.000112 lstat64("/var/www/script/test.php", {st_mode=S_IFREG|0644, st_size=4096, ...}) = 0 

补充:本例中使用的是PHP程序,之所以会出现一堆lstat64操作是因为PHP配置中没有设定合适的realpath_cache_size,具体就不多说了,大家自行查阅相关资料。

第三板斧:Gnuplot

数字总是苍白的,不如图形来得直观,Gnuplot在绘图方面非常简单,就拿文章开头统计访问量的例子来说,以count.log为数据源,代码大致如下:

  1. #!/usr/bin/gnuplot  
  2.  
  3. set terminal png size 500,400  
  4. set grid  
  5. set xdata time  
  6. set timefmt "%H:%M"  
  7. set format x '%H'  
  8. set xlabel "Time"  
  9. set ylabel "Count"  
  10. set output "count.png"  
  11. plot "count.log" using 1:2 with line notitle 

还支持利用多份儿数据画多条线,这样更方便对比历史数据:

  1. plot "count1.log" using 1:2 with line title "1st", \  
  2.      "count2.log" using 1:2 with line title "2nd" 

最终生成的图形是不是比数字直观多了:

Gnuplot绘图

—Gnuplot绘图

有了Gnuplot,我们甚至可以通过CRON之类的方式打造简易的图形化监控系统。

DevOps代表着未开软件开发的方向,它倡导小团队,强调单兵作战能力,此时的程序员作为团队中的一员,已经不能再仅仅局限于开发的角色,必须在运维方面武装自己,希望大家都能有自己的三板斧,当然我们可不是古惑仔,而是程咬金。

原文链接:http://huoding.com/2013/01/26/215

责任编辑:林师授 来源: 火丁笔记
相关推荐

2014-07-29 11:25:18

LinuxMySQL

2017-03-23 10:54:58

LINUXMYSQL优化

2011-03-09 15:23:25

Windows Ser

2020-09-03 15:32:08

Wireshark数据包分析

2020-11-18 08:17:14

Java源码Class

2017-08-21 23:50:45

线上内存OOM

2012-11-08 16:05:23

2019-05-30 14:30:42

技术管理架构

2009-02-19 10:20:00

2022-07-22 09:55:29

软件工程师

2020-03-09 13:37:49

Serverless无服务器腾讯云

2018-06-19 08:50:15

岗位总监管理

2010-12-29 10:29:31

Linux磁盘管理dfdu

2019-08-13 16:23:19

JavaScript数组方法

2022-05-07 11:47:36

服务器架构

2021-02-15 22:07:18

项目策略模式

2021-03-29 17:51:00

瑞数信息攻防演练

2021-06-25 15:19:13

攻防演练

2019-11-14 08:34:08

LinuxMySQLCPU

2010-05-28 09:17:45

ARM服务器
点赞
收藏

51CTO技术栈公众号