天天看点

脚本

实现 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 &gt;&gt; /data/bkce/etc/nginx/conhttp.conf &lt;&lt;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 &amp;&gt;/dev/null &amp;&amp; expr $b + 1 &amp;&gt;/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" &gt;&gt; /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>" &gt;&gt; /opt/logicsvr_monitor.log

echo "logicsvr进程已存在,进程号:$pid,时间:<code>date</code>" &gt;&gt; /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&amp;sub=f34600fee4c645d397c6df2698e0cbd7

过滤日志的$body_bytes_sent 字段最大值输入到/opt/body_bytes_sent.txt

cat paas_inner_access.log |awk 'begin {max = 0} {if ($10+0 &gt; 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]" &gt;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  &gt;/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 &gt;/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

l