ELK 日志解决方案

在这里插入图片描述

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 创建索引模式

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【FPGA图像处理实战】- VGA接口与时序详解

VGA接口是一个很有历史的接口&#xff0c;全称为Video Graphics Array&#xff08;VGA&#xff09;视频图形阵列&#xff0c;是IBM公司在1987年随着PS/2一起推出的使用模拟信号的一种视频传输标准。 时至今日&#xff0c;这个接口依然还在大量使用&#xff0c;因为这个接口具有…

【PTA-C语言】编程练习4 - 数组Ⅰ

如果代码存在问题&#xff0c;麻烦大家指正 ~ ~有帮助麻烦点个赞 ~ ~ 编程练习4 - 数组Ⅰ&#xff08;1~7&#xff09; 7-1 评委打分&#xff08;分数 10&#xff09;7-2 组合数的和&#xff08;分数 10&#xff09;7-3 找不同&#xff08;分数 15&#xff09;7-4 利用二分查找…

Linux shell编程学习笔记33:type 命令

目录 0 引言1 type 命令的功能和格式 1.1 type命令的功能1.2 type 命令的格式2 type命令用法实例 2.1用type命令查看shell内置命令&#xff08;以echo命令为例&#xff09;2.2 用type命令查看别名&#xff08;以ls命令为例&#xff09;2.3 用type命令同时查看shell内置命令和别…

Kubernetes实战(八)-防止k8s namespace被误删除

1 背景 运维新同学在预发环境操作删除pod的时候&#xff0c;不知道什么原因把kubectl delete pod命令敲成了kubectl delete ns pre把预发环境删了&#xff0c;几十个模块&#xff0c;将近一个小时才恢复。幸亏是测试环境啊&#xff0c;如果是生产可以可以跑路了。 2 解决方案…

Redis核心知识点总结

1.Redis介绍 Redis 是 NoSQL&#xff0c;但是可处理 1 秒 10w 的并发&#xff08;数据都在内存中&#xff09; 使用 java 对 redis 进行操作类似 jdbc 接口标准对 mysql&#xff0c;有各类实现他的实现类&#xff0c;我们常用的是 druid 其中对 redis&#xff0c;我们通常用 J…

深信服技术认证“SCSA-S”划重点:XSS漏洞

为帮助大家更加系统化地学习网络安全知识&#xff0c;以及更高效地通过深信服安全服务认证工程师考核&#xff0c;深信服特别推出“SCSA-S认证备考秘笈”共十期内容&#xff0c;“考试重点”内容框架&#xff0c;帮助大家快速get重点知识~ 划重点来啦 *点击图片放大展示 深信服…

彻底解决公网ip无法访问服务器的问题

用服务器的公网ip访问突然提示页面无法访问了&#xff0c;之前还是ok的&#xff1a; 解决方案&#xff1a; 步骤1. 检查云服务器的安全组规则是否有添加80端口映射&#xff0c;如果没有需要手动添加&#xff0c;否则不能使用公网访问&#xff0c;检查了一下是有的&#xff1…

STM32 定时器总结

缩写 ARR: Auto-Reload Register&#xff08;保存定时器的计数范围&#xff09; PSC: Prescaler register&#xff08;预分频器寄存器&#xff0c;根据设置的分频因子N&#xff0c;计数N个定时器时钟脉冲后&#xff0c;产生一个CNT计数&#xff0c;以此实现分频功能&#xff0…

Python中函数添加超时时间,Python中signal使用

from time import time, sleepimport signal# 模拟要删除5条数据,中间有超时的i 5# 超时后执行的方法def timeout_handler(signal, frame):# 引发异常raise TimeoutError("删除第" str(i) "条,超时!")# 或者执行其他操作,不往外抛异常(超时的函数不会被…

nodejs+vue+微信小程序+python+PHP的Sd球鞋销售平台的设计与实现-计算机毕业设计推荐

此网站系统的开发方式和信息管理方式&#xff0c;借鉴前人设计的信息和研发。以网站商品信息为主&#xff0c;购物商品为核心功能来进行设计和研发&#xff0c;把网站信息和技术整合&#xff0c;开发出一套Sd球鞋销售平台。用目前现有的新技术进行系统开发&#xff0c;   目…

外包干了3个月,技术倒退2年。。。

先说情况&#xff0c;大专毕业&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近6年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&#xf…

淘宝用户体验VOC标签体系

本专题共10篇内容&#xff0c;包含淘宝APP基础链路过去一年在用户体验数据科学领域&#xff08;包括商详、物流、性能、消息、客服、旅程等&#xff09;一些探索和实践经验。 在商详页基于用户动线和VOC挖掘用户决策因子带来浏览体验提升&#xff1b;在物流侧洞察用户求助时间与…

UI自动化Selenium 数据驱动读取Excel

selenium 自动化&#xff0c;希望通过Excel进行数据驱动&#xff1b; 即代码自动读取并循环所有数据&#xff1b; 如下为Excel读取封装的函数 # Excel数据读取 def ExcelRead(filename, sheetname):# current_path os.getcwd()current_path "D:\WORK\自动化\pythonsel…

反序列化 [网鼎杯 2020 朱雀组]phpweb 1

打开题目 我们发现这个页面一直在不断的刷新 我们bp抓包一下看看 我们发现index.php用post方式传了两个参数上去&#xff0c;func和p 我们需要猜测func和p两个参数之间的关系&#xff0c;可以用php函数MD5测一下看看 我们在响应处得到了一串密文&#xff0c;md5解密一下看看 发…

深入理解Sentinel系列-1.初识Sentinel

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱吃芝士的土豆倪&#xff0c;24届校招生Java选手&#xff0c;很高兴认识大家&#x1f4d5;系列专栏&#xff1a;Spring源码、JUC源码、Kafka原理、分布式技术原理&#x1f525;如果感觉博主的文章还不错的话&#xff…

2.postman环境变量及接口关联

一、环境变量以及全局变量 操作流程 1.点击environment 2.点击environment右侧号&#xff0c;新增环境变量 3.在变量中输入变量名以及变量值 4.回到collection页面&#xff0c;修改变量环境 5.在collection中通过{{变量名}}调用变量 变量定义 环境变量&#xff1a;环境变量…

51单片机的硬件组成的功能以及40个引脚的功能

AT89S51单片机的硬件组成 本文主要涉及AT89S51单片机的硬件结构&#xff0c;与89C51还是存在一定的区别文中有说明&#xff0c;介绍了单片机的各硬件的基本功能&#xff0c;并详细介绍了单片机40个引脚的功能 文章目录 AT89S51单片机的硬件组成一、 AT89S51单片机的硬件组成1.1…

javaee实验:文件上传及拦截器的使用

目录 文件上传ModelAttribute注解实验目的实验内容实验过程项目结构编写代码结果展示 文件上传 Spring MVC 提供 MultipartFile 接口作为参数来处理文件上传。 MultipartFile 提供以下方法来获取上传的文件信息&#xff1a;  getOriginalFilename 获取上传的文件名字&#x…

数据结构之交换排序

目录 交换排序 冒泡排序 冒泡排序的时间复杂度 快速排序 快速排序单趟排序的时间复杂度 快速排序的时间复杂度 交换排序 在日常生活中交换排序的使用场景是很多的&#xff0c;比如在学校做早操&#xff0c;老师通常会让学生按大小个排队&#xff0c;如果此时来了一个新学…

【电路笔记】-交流电路中的电阻器

交流电路中的电阻器 文章目录 交流电路中的电阻器1、概述2、交流电路中的电阻器示例 13、交流电路中的电阻器示例2 电阻器也可用于交流电源&#xff0c;其中消耗的电压、电流和功率以有效值给出。 1、概述 在之前的文章中&#xff0c;我们研究了电阻器及其连接&#xff0c;并使…