服務器架構
服務器系統(tǒng)為centos7
首先需要知曉系統(tǒng)的對外的架構
一般架構:
1.域名--->云服務器(ECS)
2.域名--->CDN--->云服務器(OSS)
3.域名--->CDN--->云服務器ECS+數(shù)據(jù)庫RDS+緩存redis
4.域名--->CDN--->負載均衡--->云服務器ECS+數(shù)據(jù)庫RDS(主從)+緩存Redis
5.域名--->CDN-->WAF防火墻--->負載均衡--->云服務器ECS+數(shù)據(jù)庫RDS(主從)+緩存Redis
再根據(jù)實際情況出現(xiàn)的問題,一步步排查。
發(fā)現(xiàn)問題
一、發(fā)現(xiàn)問題
首先發(fā)現(xiàn)問題,及時確定哪個服務出現(xiàn)問題,以便方便快速定位問題。查找對應的域名和設備
Zabbix監(jiān)控發(fā)釘釘告警
阿里云監(jiān)控告警短信
【阿里云】尊敬的***,云監(jiān)控-云數(shù)據(jù)庫RDS版<華南1(深圳)-*****-只讀>于<09:54>發(fā)生報警,CPU使用率(91.88>=80),持續(xù)時間4分鐘
3.shell腳本郵件告警
4.其他同事
客服、市場同事等釘釘、電話報告出現(xiàn)的問題
二、快速定位問題
網(wǎng)絡帶寬(CDN是否異常)
域名是否解析到源站
登錄阿里云CDN后臺查看相應流量
負載均衡
檢查負載均衡是否正常運行,是否流量異常
應用層服務器
ECS服務器負載是否正常、cpu、內存負載是否過高,硬盤使用率是否達到100%等
緩存服務器
redis服務器負載是否正常、內存使用率如何
數(shù)據(jù)庫服務器
數(shù)據(jù)庫連接數(shù)是否正常
列出當前用戶的所有連接信息;
show full processlist;
殺進程,時長消耗太長的sql進程
select concat('kill ', id, ';') from information_schema.processlist where command != 'Sleep' and time > 2*60 order by time desc;
讓將sql語句發(fā)給后端研發(fā)分析
遠程連接服務器
問題:CPU高,負載高,訪問慢(數(shù)據(jù)庫正常)
系統(tǒng)層面
查看負載
查看負載、CPU、內存、上線時間、高資源進程
# top
安裝: yum -y install htop
# htop
查看top服務器負載,內存消耗,df -h查看硬盤
top
df
查看Nginx日志
如果有nginx日志,進入nginx日志目錄
按照日志大小排列
判斷日志訪問、相應時長,url等
cd /data/wwwroot/log
ll -Srh
tail -f XXX.XXX.COM-access.log
分析日志,找出最多的IP日志、最多的URL等
GoAccess 、ELK后臺查看日志
查看磁盤使用情況
df -h
查看磁盤當前情況
IOStat -x -k 3 3
avg-cpu: %user %nice %system %iowait %steal %idle
3.70 0.00 2.25 0.41 0.00 93.64
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util
vda 0.01 0.83 0.30 1.48 11.34 12.13 26.30 0.01 6.15 7.41 5.89 0.24 0.04
vdb 0.00 0.17 0.02 0.28 0.08 2.75 19.15 0.00 3.22 2.01 3.29 0.26 0.01
vdc 0.10 0.84 3.09 0.56 105.22 20.57 68.94 0.02 7.96 3.29 33.74 1.33 0.49
如果發(fā)現(xiàn)當前磁盤忙碌,則查看是哪個 PID 在忙碌:
安裝 yum install -y iotop
# iotop -o -P -k -d 5
查看對外服務和端口
# netstat -tunpl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:62920 0.0.0.0:* LISTEN 29177/vsftpd
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 4393/httpd
tcp 0 0 0.0.0.0:7300 0.0.0.0:* LISTEN 4697/php-fpm: maste
查看 PID 具體在
安裝 yum install lsof
lsof -p PID
lsof -p 29177
lsof -p 4697
查看系統(tǒng)日志
tail -400f /var/log/messages
tail -f /var/log/messages
tail -n100 /var/log/messages
head -n100 /var/log/messages
查看簡化線程樹
pstree -a >> /root/pstree.log
網(wǎng)絡問題
ping域名
ping www.XXX.com
查看網(wǎng)絡節(jié)點情況
安裝: yum install -y traceroute
traceroute www.baidu.com
問題:CPU 低,負載高,訪問慢(數(shù)據(jù)庫)
判斷的數(shù)據(jù)庫
1.慢查詢
檢查慢查詢日志,可能是慢查詢引起負載高,根據(jù)配置文件查看存放位置:log_slow_queries
2.是否有系統(tǒng)瓶頸
升級系統(tǒng)cpu、內存、硬盤,
優(yōu)化架構增加主從,一主多從等。
3.sleep連接是否過多
show full processlist;
4.查看最大連接數(shù)
查看設置的最大連接數(shù)
show variables like 'max_connections';
重新設置最大連接數(shù)
set GLOBAL max_connections=300
Nginx防護基本命令
如果有一些異常訪問,可以加入配合阿里云的WAF。
訪問最多真實用戶的IP
cat www.XXXX.com-access.log |awk '{print $5}'| awk -F":" '{print $NF}' |sort|uniq -c|sort -nr|head -10
查看訪問排行前10的url
cat www.XXX.com-access.log | awk '{print $10}' | sort | uniq -c | sort -nr | head -n 10
執(zhí)行時間最長10條
cat www.XXX.com-access.log | sort -nr | head -n 10
查看http_referer來路:
cat www.XXX.com-access.log | awk -F"from:" '{print $NF}' |sort|uniq -c|sort -nr|head -10
封IP,查看特定的referer來源地址
服務器防火墻封ip
封IP段
/sbin/iptables -I INPUT -s 61.37.80.0/24 -j DROP
#屏蔽單個IP的命令是
deny 123.45.6.7
#封整個段即從123.0.0.1到123.255.255.254的命令
deny 123.0.0.0/8
禁止特定用戶代理(User Agents)訪問
if ($http_user_agent ~* (wget|curl|Firefox) ) {
return 404;
}
特定的地址攻擊做跳轉
rewrite ^/accounts/+$str+ http://127.0.0.1/ redirect;
根據(jù) user_agent 控制客戶端訪問
location / {
if ($http_user_agent ~ 'bingbot/2.0|MJ12bot/v1.4.2|Spider/3.0|YoudaoBot|Tomato|Gecko/20100315'){
return 403;
}
}
圖片防盜鏈
valid_referers none blocked *.XXX.com server_names ~.google. ~.baidu.;
if ($invalid_referer) {
# return 403;
rewrite ^/ http://www.XXX.com/daoling.png;
}
不允許host為localhost訪問
if ($host = 'localhost') {
return 403;
}
不允許agent為空
if ($http_user_agent ~ ^$){
return 403;
}
不允許綁定host主機訪問
if ($http_x_forwarded_for ~ ^$){
return 402;
}