logstash是一个分布式日志收集框架
分布式:把一个系统根据功能分模块分在多个服务器上运行,就叫分布式。
它的功能很强大,可以用来支持canal等项目。
首先,顾名思义,logstash就是一个日志收集的框架。你去官网上把Logstash下载下来,进行配置,就可以用了。
进入bin目录下,logstash的启动命令为: logstash -f conf/test.conf #后面跟的参数是配置文件的所在地址和文件名。
其中在配置文件text.conf中,主要分为input,filter,output三部分。
input:输入可以源自于某个文件,它可以监听log文件的状态,捕获到新增的log信息。因为logstash被ElasticSearch收购了,所以输入好像用ElasticSearch也很和谐。
filter过滤器:它可以将log根据不同的格式过滤,对log进行格式转换。
output:输出到某个存储系统,或临时中转系统,如mysql,redis,mq(消息中间件)等等。
配置output到mq的配置文件:
output {
rabbitmq {
exchange => "exchaneg-name"
exchange_type => "topic"
host => "121.40.30.150"
key => "routting-key-name"
user => "user-name"
password => "password"
port => "your-port"
vhost => "vhost"
connection_timeout => "3000"
}
}
其中filter中:
if:可以使用If条件,搭配drop{}方法,丢弃掉不符合格式的Log.
if里面可以使用#, in, not , ==, !=, <=, >=, <, >, =~, !~, and, or, xor, nand这几类判断符号。
=~后面加正则表达式
grok:是logstash中比较经典的东西,可以随心的从原本log中获取到有价值的信息,并按照你想要的格式对其进行格式的重新排列。
我所做的项目由于逻辑简单 并没有用起来grok这个东西,只使用了
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
意为把获取的log封装一下。grok使用的是自己的正则,它的正则规律在grok-pattern文件中进行定义,你也可以自定义一下正则表达式。
举个例子,对于下面这条日志:
55.3.244.1 GET /index.html 15824 0.043
可以这样解析:
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
将会得到这样的结果
* client: 55.3.244.1
* method: GET
* request: /index.html
* bytes: 15824
* duration: 0.043
其中IP,WORD,NUMBER等都是在grok-pattern文件里面定义过的正则,可以直接用来使用,非常方便。