目录

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、系统等常见日志的更多相关文章

  1. logstash收集java日志,多行合并成一行

    使用codec的multiline插件实现多行匹配,这是一个可以将多行进行合并的插件,而且可以使用what指定将匹配到的行与前面的行合并还是和后面的行合并. 1.java日志收集测试 input { ...

  2. 第六章·Logstash深入-收集java日志

    1.通过Logstash收集java日志并输出到ES中 因为我们现在需要用Logstash收集tomcat日志,所以我们暂时将tomcat安装到Logstash所在机器,也就是db03:10.0.0. ...

  3. ELK快速入门(二)通过logstash收集日志

    ELK快速入门二-通过logstash收集日志 说明 这里的环境接着上面的ELK快速入门-基本部署文章继续下面的操作. 收集多个日志文件 1)logstash配置文件编写 [root@linux-el ...

  4. 云服务器 ECS Linux 系统中常见的日志文件介绍

    云服务器 ECS Linux 系统中,日志文件是非常重要的文件,它们记录了很多系统中重要的事.Linux 系统中常见日志文件概述如下: /var/log/cron可以在 cron 文件中检查 cron ...

  5. logstash收集nginx访问日志

    logstash收集nginx访问日志 安装nginx #直接yum安装: [root@elk-node1 ~]# yum install nginx -y 官方文档:http://nginx.org ...

  6. 用Kibana和logstash快速搭建实时日志查询、收集与分析系统

    Logstash是一个完全开源的工具,他可以对你的日志进行收集.分析,并将其存储供以后使用(如,搜索),您可以使用它.说到搜索,logstash带有一个web界面,搜索和展示所有日志. kibana ...

  7. Logstash收集nginx访问日志和错误日志

    1.收集访问日志 1).首先是要在nginx里面配置日志格式化输出 log_format main "$http_x_forwarded_for | $time_local | $reque ...

  8. logstash收集nginx日志

    (1)安装nginx 1.安装nginx yum install epel-release -y yum install nginx -y 2.修改日志文件格式为json #vim /etc/ngin ...

  9. 高并发&高可用系统的常见应对策略 秒杀等-(阿里)

    对于一个需要处理高并发的系统而言,可以从多个层面去解决这个问题. 1.数据库系统:数据库系统可以采取集群策略以保证某台数据库服务器的宕机不会影响整个系统,并且通过负载均衡策略来降低每一台数据库服务器的 ...

随机推荐

  1. windows2008r2防火墙设置一例

    有台dell R420服务器,系统windows2008r2 扫描出安全漏洞,按照默认开启防火墙,结果远程桌面上不去了,远程桌面端口号是10086,需要在 控制面板\所有控制面板项\Windows 防 ...

  2. mongodb数据库的改操作

    原来字段: { "_id" : ObjectId("5df0a28e406405edeac5001f"), "username" : &qu ...

  3. chrome模拟慢速3G网络

    谷歌调试控制台中network中可以设置,add为自定义

  4. NOIP2016提高A组五校联考2总结

    第一题用组合数各种乱搞,其恶心程度不一般.搞了很久才调对,比赛上出了一点bug,只拿了30分. 第二题我乱搞得出个错误的结论,本来自信满满60分,结果爆零了. 第三题,树形dp,在一开始的时候想到了, ...

  5. IntelliJ IDEA 2019.3激活破解教程(亲测有效,可激活至 2089 年)

    IntelliJ IDEA 2019.3激活破解教程(亲测有效,可激活至 2089 年) 所有软件安装位置,作者均在无中文.无空格目录下进行操作的 IntelliJ IDEA 2019.3激活破解教程 ...

  6. The Preliminary Contest for ICPC Asia Shanghai 2019 B. Light bulbs

    题目:https://nanti.jisuanke.com/t/41399 思路:差分数组 区间内操作次数为奇数次则灯为打开状态 #include<bits/stdc++.h> using ...

  7. keras学习笔记-bili莫烦

    一.keras的backend设置 有两种方式: 1.修改JSON配置文件 修改~/.keras/keras.json文件内容为: { "iamge_dim_ordering":& ...

  8. vuex上手文章参考

    参考文章: vue-vuex上手

  9. 基于数组阻塞队列 ArrayBlockingQueue 的一个队列工具类

    java语言基于ArrayBlockingQueue 开发的一个根据特定前缀和后缀的队列.每天自动循环生成. 1.定义队列基类 Cookie package com.bytter.util.queue ...

  10. sqli-labs(23)

    基于get的过滤了的注入 0X1测试闭合 /?id=' http://127.0.0.1/sql1/Less-23/?id=1%27%27 0X02 然后就是组合拳的操作了 未报错 那么应该是’闭合 ...