1,首先确认机器上有4G可用内存
#然后输入命令查看机器上面mmap的值:
sysctl vm.max_map_count
#如果值小于655360
#执行命令:
sysctl -w vm.max_map_count=655360
#然后设置修改文件
vim /etc/sysctl.conf
#加入:
vm.max_map_count=655360
启动elk:
sudo docker run -d -p 5601:5601 -p 9200:9200 -p 5044:5044 -v elk-data:/var/lib/elasticsearch --name elk sebp/elk:550
sudo docker logs -f elk
在演示环境和测试环境中,ssl是不必要的,可以去掉logstash的ssl:
docker exec -it elk bash
vim /etc/logstash/conf.d/02-beats-input.conf
#删除里面所有ssl与ssl-prefixed指令,改成如下:
input {
beats {
port => 5044
}
}
安装filebeat:
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-5.5.3-x86_64.rpm
sudo rpm -vi filebeat-5.5.3-x86_64.rpm
配置日志路径和输出地址
vim /etc/filebeat/filebeat.yml
#注释output.elasticsearch及下面子节点
#然后添加如下后修改:
output:
logstash:
enabled: true
hosts:
- 你elk服务器IP:5044
#如果logstash启用了ssl,那么这块需要配置
#ssl:
# certificate_authorities:
# - /etc/pki/tls/certs/logstash-beats.crt
timeout: 15
filebeat:
prospectors:
- input_type: log
paths:
#我的JAVA系统日志
- /var/log/bizlog/*
document_type: biz_log
#添加自定义字段
fields:
log_type: biz_log
#运行创建根属性
fields_under_root: true
- input_type: log
paths:
- "/var/log/nginx/*.log"
document_type: nginx-access
其中logstash-beat.crt去https://github.com/spujadas/elk-docker下载,也可以用自己的证书。
然后启动filebeat:
sudo /etc/init.d/filebeat start
tail -f /var/log/filebeat/filebeat
去服务器IP://5601看抓取的日志了
增加java异常日志(多行)处理,在filebeat端配置和logstash端配置中选其一,不过建议在filebeat配置
filebeat配置:
filebeat.prospectors:
- input_type: log
paths:
#我的JAVA系统日志
- /var/log/bizlog/*
document_type: biz_log
#添加自定义字段
fields:
log_type: biz_log
#运行创建根属性
fields_under_root: true
#表示以2开头为一行(比如2018,2019)
multiline.pattern: ^2
#为true表示满足pattern的算一行,false反之
multiline.negate: true
#表示不满足新行的mesasge添加到末尾
multiline.match: after
#合并超时时间
multiline.timeout: 5s
logstash配置(如果filebeat配置了这里就不用配了):
docker exec -it elk bash
vim /etc/logstash/conf.d/02-beats-input.conf
#改成如下这样(表示开头第一个是2的才能算一行,我这日志是2018日期开头)
input {
beats {
port => 5044
codec => multiline {
pattern => "^2"
negate => true
what => previous
}
}
}
#退出重启容器
docker restart elk
docker logs -f elk
如果需要NGINX代理kibana,需要先配置basePath
docker exec -it elk bash
vim /opt/kibana/config/kibana.yml
#修改basePath
server.basePath: "/kibana"
server.host: "0.0.0.0"
#然后重启容器
docker restart elk
然后配置nginx
location /kibana/ {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_pass https://192.168.223.67:5601/;
rewrite ^/kibana/(.*)$ /$1 break;
}
如果遇到kibana启动不了,那把映射的卷目录权限设置成777,并修改容器里kibana配置
vim etc/init.d/kibana
修改:
NODE_OPTIONS="--max-old-space-size=8000"
取日志里时间,因为es里只存UTC时区,这里要表明日志所在的时区,我的是Asia/Shanghai(东八区)
vim /etc/logstash/conf.d/11-nginx.conf
添加
if [log_type] == "biz_log" {
grok {
match => {
"message" => "(?\S{10} \S{12}) %{GREEDYDATA:msg}"
}
}
date {
match => ["fullTime", "yyyy-MM-dd HH:mm:ss.SSS" ]
timezone =>"Asia/Shanghai"
}
}