当前位置: 首页 > news >正文

2023最新ELK日志平台(elasticsearch+logstash+kibana)搭建

去年公司由于不断发展,内部自研系统越来越多,所以后来搭建了一个日志收集平台,并将日志收集功能以二方包形式引入自研系统,避免每个自研系统都要建立一套自己的日志模块,节约了开发时间,管理起来也更加容易。

这篇文章主要介绍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先卸载旧版本

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

升级yum

yum update

设置仓库

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

使用阿里云镜像地址

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

安装 Docker Engine-Community

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

设置docker开机启动并启动docker

sudo systemctl enable docker
sudo systemctl start docker

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

docker pull elasticsearch:8.6.2
docker pull kibana:8.6.2
docker pull logstash:8.6.2

启动

elasticsearch

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

cluster.name: "docker-cluster"
network.host: 0.0.0.0
discovery.seed_hosts: 0.0.0.0
network.bind_host: 0.0.0.0
http.port: 9200# Enable security features
xpack.security.enabled: falsexpack.security.enrollment.enabled: false# Enable encryption for HTTP API client connections, such as Kibana, Logstash, and Agents
xpack.security.http.ssl:enabled: false# Enable encryption and mutual authentication between cluster nodes
xpack.security.transport.ssl:enabled: false

创建elasticsearch容器

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容器

docker start elasticsearch

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

kibana

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

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

启动kibana

docker start kibana

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

logstash

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

# 输入端
input {stdin { } #为logstash增加tcp输入口,后面springboot接入会用到tcp {mode => "server"host => "0.0.0.0"port => 5043codec => json_lines}
}#输出端
output {stdout {codec => rubydebug}elasticsearch {hosts => ["http://你的虚拟机ip地址:9200"]# 输出至elasticsearch中的自定义index名称index => "xiaobawang-%{+YYYY.MM.dd}"}
}

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

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容器

docker exec -it logstash /bin/bash

安装json_lines所需的插件

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

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

docker restart logstash

Springboot整合logstash

下面使用logstash来将日志发送到elasticsearch,这里以springboot为例。

新建一个springboot项目,引入如下包:

<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId>
</dependency>
<dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>7.3</version>
</dependency>

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

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

新建一个controller请求

@RestControllerpublicclassTestController {privatefinalstatic Logger logger= LoggerFactory.getLogger(TestController.class);@RequestMapping("/myTest")publicvoidtest(){logger.info("日志开始"+System.currentTimeMillis());logger.info("日志结束"+System.currentTimeMillis());}
}

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

可以看到springboot的3月4号日志已经生成,下面进一步查看日志的内容。

点击左侧菜单,选择Discover,创建数据视图,因为索引名称前缀是xiaobawang-,所以索引模式填写xiaobawang-*

就可以匹配每天生成的日志。

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

http://www.lryc.cn/news/37717.html

相关文章:

  • 2023-3-10 刷题情况
  • 如何建立一个成功的MES?
  • Kafka生产者幂等性/事务
  • JavaWeb--案例(Axios+JSON)
  • css制作动画(动效的序列帧图)
  • 【设计模式】装饰器模式
  • Nginx配置实例-反向代理案例一
  • Java中IO流中字节流(FileInputStream(read、close)、FileOutputStream(write、close、换行写、续写))
  • C#完全掌握控件之-combbox
  • STL的空间配置器(allocator)
  • linux系统莫名其妙的环境变量问题
  • 使用 Microsoft Dataverse 简化的连接快速入门
  • PLSQL Developer 安装指南
  • 腾讯云企业网盘2.5版本全新发布啦!!!
  • Excel职业版本(4)
  • 3-2 SpringCloud快速开发入门:Ribbon 实现客户端负载均衡
  • ChatGPT,乌合之众的疯狂
  • 代码随想录刷题-数组-长度最小的子数组
  • 成功解决安装MySQL5.7提示公钥GPG密钥配置为file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
  • vue配置环境变量
  • js学习3(数组)
  • 不用写代码也能开发,产品经理是怎么做到的?
  • Android源码分析 - Parcel 与 Parcelable
  • 数字孪生与 UWB 技术创新融合:从单点测量到全局智能化
  • 蓝桥杯嵌入式PWM_IN(打开中断)
  • 蓝桥杯集训·每日一题Week1
  • 25k的Java开发常问的ThreadLocal问题有哪些?
  • R语言基础(四):数据类型
  • 批处理命令--总结备忘「建议收藏」
  • 面试知识点梳理及相关面试题(十一)-- docker