.net core 微服务之日志落盘设计
目录
1、设计目标
- 对各个微服务的访问进行请求追踪,注重排查开发、线上问题
- 消息队列发送、多服务落盘,事后分析
- 日志分析
- 性能优化
2、日志流程
3、串联请求事务
3.1 请求ID
请求id:唯一标识一个Api请求链路。
为了分析前端的一条Api请求,需要在Api网关请求时产生一个guid,标识api的请求,并按照调用次序传递给微服务,微服务间可以互相调用,因此请求id按照调用次序依次传递。
3.2 处理服务器、服务
请求链路会穿越不同的服务器以及不同的服务,因此,需要记录服务器的IP或名称,服务的名称,这样在分析问题时可以快速找到故障点。
3.3 处理接口名
api的入口是唯一接口,但穿越不同节点后,实际执行接口会随着调用而改变,因此接口名需要被记录下来。
3.4 日志的发生时间
可提供时间索引,可按照时间进行分区分表等
3.5 接口返回状态码
状态码简单判断接口是否工作正常,有无错误,错误描述等
4、记录结构

5、RabbitMq队列

6、落盘
日志落盘采用RabbitMq的拉模式,考虑到日志的规模,如果采用推模式,很可能导致落盘阻塞,因此这里采用拉取模式,以落盘介质的流速为限制。
落盘可以采用多个微服务进行拉取,这样可以保证某个落盘服务故障后,仍然可以继续落盘。
落盘采用一个线程拉取队列,并存储在内存队列中,三个不同的落库线程,从内存队列中拉取并落库。
public static void Init()
{
_event = new AutoResetEvent(false);
_queue = new ConcurrentQueue<LogBase>();
new Thread(SaveLogInfo){IsBackground = true}.Start();
new Thread(SaveLogStat) { IsBackground = true }.Start();
new Thread(SaveLogBussiness) { IsBackground = true }.Start();
new Thread(SaveLogToDb) { IsBackground = true }.Start();
}
落库失败,可以降级到文件落盘。
7、性能优化
考虑到写库的性能限制,可以批量写库,使用insert value value批量方式能极大提高落库速度。
8、简单统计
可以快速分析api接口的访问次数以及响应的平均时间。

在此我向大家推荐一个微服务架构学习交流群。交流学习群号:864759589 里面会分享一些资深架构师录制的视频录像:高并发、高性能、分布式、微服务架构的原理,分布式架构等这些成为架构师必备的知识体系。

引用链接
.net core 微服务之日志落盘设计的更多相关文章
- .NET Core微服务之基于Exceptionless实现分布式日志记录
Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.Exceptionless极简介绍 Exceptionless 是一个开源的实时的日志收集框架,它可以应用在基于 ASP.NET,AS ...
- NET Core微服务之路:简单谈谈对ELK,Splunk,Exceptionless统一日志收集中心的心得体会
前言 日志,一直以来都是开发人员和运维人员最关心的问题.开发人员可通过日志记录来协助问题定位,运维人员可通过日志发现系统隐患,故障等定位问题.如果你的系统中没有日志,就像一个断了线的风筝,你永远不知道 ...
- 基于.NET CORE微服务框架 -surging的介绍和简单示例 (开源)
一.前言 至今为止编程开发已经11个年头,从 VB6.0,ASP时代到ASP.NET再到MVC, 从中见证了.NET技术发展,从无畏无知的懵懂少年,到现在的中年大叔,从中的酸甜苦辣也只有本人自知.随着 ...
- .NET Core微服务系列基础文章索引(目录导航Final版)
一.为啥要总结和收集这个系列? 今年从原来的Team里面被抽出来加入了新的Team,开始做Java微服务的开发工作,接触了Spring Boot, Spring Cloud等技术栈,对微服务这种架构有 ...
- .NET Core微服务之基于Consul实现服务治理
Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.Consul基础介绍 Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置.与其他分布式服务注册与发 ...
- .NET Core微服务之服务间的调用方式(REST and RPC)
Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.REST or RPC ? 1.1 REST & RPC 微服务之间的接口调用通常包含两个部分,序列化和通信协议.常见的序列化 ...
- .NET Core微服务之基于Polly+AspectCore实现熔断与降级机制
Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.熔断.降级与AOP 1.1 啥是熔断? 在广义的解释中,熔断主要是指为控制股票.期货或其他金融衍生产品的交易风险,为其单日价格波动幅度 ...
- .NET Core微服务之基于Ocelot实现API网关服务(续)
Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.负载均衡与请求缓存 1.1 负载均衡 为了验证负载均衡,这里我们配置了两个Consul Client节点,其中ClientServic ...
- .NET Core微服务之基于IdentityServer建立授权与验证服务
Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.IdentityServer的预备知识 要学习IdentityServer,事先得了解一下基于Token的验证体系,这是一个庞大的主题 ...
随机推荐
- 关于Excel导出实例(适合新手,比较详细)
需要源代码的可以加我微信好友gqljxg1514 1,首先配置依赖pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0&q ...
- wire [7:0] regAddr; 理解
首先要指出的是wire[7,0]a和wire[8,1]a这样的表达在verilog中是错误的,应该写成wire[7:0]a和wire[8:1]a wire[7:0]a表示定义了一个wire型数据,该数 ...
- keil的51项目创建
keil的51项目创建步骤: 工程创建: Project->New uVision Project 项目命名:如...test CPU->Atmel::AT89C51 文件创建: File ...
- Spring Data JPA 常用注解 @Query、@NamedQuery
1.@Transient @Transient表示该属性并非一个到数据库表的字段的映射,ORM框架将忽略该属性:如果一个属性并非数据库表的字段映射,就务必将其标示为@Transient,否则ORM框架 ...
- Git版本库创建(包含文件权限设置 Linux环境下)
确保git服务已安装成功,如果没有安装git服务查看:Git源码安装 Linux指定安装目录 1.创建git用户,并设置密码.并禁止git用户通过shell登录服务器(注意如果需要安装gitolite ...
- C语言笔记1
第一部分 计算机常识 1,人与计算机交流 2,人机交互方式 3,计算机的组成结构 4,计算机的系统组成 5,进制 6,程序和指令 第二部C开发环境 1 人与计算机交流 现实中人与人交流靠语言,那么人 ...
- 用turtle画图
turtle是python自带一个寓教于乐的小乌龟,可以控制乌龟移动(机器人),可以留下足迹. turtledemo里有许多官方例子.刚才随性而发做,看了介绍随手画了一个,有点像自动原包机,通过简单的 ...
- Redis使用规范
突出强调部分 [强制]key名不要包含特殊字符,如空格.换行.单双引号以及其他转义字符 [强制]拒绝bigkey(防止网卡流量.慢查询) [强制]控制key的生命周期,redis不是垃圾桶 [强制]技 ...
- AES对称加密和解密(转)
AES对称加密和解密 package demo.security; import java.io.IOException; import java.io.UnsupportedEncodingExce ...
- ssh 制作免密登录(免密登录多台服务器)
场景:服务器B (192.168.1.101)免密登录A(192.168.1.100)服务器 1.登录服务器B ①生产公钥 ssh-keygen -t rsa Enter file in which ...