linux 日志

2017-06-04 15:26:07 zpcandzhj 阅读数 40415

常用Linux日志查看命令

 

欢迎关注公众号
欢迎关注公众号【程猿薇茑】

查看Web应用程序的运行日志解决运行时异常、出错是一项基本功。在Web程序中我们通过日志系统(比如log4j)向外部文件(比如log.txt)写入了程序运行时的某些日志(一般都会给日志行头加上tag),日志输出了程序中约定的一些变量(可能是某个订单号、某条服务码、请求ID值等标识)的值。

如果哪个订单处理失败了,或者某个服务运行异常了,此时我们就可以根据程序中输出的这些tag(标签)信息定位日志中的记录,来看看具体的变量值对不对,传入传入参数的值等等(毕竟不是开发环境,不能debug只能通过打tag的方式来帮助找错)。

先介绍一些常用查看文件的命令。后面介绍的几个案例实际工作中经常使用,值得一看!

1.more(分页)

http://www.cnblogs.com/peida/archive/2012/11/02/2750588.html

2.less(less 与 more类似,但使用less可以随意浏览文件,而more仅能向前移动,却不能向后移动,而且less在查看之前不会加载整个文件)

less命令可以显示行号,即less -N log.txt

http://www.cnblogs.com/peida/archive/2012/11/05/2754477.html

3.tail(尾部)

http://www.cnblogs.com/peida/archive/2012/11/07/2758084.html

4.head(头部)

http://www.cnblogs.com/peida/archive/2012/11/06/2756278.html

5.grep(查找,以加行号grep -n ‘xxx’ log.txt | more)(可以巧妙利用grep + tail命令定位满足grep条件的后几条最新记录)

小案例:

输出匹配grep条件的数据行的前后各10行:(可能满足grep条件的有好多,所以可能输出好几个21行为一组的数据)

grep  -n  -C10  'R0619'  caps-biz.txt

输出最后一次匹配grep条件的数据行的前后各10行:(借助tail命令取最后几行)

grep  -n  -C10  'R0619'  caps-biz.txt | tail -n 21 

grep  -n  -C10  'R0619'  caps-biz.txt | tail -n 21 | less(借助less命令的/pattern可以高亮搜索词)

http://www.cnblogs.com/peida/archive/2012/12/17/2821195.html

http://www.cnblogs.com/end/archive/2012/02/21/2360965.html

6.cat(输出文件内容)

cat 可以显示行号

cat -n   显示行号(包括空行)

cat -b   显示行号(不包括空行)

cat  -n log.txt | more

http://www.cnblogs.com/peida/archive/2012/10/30/2746968.html

7.nl(将行号格式做比较多的显示设计)

http://www.cnblogs.com/peida/archive/2012/11/01/2749048.html

几个命令的区别:http://www.cnblogs.com/cangqiongbingchen/p/5023886.html

Linux如何通过命令查看日志文件的某几:http://www.cnblogs.com/qiaoyanlin/p/6706085.html

 

案例

先了解两个最基本的命令:

tail  -n  10  test.log   查询日志尾部最后10行的日志;

tail -n +10 test.log    查询10行之后的所有日志;

head -n 10  test.log   查询日志文件中的头10行日志;

head -n -10  test.log   查询日志文件除了最后10行的其他所有日志;

1)按行号查看---过滤出关键字附近的日志

通常我们用grep拿到的日志很少,我们需要查看关键信息附近的日志.

首先: cat -n log.txt |grep "jiang"  ([root@vm1 ~]# grep -n "jiang" log.txt也可以)

 

注意:less命令的显示行号是大写的N,即less -N log.txt

得到关键日志的行号,比如这里找到包含“jiang”的记录很多行,假设我们要的结果是第18行附近的日志。

此时如果我想查看这个关键字前5行和后5行的日志(当然也可以使用上面的grep命令加-C参数完成):

cat -n log.txt |tail -n +13|head -n 10

tail -n +13表示查询13行之后的日志

head -n 10 则表示在前面的查询结果里再查前10条记录

如果想直接看最新的日志,那么行号最大的就是。可以根据日志记录时间等条件筛选一下,或者使用less命令,不断地翻页(end定位到最后)

如果满足grep条件的日志很多,那么可以结合tail命令只显示最后几行。

如果我们查找的日志很多,打印在屏幕上不方便查看,有两个方法:

(1)使用more和less命令,如: cat -n test.log |grep "jiang" |more  这样就分页打印了,通过空格键翻页,回车键下一行。

(2)使用 >xxx.txt将其保存到文件中,到时可以拿下这个文件分析.如:

cat -n test.log |grep "jiang"  >xxx.txt

2)根据日期来查看

一般在日志系统中都会记录打印日志的时间,通常我们非常需要查找指定时间端的日志:

特别说明:该命令中的两个日期值必须是日志文件中包含的值,否则该命令无效.

sed -n '/2017-06-04 14:06:27/,/2017-06-04 14:06:34/p'  test.log

sed -n '/2017/06/04 14:06:27/,/2017/06/04 14:06:34/p'  test.log

上述命令无效,需要转义:

sed -n '/2017\/06\/04 14:06:27/,/2017\/06\/04 14:06:34/p'  test.log

 

关于日期打印,可以先 grep '2014-12-17 16:17:20' test.log 来确定日志中是否有该时间点,以确保上一步可以拿到日志。这个根据时间段查询日志是非常有用的命令.

特别说明:该命令中的两个日期值必须是日志文件中包含的值,否则该命令无效.
 
 
欢迎关注公众号
欢迎关注公众号【程猿薇茑】
2019-03-27 09:48:55 diaoliwei2 阅读数 530

1、查看压缩文件中Exception关键字的地方

gunzip -c front-20180322.gz | grep Exception

2、查看关键字上下100行

 gunzip -c front-20180322.gz | grep -100 "Exception"

3、查看日志文件中的关键字

less -n front.log

然后输入 /Exception  可定位exception的位置,n可查看下一处exception

4、查看已.log为后缀的日志文件列表

find -name "*.log" 或者 find -name "*.gz"

5、显示匹配abc那行以及上下5行 

grep -C 5 ‘abc’ catalina.out

6、显示abc及前5行 

grep -B 5 ‘abc’ catalina.out

7、显示abc及后5行

grep -A 5 ‘abc’ catalina.out

8、查看文件的第5行到第10行

 sed -n ‘5,10p’ filename 

 

 

 

2018-07-28 00:23:14 C_abua 阅读数 3909

系统日志

进程和操作系统内核需要能够为发生的事件记录日志,这些日志可用于系统审核和问题的故障排除,一般这些日志永久存储 /var/log 目录中

  • /var/log/messages                           大多数系统日志信息记录在此处
  • /var/log/secure                                  安全和身份认证相关的信息和错误的日志文件
  • /var/log/maillog                                 与邮件服务器相关的日志文件
  • /var/log/cron                                       与定时任务相关的日志文件
  • /var/log/boot.log                                与系统启动有关的日志文件

指定日志采集路径 

/var/log/file            根据日志采集规则,可以指定日志的类型,类别

日志类型分为:

  • auth                                                         pam 产生的日志
  • authpriv                                                   ssh,ftp 等登录信息的验证信息
  • cron                                                          时间任务相关
  • kern                                                         内核
  • lpr                                                            打印
  • mail                                                         邮件
  • mark(syslog)-rsyslog                            服务内部的信息,时间标识
  • news                                                       新闻组
  • user                                                          用户程序产生的相关信息
  • uucp                                                        unix to unix copy,unix 主机之间相关的通讯
  • local 1~7                                                 自定义的日志设备

日志级别分为:

  • debug                                                      有调试信息的,日志信息最多
  • info                                                           一般信息的日志,最常用
  • notice                                                       最具有重要性的普通条件的信息
  • warning                                                    警告级别
  • err                                                             错误级别,阻止某个功能或者模块不能正常工作的信息
  • crit                                                             严重级别,阻止整个系统或者整个软件不能工作的信息
  • alert                                                          需要立刻修改的信息
  • emerg                                                       内核崩溃等严重信息
  • none                                                         什么都不记录

rsyslog 服务

rsyslog 是一个开源工具,被广泛用于Linux系统以 TCP/UDP 协议转发或接收日志消息

主配置文件为 /etc/rsyslog.conf ,指定日志保存位置修改配置文件,修改后重启 rsyslog 服务生效

vim /etc/rsyslog.conf                   修改配置文件

    重启rsyslog服务

可以利用 tail -f 日志文件名 输出文件的后10行,并实时更新

远程日志同步

两台主机防火墙关闭,修改完成后重启 rsyslogd 服务

  • 日志发送方

vim /etc/rsyslog.conf

*.*                        @日志接受方ip(man rsyslog.conf     “@”表示udp协议发送      “@@”表示tcp协议发送)

  • 日志接收方

vim /etc/rsylog.conf

$ModLoad imudp                     加载日志接收功能模块

$UDPServerRun 514              加载日志接收接口

  • 测试

客户端

服务端

分析系统日志条目

对于/var/log/secure文件中的一条日志信息,每一项代表的含义分析如下

记录该日志的时间戳

发送该日志消息的主机

记录发送该日志消息的进程或程序

发送的实际消息

日志的采集格式

vim /etc/rsyslog.conf

%timegenerated%                          显示日志时间

%FROMHOST-IP%                        显示主机ip

%syslogtag%                                   日志记录目标

%msg%                                            日志内容

\n                                                        换行

chronyd 服务

确定时间源地址(172.25.254.254)

确定客户主机使用的时间同步服务,在 chronyd.service 服务中加载时间源地址

服务端:

vim /etc/chrony.conf

allow 172.25.254.37/24                              允许客户端来同步本地时间

local stratum 10                                            本机不同步任何主机的时间,自己作为时间源

systemctl restart chronyd

客户端:

vim /etc/chrony.conf

server 172.25.254.237 iburst                     本机立即同步237主机上的时间

systemctl restart chronyd.service

查看是否同步成功                 chronyc sources -v

timedatectl                                   管理系统时间

timedatectl status                        显示当前时间信息

timedatectl set-local-rhc 0|1       设定是否使用utc时间

timedatectl list-timezone             查看支持的所有时区

timedatectl set-timezone Africe/Conakry                     设置当前时区

timedatectl set-time 11:11:11                                        设置当前系统时间

systemd-journald 服务

服务提供一种改进的日志管理服务,可以收集来自内核、启动过程、标准输出、系统日志及守护进程启动和运行期间错误的消息,它将这些消息写入到一个结构化事件日志中

journalctl 命令

journalctl                                     日志查看工具

journalctl -n 5                              查看最近生成的5条日志

journalctl -p err                           查看系统报错

journalctl --since --until               查看某个时间段生成的日志

journalctl -o verbose                  查看日志能够使用的条件参数

systemd-journald

默认情况下,systemd 日志保存在 /run/log/journal 中,这意味这系统重启时会被清除,那如果将日志保存在 /var/log/journal 目录,这样做的优点是启动后就可以利用历史数据,形成永久日志

2017-12-12 15:52:14 dubendi 阅读数 53303

Linux系统拥有非常灵活和强大的日志功能,可以保存几乎所有的操作记录,并可以从中检索出我们需要的信息。


大部分Linux发行版默认的日志守护进程为 syslog,位于 /etc/syslog 或 /etc/syslogd 或/etc/rsyslog.d,默认配置文件为 /etc/syslog.conf 或 rsyslog.conf,任何希望生成日志的程序都可以向 syslog 发送信息。

 

Linux系统内核和许多程序会产生各种错误信息、警告信息和其他的提示信息,这些信息对管理员了解系统的运行状态是非常有用的,所以应该把它们写到日志文件中去。

完成这个过程的程序就是syslog。syslog可以根据日志的类别和优先级将日志保存到不同的文件中。

例如,为了方便查阅,可以把内核信息与其他信息分开,单独保存到一个独立的日志文件中。默认配置下,日志文件通常都保存在“/var/log”目录下。

日志类型

下面是常见的日志类型,但并不是所有的Linux发行版都包含这些类型:

 

类型 说明
auth 用户认证时产生的日志,如login命令、su命令。
authpriv 与 auth 类似,但是只能被特定用户查看。
console 针对系统控制台的消息。
cron 系统定期执行计划任务时产生的日志。
daemon 某些守护进程产生的日志。
ftp FTP服务。
kern 系统内核消息。
local0.local7 由自定义程序使用。
lpr 与打印机活动有关。
mail 邮件日志。
mark 产生时间戳。系统每隔一段时间向日志文件中输出当前时间,每行的格式类似于 May 26 11:17:09 rs2 -- MARK --,可以由此推断系统发生故障的大概时间。
news 网络新闻传输协议(nntp)产生的消息。
ntp 网络时间协议(ntp)产生的消息。
user 用户进程。
uucp UUCP子系统。

 

日志优先级

常见的日志优先级请见下标:

 

优先级 说明
emerg 紧急情况,系统不可用(例如系统崩溃),一般会通知所有用户。
alert 需要立即修复,例如系统数据库损坏。
crit 危险情况,例如硬盘错误,可能会阻碍程序的部分功能。
err 一般错误消息。
warning 警告。
notice 不是错误,但是可能需要处理。
info 通用性消息,一般用来提供有用信息。
debug 调试程序产生的信息。
none 没有优先级,不记录任何日志消息。

常用日志文件

系统日志是由一个名为syslog的服务管理的,如以下日志文件都是由syslog日志服务驱动的:

/var/log/boot.log:录了系统在引导过程中发生的事件,就是Linux系统开机自检过程显示的信息

/var/log/lastlog :记录最后一次用户成功登陆的时间、登陆IP等信息

/var/log/messages :记录Linux操作系统常见的系统和服务错误信息

/var/log/secure :Linux系统安全日志,记录用户和工作组变坏情况、用户登陆认证情况

/var/log/btmp :记录Linux登陆失败的用户、时间以及远程IP地址

/var/log/syslog:只记录警告信息,常常是系统出问题的信息,使用lastlog查看

/var/log/wtmp:该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件,使用last命令查看

/var/run/utmp:该日志文件记录有关当前登录的每个用户的信息。如 who、w、users、finger等就需要访问这个文件

 

/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/boot.log

该文件记录了系统在引导过程中发生的事件,就是Linux系统开机自检过程显示的信息,如图1所示:

 

 

/var/log/syslog

默认Centos,Fedora不生成该日志文件,但可以配置/etc/syslog.conf让系统生成该日志文件。

它和/etc/log/messages日志文件不同,它只记录警告信息,常常是系统出问题的信息,所以更应该关注该文件。

要让系统生成该日志文件,在/etc/syslog.conf文件中加上:*.warning /var/log/syslog 该日志文件能记录当用户登录时login记录下的错误口令、Sendmail的问题、su命令执行失败等信息。

该日志文件记录最近成功登录的事件和最后一次不成功的登录事件,由login生成。在每次用户登录时被查询,该文件是二进制文件,需要使用lastlog命令查看,根据UID排序显示登录名、端口号和上次登录时间。如果某用户从来没有登录过,就显示为"**Never logged in**"。该命令只能以root权限执行。简单地输入lastlog命令后就会看到类似图4的信息:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@TestStation etc]# lastlog
Username         Port     From             Latest
root             pts/0    110.87.109.232   Wed Nov  2 10:34:20 +0800 2016
bin                                        **Never logged in**
daemon                                     **Never logged in**
adm                                        **Never logged in**
lp                                         **Never logged in**
sync                                       **Never logged in**
shutdown                                   **Never logged in**
halt                                       **Never logged in**
mail                                       **Never logged in**
uucp                                       **Never logged in**
operator                                   **Never logged in**
games                                      **Never logged in**
gopher                                     **Never logged in**
ftp                                        **Never logged in**
nobody                                     **Never logged in**
vcsa                                       **Never logged in**
saslauth                                   **Never logged in**
postfix                                    **Never logged in**
sshd                                       **Never logged in**
ntp                                        **Never logged in**
suda             pts/2    222.79.79.120    Tue Oct 25 16:00:01 +0800 2016

 

/var/log/wtmp

该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件。因此随着系统正常运行时间的增加,该文件的大小也会越来越大,增加的速度取决于系统用户登录的次数。该日志文件可以用来查看用户的登录记录,last命令就通过访问这个文件获得这些信息,并以反序从后向前显示用户的登录记录,last也能根据用户、终端tty或时间显示相应的记录。

/var/run/utmp

该日志文件记录有关当前登录的每个用户的信息。因此这个文件会随着用户登录和注销系统而不断变化,它只保留当时联机的用户记录,不会为用户保留永久的记录。系统中需要查询当前用户状态的程序,如 who、w、users、finger等就需要访问这个文件。该日志文件并不能包括所有精确的信息,因为某些突发错误会终止用户登录会话,而系统没有及时更新 utmp记录,因此该日志文件的记录不是百分之百值得信赖的。

以上提及的3个文件(/var/log/wtmp、/var/run/utmp、/var/log/lastlog)是日志子系统的关键文件,都记录了用户登录的情况。这些文件的所有记录都包含了时间戳。这些文件是按二进制保存的,故不能用less、cat之类的命令直接查看这些文件,而是需要使用相关命令通过这些文件而查看。其中,utmp和wtmp文件的数据结构是一样的,而lastlog文件则使用另外的数据结构,关于它们的具体的数据结构可以使用man命令查询。

每次有一个用户登录时,login程序在文件lastlog中查看用户的UID。如果存在,则把用户上次登录、注销时间和主机名写到标准输出中,然后login程序在lastlog中记录新的登录时间,打开utmp文件并插入用户的utmp记录。该记录一直用到用户登录退出时删除。utmp文件被各种命令使用,包括who、w、users和finger。

下一步,login程序打开文件wtmp附加用户的utmp记录。当用户登录退出时,具有更新时间戳的同一utmp记录附加到文件中。wtmp文件被程序last使用。


2018-04-26 21:20:08 wangkana 阅读数 3052

1、系统日志的分类

    /var/log/messages         ##系统服务及日志,包括服务的信息,报错等等



/var/log/secure                  ##系统认证信息日志



/var/log/maillog                  ##系统邮件服务信息


/var/log/cron                      ##系统定时任务信息


/var/log/boot.log              ##系统启动信息


2、日志管理服务rsyslog

    rsyslog负责采集日志和分类存放日志;主配置文件为/etc/rsyslog;

  ###格式###

        日志设备(类型).日志级别          日志处理方式(action)

    

  日志设备                                                                             日志级别
authpam产生的日志debug有调式信息的,日志信息最多
authprivssh,ftp等登录信息的验证信息info一般信息的日志,最常用
cron时间任务相关notice最具有重要性的普通条件的信息
kern内核warning警告级别
lpr打印err错误级别,阻止某个功能或者模块不能正常工作的信息
mail邮件crit严重级别,阻止整个系统或者整个软件不能正常工作的信息
mark(syslog)-rsyslog服务内部的信息,时间标识alert需要立刻修改的信息
news新闻组emerg内核崩溃等严重信息
user用户程序产生的相关信息none什么都不记录
uucpunix to unix copy, unix主机之间相关的通讯  
local 1-7自定义的日志设备  
 注:从上到下,级别从低到高,记录的信息越来越少  

实例:     

记录到普通文件

*.* /var/log/file.log                  # 绝对路径


查看文件/var/log/file.log内容:


3、日志同步

为了更好的观看实验效果,我们现在将两台主机的名字进行更改,日志的发送方:qq.example.com; 日志的接受方:ww.example.com


首先,主机名更改命令:

hostnamectl set-hostname 名字.exapmle.com,如图 1 ,图 2 所示。

                                             图    1


                                            图    2

操作步骤:

  日志发送方:
           systemctl stop firewalld //关闭防火墙

          

           vim /etc/rsyslog.conf //配置

                    *.* @172.25.254.10(此为接受方的ip)

          

          systemctl restart rsyslog.conf //重启日志采集服务

  日志接收方:

            systemctl stop firewalld //关闭防火墙

            

            vim /etc/rsyslog.conf //配置
                     15 $ModLoad imudp ##日志接受插件

                     16 $UDPServerRun 514 ##日志接收插件使用端口

           

            systemctl restart rsyslog.conf //重启日志采集服务

   两边都执行清除日志命令:

           > /var/log/messages

   日志发送方:systemctl start sshd

   日志接收方: tail -f /var/log/messages

当我们可以在ww下查看到qq的日志信息,此时日志同步操作完成。

如果想要查看日志的具体信息,如时间、ip

需要设置日志采集格式:

$template WESTOS, "%timegenerated%  %FROMHOST-IP%   %syslogtag%   %msg%  \n"

                                           日志时间                    主机ip                    日志记录目标   日志内容

$ActionfileDefaultTemplate WESTOS

*.info;mail.none;authpriv.none;cron.none                                          /var/log/messages;westos

具体操作如下:



 

4、日志分析工具journal

journalctl                    ##直接执行,浏览系统日志


journalctl    -n   3                     ##显示最新3条日志


journalctl   -p     err                 ##显示报错


journalctl    -f                   ##监控日志


journalctl  --since   --until                   ## --since "[YYYY-MM-DD] [hh:mm:ss]" 从什么时间到什么时间的日志


journalctl   -o     verbose                  ##显示日志能够使用的详细进程参数

5、时间同步                                               

当2台虚拟机时间不一致时。我们怎么去同步时间?

需要调整时间的虚拟机称为客户端,提供同步时间的虚拟机成为服务端;



我们以qq端的时间为标准,将ww端的时间进行同步,下面开始实验:

服务端(qq;ip为172.25.254.121):

         yum install chrony -y                    ##安装服务

         vim /etc/chrony.conf                     ##编辑主配置文件

         

                     21 # Allow NTP client access from local network.
                     22 allow 172.25.0.0/24               ##允许谁去同步我的时间
                     27 # Serve time even if not synchronized to any NTP server.

                     28 local stratum 10                     ##不去同步任何人的时间,时间同步服务器级别

          

          

         systemctl restart chronyd                      ##重启服务

         systemctl stop firewalld                         ##关闭防火墙

         

客户端(ww;ip为172.25.254.221)

         vim /etc/chrony.conf               ##编辑配置文件

                  3 server 172.25.254.121 iburst     ##这里的172.25.254.121为服务端的主机ip

         

在客户端测试,执行chronyc sources -v命令,看是否连接到了服务端。

  

查看ww端的时间:


时间同步成功!

6、timedatectl 命令

 timedatectl  status                     ##显示当前时间信息
                       set-time                 ##设定当前时间
                       set-timezone        ##设定当前时区
                       set-local-rtc 0|1   ##设定是否使用utc时间

                       list-timezone        ##查看支持的所有时区

例如:



Linux日志管理

阅读数 7479

Linux 查看登录日志

阅读数 45068

Linux之日志系统

阅读数 5926