当前位置:网站首页 >  教程

从零搭建轻量可用系统流量统计系统 全流程实操落地详细指南

时间:2026年06月08日 23:44:54 来源:易频IT社区

一、前置环境准备

1.1 服务器要求

操作系统支持CentOS7+/Ubuntu20.04+,最低配置2核4G,需提前开放端口80(流量接入)、3000(Grafana可视化)、8125(Statsd数据上报)。

1.2 依赖安装

直接执行对应系统命令安装Docker和Docker Compose,无需手动下载安装包:

```bash Ubuntu系统执行 apt update && apt install -y docker.io docker-compose CentOS系统执行 yum install -y docker docker-compose 启动Docker并设置开机自启 systemctl enable --now docker 验证安装成功,返回版本号即正常 docker version ```

二、核心组件部署

本次采用OpenResty(Nginx)+Statsd+InfluxDB1.8+Grafana的轻量组合,无额外服务依赖,支持单机每秒万级流量统计。

2.1 编写部署配置

新建工作目录mkdir -p traffic-stat && cd traffic-stat,在目录下新建docker-compose.yml,完整可复制内容如下:

```yaml version: '3.8' services: influxdb: image: influxdb:1.8-alpine restart: always volumes: - ./influxdb:/var/lib/influxdb environment: - INFLUXDB_DB=statsd - INFLUXDB_HTTP_AUTH_ENABLED=false ports: - "8086:8086" statsd: image: graphiteapp/statsd:latest restart: always environment: - INFLUXDB_HOST=influxdb - INFLUXDB_PORT=8086 - INFLUXDB_DATABASE=statsd ports: - "8125:8125/udp" depends_on: - influxdb grafana: image: grafana/grafana:9.5.2 restart: always volumes: - ./grafana:/var/lib/grafana ports: - "3000:3000" environment: - GF_SECURITY_ADMIN_PASSWORD=admin depends_on: - influxdb openresty: image: openresty/openresty:1.21.4.1-alpine restart: always command: /bin/sh -c "opm get agladkov/lua-resty-statsd && /usr/local/openresty/bin/openresty -g 'daemon off;'" volumes: - ./nginx/conf.d:/etc/nginx/conf.d - ./nginx/html:/usr/local/openresty/nginx/html ports: - "80:80" depends_on: - statsd ```

2.2 启动服务

执行以下命令一键启动所有组件:

```bash docker-compose up -d ```

执行docker ps,确认4个容器状态均为Up即为部署成功,若有容器启动失败可看第六部分排查。

三、流量采集规则配置

3.1 编写Nginx配置

执行命令新建配置目录mkdir -p nginx/conf.d nginx/html,在nginx/conf.d下新建default.conf,完整可复制内容如下:

```nginx server { listen 80; server_name _; root /usr/local/openresty/nginx/html; index index.html; 静态资源默认返回,可替换为你的业务服务代理配置 location / { try_files $uri $uri/ =404; } 流量上报逻辑,无需修改 log_by_lua_block { local statsd = require "resty.statsd" local sd, err = statsd.new({ host = "statsd", port = 8125, namespace = "nginx" }) if not sd then ngx.log(ngx.ERR, "statsd init failed: ", err) return end -- 上报总请求数 sd:increment("requests") -- 上报各状态码数量 sd:increment("status." .. ngx.var.status) -- 上报响应时间(单位毫秒) sd:timer("request_time", tonumber(ngx.var.request_time) 1000) -- 上报各接口请求数 local safe_uri = ngx.var.uri:gsub("/", "_"):gsub("%.", "_") sd:increment("uri." .. safe_uri) } } ```

3.2 重载配置

从零搭建轻量可用系统流量统计系统 全流程实操落地详细指南

执行以下命令重载Nginx配置,无需重启容器:

```bash docker exec -it openresty nginx -s reload ```

四、数据可视化配置

4.1 登录Grafana

访问http://你的服务器IP:3000,默认账号密码为admin/admin,首次登录可自定义修改密码。

4.2 配置数据源

左侧菜单选择Connections→Data sources→Add data source,选择InfluxDB,填写以下配置:

  • URL:http://influxdb:8086
  • Database:statsd
  • User/Password:留空即可

点击Save & test,提示连接成功即为配置完成。

4.3 导入流量统计看板

左侧菜单选择Dashboards→New→Import,输入官方预设流量统计看板ID3067,点击Load,数据源选择刚才创建的InfluxDB,点击Import即可生成完整流量统计看板,自动展示QPS、状态码占比、响应时间分布、TOP接口流量排行等核心指标。

五、功能验证与告警配置

5.1 流量模拟验证

执行以下命令模拟1000次请求,验证数据是否正常上报:

```bash 先安装ab压测工具,Ubuntu执行apt install -y apache2-utils,CentOS执行yum install -y httpd-tools ab -n 1000 -c 10 http://你的服务器IP/ ```

等待1分钟后刷新Grafana看板,即可看到对应流量数据。

5.2 告警规则配置

以QPS超过阈值告警为例,操作步骤如下:

  • 点击看板QPS面板右上角→Edit→Alert tab→Add alert rule
  • 阈值设置为业务所需数值(比如1000),持续时间设为1m
  • 通知渠道选择Alertmanager/邮箱/Webhook,填写对应接收地址即可触发告警推送

六、常见问题排查

  • 看板无数据:执行docker exec -it openresty cat /var/log/nginx/error.log查看Nginx是否有上报错误,再执行docker exec -it influxdb influx -database statsd -execute "select from nginx_requests limit 10"查看InfluxDB是否有数据,无数据则检查Statsd端口8125是否连通
  • 端口无法访问:Ubuntu执行ufw allow 端口号/tcp,CentOS执行firewall-cmd --add-port=端口号/tcp --permanent && firewall-cmd --reload,同时检查云服务商安全组是否开放对应端口
  • 容器启动失败:执行docker logs 容器ID查看错误日志,常见原因为端口被占用,修改docker-compose.yml中的端口映射即可解决

相关推荐

最新

热门

推荐

精选

标签

易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。

Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图