logstash 切分tomcat日志
以下配置是logstash切分tomcat catalina.out日志。
http://grok.qiexun.net/ 分割时先用这个网站测试下语句对不对,能不能按需切割日志。
input {
file {
type => "01-catalina"
path => ["/usr/local/tomcat-1/logs/catalina.out"]
start_position => "beginning"
ignore_older =>
codec=> multiline {
pattern => "^2018"
negate => true
what => "previous"
}
}
file {
type => "02-catalina"
path => ["/usr/local/tomcat-2/logs/catalina.out"]
start_position => "beginning"
ignore_older =>
codec=> multiline {
pattern => "^2018"
negate => true
what => "previous"
}
}
}
filter {
grok {
match => {
"message" => "%{DATESTAMP:date} \|-%{LOGLEVEL:level} \[%{DATA:class}\] %{DATA:code_info} -\| %{GREEDYDATA:log_info}"
}
}
}
output {
elasticsearch {
hosts => ["192.168.1.1:9200"]
index => "tomcat-%{type}"
}
stdout {
codec => rubydebug
}
}

跨行匹配 比如java 堆栈信息
input {
file {
type => "10.139.32.68"
path => ["/data1/application/api/apache-tomcat/logs/catalina.out"]
start_position => "beginning"
ignore_older =>
codec=> multiline {
pattern => "^\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}"
negate => true
what => "previous"
}
}
codec=> multiline 引用 multiline插件
pattern 正则匹配 ^\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2} 表示以 2018-10-10 10:10:10 日期形式开通的negate what 值为previous 表示未匹配的内容属于上一个匹配内容
自定义正则表达式

其中(?<>())格式表示一个正则开始,<>里是正则匹配名,()里是正则表达式
上图正则分四段,分别是
(?<date>(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{3})) 匹配日期
\s{1,2} 匹配1或2个空格
(?<loglevel>(\w{4,5})) 匹配4或5个字母
(?<log_info>(.*)) 匹配所有字符
又如下面这个
2019-01-04 17:29:56.479 |-ERROR 31593 --- [DubboServerHandler-10.139.32.94:20885-thread-50] c.v.g.risk.service.CreditReportService : shuJuMoHeMessage TelRelativize error_null
%{DATESTAMP:date} \|-%{LOGLEVEL:level} \d{3,5} --- (?<xxx>(\[\w+-\d+.\d+.\d+.\d+:\d+-\w+-\d+\])) (?<file>(\S+))\s+: %{GREEDYDATA:log_info}

logstash 启动多个配置文件
logstash 启动多个配置文件,比如conf目录下有cs.conf和server.conf就可以用下面命令启动./logstash -f ../conf/ 记住conf后面不能加上* 如./logstash -f ../conf/* ,这样只会读取conf目录下的一个配置文件。
另外虽然可以同时启动多个配置文件,但实际上是把多个配置文件拼接成一个的配置文件的,也就是多个配置文件里的input、filter、output不是相互独立的。如有俩个配置文件cs.conf和server.conf 配置如下:
cs.conf配置: 1 input {
file {
type => "192.168.1.1"
path => ["/data1/application/cs/tomcat-1/logs/catalina.out"]
start_position => "beginning"
ignore_older =>
codec=> multiline {
pattern => "^\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}"
negate => true
what => "previous"
}
}
}
filter {
grok { remove_tag => ["multiline"] #打印多行时有时会无法解析,因为tags里会多出一个multiline ,进而报错,报错信息如文末备注1
match => hosts => [ index => codec => }
server.conf配置 1 input {
file {
type => "192.168.1.1"
path => ["/data1/application/server/tomcat-2/logs/catalina.out"]
start_position => "beginning"
ignore_older =>
codec=> multiline {
pattern => "^\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}"
negate => true
what => "previous"
}
}
}
filter {
grok {
match => {
"message" => "%{DATESTAMP:date} \|-%{LOGLEVEL:level} %{GREEDYDATA:log_info}"
}
}
}
output {
elasticsearch {
hosts => ["192.168.0.1:9200"]
index => "qwe-server-tomcat"
}
stdout {
codec => rubydebug
}
}
上面俩个配置就算同时启动,但实际上俩个配置文件会拼接成一个,input里的内容会输出俩个,导致elk里数据看起来是重复的,打印了俩次
一般这种情况建议,input里建议使用tags或者type这两个特殊字段,即在读取文件的时候,添加标识符在tags中或者定义type变量。如下面这种
input {
file {
type => "192.168.1.1"
tags =>"cs"
path => ["/data1/application/cs/tomcat-1/logs/catalina.out"]
start_position => "beginning"
ignore_older =>
codec=> multiline {
pattern => "^\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}"
negate => true
what => "previous"
}
}
file {
type => "192.168.1.1"
tags =>"server"
path => ["/data1/application/server/tomcat-2/logs/catalina.out"]
start_position => "beginning"
ignore_older =>
codec=> multiline {
pattern => "^\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}"
negate => true
what => "previous"
}
}
}
filter {
grok { remove_tag =>["multiline"]
match => {
"message" => "%{DATESTAMP:date} \|-%{LOGLEVEL:level} %{GREEDYDATA:log_info}"
}
}
}
output {
elasticsearch {
hosts => ["192.168.0.1:9200"]
index => "ulh-%{tags}-tomcat"
}
stdout {
codec => rubydebug
}
}
这样我们就可以根据tpye和tags分别日志是哪台服务器上的哪个应用了
注1:跨行解析时因为多个tags导致无法解析异常的截图,解决方法就是在 filter grok里添加 remove_tag =>["multiline"]

注2:logstash中multiline更多用法
input {
stdin {
codec =>multiline {
charset=>... #可选 字符编码
max_bytes=>... #可选 bytes类型 设置最大的字节数
max_lines=>... #可选 number类型 设置最大的行数,默认是500行
multiline_tag... #可选 string类型 设置一个事件标签,默认是multiline
pattern=>... #必选 string类型 设置匹配的正则表达式
patterns_dir=>... #可选 array类型 可以设置多个正则表达式
negate=>... #可选 boolean类型 设置true是向前匹配,设置false向后匹配,默认是FALSE
what=>... #必选 设置未匹配的内容是向前合并还是先后合并,previous,next两个值选择
}
}
}
logstash 切分tomcat日志的更多相关文章
- logstash采集tomcat日志、mysql错误日志
input{ file { path => "/opt/Tomcat7.0.28/logs/*.txt" start_position => "beginni ...
- 构建Logstash+tomcat镜像(让logstash收集tomcat日志)
1.首先pull logstash镜像作为父镜像(logstash的Dockerfile在最下面): 2.构建my-logstash镜像,使其在docker镜像实例化时,可以使用自定义的logstas ...
- logstash 处理tomcat日志
[root@dr-mysql01 tomcat]# cat logstash_tomcat.conf input { file { type => "zj_api" path ...
- logstash配合filebeat监控tomcat日志
环境:logstash版本:5.0.1&&filebeat 5.0.1 ABC为三台服务器.保证彼此tcp能够相互连接. Index服务器A - 接收BC两台服务器的tomcat日志 ...
- ELK对Tomcat日志双管齐下-告警触发/Kibana日志展示
今天我们来聊一聊Tomcat,相信大家并不陌生,tomcat是一个免费开源的web应用服务器,属于轻量级的应用程序,在小型生产环境和并发不是很高的场景下被普遍使用,同时也是开发测试JSP程序的首选.也 ...
- ELK收集Nginx|Tomcat日志
1.Nginx 日志收集,先安装Nginx cd /usr/local/logstash/config/etc/,创建如下配置文件,代码如下 Nginx.conf input { file { typ ...
- tomcat日志采集
1. 采集tomcat确实比之前的需求复杂很多,我在搭建了一个tomcat的环境,然后产生如下报错先贴出来: Jan 05, 2017 10:53:35 AM org.apache.catalina. ...
- 4:ELK分析tomcat日志
五.ELK分析tomcat日志 1.配置FIlebeat搜集tomcat日志 2.配置Logstash从filebeat输入tomcat日志 3.查看索引 4.创建索引
- log4j托管tomcat日志
由于项目中 Tomcat 日志越来越大,对于日志查找非常不方便,所以经过一番调查可以通过log4j来托管 Tomcat 日志的方式,实现Tomcat日志切片.这里只说明怎么是log4j托管Tomcat ...
随机推荐
- input输入框提交输入的值的方式
给button添加点击事件,通过id(getElementById)获取输入框的value. 弹框提示如图
- idea调试代码跟踪到tomcat代码里面
在POM.xml文件里面加上如下代码即可: <dependency> <groupId>org.apache.tomcat</groupId> <artifa ...
- 通过企业微信API接口发送消息
最近给公司测试组内部开发一个记账小工具,当账目出现问题的时候需要发送消息通知大家,前期主要采用的QQ发送通知消息,但是有一天突然无法连接到QQ服务器,运维的同学建议采用微信的方式对接然后进行告警,所以 ...
- 剑指offer 4.树 重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...
- 检查MySQL内存使用情况
==================================================================================================== ...
- Azure CosmosDB (4) 在一致性(Consistency)可用性(Availability)和性能(Performance)之间的权衡
<Windows Azure Platform 系列文章目录> 我个人感觉,这个概念和分布式系统中的CAP原则是类似的: CAP原则指的是在一个分布式系统中,Consistency(一致性 ...
- CUDA 编程
作者:MingChaoSun 原文:https://blog.csdn.net/sunmc1204953974/article/details/51000970 一.CPU和GPU 上图是CPU与GP ...
- 微信小程序中的组件使用1
不管是vue还是react中,都在强调组件思想,同样,在微信小程序中也是使用组件思想来实现页面复用的,下面就简单介绍一下微信小程序中的组件思想. 组件定义与使用 要使用组件,首先需要有组件页面和使用组 ...
- 2018-2019-2 20165312《网络攻防技术》Exp3 免杀原理与实践
2018-2019-2 20165312<网络攻防技术>Exp3 免杀原理与实践 课上知识点总结 1.恶意软件检测机制 基于特征码的检测(需要定期更新病毒库) 启发式恶意软件检测(实时监控 ...
- C语言编程漫谈——main函数
写在前面 促使我写这篇文章是因为我这几天找了几个一样是大三的同学,与我相同专业相同方向(物联网)的人,除了@小胡同的诗,基本没有什么其他人会现在看起来很简单的编程题目了.问了一下其他同学,他们大部分都 ...
