关键在于Vector的灵活配置:Nginx输出标准JSON日志,Vector负责跨云路由、解析、过滤及多路分发(鸿鹄/ClickHouse/ES),通过环境变量适配网络、磁盘缓冲保障不丢数据,并用Prometheus+Grafana实现可观测性闭环。

要让 Nginx 日志在跨云环境(如 AWS + 阿里云 + 自建 IDC)中被统一采集、结构化处理,并分发到多个下游(比如鸿鹄做实时分析、ClickHouse 做长期存储、Elasticsearch 做全文检索),关键不在 Nginx 本身,而在于 Vector 的灵活配置能力。Nginx 只需保持标准日志输出,Vector 承担路由、解析、过滤和多路写入的全部逻辑。
确保 Nginx 日志格式可解析且一致
Nginx 不需要为跨云做特殊改造,但日志格式必须结构清晰、字段完整,便于 Vector 后续提取。推荐使用自定义 log_format,避免依赖默认格式中的空格/引号嵌套歧义:
log_format vector_json escape=json
'{'
'"remote_addr":"$remote_addr",'
'"time_local":"$time_local",'
'"method":"$request_method",'
'"uri":"$request_uri",'
'"status":$status,'
'"bytes_sent":$body_bytes_sent,'
'"user_agent":"$http_user_agent",'
'"referer":"$http_referer",'
'"request_time":$request_time,'
'"upstream_addr":"$upstream_addr"'
'}';然后在 server 或 location 块中启用:
access_log /var/log/nginx/vector_access.log vector_json;
这样每行都是合法 JSON,Vector 可直接用 parse_json 解析,无需正则匹配,稳定性高、性能好,也方便后续添加新字段。
用 Vector 实现跨云网络适配与弹性路由
跨云场景下,各云厂商 VPC 网络隔离、安全组策略不同,Vector 必须能适配多种网络出口方式。核心是:不硬编码目标地址,而是通过环境变量或配置中心动态注入。
- 在 Vector 配置中,所有
sink的 host/port 使用占位符,例如:host = "${CLICKHOUSE_HOST:127.0.0.1}"、endpoint = "https://${ES_ENDPOINT:es.example.com}:9200" - 部署时,按所在云环境注入对应变量:AWS 实例启动脚本 export CLICKHOUSE_HOST=clickhouse-prod-us-east.internal;阿里云 ECS 则 export CLICKHOUSE_HOST=ck-vpc-cn-hangzhou.aliyuncs.com
- 对公网不可达的目标(如内网 ClickHouse),Vector 可启用 TLS + Basic Auth 或通过反向代理中转,避免暴露数据库端口
- 若某云区域网络临时中断,Vector 默认启用本地磁盘缓冲(
buffer.type = "disk"),断网期间日志暂存,恢复后自动重传,保障不丢数据
一套配置实现多目标分发与差异化处理
Vector 支持单输入、多输出(fan-out),且每个 sink 可绑定独立的 transform 链,实现“一份原始日志、多种加工形态”:
-
分发到鸿鹄:走
sink.honghu,只保留业务强相关字段(ip、uri、status、time),并添加_source = "nginx"和_env = "prod"标签,便于鸿鹄按标签聚合 -
写入 ClickHouse:经
transform.clickhouse_enrich补充 geoip(用内置geoip插件查 IP 归属)、解析 user_agent 成 device/os/browser 字段,再映射到表结构 -
同步至 Elasticsearch:用
transform.es_fulltext保留完整原始 JSON,仅重命名.message为.log_content,避免 ES 字段冲突,同时添加@timestamp字段供 Kibana 时间轴识别 - 还可加
filter模块拦截敏感路径(如/admin/api/)或错误码(status == 500),单独路由到告警通道
运维与可观测性闭环设计
跨云环境更需关注 Vector 自身是否健康、数据是否滞留、各链路吞吐是否均衡:
- 开启 Vector 内置 metrics endpoint(
api.endpoint = "0.0.0.0:8686"),用 Prometheus 定期抓取vector_component_events_total、vector_buffer_bytes_total等指标 - 配置
sink.prometheus_remote_write将自身指标直推至任一云上的 Prometheus 实例,实现“用可观测性监控可观测性管道” - 在每台 Nginx 主机部署的 Vector,统一设置
host_key = "cloud_provider"标签(值为 aws / aliyun / idc),便于在 Grafana 中按云厂商维度下钻分析延迟与失败率 - 定期用
vector top命令查看实时事件流速,验证多 sink 负载是否合理,避免某一路写入拖慢整体 pipeline











