dalaoyang 2019-03-01 14:48:31 浏览 179 评论 0
云栖社区
Linux
日志
Apache
配置
- logger
- Maven
- logstash
- springboot
- class
- scope
- pattern
- utf-8
摘要: 本文介绍 SpringBoot 应用配合 ELK 进行日志收集. 1. 有关 ELK 1.1 简介 在之前写过一篇文章介绍 ELK 日志收集方案, 感兴趣的可以去看一看, 点击这里 -----> 《ELK 日志分析方案》. 这里在对 ELK 做一下简述, ELK 是有 Elastic 公司的三个组件配合进行日志收集, 分别是: Elasticsearch: 用于存储日志信息.
本文介绍 SpringBoot 应用配合 ELK 进行日志收集.
1. 有关 ELK
1.1 简介
在之前写过一篇文章介绍 ELK 日志收集方案, 感兴趣的可以去看一看, 点击这里 -----> 《ELK 日志分析方案》 https://www.dalaoyang.cn/article/82 .
这里在对 ELK 做一下简述, ELK 是有 Elastic 公司的三个组件配合进行日志收集, 分别是:
Elasticsearch: 用于存储日志信息.
Logstash: 用于收集, 处理和转发日志信息.
Kibana: 提供可搜索的 web 可视化界面.
当然, 现在很多都配合着 Beats 进行使用, 这里不做过多描述, 感兴趣的可以查看官网, https://www.elastic.co/cn/products/beats , 这里有很多对 Beats 的描述.
1.2 安装
有关 ELK 安装笔者之前都写过关于 Linux 环境下的安装, 如下:
《Linux 安装 Elasticsearch》 https://www.dalaoyang.cn/article/78
《Linux 安装 Logstash》 https://www.dalaoyang.cn/article/80
《Linux 安装 Kibana》 https://www.dalaoyang.cn/article/79
其他环境安装方式类似, 基本上都是下载压缩包解压这一套流程.
2.SpringBoot 日志输出到 Logstash
这里以 logback 日志为例, 新建项目, 在项目中加入 logstash-logback-encoder 依赖, 完整 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.2.RELEASE</version>
- <relativePath/> <!-- lookup parent from repository -->
- </parent>
- <groupId>com.dalaoyang</groupId>
- <artifactId>springboot_logstash</artifactId>
- <version>0.0.1-SNAPSHOT</version>
- <name>springboot_logstash</name>
- <description>springboot_logstash</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-devtools</artifactId>
- <scope>runtime</scope>
- </dependency>
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-test</artifactId>
- <scope>test</scope>
- </dependency>
- <dependency>
- <groupId.NET.logstash.logback</groupId>
- <artifactId>logstash-logback-encoder</artifactId>
- <version>5.3</version>
- </dependency>
- </dependencies>
- <build>
- <plugins>
- <plugin>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-maven-plugin</artifactId>
- </plugin>
- </plugins>
- </build>
- </project>
接下来新建一个 logback-spring.xml 文件, 配置 logback 日志信息, 注意这里配置的 destination 属性, 输出的要和 logstash 配置的对应上, 不然收集不上, 内容如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <configuration>
- <include resource="org/springframework/boot/logging/logback/base.xml" />
- <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
- <destination>127.0.0.1:4560</destination>
- <!-- 日志输出编码 -->
- <encoder charset="UTF-8"
- class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
- <providers>
- <timestamp>
- <timeZone>UTC</timeZone>
- </timestamp>
- <pattern>
- <pattern>
- {
- "logLevel": "%level",
- "serviceName": "${springAppName:-}",
- "pid": "${PID:-}",
- "thread": "%thread",
- "class": "%logger{40}",
- "rest": "%message"
- }
- </pattern>
- </pattern>
- </providers>
- </encoder>
- </appender>
- <root level="INFO">
- <appender-ref ref="LOGSTASH" />
- <appender-ref ref="CONSOLE" />
- </root>
- </configuration>
修改启动类, 加入一个 mvc 方法, 主要用于输出日志, 如下所示.
- package com.dalaoyang;
- import org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.SpringBootApplication;
- import org.springframework.Web.bind.annotation.GetMapping;
- import org.springframework.Web.bind.annotation.RestController;
- @SpringBootApplication
- @RestController
- public class SpringbootLogstashApplication {
- Logger logger = LoggerFactory.getLogger(SpringbootLogstashApplication.class);
- @GetMapping("test")
- public void test(){
- logger.info("测试初始一些日志吧!");
- }
- public static void main(String[] args) {
- SpringApplication.run(SpringbootLogstashApplication.class, args);
- }
- }
3.Logstash 配置
logstash 配置如下, 再次提醒一下, 输入要与刚刚配置的对应上, 输出为本地 es:
- input {
- tcp {
- mode => "server"
- host => "0.0.0.0"
- port => 4560
- codec => json_lines
- }
- }
- output {
- Elasticsearch {
- hosts => "localhost:9200"
- index => "springboot-logstash-%{ YYYY.MM.dd}"
- }
- }
4. 测试
打开 kibana 管理页面, 添加刚刚创建的索引, 如图所示.
然后进入发现页, 选择刚刚的索引, 如下所示.
接下来在浏览器多次访问刚刚在项目中输出日志的方法, 查询控制台, 如下所示.
然后在进入 kibana 查看, 不光是日志内容, 还有自定义的属性也显示出来了.
5. 源码
源码地址:
来源: https://yq.aliyun.com/articles/691912