0.介绍
Logstash是一款轻量级的日志搜集处理框架,可以方便的把分散的、多样化的日志搜集起来,并进行自定义的处理,然后传输到指定的位置,比如某个服务器或者文件。
http://kibana.logstash.es/content/logstash/
1.下载和安装
下载地址
https://www.elastic.co/downloads/logstash
目前最新版 2.4.0
这里使用 tar.gz 源码安装
下载
wget https://download.elastic.co/logstash/logstash/logstash-2.4.0.tar.gz
解压
tar -zxvf logstash-2.4.0.tar.gz
2.配置
2.1 创建logstash配置文件
进入 logstash 目录,创建 config 配置文件存放目录。
mkdir config
vim config/nginx-gitlab.conf
config/nginx-gitlab.conf 文件内容
input {
file {
path => "/var/opt/gitlab/nginx/logs/*.log"
start_position => beginning
}
}
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG} %{QS:x_forwarded_for}"}
}
date {
match => [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss Z" ]
}
geoip {
source => "clientip"
}
}
output {
elasticsearch {
hosts => "192.168.235.32:9200"
}
stdout { codec => rubydebug }
}
启动:
./bin/logstash -f config/nginx-gitlab.conf
配置说明
http://kibana.logstash.es/content/logstash/plugins/input/file.html
2.2 Nginx 日志格式定义
log_format access '$remote_addr - $remote_user [$time_local] "$request" $http_host $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for" $upstream_addr $upstream_status $upstream_cache_status "$upstream_http_content_type" $upstream_response_time > $request_time';
3.启动和停止
3.1 测试命令
测试logstash
./bin/logstash -e ""
然后输入:hello world
hello world
Settings: Default pipeline workers: 2
Pipeline main started
{
"message" => "hello world",
"@version" => "1",
"@timestamp" => "2017-09-19T02:11:41.423Z",
"type" => "stdin",
"host" => "localhost.localdomain"
}
# ./bin/logstash -e 'input { stdin { } } output { stdout {codec=>rubydebug} }'
然后你会发现终端在等待你的输入。没问题,敲入 Hello World,回车,然后看看会返回什么结果!
hello world
{
"message" => "hello world",
"@version" => "1",
"@timestamp" => "2017-09-19T01:43:22.733Z",
"host" => "localhost.localdomain"
}
3.2 测试配置文件是否正确
# ./bin/logstash -t -f config/nginx_to_es.conf
Configuration OK
3.3 启动
加载 etc文件夹下所有 *.conf 的文本文件,然后在自己内存里拼接成一个完整的大配置文件
# ./bin/logstash -f config/
后台运行
# nohup ./bin/logstash -f config/ &
3.4 停止
查找进程 ID
# ps -ef |grep logstash
或查看 9600 端口
# netstat -ntlp|grep java
杀死
# kill -9 pid
4. 测试
5. 命令行中常用的命令
- -f:通过这个命令可以指定Logstash的配置文件,根据配置文件配置logstash
- -e:后面跟着字符串,该字符串可以被当做logstash的配置(如果是“” 则默认使用stdin作为输入,stdout作为输出)
- -l:日志输出的地址(默认就是stdout直接在控制台中输出)
- -t:测试配置文件是否正确,然后退出。
6. 实例
6.1 读取日志文件
命令终端标准输入:stdin
文件头读入。
命令终端标准输出:stdout
输入到 Elasticsearch。
input {
file {
path => "/opt/www/boot/logs/*.log"
start_position => beginning
}
stdin {
}
}
filter {
#Only matched data are send to output.
}
output {
stdout {
codec => rubydebug
}
elasticsearch {
action => "index" #The operation on ES
codec => rubydebug
hosts => "192.168.235.32:9200" #ElasticSearch host, can be array.
index => "logstash-%{+YYYY.MM.dd}" #The index to write data to.
}
}
6.2 读取TCP端口
注意:
- host 要与log4j中的地址一样。
- port 不要用“”
- codec 必需要解析为json,不然整体json格式字符串都为消息体。
input {
tcp {
host => "localhost"
port => 4560
codec => json
}
stdin {
}
}
filter {
#Only matched data are send to output.
}
output {
stdout {
codec => rubydebug
}
elasticsearch {
action => "index" #The operation on ES
codec => rubydebug
hosts => "192.168.235.32:9200" #ElasticSearch host, can be array.
index => "logstash-%{+YYYY.MM.dd}" #The index to write data to.
}
}