ELK 日志解决方案

news2025/1/20 14:54:01

在这里插入图片描述

ELK 是目前最流行的集中式日志解决方案,提供了对日志收集、存储、展示等一站式的解决方案。

ELK 分别指 Elasticsearch、Logstash、Kibana。

  1. Elasticsearch:分布式数据搜索引擎,基于 Apache Lucene 实现,可集群,提供数据的集中式存储,分析,以及强大的数据搜索和聚合功能。
  2. Logstash:数据收集引擎,相较于Filebeat 比较重量级,但它集成了大量的插件,支持丰富的数据源收集,对收集的数据可以过滤,分析,格式化日志格式。
  3. Kibana:数据的可视化平台,通过该 web 平台可以实时查看 Elasticsearch 中的相关数据,并提供了丰富的图表统计功能。
  4. Filebeat:Filebeat 是一款轻量级,占用服务资源非常少的数据收集引擎,它是 ELK 家族的新成员,可以代替 Logstash 作为在应用服务器端的日志收集引擎,支持将收集到的数据输出到 Kafka,Redis 等队列。

一、Elasticsearch

1.1 安装配置

1.1.1 拉取镜像
[root@localhost software]# docker pull elasticsearch:7.17.7
1.1.2 配置文件

第一步:在 Linux 上创建三个数据挂载目录。
在这里插入图片描述
第二步:在 conf 目录下创建 elasticsearch.yml 文件,并修改权限为777。

[root@localhost elasticsearch]# cd conf/
[root@localhost conf]# touch elasticsearch.yml
[root@localhost conf]# chmod 777 elasticsearch.yml 
[root@localhost conf]# ll
总用量 0
-rwxrwxrwx. 1 root root 0 125 11:03 elasticsearch.yml

配置内容如下:
在这里插入图片描述

http:
  host: 0.0.0.0
  cors:
    enabled: true
    allow-origin: "*"
xpack:
  security:
    enabled: false
1.1.3 修改 Linux 的 vm.max_map_count

直接启动后会报下面的异常

max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]

表示系统虚拟内存默认最大映射数为65530,无法满足ES系统要求,需要调整为262144以上。

修改方法如下:
查看 sysctl -a|grep vm.max_map_count
修改 sysctl -w vm.max_map_count=262144

1.2 创建运行

docker run  -itd \
--name es \
--privileged \
--network docker_net \
--ip 172.18.12.80 \
-p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms4g -Xmx4g" \
-v /usr/local/software/elk/elasticsearch/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
-v /usr/local/software/elk/elasticsearch/data:/usr/share/elasticsearch/data \
-v /usr/local/software/elk/elasticsearch/plugins:/usr/share/elasticsearch/plugins \
elasticsearch:7.17.7

容器创建并运行成功后,我们在浏览器里面访问 虚拟机地址:9200,出现内容表示运行成功。
在这里插入图片描述

1.3 ES 的分词器

1.3.1 下载并上传分词器到 Linux 中

下载链接:https://github.com/medcl/elasticsearch-analysis-ik/releases
注意:需下载和 es 一致的版本,避免出错。

上传到 /usr/local/software/elk/plugins/目录下。

1.3.2 拷贝分词器插件到容器 ik 文件夹
[root@localhost plugins]# docker cp elasticsearch-analysis-ik-7.17.7.zip es:/usr/share/elasticsearch/plugins/ik
1.3.3 解压分词器

进入容器 ik 文件夹下面(没有ik文件夹就手动创建),解压插件。
解压:

unzip elasticsearch-analysis-ik-7.17.7.zip

解压完将压缩包删除,并记得重启容器。

二、Kibana

2.1 安装

安装 Kibana 前需保证 ES 已经运行成功。

2.1.1 拉取镜像
docker pull kibana:7.17.7

注意版本尽量保持一致。

2.1.2 创建并运行容器
docker run -it \
--name kibana \
--privileged \
--network docker_net \
--ip 172.18.12.81 \
-e "ELASTICSEARCH_HOSTS=http://192.168.200.135:9200" \
-p 5601:5601 \
-d kibana:7.17.7
2.1.3 测试

浏览器打开 http://虚拟机地址:5601/ 成功进入即表示运行成功。
在这里插入图片描述

2.2 简单使用

  1. 打开 Dev Tools
    在这里插入图片描述
  2. 执行查询,可看到出现右面的数据
    在这里插入图片描述

2.3 测试分词器

2.3.1 标准分词器

在这里插入图片描述
如上图所示,标准分词器对中文不太友好。

2.3.2 ES 分词器

在这里插入图片描述
如上图所示,es 分词器对中文分词好一点,但是还是不够灵活。所以我们可以自定义一下 es 的分词器词典。

2.3.3 自定义 es 分词器词典
  1. 进入 es 容器的 ik/config 目录
    在这里插入图片描述
  2. 查看配置文件
    在这里插入图片描述
    注意:ext_dict_my.dic 是我自定义的词典文件,默认没有。
  3. 编写自己的配置文件
    在这里插入图片描述
  4. 重启容器,并测试 。

三、Logstash

3.1 安装

3.1.1 拉取 logstash
[root@localhost ~]# docker pull logstash:7.17.7
3.1.2 创建容器
docker run -it \
--name logstash \
--privileged \
-p 5044:5044 \
-p 9600:9600 \
--network docker_net \
--ip 172.18.12.82 \
-v /etc/localtime:/etc/localtime \
-d logstash:7.17.7

3.2 容器配置

有三个配置文件,分别是
在这里插入图片描述
在这里插入图片描述
我们在宿主机创建一个 logstash 文件夹( /usr/local/software/elk/logstash),将三个配置文件复制到这个目录下,方便编辑。

logstash.yml

path.logs: /usr/share/logstash/logs
config.test_and_exit: false
config.reload.automatic: false
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://192.168.200.135:9200" ]

piplelines.xml

- pipeline.id: main
  path.config: "/usr/share/logstash/pipeline/logstash.conf"

logstash.conf

input {
  tcp {
    mode => "server"
    host => "0.0.0.0"
    port => 5044
    codec => json_lines
  }
}
filter{
}
output {
    elasticsearch {
      hosts => ["192.168.200.135:9200"]       #elasticsearch的ip地址 
      index => "elk"                          #索引名称
    }
    stdout { codec => rubydebug }
}

修改完成后,将配置文件拷贝到容器相应位置,并重启容器。

3.3 释放端口

 firewall-cmd --add-port=9600/tcp --permanent 
 firewall-cmd --add-port=5044/tcp --permanent
 firewall-cmd --reload

四、springboot 中使用 logstash

4.1 引入框架

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

4.2 创建 logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文档如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文档是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。
                 当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration scan="true" scanPeriod="10 seconds">
    <!--1. 输出到控制台-->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <!--此日志appender是为开发使用,只配置最低级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>DEBUG</level>
        </filter>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} -%5level ---[%15.15thread] %-40.40logger{39} : %msg%n</pattern>
            <!-- 设置字符集 -->
            <charset>UTF-8</charset>
        </encoder>
    </appender>
    <!-- 2. 输出到文件  -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--日志文档输出格式-->
        <append>true</append>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} -%5level ---[%15.15thread] %-40.40logger{39} : %msg%n</pattern>
            <charset>UTF-8</charset> <!-- 此处设置字符集 -->
        </encoder>
   </appender>
    <!--3. LOGSTASH config -->
    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>192.168.200.135:5044</destination>
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
            <!--自定义时间戳格式, 默认是yyyy-MM-dd'T'HH:mm:ss.SSS<-->
            <timestampPattern>yyyy-MM-dd HH:mm:ss</timestampPattern>
            <customFields>{"appname":"QueryApp"}</customFields>
        </encoder>
    </appender>
    <root level="DEBUG">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
        <appender-ref ref="LOGSTASH"/>
    </root>
</configuration>

注意这个地址,需配置 es 的地址。
在这里插入图片描述
文件存放位置
在这里插入图片描述

4.3 测试代码

@Slf4j
@RestController
@RequestMapping("/api/query")
public class QueryController {

    @Autowired
    private IBookDocService ibs;
    
    @GetMapping("/helloLog")
    public HttpResp helloLog(){
        List<BookDoc> all = ibs.findAll();
        log.debug("从es中查询到的数据:{}",all);
        log.debug("我是来测试logstash是否工作的");
        return HttpResp.success(all.subList(0,10));
    }
}

4.4 Kibana 中查看

4.4.1 创建一个索引
put elk

elk 名称是之前 logstash.conf 文件中配置的。

在这里插入图片描述

4.4.2 创建索引模式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
执行操作,如搜索。
在这里插入图片描述

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

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

相关文章

AWS基于x86 vs Graviton(ARM)的RDS MySQL性能对比

概述 这是一个系列。在前面&#xff0c;我们测试了阿里云经济版&#xff08;“ARM”&#xff09;与标准版的性能/价格对比&#xff1b;华为云x86规格与ARM&#xff08;鲲鹏增强&#xff09;版的性能/价格对比。现在&#xff0c;再来看看AWS的ARM版本的RDS情况 在2018年&#…

[论文阅读]DETR

DETR End-to-End Object Detection with Transformers 使用 Transformer 进行端到端物体检测 论文网址&#xff1a;DETR 论文代码&#xff1a;DETR 简读论文 这篇论文提出了一个新的端到端目标检测模型DETR(Detection Transformer)。主要的贡献和创新点包括: 将目标检测视为一…

Leetcode1038. 从二叉搜索树到更大和树

Every day a Leetcode 题目来源&#xff1a;1038. 从二叉搜索树到更大和树 解法1&#xff1a;中序遍历 观察示例 1&#xff0c;我们发现了规律&#xff1a; 二叉搜索树的中序遍历是一个单调递增的有序序列。 本题中要求我们将每个节点的值修改为原来的节点值加上所有大于它…

JAVA全栈开发 day18MySql03

一、复习 为什么要用数据库数据库好处数据库的发展史​ 层次模型​ 网状模型​ 关系模型&#xff08;二维表专门存储数据&#xff0c; 表与表的关联&#xff09;​ 表与表的关系&#xff1a; 1对1 &#xff0c;1对多&#xff0c;多对多​ 非关系模型关系模…

【PyTorch】权重衰减

文章目录 1. 理论介绍2. 实例解析2.1. 实例描述2.2. 代码实现 1. 理论介绍 通过对模型过拟合的思考&#xff0c;人们希望能通过某种工具调整模型复杂度&#xff0c;使其达到一个合适的平衡位置。权重衰减&#xff08;又称 L 2 L_2 L2​正则化&#xff09;通过为损失函数添加惩…

用23种设计模式打造一个cocos creator的游戏框架----(七)代理模式

1、模式标准 模式名称&#xff1a;代理模式 模式分类&#xff1a;结构型 模式意图&#xff1a;为其他对象提供一种代理以控制对这个对象的访问。 结构图&#xff1a; ​ 适用于&#xff1a; 远程代理&#xff1a;也称为大使&#xff0c;这是最常见的类型&#xff0c;在分…

中文BERT模型预训练参数总结以及转化为pytorch的方法

1.目前针对中文的bert预训练模型有三家&#xff1a; 谷歌发布的chinese_L-12_H-768_A-12 还有哈工大的chinese-bert-wwm / chinese-bert-wwm-ext 以及HuggingFace上的bert-base-chinese(由清华大学基于谷歌的BERT在中文数据集上训练开发的模型&#xff0c;上传在HuggingFace) …

ElasticSearch篇---第四篇

系列文章目录 文章目录 系列文章目录前言一、elasticsearch 是如何实现 master 选举的?二、elasticsearch 索引数据多了怎么办,如何调优,部署?三、说说你们公司 es 的集群架构,索引数据大小,分片有多少?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽…

李宏毅gpt个人记录

参考&#xff1a; 李宏毅机器学习--self-supervised&#xff1a;BERT、GPT、Auto-encoder-CSDN博客 用无标注资料的任务训练完模型以后&#xff0c;它本身没有什么用&#xff0c;GPT 1只能够把一句话补完&#xff0c;可以把 Self-Supervised Learning 的 Model做微微的调整&am…

【改进YOLOv8】融合感受野注意力卷积RFCBAMConv的杂草分割系统

1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 研究背景与意义 随着计算机视觉技术的不断发展&#xff0c;图像分割成为了一个重要的研究领域。图像分割可以将图像中的不同对象或区域进行有效的分离&#xff0c;对于许多应用领…

shell脚本生成随机双色球号码

[rootcentos7 ~]#cat lottery.sh #!/bin/bash #定义零长度数组 arr() length${#arr[]} while [ "${length}" -lt 6 ]do#取1到33的随机数s$[$RANDOM%331]#判断随机数是否在数组中&#xff0c;不在就赋值给数组if [[ ! "${arr[]}" ~ "${s}" ]]then…

什么是神经网络的超参数

1 引言 超参数在神经网络的设计和训练中起着至关重要的作用。它们是在开始训练之前设置的参数&#xff0c;与网络的结构、训练过程和优化算法有关。正确的超参数选择对于达到最优模型性能至关重要。 2 神经网络结构的超参数 层数&#xff08;Layers&#xff09;&#xff1a; 决…

pyecharts可视化作图1:基金净值-折线图

近期&#xff0c;接触到pyecharts模块&#xff0c;感觉其在可视化作图上比较强大&#xff0c;虽然无法和前端页面相比&#xff0c;但对于基础的数据展示&#xff0c;可以轻松处理。 本期主要以基金净值走势为案例&#xff0c;绘制相应的折线图&#xff0c;由于该模块较为简单&a…

多用户商城系统支付模块 用户支付的钱到哪里去了

多用户商城系统是类似京东天猫的电商平台&#xff0c;用户一般使用微信或者支付宝支付&#xff0c;在购买商品或服务支付后&#xff0c;商家发货或提供服务后&#xff0c;平台需要将钱结算给提供商品或者服务的商户。 这时会涉及平台和商户的结算问题&#xff0c;一般有两种解决…

【Qt开发流程】之对象模型3:对象树及其所有权

描述 Qt对象树是一种基于父子关系的对象管理机制&#xff0c;用于管理Qt应用程序中的所有对象。在Qt中&#xff0c;每个对象都可以拥有一个或多个子对象&#xff0c;并且每个子对象只能属于一个父对象。每个对象的所有权&#xff08;也称为生存期&#xff09;由其父对象控制。…

LangChain学习一:模型-实战

文章目录 上一节内容学习目标&#xff1a;模型&#xff08;models&#xff09;学习内容一&#xff1a;模型分类学习内容二&#xff1a;不同模型实战3.1 Chat-聊天模型3.1.1 声明3.1.2 Chat-聊天类型实战3.1.2.1 AIMessage&#xff08;AI 消息&#xff09;3.1.2.2 HumanMessage&…

力扣46. 全排列(java 回溯法)

Problem: 46. 全排列 文章目录 题目描述思路解题方法复杂度Code 题目描述 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 思路 1.该题目要求求出一个数组的全排列&#xff0c;我们可以利用回溯模拟出一个对数组中所有…

9_企业架构队列缓存中间件分布式Redis

企业架构队列缓存中间件分布式Redis 学习目标和内容 1、能够描述Redis作用及其业务适用场景 2、能够安装配置启动Redis 3、能够使用命令行客户端简单操作Redis 4、能够实现操作基本数据类型 5、能够理解描述Redis数据持久化机制 6、能够操作安装php的Redis扩展 7、能够操作实现…

maven生命周期回顾

目录 文章目录 **目录**两种最常用打包方法&#xff1a;生命周期&#xff1a; 两种最常用打包方法&#xff1a; 1.先 clean&#xff0c;然后 package2.先 clean&#xff0c;然后install 生命周期&#xff1a; 根据maven生命周期&#xff0c;当你执行mvn install时&#xff0c…

JAVA IO:NIO

1.阻塞 IO 模型 ​ 最传统的一种 IO 模型&#xff0c;即在读写数据过程中会发生阻塞现象。当用户线程发出 IO 请求之后&#xff0c;内核会去查看数据是否就绪&#xff0c;如果没有就绪就会等待数据就绪&#xff0c;而用户线程就会处于阻塞状态&#xff0c;用户线程交出 CPU。当…