2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > Springboot/Springcloud整合ELK平台 (Filebeat方式)日志采集及管理(Elasticsearch

Springboot/Springcloud整合ELK平台 (Filebeat方式)日志采集及管理(Elasticsearch

时间:2019-09-25 12:20:08

相关推荐

Springboot/Springcloud整合ELK平台 (Filebeat方式)日志采集及管理(Elasticsearch

前言

最近在搞一套完整的云原生框架,详见 spring-cloud-alibaba专栏,目前已经整合的log4j2,但是想要一套可以实时观察日志的系统,就想到了ELK,然后上一篇文章是socket异步发送给logstash,logstash再输出到elasticsearch索引库中。

logstash是java应用,解析日志是非的消耗cpu和内存,logstash安装在应用部署的机器上显得非常的笨重。最常见的做法是用filebeat部署在应用的机器上,logstash单独部署,然后由filebeat将日志输出给logstash解析,解析完由logstash再传给elasticsearch。

ELK

Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

Logstash是一个完全开源的工具,他可以对你的日志进行收集、过滤,并将其存储供以后使用(如,搜索)。

Beats在是一个轻量级日志采集器,其实Beats家族有6个成员,早期的ELK架构中使用Logstash收集、解析日志,但是Logstash对内存、cpu、io等资源消耗比较高。相比Logstash,Beats所占系统的CPU和内存几乎可以忽略不计。

Kibana 也是一个开源和免费的工具,它Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。

SrpingBoot+Log4j2 配置修改

Log4j2为我们提供SocketAppender,使得我们可以通过TCP或UDP发送日志

我的上一篇文章就是通过这种方式推送到了logstash,但这次我改成beats定时推送

修改配置文件

springboot整合log4j2详见我的上一篇博客什么是日志门面? SpringBoot整合log4j2 ,日志落地

修改log4j2-spring.xml文件注意看这个地方${sys:LOG_PATH},我借用了springboot中的日志路径配置使得我的xml中可以读取yml的值

然后我的日志结构就是每个微服务有一个自己的日志文件夹,我这么做是为了后边的beats

如果是k8s+docker部署的话,可以不用这种方式

参考docker-compose部署多个微服务,ELK日志收集方案真的有用不是引流

application.yml

logging:file:# 配置日志的路径,包含 spring.application.namepath: ${spring.application.name}

附:完整xml

<?xml version="1.0" encoding="UTF-8"?><!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,可以看到log4j2内部各种详细输出--><!-- monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数 --><configuration monitorInterval="5" xmlns:context="/schema/context"><!-- 日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL --><!-- 变量配置 --><Properties><!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符%logger{36} 表示 Logger 名字最长36个字符--><property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %highlight{%-5level}[%thread] %style{%logger{36}}{cyan} : %msg%n" /><!-- 定义日志存储的路径,不要配置相对路径 --><property name="FILE_PATH" value="./logs/${sys:LOG_PATH}" /><!-- 服务名 --><property name="FILE_NAME" value="${sys:LOG_PATH}" /></Properties><appenders><console name="Console" target="SYSTEM_OUT"><!--输出日志的格式--><PatternLayout pattern="${LOG_PATTERN}" disableAnsi="false" noConsoleNoAnsi="false"/><!--控制台只输出level及其以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--><ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/></console><!--这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档--><RollingFile name="RollingFileInfo"fileName="${FILE_PATH}/info.log"filePattern="${FILE_PATH}/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd}-INFO_%i.log.gz"><!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--><ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="${LOG_PATTERN}"/><Policies><!--interval属性用来指定多久滚动一次,默认是1 hour--><TimeBasedTriggeringPolicy interval="1"/><SizeBasedTriggeringPolicy size="20MB"/></Policies><!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖 --><DefaultRolloverStrategy max="15"/></RollingFile><!-- 这个会打印出所有的warn及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档--><RollingFile name="RollingFileWarn"fileName="${FILE_PATH}/warn.log"filePattern="${FILE_PATH}/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd}-WARN_%i.log.gz"><!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--><ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="${LOG_PATTERN}"/><Policies><!--interval属性用来指定多久滚动一次,默认是1 hour--><TimeBasedTriggeringPolicy interval="1"/><SizeBasedTriggeringPolicy size="20MB"/></Policies><!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖--><DefaultRolloverStrategy max="15"/></RollingFile><!-- 这个会打印出所有的error及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档--><RollingFile name="RollingFileError"fileName="${FILE_PATH}/error.log"filePattern="${FILE_PATH}/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd}-ERROR_%i.log.gz"><!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--><ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="${LOG_PATTERN}"/><Policies><!--interval属性用来指定多久滚动一次,默认是1 hour--><TimeBasedTriggeringPolicy interval="1"/><SizeBasedTriggeringPolicy size="20MB"/></Policies><!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖--><DefaultRolloverStrategy max="15"/></RollingFile><!--不再使用socket推送,改为filebeats推送到elasticsearch--><!--<Socket name="logstash" host="127.0.0.1" port="4560" protocol="TCP"><PatternLayout pattern="${LOG_PATTERN}"/></Socket>--></appenders><!--Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。--><!--然后定义loggers,只有定义了logger并引入的appender,appender才会生效--><loggers><!--过滤掉spring和mybatis的一些无用的DEBUG信息--><logger name="org.mybatis" level="info" additivity="false"><AppenderRef ref="Console"/></logger><!--监控系统信息--><!--若是additivity设为false,则 子Logger 只会在自己的appender里输出,而不会在 父Logger 的appender里输出。--><Logger name="top.fate" level="info" additivity="false"><AppenderRef ref="Console"/></Logger><root level="info"><appender-ref ref="Console"/><appender-ref ref="RollingFileInfo"/><appender-ref ref="RollingFileWarn"/><appender-ref ref="RollingFileError"/><appender-ref ref="logstash"/></root></loggers></configuration>

下载安装ELK

这里我就直接装我windows电脑了

es中文社区这里我用7.16.2Elasticsearchkibanalogstashfilebeat_x64

Elasticsearch

直接elasticsearch.bat启动即可

访问localhost:9200 验证启动成功,这里基本不会有什么问题

Logstash

创建配置文件

conf下创建spring-boot-logstash.yml输出的索引名称我改为动态方式,每个微服务每天有一个自己的索引文件。[fields][servicename] ------->beats推送的时候会带过来

input {beats {port => 5044}tcp {mode => "server"host => "127.0.0.1"port => 4560codec => json_lines}}filter {}output {elasticsearch {hosts => ["http://127.0.0.1:9200"]index => "%{[fields][servicename]}-%{+yyyy.MM.dd}"}}

运行Logstash

logstash.bat -f E:\elasticsearch\ELK\logstash-7.16.2\config\spring-boot-logstash.yml

Filebeat

修改filebeat.yaml

# ============================== Filebeat inputs ===============================filebeat.inputs:- type: logenabled: truepaths:- F:\Projects\SpringCloudAlibaba\logs\order-service\*.log#- c:\programdata\elasticsearch\logs\*fields:servicename: order-servicemultiline:pattern: '^\{'negate: truematch: aftertimeout: 5s- type: logenabled: truepaths:- F:\Projects\SpringCloudAlibaba\logs\user-service\*.log#- c:\programdata\elasticsearch\logs\*fields:servicename: user-servicemultiline:pattern: '^\{'negate: truematch: aftertimeout: 5s# ============================== Filebeat modules ==============================filebeat.config.modules:# Glob pattern for configuration loadingpath: ${path.config}/modules.d/*.yml# Set to true to enable config reloadingreload.enabled: false# ======================= Elasticsearch template setting =======================setup.template.settings:index.number_of_shards: 1# =================================== Kibana ===================================setup.kibana:# ---------------------------- Elasticsearch Output ----------------------------#output.elasticsearch:# Array of hosts to connect to.#hosts: ["localhost:9200"]# Protocol - either `http` (default) or `https`.#protocol: "https"# Authentication credentials - either API key or username/password.#api_key: "id:api_key"#username: "elastic"#password: "changeme"# ------------------------------ Logstash Output -------------------------------output.logstash:# The Logstash hostshosts: ["localhost:5044"]# ================================= Processors =================================processors:- add_host_metadata:when.not.contains.tags: forwarded- add_cloud_metadata: ~- add_docker_metadata: ~- add_kubernetes_metadata: ~

运行beats

filebeat.exe -e -c filebeat.yml

Kibana

修改config/kibana.yml

elasticsearch.hosts: ["http://localhost:9200"]i18n.locale: "zh-CN"

直接kibana.bat启动访问http://localhost:5601/

查看索引列表

创建索引模式

查看日志

Springboot/Springcloud整合ELK平台 (Filebeat方式)日志采集及管理(Elasticsearch+Logstash+Filebeat+Kibana)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。