定期修改密码
cd /etc
lsattr passwd shadow
如果这2文件有带i属性, 则表示无法修改, 用下面命令去掉
chattr -i passwd shadow
然后是修改密码命令
passwd
输入新密码: ******
再次输入: ******
修改成功, 把2个文件加上i属性防止被窜改
chattr +i passwd shadow
定期清理磁盘空间
通用方法, 删除指定目录7天前的文件
find /appLog -type f -mtime +7 -exec rm {} \;
也或以针对nginx, tomcat处理
其中大都是由于nginx, tomcat的日志积压
1. 定期检查目录里的文件夹大小
进入目标目录
cd /slc/web-file/lizhiwei/APP
查看各目录磁盘空间占用, 把所有目录(包括子目录)都显示出来
du -h
子目录太多看着烦, 只显示1级目录就行了
du -h --max-depth=1
然后挑大的进去删除日志
2. 切割日志
1.tomcat采用 cronolog 从程序上把日志按天分切割
2.nginx采用crontab执行自己写的sh, 定时每天23:59分定时执行
三. 历史日志
tomcat 可以采用logback, 直接在配置上设置历史日志压缩及最近7天
方法一:tomcat使用shell切割日志
方法二:tomcat自身catalina.out的切割
step 1:
touch "$CATALINA_OUT"
改
#touch "$CATALINA_OUT"
step 2:
org.apache.catalina.startup.Bootstrap "$@" start \
>> "$CATALINA_OUT" 2>&1 "&"
改
org.apache.catalina.startup.Bootstrap "$@" start 2>1 \
| cronolog "$CATALINA_OUT.%Y%m%d" >> /dev/null &
step 3:
在else下面的语句同step 2
效果
[img]http://dl2.iteye.com/upload/attachment/0127/4941/d4c74666-afc5-318f-a5c6-f8172efba83f.jpg[/img]
nginx 则需要自己写sh, 删除指定30天前的日志
查看并发,连接数, 通过端口号
一般tomcat是8080
netstat -na | grep ESTAB | grep 8080 | wc -l
一般nginx是80
netstat -na | grep ESTAB | grep 80 | wc -l
文件排序, 日志数据处理分析
cat lizw.10.log |awk -F, '{print $(NF)}' > lizw.10-1.log
把日志里每行的最后一列打印到新的文件
-F, 以","作为分隔符
$(NF), 倒数第1列, 如果是$(NF-1), 则是倒数第2列
sort -u lizw.10.log > lizw.10.u.log
文件去重, 相同的行只留唯一
sort -nk 2 -t: lizw.10.u.log > lizw.10.sun.log
-nk 2 按数值排序, 以第2列为准
-t: 以":"作为列的分隔符
10进制<->16进制
10->16
printf "%x\n" 2579728
输出:275d10
16->10
printf "%d\n" 0x275d10
输出:2579728
筛选文件里匹配关键字的行
cat access.log.20170713|grep "deviceId"
筛选文件里匹配关键字的行里的内部 (-o)
cat access.log.20170713|grep -o "deviceId\":\w\{1,10\}"
或 标准正则表达式写法 (-P)
cat access.log.20170713|grep -oP "deviceId\":\d{1,10}"
cd /etc
lsattr passwd shadow
如果这2文件有带i属性, 则表示无法修改, 用下面命令去掉
chattr -i passwd shadow
然后是修改密码命令
passwd
输入新密码: ******
再次输入: ******
修改成功, 把2个文件加上i属性防止被窜改
chattr +i passwd shadow
定期清理磁盘空间
通用方法, 删除指定目录7天前的文件
find /appLog -type f -mtime +7 -exec rm {} \;
也或以针对nginx, tomcat处理
其中大都是由于nginx, tomcat的日志积压
1. 定期检查目录里的文件夹大小
进入目标目录
cd /slc/web-file/lizhiwei/APP
查看各目录磁盘空间占用, 把所有目录(包括子目录)都显示出来
du -h
子目录太多看着烦, 只显示1级目录就行了
du -h --max-depth=1
然后挑大的进去删除日志
2. 切割日志
1.tomcat采用 cronolog 从程序上把日志按天分切割
2.nginx采用crontab执行自己写的sh, 定时每天23:59分定时执行
三. 历史日志
tomcat 可以采用logback, 直接在配置上设置历史日志压缩及最近7天
<!-- 日志文件每天生成,保留30天的日志文件,防止日志打爆磁盘 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.base}.%d{yyyy-MM-dd}.log.gz</fileNamePattern>
<maxHistory>30</maxHistory>
<!--日志文件最大占用空间,防止日志打爆磁盘 -->
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
方法一:tomcat使用shell切割日志
cd /yf-weloop-rawdata/apache-tomcat-7.0.73/bin
d=`date --date='0 days ago' +%Y-%m-%d`
d7=`date -d'7 day ago' +%Y-%m-%d`
echo '-----'
echo 'tomcat catalina.out log backup start'
echo 'system time: '`date`
echo 'current date: '${d}
echo 'next 7 days: '${d7}
cd ../logs/
echo 'copy catalina.out to catalina.out.'${d}
cp catalina.out catalina.out.${d}
echo 'clear catalina.out'
#这样直接把文件 ""> 的方法, 仅在redcap有效, 在centos使用, 后面的内容不会追加
echo "" > catalina.out
echo "rm catalina.out -7d before: catalina.out.${d7}"
if [ -a "catalina.out.${d7}" ]; then
rm -rf catalina.out.${d7}
echo 'rm catalina.out.'${d7}' success'
else
echo 'rm catalina.out.'${d7}' failure, it''s not existx'
fi
echo 'tomcat catalina.out log backup end'
echo '-----'
方法二:tomcat自身catalina.out的切割
step 1:
touch "$CATALINA_OUT"
改
#touch "$CATALINA_OUT"
step 2:
org.apache.catalina.startup.Bootstrap "$@" start \
>> "$CATALINA_OUT" 2>&1 "&"
改
org.apache.catalina.startup.Bootstrap "$@" start 2>1 \
| cronolog "$CATALINA_OUT.%Y%m%d" >> /dev/null &
step 3:
在else下面的语句同step 2
效果
[img]http://dl2.iteye.com/upload/attachment/0127/4941/d4c74666-afc5-318f-a5c6-f8172efba83f.jpg[/img]
nginx 则需要自己写sh, 删除指定30天前的日志
#nx 日志文件所在的目录
LOGS_PATH=/usr/local/nginx/logs
## 获取昨天的 yyyy-MM-dd
YESTERDAY=$(date -d "yesterday" +%Y%m%d)
## 移动文件
mv ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.log
mv ${LOGS_PATH}/error.log ${LOGS_PATH}/error_${YESTERDAY}.log
echo $(date +%Y-%m-%d" "%H:%M:%S) 保存昨天的日志文件 >> ${LOGS_PATH}/cut-log.log
## 向 Nginx 主进程发送 USR1 信号。USR1 信号是重新打开日志文件
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)
echo $(date +%Y-%m-%d" "%H:%M:%S) 通知nginx重写日志 >> ${LOGS_PATH}/cut-log.log
## 删除15天前的日志
rm -f ${LOGS_PATH}/access_$(date -d "10 day ago" +%Y%m%d).log
rm -f ${LOGS_PATH}/error_$(date -d "10 day ago" +%Y%m%d).log
echo $(date +%Y-%m-%d" "%H:%M:%S) 删除15天前的日志:access_$(date -d "10 day ago" +%Y%m%d).log >> ${LOGS_PATH}/cut-log.log
echo $(date +%Y-%m-%d" "%H:%M:%S) 删除15天前的日志:error_$(date -d "10 day ago" +%Y%m%d).log >> ${LOGS_PATH}/cut-log.log
查看并发,连接数, 通过端口号
一般tomcat是8080
netstat -na | grep ESTAB | grep 8080 | wc -l
一般nginx是80
netstat -na | grep ESTAB | grep 80 | wc -l
文件排序, 日志数据处理分析
cat lizw.10.log |awk -F, '{print $(NF)}' > lizw.10-1.log
把日志里每行的最后一列打印到新的文件
-F, 以","作为分隔符
$(NF), 倒数第1列, 如果是$(NF-1), 则是倒数第2列
sort -u lizw.10.log > lizw.10.u.log
文件去重, 相同的行只留唯一
sort -nk 2 -t: lizw.10.u.log > lizw.10.sun.log
-nk 2 按数值排序, 以第2列为准
-t: 以":"作为列的分隔符
10进制<->16进制
10->16
printf "%x\n" 2579728
输出:275d10
16->10
printf "%d\n" 0x275d10
输出:2579728
筛选文件里匹配关键字的行
cat access.log.20170713|grep "deviceId"
筛选文件里匹配关键字的行里的内部 (-o)
cat access.log.20170713|grep -o "deviceId\":\w\{1,10\}"
或 标准正则表达式写法 (-P)
cat access.log.20170713|grep -oP "deviceId\":\d{1,10}"