使用 ELK 收集日志

码农UP2U

共 4182字,需浏览 9分钟

 · 2022-09-17


        在当前分布式、微服务架构下,各个应用都部署在不同的服务器上,每个应用都在记录着自己重要或者不重要的日志信息。当我们要通过日志信息来排查错误时,可以根据出错应用在对应的机器上找报错相关的日志信息。但是,可能我们不具有相应服务器的访问权限,也可能相同的应用部署在多台服务器上,导致根本不知道在哪台服务器上找日志。遇到类似这样的尴尬,想要通过日志来排查错误就搞得很麻烦。在这种情况下,ELK 为我们提供了统一的日志管理解决方案,它能很好的支持 Logback 等日志框架,使得我们可以集中的管理不同应用输出的日志信息。

        ELK 是 ElasticSearch、Logstash 和 Kibana 的简写。ElasticSearch 主要用来存储日志信息,并提供检索功能;Logstash 用于收集应用发送的日志信息,并写入到 ElasticSearch 当中;Kibana 是一个可视化的日志查看、分析工具。

        ELK 架构大体如下:

        在上图中应用日志框架直接将日志发送给 Logstash,然后 Logstash 将接收的日志写入 ElasticSearch 中,开发人员通过可视化的 Kibana 可以进行日志的查询和分析。

        在上图中,Logstash、ElasticSearch 都可以是多个,而不是一个。


ELK 的下载

        ELK 都可以通过它们的官网进行下载,最好将它们的版本进行统一。我这里下载的是 7.17.6 的版本,即 ElasticSearch、Logstash 和 Kibana 都是 7.17.6 版本的。

        它们的下载地址分别如下:

- elasticsearch下载地址:
https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-17-6
- logstash下载地址:
https://www.elastic.co/cn/downloads/past-releases/logstash-7-17-6
- kibana下载地址:
https://www.elastic.co/cn/downloads/past-releases/kibana-7-17-6

        ELK 下载后只需要解压缩后进行配置即可使用,还是很方便的。


ELK 的配置与启动

        我这里使用的是 Windows 系统进行演示,在将 ELK 配置好后直接使用命令行进行启动,并没有将其注册为服务。

ElasticSearch 的配置与启动

        在 ES 的安装目录下有个 config 目录,打开该目录下的 elasticsearch.yml 文件,然后取消掉两行配置的注释符号,并进行简单的修改,配置如下:

network.host: 0.0.0.0discovery.seed_hosts: ["127.0.0.1", "[::1]"]

        在 ES 的安装目录下打开命令行执行以下命令,来启动 ES:

.\bin\elasticsearch.bat


Logstash 的配置与启动

        在 Logstash 的安装目录下同样有一个 config 目录,复制 logstash-sample.conf 配置文件,并命名为 log_to_es.conf,文件名可以自己定,启动时写对即可。

        修改配置如下:

input {  beats {    port => 5044  }  tcp {    host => "0.0.0.0"    port => 8082    mode => "server"    tags => ["bsjiot"]    codec => json_lines  }}
output { elasticsearch { hosts => ["http://localhost:9200"] }}

        其中 input 是用于收集日志信息的配置,output 是用于将收集的信息推送到 ES 中。通过命令行来启动 Logstash,命令如下:

.\bin\logstash.bat -f .\config\log_to_es.conf


Kibana 的配置与启动

        在 Kibana 的安装目录下也同样有一个 config 目录,修改该目录下的 kibana.yml 文件,配置如下:

elasticsearch.hosts: ["http://localhost:9200"]server.host: "127.0.0.1"

        通过在命令行如下命令启动 Kibana,命令如下:

.\bin\kibana.bat


通过 Logback 输出日志到 ELK

        上面配置完 ELK 并启动后,通过 SpringBoot 来进行测试。

        首先引入两个依赖,引入依赖如下:

<dependency>    <groupId>net.logstash.logback</groupId>    <artifactId>logstash-logback-encoder</artifactId>    <version>7.2</version></dependency><dependency>    <groupId>ch.qos.logback</groupId>    <artifactId>logback-core</artifactId></dependency>

        接下来配置 Logback 的配置文件:

<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">    <destination>localhost:8082</destination>    <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">        <customFields>{"appname":"xxxx"}</customFields>    </encoder></appender><root level="info">    <appender-ref ref="CONSOLE" />    <appender-ref ref="LOGSTASH" /></root>

        最后通过 Logback 来输出一些日志,然后在 Kibana 中进行查看。


通过 Kibana 查看日志

        我们来访问 Kibana 提供的 Web 页面浏览器中打开 http://localhost:5601/ 该地址。然后在左侧列表中选择 Stack Managentment,选择后会出现新的页面,然后选择 Index Patterns 选项。在新出现的页面中点击 Create Index pattern 按钮,然后命名其为 logstash-*(这里名字随意),并选择 @timestamp 的字段,如下图:

        选择好后,点击 Create index pattern 按钮即可。创建完成后,返回 Kibana 的首页,选择 Discover 选项,切换到我们新建的 logstash-* 选项下,然后选择时间段,就可以看到相应的日志信息了。


小结

        上例中 ELK 都部署在了一台机器上,Demo 演示而已。实际情况中,ELK 可能部署在多台机器上,且可以配置集群。当微服务等客户端特别多时,同时向 Logstash 发送数据,并写入 ES 可能会影响性能,此时可以在客户端和 Logstash 中间引入 Kafka 来缓解 Logstash 和 ES 的压力。


公众号内回复 【mongo】 下载 SpringBoot 整合操作 MongoDB 的文档。

公众号内回复 【cisp知识整理】 下载 CISP 读书笔记。

公众号内回复【java开发手册】获取《Java开发手册》黄山版。



浏览 14
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报