• 排查服务器异常流量保姆级教程


    这篇文章将介绍当WEB服务器报警,提示磁盘使用率问题和带宽满载时的一些排查思路和解决方案。

    首先,我们一定要配置服务器的云监控,如果是云厂商的服务器都有监控服务,开通即可。

    如果是自建机房,监控报警策略也是必须搭建的。

    磁盘使用率报警

    原因分析

    1. 日志没有及时迁移或清理
    2. 程序异常输出了大量的垃圾文件
    3. 挂载的硬盘存储空间不足,不适应业务发展,需要挂载新的磁盘。

    解决方案

    1. 日志迁移或清理

    我们需要Nginx日志和项目运行中的关键日志,方便定位问题、数据分析。

    日志迁移的思路很简单,目前主流的云厂商都支持日志迁移和存储服务,且成本不高。

    如果是自建的服务,可以挂载专门的存储硬盘,不和业务服务器耦合在一起,将日志进行单独存储。

    2. 日志清理

    • 切换到根目录
    cd /
    
    • 1
    • 查找到大文件,比如找到大于100M的文件
    find . size +100M
    
    • 1
    • 没用的日志大文件置为空(不要直接删除,正在被使用的文件是无法直接删除的)
    cat /dev/null > /data/logs/php-fpm/error.log
    
    • 1

    网站流量异常,一直在报警

    当网站流量报警时喜忧参半,如果是因为搞活动或者网站内容命中了热点,被搜索引擎推荐,那真是像买彩票中奖一样高兴。

    不过,大多数情况,网站在毫无预兆的情况下突然打满带宽,大概率是被恶意攻击了。

    下面介绍一下我的排查思路

    首先我登录了网站的统计服务平台,发现PV/UV等关键数据并没有太大变化,但是服务器的带宽却被打满了,说明异常流量不是通过刷网站页面导致的,可能是通过刷接口导致的。

    通过分析日志排查异常流量

    1. 首先切换到日志目录,比如我的目录是

    cd /data/logs/nginx
    
    • 1

    查看访问最频繁的前10个IP

    awk '{print $1}' access.log | sort -n |uniq -c | sort -rn | head -n 10
    
    • 1

    分析结果:

    • 发现访问量最高的ip是自身服务器的外网ip
    • 发现有一组美国谷歌云的异常访问
    • 发现有一个北京XX网的异常访问
    • 其他基本是正常流量

    解决异常流量

    公网ip访问量最大:

    这是一个N年前的老项目,开发时是有一些知识盲点的,没有考虑到内网传输要比外网传输的速度快很多。

    通过下面的方式替换了外网传输为内网传输:

    • 项目中的外网ip替换为内网ip(发现项目代码并没有直接访问外网ip,而是访问了子项目的域名)

    • 配置Linux服务器的host

    # 打开Linux的hosts配置文件
    vim /etc/hosts
    
    # 将项目中请求的多个域名解析到本地的ip地址
    127.0.0.1 多个域名用空格分隔
    
    • 1
    • 2
    • 3
    • 4
    • 5

    优化完内网传输之后,就开始最重要的事情了:

    封禁恶意ip

    1. 创建(打开)黑名单配置文件
     vim /etc/nginx/blackip.conf
    
    • 1
    1. 将black.conf添加到nginx.conf中 (代码段中的…代表省略的内容)
    http{
    .
    .
    .
        #ip黑名单
        include /etc/nginx/blackip.conf;
    .
    .
    .
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    1. 添加要封禁的黑名单
    #屏蔽单个ip访问
    deny IP; 
     
    #允许单个ip访问
    allow IP; 
     
    #屏蔽所有ip访问
    deny all; 
     
    #允许所有ip访问
    allow all; 
     
    #屏蔽整个段:从127.0.0.1到127.255.255.254
    deny 127.0.0.0/8;
     
    #屏蔽IP段:从127.45.0.1到127.45.255.254
    deny 127.45.0.0/16;
     
    #屏蔽IP段:从127.45.6.1到127.45.6.254
    deny 127.45.6.0/24;
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    1. 重启Nginx服务
    nginx -s reload
    
    • 1

    停掉不用的服务

    在查询Nginx的log时,发现一些不再用的服务仍然有请求日志。

    果断停掉这些服务。

    统计访问最多的url 前10名

    cat access.log |awk '{print $7}'| sort|uniq -c| sort -rn| head -10 | more
    
    • 1

    封禁了不再使用url

    • 小程序接口封禁

    • 网站快报相关的接口封禁

    优化结果

    在进行上述操作后,收到了服务器报警恢复正常的短信通知。

    今天早晨登录服务器监控后台,发现效果是灰常明显的:

    红线左侧是处理异常流量前的带宽波动图,右侧是处理后的波动图,浅色波动线是昨天的流量情况。

    在这里插入图片描述

    总结

    这是7年前刚入行时做的项目,单机部署,排查思路比较简单清晰:查日志,封ip。

    在微服务+分布式成为主流的今天,又要用哪些思路和工具排查问题呢?

    关注我,持续更新干货好文。

  • 相关阅读:
    android应用间相互调用
    详解FAT32文件系统的簇
    线上故障突突突?如何紧急诊断、排查与恢复
    LeetCode50天刷题计划(Day 27— Pow(x, n)(18.30-19.20)
    【面试题】Spring源码中的getBean()为什么需要对“&“进行处理?
    数据结构初阶:队列
    云原生微服务 Spring Cloud Hystrix 降级、熔断实战应用
    堆排序的实现原理
    Web视频
    计算机毕业设计(60)php小程序毕设作品之共享充电桩小程序系统
  • 原文地址:https://blog.csdn.net/w425772719/article/details/126360542