​OpenObserve + Logstash + Filebeat 轻量化监控Nginx

📦 整体架构

Nginx -->|JSON 日志| Filebeat -->|5044 端口| Logstash
Logstash -->|HTTP 输出| OpenObserve

🛠️ 部署步骤

1. ​创建目录结构
mkdir -p ob-stack/{filebeat,logstash/pipeline,nginx/conf}
cd ob-stack
2. ​**编写 docker-compose.yml**​
version: '3.8'
services:
  # OpenObserve 服务(对接对象存储)
  openobserve:
    image: public.ecr.aws/zinclabs/openobserve:latest
    ports:
      - "5080:5080"
    environment:
      ZO_ROOT_USER_EMAIL: "admin@example.com"
      ZO_ROOT_USER_PASSWORD: "Complexpass#123"
    networks:
      - obs-net

  # Logstash 服务
  logstash:
    image: docker.elastic.co/logstash/logstash:8.13.4
    ports:
      - "5044:5044"
    volumes:
      - ./logstash/pipeline:/usr/share/logstash/pipeline
    environment:
      LS_JAVA_OPTS: "-Xmx2g -Xms2g"
    networks:
      - obs-net

  # Filebeat 服务
  filebeat:
    image: docker.elastic.co/beats/filebeat:8.13.4
    volumes:
      - ./filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml
      - ./nginx/logs:/var/log/nginx
    networks:
      - obs-net
    depends_on:
      - nginx
      - logstash

  # Nginx 服务(日志源)
  nginx:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./nginx/logs:/var/log/nginx
      - ./nginx/conf/log-json.conf:/etc/nginx/conf.d/log-json.conf
    networks:
      - obs-net

networks:
  obs-net:
    driver: bridge

⚙️ 关键配置详解

1. Nginx JSON 日志配置

nginx/conf/log-json.conf

log_format json_combined escape=json
  '{'
    '"timestamp":"$time_iso8601",'
    '"client_ip":"$remote_addr",'
    '"method":"$request_method",'
    '"path":"$uri",'
    '"status":$status,'
    '"response_size":$body_bytes_sent,'
    '"user_agent":"$http_user_agent"'
  '}';

access_log /var/log/nginx/access.log json_combined;
2. Filebeat 配置

filebeat/filebeat.yml

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/nginx/access.log
  json.keys_under_root: true  # 直接解析 JSON 字段[6,8](@ref)
  json.overwrite_keys: true

output.logstash:
  hosts: ["logstash:5044"]  # 发送到 Logstash 容器
3. Logstash 管道配置

logstash/pipeline/logstash.conf

input {
  beats { port => 5044 }
}

filter {
  # 时间戳标准化(对齐 OpenObserve)
  date {
    match => ["timestamp", "ISO8601"]
    target => "@timestamp"
  }
  # 删除冗余字段
  mutate {
    remove_field => ["log", "input", "ecs"]
  }
}

output {
  http {
    url => "http://8.154.24.125:5080/api/default/default/_json"
    http_method => "post"
    format => "json_batch"
    headers => {
      "Authorization" => "Basic YWRtaW5AZXhhbXBsZS5jb206Q29tcGxleHBhc3MjMTIz"
      "Content-Type" => "application/json"
    }
  }
}

💾 性能对比​:列式存储 + 压缩技术使 OpenObserve 存储成本比 ES ​降低 140倍,查询速度快 3-5 倍4


✅ ​启动与验证

# 生成 Base64 凭证(用于 Logstash 认证)
echo -n "admin@example.com:Complexpass#123" | base64 > .env
export BASE64_CREDS=$(cat .env)

# 启动所有服务
docker-compose up -d

# 生成测试日志
curl http://localhost

# 登录 OpenObserve 查询
浏览器访问 http://localhost:5080 → 输入账号密码 → 执行查询:
SELECT * FROM "default" WHERE status = 200

通过此方案,您已构建了一个存储成本极低、查询高效、支持 PB 级日志的云原生观测平台,替代传统 ELK 方案可节省 90% 以上成本4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

七七powerful

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值