python 监控redis的进程与端口
#!/usr/bin/python
# -*- coding:utf-8 -*-
import glob,psutil
import json,os,datetime
import collections start_date=datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
#指定配置文件位置
redis_conf='/usr/local/redis/etc/*.conf' #筛选出匹配的行
def grep(files,str):
str_list=dict()
#获取配置文件
for file in glob.glob(files):
r_file=open(file,'r')
str_list[file]=''
for i in r_file:
#判断是否包含指定的字符
if str in i:
str_list[file]={i} r_file.close()
return str_list #获取进程的端口号
def port_pid(pid):
p = psutil.Process(pid)
data=p.connections()
data_listen=[x for x in data if 'LISTEN' in x ]
pid_port=[]
for port in data_listen:
pid_port.append(port.laddr.port)
return list(set(pid_port)) #获取配置文件中的端口与pid文件位置
ports=grep(redis_conf,'port')
pids=grep(redis_conf,'pidfile') #collections.OrderedDict()记住排序
status=collections.OrderedDict() #获取pid文件
for i in pids.keys():
#获取pid文件
if len(pids[i]) > 0:
file_list=list(pids[i])[0].split()[1].replace('\n','')
else:
file_list='/var/run/redis.pid'
if not os.path.exists(file_list):
status[i]={'info':"未找到pid文件"}
status['status']='error'
continue #获取配置文件里的端口号
conf_port=list(ports[i])[0].split()[1].replace('\n','') #查看pid
try:
f=open(file_list)
except:
info="%s无法打开"%file_list status[i]={'info':info}
status['status']='error'
continue pid=int(f.read())
#获取进程绑定的端口
try:
port=port_pid(pid)
except:
info="%s的pid无法查询到相关信息"%file_list status[i]={'info':info}
status['status']='error'
continue #端口不能为0
if len(port) > 0:
#端口号唯一
if len(port) == 1: #端口要与配置文件里的一致
if int(port[0]) == int(conf_port): info='正常' status['status']='ok'
status[i]={'info':info,'pid_port':int(port[0]),'pid':pid} else:
info='绑定的端口与配置文件不一致,配置文件的%s,绑定的 %s'%(int(conf_port),int(port[0])) status['status']='error'
status[i]['info']=info else:
info='发现绑定了多个LISTEN %s'%port status['status']='error'
status[i]['info']=info else:
info='未发现绑定LISTEN %s'%conf_port status['status']='error'
status[i]['info']=info #记录启动与结束的时间
status['start_date']=start_date
status['end_date']=datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
#格式化
#print json.dumps(status,ensure_ascii=False, indent=2)
print json.dumps(status,ensure_ascii=False)
python 监控redis的进程与端口的更多相关文章
- 监控redis进程,如果没有自动重启
监控redis进程,如果没有自动重启 #Time:2016-01-22#Version:1.0 #Author:chh-huang #设置环境变量source /etc/profile#source ...
- python监控端口脚本[jkport2.0.py]
#!/usr/bin/env python #!coding=utf-8 import os import time import sys import smtplib from email.mime ...
- 原来zabbix监控进程与端口是如此的简单!
使用zabbix自带key监控进程与端口 每个公司都有自己的程序,自己的进程名与端口监听,对于nagios来说,这些都经常需要自己去写插件,但是zabbix不需要,它自己就有监控进程与端口的key. ...
- 监控redis数据库应用状态:python,tornado实现
公司里最近redis服务器压力越来越大,其大概情况,只能从操作系统层面看,并不详尽,故同事在网上找了一个叫做 redis-live的开源项目,我配合部署了一下,还真有点意思,并解决了其中部分小debu ...
- python os.startfile python实现双击运行程序 python监控windows程序 监控进程不在时重新启动
用python监控您的window服务 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://world77.blog.51cto.co ...
- 使用Zabbix官方模板监控Redis运行状况
运行环境: OS:CentOS 6.8 / Python: 2.6.6 / Pip: 7.1.0 / Redis:3.0 / Zabbix:3.0.3 Zabbix官方提供的监控模板. 项目地址:ht ...
- python之redis和memcache操作
Redis 教程 Redis是一个开源(BSD许可),内存存储的数据结构服务器,可用作数据库,高速缓存和消息队列代理.Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据 ...
- python——操作Redis
在使用django的websocket的时候,发现web请求和其他当前的django进程的内存是不共享的,猜测django的机制可能是每来一个web请求,就开启一个进程去与web进行交互,一次来达到利 ...
- Python操作Redis、Memcache、RabbitMQ、SQLAlchemy
Python操作 Redis.Memcache.RabbitMQ.SQLAlchemy redis介绍:redis是一个开源的,先进的KEY-VALUE存储,它通常被称为数据结构服务器,因为键可以包含 ...
随机推荐
- ECharts 上传图片Example
前端 1.为ECharts准备一个div <div id="main" style="Height:400px"></div> 2.引入 ...
- Week2 Teamework from Z.XML - 必应缤纷桌面助手 - 软件分析与用户需求调查
软件分析与用户需求调查(2013) from Z.XML 本次团队作业要求: 通过定性, 定量地分析, 总结和评定某软件是否满足了目标用户的需求,并把分析的过程和结果用博客表达出来. 选题:必应缤纷桌 ...
- 【WebService】——契约优先
相关博客: [WebService]--入门实例 [WebService]--SOAP.WSDL和UDDI 前言: 我们先来看一个契约优先的开发实例,通过熟悉他的开发流程,最后再和代码优先的方式进行比 ...
- 【工具学习】——教你读懂Maven的配置文件
[前言] 最近在项目中用到了maven工具,相信很多第一次接触maven的人都有这样的困惑,maven的文件很简单,就像下图中的结构一样,但是它的功能十分强大,那是怎么做到的呢?配置文件!配置文件里是 ...
- js表单验证工具包
常用的js表单验证方法大全 /* 非空校验 : isNull() 是否是数字: isNumber(field) trim函数: trim() lTrim() rTrim() 校验字符串是否为空: ch ...
- request对数据进行编码的 才是导致乱码问题之一
1.此时服务器端接收到客户端提交来的post请求 2.request.getParameter("name")方法开始从请求中解析数据 并使用默认的编码 格式进行编码(ISO-88 ...
- C#中的SubString()的用法
先看语法: String.SubString(int index,int length) index:开始位置,从0开始 length:你要取的子字符串的长度 例子: using ...
- Ubuntu下安装LNMP之独立添加php扩展模块
使用php的过程中,发现某个扩展没有添加,又不想重新编译php,这个时候我们就需要单独添加需要的扩展模块. 下面以mysqli扩展模块为例,具体介绍安装步骤. 1.安装mysql 具体参考:Ubunt ...
- APP本地服务安全测试
一.安全测试基本分类: 1.系统安全 系统加固 安全加固:比如linux中关闭telnet端口,修改ssh端口 检测一些不必要的服务(需要卸载一个ping)--保证系统的最小集 app安全加固:加一层 ...
- C# 序列化原因 (转)
1.什么是序列化 序列化是将对象状态转换为可保持或传输的格式的过程,在序列化过程中,对象的公共字段和私有字段以及类的名称(包括包含该类的程序集)都被转换为字节流,然后写入数据流.与序列化相对 ...