目的与范围:明确要监控的是面向美国用户的站群(多个域名/服务器),重点检测流量异常、黑产刷量、爬虫与DDoS。小分段:环境清单:列出被监控主机、反向代理(Nginx/Cloudflare)、日志类型(access/error、nginx、cloudflare、CDN、WAF)。权限准备:确保有读日志权限、SSH、API key(Cloudflare/云厂商)、以及内网出口到日志采集节点的网络权限。时区与时间同步:所有服务器统一使用UTC或美东时间,并启用NTP/chrony,保证日志时间一致,便于比对。
选择方案:轻量可用Filebeat+Elasticsearch+Kibana (ELK),企业可选Graylog或Splunk。小分段:部署Filebeat:在每台站群主机安装Filebeat,配置inputs指向nginx access/error与应用日志;示例filebeat.yml配置:filebeat.inputs: - type: log paths: ["/var/log/nginx/*.log"] multiline: pattern: '^\d{4}' (如需)。Logstash/Elasticsearch:如果需解析复杂字段,使用Logstash或Ingest Pipeline做Grok解析;示例Grok:%{COMBINEDAPACHELOG}。传输加密:启用SSL/TLS与API Key,避免日志泄露。
必须字段:时间(time)、客户端IP(client_ip)、请求方法(method)、URI(path)、状态码(status)、ua、referer、上游时延(upstream_time)、响应大小(bytes)、请求ID或cookie。小分段:Grok示例(Logstash): %{IPORHOST:client_ip} - %{DATA:ident} \[%{HTTPDATE:timestamp}\] "%{WORD:method} %{DATA:uri} HTTP/%{NUMBER:http_version}" %{NUMBER:status} %{NUMBER:bytes} "%{DATA:referer}" "%{DATA:ua}"。Geo/ASN enrich:在Elasticsearch ingest或Logstash中接入geoip插件,对client_ip进行geoip、asn丰富,便于按国家、州、运营商聚合。
分时间粒度建立基线(小时/分钟)。小分段:历史数据取样:至少7-30天,同周周期性(周一至周日)差异。关键指标:每分钟请求数(RPS)、唯一IP数、平均会话时长、新用户占比、404/5xx比例、平均响应时间。计算方法:用rolling window(例如过去7天同一时间段平均±标准差)或指数加权移动平均(EWMA)。例如RPS_baseline = mean(past_n_weeks_same_minute),阈值可设 rps > baseline + 4*std 触发初级告警。
从简单到复杂:阈值规则 → 统计异常 → 模型检测。小分段:阈值规则:短时间内IP请求数>500、同一UA短时间内大量不同referer、异常UA/空UA、短时间内POST失败率激增。统计异常:利用z-score或MAD检测:z = (x - mean)/std,常用阈值3或4。会话聚合检测:按IP+UA+cookie合并请求,统计单会话请求速率,超过阈值判定机器人行为。黑名单与信誉:接入第三方IP黑名单、已知爬虫UA表、Cloudflare威胁情报,优先过滤。
适用场景:站群规模大、规则容易被规避时。小分段:特征工程:构造RPS、平均URI长度、独立URI数、平均时间间隔、status分布、geo分布。模型选择:Isolation Forest/LOF用于无监督异常检测,训练步骤:1)取正常时间段样本,2)提取每分钟或每会话特征矩阵,3)训练模型(sklearn),4)批量预测得分并设阈值。示例代码思路:使用Python读取Elasticsearch聚合结果,构建DataFrame,fit IsolationForest(n_estimators=100, contamination=0.01),保存模型并在每日/每小时离线或实时评估。
告警分级:信息级、警告级、紧急级(可能是DDoS或攻击)。小分段:告警触发:在Kibana/Graylog/Elasticsearch中建立Watcher/Alert(示例:RPS超基线4σ,触发告警)。自动化动作:1)临时封禁IP(防火墙或云安全组),2)下发WAF规则(阻断特定URI/UA),3)增加CDN缓存或开启挑战页面(Cloudflare challenge)。人工确认:自动动作需记录并通知运维与安全团队,附带可回溯的日志快照(时间窗口、相关IP、样本请求)。
遇到流量异常的标准操作流程(SOP)。小分段:步骤一:确认告警与基本指标(RPS、5xx、独立IP数、地理分布);步骤二:快速抽样(取异常时间窗口的部分请求,分析UA、URI、referer);步骤三:关联上游(CDN/WAF)与源站日志,排除缓存节流导致的波动;步骤四:定位源IP/ASN,若为单ASN或单国家集中,优先采取AS/国家封禁或挑战;步骤五:后续跟踪:持续观察48小时并调整基线,复盘并在规则库加入新特征。
问:如何快速判断突增流量是正常营销活动(真实用户)还是恶意刷量/爬虫?
答:先看会话质量指标:真实用户通常带有合理的referer(搜索/社媒)、较长会话时长、多样化URI和正常UA分布;异常流量往往UA单一或伪装、会话间隔极短、同一IP/ASN或同一代理池集中、带有大量相似URI。结合转化率/订单数、前端埋点(如页面加载事件)可进一步验证。必要时对可疑流量发放挑战页或限制频率验证。
问:我用Elasticsearch/Kibana,哪些实时查询能快速定位异常?
答:几个常用KQL/DSL:1)按分钟聚合请求数:date_histogram + unique client_ip;2)按IP计数排序:terms client_ip size 20,配合top hits抽样;3)按UA聚合并查看URI分布;4)geo聚合显示按国家/州的突增。Watcher示例阈值:when sum(requests) over 1m > baseline + 4*std trigger。结合inspect hits抽取样例请求供人工核验。
问:多个站点/域名共享规则,会出现误封或放行,怎么避免?

答:采用分层规则与逐域白名单策略。具体做法:1)按站点或站群标签打上log索引(site_id),规则先按site_id匹配;2)重要站点单独设更严格或更宽松规则;3)引入“试验模式”:新规则先进入监控模式只报警不执行,观察3-7天后再启用阻断;4)保留回滚机制和人工审批,告警中附带自动回滚指令,确保误判可短时间撤销。