服務(wù)器架構(gòu)
服務(wù)器系統(tǒng)為centos7
首先需要知曉系統(tǒng)的對(duì)外的架構(gòu)
一般架構(gòu):
1.域名--->云服務(wù)器(ECS)
2.域名--->CDN--->云服務(wù)器(OSS)
3.域名--->CDN--->云服務(wù)器ECS+數(shù)據(jù)庫RDS+緩存redis
4.域名--->CDN--->負(fù)載均衡--->云服務(wù)器ECS+數(shù)據(jù)庫RDS(主從)+緩存Redis
5.域名--->CDN-->WAF防火墻--->負(fù)載均衡--->云服務(wù)器ECS+數(shù)據(jù)庫RDS(主從)+緩存Redis
再根據(jù)實(shí)際情況出現(xiàn)的問題,一步步排查。
發(fā)現(xiàn)問題
一、發(fā)現(xiàn)問題
首先發(fā)現(xiàn)問題,及時(shí)確定哪個(gè)服務(wù)出現(xiàn)問題,以便方便快速定位問題。查找對(duì)應(yīng)的域名和設(shè)備
Zabbix監(jiān)控發(fā)釘釘告警
阿里云監(jiān)控告警短信
【阿里云】尊敬的***,云監(jiān)控-云數(shù)據(jù)庫RDS版<華南1(深圳)-*****-只讀>于<09:54>發(fā)生報(bào)警,CPU使用率(91.88>=80),持續(xù)時(shí)間4分鐘
3.shell腳本郵件告警
4.其他同事
客服、市場同事等釘釘、電話報(bào)告出現(xiàn)的問題
二、快速定位問題
網(wǎng)絡(luò)帶寬(CDN是否異常)
域名是否解析到源站
登錄阿里云CDN后臺(tái)查看相應(yīng)流量
負(fù)載均衡
檢查負(fù)載均衡是否正常運(yùn)行,是否流量異常
應(yīng)用層服務(wù)器
ECS服務(wù)器負(fù)載是否正常、cpu、內(nèi)存負(fù)載是否過高,硬盤使用率是否達(dá)到100%等
緩存服務(wù)器
redis服務(wù)器負(fù)載是否正常、內(nèi)存使用率如何
數(shù)據(jù)庫服務(wù)器
數(shù)據(jù)庫連接數(shù)是否正常
列出當(dāng)前用戶的所有連接信息;
show full processlist;
殺進(jìn)程,時(shí)長消耗太長的sql進(jìn)程
select concat('kill ', id, ';') from information_schema.processlist where command != 'Sleep' and time > 2*60 order by time desc;
讓將sql語句發(fā)給后端研發(fā)分析
遠(yuǎn)程連接服務(wù)器
問題:CPU高,負(fù)載高,訪問慢(數(shù)據(jù)庫正常)
系統(tǒng)層面
查看負(fù)載
查看負(fù)載、CPU、內(nèi)存、上線時(shí)間、高資源進(jìn)程
# top
安裝: yum -y install htop
# htop
查看top服務(wù)器負(fù)載,內(nèi)存消耗,df -h查看硬盤
top
df
查看Nginx日志
如果有nginx日志,進(jìn)入nginx日志目錄
按照日志大小排列
判斷日志訪問、相應(yīng)時(shí)長,url等
cd /data/wwwroot/log
ll -Srh
tail -f XXX.XXX.COM-access.log
分析日志,找出最多的IP日志、最多的URL等
GoAccess 、ELK后臺(tái)查看日志
查看磁盤使用情況
df -h
查看磁盤當(dāng)前情況
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)當(dāng)前磁盤忙碌,則查看是哪個(gè) PID 在忙碌:
安裝 yum install -y iotop
# iotop -o -P -k -d 5
查看對(duì)外服務(wù)和端口
# 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)絡(luò)問題
ping域名
ping www.XXX.com
查看網(wǎng)絡(luò)節(jié)點(diǎn)情況
安裝: yum install -y traceroute
traceroute www.baidu.com
問題:CPU 低,負(fù)載高,訪問慢(數(shù)據(jù)庫)
判斷的數(shù)據(jù)庫
1.慢查詢
檢查慢查詢?nèi)罩荆赡苁锹樵円鹭?fù)載高,根據(jù)配置文件查看存放位置:log_slow_queries
2.是否有系統(tǒng)瓶頸
升級(jí)系統(tǒng)cpu、內(nèi)存、硬盤,
優(yōu)化架構(gòu)增加主從,一主多從等。
3.sleep連接是否過多
show full processlist;
4.查看最大連接數(shù)
查看設(shè)置的最大連接數(shù)
show variables like 'max_connections';
重新設(shè)置最大連接數(shù)
set GLOBAL max_connections=300
Nginx防護(hù)基本命令
如果有一些異常訪問,可以加入配合阿里云的WAF。
訪問最多真實(shí)用戶的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í)行時(shí)間最長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來源地址
服務(wù)器防火墻封ip
封IP段
/sbin/iptables -I INPUT -s 61.37.80.0/24 -j DROP
#屏蔽單個(gè)IP的命令是
deny 123.45.6.7
#封整個(gè)段即從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;
}
特定的地址攻擊做跳轉(zhuǎn)
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主機(jī)訪問
if ($http_x_forwarded_for ~ ^$){
return 402;
}






