log-analysis

# 实时查看 tail -f /var/log/syslog tail -f /var/log/nginx/access.log

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "log-analysis" with this command: npx skills add chaterm/terminal-skills/chaterm-terminal-skills-log-analysis

日志分析与处理

概述

日志聚合、分析工具、告警配置等技能。

日志查看

基础命令

实时查看

tail -f /var/log/syslog tail -f /var/log/nginx/access.log

多文件同时查看

tail -f /var/log/nginx/*.log multitail /var/log/nginx/access.log /var/log/nginx/error.log

查看最后N行

tail -n 100 /var/log/syslog

查看开头

head -n 100 /var/log/syslog

分页查看

less /var/log/syslog less +F /var/log/syslog # 类似 tail -f

按时间过滤

使用 sed 按时间范围

sed -n '/2024-01-15 10:00/,/2024-01-15 11:00/p' /var/log/app.log

使用 awk

awk '/2024-01-15 10:/ && /2024-01-15 11:/' /var/log/app.log

使用 journalctl

journalctl --since "2024-01-15 10:00" --until "2024-01-15 11:00" journalctl --since "1 hour ago" journalctl --since today

文本搜索

grep

基础搜索

grep "error" /var/log/syslog grep -i "error" /var/log/syslog # 忽略大小写 grep -r "error" /var/log/ # 递归搜索

正则表达式

grep -E "error|warning" /var/log/syslog grep -P "\d{4}-\d{2}-\d{2}" /var/log/syslog # Perl 正则

上下文

grep -A 3 "error" /var/log/syslog # 后3行 grep -B 3 "error" /var/log/syslog # 前3行 grep -C 3 "error" /var/log/syslog # 前后3行

统计

grep -c "error" /var/log/syslog # 计数 grep -l "error" /var/log/*.log # 只显示文件名

排除

grep -v "debug" /var/log/syslog # 排除包含 debug 的行

ripgrep (rg)

更快的搜索

rg "error" /var/log/ rg -i "error" /var/log/ # 忽略大小写 rg -C 3 "error" /var/log/ # 上下文 rg --type log "error" # 按文件类型

文本处理

awk

打印特定列

awk '{print $1, $4}' /var/log/nginx/access.log

条件过滤

awk '$9 == 500' /var/log/nginx/access.log awk '$9 >= 400 && $9 < 500' /var/log/nginx/access.log

统计

awk '{sum += $10} END {print sum}' /var/log/nginx/access.log awk '{count[$9]++} END {for (c in count) print c, count[c]}' /var/log/nginx/access.log

自定义分隔符

awk -F: '{print $1}' /etc/passwd awk -F'[ :]' '{print $1, $2}' /var/log/syslog

sed

替换

sed 's/old/new/g' file.log sed -i 's/old/new/g' file.log # 原地修改

删除行

sed '/pattern/d' file.log sed '1,10d' file.log # 删除前10行

提取行

sed -n '10,20p' file.log # 打印10-20行 sed -n '/start/,/end/p' file.log # 打印匹配范围

sort & uniq

排序

sort file.log sort -r file.log # 逆序 sort -n file.log # 数字排序 sort -k2 file.log # 按第2列排序

去重统计

sort file.log | uniq sort file.log | uniq -c # 计数 sort file.log | uniq -c | sort -rn # 按频率排序

Nginx 日志分析

常用分析

访问量统计

wc -l /var/log/nginx/access.log

IP 访问排行

awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -20

状态码统计

awk '{print $9}' access.log | sort | uniq -c | sort -rn

URL 访问排行

awk '{print $7}' access.log | sort | uniq -c | sort -rn | head -20

每小时访问量

awk '{print substr($4,14,2)}' access.log | sort | uniq -c

慢请求(响应时间 > 1s)

awk '$NF > 1' access.log | head -20

404 错误

awk '$9 == 404 {print $7}' access.log | sort | uniq -c | sort -rn

带宽统计

awk '{sum += $10} END {print sum/1024/1024 " MB"}' access.log

GoAccess 实时分析

安装

apt install goaccess

实时分析

goaccess /var/log/nginx/access.log -c

生成 HTML 报告

goaccess /var/log/nginx/access.log -o report.html --log-format=COMBINED

实时 HTML

goaccess /var/log/nginx/access.log -o /var/www/html/report.html --real-time-html

日志轮转

logrotate 配置

/etc/logrotate.d/myapp

/var/log/myapp/*.log { daily # 每天轮转 rotate 7 # 保留7个 compress # 压缩 delaycompress # 延迟压缩 missingok # 文件不存在不报错 notifempty # 空文件不轮转 create 0640 www-data www-data # 创建新文件 sharedscripts postrotate systemctl reload nginx > /dev/null 2>&1 || true endscript }

手动轮转

测试配置

logrotate -d /etc/logrotate.d/myapp

强制轮转

logrotate -f /etc/logrotate.d/myapp

常见场景

场景 1:错误日志分析

统计错误类型

grep -E "ERROR|WARN|FATAL" /var/log/app.log |
awk '{print $3}' | sort | uniq -c | sort -rn

最近1小时的错误

awk -v date="$(date -d '1 hour ago' '+%Y-%m-%d %H')"
'$0 ~ date && /ERROR/' /var/log/app.log

场景 2:性能分析

响应时间分布

awk '{print int($NF)}' access.log | sort -n | uniq -c |
awk '{printf "%ds: %d\n", $2, $1}'

慢请求 Top 10

awk '{print $NF, $7}' access.log | sort -rn | head -10

场景 3:安全分析

失败登录尝试

grep "Failed password" /var/log/auth.log |
awk '{print $(NF-3)}' | sort | uniq -c | sort -rn

可疑 IP

awk '$9 ~ /4[0-9][0-9]/ {print $1}' access.log |
sort | uniq -c | sort -rn | head -20

故障排查

问题 排查方法

日志太大 配置 logrotate、按时间过滤

搜索慢 使用 ripgrep、建立索引

格式不统一 使用 awk 自定义解析

实时监控 tail -f、GoAccess

历史分析 ELK Stack、Loki

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Research

traffic-analysis

No summary provided by upstream source.

Repository SourceNeeds Review
General

cron

No summary provided by upstream source.

Repository SourceNeeds Review
General

system-admin

No summary provided by upstream source.

Repository SourceNeeds Review
General

systemd

No summary provided by upstream source.

Repository SourceNeeds Review