DevOps的三板斧

日期: 2014-02-19 来源:TechTarget中国 英文

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

第一板斧:AWK

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

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

1.2.3.4 – – [01/Jan/2013:00:01:01 +0800] “GET /path HTTP/1.1” …

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

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

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

18:55 14450
18:56 14926
18:57 15645
18:58 16678
18:59 19032
19:00 29134
19:01 34665
19:02 35558
19:03 35545
19:04 35829
19:05 35608

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

第二板斧:Strace

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

下面让我们过滤某个PHP进程中操作时间大于0.001秒的操作:
shell> strace -T -p <PID> 2>&1 | awk ‘substr($NF, 2, 8) > 0.001’
lstat64(“/var/www”, {…}) = 0 <0.001596>

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

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

shell> strace -T -p <PID> 2>&1 |
       grep -E -A 2 -B 2 ‘<([1-9]|0.[1-9]|0.0[1-9]|0.00[1-9])’
getcwd(“/var/www/script”, 4096) = 32 <0.000081>
lstat64(“/var”, {…}) = 0 <0.000805>
lstat64(“/var/www”, {…}) = 0 <0.001596>
lstat64(“/var/www/script”, {…}) = 0 <0.000105>
lstat64(“/var/www/script/test.php”, {…}) = 0 <0.000112>

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

第三板斧:Gnuplot

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

#!/usr/bin/gnuplot

set terminal png size 500,400
set grid
set xdata time
set timefmt “%H:%M”
set format x ‘%H’
set xlabel “Time”
set ylabel “Count”
set output “count.png”
plot “count.log” using 1:2 with line notitle

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

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

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

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

相关推荐

  • 如何减少不必要云服务成本

    由于初始成本相对较低,业务经理有时候可控制自己的云预算,但这既是好事也是坏事。 企业可以不受IT干扰,但业务经 […]

  • “以建应变”:敏捷+DevOps驱动数字化转型

    数字化转型由软件驱动。如今在数字化转型中,交付软件实际上处于每一个业务的核心,这一软件趋势也正好与CA Technologies一直强调的应用经济相一致。

  • AWS实现DevOps:思维与工具集并重

    开发与运营(即DevOps)模式让IT团队能够以比传统部署方法更快的速度来发布应用程序。很多企业已经依赖AWS用作云平台以提高敏捷性、降低成本支出以及减少用于生产应用程序的时间。

  • ”用好云“:企业如何最大化云计算价值?

    无论是个人,还是企业都已经感受了云技术所带来的便利,享受到了云计算带来的成本节约。但是,在企业普遍认可、应用云计算的时刻,我不禁要问一句”你真用好云了吗?