0
点赞
收藏
分享

微信扫一扫

Linux服务器监控以及查日志教程

小暴龙要抱抱 2022-01-05 阅读 67

bash快捷键

快捷键作用
crtl+A把光标移动到命令行开头,如果我们输入的命令过长,想要把光标移动到命令行开头时使用
crtl+E把光标移动到命令行结尾
crtl+C强制终止当前的命令
crtl+L清屏,相当于clear命令
crtl+U删除或剪切光标之前的命令,加入输入了一串很长的命令,不用使用退格键一个一个字符的删除,使用这个命令更加方便
crtl+K删除或剪切光标之后的命令
crtl+Y粘贴ctrl+U或crtl+K剪切的内容
crtl+R在历史命令中搜索,按下crtl+R键之后,就会出现搜索界面,只要输入搜索内容,就会从历史命令中搜索
crtl+D推出当前终端
crtl+Z暂停,并放入后台,这个快捷键牵扯到工作管理的内容
crtl+S暂停屏幕输出
crtl+Q恢复屏幕输出

1 查看服务器日志

1.1 统计业务接口调用的次数

(1) grep -c

格式:grep -c {关键词} {日志文件}

-c会把所有符合要求的文件都统计出数量结果,不会将所有的日志的数量进行汇总,所以这个命令执行完之后,会得到所有符合要求的文件以及该文件中符合要求的数量,如下所示:

grep -c getInfo /data/nginx/logs/info-2021-07-*

grep正则表达式:

元数据意义和范例
^word搜寻以word开头的行。 例如:搜寻以#开头的脚本注释行 grep –n ‘^#’ regular.txt
word$搜寻以word结束的行
.匹配任意一个字符。 例如:grep –n ‘e.e’ regular.txt 匹配e和e之间有任意一个字符,可以匹配eee,eae,eve,但是不匹配ee。
\转义字符。 例如:搜寻’,’是一个特殊字符,在正则表达式中有特殊含义。必须要先转义。grep –n ‘\,” regular.txt
\*前面的字符重复0到多次。 例如匹配gle,gogle,google,gooogle等等 grep –n ‘go\*gle’ regular.txt
[list]匹配一系列字符中的一个。 例如:匹配gl,gf。grep –n ‘g[lf]’ regular.txt
[n1-n2]匹配一个字符范围中的一个字符。 例如:匹配数字字符 grep –n ‘[0-9]’ regular.txt
[^list]匹配字符集以外的字符 例如:grep –n ‘[^o]‘ regular.txt 匹配非o字符
\<word单词是的开头。 例如:匹配以g开头的单词 grep –n ‘\<g’ regular.txt
word\>前面的字符重复n1,n2次 例如:匹配google,gooogle。grep –n ‘go\{2,3\}gle’ regular.txt
\<word匹配单词结尾 例如:匹配以tion结尾的单词 grep –n ‘tion\>’ regular.txt
word\{n1\}前面的字符重复n1 例如:匹配google。 grep –n ‘go\{2\}gle’ regular.txt
word\{n1,\}前面的字符至少重复n1 例如:匹配google,gooogle。 grep –n ‘go\{2\}gle’ regular.txt
word\{n1,n2\}前面的字符重复n1,n2次 例如:匹配google,gooogle。 grep –n ‘go\{2,3\}gle’ regular.txt

(2) grep与wc -l结合

格式:grep {关键词} {日志文件} | wc -l

这个命令会把所有符合要求的文件中的统计数量进行汇总求和,所有这个命令执行完之后,会得到一个数字。

grep getInfo /data/nginx/logs/info-2021-07-* | wc -l

(3) zgrep

格式:zgrep {关键词} {日志文件} | wc -l

由于日志文件可能会很大,很多公司会每天按照大小进行切分,并以压缩格式保存,这类文件就需要使用zgrep命令进行统计。

root@iZbp1crt1zqre1ar8:/HD/logs/punchout# zgrep -c 'TraceLogProviderFilter' punchout.2020-02-23_1.log.gz 
274647
root@iZbp1crt1zqre1ar8:/HD/logs/punchout# zgrep -c 'TraceLogProviderFilter' punchout.2020-02-23_*.log.gz 
punchout.2020-02-23_1.log.gz:274647
punchout.2020-02-23_2.log.gz:274995

(4) 按照正则匹配所有接口形式的调用

正则表达式形式如下:

awk '{match($0, /\/[a-zA-Z]+\/[a-zA-Z]+/, a); print a[0];}'

命令如下:

cat log.2021081916 | awk '{match($0, /\/[a-zA-Z]+\/[a-zA-Z]+/, a); print a[0];}' | sort | uniq -c | sort -n -r

(5) 统计调用次数大于n的接口

先整理出所有接口被调用的次数,然后再使用awk对所有接口和调用次数进行遍历,筛选出所有调用次数大于n的接口即可。

cat log.20210819 | awk '{match($0, /\/[a-zA-Z]+\/[a-zA-Z]+/, a); print a[0];}' | sort | uniq -c | sort -n -r | awk -F " " '{if ($1>100) print $1, $2}'

1.2 统计访问IP的次数

首先查看日志的格式,可以按照空格进行切割,然后对切割完的结果进行排序,使用sort命令,最后在使用uniq命令,去除一些重复的行

  • 知道IP在哪个位置:

    cat log.2021073016-20210730 | awk -F' ' '{print $4}' |  sort | uniq -c
    

  • 不知道IP在哪个位置,采用正则匹配

    cat log.2021073016-20210730 | awk --re-interval '{match($0, /([0-9]{1,3}\.){3}[0-9]{1,3}/, a); print a[0]}' |  sort | uniq -c | sort -n -r
    

2 查看服务器负载

服务器负载一般指的是Linux服务器的CPU内存IO等的负载。

(1) uptime-查看系统负载

语法格式:uptime [参数]

常用参数:

-p以漂亮的格式显示机器正常运行的时间
-s系统自开始运行时间,格式为yyyy-mm-dd hh:mm:ss
-h显示帮助信息
[root@localhost ~]# uptime 
 01:46:16 up 9 days,  2:47,  3 users,  load average: 0.00, 0.01, 0.05
[root@localhost ~]# uptime -p
up 1 week, 2 days, 2 hours, 48 minutes
[root@localhost ~]# uptime -s
2021-07-18 22:58:18

(2) w-显示已登录用户

**语法格式:**w [参数]

常用参数:

-h/–no-header不打印头信息
-u/–no-current当显示当前进程和cpu时间时忽略用户名
-s/–short使用短输出格式
-f/–from显示用户从哪登录
-o/–old-style老式输出
-i/–ip-addr显示IP地址而不是主机名(如果可能)
–help显示此帮助并退出
-V/–version显示版本信息
[root@localhost ~]# w
 01:50:46 up 9 days,  2:52,  4 users,  load average: 0.14, 0.08, 0.07
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    192.168.10.1     Tue04    5:50m  0.22s  0.16s redis-cli -h 10.18.243.168 -p 6379
root     pts/3    192.168.10.1     Tue04    1:18   0.36s  0.36s -bash
root     pts/4    192.168.10.1     Tue04    6.00s  0.11s  0.11s -bash
centos   pts/5    192.168.10.1     01:49   46.00s  0.09s  0.01s mysql -uroot -px xxxxxxxxx

(3) top-实时显示进程动态

**语法格式:**top [参数]

常用参数:

-d改变显示的更新速度,或是在交谈式指令列( interactive command)按 s
-q没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行
-c切换显示模式
-s安全模式,将交谈式指令取消, 避免潜在的危机
-i不显示任何闲置 (idle) 或无用 (zombie) 的行程
-n更新的次数,完成后将会退出 top
-b批次档模式,搭配 “n” 参数一起使用,可以用来将 top 的结果输出到档案内
  • 查看CPU个数

    在top界面下,按下1,即可查看cpu个数。

(4) iostat-监视系统输入输出设备和CPU的使用情况

语法格式: iostat [参数] [设备]

常用参数:

-c仅显示CPU使用情况
-d仅显示设备利用率
-k显示状态以千字节每秒为单位,而不使用块每秒
-m显示状态以兆字节每秒为单位
-p仅显示块设备和所有被使用的其他分区的状态
-t显示每个报告产生时的时间

(5) mpstat

mpstat mpstat是MultiProcessor Statistics的缩写,是实时系统监控工具。其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中。在多CPUs系统里,其不但能查看所有CPU的平均状况信息,而且能够查看特定CPU的信息。

再来看看 oschina 上的 mpstat 命令执行结果:

(6) netstat

Netstat 和 ps 命令类似,是 Linux 管理员基本上每天都会用的工具,它显示了大量跟网络相关的信息,例如 socket 的使用、路由、接口、协议、网络等等,下面是一些常用的参数:

  • -a Show all socket information
  • -r Show routing information
  • -i Show network interface statistics
  • -s Show network protocol statistics

(7) nmon

Nmon, 是 Nigel’s Monitor 的缩写,是一个使用很普遍的开源工具,用以监控 Linux 系统的性能。Nmon 监控多个子系统的性能数据,例如处理器的使用率、内存使用率、队列、磁盘I/O统计、网络I/O统计、内存页处理和进程信息。Nmon 也提供了一个图形化的工具。

要运行 nmon,你可以在命令行中启动它,然后选择要监控的子系统,这些子系统都对应有一个快捷键,例如输入 c 可查看 CPU 信息,m用于查看内存,d用来查看磁盘信息等,你也可以使用 -f 命令将 nmon 的执行结果保存到一个 CSV 文件中,便于日后分析。在每日的监控工作中,我发现 nmon 是我最常用的工具。

nmon不是Linux系统自带的命令,需要进行安装,安装命令如下:

yum install nmon

(8) ps|pstree

ps 和 pstree 命令是 Linux 系统管理员最好的朋友,都可以用来列表正在运行的所有进程。ps 告诉你每个进程占用的内存和 CPU 处理时间,而 pstree 显示的信息没那么详细,但它以树形结构显示进程之间的依赖关系,包括子进程信息。一旦发现某个进程有问题,你可以使用 kill 来杀掉它。

kill pid  # kill a process

(9) sar-系统运行状态统计

该命令号称系统监控的瑞士军刀,目前Linux上最为全面的系统性能分析工具之一,可以从14个大方面对系统的活动进行报告,包括文件的读写情况、系统调用的使用情况、串口、CPU效率、内存使用状况、进程活动及IPC有关的活动等,使用也是较为复杂。

sar 默认显示的是从零点开始每隔十分钟到现在的CPU情况,如果是查看之前的报告,需要指定日志报告,sar -f /var/log/sysstat/sa25 。

解释下各列的指标:

%user 用户模式下消耗的CPU时间的比例;

%nice 通过nice改变了进程调度优先级的进程,在用户模式下消耗的CPU时间的比例

%system 系统模式下消耗的CPU时间的比例;

%iowait CPU等待磁盘I/O导致空闲状态消耗的时间比例;

%steal 利用Xen等操作系统虚拟化技术,等待其它虚拟CPU计算占用的时间比例;

%idle CPU空闲时间比例;

  • 查看内存使用情况:

    sar -r
    

  • 查看带宽

    sar -n DEV
    

  • tips

Reference

  • https://blog.csdn.net/pjx827480541/article/details/104457511
  • Linux查看机器负载
  • https://cloud.tencent.com/developer/article/1533965
  • https://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316399.html

写在最后

举报

相关推荐

0 条评论