使用logstash收集java、nginx、系统等常见日志
目录
1、使用codec的multiline插件收集java日志... 1
2、收集nginx日志... 2
3、收集系统syslog日志... 3
4、使用fliter的grok模块收集mysql日志... 4
1、使用codec的multiline插件收集java日志
对于采用ELK作为应用日志来说,多行消息的友好展示是必不可少的,否则ELK的价值就大大打折了。要正确的处理多行消息,需使用multiline插件
比如,对于java日志而言,可以使用:
multiline.pattern:
'^\['
multiline.negate:
true
multiline.match:
after
这样,下面的日志就算一个事件了。
input {
file {
path => "/var/log/elasticsearch/chuck-clueser.log"
type => "es-error"
start_position => "beginning"
codec => multiline {
pattern => "^\[" #使用正则表式, 以中括号开头的就是一行日志
negate => true
what => "previous"
}
}
}
output {
if [type] == "es-error" {
elasticsearch {
hosts => ["192.168.100.163:9200"]
index => "es-error-%{+YYYY.MM.dd}"
}
}
}
2、收集nginx日志
使用codec的json插件将日志的域进行分段,使用key-value的方式,使日志格式更清晰,易于搜索,还可以降低cpu的负载
2.1 更改nginx的配置文件的日志格式,使用json
[root@linux-node1 ~]# vim
/etc/nginx/nginx.conf #添加日志格式,把自带的格式注释掉
17 http {
18
#log_format main '$remote_addr - $remote_user [$time_local]
"$request" '
19
# '$status
$body_bytes_sent "$http_referer" '
20
#
'"$http_user_agent" "$http_x_forwarded_for"';
21
#access_log /var/log/nginx/access.log main;
22
log_format json '{ "@timestamp": "$time_local", '
23 '"@fields":
{ '
24
'"remote_addr": "$remote_addr", '
25
'"remote_user": "$remote_user", '
26
'"body_bytes_sent": "$body_bytes_sent", '
27
'"request_time": "$request_time", '
28 '"status":
"$status", '
29 '"request":
"$request", '
30
'"request_method": "$request_method", '
31
'"http_referrer": "$http_referer", '
32
'"body_bytes_sent":"$body_bytes_sent", '
33
'"http_x_forwarded_for": "$http_x_forwarded_for", '
34
'"http_user_agent": "$http_user_agent" } }';
35
access_log /var/log/nginx/access_json.log json;
[root@linux-node1 ~]# nginx -t #检查配置文件
[root@linux-node1 ~]# systemctl start nginx
日志格式如下
2.2
使用logstash将nginx访问日志收集起来
[root@linux-node1 ~]# cat
log_nginx.conf 4、
input {
file {
path =>
"/var/log/nginx/access_json.log"
codec => "json"
start_position =>
"beginning"
type => "nginx-log"
}
}
output {
elasticsearch {
hosts =>
["http://192.168.100.163:9200"]
index =>
"nginx-%{+YYY.MM.dd}"
}
}
[root@linux-node1 ~]#
/usr/local/logstash/bin/logstash -f log_nginx.conf
3、收集系统syslog日志
[root@linux-node1 ~]# vim syslog.conf
input {
syslog {
type => "system-syslog"
#绑定个ip,监听个514端口,启动后,别的机器可以通过网络把日志发过来
host => "192.168.100.161"
port => "514"
}
}
output {
elasticsearch {
hosts => ["192.168.100.161:9200"]
index => "system-syslog-%{+YYYY.MM.dd}"
}
}
[root@linux-node1 ~]#
/usr/local/logstash/bin/logstash -f syslog.conf
修改服务器的syslog配置文件,把日志信息发送到514端口上
[root@linux-node2 ~]# vim /etc/rsyslog.conf
90 *.* @@192.168.100.161:514
[root@linux-node2 ~]# systemctl restart
rsyslog
4、使用fliter的grok模块收集mysql日志
filter插件有很多,在这里就学习grok插件,使用正则匹配日志里的域来拆分。在实际生产中,apache日志不支持jason,就只能使用grok插件匹配;mysql慢查询日志也是无法拆分,只能使用grok正则表达式匹配拆分。
在如下链接,github上有很多写好的grok模板,可以直接引用
https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns
在装好的logstash中也会有grok匹配规则,直接可以引用,路径如下
[root@linux-node1 patterns]# pwd
/usr/local/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-4.1.0/patterns
4.1日志文件
[root@linux-node1 ~]# cat slow.log
# Time: 160108 15:46:14
# User@Host: dev_select_user[dev_select_user] @ [192.168.97.86] Id: 714519
# Query_time: 1.638396
Lock_time: 0.000163 Rows_sent: 40
Rows_examined: 939155
SET timestamp=1452239174;
SELECT DATE(create_time) as day,HOUR(create_time) as
h,round(avg(low_price),2) as low_price
FROM t_actual_ad_num_log
WHERE create_time>='2016-01-07' and ad_num<=10
GROUP BY
DATE(create_time),HOUR(create_time);
4.2编写slow.conf
[root@linux-node1 ~]# cat mysql-slow.conf
input{
file {
path =>
"/root/slow.log"
type =>
"mysql-slow-log"
start_position =>
"beginning"
codec => multiline {
pattern => "^#
User@Host:"
negate => true
what =>
"previous"
}
}
}
filter {
# drop sleep events
grok {
match => {
"message" =>"SELECT SLEEP" }
add_tag => [
"sleep_drop" ]
tag_on_failure =>
[] # prevent default _grokparsefailure tag on real records
}
if "sleep_drop"
in [tags] {
drop {}
}
grok {
match => [ "message",
"(?m)^# User@Host: %{USER:user}\[[^\]]+\] @ (?:(?<clienthost>\S*)
)?\[(?:%{IP:clientip})?\]\s+Id: %{NUMBER:row_id:int}\s*# Query_time:
%{NUMBER:query_time:float}\s+Lock_time: %{NUMBER:lock_time:float}\s+Rows_sent:
%{NUMBER:rows_sent:int}\s+Rows_examined: %{NUMBER:rows_examined:int}\s*(?:use
%{DATA:database};\s*)?SET
timestamp=%{NUMBER:timestamp};\s*(?<query>(?<action>\w+)\s+.*)\n#\s*"
]
}
date {
match => [
"timestamp", "UNIX" ]
remove_field => [
"timestamp" ]
}
}
output {
stdout{
codec =>
"rubydebug"
}
}
执行该配置文件,查看grok正则匹配结果
使用logstash收集java、nginx、系统等常见日志的更多相关文章
- logstash收集java日志,多行合并成一行
使用codec的multiline插件实现多行匹配,这是一个可以将多行进行合并的插件,而且可以使用what指定将匹配到的行与前面的行合并还是和后面的行合并. 1.java日志收集测试 input { ...
- 第六章·Logstash深入-收集java日志
1.通过Logstash收集java日志并输出到ES中 因为我们现在需要用Logstash收集tomcat日志,所以我们暂时将tomcat安装到Logstash所在机器,也就是db03:10.0.0. ...
- ELK快速入门(二)通过logstash收集日志
ELK快速入门二-通过logstash收集日志 说明 这里的环境接着上面的ELK快速入门-基本部署文章继续下面的操作. 收集多个日志文件 1)logstash配置文件编写 [root@linux-el ...
- 云服务器 ECS Linux 系统中常见的日志文件介绍
云服务器 ECS Linux 系统中,日志文件是非常重要的文件,它们记录了很多系统中重要的事.Linux 系统中常见日志文件概述如下: /var/log/cron可以在 cron 文件中检查 cron ...
- logstash收集nginx访问日志
logstash收集nginx访问日志 安装nginx #直接yum安装: [root@elk-node1 ~]# yum install nginx -y 官方文档:http://nginx.org ...
- 用Kibana和logstash快速搭建实时日志查询、收集与分析系统
Logstash是一个完全开源的工具,他可以对你的日志进行收集.分析,并将其存储供以后使用(如,搜索),您可以使用它.说到搜索,logstash带有一个web界面,搜索和展示所有日志. kibana ...
- Logstash收集nginx访问日志和错误日志
1.收集访问日志 1).首先是要在nginx里面配置日志格式化输出 log_format main "$http_x_forwarded_for | $time_local | $reque ...
- logstash收集nginx日志
(1)安装nginx 1.安装nginx yum install epel-release -y yum install nginx -y 2.修改日志文件格式为json #vim /etc/ngin ...
- 高并发&高可用系统的常见应对策略 秒杀等-(阿里)
对于一个需要处理高并发的系统而言,可以从多个层面去解决这个问题. 1.数据库系统:数据库系统可以采取集群策略以保证某台数据库服务器的宕机不会影响整个系统,并且通过负载均衡策略来降低每一台数据库服务器的 ...
随机推荐
- ZROI 19.08.02 计算几何
1.向量基础知识 \(atan2\)可以求极角,但是不是特别精确,在坐标接近\(10^{9}\)时会出锅,安全的做法是叉积. 旋转.反射和平移等都可以抽象为矩阵,即,它们可以复合.(需要一些必修四知识 ...
- CentOS源码编译安装MySQL 5.5.15
CentOS源码编译安装MySQL 5.5.15 文章目录 [隐藏] 安装编译工具 下载源码 安装cmake和bison 编译安装MySQL 一些相关设置 安装编译工具 yum install g ...
- bootstrap导航菜单做active判断
先创建2个文件,index 和about,导入bootstrap的css <div class="container"> <ul class="nav ...
- 34 String、StringBuffer、StringBuilder
String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间. StringBuffer是可变类,和线程安全的字符串操作类,任何对 ...
- NOIP2016提高A组五校联考4总结
坑爹的第一题,我居然想了足足3个小时,而且还不确定是否正确. 于是,我就在这种情况下心惊胆跳的打了,好在ac了,否则就爆零了. 第二题,树形dp,本来差点就想到了正解,结果时间不够,没打完. 第三题, ...
- 两台linux服务器相互拷贝文件的两个方法
scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的.可能会稍微影响一下速度.当你服务器 ...
- .net reactor 加密混淆使用办法
https://www.cnblogs.com/bile/p/10250888.html 概述:安装了.net reactor之后,可以在安装目录下找到帮助文档REACTOR_HELP.chm,目前没 ...
- Proxy Class(代理类)
在使用二维数组时,我们可以使用a[][]来访问数组中的元素,这很显然是正确的也无需证明. 但如果要自己实现一个二维数组的时候,会发现如果想要重载符号[][],会被告知没有这个符号,这即引出了C++ o ...
- DNS预读取 dns-prefetch 提升页面载入速度
DNS Prefetch,即DNS预获取,是前端优化的一部分.一般来说,在前端优化中与 DNS 有关的有两点: 一个是减少DNS的请求次数,另一个就是进行DNS预获取 . DNS 作为互联网的基础协议 ...
- Python抽象类(abc模块)
1.抽象类概念 抽象类是一个特殊的类,只能被继承,不能实例化 2.为什么要有抽象类 其实在未接触抽象类概念时,我们可以构造香蕉.苹果.梨之类的类,然后让它们继承水果这个基类,水果的基类包含一个eat函 ...