欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 项目集成ELK

项目集成ELK

2025/1/23 1:58:48 来源:https://blog.csdn.net/m0_64637029/article/details/145284248  浏览:    关键词:项目集成ELK

文章目录

    • 1.配置log4j2将日志实时写入logstash
        • 1.创建combinations-elk-starter
          • 1.目录结构
          • 2.ELKAutoConfiguration.java 自动配置类
          • 3.spring.factories
          • 4.pom.xml 引入common-log4j2-starter
          • 5.查看是否被父模块所管理
          • 6.log4j2-spring.xml使用SocketAppender实时写入logstash
            • 1.文件
            • 2.核心
        • 2.创建common-elk-starter-demo
          • 1.目录结构
          • 2.pom.xml
          • 3.ElkApplication.java
          • 4.查看是否由父模块管理
        • 3.配置logstash接收日志输入
          • 1.开放9601端口
            • 1.服务器开放
            • 2.安全组开放
          • 2.编辑配置文件
            • 1.编辑
            • 2.配置
          • 3.指定配置文件启动测试
            • 1.启动
            • 2.启动 common-elk-starter-demo
            • 3.查看logstash,实时更新日志
    • 2.日志输出到es并实现可视化操作
        • 1.配置logstash将日志输出到es
          • 1.编辑配置文件
          • 2.修改output
          • 3.启动测试
          • 4.控制台输出正常
          • 5.后台启动并指定日志输出目录
            • 1.启动
            • 2.查看日志
        • 2.使用Kibana进行查看
          • 1.访问
          • 2.点击Discover
          • 3.创建索引模式
          • 4.模式为java-logs*
          • 5.配置时间戳
          • 6.再次点击 Discover即可查看日志
          • 7.还可以根据通配符检索

1.配置log4j2将日志实时写入logstash

1.创建combinations-elk-starter
1.目录结构

CleanShot 2024-12-31 at 13.24.00@2x

2.ELKAutoConfiguration.java 自动配置类
package com.sunxiansheng.elk.config;import org.springframework.context.annotation.Configuration;/*** Description: ELK自动配置类** @Author sun* @Create 2024/12/31 13:14* @Version 1.0*/
@Configuration
public class ELKAutoConfiguration {
}
3.spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.sunxiansheng.elk.config.ELKAutoConfiguration
4.pom.xml 引入common-log4j2-starter
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.sunxiansheng</groupId><artifactId>sunrays-combinations</artifactId><version>1.0.5</version></parent><artifactId>combinations-elk-starter</artifactId><dependencies><dependency><groupId>com.sunxiansheng</groupId><artifactId>common-log4j2-starter</artifactId><version>1.0.5</version></dependency></dependencies>
</project>
5.查看是否被父模块所管理

CleanShot 2024-12-31 at 13.33.38@2x

6.log4j2-spring.xml使用SocketAppender实时写入logstash
1.文件
<?xml version="1.0" encoding="UTF-8"?>
<!-- Log4j2 配置的根元素 -->
<Configuration status="INFO" monitorInterval="30">
<!--status="INFO":设置 Log4j2 内部日志的输出级别为 INFO,用于调试配置问题。monitorInterval="30":Log4j2 将每 30 秒检查一次配置文件的变化,实现热加载配置。
--><!-- TRACE < DEBUG < INFO < WARN < ERROR < FATAL --><!-- 定义全局属性,可在整个配置文件中使用 -->
<Properties><!-- logstash 的 SocketAppender 配置 --><Property name="socket.host">guest</Property><Property name="socket.port">guest</Property><!-- logstash 日志输出格式使用 |#| 作为分割符号 --><Property name="LOGSTASH_PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS}|#|%t|#|%p|#|%X{PFTID}|#|${sys:log.module}|#|%logger{36}|#|%msg|#|%throwable%n</Property><!-- 日志存储的根目录 --><Property name="LOG_HOME">${sys:log.home}</Property><!-- 日志文件的名称前缀 --><Property name="LOG_NAME">sunrays-framework</Property><!-- 控制台日志输出格式,带颜色 --><Property name="CONSOLE_LOG_PATTERN">%style{%d{yyyy-MM-dd HH:mm:ss.SSS}}{green} %style{[%t]}{blue} %highlight{%p}{FATAL=red blink, ERROR=red, WARN=yellow, INFO=green, DEBUG=cyan, TRACE=magenta} %style{[PFTID:%X{PFTID}]}{magenta} %style{[Module:${sys:log.module}]}{yellow} %style{%logger{36}}{cyan} - %msg%n%throwable</Property><!-- 文件日志输出格式,不带颜色 --><Property name="FILE_LOG_PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5p [PFTID:%X{PFTID}] [Module:${sys:log.module}] %logger{36} - %msg%n%throwable</Property>
</Properties><!-- 定义日志输出目的地(Appender) -->
<Appenders><!-- 定义 SocketAppender --><Socket name="RealTimeSocketAppender" host="${socket.host}" port="${socket.port}"><!-- 使用不带颜色的布局模式 --><PatternLayout pattern="${LOGSTASH_PATTERN}"/><!-- 添加日志级别过滤器只要info以及以上的日志 --><Filters><ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY" /></Filters></Socket><!-- 控制台输出 --><Console name="Console" target="SYSTEM_OUT"><!-- 使用带颜色的布局模式 --><PatternLayout pattern="${CONSOLE_LOG_PATTERN}"/><!-- 设置日志级别过滤器,只允许 INFO 及以上级别 --><ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/></Console><!-- INFO 级别日志文件输出 --><RollingFile name="InfoFile"fileName="${LOG_HOME}/unarchived/info/${date:yyyy-MM-dd}/current.log"filePattern="${LOG_HOME}/archived/info/${date:yyyy-MM-dd}/${LOG_NAME}-info-%d{yyyy-MM-dd-HH-mm-ss}-%i.log.gz"><!-- 使用不带颜色的布局模式 --><PatternLayout pattern="${FILE_LOG_PATTERN}"/><Policies><!-- 使用 Cron 表达式,每2小时归档一次 --><CronTriggeringPolicy schedule="0 0 0/2 * * ?"/><!-- 文件大小超过 50MB 时归档 --><SizeBasedTriggeringPolicy size="50MB"/></Policies><DefaultRolloverStrategy><!-- 删除超过7天的归档日志(Log4j2 2.7 及以上版本的特性)--><Delete basePath="${LOG_HOME}/archived/info" maxDepth="2"><IfFileName glob="*.log.gz"/>                        <!-- 匹配 .log.gz 的文件 --><IfLastModified age="7d"/>                           <!-- 文件修改时间超过7天 --></Delete></DefaultRolloverStrategy><Filters><!-- 只接受 INFO 及以上级别的日志 --><ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/></Filters></RollingFile><!-- WARN 级别日志文件输出 --><RollingFile name="WarnFile"fileName="${LOG_HOME}/unarchived/warn/${date:yyyy-MM-dd}/current.log"filePattern="${LOG_HOME}/archived/warn/${date:yyyy-MM-dd}/${LOG_NAME}-warn-%d{yyyy-MM-dd-HH-mm-ss}-%i.log.gz"><PatternLayout pattern="${FILE_LOG_PATTERN}"/><Policies><CronTriggeringPolicy schedule="0 0 0/2 * * ?"/><SizeBasedTriggeringPolicy size="50MB"/></Policies><DefaultRolloverStrategy><Delete basePath="${LOG_HOME}/archived/warn" maxDepth="2"><IfFileName glob="*.log.gz"/><IfLastModified age="7d"/></Delete></DefaultRolloverStrategy><Filters><!-- 只接受 WARN 及以上级别的日志 --><ThresholdFilter level="WARN" onMatch="ACCEPT" onMismatch="DENY"/></Filters></RollingFile><!-- ERROR 级别日志文件输出 --><RollingFile name="ErrorFile"fileName="${LOG_HOME}/unarchived/error/${date:yyyy-MM-dd}/current.log"filePattern="${LOG_HOME}/archived/error/${date:yyyy-MM-dd}/${LOG_NAME}-error-%d{yyyy-MM-dd-HH-mm-ss}-%i.log.gz"><PatternLayout pattern="${FILE_LOG_PATTERN}"/><Policies><CronTriggeringPolicy schedule="0 0 0/2 * * ?"/><SizeBasedTriggeringPolicy size="50MB"/></Policies><DefaultRolloverStrategy><Delete basePath="${LOG_HOME}/archived/error" maxDepth="2"><IfFileName glob="*.log.gz"/><IfLastModified age="7d"/></Delete></DefaultRolloverStrategy><Filters><!-- 只接受 ERROR 及以上级别的日志 --><ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/></Filters></RollingFile><!-- 全部级别日志文件输出(包含 DEBUG 及以上) --><RollingFile name="AllFile"fileName="${LOG_HOME}/unarchived/all/${date:yyyy-MM-dd}/current.log"filePattern="${LOG_HOME}/archived/all/${date:yyyy-MM-dd}/${LOG_NAME}-all-%d{yyyy-MM-dd-HH-mm-ss}-%i.log.gz"><PatternLayout pattern="${FILE_LOG_PATTERN}"/><Policies><CronTriggeringPolicy schedule="0 0 0/2 * * ?"/><SizeBasedTriggeringPolicy size="50MB"/></Policies><DefaultRolloverStrategy><Delete basePath="${LOG_HOME}/archived/all" maxDepth="2"><IfFileName glob="*.log.gz"/><IfLastModified age="7d"/></Delete></DefaultRolloverStrategy><!-- 不添加 ThresholdFilter,接受所有级别的日志 --></RollingFile>
</Appenders><!-- 配置日志记录器(Logger),定义日志的输出规则和级别 -->
<Loggers><!--以下是针对特定模块的日志配置,目前被注释掉了。可以根据需要取消注释,定制化模块的日志级别和输出。--><!-- 配置指定模块的异步日志 --><!--<AsyncLogger name="com.sunxiansheng" level="DEBUG" additivity="false" includeLocation="false"><AppenderRef ref="Console"/></AsyncLogger>--><!--name="com.sunxiansheng":指定包名或类名,针对该模块进行配置。level="DEBUG":设置日志级别为 DEBUG,记录 DEBUG 及以上级别的日志。additivity="false":不向父 Logger 传递,防止日志重复输出。includeLocation="false":不包含代码位置信息,提高性能。<AppenderRef ref="Console"/>:将日志输出到 Console Appender。--><!-- 配置其他特定模块的日志 --><!--<Logger name="com.moduleA" level="INFO" additivity="false"><AppenderRef ref="Console"/></Logger>--><!--针对 com.moduleA 包,设置日志级别为 INFO,日志只输出到 Console,不向上级传播。--><!-- 根日志记录器,处理未被其他 Logger 捕获的日志 --><Root level="DEBUG"><!-- 引用之前定义的所有 Appender --><AppenderRef ref="Console"/><AppenderRef ref="InfoFile"/><AppenderRef ref="WarnFile"/><AppenderRef ref="ErrorFile"/><AppenderRef ref="AllFile"/><!-- 实时写入logstash --><AppenderRef ref="RealTimeSocketAppender"/></Root><!--level="DEBUG":设置根日志级别为 DEBUG,记录 DEBUG 及以上级别的日志。所有未被特定 Logger 处理的日志,都会按照根日志器的配置输出。-->
</Loggers>
</Configuration>
2.核心

CleanShot 2024-12-31 at 13.36.44@2x

CleanShot 2024-12-31 at 13.36.54@2x

CleanShot 2024-12-31 at 13.37.15@2x

2.创建common-elk-starter-demo
1.目录结构

CleanShot 2024-12-31 at 13.38.44@2x

2.pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.sunxiansheng</groupId><artifactId>sunrays-demo</artifactId><version>1.0.5</version></parent><artifactId>common-elk-starter-demo</artifactId><dependencies><dependency><groupId>com.sunxiansheng</groupId><artifactId>combinations-elk-starter</artifactId><version>1.0.5</version></dependency><!-- spring-boot-starter-web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><!-- 排除掉logging --><exclusions><exclusion><artifactId>spring-boot-starter-logging</artifactId><groupId>org.springframework.boot</groupId></exclusion></exclusions></dependency></dependencies></project>
3.ElkApplication.java
package com.sunxiansheng.elk;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;/*** Description: ELK日志收集系统** @Author sun* @Create 2024/12/28 13:59* @Version 1.0*/
@SpringBootApplication
public class ElkApplication {public static void main(String[] args) {SpringApplication.run(ElkApplication.class, args);}
}
4.查看是否由父模块管理

CleanShot 2024-12-31 at 13.39.41@2x

3.配置logstash接收日志输入
1.开放9601端口
1.服务器开放
systemctl start firewalld && firewall-cmd --permanent --add-port=9601/tcp && firewall-cmd --reload && firewall-cmd --query-port=9601/tcp
2.安全组开放

CleanShot 2024-12-31 at 13.44.00@2x

2.编辑配置文件
1.编辑
vim /usr/local/logstash/logstash-7.9.3/config/logstash.conf
2.配置
input {tcp {port => 9601}
}filter {dissect {mapping => {"message" => "%{timestamp}|#|%{thread}|#|%{level}|#|%{pftid}|#|%{module}|#|%{logger}|#|%{log_message}|#|%{throwable}"}}# 使用 date 过滤器解析 timestamp 字段,并指定时区date {match => ["timestamp", "yyyy-MM-dd HH:mm:ss.SSS"]timezone => "Asia/Shanghai"  # 填写日志的时区,一般就是东八区,将其转化为零时区放到@timestamp中target => "@timestamp"}mutate {remove_field => ["timestamp", "port", "message", "@version"]  # 移除不需要的字段}
}output {stdout {codec => rubydebug}
}
3.指定配置文件启动测试
1.启动
cd /usr/local/logstash/logstash-7.9.3/bin && ./logstash -f /usr/local/logstash/logstash-7.9.3/config/logstash.conf
2.启动 common-elk-starter-demo

CleanShot 2024-12-31 at 13.50.21@2x

3.查看logstash,实时更新日志

CleanShot 2024-12-31 at 13.51.10@2x

2.日志输出到es并实现可视化操作

1.配置logstash将日志输出到es
1.编辑配置文件
vim /usr/local/logstash/logstash-7.9.3/config/logstash.conf
2.修改output
output {# 输出到 Elasticsearchelasticsearch {hosts => ["http://guest:9200"]  # 替换为 Elasticsearch 地址index => "java-logs-%{+YYYY.MM.dd}"  # 按日期创建索引# user => "your_username"  # 如果启用了身份验证,填写用户名# password => "your_password"  # 填写密码}# 方便调试,控制台输出stdout {codec => rubydebug}
}
3.启动测试
cd /usr/local/logstash/logstash-7.9.3/bin && ./logstash -f /usr/local/logstash/logstash-7.9.3/config/logstash.conf
4.控制台输出正常

CleanShot 2024-12-31 at 13.59.36@2x

5.后台启动并指定日志输出目录
1.启动
nohup /usr/local/logstash/logstash-7.9.3/bin/logstash -f /usr/local/logstash/logstash-7.9.3/config/logstash.conf > /usr/local/logstash/logstash-7.9.3/logs/logstash.log 2>&1 &
2.查看日志
tail -f /usr/local/logstash/logstash-7.9.3/logs/logstash.log
2.使用Kibana进行查看
1.访问

http://guest:5601

2.点击Discover

CleanShot 2024-12-31 at 14.01.53@2x

3.创建索引模式

CleanShot 2024-12-31 at 14.02.13@2x

4.模式为java-logs*

CleanShot 2024-12-31 at 14.02.53@2x

5.配置时间戳

CleanShot 2024-12-31 at 14.03.07@2x

6.再次点击 Discover即可查看日志

CleanShot 2024-12-31 at 14.05.28@2x

7.还可以根据通配符检索

CleanShot 2024-12-31 at 14.07.41@2x

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com