精华内容
下载资源
问答
  • 项目实战|史上最简单的springboot 整合elk教程,实现日志收集

    项目源码已上传至 https://gitee.com/yangleliu/learning.git,免费索取
    微信搜一搜【AI码师】关注帅气的我,回复【干货领取】,领取2021最新面试资料一份

    【前言】

    开发任务后,提交代码的那一刻,心情是自由自在……速度是八十迈……
    在这里插入图片描述

    以为接下来是游戏、逛GAI或暖烘烘的被窝。

    然而,梦想何其丰满,现实何其骨干。

    总有测试小姐姐教你紧急刹车,回头做(改)人(bug):AI大师,你这不行啊!(吃瓜群众排排坐,笑歪了嘴)

    我低头看了看自己的八块腹肌:行不行可不是你说了算!

    小姐姐也不是吃素的,撸起袖子,打开她的联想十代:你行你连连报错,毒奶队友!

    我:(⊙o⊙)…原来你说的是这个不行,我还以为……

    小姐姐一脸疑惑:以为什么?真以为自己是大神了!

    我清咳掉自己的尴尬,绝不认输:我认为是你传错了参数。毕竟本大师在本地调试时可没有任何问题。

    小姐姐久经沙场,从无败绩:不!可!能!是你是你就是你!我从来不会错。

    那一刻,我仿佛看到生理期的女朋友在面前闪现,内心是崩溃的。
    在这里插入图片描述

    我们俩就这样争执了很久,最后自然不出意料,缴械投降的还是我。

    毕竟——

    中华民族的传统美(糟)德(粕)是:好男不跟女斗!

    于是我只能去服务器上看看日志,但是日志内容累累如高山,多多如牛毛,足足3.5个g,无奈的我只好使用一堆linux骚命令,将文件切割成一个个小文件,好在最后终于找到了那次请求,排查后找到了原因。
    在这里插入图片描述

    通过这件事,我痛定思痛:如果有一个平台能实时收集我们的日志,并能以可视化的界面呈现出来,那该多好啊!这样我们就再也不用在那堆厚重的日志文件里面找数据了。

    【秘籍展示】

    其实,这种神奇的平台早就有了,那就是ELK,它是三大神兽Elasticsearch(搜索引擎), Logstash(日志收集), Kibana(可视化的web界面)的组合:
    我们来看下架构图:

    在这里插入图片描述

    对照架构图,我们来看下这三大神兽的工作过程

    1. 用户发送请求到我们的服务端
    2. 服务端将需要落日志的数据通过网络请求传送到logstash
    3. logstash对数据进行过滤清洗后,再传给Elasticsearch
    4. Elasticsearch 负责对数据创建索引,进行存储
    5. 用户通过访问kibana的web页面,能够实时查看日志

    好吧,秘籍都告诉你了,现在需要带领你们去实战了

    【必备心法】

    在打仗之前,我们需要士兵们必须具备以下技能,不然上了战场后,只会被虐的体无完肤

    • 了解elk三大组件
    • 有实操过docker
    • 本地有docker环境
    • IDEA工具
    • 配置相对高一点的武器(电脑),不然会崩溃的

    【准备粮草】 准备一个Springboot项目

    首先创建一个springboot项目,项目结构如下

    在这里插入图片描述

    引入项目必备依赖

      <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.35</version>
            </dependency>
            <dependency>
                <groupId>cn.hutool</groupId>
                <artifactId>hutool-all</artifactId>
                <version>5.4.0</version>
            </dependency>
    

    创建一些基础组件

    在这里插入图片描述

    创建切面,实现低耦合记录日志

    核心代码

        // 使用环绕通知
      @Around("controllerLog()")
      public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {
        long startTime = System.currentTimeMillis();
        // 获取当前请求对象
        ServletRequestAttributes attributes =
            (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        // 记录请求信息
        ReqRspLog webLog = new ReqRspLog();
        Object result = joinPoint.proceed();
        Signature signature = joinPoint.getSignature();
        MethodSignature methodSignature = (MethodSignature) signature;
        Method method = methodSignature.getMethod();
        // 通过反射,获取入参和出参,封装成json,落日志
        long endTime = System.currentTimeMillis();
        String urlStr = request.getRequestURL().toString();
        webLog.setBasePath(StrUtil.removeSuffix(urlStr, URLUtil.url(urlStr).getPath()));
        webLog.setIp(request.getRemoteUser());
        webLog.setMethod(request.getMethod());
        webLog.setParameter(getParameter(method, joinPoint.getArgs()));
        webLog.setResult(result);
        webLog.setSpendTime((int) (endTime - startTime));
        webLog.setStartTime(startTime);
        webLog.setUri(request.getRequestURI());
        webLog.setUrl(request.getRequestURL().toString());
        logger.info("{}", JSONUtil.parse(webLog));
        return result;
      }
    

    创建测试接口

    @RestController
    @RequestMapping("/api")
    public class ApiController {
        @GetMapping
        public R<String> addLog(@RequestParam(value = "param1",required = false) String param1){
            return R.success("你好,这段话将被日志记录");
        }
    }
    

    我们现在请求一下接口,会发现在控制台打印出 这样一段日志

    {"method":"GET","uri":"/api","url":"http://localhost:8080/api","result":{"code":200,"data":"你好,这段话将被日志记录","message":"操作成功"},"basePath":"http://localhost:8080","parameter":{"param1":"测试ELK"},"startTime":1611529379353,"spendTime":9}
    

    使用切面,实现日志记录并打印到控制台上已经完成了,现在我们按照架构图,需要通过logstash把日志发送到es里面,接下来整合logstash实现传送日志的功能

    【招兵买马】 整合Logstash

    添加logstash依赖

     <!--集成logstash-->
            <dependency>
                <groupId>net.logstash.logback</groupId>
                <artifactId>logstash-logback-encoder</artifactId>
                <version>5.3</version>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
    

    编辑配置文件logback-spring.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE configuration>
    <configuration>
        <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
        <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>
        <!--应用名称-->
        <property name="APP_NAME" value="mall-admin"/>
        <!--日志文件保存路径-->
        <property name="LOG_FILE_PATH" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/logs}"/>
        <contextName>${APP_NAME}</contextName>
        <!--每天记录日志到文件appender-->
        <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${LOG_FILE_PATH}/${APP_NAME}-%d{yyyy-MM-dd}.log</fileNamePattern>
                <maxHistory>30</maxHistory>
            </rollingPolicy>
            <encoder>
                <pattern>${FILE_LOG_PATTERN}</pattern>
            </encoder>
        </appender>
        <!--输出到logstash的appender-->
        <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
            <!--可以访问的logstash日志收集端口-->
            <destination>127.0.0.1:4560</destination>
            <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
        </appender>
        <root level="info">
            <appender-ref ref="CONSOLE"/>
            <appender-ref ref="FILE"/>
            <appender-ref ref="LOGSTASH"/>
        </root>
    </configuration>
    

    编辑完之后,项目结构是这样的:
    在这里插入图片描述

    虽然在项目中已经集成了logstash功能,但是logstash还不知道把日志往哪里发,因为我们还没有城池。

    既然没有,那就建造吧!

    【搭建城池】 搭建ELK环境

    ELK这里我使用dokcer-compose搭建,一个字:快!
    首先我们约定一个根目录:/user/aimashi/docker
    按要求执行如下命令

    mkdir -p /Users/yangle/docker
    cd /Users/yangle/docker
    mkdir elk_stanrd
    cd elk_stanrd
    mkdir logstash
    cd logstash
    vim logstash.conf
    

    将以下文件内容复制到logstash.conf

    input {
      tcp {
        mode => "server"
        host => "0.0.0.0"
        port => 4560
        codec => json_lines
      }
    }
    
    output {
      elasticsearch {
        hosts => "es:9200"
        index => "logstash-service-%{+YYYY.MM.dd}"
      }
    }
    

    继续执行如下命令

    cd ../
    vim docker-compose.yml
    

    同样将以下内容复制到配置文件中

    version: '3'
    services:
      elasticsearch:
        image: elasticsearch:6.4.0
        container_name: elasticsearch
        environment:
          - "cluster.name=elasticsearch" #设置集群名称为elasticsearch
          - "discovery.type=single-node" #以单一节点模式启动
          - "ES_JAVA_OPTS=-Xms512m -Xmx512m" #设置使用jvm内存大小
        volumes:
          - /Users/yangle/docker/elk_stanrd/elasticsearch/plugins:/usr/share/elasticsearch/plugins #插件文件挂载
          - /Users/yangle/docker/elk_stanrd/elasticsearch/data:/usr/share/elasticsearch/data #数据文件挂载
        ports:
          - 9200:9200
          - 9300:9300
      kibana:
        image: kibana:6.4.0
        container_name: kibana
        links:
          - elasticsearch:es #可以用es这个域名访问elasticsearch服务
        depends_on:
          - elasticsearch #kibana在elasticsearch启动之后再启动
        environment:
          - "elasticsearch.hosts=http://es:9200" #设置访问elasticsearch的地址
        ports:
          - 5601:5601
      logstash:
        image: logstash:6.4.0
        container_name: logstash
        volumes:
          - ~/Users/yangle/docker/elk_stanrd/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf #挂载logstash的配置文件
        depends_on:
          - elasticsearch #kibana在elasticsearch启动之后再启动
        links:
          - elasticsearch:es #可以用es这个域名访问elasticsearch服务
        ports:
          - 4560:4560
    

    到目前为止,搭建elk环境的准备工作已经完成。
    现在需要启动elk,在/Users/yangle/docker/elk_stanrd目录下执行如下命令

    docker-compose up -d
    

    执行之后出现如下提示,则代表初创建成功
    在这里插入图片描述

    接下来,我们执行docker ps 来查看容器是否启动
    在这里插入图片描述

    如果和图中一样,代表容器正常启动,但是还需等待一分钟左右,才能访问可视化平台
    访问地址 http://localhost:5601/
    在这里插入图片描述

    如果出现这个页面,则代表elk已经搭建完成,现在,我们需要往里面塞点数据

    【发起进攻】 发送请求

    elk环境搭建完成之后,需要产生一点数据。该怎么做呢?
    只要调用 http://localhost:8080/api?param1=测试ELK 接口,多调用几次,就会产生一些测试数据。
    除此之外,还需要做一些配置才能让es去收集这些日志,用户才能看到:
    在这里插入图片描述

    在这里插入图片描述

    选择字段,创建索引
    在这里插入图片描述

    成功创建索引之后的界面
    在这里插入图片描述
    在这里插入图片描述

    选择logstash-servicez之后,界面是这样的:
    在这里插入图片描述

    可以看到系统中的日志已经被收集上来了,试下搜索“你好”
    在这里插入图片描述

    所有包含“你好”的日志都被筛选出来,当然这里还可以有很多检索条件,例如右上角有一个时间过滤检索,我就不一一演示了,大家有兴趣的话可以自己研究下。
    仓库:https://gitee.com/yangleliu/learning.git
    乐于助人、大公无私的五好青年——我已将以上所有代码全部上传到git仓库中,大家自行获取,记得start啊

    【战后总结】

    每个新技术的出现,都是为了解决某一类问题。

    就像elk的出现,就是为了减少日渐脱发的代码攻城狮们从海量日志中找数据的时间,节省出更多的精力放在业务处理上面。
    有了elk,我们只需要在输入框中,轻松输入关键字,敲下回车,需要的数据就会呈现在我们面前。

    测试小姐姐等待的时间短了,心情好了,矛盾自然也就少了。

    如此想来,如果能有一个平台,将女友的十万个情绪爆发的原因实时展现出来,那世界将是多么美好的明天!

    嘘~

    如果大家感兴趣的话,可以给我点个赞哦,我将会更有动力为大家带来更好的实战文章,后面将会对这个日志系统进行优化,引入更加成熟的架构filebeat+kafka+logstash+Elasticsearch+kibana,敬请期待!

    展开全文
  • elasticsearch 日志收集

    2021-02-21 12:01:29
    elasticsearch 日志收集1. 背景2. 环境3. 问题4. 参考解决方案 1. 背景 工作遇到的类似问题,参考官网进行收集归档,进行笔记形式的记录,便于后续查看。 2. 环境 OpenShift Container Platform (OCP) 4 3. 问题 ...

    1. 背景

    工作遇到的类似问题,参考官网进行收集归档,进行笔记形式的记录,便于后续查看。

    2. 环境

    OpenShift Container Platform (OCP) 4

    3. 问题

    由于 OCP 环境中应用的日志增大时会有大量日志产生 ,而 elasticsearch 日志收集,此时可能会有瓶颈出现,如:节点网络流量过大,磁盘IO被占满等。

    4. 参考解决方案

    解决那么产生大量日志(应用的日志)的 task,进行优化!

    展开全文
  • ELK+Kafka+Beats实现海量日志收集平台(三) 目录 六、将日志数据存储到Elasticsearch 七、Kibana展示  六、将日志数据存储到Elasticsearch  通过前面的步骤实现了日志数据的生产、收集和过滤。接下来就将...

              ELK+Kafka+Beats实现海量日志收集平台(三)

    目录

    六、将日志数据存储到Elasticsearch

    七、Kibana展示  


    六、将日志数据存储到Elasticsearch

      通过前面的步骤实现了日志数据的生产、收集和过滤。接下来就将收集之后的日志数据信息持久化到ElasticSearch上,然后在结合Kibana最终显示。

      启动ElasticSearch集群,之前提供的ES集群安装链接是7.6.2版本,所以要自己替换版本到6.6.0进行安装,6.6.0的安装配置和7.6.2版本的有些区别,配置信息如下:  

           

      搭建好之后的信息如下:

      

      Elasticsearch Head 插件显示如下:

      

    七、Kibana展示  

      启动Kibana,进如Kibana安装过后的目录下使用如下命令启动

         nohup ../bin/kibana & 

      紧接着来修改一下logstash的配置文件,在之前的基础上我们将收集到的日志数据输出控制台上了,现在我们要将日志数据存储到ES集群上。打开logstash配置文件添加如下:

      

      在配置文件中,配置了输出到Elasticsearch上。重启logstash,可以看到启动日志输出如下表明logstash连接ES成功。

      

      接着通过访问 /err 、/index两个方法来产生日志信息,随后利用Elasticsearch head插件查看ES集群信息如下:

      

      发现建立了两个索引,err-log-demo-* 、all-log-demo-* 这两个索引分别就是之前设置的错误日志索引和全量日志索引。

      再进入到Kibana界面查看,安装下列步骤进入界面

      

      随后,看到如下界面:

      

      创建index,比如all-log-demo* 如果有对应的索引就会进行匹配

      

      接着下一步:

      

      同理创建err-log-demo*,随后按照如下操作进行查看:

      

      查看的是err-log-demo*,这里其实就记录了我们访问demo.jar 的 /err 方法产生的那条错误日志。

      

      至此,咋们的ELK环境搭建及日志收集彻底实现了。

    展开全文
  • 分布式系统日志收集

    千次阅读 2019-04-04 23:30:11
    在分布式的环境中,日志收集通常采用 ELK 或其他的消息中间件,但是部署和使用都比较复杂。 本 Chat 将讲述另外一种非常简便的方式,而且不需要任何的学习成本就可以使用,那就是在 Logback 日志框架的基础上做一些...

    在分布式的环境中,日志收集通常采用 ELK 或其他的消息中间件,但是部署和使用都比较复杂。

    本 Chat 将讲述另外一种非常简便的方式,而且不需要任何的学习成本就可以使用,那就是在 Logback 日志框架的基础上做一些小小的改动,就可以收集不同应用的日志,并输出到不同的日志文件,而且性能也不错。

    通过本 Chat 大家将学习到:

    1. 全面了解以及使用 Java 的日志系统
    2. 分布式环境下的日志收集方式以及对应问题
    3. 了解 Logback 的源码及对其修改
    4. 共同探讨如何使用简单的技术做复杂的事

    阅读全文: http://gitbook.cn/gitchat/activity/5c9db58f27289a155f3fe306

    一场场看太麻烦?成为 GitChat 会员,畅享 1000+ 场 Chat !点击查看

    展开全文
  • 日志收集工具对比

    千次阅读 2020-05-11 10:10:15
    日志存储工具 两大日志存储工具elasticsearch和...loki:fluentd(安装了fluentd loki插件),promtail,针对纯docker容器可以使用docker log plugin loki进行docker容器日志收集。 docker插件docker log plugin loki
  • ELK分布式日志收集系统的搭建

    万次阅读 2020-03-30 14:44:48
    ELK分布式日志收集系统的搭建 filebeat+logstash+elasticsearch+kibana搭建一个分布式的日志收集系统
  • ELK+Kafka+Beats实现海量日志收集平台(二) 目录 三、环境搭建 四、部署demo工程项目 五、测试 三、环境搭建  通过上一小节应用场景和实现原理的介绍,接下来实现所需环境搭建及说明 架构图如下所示:   ...
  • Flume分布式日志收集收集系统
  • 日志系统之Flume日志收集

    千次阅读 2015-06-06 21:17:49
    本文介绍在日志系统中如何使用flume agent做日志收集以及为了满足我们的需求对flume agent进行了哪些扩展。
  • Flume日志收集与MapReduce模式

    热门讨论 2016-03-14 17:47:11
    Flume日志收集与MapReduce模式
  • ELK+Kafka+Beats实现海量日志收集平台(一) 一、应用场景  利用ELK+Kafka+Beats来实现一个统一日志平台,它是一款针对大规模分布式系统日志的统一采集、 存储、分析的APM 工具。在分布式系统中,有大量的服务...
  • Windows系统日志收集

    千次阅读 2019-08-29 15:24:46
    nxlog 是用 C 语言写的一个跨平台日志收集处理软件,其内部支持使用 Perl 正则和语法来进行数据结构化和逻辑判断操作。nxlog负责收集Windows系统日志,并将日志传给fluentd,fluentd将这些日志信息抛给elasticsearch...
  • Docker 容器日志收集

    千次阅读 2017-01-22 11:31:12
    docker 日志收集
  • 日志收集系统

    2018-08-28 17:10:55
    常用的日志收集系统有Syslog-ng,Scribe,Flume,当然还有ELK的LogStash.而目前互联网公司最长用的时Scribe和Flume,Scibe是Facebook开源的,但是现在已经不维护,所以不推荐使用   Scribe Scribe是Facebook...
  • ELK分布式日志收集系统

    千次阅读 2020-07-31 15:25:15
    ELK分布式日志收集系统 一、传统系统日志收集的问题 在传统项目中,如果在生产环境中,有多台不同的服务器集群,如果生产环境需要通过日志定位项目的Bug的话,需要在每台节点上使用传统的命令方式查询,这样效率非常...
  • 微服务日志收集方案

    2020-11-27 14:22:55
    微服务日志收集方案背景设计思路架构图搭建流程 背景 公司内部使用的是springcloud,随着业务逐步扩大,微服务数据也逐步增多,运行平台不仅涉及到腾讯云,超融合,微服务散落在不同的机器上,并且都是部署在docker...
  • Scribe日志收集工具

    2018-06-26 15:55:44
    Scribe日志收集工具 概述Scribe是facebook开源的日志收集系统,在facebook内部已经得到大量的应用。它能够从各种日志源上收集日志,存储到一个中央存储系统(可以是NFS,分布式文件系统等)上,以便于进行集中统计...
  • - (BOOL)application:(UIApplication *... //日志收集(日志会被拦截,开发的时候注掉) [self redirectNSlogToDocumentFolder]; 方法实现 #pragma mark - 日志收集 - (void)redirectNSlogToDocumentFolder { NSString
  • NIFI 日志收集埋点

    千次阅读 2019-03-03 23:08:01
    看很多朋友都有需求说怎么收集NIFI日志,这是之前自己的日志收集埋点; NIFI 的processor Service 等等日志都经过SimpleProcessLogger 类,直接贴代码,看注释应该很清晰; package org.apache.nifi.processor;...
  • 正是因为日志收集agent是整个日志平台的唯一数据来源,所以日志收集的地位非常重要。一旦日志收集agent出现问题,轻则影响后续链路的报警和查询,重则影响宿主服务器,反客为主,影响更为重要的应用系统。 所以,先...
  • 分布式日志收集原理

    千次阅读 2019-10-24 11:50:10
    一、传统系统日志收集的问题 在传统项目中,如果在生产环境中,有多台不同的服务器集群,如果生产环境需要通过日志定位项目的Bug的话,需要在每台节点上使用传统的命令方式查询,这样效率非常底下。 通常,日志...
  • 安卓错误日志收集

    2016-10-25 20:54:31
    Bugtags错误日志收集
  • SpringBoot使用Graylog日志收集

    千次阅读 2019-04-22 16:59:01
    本文介绍SpringBoot如何使用Graylog日志收集。 1.Graylog介绍 Graylog是一个生产级别的日志收集系统,集成Mongo和Elasticsearch进行日志收集。其中Mongo用于存储Graylog的元数据信息和配置信息,ElasticSearch用于...
  • Flume日志收集框架

    千次阅读 2019-01-18 23:10:32
    Flume:分布式 可扩展 高可用的海量日志收集框架 Flume的安装搭建 Flume架构 Flume实践
  • SkyWalking8.4集成日志收集相关问题

    千次阅读 多人点赞 2021-02-20 16:30:02
    SkyWalking8.4集成日志收集一. 本地搭建1.1 初始化 一. 本地搭建 1.1 初始化 首先你得支棱起来,参考我上一篇搭建,但是我上一篇基于8.3,这边需要下载8.4版本才能开启日志收集系统 搭建Skywalking博客
  • 日志收集系统 flume

    2019-05-29 22:58:36
    实时数据 高容错误 高可用 可发货 什么是flume? Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的...日志收集 不同数据源 转存不同存储中心 负载均衡,故障转移 flume 架构...
  • ELK-日志收集工具nxlog

    千次阅读 2019-04-24 13:54:17
    日志收集工具nxlog 文章目录日志收集工具nxlog前言安装语法宏变量通用模块指令格式Module 模块名FlowControlInputType:指定输入类型OutputType:指定输出类型Exec: 执行命令Schedule:定时器EveryFirstExecWhenRoute...
  • 这一节介绍的收集方法是通过log4j appender 实现的日志收集器。 public class LogClientAppender extends AppenderSkeleton { @Override protected void append(LoggingEvent loggingEvent) { LogLevel log...
  • k8s日志收集方案

    2020-05-23 20:07:19
    本文介绍通过elk + filebeat方式收集k8s日志,其中filebeat以logagent方式部署。elfk最新版本:7.6.2 k8s日志收集方案 ...
  • 方案一:Node上部署一个日志收集程序1、DaemonSet方式部署日志收集程序 --这个在每个节点上会有一个pod监听2、对本节点(node上的)/var/log和 /var/lib/docker/containers/两个目录下的日志进行采集 1)/var/log/...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,504
精华内容 8,601
关键字:

日志收集