寻找一些帮助入门......我安装了Logstash(以及ElasticSearch),但我正在努力使用我的第一个过滤器.
作为测试,我将其配置为从包含6行的修剪日志文件中读取,每行以时间戳开头,例如[11/5/13 4:09:21:327 PST],然后是一堆其他数据.
现在我将我的conf文件设置为读取此文件,我正在尝试使用非常基本的grok过滤器来匹配行,可能是为了获取时间戳,然后是其余的数据(从那里我可以开始拆分它) ).
这是我有的:
input {
file {
type => "chris"
path => "/home/chris/Documents/test.log"
}
}
filter {
grok {
type => "chris"
pattern => "%{GREEDYDATA:logline}"
}
}
output {
stdout {debug => true debug_format => "json"}
}
Run Code Online (Sandbox Code Playgroud)
我有点期待(希望)当我运行Logstash它匹配每一行并输出它,然后我可以开始打破线并过滤我调整模式但是因为我无法得到这个第一个基本位工作我有点难过.
有没有人有类似的conf文件,他们可以分享?我能找到的大多数例子都比较先进,而且我似乎被困在试图走出大门.
谢谢,
克里斯.
我正在编写一个脚本来解析多个日志文件并维护已处理的文件列表.当我读取要处理的文件列表时,我使用os.walk并获得类似于以下内容的名称:
C:/Users/Python/Documents/Logs\ServerUI04\SystemOut_13.01.01_20.22.25.log
Run Code Online (Sandbox Code Playgroud)
这是由以下代码创建的:
filesToProcess.extend(os.path.join(root, filename) for filename in filenames if logFilePatternMatch.match(filename))
Run Code Online (Sandbox Code Playgroud)
似乎"root"使用正斜杠作为分隔符(我在Windows上找到更方便),但"filename"使用反斜杠,所以我最终得到一个不一致的文件路径,因为它包含前向和后斜杠的混合作为分隔符.
我试过设置分隔符:
os.path.sep = "/"
Run Code Online (Sandbox Code Playgroud)
和
os.sep = "/"
Run Code Online (Sandbox Code Playgroud)
在.join之前,它似乎没有任何效果.我意识到理论上我可以操作字符串,但从长远来看,我希望我的脚本可以在Unix和Windows上运行,所以如果可能的话,它会更喜欢它是动态的.
我错过了什么吗?
更新:
基于下面的有用响应,看起来我的问题是自己造成的,为方便起见,我设置了以root身份使用的初始路径,如下所示:
logFileFolder = ['C:/Users/Python/Documents/Logs']
Run Code Online (Sandbox Code Playgroud)
当我把它更改为:
logFileFolder = ['C:\\Users\\Python\\Documents\\Logs']
Run Code Online (Sandbox Code Playgroud)
一切正常,我生成的文件路径全部使用"\".看起来我的方法是错误的,因为我试图让Python改变行为而不是纠正我设置的值.
谢谢!
我已经阅读了所有可以找到的文章,甚至可以理解其中的一些文章,但作为一个Python新手,我仍然有点迷失并希望得到帮助:)
我正在编写一个脚本来解析特定于应用程序的日志文件中感兴趣的项目,每行都以一个我可以匹配的时间戳开头,我可以定义两个东西来识别我想要捕获的内容,一些部分内容和一个字符串将终止我想要提取的内容.
我的问题是多行,在大多数情况下,每个日志行都以换行符结束,但有些条目包含可能在其中包含新行的SQL,因此会在日志中创建新行.
所以,在一个简单的例子中,我可能会这样:
[8/21/13 11:30:33:557 PDT] 00000488 SystemOut O 21 Aug 2013 11:30:33:557 [WARN] [MXServerUI01] [CID-UIASYNC-17464] BMXAA6720W - USER = (ABCDEF) SPID = (2526) app (ITEM) object (ITEM) : select * from item where ((status != 'OBSOLETE' and itemsetid = 'ITEMSET1') and (exists (select 1 from maximo.invvendor where (exists (select 1 from maximo.companies where (( contains(name,' $AAAA ') > 0 )) and (company=invvendor.manufacturer and orgid=invvendor.orgid))) and (itemnum = item.itemnum and itemsetid = item.itemsetid)))) and (itemtype in (select value from …Run Code Online (Sandbox Code Playgroud)