ELK的日志解决方案

ELK的日志解决方案

一、ELK

  1. 介绍

    ELK是一个流行的日志解决方案,它由三个开源工具组成:Elasticsearch、Logstash和Kibana。下面是这些工具的简单介绍以及它们在日志解决方案中的作用:

    • Elasticsearch:Elasticsearch是一个分布式的搜索和分析引擎,它可以用于存储、搜索和分析大规模的日志数据。它提供了强大的全文搜索和实时分析能力,使得用户能够快速地查询和分析日志数据。
    • Logstash:Logstash是一个用于数据收集、转换和传输的工具。它可以从多种来源收集日志数据,对数据进行过滤、转换和丰富,然后将数据发送到Elasticsearch等目标存储中。Logstash支持多种输入和输出,包括文件、数据库、消息队列等。
    • Kibana:Kibana是一个用于可视化和分析数据的工具,它与Elasticsearch集成,可以帮助用户创建丰富的图表、仪表板和报表,从而更直观地理解和分析日志数据。
  2. 工作流程

    • 数据收集:使用Logstash从各种来源收集日志数据,可以是服务器日志、应用程序日志、网络设备日志等。
    • 数据处理:Logstash对收集到的数据进行过滤、转换和丰富,以便更好地适应后续的分析和查询需求。
    • 数据存储:将处理后的数据存储到Elasticsearch中,Elasticsearch提供了强大的搜索和分析能力,可以帮助用户快速地查询和分析日志数据。
    • 数据可视化:使用Kibana创建图表、仪表板和报表,帮助用户更直观地理解和分析日志数据,从而发现潜在的问题和趋势。

    image-20231206191313093

接下来,我们来搭建一个ELK。

二、Elasticsearch

  1. 查找镜像后拉取镜像

    [root@woniu software]# pwd
    /usr/local/software
    [root@woniu software]# docker search elasticsearch:7.17.7
    [root@woniu software]# docker pull elasticsearch:7.17.7
    
  2. 创建elk目录,elk目录下创建elasticsearch,logstash,plugins目录

    [root@woniu elk]# ls
    elasticsearch  logstash  plugins
    
  3. 进elasticsearch目录创建conf,data,plugins目录

    [root@woniu elasticsearch]# ls
    conf  data  plugins
    
  4. 在conf目录下新建elasticsearch.yml编辑以下内容

    http:
      host: 0.0.0.0
      cors:
        enabled: true
        allow-origin: "*"
    xpack:
      security:
    enabled: falsedocker search elasticsearch:7.17.7
    
  5. 查看vm.max_map_count数量,如果是65530则需要改大一点,防止ES启不起来

    [root@woniu elasticsearch]# sysctl -a|grep vm.max_map_count
    ...
    vm.max_map_count = 65530
    [root@woniu elasticsearch]# sysctl -w vm.max_map_count=262144
    
  6. 给elasticsearch目录下文件所有权限,不给ES会报错

    [root@woniu elk]# chmod 777 elasticsearch/**
    
  7. 创建运行容器

    docker run  -itd \
    --name es \
    --privileged \
    --network wn_docker_net \
    --ip 172.18.12.70 \
    -p 9200:9200 \
    -p 9300:9300 \
    -e "discovery.type=single-node" \
    -e ES_JAVA_OPTS="-Xms2g -Xmx2g" \
    -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
    
  8. 浏览器访问192.168.102.100:9200(你自己的虚拟机ip:9200),出来如下结果就表示成功

    image-20231206194053030

三、Kibana

  1. 查询、拉取镜像(为了保证和ES版本匹配,这里也用7.17.7)

    [root@woniu software]# pwd
    /usr/local/software
    [root@woniu software]# docker search kibana:7.17.7
    [root@woniu software]# docker pull kibana:7.17.7
    
  2. 创建、运行容器

    docker run -it \
    --name kibana \
    --privileged \
    --network wn_docker_net \
    --ip 172.18.12.71 \
    -e "ELASTICSEARCH_HOSTS=http://192.168.102.100:9200" \
    -p 5601:5601 \
    -d kibana:7.17.7
    
  3. 使用5601端口号访问,在右边选择Dev Tools可以进行查询

    image-20231206194627669

  4. 配置ES的分词器ik(https://github.com/medcl/elasticsearch-analysis-ik/releases?page=3)

    首先去那个网站下载ik.zip

    image-20231206195322721

    进容器在/usr/share/elasticsearch/plugins目录下面创建一个目录ik

    [root@woniu elasticsearch]# docker exec -it es bash
    root@868ee4081312:/usr/share/elasticsearch# cd plugins/
    root@868ee4081312:/usr/share/elasticsearch/plugins# mkdir ik
    root@868ee4081312:/usr/share/elasticsearch/plugins# ls
    ik
    

    退出容器,把下载好的zip拷贝进去

    [root@woniu elasticsearch]# docker cp elasticsearch-analysis-ik-7.17.7.zip es:/usr/share/elasticsearch/plugins/ik/
    

    进容器解压

    root@868ee4081312:/usr/share/elasticsearch/plugins/ik# unzip elasticsearch-analysis-ik-7.17.7.zip
    

    解压后删除原zip

    root@868ee4081312:/usr/share/elasticsearch/plugins/ik# rm -rf elasticsearch-analysis-ik-7.17.7.zip
    

    重启容器

    [root@woniu elasticsearch]# docker restart es
    

    然后中文就可以正确分词了

    image-20231206200052761

四、Logstash

  1. 查找并拉取镜像

    [root@woniu software]# pwd
    /usr/local/software
    [root@woniu software]# docker search logstash:7.17.7
    [root@woniu software]# docker pull logstash:7.17.7
    
  2. 创建运行容器(这次用文件拷贝的方式,挂载容易报错)

    docker run -it \
    --name logstash \
    --privileged \
    -p 5044:5044 \
    -p 9600:9600 \
    --network wn_docker_net \
    --ip 172.18.12.72 \
    -v /etc/localtime:/etc/localtime \
    -d logstash:7.17.7
    
  3. 把容器里的3个配置文件拷出来修改

    [root@woniu logstash]# docker cp logstash:/usr/share/logstash/config/logstash.yml logstash.yml
    [root@woniu logstash]# docker cp logstash:/usr/share/logstash/config/pipelines.yml pipelines.yml
    [root@woniu logstash]# docker cp logstash:/usr/share/logstash/pipeline/logstash.conf logstash.conf
    [root@woniu logstash]# ls
    logstash.conf  logstash.yml  pipelines.yml
    
    [root@woniu logstash]# vim 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.102.100:9200" ]
    
    [root@woniu logstash]# vim pipelines.yml
    # This file is where you define your pipelines. You can define multiple.
    # # For more information on multiple pipelines, see the documentation:
    # #   https://www.elastic.co/guide/en/logstash/current/multiple-pipelines.html
    #
    - pipeline.id: main
      path.config: "/usr/share/logstash/pipeline/logstash.conf"
    
    [root@woniu logstash]# vim logstash.conf
    input {
      tcp {
        mode => "server"
        host => "0.0.0.0"
        port => 5044
        codec => json_lines
      }
    }
    filter{
    }
    output {
        elasticsearch {
          hosts => ["192.168.102.100:9200"]       #elasticsearch的ip地址
          index => "ssc-logs"                          #索引名称
        }
        stdout { codec => rubydebug }
    }
    
  4. 拷贝回容器里

    [root@woniu logstash]# docker cp logstash.yml logstash:/usr/share/logstash/config
    [root@woniu logstash]# docker cp pipelines.yml logstash:/usr/share/logstash/config/
    [root@woniu logstash]# docker cp logstash.conf logstash:/usr/share/logstash/pipeline
    
  5. 重启容器

    [root@woniu logstash]# docker restart logstash
    
  6. 访问192.168.102.100:9600(你自己的虚拟机ip:9600),出现如下页面表示成功

    image-20231206202542864

五、Spring Boot整合ELK

  1. 引入依赖(ES和Logback)

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    </dependency>
    
    
    <dependency>
        <groupId>net.logstash.logback</groupId>
        <artifactId>logstash-logback-encoder</artifactId>
        <version>7.3</version>
    </dependency>
    
  2. ES实体类(主要是看注解)

    image-20231206203258713

  3. application.yml配置

    spring:
      data:
        elasticsearch:
          repositories:
            enabled: true
      elasticsearch:
        uris: http://192.168.102.100:9200
    
  4. dao接口(里面可以声明方法,像jpa一样)

    @Repository
    public interface IBookDocDao extends ElasticsearchRepository<BookDoc, Long> {
        List<BookDoc> findBookDocsByAuthorOrTitleOrIntroduction(String author, String title, String introduction);
    }
    
  5. service方法(IBookService,就是普通的mybatis-plus的service接口,注入了实现类)

    @Service
    public class BookDocServiceImpl implements IBookDocService {
        @Autowired
        private IBookDocDao bookDocDao;
        @Autowired
        private IBookService ibs;
    
        @Override
        public void loadFromDb() {
            List<Book> books = ibs.findAll();
            books.forEach(book->{
                BookDoc bookDoc = new BookDoc();
                bookDoc.setAuthor(book.getAuthor());
                bookDoc.setId(book.getId());
                bookDoc.setTitle(book.getTitle());
                bookDoc.setIntroduction(book.getIntroduction());
                bookDoc.setIsbn(book.getIsbn());
                bookDoc.setCreateTime(book.getCreateTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDate());
                bookDocDao.save(bookDoc);
            });
            System.out.println("数据导入ES成功....");
    
        }
    
        @Override
        public List<BookDoc> findAll() {
            Iterable<BookDoc> all = bookDocDao.findAll();
            List<BookDoc> list = StreamSupport.stream(all.spliterator(), false)
                    .collect(Collectors.toList());
            return list;
        }
    
        @Override
        public List<BookDoc> findByStr(String bookStr) {
            return bookDocDao.findBookDocsByAuthorOrTitleOrIntroduction(bookStr, bookStr, bookStr);
        }
    }
    
  6. 然后再定义Controller方法,刚开始使用loadFromDb()把图书数据放到ES里,然后就能用findAll()或者findByStr(bookStr)去从ES里查询数据了,bookStr可以匹配作者、标题、简介。

  7. 接下来讲一下Logstash的配置,在resources目录下新建logback-spring.xml,里面内容按下面方式配置,然后在yml文件开启日志就行了

    <?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.102.100: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>
    

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

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

相关文章

设置webstorm和idea符合Alibaba规范

只格式化自己更改的代码 ctrlShiftAltL 插件建议 Alibaba Java Coding Guidelines&#xff08;新版本的idea不支持&#xff0c;有其他同名的非官方版可代替&#xff09;&#xff0c;使用方法在此不赘述 1、设置webstorm 包含 设置两个空格缩进&#xff0c;去掉行尾分号&#…

IDEA加载阿里Java规范插件

IDEA加载阿里巴巴Java开发手册插件&#xff0c;在写代码的时候会自动扫描代码规范。 1、打开Settings 2、打开Plugins 3、搜索Alibaba Java Code Guidelines&#xff08;XenoAmess TPM&#xff09;插件&#xff0c;点击Install进行安装&#xff0c;然后重启IDE生效。 4、鼠标右…

基于OpenCV+CNN+IOT+微信小程序智能果实采摘指导系统——深度学习算法应用(含pytho、JS工程源码)+数据集+模型(二)

目录 前言总体设计系统整体结构图系统流程图 运行环境Python环境TensorFlow 环境Jupyter Notebook环境Pycharm 环境微信开发者工具OneNET云平台 相关其它博客工程源代码下载其它资料下载 前言 本项目基于Keras框架&#xff0c;引入CNN进行模型训练&#xff0c;采用Dropout梯度…

uniapp 打包H5页面时候清除手机缓存问题

最近遇到一个情况&#xff1a; uniapp 写了一个H5 页面&#xff0c;挂在一个小程序上面&#xff0c;但是每次更新代码&#xff0c;新增新功能&#xff0c;总是有的用户看到的还是上一个版本的样式&#xff0c;前端打包的时候&#xff0c;已经在Uniapp项目的根目录下面新建了一个…

Hive数据库系列--Hive数据类型/Hive字段类型/Hive类型转换

文章目录 一、Hive数据类型1.1、数值类型1.2、字符类型1.3、日期时间类型1.4、其他类型1.5、集合数据类型1.5.1、Struct举例1.5.2、Array举例1.5.3、Map举例 二、数据类型转换2.1、隐式转换2.2、显示转换 本章主要讲解hive的数据类、字段类型。官网文档地址见https://cwiki.apa…

Java代码审计之SpEL表达式注入漏洞分析

文章目录 前言CVE-2022-22963漏洞简述环境搭建反弹shell CVE漏洞调试分析本地搭建调试分析补丁分析 总结 前言 表达式注入是 Java 安全中一类常见的能够注入命令并形成 RCE 的漏洞&#xff0c;而常见的表达式注入方式有 EL 表达式注入、SpEL 表达式注入和 OGNL 表达式注入等。…

【Docker】从零开始:17.Dockerfile基本概念

【Docker】从零开始&#xff1a;17.Dockerfile 概述1.什么是Dockerfile2.Dockerfile构建三大步骤3.Docker执行Dockerfile流程 一张图理解Dockerfile常用保留指令~FROM~~MAINTAINER~~RUN~两种格式 ~EXPOSE~~WORKDIR~~USER~~ENV~~ADD~~COPY~两种格式 ~VOLUME~~CMD~两种格式注意 ~…

在Spring Cloud中使用组件Ribbon和Feign,并分别创建子模块注册到Eureka中去

ok&#xff0c;在上篇文章中我们讲了在Spring cloud中使用Zuul网关&#xff0c;这篇文章我们将Spring Cloud的五大核心组件的Ribbon和Feign分别创建一个微服务模块。 题外话&#xff0c;本篇博客就是配置子模块&#xff0c;或者说是微服务&#xff0c;然后将微服务正式启动之前…

竞赛选题 题目:基于深度学习的中文对话问答机器人

文章目录 0 简介1 项目架构2 项目的主要过程2.1 数据清洗、预处理2.2 分桶2.3 训练 3 项目的整体结构4 重要的API4.1 LSTM cells部分&#xff1a;4.2 损失函数&#xff1a;4.3 搭建seq2seq框架&#xff1a;4.4 测试部分&#xff1a;4.5 评价NLP测试效果&#xff1a;4.6 梯度截断…

多人聊天Java

服务端 import java.io.*; import java.net.*; import java.util.ArrayList; public class Server{public static ServerSocket server_socket;public static ArrayList<Socket> socketListnew ArrayList<Socket>(); public static void main(String []args){try{…

区块链技术在数字营销中有哪些应用?

用于所有加密货币交易的数字账本称为区块链。随着更多图像被添加到“就绪”块中&#xff0c;它将继续扩展。每个区块都包含交易信息、时间戳和前一个区块的加密签名。为了辨别真正的比特币交易所和试图重印已经在其他地方发布的硬币&#xff0c;比特币节点使用区块链。 随着在…

点击el-tree小三角后去除点击后的高亮背景样式,el-tree样式修改

<div class"videoTree" v-loading"loadingTree" element-loading-text"加载中..." element-loading-spinner"el-icon-loading" element-loading-background"rgba(0, 0, 0, 0.8)" > <el-tree :default-expand-all&q…

多元线性回归(一)

基本概念 线性回归时机器学习中监督学习下的一种算法。回归问题主要关注是因变量&#xff08;需要预测的值&#xff0c;可以是一个也可以是多个&#xff09;和一个或多个值型的自变量&#xff08;预测变量&#xff09;之间的关系。 需要预测的值&#xff1a;即目标变量&#x…

智能优化算法应用:基于白冠鸡算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于白冠鸡算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于白冠鸡算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.白冠鸡算法4.实验参数设定5.算法结果6.参考文献7.…

dockerfile介绍与使用

文档&#xff1a;https://docs.docker.com/engine/reference/builder/ dockerfile介绍 dockerfile是什么 Dockerfile是一个创建镜像所有命令的文本文件, 包含了一条条指令和说明, 每条指令构建一层, 通过 docker build命令,根据Dockerfile的内容构建镜像,因此每一条指令的内…

【从0配置JAVA项目相关环境1】jdk + VSCode运行java + mysql + Navicat + 数据库本地化 + 启动java项目

从0配置JAVA项目相关环境 写在最前面一、安装Java的jdk环境1. 下载jdk2. 配置jdk3. 配置环境变量 二、在vscode中配置java运行环境1. 下载VSCode2. 下载并运行「Java Extension Pack」 三、安装mysql1.官网下载MySQL2.开始安装如果没有跳过安装成功 3.配置MySQL Server4.环境变…

史上最全,资深老鸟整理-性能测试面试题汇总

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、什么是负载测试…

git 分支的创建与删除

一 创建本地分支 git checkout -b codetwo //创建本地分支 codetwo git branch newcode //创建本地分支newcode创建的分支如下图&#xff1a; 用checkout的方式创建&#xff0c;只是创建的同时还切换到了这个本地分支 二 创建远程分支 git branch newcode //创…

【开源】基于JAVA语言的木马文件检测系统

项目编号&#xff1a; S 041 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S041&#xff0c;文末获取源码。} 项目编号&#xff1a;S041&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 木马分类模块2.3 木…

一次整活,暴涨1100万播放!B站内容风向吹到哪了?

高能整活&#xff0c;千万曝光 “我准备打造一个钢铁的地下安全屋。” B站UP主手工耿近期整了一个大活&#xff0c;脑洞大到让B站用户不停地惊掉下巴。 UP主手工耿在B站拥有776.7万粉丝&#xff0c;一直以来以制造一些“看起来没用”的电焊工艺产品为内容看点&#xff0c;灵…