[linux学习] 实战系列之日志分析
[linux学习] 实战系列之日志分析
之前有系统的学习过shell命令,但是过会儿就忘得一干二净,只记得cd、ls这些常用命令,果然这些东西还是要带着目的的去用才会熟悉,所以就有了这个实战系列,主要是根据不同的场景来带着目的的去用一下我们常用的命令。
分析什么日志
分析日志分析日志,首先我们得找一段日志吧,日志内容无所谓,千篇一律嘛,我这里在服务器上找了我mysql的错误日志来分析。
error.log:
2021-03-27T14:45:57.543470Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2021-03-27T14:45:57.743199Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2021-03-27T14:45:57.827562Z 0 [ERROR] [MY-011300] [Server] Plugin mysqlx reported: 'Setup of socket: '/var/run/mysqld/mysqlx.sock' failed, can't create lock file /var/run/mysqld/mysqlx.sock.lock'
2021-03-27T14:45:57.827809Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Bind-address: '::' port: 33060
2021-03-27T14:45:57.924629Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2021-03-27T14:45:57.924839Z 0 [System] [MY-013602] [Server] Channel mysql_main configured to support TLS. Encrypted connections are now supported for this channel.
2021-03-27T14:45:57.927923Z 0 [Warning] [MY-011810] [Server] Insecure configuration for --pid-file: Location '/tmp' in the path is accessible to all OS users. Consider choosing a different directory.
2021-03-27T14:45:57.950351Z 7 [System] [MY-013172] [Server] Received SHUTDOWN from user boot. Shutting down mysqld (Version: 8.0.23).
可以看到该日志主要包含了时间、记录类型、错误描述等信息构成,那我们就对这个日志来做一些常见的分析。
常见场景
查看日志
我们通常使用cat命令来查看文件,但是在开发环境中,日志记录是非常多的,cat命令一次性加载所有日志可能会造成系统的阻塞
通常的做法是:
首先查看日志大小:
ls -lh error.log
-rw-r----- 1 mysql adm 27K May 28 05:21 error.log // 可以看到这里只有27k
// 我们也可以用wc命令来查看更多信息
wc -l/-c/-w error.log // 查看该文件的 行数/字节数/字数/
// 然后使用less命令查看
less error.log // less不会一次性加载全部日志,所以不会造成性能影响
// 或者说我们使用 tail命令来看最新的几条记录
tail -n 10 error.log
// 使用-f参数可以实时更新
查看所有的错误记录
我们之前习惯使用grep来过滤文本,但是花里胡哨的参数让我眼花缭乱。。。
awk是一个更强大的文本处理工具,我们这里尽量都使用awk来处理
// 查看所有的错误记录
awk '$3 ~ /ERROR/ {print()}' error.log // 匹配所有第三列含有ERROR的行,然后输出全部内容
// 我们也可以只输出时间和错误类型
awk '$3 ~ /ERROR/ {print $1, $3}' error.log
统计信息
那么如何统计某一类日志的数量呢 ?我们需要配合多个命令来解决。
// 统计所有错误类型的数量
awk '{print $3}' error.log | sort | uniq -c // 先找出所有类型,然后排序,再去重和统计3 [ERROR]32 [System]155 [Warning]
// 统计每一天的记录数量
awk '{print substr($1 ,0, 11)}' error.log | sort |uniq -c // substr分解出年月日,然后排序+分组
42 2021-03-27
1 2021-03-28
6 2021-03-29
2 2021-03-30
2 2021-03-31
3 2021-04-01
4 2021-04-02
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
