python脚本pdb调试工具使用

pdb是linux的的python调试工具,它功能比较齐全,使用起来也很方便, 按一边运维工程师的发展来说,一般最早接触的是shell编程, 所以大多是在shell的基础上开始学习Python的,如果是刚 从shell脚本转到写python脚本的小伙伴可能会有点不太适应,比如说调试,大家都知道写脚本是有一个调试过程的除非你的脚本里只有一行, 那既然都有调试过程,那shell下调试就很方便,shell运行时我们可以直接 sh -x  myscript.sh ,就可以看到整个脚本运行的过程,或者在某些关键地方加入echo ,打印出变量,调试方法简单直接, 所以在写Python脚本时我们继承了写shell脚本的调试习惯,我们会在程序中加入print 来调试关键变量,这也是现在大家通用的方法,但有时候就行不通,如果一个脚本写的很长,有涉及到某些逻辑在里面,用print就显得无力了,如果你不掌握调试方法,那完成一个稍微复杂的脚本是相当痛苦的,所以掌握调试工具是写出复杂程序的必备技能,那就引出了今天我们要说的pdb调试工具。

开始前我们先了解下pdb的常用命令:

1、step:单步调试,执行下一行代码,但是有函数调用会进入函数内部。

2、next:执行下一行代码,如果当前语句有函数调用,则不会进入函数体中

3、break:设置程序断点,

4、continue:继续执行程序,直到下一个断点

5、list:显示第几行,例如:list 50

6、print:这个就是打印想看的参数

7、quit:退出

我们拿一个例子看如果具体应用:

比如我调试我之前的脚本:parser_nginx_log.py

我用最简单的方式在终端开始运行:

python -m pdb  parser_nginx_log.py

截图如下:

pdb

 

 

 

学习Python问?

感谢各位捧场,今天是2017年的第一篇,因为在之前不断收到小伙伴们在后台关于Pytho学习相关的留言,所以想在今年开篇先做一个答疑,方便各位更好的学习:

1、现在学习Python2还是python3?

这个问题应该是每个学python前都会碰到的问题,我记得刚开始学的时候也是搜了很多资料来确定自己到底用哪个更合适,但文章看的太多反而自己更晕了,我最早终选择的是是Python2版本, 但其实我最早学习的时候是看的python3,为什么改成python2了呢?因为我主要工作是做运维,用的是linux系统,而linux系统自带的都是2的版本,我用python3的版本写出来的脚本无法在linux系统里执行,所以我最终选择了2,所以说最终选择哪个版本还是要根据你自己的情况来定,如果是做运维工作我建议用2因为你如果写的3的版本代码在linux系统里是无法运行的,最新的CENTOS7的系统集成的版本也才是2.7的版本。

2、写python用个编辑器好?

这个也因人而异了,我用pycharm多一些,vi也用,反正编辑器你最好熟练一个,这个会帮助你写代码效率更高一些。

3、python的缩进如何解决?

这个解决不了,这是语言特性, 我想问这个问题应该不是要解决,应该敲空格敲多了太痛苦吧,可以参考上面问题选择一款自己合适的编辑器,我想你遇到到问题都会迎刃而解,因为编辑器里不管是你单行缩进还是整段缩进都是快捷键一键搞定。

4、初学习Python要先看那些书?

现在市面上入门的书籍应该很多了,我当时是看的python核心编程,现在不知道还有没有卖,如果是要入门之看上半部分就可以了,下半部分明显不是给入门者准备的,其实如果是入门书籍差别不会太大,尽量找个厚点的(覆盖的方面会广,后续也可以做参考书,我自己的理解),我觉得入门嘛,一本就够。

5、python好学吗?

这门语言入门容易,精通难,另外难不难也要根据个人情况,千万别被网上一些文章忽悠,说作者几天就精通python了,让你心血澎湃,感觉自己几天也能精通,但一旦开始学发现不是那回事,让自信心受到了打击,于是心灰意冷,书本丢到一边再也不看了, 我觉得这些文章其实挺害人的,因为他们往往没有介绍自己的背景,这些人往往是站在自己经精通了某种语言基础上来看python的,因为编程语言很大一部分是想通的,所以他们只要了解了语法,就可以上手了,如果小白从头开始是不可能几天就精通某个语言的。

今天就写到这里,还有很多问题没有答复,后续有时间在接着写吧。

 

 

 

 

运维,我想过一个没有故障的春节

在过五天就是春节了,估计心急的小伙伴早已经踏上了回家的火车或者已经吃上了家里的妈妈给做的团圆饭, 现在办公室已经没有干活的气氛了,到处洋溢着喜悦的气氛, 现在在岗位的同事我用手都可以数的过来,旁边的同事回家的箱子已经放到工位了,今天晚上的火车下班直接回家;前面的同事因为是明天走,现在在安静的看新闻打发时间; 还有几个在聊天的,也许每一年只有在这个时候大家才是真正的放松,因为除了工作本身压力减少外,还有马上要跟家里人团聚的喜悦心情,这就是春节的魅力,它跟一年中每个节日都不同。

在互联网公司里,运维岗位春节假期会稍有不同,因为它是一个没有严格意义上休假的概念,因为维护是公司生产环境,分分钟故障都会影响公司收入,必须有着时刻上战场的准备, 所以作为运维人每到节假日心里都总有些不是那么痛快,一方面想的是痛快的过个好假期,另一个方面却担心如果线上出问题,因为只要有问题就要花时间去解决,说个极端的例子:比如大年初一你在家里吃团圆饭,这时你收到一个报警短信告诉你某台机器宕机了,你是不是要马上去处理,等你处理完,估计好心情都没有了。但这是我们运维人的职责,我们不必抱怨,不必自责,要明白这才是我们作为一个运维人的基本价值:保障公司线上业务的稳定。

上面的例子也许太极端,但也反应出我们运维人日常的工作场景,有没有什么办法能减少这样的事情发生,当然最简单的办法就是防患于未然, 放假前检查工作提前做,别被动等问题发生, 那该检查什么呢? 在这里我总结一些点给大家参考:

线上生成环境检查

  • 监控报警可用性检查
  • 业务是否有备机,保证机器坏了可以及时找其他机器替换。
  • 有故障可能性的机器要提前更换,别等着它挂。
  • 如果有业务节假日更新,注意更新日期,别当天一高兴喝高了,给忘记了(这事貌似每年都有)
  • 业务相关人的联系方式,这个很重要,有时候出问题不是你一个人解决的,别到时候找不到人,耽误时间。
  • 了解故障汇报机制,出问题如果不在自己的控制范围内,要及时联系领导去解决,别等着,要知道每耽搁一分钟对公司来说都是致命的。

先总结这么多,欢迎小伙伴们补充,这就马上春节了,请春节期间小伙伴注意自身安全,饮酒适度, 未来二周我讲暂停更新,确保不骚扰大家,让大家过个好年, 最后在这里也祝大家新春快乐,阖家欢乐!

调用zabbix API获取主机

zabbix 作为企业级的系统和网络监控方案,对于中小型公司来说基本可以很好的满足对机器的监控需求,因为其部署方便,操作简单深受现在各个互联网公司喜爱,所以现在基本的互联网公司监控用zabbix的非常多,当你安装好zabbix服务端 后,如果启动自动注册功能,在所有客户机安装后会自动在zabbix平台上被监控到,但这里有个问题,如果你机器数量非常少,如果还能数的过来那基本没什么问题,但如果你机器上千台了,这个时候那些机器被监控中,那些没被监控,查起来就没那么方便了,所以日常运维中经常发现的问题就是某台机器故障了但没报警,经查发现这台机器zabbix客户端因为某种原因导致没有被服务端监控到,像这种问题怎么办呢?其实最简单的方案就是从zabbix里获取所有被监控的服务器列表,然后跟运维资产数据库去比对,如果数量一致,那说明监控没漏机器,如果比对不上,就把对不上的IP发出来再报个警就可以了,整体逻辑就是这样,我们今天用zabbix api获取被监控的所有机器列表,代码如下:

 

脚本一共分二部分,第一部分是用户登录,登录后然后获取主机列表,最后写到一个文件里去,所以脚本运行的结果是生成一个所有被监控的IP列表,通过这个列表你就可以去跟你的资产库信息去对比了,还有这个脚本用的requests,所以看起来要清爽很多,代码比较简单,就是二个post就不做太多解释了,今天就到这里,喜欢的小伙伴可以在此基础上修改成合适自己业务的脚本。

如何过好2017年?

2016匆匆就过去了,除了感叹时间的流逝, 我想我还应该做点什么, 人们都说每个人对待时间的态度最大的区别就是看这个人是否有自己的目标, 星爷也说过一句特别经典的台词“人若没有目标,跟咸鱼有什么区别”,我特别赞同这句话,因为每个人的时间是有限的,如何在有限的时间内完成更多的事而不是碌碌无为的过日子,目标在这里起了决定性作用,如果每天自己都不知道自己要什么的人,我想几年之后他很可能落后于有清晰目标的人,这就跟二个人在大森林里迷了路是一样的,其中一个找到了方向,始终朝着一个方向走,相信自己终有一天能走出去,另一个没有方向的一会东走走,一会西瞅瞅,时间就这么浪费了,自己却终其一生也无法走出自己生命的藩篱。

既然知道目标的重要性,那我接下来我们看怎么定目标,不得不说定目标是件非常复杂的工程,我相信如果有2个工作摆在你面前一个是定目标,一个是写python脚本,作为运维人一般都会选择后者,为什么? 因为我们会觉得它没什么技术含量,它却要花掉你很多时间,貌似也给我们带来不了成就感,但我认为这些投入是非常值得的,如果你不投入这些时间,那么在未来你会浪费掉更多的时间, 当然考虑到这是个复杂的系统工程,为更方便的让每个人能够设定好自己2017年的目标,我列出了几个问题,大家可以根据自己的情况回答这些问题:

第一,你在过去的一年里工作上有什么进步或成果?那在2017年你希望有那些进步?

第二,在过去一年里什么事一直想做没有做?那在新的一年你打算怎么启动?

第三,你家庭或父母在过去的一年你都做了那些事情?在新的一年打算怎么做?

第四,你在过去的一年身体状况如何?那在新的一年有什么打算和爱好,身体毕竟是革命的本钱。

第五,你个人的能力方面,不管是技术方面是否有提升?在新的一年如何去做?

第六,在过去的一年你交了那些新的朋友?人际关系如何?那在新的一年你打算如何去做?如何去混入你想进入的圈子?

为符合每个人的需求,我尽可能用通用的语言来表达,当然这些问题的答案需要抽练,因为目标越简练越好, 你不能把每个问题的答案都写成5000字的作文, 如果总结到最后这一年你要做的事很多,就要排优先级,可以按时间四象限法则来划分,另外最终形成目标的过程一定是要具体的,什么是具体的的目标,我先举个反例:

2017年我要学python

这个就是典型的不具体的目标,真的具体的的目标是我要把“”python运维技术“公众号所有代码例子搞懂并实现一遍,这才是目标。

经过上面抽练,我相信大家的目标也都定出来了,接下来在2017年可以实施了,每个认都知道行动最重要,但每次都不展开行动, 为什么? 除了懒还有你缺少方法, 当然限于篇幅方法问题就不展开说了,如果有兴趣的小伙伴欢迎留言探讨,另外这句话你可打印出来放到你经常能看到的地方: Do it,  Never give up!    这也许是实现目标的最好方法没有之一。