在运维工作中,日志处理是一项至关重要的任务,它涉及到监控系统状态、排查故障以及性能调优等多个方面。以下是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"
以上脚本涵盖了日志处理的多个方面,从实时监控到日志备份,为运维人员提供了强大的工具支持。这些脚本可以根据实际需求进行调整和扩展,以适应不同的工作环境和需求。
近期文章:
IP彻底麻了 !!! 运维动手了 惊呆了 !!! 运维用破手机搭了一个网站 不懂开发的运维走不远 ??? 为何Linux裸奔也很安全 ??? 不要乱来 !!! 运维也分方向哦 |