最近在进行微服务的开发,发现传统的日志的收集处理方式如logback、log4J等已经不是很能满足需求,虽然现在才12个微服务,但是在看日志查找问题时已经很不方便了,于是搜寻更好的日志收集和集中式处理的方式,发现了ELK(Elasticsearch、Logstash、Kibana)。
项目中还没有用到,未雨绸缪先学习一下。大致的思路是利用logback把日志传给Logstash,Logstash再将日志传给Elasticsearch,最后由Kibana来展示,全部搭在一个服务器上。为了方便,先将防火墙关掉了:systemctl stop firewalld
一 下载ELK
1 安装ELK之前需要安装JDK8,在/usr/local下面创建了一个文件夹elk,用来放ELK的安装文件
2 Logstash下载地址:https://artifacts.elastic.co/downloads/logstash/logstash-5.3.1.tar.gz
3 Elasticsearch下载地址:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.3.1.tar.gz
4 Kibana下载地址: https://artifacts.elastic.co/downloads/kibana/kibana-5.3.1-linux-x86_64.tar.gz
可使用wget直接下载。
二 安装Logstash
1 解压:tar - zxvf logstash-5.3.1.tar.gz
2 进入到 logstash-5.3.1/config 中,创建一个配置文件,并用vi打开:vi logback_to_es
并将下面内容写入到配置文件中:其中4567是logstash监听的端口,localhost:9200是Elasticsearch的地址和端口号
input {
tcp {
port => 4567
}
}
filter {
}
output {
elasticsearch { hosts => "localhost:9200" }
stdout {
codec => rubydebug
}
}
3 用修改好的配置文件启动Logstash: ./bin/logstash -f config/logback_to_es.conf,如下所示,启动后不要关掉,等下可以用来验证logback的日志有没有传输过来。
4 为了让logback收集到的日志能够传给Logstash,需要在项目中修改logback的配置文件logback.xml:其中x.x.x.x为安装Logstash所在的服务器的IP地址,4567为Logstash监听的端口号
<appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<param name="Encoding" value="UTF-8"/>
<remoteHost>x.x.x.x</remoteHost>
<port>4567</port>
<!-- encoder is required -->
<encoder class="net.logstash.logback.encoder.LogstashEncoder" />
</appender>
<logger name="XXXX" level="INFO" additivity="false">
<appender-ref ref="logstash" />
<appender-ref ref="STDOUT"/>
</logger>
当然了,项目中要添加依赖:
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>4.4</version>
</dependency>
5 启动项目,做一些能产生日志的操作,观察Logstash:
观察到有日志传输过来了,说明项目中的logback已经和Logstash联通了。
三 安装Elasticsearch
注意,如果Elasticsearch的版本太低或者不符合要求,启动Kibana的时候会报错
1 解压: tar -zxvf elasticsearch-5.3.1.tar.gz
2 修改配置文件:elasticsearch-5.3.1/config/elasticsearch.yml
主要修改network.host和http.port,其他的根据自己的需要进行配置,修改为0.0.0.0是为了让别的机器也可以访问Elasticearch,9200为Elasticearch监听的端口号
3 想要启动es的话他需要一些最低配置的系统资源。如果出现这种错误max file descriptors [XXX] for elasticsearch process likely too low, increase to at least [65536],就是一些参数没有设置好。
(1)设置内核参数
vi /etc/sysctl.conf
# 增加以下参数
vm.max_map_count=655360
如下图:
执行命令,查看上述配置是否生效:sysctl -p,
(2)设置资源参数: vi /etc/security/limits.conf
* soft nofile 65536
* hard nofile 131072
* soft nproc 65536
* hard nproc 131072
如下图:
(3)设置用户资源参数:vi /etc/security/limits.d/20-nproc.conf
# 设置elk用户参数
elk soft nproc 65536
4 不能用root用户来启动Elasticearch(好像是5以上的都不能),新增一个用户并赋予相应的权限来启动Elasticearch
(1)新建用户
useradd elk #创建用户elk
groupadd elk #创建组elk
useradd elk -g elk #将用户添加到组
(2)赋予文件权限
chown -R elk:elk /usr/local/elk/elasticsearch-5.3.1/
(3)切换到elk用户:su elk,启动Elasticsearch:在/usr/local/elk/elasticsearch-5.3.1/bin目录下执行./elasticsearch
5 验证是否启动成功,在网页上访问 服务IP:9200,如下图就启动成功了:
四 安装Kibana
1 解压:tar -zxvf kibana-5.3.1-linux-x86_64.tar.gz
2 修改配置文件 :cd kibana-5.3.1-linux-x86_64/config,vi kibana.yml
主要修改:server.port,5601为Kibana监听的端口,server.host让别的机器可以访问Kibana,elasticsearch.url,就是Elasticsearch的IP地址和端口号
3 启动Kibana
在/usr/local/elk/kibana-5.3.1-linux-x86_64/bin目录下./kibana
出现下面这个样子基本就成功了,可以再登录网页http://Kibana服务IP地址:5601查看:
4 使用Kibana
要想使用Kibana,首先要创建一个Index,如上图,点击Create。
五 logback+ELK联合使用
启动项目,使其有日志生成,观察Kibana有没有数据显示:
至此,一个简易的logback+ELK搭建结束
参考资料:https://blog.csdn.net/puhaiyang/article/details/69664891