实现 nginx 日志切割,脚本执行时切割备份 nginx 日志,生成当前时间 <code>年-月-日:时:分:秒</code> 格式的目录,并将切割的日志放到该目录下,脚本不能影响 nginx 正常运行,不能丢失任何日志内容。
#!/bin/bash
logs_path=/data/bkce/logs/oldlogs
cur_logs_path=/data/bkce/logs/nginx
yesterday=$(date +%y-%m-%d-%h:%m:%s)
cp $cur_logs_path/access.log $logs_path/${yesterday}_access.log
crontab –e
59 23 bash /xxx.sh //每天23:59分执行切割
####################################################
修改 paas 的子工程 apigw、appengine、esb的worker数量为4个,login的 worker 数量为 6 个
调整调 paas 的 worker 数量数 /data/bkce/etc/uwsgi-open_paas.ini 里的 workers 配置
/data/src/open_paas/support-files/templates/#etc#uwsgi-open_paas-apigw.ini
增加或修改参数workers = 4
./bkcec render paas
./bkcec sync paas
cat /data/bkce/etc/uwsgi-open_paas-apigw.ini
配置nginx监听内网ip,并启动nginx
ip=$(ifconfig eth0|awk 'nr==2{print $2}')
sed -i -r "/^[^#].listen.[.]/d; s/^[^#].(listen).*/ \1 $ip\;/g" /etc/nginx/nginx.conf
nginx -s stop
cat >> /data/bkce/etc/nginx/conhttp.conf <<eof
server {
listen 80;
server_name localhost;
allow 127.0.0.1; # 表示只允许本机访问
deny all; # 表示禁止任何来源访问
location /nginx_status {
stub_status on;
}
eof
######
统计一分钟/api/c/compapi/cc/get_app_list接口post请求出现的次数,并把命令和结果输出到post_60.txt;
#####################################################
脚本支持参数两个正整数,输出 n-m 的累加值(n-m 代表俩个参数),若是参数不符合,输出错误。
read -p "please input a number:" a
read -p 'please input the end num:' b
if expr $a + 1 &>/dev/null && expr $b + 1 &>/dev/null
then
for i in <code>seq $a $b</code>
do
sum=$[$sum+$i]
done
echo $sum
else
echo “错误”
fi
写一个脚本,实现判断 10.0.6.0/23 网络里,当前在线用户的 ip 有哪些?
nmap -sn 10.0.6.0/23
模拟磁盘文件命令:
dd if=/dev/zero of=/tmp/exam/10gb.log bs=100mb count=100
touch -d "10 days ago" /tmp/exam/10gb.log
设置脚本上报,所有采集linux <code>time_wait、established、close_wait</code>的tcp状态数量
echo loadavg1 $(netstat -anptl|grep established|wc -l)
echo loadavg2 $(netstat -anptl|grep time_wait|wc -l)
echo loadavg3 $(netstat -anptl|grep close_wait|wc -l)
新建脚本,采集机器的 cpu 使用率。
#!/bin/sh
#脚本功能描述:依据/proc/stat文件获取并计算cpu使用率
#cpu时间计算公式:cpu_time=user+system+nice+idle+iowait+irq+softirq
#cpu使用率计算公式:cpu_usage=[(user_2 +sys_2+nice_2) - (user_1 + sys_1+nice_1)]/(total_2 - total_1)*100
#默认时间间隔
time_interval=5
time=$(date "+%s")
last_cpu_info=$(cat /proc/stat | grep -w cpu | awk '{print $2,$3,$4,$5,$6,$7,$8}')
last_sys_idle=$(echo $last_cpu_info | awk '{print $4}')
last_user_busy=$(echo $last_cpu_info | awk '{print $1}')
last_sys_busy=$(echo $last_cpu_info | awk '{print $3}')
last_total_cpu_t=$(echo $last_cpu_info | awk '{print $1+$2+$3+$4+$5+$6+$7}')
last_cpu_usage=$(echo $last_cpu_info | awk '{print $1+$2+$3}')
sleep ${time_interval}
next_cpu_info=$(cat /proc/stat | grep -w cpu | awk '{print $2,$3,$4,$5,$6,$7,$8}')
next_sys_idle=$(echo $next_cpu_info | awk '{print $4}')
next_user_busy=$(echo $next_cpu_info | awk '{print $1}')
next_sys_busy=$(echo $next_cpu_info | awk '{print $3}')
next_total_cpu_t=$(echo $next_cpu_info | awk '{print $1+$2+$3+$4+$5+$6+$7}')
next_cpu_usage=$(echo $next_cpu_info | awk '{print $1+$2+$3}')
#系统空闲时间
system_idle=<code>echo ${next_sys_idle} ${last_sys_idle} | awk '{print $1-$2}'</code>
#系统使用时间
system_busy=<code>echo ${next_sys_busy} ${last_sys_busy} | awk '{print $1-$2}'</code>
#用户使用时间
user_busy=<code>echo ${next_user_busy} ${last_user_busy} | awk '{print $1-$2}'</code>
#用户+系统+nice时间
total_busy=<code>echo ${next_cpu_usage} ${last_cpu_usage} | awk '{print $1-$2}'</code>
#cpu总时间
total_time=<code>echo ${next_total_cpu_t} ${last_total_cpu_t} | awk '{print $1-$2}'</code>
#cpu总时间百分比
cpu_usage=<code>echo ${total_busy} ${total_time} | awk '{printf "%.2f", $1/$2*100}'</code>
#用户时间百分比
#cpu_user_usage=<code>echo ${user_busy} ${total_time}|awk '{printf "%.2f", $1/$2*100}'</code>
#系统时间百分比
#cpu_sys_usage=<code>echo ${system_busy} ${total_time} |awk '{printf "%.2f", $1/$2*100}'</code>
echo "cpu_usage" ${cpu_usage}
打开 tcp 连接快速回收功能 提示:
echo "net.ipv4.tcp_tw_reuse = 1" >> /etc/sysctl.conf
修改主机名,如果机器 ip 为 10.0.6.33 ,则修改主机名为 agent-6-33
host_ip=<code>hostname -i|awk '{print $2}'</code>
if [ $host_ip=='10.0.6.33' ]
hostnamectl set-hostname agent-6-33
创建 logicsvr 进程监控,如果进程不存在自动拉起进程,并且写日志到 <code>/opt/logicsvr_monitor.log</code>
procnum=<code>ps ax|grep logicsvr|grep -v grep|wc -l</code>
if [[ $procnum -eq 0 ]]; then
/opt/logicsvr/logicsvr -c /opt/logicsvr/logicsvr.conf
pid=<code>ps ax|grep logicsvr|grep -v grep|awk '{print $1}'</code>
echo "logicsvr进程不存在,进程号:$pid,重启时间:<code>date</code>" >> /opt/logicsvr_monitor.log
echo "logicsvr进程已存在,进程号:$pid,时间:<code>date</code>" >> /opt/logicsvr_monitor.log
nginx 组件监控- 监控插件下载
nginx配置文件配置:
listen 80 default_server;
listen [::]:80 default_server;
server_name localhost;
root /usr/share/nginx/html;
############################################################
文档:nginx 日志常用操作.md
链接:http://note.youdao.com/noteshare?id=f15c4cb82db1051f9353f24f4ebded6b&sub=f34600fee4c645d397c6df2698e0cbd7
过滤日志的$body_bytes_sent 字段最大值输入到/opt/body_bytes_sent.txt
cat paas_inner_access.log |awk 'begin {max = 0} {if ($10+0 > max+0) max=$10} end {print "max=", max}'
统计一分钟/api/c/compapi/cc/get_app_list接口post请求出现的次数,并把命令和结果输出到post_60.txt
awk '/post \/api.*get_app_list/{print $0}' paas_inner_access.log |egrep "2020\:11\:2[3-4]" >post_60.txt
过滤每秒对应的post请求的次数。格式为 "时间 - 访问路径 - post 请求次数 ” 导入文件/opt/post_sum.txt,写下解题思路或命令; (5分) --(截图)
awk '{a[$7]++}end{for(i in a)print $4,$5,i,a[i]|"sort -k1 -nr"}' paas_inner_access.log >/opt/post_sum.txt
根据访问ip统计uv
awk '{print $1}' paas_inner_access.log |sort|uniq -c|wc -l
根据访问url统计pv
awk '{print $7}' paas_inner_access.log|wc -l
统计访问最多的前10个页面
awk '{print $7}' paas_inner_access.log|sort|uniq -c|sort -nr -k1 |head
统计访问最频繁的ip
awk '{print $1}' paas_inner_access.log |sort -n|uniq -c|awk 'nr==1'
根据时间段统计查看日志
cat paas_inner_access.log |sed -n '/07\/dec\/2020:15/,/07\/dec\/2020:16/p'|more
统计当日的的pv和uv
grep "04/dec/2020"paas_web_access.log |awk '{print $1}'|sort|uniq -c|wc -l|awk '{print "uv:",$1}'
grep "04/dec/2020"paas_web_access.log |awk '{print $7}'|wc -l|awk '{print "pv:",$1}'
获取最耗时的请求时间、url、耗时
请求时间:vim /data/bkce/etc/nginx/paas.conf,access_log /data/bkce/logs/nginx/paas_inner_access.log main; access_log /data/bkce/logs/nginx/paas_fqdn_access.log main;加main参数,重启nginx。
cat paas_inner_access.log |awk '{print $4,$7,$(nf-2)}'|sort -nr -k 3|head -n 1
获取每分钟的请求数量
awk -f: '{count[$2":"$3]++} end {for (minute in count) print minute, count[minute]}' paas_inner_access.log
查看某个时间段之间的ip访问个数
cat paas_inner_access.log| sed -n '/04\/dec\/2020:10/,/04\/dec\/2020:11/p'|awk '{print $1}'|sort|uniq -c|wc -l
统计每个url访问内容的总大小
awk '{sum[$7]+=$10}end{for(url in sum){print url,sum[url]}}' paas_inner_access.log |sort -nr -k2
#############################################################################
1) 设置mysql日志过期时间为3天,重启mysql该设置不会失效 (5分) --(截图)
#临时生效
show variables like 'expire_logs_days';
set global expire_logs_days = 3;
-- my.cnf 配置
expire_logs_days = 3;
2) bkdata/monitor 默认无日志输出,请修改配置文件输出日志文件/data/bkce/log/bkdata/monitor-exam.log (5分) --(截图)
3) /tmp/bkc.log日志使用logrotate进行日志分割,要求: (5分) --(截图)
- 保留3个日志文件
- 分割按日
- 分割文件名不带日期
- 启用压缩
- 日志开始第一行显示日期时间
$ cat /etc/logrotate.d/bkc
/tmp/bkc.log {
missingok
notifempty
daily
rotate 3
compress
nodateext
create
postrotate
/usr/bin/date >/tmp/bkc.log
endscript
4) logrotate -f 配置文件可能会有错误,请解决错误 (5分) --(截图)
错误信息:
error: skipping "/tmp/bkc.log" because parent directory has insecure permissions (it's world writable or writable by group which is not "root") set "su" directive in config file to tell logrotate which user/group should be used for rotation.
解决方法:
create
su root root # su user group