基于Centos 7.4 搭建ELK整合SpringBoot日志收集
基于Centos 7.4搭建es7.12.0+logstash-7.12.0+kibana-7.12.0(ELK)整合SpringBoot日志收集
注:Skywalking和logstash可共用一个ES,根据实际性能要求判断是否需要独立使用。
ELK简介:
ELK是Elasticsearch+Logstash+Kibana简称
- Elasticsearch:是一个分布式的搜索和分析引擎,可以用于全文检索、结构化检索和分析,并能将这三者结合起来。Elasticsearch 基于 Lucene 开发,现在是使用最广的开源搜索引擎之一。
- Logstash: 简单来说就是一根具备实时数据传输能力的管道,负责将数据信息从管道的输入端传输到管道的输出端,与此同时这根管道还可以让你根据自己的需求在中间加上滤网,Logstash提供了很多功能强大的滤网以满足你的各种应用场景。
- Kibana: 是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的。你可以用kibana搜索、查看、交互存放在Elasticsearch索引里的数据,使用各种不同的图标、表格、地图等,kibana能够很轻易的展示高级数据分析与可视化。
ELK实现的日志采集的核心是,通过 logstash 将应用系统的日志通过 input 收集,然后通过内部整理,通过 output 输出到 Elasticsearch 中,其实就是建立了一个 index,然后 kibana作为可视化平台,将 ES 的index进行输出到平台,通过图表的方式进行展示。
环境准备:
JDK: 1.8
OS: CentOS Linux release 7.4.1708 (Core)
elasticsearch:7.12.0
kibana:7.12.0
logstash:7.12.0
环境搭建:
其中 elasticsearch 的搭建可以参考 https://www.cnblogs.com/yizhipanghu/p/14738492.html, 在这里就不介绍了。
启动 Elasticsearch
一、安装Kibana
1、进入安装包路径[root@skywalking skywalking]# cd /usr/local/skywalking
[root@localhost skywalking]# tar -zxvf kibana-7.12.0-linux-x86_64.tar.gz
[root@skywalking skywalking]# vim /usr/local/skywalking/kibana-7.12.0-linux-x86_64/config/kibana.yml
# 服务端口号:
server.port: 5601
# 服务IP地址:
#server.host: "localhost"
server.host: "10.10.10.10"
# ES链接地址:
#elasticsearch.hosts: "localhost"
elasticsearch.hosts: "http://10.10.10.10:9200"
# 配置pid文件存储运行Kibana时的进程号,便于用kill -9 `cat /var/run/kibana.pid`来杀进程。
pid.file: /usr/local/skywalking/kibana-7.12.0-linux-x86_64/run/kibana.pid
# 配置Kibana的日志输出位置:
logging.dest: /usr/local/skywalking/kibana-7.12.0-linux-x86_64/kibana-log/kibana.log
#创建日志文件夹和进程文件夹
[root@skywalking skywalking]# mkdir -p /usr/local/skywalking/kibana-7.12.0-linux-x86_64/run/
[root@skywalking skywalking]# mkdir -p /usr/local/skywalking/kibana-7.12.0-linux-x86_64/kibana-log/
[root@skywalking skywalking]# firewall-cmd --list-ports [root@skywalking skywalking]# firewall-cmd --zone=public --add-port=5601/tcp --permanent [root@skywalking skywalking]# firewall-cmd --reload
[root@skywalking skywalking]# chown -R es:es /usr/local/skywalking/kibana-7.12.0-linux-x86_64
[root@skywalking skywalking]# cd /usr/local/skywalking/kibana-7.12.0-linux-x86_64/bin/ [root@skywalking bin]# su es [es@skywalking bin]$ nohup ./kibana & #在后台不输出日志方式运行 [es@skywalking bin]$ nohup ./kibana > /dev/null 2>&1 &
http://10.10.10.10:5601
8.设置systemd服务
[root@localhost bin]# cat /usr/lib/systemd/system/kibana.service [Unit] Description=Kibana Wants=network-online.target After=network-online.target elasticsearch.service [Service] User=es Group=es ExecStart=/usr/local/kibana/bin/kibana StandardOutput=journal StandardError=inherit # Specifies the maximum file descriptor number that can be opened by this process LimitNOFILE=65536 # Specifies the maximum number of bytes of memory that may be locked into RAM # Set to "infinity" if you use the 'bootstrap.memory_lock: true' option # in elasticsearch.yml and 'MAX_LOCKED_MEMORY=unlimited' in /etc/sysconfig/elasticsearch #LimitMEMLOCK=infinity # Disable timeout logic and wait until process is stopped TimeoutStopSec=0 # SIGTERM signal is used to stop the Java process KillSignal=SIGTERM Restart=on-failure # Java process is never killed SendSIGKILL=no # When a JVM receives a SIGTERM signal it exits with code 143 SuccessExitStatus=143 [Install] WantedBy=multi-user.target [root@localhost bin]#
[root@localhost bin]# systemctl enable kibana.service [root@localhost bin]# systemctl start kibana [root@localhost bin]# systemctl stop kibana [root@localhost bin]# ss -antp | grep 5601 *注:启动后稍微等待一会,有个启动过程才会看到进程
参考链接:https://linxiaohui.gitee.io/notes/2020/07/08/2020-07-08-install-elastic-and-kibana/
二、安装logstash
1、进入安装包路径
[root@skywalking skywalking]# cd /usr/local/skywalking [root@skywalking skywalking]# ll drwxrwxr-x. 11 1001 1002 185 4月 30 17:05 apache-skywalking-apm-bin-es7 -rw-r--r--. 1 root root 184816700 4月 30 16:59 apache-skywalking-apm-es7-8.5.0.tar.gz drwxr-xr-x. 10 es es 167 4月 30 15:10 elasticsearch-7.12.0 -rw-r--r--. 1 root root 327497331 4月 30 15:03 elasticsearch-7.12.0-linux-x86_64.tar.gz drwxr-xr-x. 12 es es 239 4月 30 15:49 kibana-7.12.0-linux-x86_64 -rw-r--r--. 1 root root 281022115 4月 30 15:04 kibana-7.12.0-linux-x86_64.tar.gz -rw-r--r--. 1 root root 368429061 5月 8 14:42 logstash-7.12.0-linux-x86_64.tar.gz [root@skywalking skywalking]#
2、解压软件包
[root@localhost skywalking]# tar -zxvf logstash-7.12.0-linux-x86_64.tar.gz
3、在config文件夹下添加 test.conf 文件,内容如下:
[root@skywalking skywalking]# cat logstash-7.12.0/config/test.conf input{ tcp { mode => "server" host => "10.10.10.10" ##监听发送日志的主机地址 port => 9061 #logstash服务端口,进行采集的端口 codec => json_lines #解码器,有的版本需单独安装 } } output{ elasticsearch{ hosts=>["10.10.10.10:9200"] #ES地址和端口 index => "springboot-%{project}-%{+YYYY.MM.dd}" #在ES生成的索引名称,%{project}为获取微服务logback-spring.xml中配置的project的值 } stdout{codec => rubydebug} } [root@skywalking skywalking]#
4、启动logstash
[root@skywalking skywalking]# cd logstash-7.12.0/ [root@skywalking logstash-7.12.0]# ./logstash -f ../config/test.conf
5、Spring boot微服务中添加依赖
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>6.0</version>
</dependency>
6、在resources下添加logback-spring.xml 只需把下面ip地址和project修改一下即可,(添加了skywalking的tract)
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- ELK日志, 发送至 appender --> <appender name="log-logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <!-- logstash地址和端口 --> <destination>10.10.10.1:9061</destination> <!-- encoder必须配置,有多种可选 --> <encoder class="net.logstash.logback.encoder.LogstashEncoder"> <!-- skywalking插件, log加tid --> <provider class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.logstash.TraceIdJsonProvider" /> <customFields>{"project":"iservice"}</customFields> </encoder> </appender> <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径 --> <property name="LOG_HOME" value="/home" /> <appender name="eventFile" class="ch.qos.logback.core.rolling.RollingFileAppender"> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- rollover daily --> <fileNamePattern>${LOG_HOME}/log/iservice-%d{yyyy-MM-dd}.%i.log</fileNamePattern> <!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB --> <maxFileSize>10MB</maxFileSize> <maxHistory>30</maxHistory> <totalSizeCap>50GB</totalSizeCap> </rollingPolicy> <encoder> <Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{35} - %msg %n</Pattern> <charset>UTF-8</charset> </encoder> </appender> <!-- root级别 INFO --> <root level="INFO"> <!-- logstash输出 --> <appender-ref ref="log-logstash"/> <appender-ref ref="eventFile" /> </root> </configuration>
7、application.properties 修改配置:
logging.config = classpath:logback-spring.xml
8.然后启动springboot ,在对应的controller 里面打印一些日志,然后就可以看到启动 Logstash 的 控制台有所输出,就可以了。
9.登录kibana http://10.10.10.1:5601/ ,点击导航栏 monitoring 模块 ---> 点击 Indices :增加索引,查看日志就可以了
logstash配置文件详解:https://blog.csdn.net/weixin_41436549/article/details/82222344
logback-spring详细介绍:https://www.cnblogs.com/mahoshojo/p/12920473.html
配置参考:https://www.cnblogs.com/xiaoyao-001/p/13273198.html
logback配置详解:https://blog.csdn.net/weixin_43944305/article/details/103794594
logback使用详解:https://blog.csdn.net/lhl1124281072/article/details/79852582
logback日志级别配合nacos使用:https://blog.csdn.net/DPnice/article/details/94650402
springboot日志输出到logstash:https://www.jianshu.com/p/869093fe0246?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation
springtboot集成skywalking日志:http://javadaily.cn/articles/2020/04/01/1585670887771.html
logback日志配置SizeAndTimeBasedRollingPolicy文件大小分割不生效问题:https://blog.csdn.net/mathlpz126/article/details/107344123
Logback配置文件自定义配置从Nacos动态获取+ELK:https://blog.csdn.net/DPnice/article/details/94650402