SpringBoot使用Graylog日志收集的实现示例
本文介绍springboot如何使用graylog日志收集。
1.graylog介绍
graylog是一个生产级别的日志收集系统,集成mongo和elasticsearch进行日志收集。其中mongo用于存储graylog的元数据信息和配置信息,elasticsearch用于存储数据。
架构图如下:
生产环境配置图如下:
2.安装graylog
在官方文档上推荐了很多种安装的方式,这里以docker-compose的方式为例,进行安装graylog,mongo,elasticsearch。
docker-compose.yml内容如下(这里是在官网的基础上改了一下):
version: '2' services: # mongodb: https://hub.docker.com/_/mongo/ mongodb: image: mongo:3 # elasticsearch: https://www.elastic.co/guide/en/elasticsearch/reference/6.6/docker.html elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch-oss:6.6.1 environment: - http.host=0.0.0.0 - transport.host=localhost - network.host=0.0.0.0 - "es_java_opts=-xms256m -xmx256m" ulimits: memlock: soft: -1 hard: -1 mem_limit: 512m # graylog: https://hub.docker.com/r/graylog/graylog/ graylog: image: graylog/graylog:3.0 environment: # change me (must be at least 16 characters)! - graylog_password_secret=somepasswordpepper # password: admin - graylog_root_password_sha2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918 - graylog_http_external_uri=http://106.13.35.42:9000/ links: - mongodb:mongo - elasticsearch depends_on: - mongodb - elasticsearch ports: # graylog web interface and rest api - 9000:9000 # syslog tcp - 1514:1514 # syslog udp - 1514:1514/udp # gelf tcp - 12201:12201 # gelf udp - 12201:12201/udp
其中106.13.35.42是我的外网ip,本地服务使用127.0.0.1即可。
其他方式可以查看官方文档,
3.配置graylog
在浏览器访问http://ip:9000,如图:
这里默认用户名密码都是admin,进入后如图所示。
选择system按钮中的input,录入一个输入源,如图
这里以gelf udp为例,在图中位置选择gelf udp,选择完成后点击launch new input,如图
在node处选择自己安装的,剩下的就根据需要填写即可,如图
保存完成后如图,到这里就已经配置完成了。
4.springboot日志输出到graylog
这里分别举例logback日志和log4j2日志。
4.1 logback日志
这里使用的logback-gelf向graylog输出日志,在github上有对logback-gelf的详细使用介绍,这里只是简单举例。github地址:。
新建项目,加入logback-gelf依赖,pom文件如下:
<?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>org.springframework.boot</groupid> <artifactid>spring-boot-starter-parent</artifactid> <version>2.1.4.release</version> <relativepath/> <!-- lookup parent from repository --> </parent> <groupid>com.dalaoyang</groupid> <artifactid>springboot2_graylog</artifactid> <version>0.0.1-snapshot</version> <name>springboot2_graylog</name> <description>springboot2_graylog</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-test</artifactid> <scope>test</scope> </dependency> <dependency> <groupid>de.siegmar</groupid> <artifactid>logback-gelf</artifactid> <version>2.0.0</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-maven-plugin</artifactid> </plugin> </plugins> </build> </project>
加入logback日志配置,新建logback-spring.xml,内容如下:
<configuration> <conversionrule conversionword="clr" converterclass="org.springframework.boot.logging.logback.colorconverter" /> <conversionrule conversionword="wex" converterclass="org.springframework.boot.logging.logback.whitespacethrowableproxyconverter" /> <conversionrule conversionword="wex" converterclass="org.springframework.boot.logging.logback.extendedwhitespacethrowableproxyconverter" /> <property name="console_log_pattern" value="${console_log_pattern:-%clr(%d{yyyy-mm-dd hh:mm:ss.sss}){faint} %clr(${log_level_pattern:-%5p}) %clr(${pid:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${log_exception_conversion_word:-%wex}}"/> <appender name="stdout" class="ch.qos.logback.core.consoleappender"> <encoder> <pattern>${console_log_pattern}</pattern> <charset>utf-8</charset> </encoder> </appender> <appender name="gelf" class="de.siegmar.logbackgelf.gelfudpappender"> <grayloghost>106.13.35.42</grayloghost> <graylogport>12201</graylogport> </appender> <!-- 控制台输出日志级别 --> <root level="info"> <appender-ref ref="gelf" /> <appender-ref ref="stdout" /> </root> </configuration>
启动项目,当前项目端口是8081,查看graylog控制台如图:
4.2 log4j2日志
log4j2日志使用的是log4j2-gelf依赖,github上面也有对应的介绍,pom文件如下:
<?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>org.springframework.boot</groupid> <artifactid>spring-boot-starter-parent</artifactid> <version>2.1.4.release</version> <relativepath/> <!-- lookup parent from repository --> </parent> <groupid>com.dalaoyang</groupid> <artifactid>springboot2_graylog_log4j</artifactid> <version>0.0.1-snapshot</version> <name>springboot2_graylog_log4j</name> <description>springboot2_graylog_log4j</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-test</artifactid> <scope>test</scope> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter</artifactid> <exclusions> <exclusion> <artifactid>spring-boot-starter-logging</artifactid> <groupid>org.springframework.boot</groupid> </exclusion> </exclusions> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-log4j2</artifactid> </dependency> <dependency> <groupid>org.graylog2.log4j2</groupid> <artifactid>log4j2-gelf</artifactid> <version>1.3.1</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-maven-plugin</artifactid> </plugin> </plugins> </build> </project>
创建log4j2-spring.xml进行配置输出日志信息,如下:
<?xml version="1.0" encoding="utf-8"?> <configuration status="off" packages="org.graylog2.log4j2"> <properties> <property name="log_pattern">%d{yyyy-mm-dd hh:mm:ss:sss} - %-5level - %pid - %t - %c{1.}:%l - %m%n</property> </properties> <appenders> <console name="console" target="system_out" follow="true"> <thresholdfilter level="trace" onmatch="accept" onmismatch="deny" /> <patternlayout pattern="${log_pattern}"/> </console> <gelf name="gelfappender" server="106.13.35.42" port="12201" hostname="appserver01.example.com"> <patternlayout pattern="%logger{36} - %msg%n"/> <filters> <filter type="markerfilter" marker="flow" onmatch="deny" onmismatch="neutral"/> <filter type="markerfilter" marker="exception" onmatch="deny" onmismatch="accept"/> </filters> <!-- additional fields --> <keyvaluepair key="foo" value="bar"/> <keyvaluepair key="jvm" value="${java:vm}"/> </gelf> </appenders> <loggers> <root level="info"> <appenderref ref="gelfappender"/> <appenderref ref="console"/> </root> </loggers> </configuration>
这个项目使用的端口号是8888,可以在日志中清晰的看到。
5. elk vs graylog
这里仅以日志收集为例,简单说一下二者之间的选择,我个人的建议就是取决于现有技术栈,比如现在就有现成的mongodb,那么选择graylog可以节省不少成本,elk类似,不要盲目的追求技术而选择。
6. 源码
springboot2_graylog源码地址:
springboot2_graylog_log4j源码地址:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
推荐阅读
-
SpringBoot使用Graylog日志收集的实现示例
-
使用Log4j为项目配置日志输出应用详解以及示例演示的实现分析
-
SpringBoot继承LogStash实现日志收集的方法示例
-
SpringBoot使用JWT实现登录验证的方法示例
-
Yii使用DbTarget实现日志功能的示例代码
-
SpringBoot里使用Servlet进行请求的实现示例
-
使用 EasyCode生成springboot+mybatis基础程序的实现示例
-
SpringBoot使用切面+注解实现对所有请求的日志记录到数据库中
-
SpringBoot使用切面+注解实现对所有请求的日志记录到数据库中
-
使用Log4j为项目配置日志输出应用详解以及示例演示的实现分析