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 -
看完本文有收获?请分享给更多人
推荐关注「Linux 运维进阶之路」,提升Linux技能

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




