1. 前言
在Linux日常管理中,我们肯定有查看某些服务的日志需求,或者是系统本身的日志。本文主要介绍如何查看Linux的系统日志,包括文件的路径、工具的使用等等。会看Linux日志是非常重要的,不仅在日常操作中可以迅速排错,也可以快速的定位。
2. 如何查看Linux日志
Linux日志文件的路径一般位于,/var/log/,比如ngix的日志路径为/var/log/nginx/,如果要查看某服务的日志,还可以使用systemctl status xxx,比如查看ssh服务的壮态,systemctl status sshd
查看Linux某服务的日志
Liunx的配置文件在/etc/rsyslog.d里,可以看到如下信息
在linux系统当中,有三个主要的日志子系统:
1、连接时间日志:由多个程序执行,把记录写入到/var/log/wtmp和/var/run/utmp,
login等程序会更新wtmp和utmp文件,使系统管理员能够跟踪谁在何时登录到系统。
2、进程统计:由系统内核执行,当一个进程终止时,为每个进程往进程统计文件中写一个记录。进程统计的目的是为系统中的基本服务提供命令使用统计
3、错误日志:由rsyslogd守护程序执行,各种系统守护进程、用户程序和内核通过rsyslogd守护程序向文件/var/log/messages报告值得注意的时间。另外有许多linux程序创建日志,像HTTP和FTP这样提供的服务器也保持详细的日志。
4、其他日志……
查看Linux日志默认路径
可以看到在/var/log目录下存在很多的日志文件,接下来就对里面的一些常用日志文件进行分析
主要日志文件介绍:
内核及公共消息日志:/var/log/messages
计划任务日志:/var/log/cron
系统引导日志:/var/log/dmesg
邮件系统日志:/var/log/maillog
用户登录日志:/var/log/lastlog
/var/log/boot.log(记录系统在引导过程中发生的时间)
/var/log/secure (用户验证相关的安全性事件)
/var/log/wtmp(当前登录用户详细信息)
/var/log/btmp(记录失败的的记录)
/var/run/utmp(用户登录、注销及系统开、关等事件)
日志文件详细介绍:
/var/log/secure
Linux系统安全日志,记录用户和工作组的情况、用户登陆认证情况
例子:我创建了一个zcwyou的用户,然后改变了该用户的密码,于是该信息就被记录到该日志下
Linux系统安全日志默认路径
该日志就详细的记录了我操作的过程。
内核及公共信息日志,是许多进程日志文件的汇总,从该文件中可以看出系统任何变化
查看Linux内核及公共信息日志
系统引导日志
该日志使用dmesg命令快速查看最后一次系统引导的引导日志
查看Linux系统系统引导日志
最近的用户登录事件,一般记录最后一次的登录事件
该日志不能用诸如cat、tail等查看,因为该日志里面是二进制文件,可以用lastlog命令查看,它根据UID排序显示登录名、端口号(tty)和上次登录时间。如果一个用户从未登录过,lastlog显示 Never logged。
该日志文件永久记录每个用户登录、注销及系统的启动、停机的事件。该日志为二进制文件,不能用诸如tail/cat/等命令,使用last命令查看。
记录邮件的收发
此文件是记录错误登录的日志,可以记录有人使用暴力破解ssh服务的日志。该文件用lastb打开
该日志记录当前用户登录的情况,不会永久保存记录。可以用who/w命令来查看
3. 常用的日志分析工具与使用方法
3.1 统计一个文本中包含字符个数
3.2 查看当天访问排行前10的url
3.3 查看apache的进程数
3.4 访问量前10的IP
cut部分表示取第1列即IP列,取第4列则为URL的访问量
3.5 查看最耗时的页面
按第2列响应时间逆序排序
3.6 使用grep查找文件中指定字符出现的次数
-o 指示grep显示所有匹配的地方,并且每一个匹配单独一行输出。这样只要统计输出的行数就可以知道这个字符出现的次数了。
4. 总结
查看Linux日志需求了解和熟悉使用一些常用的工具方能提升我们的查找和定位效率。比如使用 Grep 搜索,使用Tail命令,使用Cut,使用AWK 和 Grok 解析日志和使用 Rsyslog 和 AWK 过滤等等,只要能掌握这些工具。我们才能高效地处理和定位故障点。
https://www.linuxrumen.com/rmxx/647.html
2. Linux鏃ュ織鏌ヨ㈠懡浠linux鏃ュ織鏌ヨ
linux鎬庝箞鏌ョ湅log鏃ュ織锛
linux瀹炴椂鏌ョ湅log鏃ュ織鍛戒护鐨勬柟娉曪細鏌ョ湅涓涓鏂囦欢鎴栬呬竴涓鏃ュ織鏂囦欢锛岄氬父鐢ㄣ恗orexx.log銆戞垨鑰卌at鏌ョ湅锛岄渶瑕佸疄鏃剁殑鏌ョ湅杩愯屾棩蹇楋紝浣跨敤tail鍛戒护鏉ユ煡鐪嬶紝浠g爜涓恒恡ail-fxx.log銆戙
linux涓嬫煡鎵炬棩蹇楃殑鎶宸э紵
鍏堝繀椤讳簡瑙d袱涓鏈鍩烘湰鐨勫懡浠:
tail-n10test.log鏌ヨ㈡棩蹇楀熬閮ㄦ渶鍚10琛岀殑鏃ュ織;
tail-n+10test.log鏌ヨ10琛屼箣鍚庣殑鎵鏈夋棩蹇;
head-n10test.log鏌ヨ㈡棩蹇楁枃浠朵腑鐨勫ご10琛屾棩蹇;
head-n-10test.log鏌ヨ㈡棩蹇楁枃浠堕櫎浜嗘渶鍚10琛岀殑鍏朵粬鎵鏈夋棩蹇;
鍦烘櫙1:鎸夎屽彿鏌ョ湅---杩囨护鍑哄叧閿瀛楅檮杩戠殑鏃ュ織
鍥犱负閫氬父鏃跺欐垜浠鐢╣rep鎷垮埌鐨勬棩蹇楀緢灏,鎴戜滑闇瑕佹煡鐪嬮檮杩戠殑鏃ュ織.鎴戞槸杩欐牱鍋氱殑,棣栧厛:cat-ntest.log|grep"鍦板舰"寰楀埌鍏抽敭鏃ュ織鐨勮屽彿銆
3>寰楀埌"鍦板舰"鍏抽敭瀛楁墍鍦ㄧ殑琛屽彿鏄102琛.姝ゆ椂濡傛灉鎴戞兂鏌ョ湅杩欎釜鍏抽敭瀛楀墠10琛屽拰鍚10琛岀殑鏃ュ織:
cat-ntest.log|tail-n+92|head-n20
tail-n+92琛ㄧず鏌ヨ92琛屼箣鍚庣殑鏃ュ織
head-n20鍒欒〃绀哄湪鍓嶉潰鐨勬煡璇㈢粨鏋滈噷鍐嶆煡鍓20鏉¤板綍
鍦烘櫙2:閭d箞鎸夋棩鏈熸庝箞鏌ュ憿?閫氬父鎴戜滑闈炲父闇瑕佹煡鎵炬寚瀹氭椂闂寸鐨勬棩蹇
sed-n'/2014-12-1716:17:20/,/2014-12-1716:17:36/p'test.log鐗瑰埆璇存槑:涓婇潰鐨勪袱涓鏃ユ湡蹇呴』鏄鏃ュ織涓鎵撳嵃鍑烘潵鐨勬棩蹇,鍚﹀垯鏃犳晥.銆傚叧浜庢棩鏈熸墦鍗,鍙浠ュ厛grep-12-1716:17:20'test.log鏉ョ‘瀹氭棩蹇椾腑鏄鍚︽湁璇ユ椂闂寸偣,浠ョ‘淇濈4姝ュ彲浠ユ嬁鍒版棩蹇
杩欎釜鏍规嵁鏃堕棿娈垫煡璇㈡棩蹇楁槸闈炲父鏈夌敤鐨勫懡浠.
濡傛灉鎴戜滑鏌ユ壘鐨勬棩蹇楀緢澶,鎵撳嵃鍦ㄥ睆骞曚笂涓嶆柟渚挎煡鐪,鏈変袱涓鏂规硶:
(1)浣跨敤more鍜宭ess鍛戒护,濡:cat-ntest.log|grep"鍦板舰"|more杩欐牱灏卞垎椤垫墦鍗颁簡,閫氳繃鐐瑰嚮绌烘牸閿缈婚〉
(2)浣跨敤>xxx.txt灏嗗叾淇濆瓨鍒版枃浠朵腑,鍒版椂鍙浠ユ媺涓嬭繖涓鏂囦欢鍒嗘瀽.濡:
cat-ntest.log|grep"鍦板舰">xxx.txt
linux鎬庢牱瀹炴椂鏌ョ湅鏃ュ織鏂囦欢锛
瑕佺湅浣犳兂鏌ヤ粈涔堟牱鐨勬棩蹇椾簡锛宭inux涓嬮潰鏃ュ織鏈夊緢澶氾紝鏈夌郴缁熺殑锛屾湁搴旂敤鐨勩傚傛灉鏄绯荤粺涓嬮潰鐨勬棩蹇楋紝涓鑸閮藉湪/var/log涓嬮潰銆
濡傛灉鏄鐪嬪簲鐢ㄦ棩蹇楋紝閭e氨鍒板簲鐢ㄦ棩蹇楁墍鍦ㄧ洰褰曞幓鐪嬶紝杩欎釜瑕佺湅鍏蜂綋搴旂敤锛屾瘡涓鐨勮矾寰勯兘涓嶄竴鏍枫
涓鑸鏌ョ湅鏃ュ織锛屽彲浠ョ湅闈欐佹棩蹇楋紝涔熷氨鏄鐢'vi鏃ュ織鏂囦欢鍚'锛屾垨鑰呯敤more涔嬬被鐨勫伐鍏锋煡鐪嬨
杩樺彲浠ョ湅鍔ㄦ佹棩蹇楋紝鐢'tail-f鏃ュ織鏂囦欢鍚'锛屽彲浠ュ疄鏃舵煡鐪嬫墦鍛戒护涔嬪悗浜х敓鐨勬墍鏈夋柊鏃ュ織銆
linux搴旂敤涓绘満濡備綍鏌ョ湅閿欒鏃ュ織锛
浠ヤ笅鏄濡備綍鏌ョ湅閿欒鏃ュ織鏂规硶锛屼粎渚涘弬鑰冦
1銆佽繛鎺ヤ笂鐩稿簲鐨刲inux涓绘満锛岃繘鍏ュ埌绛夊緟杈撳叆shell鎸囦护鐨刲inux鍛戒护琛岀姸鎬佷笅銆
2銆佸叾娆★紝鍦╨inux鍛戒护琛屼腑杈撳叆锛歵ail/var/log/messages銆
3銆佹渶鍚庯紝鎸変笅鍥炶溅閿鎵ц宻hell鎸囦护锛屾ゆ椂浼氱湅鍒發inux鐨勯敊璇鏃ュ織琚鎵撳嵃鍑恒
3. linux中怎样查看日志
方法/步骤
先必须了解两个最基本的命令:
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 test.log |grep "地形" 得到关键日志的行号
<3>得到"地形"关键字所在的行号是102行. 此时如果我想查看这个关键字前10行和后10行的日志:
cat -n test.log |tail -n +92|head -n 20
tail -n +92表示查询92行之后的日志
head -n 20 则表示在前面的查询结果里再查前20条记录
场景2:那么按日期怎么查呢? 通常我们非常需要查找指定时间端的日志
sed -n '/2014-12-17 16:17:20/,/2014-12-17 16:17:36/p' test.log
特别说明:上面的两个日期必须是日志中打印出来的日志,否则无效.
关于日期打印,可以先 grep '2014-12-17 16:17:20' test.log 来确定日志中是否有该时间点,以确保第4步可以拿到日志
这个根据时间段查询日志是非常有用的命令.
如果我们查找的日志很多,打印在屏幕上不方便查看, 有两个方法:
(1)使用more和less命令, 如: cat -n test.log |grep "地形" |more 这样就分页打印了,通过点击空格键翻页
(2)使用 >xxx.txt 将其保存到文件中,到时可以拉下这个文件分析.如:
cat -n test.log |grep "地形" >xxx.txt
这几个日志查看方法应该可以满足日常需求了.