当前位置: 首页 > wzjs >正文

网站改版需要注意网络接入服务商是什么意思

网站改版需要注意,网络接入服务商是什么意思,网站ui设计模板,新的电商平台有哪些Loki日志排查实战:从ERROR日志丢失到流限制问题的完整解决过程 问题背景 在我们的微服务架构中,使用了经典的日志收集链路:K8s容器 → Promtail → Loki → Grafana。某天发现了一个奇怪的现象:同一个Pod的ERROR日志中&#xff…

Loki日志排查实战:从ERROR日志丢失到流限制问题的完整解决过程

问题背景

在我们的微服务架构中,使用了经典的日志收集链路:K8s容器 → Promtail → Loki → Grafana。某天发现了一个奇怪的现象:同一个Pod的ERROR日志中,只有特定类的日志能在Grafana中查到,其他类的ERROR日志都"消失"了。

具体表现为:

  • org.apache.catalina.core.ContainerBase.[Tomcat].[localhost].[/].[dispatcherServlet] 的ERROR日志能查到
  • org.pjlab.xscholar.service.impl.RecommendationAPIServiceImpl 的ERROR日志查不到

排查过程

第一步:确认原始日志输出

首先通过 kubectl logs 确认原始日志确实都正常输出了:

kubectl logs <pod-name> -n <namespace> | grep ERROR

发现两条ERROR日志都正常打印到了控制台,说明问题不在应用层面。

第二步:检查日志配置

检查了 logback-spring.xml 配置,发现了一个潜在问题:

<!-- test,daily环境的配置 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>INFO</level>
</filter>

这个过滤器可能影响ERROR日志的输出。但进一步分析发现,ERROR级别应该能通过INFO过滤器。

第三步:统一日志格式

发现不同环境使用了不同的日志格式:

  • dev,prod 环境:JSON格式
  • test,daily 环境:普通文本格式

这种不一致可能导致Promtail解析失败。于是统一改为JSON格式:

<encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder"><providers><pattern><pattern>{"appName": "${appName}","time": "%date{yyyy-MM-dd HH:mm:ss.SSS}","level": "%level","pid": "${PID:-}","thread": "%thread","class": "%logger","method": "%method","line": "%line","message": "%message","stack_trace": "%xEx{2000}","traceId": "%X{TRACE_ID}"}</pattern></pattern></providers>
</encoder>

第四步:检查Promtail配置

检查Promtail配置时发现了一个关键问题:

pipeline_stages:- match:selector: '{log_format="multiline"}'stages:# JSON解析逻辑- labels:  # 将解析出的字段作为标签推送time: "time"level: "level"thread: "thread"class: "class"method: "method"line: "line"traceId: "traceId"message: "message"stack_trace: "stack_trace"

问题所在:将太多字段设置为标签,导致Loki流数量激增。

第五步:发现真正的错误

在Loki的日志中发现了关键错误信息:

level=warn ts=2025-06-25T09:56:52.558387834Z caller=grpc_logging.go:43 
err="rpc error: code = Code(429) desc = Maximum active stream limit exceeded, 
reduce the number of active streams (reduce labels or reduce label values), 
or contact your Loki administrator to see if the limit can be increased"

Loki流机制详解

什么是Loki流(Stream)?

Loki中的**流(Stream)**是日志存储的基本单位。每个流由一组标签(labels)唯一标识,包含时间序列的日志条目。

流的创建规则

Loki会为每个唯一的标签组合创建一个新的流。例如:

# 原始配置 - 每个不同的class都会创建新流
labels:level: "ERROR"class: "org.pjlab.xscholar.service.impl.RecommendationAPIServiceImpl"method: "getArticleDetail"line: "177"thread: "http-nio-10019-exec-10"traceId: "1e224f52bcaf"

如果有100个不同的类,每个类有10个不同的方法,每个方法有20个不同的行号,每个线程有50个不同的traceId,那么理论上可能创建:

100 × 10 × 20 × 50 = 1,000,000 个流

流限制的影响

当流的数量超过Loki的限制时:

  1. 新的流无法创建
  2. 相关日志被丢弃
  3. 返回429错误

这就是为什么某些ERROR日志"消失"的原因。

为什么INFO日志没有被屏蔽?

INFO日志通常来自固定的几个类(如Spring框架类),流的数量相对稳定。而ERROR日志来自各种业务类,每个不同的类都会创建新的流,导致流数量急剧增加。

解决方案

方案一:减少标签数量(推荐)

只保留最重要的标签,其他字段作为日志内容:

pipeline_stages:- match:selector: '{log_format="multiline"}'stages:- json:expressions:log: log- regex:expression: "(?P<parsed_log>\\{.*\\})"source: log- json:source: parsed_log expressions:time: timelevel: levelthread: threadclass: classmethod: methodline: linemessage: messagestack_trace: stack_tracetraceId: traceId- labels:  # 只保留最重要的标签level: "level"class: "class"

方案二:只保留level标签(激进优化)

如果流数量仍然过多,可以只保留level标签:

- labels:  # 只保留level标签,最小化流数量level: "level"

方案三:增加Loki流限制

如果业务需要更多标签,可以增加Loki的配置:

limits_config:max_streams_per_user: 1000000  # 增加流限制max_global_streams_per_user: 1000000

最佳实践

1. 标签设计原则

  • 高基数字段不要作为标签:如traceId、thread、line等
  • 低基数字段适合作为标签:如level、namespace、app等
  • 查询频率高的字段适合作为标签:如level、class等

2. 监控流数量

定期监控Loki的流数量:

# 查看当前流数量
curl -s http://loki:3100/loki/api/v1/labels | jq '.data[]' | wc -l

3. 日志查询优化

使用优化后的配置,查询方式:

# 查询ERROR日志
{app="xscholar-be", level="ERROR"}# 查询特定类的ERROR日志
{app="xscholar-be", level="ERROR"} |= "RecommendationAPIServiceImpl"# 使用JSON解析查询详细信息
{app="xscholar-be", level="ERROR"} | json | class="org.pjlab.xscholar.service.impl.RecommendationAPIServiceImpl"

经验总结

1. 问题定位思路

  1. 从源头开始排查:确认应用日志输出正常
  2. 检查中间环节:验证日志格式和配置
  3. 查看错误日志:Loki/Promtail的错误日志往往包含关键信息
  4. 理解底层机制:了解Loki的流机制是解决问题的关键

2. 常见误区

  • 认为日志长度是问题:实际上流数量才是关键
  • 过度使用标签:每个标签都可能成倍增加流数量
  • 忽略错误日志:429错误明确指出了问题所在

3. 预防措施

  • 设计阶段就考虑标签策略
  • 定期监控流数量
  • 建立日志配置审查流程
  • 为不同环境制定不同的标签策略

结论

这次排查过程很好地展示了分布式系统中日志收集的复杂性。问题的根本原因是对Loki流机制理解不够深入,过度使用标签导致流数量超限。

通过减少标签数量,我们成功解决了ERROR日志丢失的问题,同时也优化了整体的日志收集性能。这个经验提醒我们,在设计和配置日志系统时,必须深入理解底层机制,合理设计标签策略。


关键词:Loki、Promtail、日志收集、流限制、标签设计、微服务监控


文章转载自:

http://xfifJC0u.kjnfs.cn
http://UVo3dOVc.kjnfs.cn
http://Pluks9sf.kjnfs.cn
http://LZrj4Lnj.kjnfs.cn
http://TT9PNF8V.kjnfs.cn
http://JE6r3FhE.kjnfs.cn
http://jiDp3oUF.kjnfs.cn
http://le5Ww5YO.kjnfs.cn
http://Ekqz4yKe.kjnfs.cn
http://8OA6rrAo.kjnfs.cn
http://c8rMrWRx.kjnfs.cn
http://oqDbV7RW.kjnfs.cn
http://bNEJDE3m.kjnfs.cn
http://t2TqO9se.kjnfs.cn
http://UJdbx66j.kjnfs.cn
http://BXVC2ZOc.kjnfs.cn
http://Ue66mjex.kjnfs.cn
http://EInT20P4.kjnfs.cn
http://gvy0DU1c.kjnfs.cn
http://bvpSkl0e.kjnfs.cn
http://lUQsvSmt.kjnfs.cn
http://DBvriz84.kjnfs.cn
http://OYgLLPJI.kjnfs.cn
http://njhkglJw.kjnfs.cn
http://VzEUjMRx.kjnfs.cn
http://icYtsPDn.kjnfs.cn
http://d9EVcbib.kjnfs.cn
http://nZ3OMsSF.kjnfs.cn
http://MAKyfX5H.kjnfs.cn
http://wELDyLVv.kjnfs.cn
http://www.dtcms.com/wzjs/676018.html

相关文章:

  • 网站 后台 设计做灯箱片的设计网站
  • 马克杯在线设计网站网络营销市场
  • 枣庄网站建设哪家强公司建网站多少钱
  • 网页游戏网站知乎wordpress获取指定目录的文章
  • 网站数据搬家建站系统软件有哪些
  • 阜阳市城乡建设局网站亚马逊购物
  • 合肥网站建设第一品牌国外网站建设官网
  • 网站添加微信支付功能wordpress分权限浏览器
  • php能开发大型网站网站被k是怎么回事
  • asp.net网站开发实例教程 下载武进网站建设平台
  • 网站开发程序员岗位职责营销型网站一个多少钱
  • 大连永锐网站哪家做的湖南企业注册app
  • 网站首页英文php企业网站开发方案
  • 自适应网站做百度推广重庆城市建设档案馆网站
  • 苏州建设职业培训中心网站建设银行手机版官方网站
  • 宁德市路桥建设有限公司网站用php做网站不用框架
  • 网站前端需要会什么厦门网站制作收费
  • 佛山做外贸网站案例广州域名备案
  • 哪个视频网站做视频赚钱wordpress评论限速
  • 如何分析一个网站的用户网站建设工期安排表
  • 官网设计报价上海seo网络推广渠道
  • 网站 维护大学电子商务网站建设方案
  • 做设计在哪个网站接单网站部分频道完全不收录了怎么做
  • 对网站内容建设的建议找个公司做网站需要注意什么条件
  • 网站开发是什么意思如何做网站做网站需要多少钱
  • 公司网站可以自己做百度营消 营销推广
  • 小学网站模板下载dede如何做网站
  • 广州微网站建设市场建设网站注册功能
  • wordpress 无法验证ssl徐州seo
  • 网站开发术语怎么做网站管理