ELK 实现日志检索

这篇具有很好参考价值的文章主要介绍了ELK 实现日志检索。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是 ELK?

ELK 并不是一个技术框架的名称,它其实是一个三位一体的技术名词,ELK 的每个字母都来自一个技术组件,它们分别是 Elasticsearch(简称 ES)、Logstash 和 Kibana。取这三个组件各自的首字母,就组成了所谓的 ELK。 

ELK 实现日志检索

在 Elastic 解决方案中,Logstash 扮演了一个日志收集器的角色。它可以从多个数据源对数据进行采集,也可以对数据做初步过滤和清洗,比如将数据转换成通用格式、隐匿敏感数据等。

而 Elasticsearch 呢,它是一个分布式的搜索和数据分析引擎。它在整套方案中扮演了日志存储和分词器的角色。Elasticsearch 会收到来自 Logstash 的日志信息,并将这些日志信息集中存储起来。同时,Elasticserch 还对外提供了多种 RESTful 风格的接口,上层应用可以通过这些接口完成数据查找和分析的任务。

Kibana 在整个 Elastic 方案中扮演了一个“花瓶”的角色。它提供了一套 UI 界面,让我们可以对 Elasticsearch 中存储的数据进行查找。同时,它还提供了各种统计报表的功能,如柱状图、饼图、时序统计分析、图谱关联分析等等。当然了,报表数据都来自于 Elasticsearch。 

下载 ELK 镜像 


docker pull sebp/elk:7.16.1

在这里我要重点提醒你两个点。 

第一,一定要记得尽可能多给 Docker 容器分配一些内存。否则,Elasticsearch 很容易启动失败,要知道 ES 可是一个非常吃内存的组件。我本地为 Docker 分配的运行期内存是 10G(顶配 Mac 就是豪横),我推荐你为 Docker 分配不低于 5G 的内存。

第二,低配电脑可以降低 ELK 镜像版本。如果你的电脑配置比较吃紧,无法分配高内存,那么你可以尝试获取更低版本的 ELK 组件,因为版本越高对系统的资源要求越高。你可以在Docker Hub网站上查看 sebp/elk 镜像的版本信息,再选择适合自己电脑配置的进行下载。 

创建 ELK 容器 

你可以在命令行使用如下命令创建并启动一个 ELK 容器,在这段命令中,我为 Elasticsearch、Logstash 和 Kibana 指定的启动端口分别为 9200、5044 和 5601。命令中的–name elk 参数指定了新创建的 Container 的名称为“elk”,当然了,这里你可以更换成自己喜欢的名称。 


sudo docker run -p 5601:5601 -p 9200:9200 -p 5044:5044 -it --name elk sebp/elk

 你可以在浏览器中访问“localhost:9200”来验证 ES 是否成功被启动,正常情况下,你应该能在浏览器中看到 ES 集群的版本号等信息,这就说明 ES 启动成功了。

而 Kibana 的启动时间会更长一些,你可以在浏览器中访问“localhost:5601”来访问 Kibana 的网页。

如果启动过程中出现异常,你可以从启动日志中找到异常原因。首先你需要执行下面的命令,进入到 Container 内部。然后,使用 cd 命令进入到 /var/log 文件夹,在这里你可以找到 ES、Logstash 和 Kibana 的启动日志,查看具体的报错。

 


docker exec -it elk /bin/bash

 配置 Logstash

我们使用 docker exec 命令进入到 elk 容器之后,需要使用编辑器打开 /etc/logstash/conf.d/02-beats-input.conf 文件,它是用来配置 Logstash 的输入输出源的文件。你可以使用 vi 命令或者 vim 命令进入文件编辑模式,接下来你需要将文件中的内容替换为以下配置项。


input {
    tcp {
        port => 5044
        codec => json_lines
    }
}

output {
    elasticsearch {
        hosts => ["localhost:9200"]
        index => "geekbang"
    }
}

在上面的文件中,我指定 Logstash 使用 TCP 插件作为数据输入源,并从 5044 端口收集数据,格式为 JSON,你可以通过这个链接访问 TCP 插件的完整参数列表。

同时,我还通过 output 参数将处理过后的日志数据输出到了 ES 组件中,这里我配置了 ES 的地址和数据索引,你可以点击这里的链接获取 ES 插件的详细信息。修改完成之后记得一定要保存文件。L

ogstash 支持多种类型的输入和输出源,你可以结合自己的项目架构,选择适合的数据源。如果你对这部分内容感兴趣,可以分别参考以下的两个配置文档:

Logstash Input 插件列表

Logstash Output 插件列表

接下来,你还需要在容器外部执行下面这行命令,通过重启 ELK 容器,让 Logstash 重新加载最新的配置项。 


docker restart elk

对接 ELK 容器 

首先,你需要为三个微服务项目添加 logstash-logback-encoder 依赖项,它提供了对接 Logstash 的日志输出组件,这里我使用了 7.0.1 的稳定版本。 


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

 接下来,你需要在每个项目的 src/main/resources 路径下创建 logback-spring.xml 组件,在这个文件中,我们定义了两个 Appender 用来输出日志信息。

第一个是 ConsoleAppender,它可以将日志信息打印到控制台上。这里我使用了 Spring Boot 默认的日志格式。


<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
        <level>DEBUG</level>
    </filter>
    <!-- 日志输出编码 -->
    <encoder>
        <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        <charset>utf8</charset>
    </encoder>
</appender>

第二个是 LogstashTcpSocketAppender,由于我们在 ELK 容器中指定了使用 TCP 的方式接收日志信息,所以这个 Appender 对象专门用来构建 JSON 格式化数据发送到 Logstash。在下面的代码中,你可以看到我将日志的主体信息,以及 Span、Trace 等链路追踪信息作为了 JSON 数据的一部分。 


<appender name="logstash"
          class="net.logstash.logback.appender.LogstashTcpSocketAppender">
    <!-- 这是Logstash的连接方式 -->
    <destination>127.0.0.1:5044</destination>
    <!-- 日志输出的JSON格式 -->
    <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
        <providers>
            <timestamp>
                <timeZone>UTC</timeZone>
            </timestamp>
            <pattern>
                <pattern>
                    {
                    "severity": "%level",
                    "service": "${applicationName:-}",
                    "trace": "%X{traceId:-}",
                    "span": "%X{spanId:-}",
                    "pid": "${PID:-}",
                    "thread": "%thread",
                    "class": "%logger{40}",
                    "rest": "%message"
                    }
                </pattern>
            </pattern>
        </providers>
    </encoder>
</appender>

查看 Kibana 日志信息 

当 ELK 容器处于运行状态时,你可以在浏览器中打开“localhost:5601”地址访问 Kibana 系统。不过,在使用 Kibana 做日志查询之前,你还需要添加一个 Index。这里所说的 Index 其实是 ES 中的一个查询参数。

在这节课前半部分,我在 ELK 容器的 Logstash 配置项中指定了 Index=geekbang,这个值会作为 Index 参数,Logstash 向 ES 传输日志信息的时候,会将“geekbang”写入 ES。

为了简化配置,我将所有的日志信息都归在了 geekbang 这个索引之下,当然了,你也可以在 Logstash 配置文件中通过表达式动态生成 Index 的值。 

 如果你有了一个 Trace ID 或者 Span ID,那么你可以直接在 Kibana 的 Discover 页面查询这个 ID 对应的所有详细日志信息。当然了,根据 ES 对日志的分词结果,你还可以借助 Kibana 的 KQL 表达式构造复杂查询条件,你可以访问 Kibana 的Kuery-query页面学习如何使用 KQL 查询。

ELK 实现日志检索

 

总结

今天我们通过 ELK 镜像搭建了一套完整的日志查询系统,这个过程中的重点是配置 Logstash 的输入输出数据源。出于简化课程难度的目的,我并没有使用 filebeat 或者 kafka 之类的输入源,而是使用了 TCP Socket 方式,让业务系统直接把日志信息传输到 Logstash。

从高可用的角度出发,我们通常并不会将业务系统与 Logstash 直连,取而代之的是将日志写入本地文件,然后通过 Filebeat 之类的工具收集本地 log 文件,并传输给 Logstash。

这样做的好处是,无论 Logstash 和应用服务器之间的连接通路是否顺畅,日志文件都会落盘保存,并不会因网络异常而丢失。另一方面,Filebeat 使用了一种“背压敏感协议”技术,用来应对海量数据访问的压力,它会根据 Logstash 的处理速率调整文件读取速度,如果 Logstash 正忙,Filebeat 就会降低读取文件的速度。文章来源地址https://www.toymoban.com/news/detail-451091.html

到了这里,关于ELK 实现日志检索的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【分布式技术】ELK大型日志收集分析系统

    目录 步骤一:完成JAVA环境部署 步骤二:部署ES节点(三台主机) 步骤三:内核参数修改 步骤四:web端查看验证 步骤五:yum安装nginx  步骤六:完成logstash部署 步骤七:部署kibana  步骤八:测试ELK

    2024年01月20日
    浏览(43)
  • 分布式技术--------------ELK大规模日志实时收集分析系统

    目录 一、ELK日志分析系统 1.1ELK介绍 1.2ELK各组件介绍 1.2.1ElasticSearch 1.2.2Kiabana 1.2.3Logstash 1.2.4可以添加的其它组件 1.2.4.1Filebeat filebeat 结合logstash 带来好处 1.2.4.2缓存/消息队列(redis、kafka、RabbitMQ等) 1.2.4.3Fluentd 二、为什么要使用 ELK 三、完整日志系统基本特征 四、ELK 的工作

    2024年04月17日
    浏览(45)
  • logstack 日志技术栈-02-ELK 的缺点?loki 更轻量的解决方案?

    如果今天谈论到要部署一套日志系统,相信用户首先会想到的就是经典的ELK架构,或者现在被称为Elastic Stack。 Elastic Stack架构为Elasticsearch + Logstash + Kibana + Beats的组合,其中,Beats负责日志的采集, Logstash负责做日志的聚合和处理,Elasticsearch作为日志的存储和搜索系统,Kiba

    2024年01月21日
    浏览(37)
  • SpringBoot利用ELK实现日志收集

    ELK是Elasticsearch、Logstash、Kibana他们三个组合起来可以搭建日志系统,本文主要记录使 用ELK收集SoringBoot应用产生的日志 Elasticsearch:存储日志信息 Logstash: 日志收集,springboot利用Logstash把日志发送个Logstash,然后Logstash将日志传递 给Elasticsearch。 Kibana:通过web端对日志进行可视化操

    2023年04月08日
    浏览(36)
  • Elk+Filebeat+Kafka实现日志收集

    1.实验组件 2.安装前准备 3.安装Zookeeper 1.安装Kafka 2.命令行测试  1.安装Filebeat 2.时间同步 3.配置filebeat 4.配置logstash 1.安装配置filebeat 2.配置logstash

    2024年02月05日
    浏览(45)
  • Flink日志采集-ELK可视化实现

    组件 版本 Flink 1.16.1 kafka 2.0.0 Logstash 6.5.4 Elasticseach 6.3.1 Kibana 6.3.1   针对按照⽇志⽂件⼤⼩滚动⽣成⽂件的⽅式,可能因为某个错误的问题,需要看好多个⽇志⽂件,还有Flink on Yarn模式提交Flink任务,在任务执行完毕或者任务报错后container会被回收从而导致日志丢失,为了

    2024年02月05日
    浏览(37)
  • SpringBoot2 集成 ELK 实现日志收集

    目录 一 简介 二 ELK 各组件作用 三 ELK 各组件安装 四 Spring Boot2 集成 logstash  ELK 即 Elasticsearch、Logstash、Kibana 组合起来可以搭建线上日志系统,本文主要讲解使用ELK 来收集 SpringBoot2 应用产生的日志。 Elasticsearch:用于存储收集到的日志信息; Logstash:用于收集日志,SpringBo

    2024年02月06日
    浏览(33)
  • Logstash Logback Encoder实现ELK日志归集

    搭建SpringCloud平台日志归集方案,主要使用Logstash Logback Encoder组件实现。 主要分为运维相关的配置和开发相关的配置,具体分类无需纠结,都了解一遍即可。 不足之处,各位大神指出,感谢~ Elasticsearch配置 新建Index Templates,Mapping参考值如下,具体参考值可参考 Logstash Logba

    2024年02月11日
    浏览(54)
  • springboot集成elk实现日志采集可视化

    一、安装ELK 安装ELK组件请参考我这篇博客:windows下安装ELK(踩坑记录)_windows上安装elk教程-CSDN博客 这里不再重复赘述。  二、编写logstash配置 ELK组件均安装好并成功启动,进入到logstash组件下的config文件夹,创建logstash.conf配置文件 logstash.conf的配置如下 input{    tcp{        

    2024年02月20日
    浏览(34)
  • 【日志技术——Logback日志框架】

    1.引出 我们通常展示信息使用的是输出语句,但它有弊端,只能在控制台展示信息,不能灵活的指定日志输出的位置(文件,数据库),想加入或取消日志,需要修改源代码 2.日志技术 可以将系统执行的信息,方便的记录到指定的位置(控制台、文件中、数据库中) 可以随

    2024年02月09日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包