日志监控及Redis存储
来源:互联网 发布:最难就业的专业 知乎 编辑:程序博客网 时间:2024/06/05 20:03
背景:公司项目中需要将客户端访问日志进行监控,并实时将更新内容开放给测试同事进行查询。
早期由于时间缺乏的因此,直接采用了一个效率特别低的方法进行监控。最近刚好尝试了Redis Python客户端,因此有了一个初步的想法:Log-->Redis-->Fetch,相当于。可以分解成:
1. 使用Python将Log内容存储到Redis(可以使用任何语言,采用Python只是个人的喜好)
2. 创建某个接口获取日志文件内容
话不多说,直接上代码:
#!/bin/python
# update.py
import redis
import json
import datetime
import sys
import time
import subprocess
import shlex
import pdb
r = redis.StrictRedis(host=<your host>, port=<port>, db=0, password=<your pass>) # 设置Redis服务器
if r.ping()
def main():
cnt = 1
for line in sys.stdin:
r.set(++cnt, line)
main()
使用的方法: tail -f ~/log.log | python update.py。运行后,发现能够更新一些数据,但是无法更新运行后期加入的文件内容。这个问题,到现在自己也没有明白,按道理,管理作为Python输入是可以生效的。有明白的同学,麻烦告诉我下!
第一次尝试失败后,自己就思考:如何能在Python中监控新加入的内容,是否就可以解决自己的问题?于是Google后,发现另外一个方法:subprocess.Popen。在仔细地阅读后,自己发现这个方法和上面代码中用到的方法没什么差别,只不过是用Python代码来表现而已。直接上代码:
#!/bin/python
# update_sec.py
import redis
import json
import datetime
import sys
import time
import subprocess
import shlex
import pdb
r = redis.StrictRedis(host=<your host>, port=<port>, db=0, password=<your pass>)
r.ping()
def main():
cmd = "tail -f ~/test.log"
cmd = shlex.split(cmd)
curr_day = datetime.date.today()
process = subprocess.Popen(cmd, stdout=subprocess.PIPE)
print cmd
while True:
line = process.stdout.readline()
if line == '' and process.poll() is not None:
break;
if line:
# add line process logic
r.set(cnt, line)
rc = process.poll()
print "return code :" , rc
main()
说明:
1. subprocess.Popen相当于创建一个子进程,并将子进程的输出通过管道输入到主进程;
2. subprocess.poll()用于判断子进程是否停止,process.stdout为子进程的输出文件描述符
开启python update_sec.py后,向~/test.log追加内容,发现能够实时更新日志数据到Redis了,问题解决!
当然了,这只是解决问题的一个方法。这个方法无法监控某个文件夹内符合一定格式的文件内容,一个想法就是采用pyinotify监控某文件夹内文件的创建,如果文件名符合目标格式,就开始采用上面的处理流程。
如果大家有更好的方法,可以留言告诉我!
完-------------------
0 0
- 日志监控及Redis存储
- Redis Sentinel启动监控日志
- Redis集群监控及Redis桌面客户端
- openresty(完整版)Lua拦截请求与响应信息日志收集及基于cjson和redis动态路径以及Prometheus监控
- Redis高可用部署及监控
- Redis高可用部署及监控
- Redis高可用部署及监控
- Redis高可用部署及监控
- Redis高可用部署及监控
- Redis高可用部署及监控
- Redis高可用部署及监控
- 使用treeNMS管理及监控Redis
- Docker监控及日志采集神器
- java获取redis的日志信息和动态监控信息
- Java获取Redis的日志信息和动态监控信息
- Java获取Redis的日志信息和动态监控信息
- Java获取Redis的日志信息和动态监控信息
- redis监控工具-redis sentinel使用说明及注意事项
- Flex调试安卓应用设备脱机
- java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
- 人脸识别 - A Discriminative Feature Learning Approach for Deep Face Recognition
- |洛谷|堆|P1631 序列合并
- 函数指针与指针函数
- 日志监控及Redis存储
- Android定制--------开机对话框的实现
- Git图形界面的使用
- RAD Studio D10发布IOS TestFlight不支持外部测试的解决方法
- |洛谷|堆|P3045 [USACO12FEB]牛券Cow Coupons
- 网络专业化销售流程
- STM32之启动模式
- 安卓高级 特效动画ExplosionField和 SmoothTransition
- 对权限的理解