Plog 正在参加 2020 年度 OSC 中国开源项目评选,请投票支持!
Plog 在 2020 年度 OSC 中国开源项目评选 中已获得 {{ projectVoteCount }} 票,请投票支持!
投票让它出道
已投票
授权协议 未知
开发语言 Python
操作系统 跨平台
软件类型 开源软件
开发厂商 新浪
地区 国产
提 交 者 红薯
适用人群 未知
收录时间 2015-07-26

软件简介

Plog 是 "Parse Log" 的缩写,是一套处理日志流的框架,日志流格式可以是Apache,nginx等常规意义的日志格式,也可以是自定义格式

FlumeNG的启发,我把整个工程分成了三个部分:source,channel ,sink,已经完成了主体的共有的可以抽象出来的功能,比如线程的同步互斥,消息的生产消费,处理时间间隔的控制,还有一些简单的source,channel and sink函数

下面是一个简单的配置文件:

[source]
#定义读取数据的模块名
source_module=file_source
#定义源文件
source_file=./test/plog_demo.log
#定义读取文件的时间间隔,单位s
source_interval=5

[channel]
#定义解析数据的模块名
channel_module=regrex_channel
#如是正则,定义正则规则
channel_filter_regex=([\w\d.\s,]{0,})\s([0-9.]+)\s(?P\d+|-)\s(\w+)\s\[([^\[\]]+)\s\+\d+\]\s"((?:[^"]|\")+)"\s(?P\d{3})\s(\d+|-)\s"((?:[^"]|\")+|-)"\s"(.+|-)"\s"((?:[^"]|\")+)"\s"(.+|-)"$

[sink]
#定义发送数据的时间间隔
interval=60
#定义计算与发送的模块名
sink_module=zabbix_sink
sink_service=cacheL2
#定义需要的key
sink_zabbix_monitor_keys=200,300,400,500
#定义发送给zabbix写数据的文件
sink_zabbix_send_file=/tmp/zabbix_send_info
#定义发送zabbix sender路径
sink_zabbix_sender=/usr/bin/zabbix_sender
#定义zabbix的配置文件
sink_zabbix_conf=/etc/zabbix/zabbix_agentd.conf

[log_config]
#定义输出log的格式,级别,路径等,方便调试程序。
logging_format=%(asctime)s %(filename)s [funcname:%(funcName)s] [line:%(lineno)d] %(levelname)s %(message)s
logging_level=20
logging_filename=/tmp/plog.log

使用了ConfigParse来解析配置文件

source部分的设计思路

在这一部分,我们需要处理的是数据流的来源,他可能是file,可能是socket,可能是管道,但是我不关注你的数据来源格式是什么样的,因为我无法满足这些需要各式各样的数据来源需求,而你的需要是什么样的,你最清楚,那么你只要写一个source的插件就可以了,名字随意你定,你需要的是把你写的那个插件的名字,写到plog.conf里面,默认有读取文件的file_source模块,读取管道的read_from_pipeline模块,可以直接使用。

具体实例如下:

source_module=self-define-script-name

自定义source的具体实现,参看source module下的plog/source/youself_define_source.py

channel部分

在这个部分,主要是对数据流的处理,你同样需要写一个 Python的脚本,名字随意你定,但是你需要写到 plog.conf 中,默认有解析python正则的模块可以直接使用,类似下方:

channel_module=filter_log

同样的你需要实现的channel可以参见 plog/channel/youself_define_channel.py

sink 部分

在这个部分,你同样需要写一个Python脚本,他的名字同样取决于你的个人喜好,你需要的是把你写的那个插件的名字写到plog.conf,例如下方:

sink_module=cacheL2get_monitor

同样的你需要完成的脚本可以参见plog/sink/youself_define_sink.py

如何跑一个测试

下面的测试是读取一个本地本件,解析,计算自己要想的结果发送到zabbix监控系统。

1.git clone https://github.com/SinaMSRE/Plog.git

2.cd ./Plog/test 

3.sh gen_log.sh & 

4.cd .. && python plog.py -c conf/plog.conf

5.you will see a file**/tmp/zabbix_send_info_test123**,its contents like followings:
[xxxx@test Plog]$ cat /tmp/zabbix_send_info_test123
xxxx test123_300 0.000000
xxxx test123_200 59.000000
xxxx test123_500 0.000000
xxxx test123_400 0.000000
展开阅读全文

代码

评论 (3)

加载中
不能收藏 #Plog#
2015/07/27 08:39
回复
举报
@红薯 无法收藏 #Plog#
2015/07/27 19:47
回复
举报
不能收藏 #Plog#
2015/07/28 19:54
回复
举报
更多评论
暂无内容
发表了博客
2013/03/02 00:34

java线程面试题

import java.util.Queue; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.Executors; public class test { /** * 现有的程序代码模拟产生了16个日志对象,并且需要运行16秒才能打印完这些日志,请在程序中增加4个线程去调用parseLog() * 方法...

0
2
发表了博客
2012/03/27 17:31

关于多线程的面试题(一)整理

现有的程序代码模拟产生了16个日志对象,并且需要运行16秒才能打印完这些日志,请在程序中增加4个线程去调用parseLog()方法来分头打印这16个日志对象,程序只需要运行4秒即可打印完这些日志对象。原始代码如下: package read; public class Test {   public static void main(String[] args) {     System.out.println(...

0
5
发表了博客
2018/06/01 14:45

Java多线程之三道多线程练习题

该系列关于Java多线程的博文主要讲解Java多线程API的一些使用,包括两个部分一个是传统线程机制,另外一个是java5之后推出的并发库。博文中的主要内容整理自张孝祥先生关于多线程知识的讲解。 这个系列的博文主要探讨的是java对于多线程的处理以及java的一些处理和设计思想。举的都是非常生活化的例子。博文中的内容主要...

0
1
发表于AI & 大数据专区
2019/09/07 18:38

Hadoop 之 MapReduce

1 MapReduce 概述 MapReduce 是一个分布式运算程序的编程框架,是用户开发基于 Hadoop 的数据分析应用的核心框架。 MapReduce 核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,...

0
0
没有更多内容
加载失败,请刷新页面
点击加载更多
加载中
下一页
暂无内容
3 评论
178 收藏
分享
返回顶部
顶部