【手记】基于SpringCloud搭建ELK分布式日志追踪

这篇具有很好参考价值的文章主要介绍了【手记】基于SpringCloud搭建ELK分布式日志追踪。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介

  • ELK: 是 Elasticsearch、Logstrash 和 Kibana 的缩写,它们代表的是一套成熟的日志管理系统,ELK Stack已经成为目前最流行的集中式日志解决管理方案。
  • Elasticsearch: 分布式搜索和分析引擎,具有高可伸缩、高可靠和易管理等特点。基于 Apache Lucene 构建,能对大容量的数据进行接近实时的存储、搜索和分析操作。通常被用作某些应用的基础搜索引擎,使其具有复杂的搜索功能;
  • Logstash: 数据收集引擎。它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到用户指定的位置。
  • Kibana: 数据分析和可视化平台。通常与 Elasticsearch 配合使用,对其中数据进行搜索、分析和以统计图表的方式展示。
  • Filebeat: ELK 协议栈的新成员,一个轻量级开源日志文件数据搜集器,性能优秀,基于 Logstash-Forwarder 源代码开发(基于Java开发,解析日志耗费性能)是对它的替代。在需要采集日志数据的服务上安装 Filebeat,并指定日志目录或日志文件后,Filebeat就能读取日志文件数据,迅速发送到 Logstash进行解析,或直接发送到 Elasticsearch进行集中式存储和分析。

使用版本(基于Linux搭建)

  • elasticsearch-7.3.0,(Jdk8适配8.0以下)
    链接: 下载地址

  • kibana-7.3.0
    链接: 下载地址

  • logstash-7.3.0
    链接: 下载地址

  • logstash-7.3.0
    链接: 下载地址

Elasticsearch 搭建

下载

 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.0-linux-x86_64.tar.gz

解压

tar -zxvf elasticsearch-7.3.0-linux-x86_64.tar.gz

创建 elsearch 组并给新创建用户文件夹执行权限

重点:这里必须搞个用户,root用户无法运行的,并且ES自带的环境变量ES_HOME 目录就是该用户的文件目录

groupadd elsearch
useradd  elsearch(用户名) -g elsearch(组名) -p elsearch(密码)
chown -R elsearch:elsearch /home/elsearch/elasticsearch-7.3.0

修改Elasticsearch 的配置文件

cd /home/elsearch/elasticsearch-7.3.0/config
vim elasticsearch.yml

官方自带的配置文件都是注释的,故我们自行在末尾自行添加一下配置就OK。

# 如果需要部署集群,集群需要同样的集群名
 cluster.name: my-es-application
#
# # 每个 node 的名字需要唯一
 node.name: node-1
#
# # 注意一定要是路径后面加上/var/lib/elasticsearch/nodes,要不然无法加入集群,单机不需要
# # path.data: /var/lib/elasticsearch/nodes
# # path.logs: /var/log/elasticsearch
#
# # 配置服务器的内网地址,有文档配置的 0.0.0.0 或 localhost,但是后面出现了问题,暂未研究什么原因
 network.host: 192.168.1.239
#
# # 配置端口号,默认 9200
 http.port: 9200
#
# # 配置集群节点,多个服务器["node-1", "node-2"]
 cluster.initial_master_nodes: ["node-1"]
 # # 配置集群的主机和端口地址
# # discovery.seed_hosts: ["192.168.0.146", "192.168.0.147", "192.168.0.148"]
#
# # 解决跨域 
 http.cors.enabled: true

这里是单实例Elasticsearch,如果要搭建集群,请参考

启动

 # 刷新环境变量
 echo "export ES_HOME=/home/elsearch/elasticsearch-7.3.0" >> .bashrc
 echo "export PATH=$ES_HOME/bin:$PATH" >> .bashrc
 # 如果解压的包不在/home/elsearch/下面,需要拿过来
 # 切换用户
 su elsearch
 cd elasticsearch-7.3.0/bin/
 sh elasticsearch &

springcloud elk,spring cloud,分布式,elasticsearch

如果出现启动失败,排查下内存是否足够,是否是root启动,是否文件句柄数足够,是否堆栈虚拟内存是否足够,具体修改方式,一捞一大把。

访问

springcloud elk,spring cloud,分布式,elasticsearch

可视化界面-head(老古董)

注意:安装 head 需要安装 node 和 npm 下载地址:https://github.com/mobz/elasticsearch-head.git 下载后执行:

# 安装 module
npm install
# 运行 head 插件
npm run start

在网页上访问http://192.168.0.158:9100/ 得到以下界面,(我的以下界面,已经添加了日志)
导图一张:
springcloud elk,spring cloud,分布式,elasticsearch

可视化界面-klibana(新玩意)

至此,ES搭建成功,下面重点讲如何部署这个klibana

klibana搭建

下载以及解压

cd /home/elsearch
wget https://artifacts.elastic.co/downloads/kibana/kibana-7.3.0-linux-x86_64.tar.gz
tar -zxvf kibana-7.3.0-linux-x86_64.tar.gz

修改配置文件

cd kibana-7.3.0/config/
vim kibana.yml

配置文件修改如下

# 端口
server.port: 5601
# 指定本机 ip 让外部能访问
server.host: "0.0.0.0"
# 请求数据指向的 elasticsearch 服务器
elasticsearch.hosts: ["http://192.168.1.258:9200"]

启动

在其安装的bin目录下执行

# nohup保证后台运行,如果直接运行脚本,界面退出后,会自动退出
nohup ./kibana --allow-root > kibana.log 2>&1

日志如下
springcloud elk,spring cloud,分布式,elasticsearch访问 http://192.168.0.258:5601, 得到以下页面,代表启动成功。
springcloud elk,spring cloud,分布式,elasticsearch
索引列表
springcloud elk,spring cloud,分布式,elasticsearch
自定义索引模式
springcloud elk,spring cloud,分布式,elasticsearch
查看日志
springcloud elk,spring cloud,分布式,elasticsearch
具体操作细节,一捞一大把,这里不一一阐述了 下面继续来搞日志追踪

logstash 搭建

下载以及解压

cd /home/elsearch
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.3.0.tar.gz
tar -zxvf logstash-7.3.0.tar.gz
  • stash 第一个事件
    Logstash 管道有两个必需元素,输入和输出,以及一个可选元素 filter。输入插件使用来自源的数据,过滤器插件在您指定时修改数据,输出插件将数据写入目标。
    要测试 Logstash 安装成功,运行最基本的 Logstash 管道。执行以下的命令
 bin/logstash -e 'input { stdin { } } output { stdout {} }'

e 标志使您可以直接从命令行指定配置。通过在命令行指定配置,可以快速测试配置,而无需在迭代之间编辑文件。示例中的管道从标准输入 stdin 获取输入,并以结构化格式将输入移动到标准输出 stdout。启动 Logstash 后,等到看到“Pipeline main started”,然后在命令提示符下输入 自定义的字符串 aaaaa
如图代表测试成功
springcloud elk,spring cloud,分布式,elasticsearch

修改配置文件

  • 配置 logstash 输出到 elasticsearch
cd logstash-7.3.0/config/
vim logstash-sample.conf
  • 完整的配置文件如下
# Sample Logstash configuration for creating a simple
# Beats -> Logstash -> Elasticsearch pipeline.

input {
  beats {
    port => 5044
  }
  #日志文件配置地址
  tcp  {
    port => 4569
    codec => "json"
  }
}
# 分析、过滤插件,可以多个
filter {
    grok {
        match => { "message" => "%{COMBINEDAPACHELOG}"}
    }
    geoip {
        source => "clientip"
    }
}

output {
  elasticsearch {
    hosts => ["http://192.168.1.258:9200"]
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
    #user => "elastic"
    #password => "changeme"
  }
}

更多配置 参照官网教程:
其中:

  • beats 为结合 filebeat 使用。
  • tcp 为通过 tcp 协议的通道。注意 codec 为 json 格式。por 为请求的端口号。
  • elasticsearch 为输出到 elasticsearch ,也可以配置其他。更多详细见下面文档 配置详细解释 可以参考 :
    logstash 手册

启动

# 在其安装的bin目录下执行
# 配置文件和启动项放在同一目录,习惯管理
mv ../conf/logstash-sample.conf logstash-sample.conf
# 保证后台运行
nohup ./logstash -f logstash-sample.conf  > runlogstash.log 2>&1 &

如图代表启动成
springcloud elk,spring cloud,分布式,elasticsearch

filebeat搭建

目的

logstash 结合 filebeat 在分布式系统中,一台主机可能有多个应用,应用将日志输出到主机的指定目录,这时由 logstash 来搬运日志并解析日志,然后输出到 elasticsearch 上。由于于 logstash 是 java 应用,解析日志是非的消耗 cpu 和内存,logstash 安装在应用部署的机器上显得非常的笨重。最常见的做法是用 filebeat 部署在应用的机器上,logstash 单独部署,然后由 filebeat 将日志输出给 logstash 解析,解析完由 logstash 再传给 elasticsearch。

下载以及解压

cd /home/elsearch
wget  https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.0-linux-x86_64.tar.gz
tar -zxvf filebeat-7.3.0-linux-x86_64.tar.gz

修改配置文件

cd /filebeat-7.3.0-linux-x86_64/
vim filebeat.yml

配置文件修改如下

filebeat.inputs:

# Each - is an input. Most options can be set at the input level, so
# you can use different inputs for various configurations.
# Below are the input specific configurations.

- type: log

  # Change to true to enable this input configuration.
  enabled: true

  # Paths that should be crawled and fetched. Glob based paths.
  paths:
     # 当前目录下的所有.log文件
    - /home/elearning/jar/logs/*.log
    #- c:\programdata\elasticsearch\logs\*
  multiline.pattern: ^\[
  multiline.negate: true
  multiline.match: after
  
  # 日志配置方式
- type: tcp
  enabled: true
  max_message_size: 10MiB
  host: "0.0.0.0:9000"
#============================= Filebeat modules ===============================

filebeat.config.modules:
  # Glob pattern for configuration loading
  path: ${path.config}/modules.d/*.yml

  # Set to true to enable config reloading
  reload.enabled: false

  # Period on which files under path should be checked for changes
  #reload.period: 10s

#==================== Elasticsearch template setting ==========================

setup.template.settings:
  index.number_of_shards: 1
  #index.codec: best_compression
  #_source.enabled: false

#----------------------------- Logstash output --------------------------------
output.logstash:
  # The Logstash hosts
  hosts: ["192.168.1.258:5044"]

processors:
  - add_host_metadata: ~
  - add_cloud_metadata: ~

格式一定要对齐。

启动

在其安装的目录下执行

# nohup保证后台运行,如果直接运行脚本,界面退出后,会自动退出
nohup ./filebeat -e >filebeat.log 2>&1 &

启动成功日志如下
springcloud elk,spring cloud,分布式,elasticsearch
推送日志到logstash截图如下
springcloud elk,spring cloud,分布式,elasticsearch
回头看klibana是否回显日志
springcloud elk,spring cloud,分布式,elasticsearch
我的日志目前已经在测试环境上,接下来看springcloud结合log4j整合filebeat

SpringCloud + filebeat结合 log4j 使用

  • 废话不多说,上核心依赖
 		<!-- Logstash -->
        <dependency>
            <groupId>net.logstash.logback</groupId>
            <artifactId>logstash-logback-encoder</artifactId>
        </dependency>
  • 日志xml核心配置
<!-- 环境变量ELK_MODE=true 启动elk日志推送 -->
<if condition='property("ELK_MODE").toUpperCase().contains("TRUE")'>
        <then>
            <!-- 推送日志至elk -->
            <appender name="STDOUT_LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
            	 <!-- DESTINATION 就是我们的地址filebeat地址192.168.1.258:9000 -->
                <destination>${DESTINATION}</destination>
                <!-- 日志输出编码 -->
                <encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
                    <providers>
                        <timestamp>
                            <timeZone>UTC</timeZone>
                        </timestamp>
                        <pattern>
                            <pattern>
                                {
                                "traceId": "%X{traceId}",
                                "logLevel": "%level",
                                "serviceName": "${springAppName:-SpringApp}",
                                "pid": "${PID:-}",
                                "thread": "%thread",
                                "class": "%logger{40}",
                                "line":"%L",
                                "message": "%message"
                                }
                            </pattern>
                        </pattern>
                    </providers>
                </encoder>
            </appender>
        </then>
          <!-- 或者 logstash 设置 -->
  <!--  <appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <param name="Encoding" value="UTF-8"/>
        &lt;!&ndash; logstash 服务器 ip &ndash;&gt;
        <remoteHost>127.0.0.1</remoteHost>
        &lt;!&ndash; logstash tcp 端口&ndash;&gt;
        <port>4569</port>
        &lt;!&ndash; <filter class="com.program.interceptor.ELKFilter >//引入过滤类"/>
        Zencoder is required  &ndash;&gt;
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" >
          &lt;!&ndash;  <customFields>{"appname":"ceshi"}</customFields>&ndash;&gt;
        </encoder>
    </appender>-->
       </if>
            <!-- 日志输出级别 -->
    <root level="INFO">
        <appender-ref ref="STDOUT"/>
        <appender-ref ref="${STDOUT_APPENDER}"/>
    </root>
  • 日志核心启动类
public class LoggerStartupListener extends ContextAwareBase implements LoggerContextListener, LifeCycle {

	@Override
	public void start() {
		//获取日志组件上下文,并对其动态赋值
		Context context = getContext();
		context.putProperty("ELK_MODE", "FALSE");
		context.putProperty("STDOUT_APPENDER", "STDOUT");
		context.putProperty("INFO_APPENDER", "INFO");
		context.putProperty("ERROR_APPENDER", "ERROR");
		context.putProperty("DESTINATION", "127.0.0.1:9000");
		// 环境变量配置的filebeat/logstash地址 192.168.1.258:9000
		//ElkPropsUtil 获取环境变量工具类,大家自行封装就好
		String destination = ElkPropsUtil.getDestination();
		if (StringUtil.isNotBlank(destination)) {
			context.putProperty("ELK_MODE", "TRUE");
			context.putProperty("STDOUT_APPENDER", "STDOUT_LOGSTASH");
			context.putProperty("INFO_APPENDER", "INFO_LOGSTASH");
			context.putProperty("ERROR_APPENDER", "ERROR_LOGSTASH");
			context.putProperty("DESTINATION", destination);
		}
	}

小结:

至此整合完毕,这里只是简单的介绍了 ELK 的基础安装使用,更多的高级功能,还需要小伙伴自己去玩。如果有什么问题,欢迎留言讨论。文章来源地址https://www.toymoban.com/news/detail-795274.html

到了这里,关于【手记】基于SpringCloud搭建ELK分布式日志追踪的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 精品基于SpringCloud实现的电影院购票系统设计-微服务-分布式

    《[含文档+PPT+源码等]精品基于SpringCloud实现的电影院购票系统设计的设计与实现-微服务-分布式》该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等 软件开发环境及开发工具: 开发语言:Java 框架:springcloud JDK版本:JDK1.8 服务器:tomcat7 数据库:

    2024年02月09日
    浏览(100)
  • 4.日志分布式-ELK

    ELK平台是一套完整的日志集中处理解决方案,将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用, 完成更强大的用户对日志的查询、排序、统计需求。 ElasticSearch:是基于Lucene(一个全文检索引擎的架构)开发的分布式存储检索引擎,用来存储各类日志。 Elasticsearch 是用

    2024年02月13日
    浏览(47)
  • 基于Docker搭建hdfs分布式实验环境

    理论知识 Docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任

    2023年04月08日
    浏览(44)
  • 【分布式技术】ELK大型日志收集分析系统

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

    2024年01月20日
    浏览(46)
  • 分布式ELK 企业级日志分析系统

    ELK平台是一套完整的日志集中处理解决方案,将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用, 完成更强大的用户对日志的查询、排序、统计需求。 ElasticSearch :是基于Lucene(一个全文检索引擎的架构)开发的分布式存储检索引擎,用来存储各类日志。Elasticsearch 是用

    2024年02月16日
    浏览(40)
  • 【ELK 使用指南 1】ELK + Filebeat 分布式日志管理平台部署

    在运维中, 日志是非常重要的工具 ,用于记录系统、应用程序或设备的运行状态、事件和异常情况。 1)故障排除和问题诊断 日志是排查故障和诊断问题的关键信息源。 通过分析日志文件,可以查找和定位系统故障、错误和异常,帮助运维人员迅速找出问题的根本原因,并

    2024年02月07日
    浏览(53)
  • spark 基于物理机centos7环境搭建分布式集群

    非生产环境,就使用一个新一点的版本,提前先踩踩坑,版本的选型真是一个头疼的问题,先看一下apache的官网的测试图: 伪分布式看这里: 配置之前:若是用伪分布式时,在本机必须生成key-gen 与ssh-copy-id到本机,且hosts中必须加入127.0.0.1  本机名并关闭防火墙这几步才可

    2024年02月03日
    浏览(70)
  • 【分布式应用】ELK企业级日志分析系统

    目录 一、ELK 简介 1.1 ELK各组件介绍 ElasticSearch: Kiabana: Logstash: 1.2 可以添加的其它组件: Filebeat: 缓存/消息队列(redis、kafka、RabbitMQ等): Fluentd: 1.3 ELK、ELFK、EFLKL 二、为什么要使用 ELK 三、完整日志系统基本特征 四、ELK 的工作原理 五、ELK集群部署 实验环境: 实验步

    2024年02月14日
    浏览(45)
  • 分布式应用:ELK企业级日志分析系统

    目录 一、理论 1.ELK  2.ELK场景  3.完整日志系统基本特征 4.ELK 的工作原理          5.ELK集群准备 6.Elasticsearch部署(在Node1、Node2节点上操作) 7.Logstash 部署(在 Apache 节点上操作) 8.Kiabana 部署(在 Node1 节点上操作) 二、实验          1.Elasticsearch部署(在Node1、Node2节点上

    2024年02月14日
    浏览(42)
  • 【Distributed】分布式ELK日志文件分析系统(一)

      日志主要包括系统日志、应用程序日志和安全日志。系统远维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。   往往单台机器的日志我们使用

    2024年02月15日
    浏览(42)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包