经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Elasticsearch » 查看文章
2023最新ELK日志平台(elasticsearch+logstash+kibana)搭建
来源:cnblogs  作者:超级小霸王  时间:2023/3/20 8:41:36  对本文有异议

前言

去年公司由于不断发展,内部自研系统越来越多,所以后来搭建了一个日志收集平台,并将日志收集功能以二方包形式引入自研系统,避免每个自研系统都要建立一套自己的日志模块,节约了开发时间,管理起来也更加容易。
这篇文章主要介绍ELK最新版本的搭建,二方包的介绍可以看小霸王的另外一篇文章。

ELK介绍

  • Elasticsearch 是一个分布式、Restful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。作为 Elastic Stack 的核心,Elasticsearch 会集中存储您的数据,让您飞快完成搜索,并对数据进行强大的分析。
  • Logstash 是免费且开放的服务器端数据处理管道,能够从多个来源采集数据,转换数据,然后将数据发送到数据库中。
  • Kibana 是一个免费且开放的用户界面,能够让您对 Elasticsearch 数据进行可视化,从跟踪查询负载,到查看应用请求的整个过程,都能轻松完成。

搭建平台版本

平台 版本
linux centos stream 9
java openjdk 17
elasticsearch 8.6.2
logstash 8.6.2
kibana 8.6.2
VMware Workstation Pro 17

安装

首先在linux虚拟机上安装docker
先卸载旧版本

  1. sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

升级yum

  1. yum update

设置仓库

  1. yum install -y yum-utils device-mapper-persistent-data lvm2

使用阿里云镜像地址

  1. yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

安装 Docker Engine-Community

  1. sudo yum install docker-ce docker-ce-cli containerd.io

设置docker开机启动并启动docker

  1. sudo systemctl enable docker
  2. sudo systemctl start docker

至此,docker已安装完成,可以使用docker -v查看版本,接下来就要安装三大金刚了

  1. docker pull elasticsearch:8.6.2
  2. docker pull kibana:8.6.2
  3. docker pull logstash:8.6.2

启动

elasticsearch

接着先挂载elasticsearch的配置文件,方便以后修改
首先创建elasticsearch.yml文件

  1. cluster.name: "docker-cluster"
  2. network.host: 0.0.0.0
  3. discovery.seed_hosts: 0.0.0.0
  4. network.bind_host: 0.0.0.0
  5. http.port: 9200
  6. # Enable security features
  7. xpack.security.enabled: false
  8. xpack.security.enrollment.enabled: false
  9. # Enable encryption for HTTP API client connections, such as Kibana, Logstash, and Agents
  10. xpack.security.http.ssl:
  11. enabled: false
  12. # Enable encryption and mutual authentication between cluster nodes
  13. xpack.security.transport.ssl:
  14. enabled: false

创建elasticsearch容器

  1. docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -v /home/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -e "discovery.type=single-node" elasticsearch:8.6.2

启动elasticsearch容器

  1. docker start elasticsearch

浏览器输入http://你的虚拟机ip:9200 显示如下,说明es启动成功

image.png

kibana

创建kibana容器,这里使用到汉化 "-e I18N_LOCALE=zh-CN"

  1. docker run -d --name kibana --link elasticsearch:elasticsearch -e "I18N_LOCALE=zh-CN" -p 5601:5601 kibana:8.6.2

启动kibana

  1. docker start kibana

输入http://你的虚拟机ip:5601/ 此时kibana启动成功

image.png

logstash

在linux的/home目录下新建logstash.yml文件,其中index是索引的名称,我们使用“xiaobawang-”前缀加时间来生成每天的索引。

  1. # 输入端
  2. input {
  3. stdin { }
  4. #为logstash增加tcp输入口,后面springboot接入会用到
  5. tcp {
  6. mode => "server"
  7. host => "0.0.0.0"
  8. port => 5043
  9. codec => json_lines
  10. }
  11. }
  12. #输出端
  13. output {
  14. stdout {
  15. codec => rubydebug
  16. }
  17. elasticsearch {
  18. hosts => ["http://你的虚拟机ip地址:9200"]
  19. # 输出至elasticsearch中的自定义index名称
  20. index => "xiaobawang-%{+YYYY.MM.dd}"
  21. }
  22. }

然后启动logstash,这里配置文件做了映射,/home/logstash.yml映射到/usr/share/logstash/pipeline/logstash.yml

  1. docker run -d --name logstash -p 5043:5043 -p 5044:5044 --privileged=true -v /home/logstash.yml:/usr/share/logstash/pipeline/logstash.yml logstash:8.6.2

进入logstash容器

  1. docker exec -it logstash /bin/bash

安装json_lines所需的插件

  1. /usr/share/logstash/bin/logstash-plugin install logstash-codec-json_lines

重启logstash,至此elk已全部安装完成了。

  1. docker restart logstash

Springboot整合logstash

下面使用logstash来将日志发送到elasticsearch,这里以springboot为例。
新建一个springboot项目,引入如下包:

  1. <dependency>
  2. <groupId>ch.qos.logback</groupId>
  3. <artifactId>logback-classic</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>net.logstash.logback</groupId>
  7. <artifactId>logstash-logback-encoder</artifactId>
  8. <version>7.3</version>
  9. </dependency>

在resources文件夹下,创建logback.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <configuration debug="false">
  3. <!--获取springboot的yml配置信息-->
  4. <springProperty scope="context" name="applicationName" source="spring.application.name" defaultValue="default"/>
  5. <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
  6. <property name="LOG_HOME" value="/home"/>
  7. <!--输出到控制台-->
  8. <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
  9. <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
  10. <level>INFO</level>
  11. </filter>
  12. <withJansi>false</withJansi>
  13. <encoder>
  14. <!--<pattern>%d %p (%file:%line)- %m%n</pattern>-->
  15. <!--格式化输出:%d:表示日期 %thread:表示线程名 %-5level:级别从左显示5个字符宽度 %msg:日志消息 %n:是换行符-->
  16. <pattern>%d{yyyy-MM-dd HH:mm:ss} %highlight(%-5level) -- %boldMagenta([%thread]) %boldCyan(%logger) : %msg%n</pattern>
  17. <charset>UTF-8</charset>
  18. </encoder>
  19. </appender>
  20. <!-- 日志发送至logstash -->
  21. <appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
  22. <!-- logstash的服务器地址和通信端口 -->
  23. <destination>你的虚拟机IP地址:5043</destination>
  24. <!-- encoder is required -->
  25. <encoder class="net.logstash.logback.encoder.LogstashEncoder">
  26. <!-- 在elasticsearch的index中追加applicationName字段 -->
  27. <customFields>{"applicationName":"${applicationName}"}</customFields>
  28. </encoder>
  29. </appender>
  30. <!-- 按照每天生成日志文件 -->
  31. <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
  32. <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
  33. <!--日志文件输出的文件名-->
  34. <FileNamePattern>${LOG_HOME}/TestWeb.log.%d{yyyy-MM-dd}.log</FileNamePattern>
  35. <!--日志文件保留天数-->
  36. <MaxHistory>30</MaxHistory>
  37. </rollingPolicy>
  38. <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
  39. <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
  40. <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
  41. </encoder>
  42. <!--日志文件最大的大小-->
  43. <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
  44. <MaxFileSize>10MB</MaxFileSize>
  45. </triggeringPolicy>
  46. </appender>
  47. <!-- 日志输出级别 -->
  48. <root level="INFO">
  49. <appender-ref ref="logstash"/>
  50. <appender-ref ref="console"/>
  51. </root>
  52. </configuration>

新建一个controller请求

  1. @RestController
  2. public class TestController {
  3. private final static Logger logger= LoggerFactory.getLogger(TestController.class);
  4. @RequestMapping("/myTest")
  5. public void test(){
  6. logger.info("日志开始"+System.currentTimeMillis());
  7. logger.info("日志结束"+System.currentTimeMillis());
  8. }
  9. }

访问完请求后,进入Stack Management找到索引管理

屏幕截图 2023-03-04 233740.png

可以看到springboot的3月4号日志已经生成,下面进一步查看日志的内容。
屏幕截图 2023-03-04 233829.png

点击左侧菜单,选择Discover,创建数据视图,因为索引名称前缀是xiaobawang-,所以索引模式填写xiaobawang-*
就可以匹配每天生成的日志。
屏幕截图 2023-03-04 233903.png

屏幕截图 2023-03-04 233928.png

至此,ELK已经搭建完成,但kibana的功能远远不限于此,还可以查看不同维度的数据视图报表,有兴趣的童鞋可以研究研究。觉得有用的话,一键三连~

原文链接:https://www.cnblogs.com/zhouxiaoben/p/17234464.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号