在运维工作中,日志处理是一项至关重要的任务,它涉及到监控系统状态、排查故障以及性能调优等多个方面。以下是15个常用的日志处理脚本,这些脚本可以帮助运维人员高效地管理和分析日志数据。
-
实时日志监控与报警脚本:该脚本能够实时监控日志文件,一旦检测到特定的错误关键字,就会发送报警邮件。
#!/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
-
日志按时间分割脚本:模拟
logrotate
功能,每天将旧日志重命名并创建新日志。#!/bin/bash LOG_FILE="/path/to/your/logfile.log" DATE=$(date +%Y%m%d) mv $LOG_FILE $LOG_FILE.$DATE
-
异常日志聚合分析脚本:从多个服务器的日志文件中收集错误日志,并聚合分析。
#!/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
-
日志时间戳转换脚本:将日志文件中的时间戳从UNIX时间戳转换为可读的日期格式。
#!/bin/bash LOG_FILE="/path/to/your/logfile_with_timestamps.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" done < "$LOG_FILE"
-
日志IP地址统计脚本:统计日志文件中访问者的IP地址及其出现次数,并排序输出。
#!/bin/bash LOG_FILE="/path/to/your/access.log" awk '{print $1}' $LOG_FILE | sort | uniq -c | sort -nr
-
日志请求类型分析脚本:分析日志文件中不同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
-
日志响应时间分析脚本:分析日志文件中每个请求的响应时间,并统计不同时间段的请求数量。
#!/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
-
日志文件内容差异分析脚本:比较两个日志文件之间的差异,并输出不同之处。
#!/bin/bash LOG_FILE1="/path/to/log1.log" LOG_FILE2="/path/to/log2.log" diff -B --side-by-side $LOG_FILE1 $LOG_FILE2
-
日志中特定用户活动跟踪脚本:从日志文件中提取特定用户的所有活动记录,并按时间排序。
#!/bin/bash LOG_FILE="/path/to/user_activity.log" USER_NAME="target_user" awk -v user="$USER_NAME" '$0 ~ user {print}' $LOG_FILE | sort
-
日志文件压缩与备份脚本:将日志文件压缩后备份到指定的远程服务器或本地目录。
#!/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 echo "Backup completed: $BACKUP_DIR/$BACKUP_FILE"
以上脚本涵盖了日志处理的多个方面,从实时监控到日志备份,为运维人员提供了强大的工具支持。这些脚本可以根据实际需求进行调整和扩展,以适应不同的工作环境和需求。