详细描述:将ApiBoot Logging采集的日志上报到Admin

优采云 发布时间: 2022-10-31 05:15

  详细描述:将ApiBoot Logging采集的日志上报到Admin

  每个请求的详细信息可以通过 ApiBoot Logging 获取。在分布式部署方式中,一个请求可能会经过多个服务。如果每个服务独立保存请求日志信息,我们就无法实现统一控制。,并且会出现日志数据库和业务数据库不一致的情况(可能会使用多个数据源配置),因为这个问题,ApiBoot Logging提供了一个Admin概念,将客户端收到的每一条消息都转换成采集日志上报给管理员,管理员分析保存。

  创建一个日志管理项目

  由于ApiBoot Logging Admin可以汇总各个业务服务的请求日志(ApiBoot Logging),所以我们需要将各个业务服务采集订单的日志上报给Admin,所以应该独立部署。创建一个服务来专门采集请求日志并保存它们。

  初始化 Logging Admin 项目依赖项

  使用idea创建一个SpringBoot项目,pom.xml配置文件中的依赖如下:

  

org.springframework.boot

spring-boot-starter-web

org.minbox.framework

api-boot-starter-logging-admin

mysql

mysql-connector-java

com.zaxxer

HikariCP

org.minbox.framework

api-boot-starter-mybatis-enhance

  我们需要将采集的请求日志保存到数据库中,所以需要在项目中添加数据库驱动和数据库连接池相关的依赖。ApiBoot Logging Admin 通过 DataSource 操作数据,可以使用 ApiBoot MyBatis Enhance 的依赖。自动创建DataSource,摆脱手动创建,加入Spring IOC容器。

  添加 ApiBoot 统一版本依赖

  

org.minbox.framework

api-boot-dependencies

2.1.4.RELEASE

import

pom

  最新版本的 ApiBoot,请访问::api-boot-dependencies 查询。

  启用日志记录管理员

  添加 ApiBoot Logging Admin 依赖后,无法完全使用 Admin 功能。我们需要通过@EnableLoggingAdmin 注解来启用它,它会自动将Logging Admin 中需要的一些类注册到Spring IOC。将注解添加到入口类,如下所示:

  /**

* ApiBoot Logging Admin入口类

*/

@SpringBootApplication

@EnableLoggingAdmin

public class ApibootReportLogsByLoggingToAdminApplication {

public static void main(String[] args) {

SpringApplication.run(ApibootReportLogsByLoggingToAdminApplication.class, args);

}

}

  配置日志数据源

  application.yml配置文件中的数据源配置如下:

  # 服务名称

spring:

application:

name: apiboot-report-logs-by-logging-to-admin

# 数据源相关配置

datasource:

driver-class-name: com.mysql.cj.jdbc.Driver

url: jdbc:mysql://localhost:3306/test

username: root

password: 123456

type: com.zaxxer.hikari.HikariDataSource

<p>

# 服务端口号

server:

port: 8081</p>

  控制台打印报告日志

  ApiBoot Logging Admin 可以通过配置文件控制是否将请求日志信息采集打印到控制台。在 application.yml 配置文件中添加以下内容:

  api:

boot:

logging:

# Logging Admin相关配置

admin:

# 控制台显示采集的日志信息

show-console-report-log: true

  注意:不要将此与 ApiBoot Logging 提供的 api.boot.logging.show-console-log 配置混淆。

  美化控制台打印的报表日志

  api:

boot:

logging:

# Logging Admin相关配置

admin:

# 控制台输出时美化采集到的日志

format-console-log-json: true

  注意:不要将此与 api.boot.logging.format-console-log-json 配置混淆。

  初始化日志表结构

  ApiBoot Logging Admin 使用固定的表结构来存储请求日志和服务信息。建表语句如下:

  SET NAMES utf8mb4 ;

--

-- Table structure for table `logging_request_logs`

--

CREATE TABLE `logging_request_logs` (

`lrl_id` varchar(36) COLLATE utf8mb4_general_ci NOT NULL COMMENT &#39;主键,UUID&#39;,

`lrl_service_detail_id` varchar(36) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT &#39;服务详情编号,关联logging_service_details主键&#39;,

`lrl_trace_id` varchar(36) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT &#39;链路ID&#39;,

`lrl_parent_span_id` varchar(36) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT &#39;上级跨度ID&#39;,

`lrl_span_id` varchar(36) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT &#39;跨度ID&#39;,

`lrl_start_time` mediumtext COLLATE utf8mb4_general_ci COMMENT &#39;请求开始时间&#39;,

`lrl_end_time` mediumtext COLLATE utf8mb4_general_ci COMMENT &#39;请求结束时间&#39;,

`lrl_http_status` int(11) DEFAULT NULL COMMENT &#39;请求响应状态码&#39;,

`lrl_request_body` longtext COLLATE utf8mb4_general_ci COMMENT &#39;请求主体内容&#39;,

`lrl_request_headers` text COLLATE utf8mb4_general_ci COMMENT &#39;请求头信息&#39;,

`lrl_request_ip` varchar(30) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT &#39;发起请求客户端的IP地址&#39;,

`lrl_request_method` varchar(10) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT &#39;请求方式&#39;,

`lrl_request_uri` varchar(200) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT &#39;请求路径&#39;,

`lrl_response_body` longtext COLLATE utf8mb4_general_ci COMMENT &#39;响应内容&#39;,

`lrl_response_headers` text COLLATE utf8mb4_general_ci COMMENT &#39;响应头信息&#39;,

`lrl_time_consuming` int(11) DEFAULT NULL COMMENT &#39;请求耗时&#39;,

`lrl_create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT &#39;日志保存时间&#39;,

`lrl_request_params` text COLLATE utf8mb4_general_ci,

`lrl_exception_stack` text COLLATE utf8mb4_general_ci,

PRIMARY KEY (`lrl_id`),

KEY `logging_request_logs_LRL_SERVICE_DETAIL_ID_index` (`lrl_service_detail_id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT=&#39;请求日志信息表&#39;;

--

-- Table structure for table `logging_service_details`

--

CREATE TABLE `logging_service_details` (

`*敏*感*词*_id` varchar(36) COLLATE utf8mb4_general_ci NOT NULL,

`*敏*感*词*_service_id` varchar(200) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT &#39;上报服务的ID,对应spring.application.name配置值&#39;,

`*敏*感*词*_service_ip` varchar(50) COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT &#39;上报服务的IP地址&#39;,

`*敏*感*词*_service_port` int(11) DEFAULT NULL COMMENT &#39;上报服务的端口号&#39;,

`*敏*感*词*_last_report_time` timestamp NULL DEFAULT NULL COMMENT &#39;最后一次上报时间,每次上报更新&#39;,

`*敏*感*词*_create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT &#39;首次上报时创建时间&#39;,

PRIMARY KEY (`*敏*感*词*_id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT=&#39;上报日志的客户端服务详情&#39;;

  到目前为止,ApiBoot Logging Admin 已准备就绪。接下来,我们需要修改业务服务,将请求日志上报给 Logging Admin。

  向指定的日志记录管理员报告日志

  我们将修改使用ApiBoot Logging统一管理请求日志的源码文章,在application.yml中添加Logging Admin的地址,如下图:

  api:

boot:

# ApiBoot Logging 日志组件配置

<p>

logging:

# 配置Logging Admin地址

admin:

server-address: 127.0.0.1:8081</p>

  api.boot.logging.admin-service-address的配置格式为:Ip:Port。我们只需要修改这个地方,其他的工作交给ApiBoot Logging内部完成。

  测试

  我们以Application的形式启动ApiBoot Logging Admin和业务服务。

  使用 curl 访问测试地址如下:

  ~ curl http://localhost:8080/test\?name\=admin

你好:admin

  我们查看 ApiBoot Logging 管理控制台日志如下:

  Receiving Service: 【apiboot-unified-manage-request-logs -> 127.0.0.1】, Request Log Report,Logging Content:[

{

"endTime":1571641723779,

"httpStatus":200,

"requestBody":"",

"requestHeaders":{

"server-region":"JiNan",

"host":"localhost:8080",

"user-agent":"curl/7.64.1",

"accept":"*/*"

},

"requestIp":"0:0:0:0:0:0:0:1",

"requestMethod":"GET",

"requestParam":"{\"name\":\"admin\"}",

"requestUri":"/test",

"responseBody":"你好:admin",

"responseHeaders":{},

"serviceId":"apiboot-unified-manage-request-logs",

"serviceIp":"127.0.0.1",

"servicePort":"8080",

"spanId":"95a73ca0-831b-45df-aa43-2b5887e8d98d",

"startTime":1571641723776,

"timeConsuming":3,

"traceId":"25a7de96-b3dd-48e5-9854-1a8069a4a681"

}

]

  我们看到了Logging Admin console打印的report request log,不确定这个request的log是否已经存入数据库。接下来,我使用命令行查看数据库的日志信息。

  查看 loggingservicedetails 表中的数据

  mysql> select * from logging_service_details\G;

*************************** 1. row ***************************

*敏*感*词*_id: b069366a-25dc-41ec-8f09-242d81755cd0

*敏*感*词*_service_id: apiboot-unified-manage-request-logs

*敏*感*词*_service_ip: 10.180.98.112

*敏*感*词*_service_port: 8080

*敏*感*词*_last_report_time: 2019-10-21 02:14:26

*敏*感*词*_create_time: 2019-10-21 15:14:26

  logging_service_details 存储了上报请求日志的各个业务服务的基本信息。每个基本服务信息都会缓存在Logging Admin内存中,方便获取存放日志的service_id,根据ip端口service_id判断唯一性。保存一次。

  查看 loggingrequestlogs 表中的数据

  mysql> select * from logging_request_logs\G;

*************************** 1. row ***************************

lrl_id: c42761f6-b072-4744-8a17-d8e6097b85de

lrl_service_detail_id: b069366a-25dc-41ec-8f09-242d81755cd0

lrl_trace_id: 055329a0-cfc1-4606-baf0-4fb0cc905ba2

lrl_parent_span_id: NULL

lrl_span_id: aab83092-7749-4f88-8cb6-a949cc060197

lrl_start_time: 1571642065262

lrl_end_time: 1571642065286

lrl_http_status: 200

lrl_request_body:

lrl_request_headers: {"server-region":"JiNan","host":"localhost:8080","user-agent":"curl/7.64.1","accept":"*/*"}

lrl_request_ip: 0:0:0:0:0:0:0:1

lrl_request_method: GET

lrl_request_uri: /test

lrl_response_body: 你好:admin

lrl_response_headers: {}

lrl_time_consuming: 24

lrl_create_time: 2019-10-21 15:14:26

lrl_request_params: {"name":"admin"}

lrl_exception_stack: NULL

  敲黑板画重点

  在本章中,我们集成了ApiBoot Logging Admin,将业务服务的每个请求日志上报给Logging Admin,通过数据库保存请求日志,然后使用其他方法,可以通过spanId和traceId查看每个日志的日志-请求链路的从属关系和每个请求中耗时最多的span,可以准确优化*敏*感*词*能。

  作者的个人博客

  使用开源框架ApiBoot,助你成为Api接口服务架构师

  总结:一篇文章看懂SEO,完整SEO优化方案,SEO是什么,网站如何进行SEO

  一篇文章文章了解SEO,完整的SEO优化方案,什么是SEO,网站怎么做SEO

  前言:今天的文章文章是我这几天写的最满意的一篇。之前一直在整理自己的想法,不是很满意。

  个人站长是个很努力的人,需要全方位的前端技术,要网站编辑、对外推广和数据分析。一个完整的网站应该从一开始就制作出来,后期的SEO推广部分也要考虑,这也是站长必备的技能。

  一个网站 SEO应该包括四个主要环节:网站前端制作、网站编辑、网站推广、数据分析。当然,这是一个笼统的说法。

  一、第一部分,前端制作。第一点,一个网站策划前期,要做好网站扁平化结构,各种辅助导航,内容页面需要有相关的文章建议,简短的页面结构,尽可能多的有效部分。网站代码优化第二点、robots文件、二级导航设置、404模板设置、301重定向、网站地图、图片Alt、标题标签、网站TDK、关键词密度、个体关键字密度、H1H2H3 中的关键字、关键字强调、向反向链接添加 nofollow、向页面添加元标记、丰富的片段(微数据、微格式和 RDFa)。

  

  第二部分,网站编辑工作。需要确定文章、原创或伪原创的来源,扫描的秘书、报纸、杂志等都可以作为文章的来源。然后是文章内容的写法,标题怎么写,关键词怎么布局,第一个描述性文章怎么写。何时何地添加什么样的长尾 关键词。内页的锚文本设置和图片的alt属性都是网站编辑的工作。

  第三部分是网站的SEO外推,即发送外链。外部链接强调高质量,不发送垃圾外部链接。外链的主要渠道包括:友情链接、博客、论坛、采集、黄页等,如果能发百度知道、百度文库、百度体验等,当然是最好的,对于国内的百度SEO,这是最重要的外部链接资源。

  

  第四部分是数据分析。流量统计工具看个人喜好,百度统计,CNZZ等,可以分析来源关键词,用户访问路径,用户热点击图等。第二点是竞争对手分析,分析竞争对手的关键词文章 写的,外部链接怎么发,关键词怎么设置,内部链接怎么布局,网站的结构是什么,文章是什么发布频率、网站结构等方面。

  综合阐述:一个网站最核心的SEO就是关键词的排名,所以关键词是一个很重要的工作,目标关键词,品牌关键词、核心关键词的选择&gt;、长尾关键词、长尾关键词的挖掘,需要挖掘什么样的长尾关键词,以及如何点击长尾 关键词。这里推荐几种常用的关键词挖矿方法,非常实用。百度索引、百度下拉框、百度相关搜索、百度知道、百度站长工具、各大SEO优化分析平台

  写到这里,已经完成了一个完善权缺的优化方案,能提到的点已经尽量提了,具体的实现还需要稍微完善一下。里面讲的东西的要点可以看的透彻,一些基础的SEO已经可以很厉害了。比较满意的文章结束了。接下来,我会写下每个实现的细节,敬请期待!

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线