如何搭建 ELK【elasticsearch+logstash+kibana】日志分析系统

一、为什么需要日志分析系统?

日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误

往往单台机器的日志我们使用 grep、awk 等工具就能基本实现简单分析,但是当日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。

如果:

• 你有很多台机器
• 你有各种各样的Log

只要满足这两个条件其中之一,那么一套日志系统是很有必要的。优秀的日志系统可以让你及时发现问题,轻松追查故障原因,进而提高生产力。

二、什么是 ELK

ELKelasticsearch + logstash + kibanaELK 平台是一套完整的日志集中处理解决方案,将 ElasticSearchLogstashKiabana 三个开源工具配合使用, 完成更强大的用户对日志的查询、排序、统计需求。

在这里插入图片描述

  • Logstash:用于收集并处理日志,将日志信息存储到 Elasticsearch 里面
  • Elasticsearch:用于存储收集到的日志信息
  • Kibana :通过Web端的可视化界面来查看日志(数据可视化)

ELK 的工作原理

  1. 在所有需要收集日志的服务器上部署 Logstash;或者先将日志进行集中化管理在日志服务器上,在日志服务器上部署 Logstash
  2. Logstash 收集日志,将日志格式化并输出到 Elasticsearch 中。
  3. Elasticsearch 对格式化后的数据进行索引和存储。
  4. Kibana 从 ES 群集中查询数据生成图表,并进行前端数据的展示。

三、搭建 ELK

1.安装 elasticsearch

https://blog.csdn.net/ShockChen7/article/details/142760578

2.安装kibana

https://blog.csdn.net/ShockChen7/article/details/142760578

3.安装logstash

1.拉取 logstash镜像

docker pull logstash:8.8.1 

2.创建并运行容器

使用以下命令创建一个新的 logstash 容器并将其启动:

docker run --name some-logstash \-e ES_JAVA_OPTS="-Xms1g -Xmx2g" \-e TZ=Asia/Shanghai \-p 5044:5044 \-p 5000:5000 \-d logstash:8.8.1 

创建挂载目录、复制数据卷

mkdir -vp /root/my-logstash
#赋于权限
sudo chown -R 1000:1000 /root/my-logstash
#复制数据卷
docker cp some-logstash:/usr/share/logstash/config /root/my-logstash/
docker cp some-logstash:/usr/share/logstash/pipeline /root/my-logstash/

注:下载的包一定要和 ElasticSearch 的版本一致,我这边选择的版本是8.8.1

3.配置

LogstashSettings 配置文件通常是 logstash.yml,这是 Logstash 的全局配置文件,用于设置 Logstash 运行的一些基本参数。

在本地编辑文件

vim /root/my-logstash/config/logstash.yml

logstash.yml 末尾加上以下配置,文件的作用是为 Logstash 配置全局参数,比如日志级别、管道线程数、队列类型等。

http.host: "0.0.0.0"
xpack.monitoring.enabled: true
# xpack.monitoring.elasticsearch.username: logstash_system  #es xpack账号密码
# xpack.monitoring.elasticsearch.password: "123456"
xpack.monitoring.elasticsearch.hosts: ["http://127.0.0.1:9200"]

修改 logstash.conf 为以下配置,默认的基础上,将 inputbeat 改为 tcp 端口 5044

vim /root/my-logstash/pipeline/logstash.conf
input {tcp {port => 5044##格式json  否则中文会变成unicode编码codec => json_lines }
}output {elasticsearch {hosts => ["http://localhost:9200"]index => "my_log-%{+YYYY.MM.dd}"#user => "elastic" #es xpack账号密码#password => "changeme"}
}

注意:如果你的 es 运行在 docker 中,这里的配置中包括上面的,不能是 localhost ,而应该是你 docker 容器的 IP

使用命令可以查看指定容器的IP

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' your_container_name

另一种做法是将 eslogstashkibana 放在同一个 docker 网络中

4.停止、删除容器

docker stop some-logstash
docker rm some-logstash

5.重新挂载文件启动容器


docker run --name some-logstash \-e ES_JAVA_OPTS="-Xms1g -Xmx2g" \-e TZ=Asia/Shanghai \--restart=always --privileged=true \-v /root/my-logstash/config:/usr/share/logstash/config \-v /root/my-logstash/pipeline:/usr/share/logstash/pipeline \-p 5044:5044 \-p 5000:5000 \-d logstash:8.8.1 

6.检查可用性

检测 Docker 中的 Logstash 是否能够正常接收和打印消息

可以参考这篇文章:https://blog.csdn.net/weixin_50382197/article/details/139107762?fromshare=blogdetail&sharetype=blogdetail&sharerId=139107762&sharerefer=PC&sharesource=ShockChen7&sharefrom=from_link

四、springboot项目集成

1.添加logstash依赖

<dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>7.0.1</version>
</dependency>

2.准备logback-spring.xml文件

放在 src/main/resources 下面即可:

<?xml version="1.0" encoding="UTF-8"?>
<configuration><include resource="org/springframework/boot/logging/logback/base.xml" /><appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender"><!--    此处填写的是logstash采集日志的端口    --><destination>192.168.11.131:5044</destination><encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" /></appender><root level="INFO"><!-- 配置哪个级别使用该appender --><appender-ref ref="LOGSTASH" /></root>
</configuration>

Spring Boot 官方推荐优先使用带有 -spring 的文件名作为你的日志配置(如使用 logback-spring.xml ,而不是 logback.xml ),命名为 logback-spring.xml 的日志配置文件,spring boot 可以为它添加一些spring boot 特有的配置项

3.进行测试

package com.ruoyi.web;import com.ruoyi.common.utils.http.HttpUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class Test {private static final Logger log = LoggerFactory.getLogger(HttpUtils.class);public static void main(String[] args) {log.info("输出info");log.debug("输出debug");log.error("输出error");}}

五、查看日志

使用Kibana的开发者工具

Kibana 开发者工具中执行如下语句可以查看到对应日志记录:

GET my_log-2024.11.01/_search
{"query": {"match_all": {}}
}

查询结果如下:

在这里插入图片描述

可以看到,这里的数据即我们代码中测试的相关日志。但这里的结果并不方便观察和整理。并且时间格式也不理想,时区也并不是北京时间。

使用 Kibana 的 Discover 功能

在这里插入图片描述

进入后创建一个数据视图:

在这里插入图片描述

创建时,输入名称,和索引模式即可:

在这里插入图片描述

这里的索引模式需要和匹配的源对应,支持通配符,上图即使用 * 通配符创建。填写好后, 点击保存数据视图到 Kibana

创建好的数据视图如下:

在这里插入图片描述

六、添加es动态模板

根据上面的 logstash.conf 配置文件,动态生成的索引。数据结构除了 @timestamp 字段为date类型,其他的都将默认声明为 text 类型,即都将分词。如下:

GET my_log-2024.11.04/_mapping
{"my_log-2024.11.04": {"mappings": {"properties": {"@timestamp": {"type": "date"},"@version": {"type": "long"},"level": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"level_value": {"type": "long"},"logger_name": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"message": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}},"thread_name": {"type": "text","fields": {"keyword": {"type": "keyword","ignore_above": 256}}}}}}
}

这会导致浪费大量的空间和性能,比如我们的 logger_namethread_namelevel 字段,完全没有必要进行分词,精准查找即可,所以现在我们需要在 logstash 上传日志到es时,精准的建立字段的类型。这里采用es动态索引模板的方式。

使用 Kibana 开发者工具执行如下指令,创建索引模板:

PUT /_index_template/my_log_template  
{  "index_patterns": ["my_log-*"],   "template": {  "mappings": {  "properties": {  "@timestamp": {  "type": "date"  },  "data": {  "type": "text" ,"fields": {  "keyword": {  "type": "keyword",  "ignore_above": 256  }  }  },"level": {  "type": "keyword"  },  "logger_name": {  "type": "keyword"  },  "thread_name": {  "type": "keyword"  }  }  }}  
}

这个模板将自动应用于任何以 my_log- 开头的新索引。当让适用于以 my_log- 开头的索引名称。如果字段名称可以和模板对应上,那么字段类型将跟模板一致。

创建模板后,再次测试日志插入,查看类型,发现模板已经生效:

在这里插入图片描述

参考文章如下:

https://blog.csdn.net/www1056481167/article/details/128432478?fromshare=blogdetail&sharetype=blogdetail&sharerId=128432478&sharerefer=PC&sharesource=ShockChen7&sharefrom=from_link

https://blog.csdn.net/qq_38548730/article/details/141461285?fromshare=blogdetail&sharetype=blogdetail&sharerId=141461285&sharerefer=PC&sharesource=ShockChen7&sharefrom=from_link

https://blog.csdn.net/qq_36961226/article/details/139211386?fromshare=blogdetail&sharetype=blogdetail&sharerId=139211386&sharerefer=PC&sharesource=ShockChen7&sharefrom=from_link

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/7578.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Android智能座驾,carlink场景截屏黑屏问题

背景 项目开发过程中&#xff0c;遇到如下问题&#xff1a; 【操作步骤】 1、建立导航音乐分屏 2、连接Carlink&#xff0c;车机端打开任意Carlink应用&#xff0c;点击音乐图标回到分屏 【结果】 页面会出现1s黑屏再显示分屏的情况 详细分析 比较怀疑是截屏的方法拿到的图片就…

Go语言的常用内置函数

文章目录 一、Strings包字符串处理包定义Strings包的基本用法Strconv包中常用函数 二、Time包三、Math包math包概述使用math包 四、随机数包&#xff08;rand&#xff09; 一、Strings包 字符串处理包定义 Strings包简介&#xff1a; 一般编程语言包含的字符串处理库功能区别…

Vue实战学习(2)(Vue快速入门(快速构建一个局部Vue项目))

目录 一、Vue快速入门。 &#xff08;1&#xff09;快速入门的案例需求。 &#xff08;2&#xff09;原生js解决。 &#xff08;3&#xff09;使用Vue解决。 1、准备一个html页面。且该页面需要引入Vue模块。 2、创建Vue程序的应用实例。 3、准备html元素&#xff08;如div&…

canal1.1.7使用canal-adapter进行mysql同步数据

重要的事情说前面&#xff0c;canal1.1.8需要jdk11以上&#xff0c;大家自行选择&#xff0c;我这由于项目原因只能使用1.1.7兼容版的 文章参考地址&#xff1a; canal 使用详解_canal使用-CSDN博客 使用canal.deployer-1.1.7和canal.adapter-1.1.7实现mysql数据同步_mysql更…

羽星股份引领连锁业数智化转型,厦门羽星科技公司逆势增长剑指纳斯达克

羽星股份引领连锁业数智化转型&#xff0c;厦门羽星科技公司逆势增长剑指纳斯达克 在消费降级的大环境下&#xff0c;许多企业面临严峻挑战。在消费降级背景下&#xff0c;消费者购买力下降&#xff0c;对价格敏感度提升&#xff0c;更加注重产品的性价比和实用性。这一趋势促使…

RabbitMQ应用

1. 7种工作模式介绍 1.1 Simple(简单模式) P: ⽣产者,也就是要发送消息的程序C: 消费者,消息的接收者Queue: 消息队列(图中⻩⾊背景部分)类似⼀个邮箱,可以缓存消息;⽣产者向其中投递消息,消费者从 其中取出消息 特点: ⼀个⽣产者P&#xff0c;⼀个消费者C, 消息只能被消费…

从Java中使用new 关键字创建对象开始,深度剖析对象结构与存储

文章目录 1.对象结构2.扩展补充3.小结 1.对象结构 在介绍之前.先来看一个java高频面试题&#xff0c;new String(hello") 创建了几个对象&#xff1f; 1.这里分情况讨论&#xff0c;如果hello已经在常量池中存在&#xff0c;那么就是在堆中创建1个对象&#xff0c;并返回…

ThreadLocal 的原理和使用场景

1.ThreadLocal是什么 ThreadLocal 是 Java 提供的一个用于线程存储本地变量的类。它为每个线程提供独立的变量副本&#xff0c;确保变量在多线程环境下的线程安全。每个线程访问 ThreadLocal 时&#xff0c;都会有自己专属的变量副本&#xff0c;互不干扰&#xff0c;避免了并…

qt QColorDialog详解

1、概述 QColorDialog是Qt框架中的一个对话框类&#xff0c;专门用于让用户选择颜色。它提供了一个标准的颜色选择界面&#xff0c;其中包括基本的颜色选择器&#xff08;如调色板和颜色轮&#xff09;、自定义颜色输入区域以及预定义颜色列表。QColorDialog支持RGB、HSV和十六…

关于Redis

Redis 基础 什么是 Redis&#xff1f; Redis &#xff08;REmote DIctionary Server&#xff09;是一个基于 C 语言开发的开源 NoSQL 数据库&#xff08;BSD 许可&#xff09;。与传统数据库不同的是&#xff0c;Redis 的数据是保存在内存中的&#xff08;内存数据库&#xf…

linux nvidia/cuda安装

1.查看显卡型号 lspci |grep -i vga2.nvidia安装 2.1在线安装 终端输入&#xff08;当显卡插上之后&#xff0c;系统会有推荐的安装版本&#xff09; ubuntu-drivers devices可得到如下内容 vendor : NVIDIA Corporation model : TU104GL [Tesla T4] driver : nvid…

uniapp 实现瀑布流

效果演示 组件下载 瀑布流布局-waterfall - DCloud 插件市场

了解聚簇索引和非聚簇索引

在关系型数据库中,索引是提高查询效率的重要手段。索引类似于书籍中的目录,能够帮助数据库快速定位到所需的数据。而在数据库中,最常用的两种索引类型是聚簇索引(Clustered Index)和非聚簇索引(Non-clustered Index)。本文将详细介绍这两种索引类型,帮助读者更好地理解…

CODESYS可视化桌面屏保-动态气泡制作详细案例

#一个用于可视化(HMI)界面的动态屏保的详细制作案例程序# 前言: 在工控自动化设备上,为了防止由于人为误触发或操作引起的故障,通常在触摸屏(HMI)增加屏幕保护界面,然而随着PLC偏IT化的发展,在控制界面上的美观程度也逐渐向上位机或网页前端方面发展,本篇模仿Windows…

【数据结构 队列】超详细理解例题

数据结构 队列 前言队列的定义队列的概念队列的基本操作 队列用C语言实现Queue.hQueue.ctext.c 队列 VS 栈队列的应用 你好&#xff0c;这里是新人 Sunfor 这篇是我最近对于数据结构 队列的学习心得和错题整理 有任何错误欢迎指正&#xff0c;欢迎交流&#xff01; 会持续更新…

VSCode + linux 远程免密登录

目录 一. VS Code端1. 安装插件Remote - SSH2. 配置config文件3. 公钥生成 二、远程服务器端1. 将生成的公钥发送到远程服务器 三、连接1. 准备就绪后&#xff0c;VSCode连接 一. VS Code端 1. 安装插件Remote - SSH 2. 配置config文件 Host H5WebHostName xx.xx.xx.xxUser ro…

简单分享一下淘宝商品数据自动化抓取的技术实现与挑战

在电子商务领域&#xff0c;数据是驱动决策的关键。淘宝作为国内最大的电商平台之一&#xff0c;其商品数据对电商从业者来说具有极高的价值。然而&#xff0c;从淘宝平台自动化抓取商品数据并非易事&#xff0c;涉及多重技术和法律挑战。本文将从技术层面分析实现淘宝商品数据…

初识网络编程

目录 前言相关名词解释应用层协议——HTTP传输层协议socketTCP帧头格式三次握手、四次挥手 UDPTCP的socket实现 参考博文 前言 刚碰到网络编程&#xff0c;会出现一堆协议、概念、这层次那技术的&#xff0c;头都大了&#xff0c;还是得总结总结…… 相关名词解释 ✨✨网络…

JRTPLIB中的RTPSession与OnSSRCCollision:深入解析SSRC冲突处理机制

JRTPLIB中的RTPSession与OnSSRCCollision:深入解析SSRC冲突处理机制 一、RTP与SSRC基础1.1 RTP简介1.2 SSRC的作用二、JRTPLIB与RTPSession2.1 JRTPLIB概述2.2 RTPSession类三、SSRC冲突与OnSSRCCollision3.1 SSRC冲突的原因3.2 OnSSRCCollision回调函数3.3 OnSSRCCollision的…

【数据集】【YOLO】【目标检测】口罩佩戴识别数据集 1971 张,YOLO佩戴口罩检测算法实战训练教程!

数据集介绍 【数据集】口罩佩戴检测数据集 1971 张&#xff0c;目标检测&#xff0c;包含YOLO/VOC格式标注。 数据集中包含1种分类&#xff1a;{0: face_mask}&#xff0c;佩戴口罩。 数据集来自国内外图片网站和视频截图。 检测场景为城市街道、医院、商场、机场、车站、办…