当前位置: 首页 > 科技观察

Linux日志基础

时间:2023-03-15 13:56:11 科技观察

首先,我们将介绍有关Linux日志是什么、在哪里可以找到它们以及它们是如何创建的基础知识。如果您已经知道这一点,请随时跳到下一部分。LinuxSyslogLinux会自动为您创建许多有价值的日志文件。您可以在/var/log目录中找到它们。下面是该目录在典型Ubuntu系统上的样子:一些最重要的Linux系统日志包括:/var/log/syslog或/var/log/messages存储所有全局系统活动数据,包括引导消息。基于Debian的系统(如Ubuntu)将它们存储在/var/log/syslog中,而基于RedHat的系统(如RHEL或CentOS)将它们存储在/var/log/messages中。/var/log/auth.log或/var/log/secure存储来自可插入身份验证模块(PAM)的日志,包括成功登录、失败登录尝试和身份验证方法。Ubuntu和Debian将身份验证信息存储在/var/log/auth.log中,而RedHat和CentOS将其存储在/var/log/secure中。/var/log/kern存储内核错误和警告数据,这对于解决与自定义内核相关的问题特别有用。/var/log/cron存储有关cron作业的信息。使用此数据确保您的cron作业成功运行。DigitalOcean有关于这些文件的完整教程,展示了rsyslog如何在RedHat和CentOS等常见发行版上创建它们。该应用程序还会在此目录中写入日志文件。比如Apache、Nginx、MySQL等常见的服务器程序都可以在该目录下写入日志文件。其中一些日志文件是由应用程序本身创建的,其他的是通过系统日志创建的(见下文)。什么是系统日志?Linux系统日志文件是如何创建的?答案是通过syslog守护进程,它在syslog套接字/dev/log上侦听日志消息并将它们写入适当的日志文件。“syslog”一词有多种含义,通常用来缩写以下几个名称之一:Syslogdaemon—用于接收、处理和发送syslog消息的程序。它可以将系统日志远程发送到中央服务器或写入本地文件。常见示例包括rsyslogd和syslog-ng。在这种用法中,人们经常说“发送到系统日志”。系统日志协议—一种传输协议,指定如何通过网络发送日志以及系统日志消息的数据格式定义(见下文)。它在RFC-5424中正式定义。文本日志的标准端口为514,加密日志的标准端口为6514。在这种用法中,人们常说“pipethroughsyslog”。系统日志消息—系统日志格式的日志消息或事件,其中包括带有多个标准字段的消息标头。在这种用法中,人们常说“发送系统日志”。Syslog消息或事件包括一个带有多个标准字段的消息头,以便于分析和路由。它们包括时间戳、应用程序的名称、信息源在系统中的分类或位置以及事件的优先级。下面显示的是一条日志消息,其中包含来自控制远程登录系统的sshd守护进程的系统日志标头,描述了一次失败的登录尝试:<34>12003-10-11T22:14:15.003Zserver1.comsshd--pam_unix(sshd:auth):认证失败;logname=uid=0euid=0tty=sshruser=rhost=10.0.2.2Syslog格式和字段每个syslog消息都包含一个用于结构化数据字段的A标头,从而更容易分析和路由事件。这是我们用于生成上面的系统日志示例的格式,您可以将每个值匹配到特定的字段名称。<%pri%>%protocol-version%%timestamp:::date-rfc3339%%HOSTNAME%%app-name%%procid%%msgid%%msg%n下面你会看到一些最常用的系统日志字段:时间戳时间戳(上例中的2003-10-11T22:14:15.003Z)表示消息在系统中发送的时间和日期。在另一个系统上接收此信息时,此时间可能会有所不同。上面例子中的时间戳可以分解为:2003-10-11年月日。T是timestamp的必填元素,分隔日期和时间。22:14:15.003是24小时格式的时间,包括进入下一秒的毫秒数(003)。Z是一个可选元素,指的是UTC时间,除了Z,这个例子还可以包含一个偏移量,比如-08:00,表示时间从UTC偏移8小时,也就是PST时间。Hostname主机名字段(对应上例中的server1.com)是指发送消息的主机或系统的名称。应用名称字段(对应上例中的sshd:auth)是指系统发送消息的程序名称。事件是。它由两个数字字段组成:设备字段和紧急字段。紧急字段的范围从7(调试类型事件)到0(紧急)。设备字段描述了哪个进程创建了事件。它的范围从0(内核信息)到23(本机应用程序使用)。Pri有两种输出方式。第一个由单个数字表示,可以通过将设备字段的值乘以8并加上紧急字段的值来计算:(设备字段)(8)+(紧急字段)。第二个是pri文本,将输出为“设备字段.紧急字段”的字符串。后一种格式更容易阅读和搜索,但占用更多存储空间。