日志概念及作用
日志是记录系统运行过程中各种重要信息的文件,在系统运行过程中由各进程创建并记录。
日志的作用是记录系统的运行过程及异常信息,为快速定位系统运行中出现的问题及开发过程中的程序调试问题提供详细信息。
日志处理的机制有如下两点:
自动记录机制
日志的记录由系统自动完成。如果日志被手工删除,系统会重新创建日志。
自动备份机制
日志大小有一定的限制,当日志大小超过规定值时,系统会自动备份日志。
备份日志时一般遵循如下规则:
一般情况下不应手工删除日志,只有对日志备份后,才可以手工删除日志。日志删除后,相应的进程重启后系统会重新创建日志。
对于重要的日志,应定期手工将其备份到磁带。
对于一般的日志,在需要时备份。备份时,先将日志复制到备份目录,再将日志压缩打包,备份到磁带。
日志类型
介绍日志的类型及日志简要信息说明。
运行日志
运行日志记录系统运行过程中的关键事件和系统故障。
运行日志的记录包括但不限于以下场景:
系统启动成功或失败。
系统关闭。
连接 成功或失败。
向网管注册网元/模块成功或失败。
连接数据库失败。
License加载失败。
所有发送告警的场景。
执行超过一定时间限制的SQL语句。
运行日志主要用于定位系统级故障,主要用户为局方维护工程师和XXX维护工程师。
状态日志
状态日志主要记录系统处理用户级请求失败的信息,包括界面请求引起的接口调用、主要处理流程及失败点的错误描述信息。
例如新建定价计划过程中:
如下“MSG”关键字表示界面请求引起的接口调用:
[Thread-51] 2008-08-08 15:42:20 | INFO | | 1218181268818643 | *********[MSG]Receive a request from web client. | …如下“Begin to/ Check”等信息表示主要的处理流程:
[Thread-51] 2008-08-08 15:42:20 | INFO | | 1218181268818643 | ******Begin to add pricePlan with tariffs and optional productRentAttrs.
2008-08-08 15:42:20 | INFO | | 1218181268818643 | ******Check product status. | productId=201612
……以下为失败点的错误描述:
[Thread-51] 2008-08-08 15:42:20 | INFO | | 1218181268818643 | ******Add pricePlan with tariffs and optional productRentAttrs unsuccessfully,throw Exception….状态日志中不记录处理成功的请求信息。
状态日志采用缓存功能记录日志信息,记录过程如图1所示。
图1 状态日志的缓存功能
说明:
由于状态日志缓存功能为本版本的新增功能,部分继承的业务可能不支持。
状态日志主要用于定位用户级故障,主要用户为局方维护工程师和XXX维护工程师。
调测日志
调测日志用于记录详细的程序运行轨迹。
调测日志的使用包括但不限于以下场景:
开发阶段:开发人员可以使用调测日志调试程序是否出现错误。
软件安装、测试、联调阶段:测试人员或维护工程师可以使用调测日志定位问题。
运行阶段:维护工程师可以使用 工具过滤输出某一个请求的调测日志,然后根据调测日志定位用户级错误。
调测日志主要用于定位用户级故障,主要用户为开发人员、局方维护工程师和XXX维护工程师。
调测日志中会包含状态日志的信息,状态日志和调测日志的关系如图2所示。
图2 状态日志和调测日志的关系图
跟踪日志
跟踪日志用于记录使用消息跟踪工具后记录到本地文件的消息内容。
是提供的统一消息跟踪工具。消息跟踪就是对网元间或网元内部模块间的呼叫、消息的传送和处理过程进行跟踪,根据跟踪结果了解消息传递和通信情况,帮助定位和分析故障。
当收到异常消息时,用跟踪日志来进行问题定位。
跟踪日志的用户为局方维护工程师和XXX维护工程师。
操作日志
操作是指操作维护人员发起、系统定时任务发起的指令,而操作日志则是对这些操作的记录。
操作日志的记录场景包括但不限于以下场景:
说明:
主要记录增、删、改操作,不记录一般的查询操作。
系统管理员进行功能的配置或修改,如菜单配置、日志级别设置等。
系统管理员进行国际化设置、业务字典设置、货币设置等。
机构管理员进行组织机构信息维护、人员信息维护、权限分配等。
业务人员进行产品管理操作。
库存管理人员进行资源入库操作。
定时任务自动触发执行的业务。
维护人员进行构件包部署、卸载操作。
维护人员通过配置工具修改系统配置信息。
操作日志的定位是为局方提供操作员的操作轨迹,即谁、什么时候、做了什么、操作结果等信息。
安全日志
安全日志主要记录系统用户(指包括系统管理员、操作维护员、系统监控员等)登录、注销、鉴权、锁定、解锁、文件加解密、口令修改等操作信息。
安全日志的定位是为局方提供系统的安全审计信息。
用户日志
用户日志主要记录业务终端用户的业务相关流程信息。
说明:
目前系统暂时没有记录用户日志信息。
双机日志因机型不同,具体的存储路径也不同:
ATAE机型:/var/VRTSvcs/log
IBM机型:/usr/sbin/cluster/utilities/ocspkg
HP机型:/etc/cmcluster/ocspkg
日志中各字段的含义
字段名称
字段说明
Thread Number
线程号。
Log Time
日志产生的时间。
格式如下:
YYYY-MM-DD hh:mm:ss
Log Level
日志级别。
字符串,取值范围:
DEBUG:跟踪运行轨迹。
INFO:系统正常运行的信息。
NOTICE:通知。
WARN:警告。
ERROR:一般错误。
CRITICAL:危急。
ALERT:系统不可用。
EMERGENCY:必须立刻采取行动,否则系统不可用。
FlowID
请求ID。
每一个请求都有唯一的ID,同一个请求下,所有记录的日志信息的请求ID都相同。
Module Name
表示记录该日志的程序所在的模块。
说明:
该字段除了操作日志(具体参考操作日志部分)之外,均使用BUS、LSB、XXX、RSB几个模块名称。
Result
业务操作完成的返回结果。
User
用户的唯一标识。
Static ID
静态信息ID。
用于支持国际化时使用。
Static Text
静态信息ID对应的静态信息文本。
与StaticID对应,描述该条日志主要信息,结构为“动词+宾语”。
AppendInfo
附加信息。
主要用于描述静态信息不能表达的动态信息部分。
附加信息格式:key1=value2,key2=value2。
说明:
如果某条日志没有附加信息,则不输出最后一个分隔符“|”。
Text
日志主要信息。
描述该条日志的主要信息,结构为“动词+宾语”。
TraceCode
Trace上的跟踪任务编码。
IsSender
是否为发生方。
取值如下:
0:本模块为消息发送方。
1:本模块为消息接收方。自己调用自己的情况填写为1,即是接收方。
PeerID
对端标识。
Message
跟踪消息内容。
ExtInfo
跟踪消息的扩展信息。
ClientIP
操作员客户端的IP地址。
OperationName
操作名称。如新建,保存等。
ObjectType
被操作对象类型。如产品、定价计划等。
ObjectID
被操作对象标识。
Operator
操作者。
运行日志格式如下:
[Thread Number] | [Log Time] | [Log Level] | [Module Name] | [Static ID] | [Static Text] | [AppendInfo]
例如:
[Thread-51] 2008-01-10 01:39:31 | INFO | RSB | 405310001 | Starting the RSB began | Start to initialize RSB. version=ENIP V100R002C01B207 RSB_Server. Build date 2007-12-25.
状态日志格式如下:
[Thread Number] | [Log Time] | [Log Level] | [Module Name] | [FlowID] | [Text] | [AppendInfo]
例如:
[Thread-51] 2008-08-13 09:54:06 | INFO | LSB | 12185924460943391 | *********Begin to run task.
调测日志格式如下:
[Thread Number] | [Log Time] | [Log Level] | [Module Name] | [FlowID] | [Text] | [AppendInfo]
例如:
[http/https-0.0.0.0-7783-10] 2008-08-21 00:08:18 | DEBUG | XXX | 12192476910243 | [Core]Call DAO's method.跟踪日志
XXX的跟踪日志格式如下:
[Log Time] | [Log Level] | [Module Name] | [FlowID] | [TraceCode] | [Message]
例如:
2012-01-30 11:42:43.204 | INFO | XXX | 11954320 | Trace task commited successfully. Task id(s) is:{6}, task parameter(s) is: {TaskName=Retry to refresh cache} | com.huawei.XXX.commons.util.trace.TraceMgr.commit(TraceMgr.java:286)操作日志
XXX的操作日志格式如下:
[Thread Number] | [Log Time] | [Log Level] | [Module Name] | [Operator] | [Client IP] | [OperationName] | [ObjectType] | [ObjectID1] | [ObjectID2] | [ObjectID3] | [Result] | [StaticID] | [StaticText] | [AppendInfo]
例如:
[Thread-51] 2008-08-05 17:06:01 | INFO | XXX | sysadmin | 10.10.10.1 | Modify | Pricing | Success | 405213310 | save expression success | action=saveExpress安全日志
XXX的安全日志格式如下:
[Thread Number] | [Log Time] | [Log Level] | [Module Name] | [Operator] | [Result] | [Static ID] | [Static Text] | [appendInfo]
例如:
[Thread-51] 2008-08-05 17:04:12 | INFO | XXX | sysadmin | Success | 405071001 | Login success. | XXX_login = login success!用户日志
XXX的用户日志格式如下:
[Thread Number] | [Log Time] | [Log Level] | [Module Name] | [User] | [Static ID] | [Static Text] | [appendInfo]
问题定位一般流程
收到问题定位任务。
简单分析问题的类型。
根据已有的案例和经验对问题原因进行预估。
根据预估的结果,使用Trace工具设置跟踪任务。
重新进行业务操作,以获取相应的跟踪日志。
根据跟踪任务中的跟踪ID,从跟踪日志中提取该任务相关的日志信息。
在日志信息中查找Error级别的日志信息。
根据Error的相关信息分析可能的错误原因,并进行相应处理。
通过搜索关键标识“***”定位到当前操作的业务流程。
通过“Begin to xxx/End to xxx”关键字符定位业务中断位置。
根据“MSG”关键字判断是否为接口问题。如果是,进行相应处理;否则,继续检查。
根据“SQL”关键字判断是否为数据库操作问题。如果是,进行相应处理;否则,继续检查。
获取日志信息中的Error Code。
根据错误信息中的Error Code,参考《 错误码参考》进行问题定位并进行处理。
判断问题是否得到解决。
如果已经解决,则操作结束。
如果还不能解决,请执行XXX。
提交给开发进行问题定位。
流程关键字
在 日志中,通过*字符和关键字来体现业务流程的走向。
日志类型
介绍XXX日志的类型及日志简要信息说明。
运行日志
XXX的运行日志记录XXX系统运行过程中的关键事件和系统故障信息。
运行日志需要上报到网管,用于监控系统的运行情况。
需要记录运行日志的场景如下:
系统运行过程中的异常状态和异常动作
例如主备倒换、存储过程执行失败、定时器超时、系统死循环等。
系统进程运行过程中的关键事件
例如系统启动、系统关闭、中断处理、任务切换、系统重启等。
系统关键线程的运行情况
例如线程启动、线程挂起、线程恢复、线程退出等。
系统资源的相关信息
例如CPU、内存和硬盘的过载和恢复信息、资源破坏信息、资源操作错误信息等。
通信中断和恢复信息
例如板间通信中断等。
异常消息处理轨迹
正常消息处理轨迹根据日志级别控制记录,0~4级不记录正常消息处理轨迹。
状态日志
XXX的状态日志记录进程相关的统计信息以及用户级的错误。
统计信息如:
预处理收到的DCC消息个数。
语音服务收到的本地接口调用次数。
定期事务实时订购处理成功个数等。
用户级的错误如:
用户在系统中不存在。
用户没有订购关系。
用户没有入帐关系等。
调测日志
XXX的调测日志记录XXX系统内部处理流程的信息,如业务逻辑(函数)的进入和退出、业务逻辑出错时的详细信息等。
跟踪日志
跟踪日志用于记录使用XXX消息跟踪工具后记录到本地文件的消息内容。
XXX是XXX提供的统一消息跟踪工具。消息跟踪就是对网元间或网元内部模块间的呼叫、消息的传送和处理过程进行跟踪,根据跟踪结果了解消息传递和通信情况,帮助定位和分析故障。
当XXX收到异常消息时,用跟踪日志来进行问题定位。