以下是基于elk+lnmp开源进行测试验证。
也可以参考官网的实现方法:https://kibana.logstash.es/content/logstash/plugins/codec/json.html
https://kibana.logstash.es/content/logstash/plugins/codec/multiline.html
在官网文档中,有较多应用场景:
https://kibana.logstash.es/content/
https://kibana.logstash.es/content/logstash/examples/
1.抓取nginx日志
input {
file {
# path => ["/home/wwwlogs/h5.vim.vim.com.log", "/home/wwwlogs/h5.vim.vim.com2.log"]
path => "/home/wwwlogs/h5.vim.vim.com.log"
exclude => "*.zip"
type => "java"
add_field => [ "domain", "h5.vim.vim.com" ]
codec => multiline {
pattern => "^\s+"
what => previous
}
}
file {
# path => ["/home/wwwlogs/h5.api.vim.vim.com.log", "/home/wwwlogs/h5.api.vim.vim.com2.log"]
path => "/home/wwwlogs/h5.api.vim.vim.com.log"
exclude => ["*.zip", "*.gz"]
type => "java"
add_field => [ "domain", "h5.api.vim.vim.com" ]
codec => multiline {
pattern => "^\s+"
what => previous
}
}
}
filter {
}
output {
stdout {
codec => rubydebug
}
elasticsearch {
hosts => ["0.0.0.0:9200"]
index => "logstash-%{domain}-%{+YYYY.MM.dd}"
}
}
2.定期清理索引
#!/bin/bash
# --------------------------------------------------------------
# This script is to delete ES indices older than specified days.
# Version: 1.0
# --------------------------------------------------------------
function usage() {
echo "Usage: `basename $0` -s ES_SERVER -d KEEP_DAYS [-w INTERVAL]"
}
PREFIX='logstash-'
WAITTIME=2
NOW=`date +%s.%3N`
LOGPATH=/apps/logs/elasticsearch
while getopts d:s:w: opt
do
case $opt in
s) SERVER="$OPTARG";;
d) KEEPDAYS="$OPTARG";;
w) WAITTIME="$OPTARG";;
*) usage;;
esac
done
if [ -z "$SERVER" -o -z "$KEEPDAYS" ]; then
usage
fi
if [ ! -d $LOGPATH ]; then
mkdir -p $LOGPATH
fi
INDICES=`curl -s $SERVER/_cat/indices?h=index | grep -P '^logstash-.*\d{4}.\d{2}.\d{2}' | sort`
for index in $INDICES
do
date=`echo $index | awk -F '-' '{print $NF}' | sed 's/\./-/g' | xargs -I{} date -d {} +%s.%3N`
delta=`echo "($NOW-$date)/86400" | bc`
if [ $delta -gt $KEEPDAYS ]; then
echo "deleting $index" | tee -a $LOGPATH/es_delete_indices.log
curl -s -XDELETE $SERVER/$index | tee -a $LOGPATH/es_delete_indices.log
echo | tee -a $LOGPATH/es_delete_indices.log
sleep $WAITTIME
fi
done