zabbix 作为企业级的系统和网络监控方案,对于中小型公司来说基本可以很好的满足对机器的监控需求,因为其部署方便,操作简单深受现在各个互联网公司喜爱,所以现在基本的互联网公司监控用zabbix的非常多,当你安装好zabbix服务端 后,如果启动自动注册功能,在所有客户机安装后会自动在zabbix平台上被监控到,但这里有个问题,如果你机器数量非常少,如果还能数的过来那基本没什么问题,但如果你机器上千台了,这个时候那些机器被监控中,那些没被监控,查起来就没那么方便了,所以日常运维中经常发现的问题就是某台机器故障了但没报警,经查发现这台机器zabbix客户端因为某种原因导致没有被服务端监控到,像这[……]
如何过好2017年?
2016匆匆就过去了,除了感叹时间的流逝, 我想我还应该做点什么, 人们都说每个人对待时间的态度最大的区别就是看这个人是否有自己的目标, 星爷也说过一句特别经典的台词“人若没有目标,跟咸鱼有什么区别”,我特别赞同这句话,因为每个人的时间是有限的,如何在有限的时间内完成更多的事而不是碌碌无为的过日子,目标在这里起了决定性作用,如果每天自己都不知道自己要什么的人,我想几年之后他很可能落后于有清晰目标的人,这就跟二个人在大森林里迷了路是一样的,其中一个找到了方向,始终朝着一个方向走,相信自己终有一天能走出去,另一个没有方向的一会东走走,一会西瞅瞅,时间就这么浪费了,自己却终其一生也无法走出自己生命的[……]
你应该学会的python列表去重
列表去重是写Python脚本时常遇问题,因为不管源数据来自哪里,当我们转换成列表的方式时,有可能预期的结果不是我们最终的结果,最常见的就是列表中元素有重复,这时候第一件事我们就要做去重处理,我们先来个最简单的方式,用python内置的数据类型set来实现。
假设我们的列表数据是这样的:
1 2 3 4 5 6 7 |
level_names = [ u'Second Level', u'Second Level', u'Second Level', u'First Level', u'First Level' ] |
因为集合的元素是不能重复的,所以将列表转换成集合时,会自动去掉重复的元素,这就是基本原理,代码如下:
1 2 3 |
>>> the_list = set(level_names) >>> print(the_list) set([u'Second Level', u'First Level']) |
这种方式缺点是再转换成列表时无法保存之前的列表顺序,如果没这个要[……]
python按任意键继续程序
在windows下写bat的时候,通过pause命令,可以暂停程序运行,例如经常见的程序会在终端提示”按任意键继续……”,用户在终端回车后程序可以接着运行,这个功能有多大用途今天暂且不说,但我觉得应该有很多人也想在python下实现这个功能,这样当自己写的python程序运行时, 突然给出这么一个提示,然后自己再来个帅气的回车,我觉得肯定给人一种非常专业的感觉,最起码自己肯定被自己迷倒了,所以今天我们就学习下这段代码,这里定义了一个函数,所以你可以嵌入到你的程序中,在任何你希望调用的地方调用它即可,使用非常的方便,代码如下:
#!/usr/bin/env python[……]
最简单的多线程爬虫实例
写这个例子主要还是了解多线程的使用和运行方式,因为爬虫是用多线程的实现的典型应用场景,基本写爬虫的没有不用多线程的,因为太多的网页或内容你不可能一一去获取,如果爬的数据量太大而不去并发执行,那时间估计是人无法忍受的,如果对python了解多一些的小伙伴可能知道GIL, 全称Global Interpreter Lock, 也就是python的全局锁,这把锁是为了 解决多线程之间数据完整性和状态同步的,也正因为这把锁的存在,python无法实现真正意义上的多线程,因为在某个时刻只能有一个线程在占用CPU资源,这才能保证数据的决对完整性,当然这是对cpytho来说的,像jpython就没有gIL[……]
python分析nginx日志
上周咳嗽比较厉害,暂停了一周更新,收到很多小伙伴的留言关心,真是非常感动,非常感谢大家支持,我会尽我努力给大家分享干货, 现在吃了几天药,基本好的差不多了,这周接着聊python在运维中的实践,今天的脚本是分析nginx的访问日志, 主要为了检查站点uri的访问次数的,检查的结果会提供给研发人员做参考,因为谈到分析嘛,那肯定要用到正则表达式了,所以请没有接触过正则的小伙伴自行补脑,因为涉及正则的内容,实在没法展开写,正则的内容太过庞大,根本不是一篇两篇能写清楚的,开始前,我们先看看要分析的日志结构:
1 2 |
127.0.0.1 - - [19/Jun/2012:09:16:22 +0100] "GET /GO.jpg HTTP/1.1" 499 0 "http://domain.com/htm_data/7/1206/758536.html" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; SE 2.X MetaSr 1.0)" 127.0.0.1 - - [19/Jun/2012:09:16:25 +0100] "GET /Zyb.gif HTTP/1.1" 499 0 "http://domain.com/htm_data/7/1206/758536.html" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; QQDownload 711; SV1; .NET4.0C; .NET4.0E; 360SE)" |
这是修改过的日志内容,敏[……]
站点监控报警
在小型公司里如果产品线单一的话,比如就一个app, 一般1~2个运维就够用了,如果产品过于庞大,就需要多个运维人员,但对于多产品线的公司来说,运维人员就要必须分多个人负责,因为超过200个站点让1个人维护,那工作量是巨大的,就单单给开发的沟通时间,估计就要占用一整天时间了,目前我所在的公司站点非常多,为管理方便,之前我们这里是实行过站长制,就是不同人承担不同的项目维护,每个人就是自己所负责项目的站长,这个站长制完后,就有个监控问题,之前只要站点有问题,是每个人都可以收到,但为了防止报警泛滥,所以就需要把监控改成故障站点只发给负责该站点的站长,有了这个背景,我们今天就来实现这个需求,脚本基本实[……]
python实现windows盘符探测器
windows系统对经常玩linux的运维兄弟来说,如果碰到自己业务中有一大堆win系统要去运维,如果不太熟悉还是非常头疼的,尤其面对上百台后,各种情况更加复杂,因为这百台里可能存在不同的配置,尤其是磁盘的配置,可能刚开始都比较统一,但后续经过长时间运维后,因为升级过磁盘会造成每台机器会有不同的分区,如果面对一个你刚接收的业务,你要快速了解这些信息,你不可能去每台登陆上去人肉去看,当然最好是写一个脚本来获取这些信息,今天不我们不展开其它内容,来个最简单的需求,就是去探测每台机器上有哪些盘符,例如:C盘,D盘等。
上代码:
1 2 3 4 5 6 7 8 |
def drives2(): drive_list = [] for drive in range(ord('A'), ord('N')): if exists(chr(drive) + ':'): drive_list.append(chr(drive)) return drive_list print("The following drives exist:", drives2()) |
[……]
django1.8使用表单上传文件
在django中我们可以采用Form类来处理表单,通过实例化处理和在模板中渲染,就可以轻松完成表单的需求,采用django的表单处理方式,能帮我们省去很多的工作,比如验证不能为空,或者要符合某种模式的输入才有效,这些处理起来非常方便,不用自己再单独写代码去验证表单的数据正确性,所以在开发中比较常用,Form提供了很多表单字段,比如日期,文本类型等,如果你熟悉基本的html,学起来会非常容易上手,所以今天我们不打算对每个表单的字段进行逐一说明,今天只说下表单文件的上传,因为这个类型比较特殊,需要一点特殊的处理,我们来创建一个简单的一个实例:
首先我们用Form创建一个简单的表单:
[cr[……]
员工激励的“四力模型”
如何让员工创造出最佳绩效是管理者长久以来面临的严峻挑战。近年来,神经科学、生物学、进化心理学等领域的跨学科研究告诉我们,人类具有四种基本的情感需求或驱动力,而这些驱动力正是我们一切行为的基础。实证研究表明,受到激励的员工能创造出更好的业绩。因此,管理者要想激励员工,就应该了解这些驱动力以及可以采取哪些举措来满足这些驱动力。
获取 人们总是设法去获取一些稀缺的东西,以增加自己的幸福感。当这个驱动力得到满足时,我们会感到高兴;反之,则会觉得不满意。这个驱动力往往是相对的(我们总是拿自己与别人进行比较),而且是难以满足的(我们总是想得到更多)。
结合 许多动物都与自己的父母、亲属或种群建[……]