暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

运维必备:10个超实用Shell脚本,让日志管理更高效!

Linux运维进阶之路 2024-10-28
71



在运维领域,日志管理是核心任务之一,它涉及到监控系统状态、故障排查和性能优化等多个方面。今天,我将分享10个实用的Shell脚本,这些脚本专门用于处理和分析日志,帮助你更高效地完成运维工作。请注意,你可能需要根据你的具体环境对这些脚本进行适当的调整。

1. 实时监控日志并报警 (monitor_log_and_alert.sh
)

功能:这个脚本能够实时监控日志文件,一旦发现含有特定错误关键词的行,就会发送一封报警邮件。

#!/bin/bash
LOG_FILE="/path/to/your/logfile.log"
KEYWORD="ERROR"
EMAIL="admin@example.com"
tail -F $LOG_FILE | while read line; do
    if echo "$line" | grep -q "$KEYWORD"then
        echo "Alert: $line" | mail -s "Error Detected in $LOG_FILE" $EMAIL
    fi
done

2. 日志文件定时轮转 (log_rotate.sh
)

功能:此脚本模仿logrotate
工具,实现日志文件的每日轮转,旧文件将被重命名,同时创建一个新的日志文件。

#!/bin/bash
LOG_FILE="/path/to/your/logfile.log"
DATE=$(date +%Y%m%d)
if [ ! -f "$LOG_FILE.$DATE" ]; then
    mv "$LOG_FILE" "$LOG_FILE.$DATE"
    touch "$LOG_FILE"
    echo "Rotated log file to $LOG_FILE.$DATE"
fi

3. 错误日志聚合分析 (aggregate_errors.sh
)

功能:收集多个服务器上的日志中的错误条目,并将它们聚合在一起进行分析。

#!/bin/bash
SERVERS=("server1" "server2" "server3")
ERROR_DIR="/path/to/error_logs"
mkdir -p "$ERROR_DIR"
for SERVER in "${SERVERS[@]}"do
    SSH_CMD="ssh $SERVER 'cat /path/to/logs/error.log'"
    ERRORS=$(eval $SSH_CMD)
    echo "$ERRORS" | grep 'ERROR' >> "$ERROR_DIR/${SERVER}_errors.log"
done

4. 时间戳转换工具 (timestamp_convert.sh
)

功能:将日志文件中的UNIX时间戳转换为人类可读的日期格式。

#!/bin/bash
LOG_FILE="/path/to/your/logfile_with_timestamps.log"
OUTPUT_FILE="/path/to/converted_log.log"
while IFS= read -r line; do
    TIMESTAMP=$(echo $line | cut -d' ' -f1)
    MESSAGE=$(echo $line | cut -d' ' -f2-)
    HUMAN_READABLE_DATE=$(date -d @"$TIMESTAMP" +"%Y-%m-%d %H:%M:%S")
    echo "$HUMAN_READABLE_DATE $MESSAGE" >> "$OUTPUT_FILE"
done < "$LOG_FILE"

5. IP地址统计工具 (ip_address_statistics.sh
)

功能:统计日志文件中各IP地址的出现频率,并按次数排序输出。

#!/bin/bash
LOG_FILE="/path/to/your/access.log"
awk '{print $1}' $LOG_FILE | sort | uniq -c | sort -nr

这个脚本假设每行日志的第一个字段是IP地址,使用awk
提取并统计每个IP的出现次数。

6. 请求类型分析工具 (request_type_analysis.sh
)

功能:分析日志文件中的HTTP请求类型(如GET、POST)并统计它们的比例。

#!/bin/bash
LOG_FILE="/path/to/your/access.log"
declare -A request_types
while IFS= read -r line; do
    method=$(echo $line | awk '{print $6}')
    if [[ "${request_types[$method]}" ]]; then
        ((request_types[$method]++))
    else
        request_types[$method]=1
    fi
done < "$LOG_FILE"
echo "Request Type Statistics:"
for method in "${!request_types[@]}"do
    echo "$method${request_types[$method]}"
done

7. 响应时间分析工具 (response_time_analysis.sh
)

功能:分析日志文件中的请求响应时间,并将它们分类到不同的时间区间内。

#!/bin/bash
LOG_FILE="/path/to/your/access.log"
declare -A response_times
bins=("0-100ms" "101-200ms" "201-500ms" "501-1000ms" "1000ms+")
while IFS= read -r line; do
    response_time=$(echo $line | awk '{print $10}')
    if (( $(echo "$response_time <= 100" | bc -l) )); then
        bin="0-100ms"
    elif (( $(echo "$response_time <= 200" | bc -l) )); then
        bin="101-200ms"
    elif (( $(echo "$response_time <= 500" | bc -l) )); then
        bin="201-500ms"
    elif (( $(echo "$response_time <= 1000" | bc -l) )); then
        bin="501-1000ms"
    else
        bin="1000ms+"
    fi
    ((response_times[$bin]++))
done < "$LOG_FILE"
echo "Response Time Statistics:"
for bin in "${!response_times[@]}"do
    echo "$bin${response_times[$bin]}"
done

8. 日志差异分析工具 (log_diff_analysis.sh
)

功能:比较两个日志文件的不同之处,并输出差异。

#!/bin/bash
LOG_FILE1="/path/to/log1.log"
LOG_FILE2="/path/to/log2.log"
diff -B --side-by-side $LOG_FILE1 $LOG_FILE2

9. 用户活动跟踪工具 (user_activity_tracker.sh
)

功能:从日志文件中提取特定用户的所有活动记录,并按时间排序。

#!/bin/bash
LOG_FILE="/path/to/user_activity.log"
USER_NAME="target_user"
awk -v user="$USER_NAME" '$0 ~ user {print}' $LOG_FILE | sort

10. 日志压缩备份工具 (log_compress_and_backup.sh
)

功能:将日志文件压缩并备份到指定的远程服务器或本地目录。

#!/bin/bash
LOG_DIR="/path/to/logs"
BACKUP_DIR="/path/to/backup"
DATE=$(date +%Y%m%d)
BACKUP_FILE="logs_backup_$DATE.tar.gz"
tar -czvf $BACKUP_DIR/$BACKUP_FILE $LOG_DIR
# 可选:将备份文件复制到远程服务器(使用scp命令)
# scp $BACKUP_DIR/$BACKUP_FILE username@remotehost:/path/to/remote/backup/
echo "Backup completed: $BACKUP_DIR/$BACKUP_FILE"

这些脚本覆盖了日志处理的多个方面,从实时监控到备份压缩,帮助你更高效地管理日志。希望这些工具能成为你运维工作中的得力助手。




k8s核心实战课程星球

k8s核心实战课程星球,课程录制中,光课件就150多万字,课程2000节以上,时长400小时以上,讲解所有k8s核心api和一些扩展api,crd数量150个以上,讲解所有feature gate.   本星球会把录制的所有课程都放出来,包括后续要录的100多门云原生课程,费用首次只要200后续续费很便宜,相当于你买了一个的会员,就能享受到所有课程服务



- EOF -


推荐阅读  点击标题可跳转

1、Linux系统常用小技巧大作用序列~

2、挖矿病毒处置(Linux篇) ——从入门到放弃

3、Ansible 批量100台服务器添加 Crontab

4、如何在Linux中列出USB设备

5、推荐八款Linux远程连接工具,非常实用

6、35个常用一线运维shell脚本再整理(经典)

7、Linux故障排查思路及常用命令(收藏)


看完本文有收获?请分享给更多人

推荐关注「Linux 运维进阶之路」,提升Linux技能



❤️点赞&在看❤️,服务器三年不宕机

文章转载自Linux运维进阶之路,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论