核心在于两步:确保日志结构化、可采集;再稳定流入es并在kibana可视化。需优化nginx日志为json格式,用filebeat采集,logstash做geoip/useragent解析与过滤,kibana构建含请求速率、攻击ip、地理热力等实时审计看板。

用 Nginx access_log 监控站点流量并接入 ELK 审计平台,核心在于两步:确保日志内容结构化、可采集;再让日志稳定流入 Elasticsearch 并在 Kibana 中可视化。这不是单纯“装个工具就完事”,而是需要配置对、路径通、字段准。
确认并优化 Nginx 日志格式
默认的 combined 格式虽可用,但审计场景下常需补充关键字段。建议在 nginx.conf 的 http 块中定义增强型日志格式:
log_format audit_json escape=json '{'
"timestamp":"$time_iso8601",'
"client_ip":"$remote_addr",'
"request_method":"$request_method",'
"uri":"$uri",'
"status":"$status",'
"body_bytes_sent":"$body_bytes_sent",'
"referer":"$http_referer",'
"user_agent":"$http_user_agent",'
"request_time":"$request_time",'
"upstream_response_time":"$upstream_response_time"'
'}';
然后启用该格式:
access_log /var/log/nginx/access.log audit_json;
重启 Nginx(nginx -s reload)后,日志将输出为每行一条标准 JSON,极大降低 Logstash 解析难度,也方便后续做字段聚合与过滤。
用 Filebeat 采集并传输日志
Filebeat 是轻量、低侵入的日志收集器,比直接用 Logstash 读文件更稳定,适合生产环境:
通过 yarn-threads-cli 与 Threads(Meta)交互。当用户想要阅读首页动态、点赞、收藏的帖子或特定帖子时使用;查看...
- 安装 Filebeat(以 Ubuntu 为例):sudo apt-get install filebeat
- 编辑 /etc/filebeat/filebeat.yml,配置输入源:
filebeat.inputs:
- type: filestream
enabled: true
paths:
- /var/log/nginx/access.log
json.keys_under_root: true
json.overwrite_keys: true
json.add_error_key: true - 配置输出到 Logstash(若直连 ES 可跳过 Logstash,但审计场景推荐经 Logstash 做清洗):
output.logstash:
hosts: ["localhost:5044"]
Logstash 做字段增强与路由
Logstash 接收后不直接入库,而是做必要处理:
- 解析 IP 归属地:使用 geoip 插件自动补全国家、城市字段
- 识别设备类型:用 useragent 插件提取 os.name、browser.name、is_mobile 等字段
- 过滤无效请求:如排除健康检查路径(/health)、爬虫 UA、内网 IP(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16)
- 按状态码分流:例如把 4xx/5xx 请求单独写入 error-index,便于告警联动
示例 filter 配置片段:
filter {
geoip { source => "client_ip" }
useragent { source => "user_agent" target => "ua" }
if [client_ip] =~ /^10\.|^172\.1[6-9]\.|^172\.2[0-9]\.|^172\.3[0-1]\.|^192\.168\./ {
drop {}
}
}
Kibana 中构建审计看板
索引模式设为 nginx-audit-* 后,即可创建面向安全与运营的视图:
- 实时请求速率折线图(按分钟聚合)
- TOP 10 攻击来源 IP(筛选 status in [403,429,503] + client_ip 计数)
- 用户地理热力图(基于 geoip.country_name 和 geoip.city_name)
- 响应时间 P95 分布(用 request_time 字段做直方图)
- Referer 来源占比环形图(区分 direct、搜索引擎、社交媒体等)
所有图表可组合进一个仪表盘,并设置自动刷新(如 30 秒),真正实现“访问即可见、异常即提醒”。










