在 Linux 中使用日志来排错

人们创建日志的主要原因是排错。通常你会诊断为什么问题发生在你的 Linux 系统或应用程序中。错误信息或一系列的事件可以给你提供找出根本原因的线索,说明问题是如何发生的,并指出如何解决它。这里有几个使用日志来解决的样例。

登录失败原因

如果你想检查你的系统是否安全,你可以在验证日志中检查登录失败的和登录成功但可疑的用户。当有人通过不正当或无效的凭据来登录时会出现认证失败, 这通常发生在使用 SSH 进行远程登录或 su 到本地其他用户来进行访问权时。这些是由插入式验证模块(PAM)来记录的。在你的日志中会看到像 Failed password 和 user unknown 这样的字符串。而成功认证记录则会包括像 Accepted password 和 session opened 这样的字符串。

失败的例子:


1

2

3

4

pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=10.0.2.2

Failed passwordforinvalid user hoover from 10.0.2.2 port 4791 ssh2

pam_unix(sshd:auth): check pass; user unknown

PAM service(sshd) ignoring max retries; 6 > 3

成功的例子:


1

2

3

Accepted passwordforhoover from 10.0.2.2 port 4792 ssh2

pam_unix(sshd:session): session openedforuser hoover by (uid=0)

pam_unix(sshd:session): session closedforuser hoover

你可以使用 grep 来查找哪些用户失败登录的次数最多。这些都是潜在的攻击者正在尝试和访问失败的账户。这是一个在 ubuntu 系统上的例子。


1

2

3

4

5

6

$ grep"invalid user"/var/log/auth.log| cut -d‘ ‘-f 10 | sort | uniq -c | sort -nr

23 oracle

18 postgres

17 nagios

10 zabbix

6 test

由于没有标准格式,所以你需要为每个应用程序的日志使用不同的命令。日志管理系统,可以自动分析日志,将它们有效的归类,帮助你提取关键字,如用户名。

日志管理系统可以使用自动解析功能从 Linux 日志中提取用户名。这使你可以看到用户的信息,并能通过点击过滤。在下面这个例子中,我们可以看到,root 用户登录了 2700 次之多,因为我们筛选的日志仅显示 root 用户的尝试登录记录。

日志管理系统也可以让你以时间为做坐标轴的图表来查看,使你更容易发现异常。如果有人在几分钟内登录失败一次或两次,它可能是一个真正的用户而忘记 了密码。但是,如果有几百个失败的登录并且使用的都是不同的用户名,它更可能是在试图攻击系统。在这里,你可以看到在3月12日,有人试图登录 Nagios 几百次。这显然不是一个合法的系统用户。

重启的原因

有时候,一台服务器由于系统崩溃或重启而宕机。你怎么知道它何时发生,是谁做的?

关机命令
如果有人手动运行 shutdown 命令,你可以在验证日志文件中看到它。在这里,你可以看到,有人从 IP 50.0.134.125 上作为 ubuntu 的用户远程登录了,然后关闭了系统。


1

2

3

Mar 19 18:36:41 ip-172-31-11-231 sshd[23437]: Accepted publickeyforubuntu from 50.0.134.125 port 52538ssh

Mar 19 18:36:41 ip-172-31-11-231 23437]:sshd[ pam_unix(sshd:session): session openedforuser ubuntu by (uid=0)

Mar 19 18:37:09 ip-172-31-11-231sudo: ubuntu : TTY=pts/1; PWD=/home/ubuntu; USER=root ; COMMAND=/sbin/shutdown-r now

内核初始化

如果你想看看服务器重新启动的所有原因(包括崩溃),你可以从内核初始化日志中寻找。你需要搜索内核类(kernel)和 cpu 初始化(Initializing)的信息。


1

2

3

Mar 19 18:39:30 ip-172-31-11-231 kernel: [ 0.000000] Initializing cgroup subsys cpuset

Mar 19 18:39:30 ip-172-31-11-231 kernel: [ 0.000000] Initializing cgroup subsys cpu

Mar 19 18:39:30 ip-172-31-11-231 kernel: [ 0.000000] Linux version 3.8.0-44-generic ([email protected]) (gcc version 4.6.3 (Ubuntu/Linaro4.6.3-1ubuntu5) )#66~precise1-Ubuntu SMP Tue Jul 15 04:01:04 UTC 2014 (Ubuntu 3.8.0-44.66~precise1-generic 3.8.13.25)

检测内存问题

有很多原因可能导致服务器崩溃,但一个常见的原因是内存用尽。

当你系统的内存不足时,进程会被杀死,通常会杀死使用最多资源的进程。当系统使用了所有内存,而新的或现有的进程试图使用更多的内存时就会出现错 误。在你的日志文件查找像 Out of Memory 这样的字符串或类似 kill 这样的内核警告信息。这些信息表明系统故意杀死进程或应用程序,而不是允许进程崩溃。

例如:


1

2

[33238.178288] Out of memory: Kill process 6230 (firefox) score 53 or sacrifice child

[29923450.995084]select5230 (docker), adj 0, size 708, tokill

你可以使用像 grep 这样的工具找到这些日志。这个例子是在 ubuntu 中:


1

2

$grep“Out of memory”/var/log/syslog

[33238.178288] Out of memory: Kill process 6230 (firefox) score 53 or sacrifice child

请记住,grep 也要使用内存,所以只是运行 grep 也可能导致内存不足的错误。这是另一个你应该中央化存储日志的原因!

定时任务错误日志

cron 守护程序是一个调度器,可以在指定的日期和时间运行进程。如果进程运行失败或无法完成,那么 cron 的错误出现在你的日志文件中。具体取决于你的发行版,你可以在 /var/log/cron,/var/log/messages,和 /var/log/syslog 几个位置找到这个日志。cron 任务失败原因有很多。通常情况下,问题出在进程中而不是 cron 守护进程本身。

默认情况下,cron 任务的输出会通过 postfix 发送电子邮件。这是一个显示了该邮件已经发送的日志。不幸的是,你不能在这里看到邮件的内容。


1

2

3

4

Mar 13 16:35:01 PSQ110 postfix/pickup[15158]: C3EDC5800B4: uid=1001 from=<hoover>

Mar 13 16:35:01 PSQ110 postfix/cleanup[15727]: C3EDC5800B4: message-id=<[email protected]>

Mar 13 16:35:01 PSQ110 postfix/qmgr[15159]: C3EDC5800B4: from=<[email protected]>, size=607, nrcpt=1 (queue active)

Mar 13 16:35:05 PSQ110 postfix/smtp[15729]: C3EDC5800B4: to=<[email protected]>, relay=gmail-smtp-in.l.google.com[74.125.130.26]:25, delay=4.1, delays=0.26/0/2.2/1.7, dsn=2.0.0, status=sent (250 2.0.0 OK 1425985505 f16si501651pdj.5 - gsmtp)

你可以考虑将 cron 的标准输出记录到日志中,以帮助你定位问题。这是一个你怎样使用 logger 命令重定向 cron 标准输出到 syslog的例子。用你的脚本来代替 echo 命令,helloCron 可以设置为任何你想要的应用程序的名字。


1

*/5* * * *echo‘Hello World’ 2>&1 |/usr/bin/logger-t helloCron

它创建的日志条目:


1

2

Apr 28 22:20:01 ip-172-31-11-231 CRON[15296]: (ubuntu) CMD (echo‘Hello World!‘2>&1 |/usr/bin/logger-t helloCron)

Apr 28 22:20:01 ip-172-31-11-231 helloCron: Hello World!

每个 cron 任务将根据任务的具体类型以及如何输出数据来记录不同的日志。

希望在日志中有问题根源的线索,也可以根据需要添加额外的日志记录。

时间: 2025-01-15 09:46:45

在 Linux 中使用日志来排错的相关文章

详解Linux中的日志及用日志来排查错误的方法

这篇文章主要介绍了详解Linux中的日志及用日志来排查错误的方法,是Linux入门学习中的基础知识,需要的朋友可以参考下 Linux 系统日志许多有价值的日志文件都是由 Linux 自动地为你创建的.你可以在 /var/log 目录中找到它们.下面是在一个典型的 Ubuntu 系统中这个目录的样子: 一些最为重要的 Linux 系统日志包括: /var/log/syslog 或 /var/log/messages 存储所有的全局系统活动数据,包括开机信息.基于 Debian 的系统如 Ubunt

辛星浅析linux中的日志

linux中对于连接时间的日志,一般由/var/log/wtmp和/var/run/utmp这两个文件记录,不过这两个文件无法直接使用cat查看,并且该文件由系统自动更新,我们可以通过w.who.finger.id.last.lastlog.ac命令进行查看. linux中对于进程的监控日志,首先说进程监控日志在监控用户的操作指令是很有效的,当服务器最近发现经常发生无故宕机或者无故被人删除文件等现象时,可以通过使用进程统计日志来查看.我们使用accton  /var/account/pacct来

Linux中的日志分析及管理

日志文件对于诊断和解决系统中的问题很有帮助,因为在Linux系统中运行的程序通常会把系统消息和错误消息写入相应的日志文件,这样系统一旦出现问题就会"有据可查".此外,当主机遭受攻击时,日志文件还可以帮助寻找攻击者留下的痕迹.一.主要日志文件在Linux系统中,日志数据主要包括以下三种类型:[内核及系统日志][用户日志][程序日志]Linux系统本身和大部分服务器程序的日志文件默认情况下都放置在目录"/var/log"中.一部分程序公用一个日志文件,一部分程序使用单个

Linux中查看日志文件的正确姿势,求你别tail走天下了!

作为一个后端开发工程师,在Linux中查看查看文件内容是基本操作了.尤其是通常要分析日志文件排查问题,那么我们应该如何正确打开日志文件呢?对于笔者这种小菜鸡来说,第一反应就是 cat,tail,vi(或vim)了,是的,我曾经用过好多次vim编辑器来查看日志文件. 千万不要使用vi命令来查看大文件内容, 尤其对于那些几十G的大文件.因为vi仅仅是一个编辑器(可以理解为windows中的记事本),使用vi命令后则会把文件所有内容加载到内存中,如果内存不够大的话,则可能会导致服务器瘫痪. 为了生成测

Linux中常见日志文件的介绍

/var / log / cron:记录crond计划任务相关的时间信息: 一.内核及系统日志分析 /var / log / messages:记录Linux内核消息及各种应用程序的公共日志信息,包括启动.I/O错误.网络错误.程序故障等.对于未使用独立日志文件的应用程序或服务,一般都可以在该日志文件中获得相关信息. /var /log /dmesg:记录Linux操作系统在引导过程中的各种事件信息: /var / log / maillog:记录进入或发出系统的电子邮件活动: /var / l

Linux中的日志功能

配置文件 /etc/logrotate.conf daily 日志的轮替周期是每天weekly 日志的轮替周期是每周monthly 日志的轮替周期是每月rotate 数字 保留的日志文件的个数compress 日志轮替时旧的日志进行压缩create mode owner group 建立新日志,同时指定新日志的权限与所有者和所属组mail address 当日志轮替时,输出内容通过邮件发送到指定邮件地址missingok 如果日志不存在,则忽略该日志的警告信息notifempty 如果日志为空,

linux中错误日志等级

info:仅是一些基本的讯息说明而已: notice:比 info 还需要被注意到的一些信息内容: warning 或 warn:警示讯息,可能有问题,但是还不至于影响到某个 daemon 作. err 或 error :一些重大的错误讯息,这就要去找原因了. crit:比 error 还要严重的错误信息,crit 是临界点 (critical) 的缩写,已经很严了 alert:警告警告,已经很有问题的等级,比 crit 还要严重! emerg 或 panic:疼痛等级,意指系统已经几乎要当机的

Linux下重要日志文件及查看方式

1.Linux下重要日志文件介绍 /var/log/boot.log 该文件记录了系统在引导过程中发生的事件,就是Linux系统开机自检过程显示的信息,如图1所示: 图1 /var/log/boot.log示意 /var/log/cron 该日志文件记录crontab守护进程crond所派生的子进程的动作,前面加上用户.登录时间和PID,以及派生出的进程的动作.CMD的一个动作是cron派生出一个调度进程的常见情况.REPLACE(替换)动作记录用户对它的cron文件的更新,该文件列出了要周期性

Linux系统日志及日志分析

Linux系统日志及日志分析 Linux系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们需要的信息. 大部分Linux发行版默认的日志守护进程为 syslog,位于 /etc/syslog 或 /etc/syslogd,默认配置文件为 /etc/syslog.conf,任何希望生成日志的程序都可以向 syslog 发送信息. Linux系统内核和许多程序会产生各种错误信息.警告信息和其他的提示信息,这些信息对管理员了解系统的运行状态是非常有用的,所以应该把它们写