目录

  • 案例
  • 排查
  • 优化解决

案例

某天,可爱的产品经理跑过来对陈皮说,一个使用了好久,近期也未发过版的xx服务挂了!!需要赶紧处理下,并输出事故报告。

服务挂了,要尽快恢复,首先肯定使用重启大法。果不其然,运维人员以迅雷不及掩耳之势已经将服务重启了,并且服务运行也正常了。

就只剩输出事故报告了,因为作为一个内部使用服务,于是没接入ELK日志分析平台,然而在向运维人员将服务的日志文件下载下来分析的时候,运维人员反馈没有日志了,就只剩当天重启后的一个日志文件了!!!

没有了日志,如何输出事故报告,这不是要拿程序员祭天??好家伙,直呼好家伙!!

排查

首先,想到的办法肯定是要先甩锅啦!!甩锅运维,是不是你使用万能命令rm -rf /了。然而,倔强的运维死活不承认,那只能另寻他法。

既然不是人为删除,那会不会是服务器上有定时清理日志文件的脚本程序,经排查不会对此服务下的日志进行清理。

既然排除了他杀,那会不会是自杀呢?于是只能分析工程本身了。因为此项目原先是其他人开发维护的,于是陈皮pull了此工程,打开了日志配置文件logback.xml,分析是有将日志输出到本地日志文件中。其二,也对日志文件按天按大小切割保存,即单个文件大小上限50MB,并且保存最近7天的日志文件,属实没毛病啊,部分配置信息如下:

<property name="maxHistory" value="7" />
<property name="maxFileSize" value="50MB" /><appender name="logFile"class="ch.qos.logback.core.rolling.RollingFileAppender"><File>./logs/server.log</File><rollingPolicyclass="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><FileNamePattern>./logs/server%d{yyyy-MM-dd}_%i.log</FileNamePattern><MaxHistory>${maxHistory}</MaxHistory><timeBasedFileNamingAndTriggeringPolicyclass="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><maxFileSize>${maxFileSize}</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy><encoderclass="ch.qos.logback.classic.encoder.PatternLayoutEncoder"><charset>UTF-8</charset><pattern>${layout}</pattern></encoder>
</appender>

于是看能不能帅锅给可爱的产品经理,询问产品经理什么时候发现的这个问题,最近一次使用了什么功能。产品经理反馈今天想登录这个系统导出一些分析数据,想给开发多提几个需求,上一次使用这个系统是过年前几天的时候了。

好家伙,上一次使用都是年前时候了,可能这服务挂了好长一段时间了,因为很少人用,所以没发觉。不过即使年前挂了,也会至少保留服务挂当天前7天的日志文件啊。

这时,想到向运维要日志文件时候,运维已经将服务重启了,根据工程日志配置文件的配置信息,真相水落石出了。

原来服务早就已经挂了,而且挂了至少有7天了,并且工程日志配置保存的最长时间是7天,服务一重启,根据配置策略,直接将7天前的日志文件全部清除了!!然后生成重启后当天的日志文件!所以,这锅谁来背?

再询问产品经理,也证实了这点。产品经理在年前使用此系统导出了一年将近几十万的数据,并且当时导出一直转圈圈,等待许久就直接关了系统。而且服务设置的JVM内存又不是很大,很有可能当时就OOM了。针对此问题,服务加大了内存,并且对导出数据量做了限制。

优化解决

为避免再次发生这样的事故,可以通过以下几个手段来解决:

  1. 灾备,对日志做多份备份处理,不仅要将日志保存在服务器本地文件,还需要将日志文件备份到其他地方或者接入ELK日志分析平台。
  2. 工程日志配置文件保存时长从7天扩大到30天,不过具体多久根据自身场景来设置。
  3. 服务出现事故,首先保留案发现场,对于日志和服务线程堆栈等信息进行保留,再恢复服务。
  4. 服务接入监控平台,出事故及时通知相关负责人,及时解决,避免滞后带来更严重的事故。

关于Logback日志相关知识,最近在看官网的文档学习,后续会整理一些有用的知识点发出来。

Logback官网地址:https://logback.qos.ch/

要求输出事故报告,线上日志文件却不见了!!相关推荐

  1. Nodejs线上日志部署

    Nodejs线上日志部署 Nodejs 被越来越多的使用到线上系统中,但线上系统没有日志怎么行呢. 一.forever记录日志 我的线上系统使用forever来启动服务,最开始就直接使用了foreve ...

  2. Linux 截取线上日志

    按日期截取线上日志命令 (1)首先,需清楚日志输出的时间日期格式,具体命令如下: sed -n '/6-5 00:00:00/,/6-5 16:30:31/'p catalina.log > t ...

  3. linux系统中怎么截取某一天的日志,Linux系统如何截取线上日志

    1.按香港云主机日期截取线上日志命令 (1)首先,需清楚日志输出的时间日期格式,具体命令如下: sed -n '/6-5 00:00:00/,/6-5 16:30:31/'p catalina.log ...

  4. 微信 日志服务器 并发大,微信高性能线上日志系统xlog剖析

    微信高性能线上日志系统xlog剖析 做移动开发的同学经常会遇到一个头疼的问题,就是当用户反馈一些问题,又比较冷僻难以复现的时候(不是Crash),常常就会陷入一筹莫展的境地.因此,很多人就研发了相关的 ...

  5. python输出日志文件_python将print输出的信息保留到日志文件中

    具体代码如下所示: import sys import os import sys import io import datetime def create_detail_day(): ''' :re ...

  6. 产业复苏|2020区块链与数字经济高峰论坛暨区块链战“疫”报告线上发布会召开...

    4月26日,产业复苏|2020区块链与数字经济高峰论坛暨区块链战"疫"报告线上发布会在北京隆重召开,本次大会通过线上形式举办. 本次大会在中国移动通信联合会区块链专委会.中国电子商 ...

  7. 线上日志集中化可视化管理:ELK

    本文来自网易云社区 作者:王贝 为什么推荐ELK: 当线上服务器出了问题,我们要做的最重要的事情是什么?当需要实时监控跟踪服务器的健康情况,我们又要拿什么去分析?大家一定会说,去看日志,去分析日志.是 ...

  8. 线上日志分析与其他一些脚本

    对一些线上常用的脚本进行了一下总结和说明,免得以后忘记了~ 一·线上发布API集群的代码脚本: #!/bin/bash #Author CCChost=' 10.44.22.113 10.44.22. ...

  9. linux查看后10000行的日志,查看线上日志常用命令

    cat 命令(文本输出命令) 通常查找出错误日志 cat error.log | grep 'nick' , 这时候我们要输出当前这个日志的前后几行: 显示file文件里匹配nick那行以及上下5行 ...

最新文章

  1. 科大星云诗社动态20201222
  2. 初探swift语言的学习笔记八(保留了许多OC的实现)
  3. boost::coroutine模块实现parallel的测试程序
  4. Windows同时安装Python2和Python3
  5. QtCreator5.12.6安装图文教程
  6. 数学如何杀死了雷曼兄弟
  7. mapbox 导航_寻宝风格导航地图 Treasure 诞生记 | Mapbox 地图设计思路
  8. 销售方法论居然来自公司战略!看看IBM、华为、SAP是怎么做的
  9. Qt编程环境下学习《OpenGL编程指南(原书第九版)》(一)
  10. 上海数学高考 计算机,编程已进入高考?别被广告文洗脑,编程并未纳入上海高考科目!...
  11. 二工大计算机专业,两电一邮与哈工大:计算机专业哪所实力最强?看完就知道...
  12. 集群和均衡负载[摘]
  13. 心田花开小学拼音复韵母ao、ou、iu读法教程
  14. java 用遗传算法解决图像二值化问题 找阈值
  15. cajviewer 卡顿
  16. PHP empty() 的判断
  17. 微软CRM系统二次开发步骤以及注意事项
  18. OPENCV针对图像EXIF旋转问题
  19. 【autojs源码】App自动向上翻页、自动刷视频 改进版/可连续刷
  20. 怎么区分odd和even

热门文章

  1. RK3399开机LOGO替换及ADB的使用技巧
  2. 国产工业CPU平台,米尔基于全志T507-H开发板的实时性分析与测试
  3. java语言程序设计教程第三版答案,看完跪了
  4. AI医药论文笔记--Deep learning improves prediction of drug–drug and drug–food interactions
  5. vue2+高德地图绘制多个圆形覆盖物和多边形覆盖物
  6. stm32 无线遥控HX1838或8路低电平解码接收模块Hal库代码程序
  7. 大文件分片上传、断点续传
  8. 关于打印出现空白的问题
  9. hibernate3 与hibernate4的一处不同
  10. iphone开发之常用代码:不断更新