ELK(elasticsearch+logstash+kibana)是目前比较常用的日志分析系统,包括日志收集(logstash),日志存储搜索(elasticserarch),展示查询(kibana)三部分
ELK具体结构如下图所示:

基本日志数据流向:AppServer上报->logstash汇总分发->elasticsearch存储检索->kibana展示
安装流程:1、JDK1.8 2、
elasticsearch 3、logstah 4、kibana
环境要求: CentOS Linux release 7.4.1708 (Core)
软件版本: jdk-8u152
elasticsearch-6.1.2
kibana-6.1.2
logstash-6.1.2
1、安装JDK
elasticsearch和logstash需要需要jdk,根据官方文档6.1.2必须jdk1.8,推荐使用jdk
1.8.0_131,这里使用的是jdk1.8.0_152
下载jdk,在oracle官网下载
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
将jdk安装包上传到服务器上
并执行:

rpm -ivh jdk-8u152-linux-x64.rpm
配置环境变量:
vim /etc/profile
在最后追加
# set jdk
export JAVA_HOME=/usr/java/jdk1.8.0_152
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin:$CLASSPATH
重置查看java环境
source /etc/profile
java -version

2、安装elasticsearch
下载elasticsearch地址
rpm -ivh elasticsearch-6.1.2.rpm
安装后的文件地址
/run/elasticsearch 进程存放的位置
/etc/sysconfig/elasticsearch 全局设置
/etc/rc.d/init.d/elasticsearch 启动命令
/etc/elasticsearch 配置文件地址
/var/lib/elasticsearch 数据文件
/var/log/elasticsearch 日志
/usr/share/elasticsearch 安装目录
/usr/share/elasticsearch/bin/elasticsearch 启动程序
设置
elasticsearch全局属性,配置JAVA_HOME,
(此项可以不设置)
vim /etc/sysconfig/elasticsearch
JAVA_HOME=/usr/java/jdk1.8.0_152

设置
elasticsearch网络参数,打开
/etc/elasticsearch/
elasticsearch.yml
文件
vim /etc/elasticsearch/elasticsearch.yml
#设置绑定到一个特定的IP地址(IPv4或IPv6)
network.host:192.168.0.1
#设置自定义端口的HTTP
http.port:9200
设置jvm参数,打开
/etc/elasticsearch/jvm.options
文件
#jvm默认设置为1G,如果压力大,可将jvm的参数调大
-Xms1g
-Xmx1g
设置linux系统参数
修改/etc/security/limits.conf文件,添加或修改如下行:
vim /etc/security/limits.conf
* hard nofile 65536
* soft nofile 65536

修改 /etc/sysctl.conf文件,添加 vm.max_map_count设置
vim /etc/sysctl.conf
vm.max_map_count=262144

输入 sysctl -a 使修改生效
sysctl -a
启动elasticsearch
systemctl enable elasticsearch.service #设置开机启动
systemctl disable elasticsearch.service #取消开机启动
systemctl start elasticsearch.service #启动elasticsearch服务
systemctl stop elasticsearch.service #关闭elasticsearch服务
systemctl restart elasticsearch.service #重启elasticsearch服务
systemctl status elasticsearch.service #查看elasticsearch服务状态
设置防火墙端口
firewall-cmd --zone=public --add-port=9200/tcp --permanent
firewall-cmd --reload
测试是否安装成功,在浏览器中输入 http://192.168.0.1:9200 当出现下面页面时表示安装成功

3、安装logstash
下载logstash
rpm -ivh logstash-6.1.2.rpm
当提示红框中提示时,说明安装成功

安装后的文件地址
/etc/logstash 配置文件存放地址
/var/lib/logstash
/var/log/logstash 日志文件存放地址
/usr/share/logstash 安装地址
/usr/share/logstash/bin/logstash 启动文件地址
修改vim /etc/logstash/logstash.yml文件,设置监听端口
vim /etc/logstash/logstash.yml
# 这里设定绑定本机ip
http.host: "192.168.2.221"
# 用默认值,设置监控端口范围 9600-9700,默认会监听第一个9600
http.port: 9600-9700

默认会检测 /etc/logstash/conf.d/中以.conf结尾的配置文件,也可以修改为别的地址

新建logstash的输入、输出、过滤器规则
在/etc/logstash/conf.d/目录中新建 logstash.conf文件
input {
tcp {
id => "web-log-1"
host => "192.168.2.8"
port => 9601
mode => "server"
ssl_enable => false
codec => json { charset => "UTF-8" }
}
tcp {
id => "service-log-1"
host => "192.168.2.8"
port => 9602
mode => "server"
ssl_enable => false
codec => json { charset => "UTF-8" }
}
stdin { }
}
output {
elasticsearch {
hosts => "192.168.2.8:9200"
index => "%{[appname]}-%{+YYYYMMdd}"
codec => json { charset => "UTF-8" }
}
stdout {
codec => rubydebug {}
}
}
启动logstash
systemctl enable logstash.service #设置为开机启动服务
systemctl disable logstash.service # 取消开机启动
systemctl start logstash.service #启动服务
systemctl stop logstash.service #停止服务
systemctl restart logstash.service #重启服务
systemctl status logstash.service #查看服务状态
设置防火墙端口
firewall-cmd --zone=public --add-port=9600/tcp --add-port=9601/tcp --add-port=9602/tcp --permanent
firewall-cmd --reload
测试
logstash是否可用
在win电脑上telnet连接一下logstash

可以正常进行到9600端口中,说明正常启动

4、安装kibana
下注kibana
rpm -ivh kibana-6.1.2-x86_64.rpm
安装后的文件地址
/etc/default/kibana #默认配置
/etc/rc.d/init.d/kibana #启动脚本
/etc/kibana #配置文件
/var/lib/kibana
/usr/share/kibana #安装路劲
/usr/share/kibana/bin/kibana #启动程序
修改配置文件,设置访问端口,和elasticsearch地址
vim /etc/kibana/kibana.yml
#设置默认访问端口

#设置服务绑定的ip

#设置elasticsearch地址

启动kibana
systemctl enable kibana.service #设置为开机启动服务
systemctl disable kibana.service # 取消开机启动
systemctl start kibana.service #启动服务
systemctl stop kibana.service #停止服务
systemctl restart kibana.service #重启服务
systemctl status kibana.service #查看服务状态
设置防火墙端口
firewall-cmd --zone=public --add-port=5601/tcp --permanent
firewall-cmd --reload
测试服务是否安装成功,在浏览器访问: http://192.168.2.221:5601,如果可以打开以下页面说明安装成功

5、配置AppServer将日志上传到logstash中
由于项目中是采用slf4j+logback作为日志输出,所以这里只讨论这种方式
需要新加
logback
和
logstash
整合jar包 logstash-logback-encoder 和 jsonevent-layout,在pom.xml中配置
<!--logback和logstash整合jar包 -->
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>4.11</version>
</dependency>
<dependency>
<groupId>net.logstash.log4j</groupId>
<artifactId>jsonevent-layout</artifactId>
<version>1.7</version>
</dependency>
在logback.xml中配置
<!-- ELK日志 -->
<appender name="LOGSTASH_APPENDER" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>192.168.2.221:9601</destination>
<!-- encoder必须配置,有多种可选 -->
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
<customFields>{"appname":"web-app"}</customFields><!-- app的名字 -->
</encoder>
<connectionStrategy>
<roundRobin>
<connectionTTL>5 minutes</connectionTTL>
</roundRobin>
</connectionStrategy>
</appender>
<root level="DEBUG">
<appender-ref ref="LOGSTASH_APPENDER" />
</root>
配置说明:
1、net.logstash.logback.appender.LogstashTcpSocketAppender 这是使用TCP协议将日志上传到logstash中,这种方式需要考虑一下网络性能
2、net.logstash.logback.encoder.LogstashEncoder 指定数据的编码格式,这个必须和logstash.conf中的 codec => json { charset => "UTF-8" }配置一致,否则会出现乱码情况,一般默认使用UTF-8
3、<customFields>{"appname":"web-app"}</customFields> 这是自定义的,在每条日志都会加上这个信息,为在展示的时候好进行索引,在logstash.conf中index => "%{[appname]}-%{+YYYYMMdd}"会通过这个将web-app读取出来,然后存储起来
4、<connectionStrategy>
<roundRobin>
<connectionTTL>5 minutes</connectionTTL>
</roundRobin>
</connectionStrategy>
这块的配置是当连接多个logstash IP或者端口时,可以轮询负载各端口 ,多个地址是在 <destination>192.168.2.221:9601</destination> 中配置
然后启动程序在日志服务上用netstat -tnp 查看连接情况
netstat -tnp

从上图中可以看到192.168.2.48 在连接到 192.168.2.221:9601端口,说明在发送日志
在kibana中创建日志索引,就可以看到我们的app日志了

6、配置kibana日志过滤器,查看日志
新增日志索引过滤器:
在Management中选择Index Patterns

设置索引规则

设置时间字段过滤

点击Discovery查看日志详情

7、参考文档
ELK博客
elastic官网
Lostash最佳实践
Lostas官网文档
Elasticsearch权威指南
Elasticsearch官网文档