Graylog 集中日志管理系统部署

Graylog 是一款企业级开源日志管理平台,底层使用 Elasticsearch(或 OpenSearch)存储数据,MongoDB 存储配置信息。相比原生的 ELK Stack,Graylog 提供了更加友好的 Web 管理界面、内置的告警系统和权限管理功能。本文将在搬瓦工 VPS 上使用 Docker 部署 Graylog。

一、环境要求

  • 内存:建议至少 4GB(Graylog + OpenSearch + MongoDB)。
  • 磁盘:日志存储需要大量空间,建议 40GB 以上。
  • 前置条件:已安装 Docker

二、准备密码和密钥

# 生成 password_secret(至少 16 个字符的随机字符串)
pwgen -N 1 -s 96
# 或使用
openssl rand -hex 48

# 生成 root_password_sha2(管理员密码的 SHA-256 哈希)
echo -n "your_admin_password" | sha256sum | awk '{print $1}'

三、Docker Compose 部署

mkdir -p /opt/graylog
cat > /opt/graylog/docker-compose.yml <<'EOF'
version: '3.8'

services:
  mongodb:
    image: mongo:6.0
    container_name: graylog-mongo
    restart: unless-stopped
    volumes:
      - mongo-data:/data/db

  opensearch:
    image: opensearchproject/opensearch:2.12.0
    container_name: graylog-opensearch
    restart: unless-stopped
    environment:
      - cluster.name=graylog-cluster
      - node.name=graylog-node
      - discovery.type=single-node
      - bootstrap.memory_lock=true
      - OPENSEARCH_JAVA_OPTS=-Xms1g -Xmx1g
      - DISABLE_SECURITY_PLUGIN=true
      - DISABLE_INSTALL_DEMO_CONFIG=true
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - opensearch-data:/usr/share/opensearch/data

  graylog:
    image: graylog/graylog:6.0
    container_name: graylog
    restart: unless-stopped
    depends_on:
      - mongodb
      - opensearch
    environment:
      - GRAYLOG_PASSWORD_SECRET=YOUR_PASSWORD_SECRET_HERE
      - GRAYLOG_ROOT_PASSWORD_SHA2=YOUR_SHA256_HASH_HERE
      - GRAYLOG_HTTP_BIND_ADDRESS=0.0.0.0:9000
      - GRAYLOG_HTTP_EXTERNAL_URI=http://YOUR_SERVER_IP:9000/
      - GRAYLOG_ELASTICSEARCH_HOSTS=http://opensearch:9200
      - GRAYLOG_MONGODB_URI=mongodb://mongodb:27017/graylog
    ports:
      - "9000:9000"        # Web 界面
      - "1514:1514"        # Syslog TCP
      - "1514:1514/udp"    # Syslog UDP
      - "12201:12201"      # GELF TCP
      - "12201:12201/udp"  # GELF UDP
      - "5555:5555"        # Raw/Plaintext TCP
    volumes:
      - graylog-data:/usr/share/graylog/data

volumes:
  mongo-data:
  opensearch-data:
  graylog-data:
EOF

设置系统参数

# OpenSearch 需要的系统参数
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
sysctl -p

启动服务

cd /opt/graylog
docker compose up -d

# 等待初始化完成(约 1-2 分钟)
docker compose logs -f graylog

四、初始登录

访问 http://你的IP:9000,使用以下凭据登录:

  • 用户名:admin
  • 密码:你在生成 SHA-256 哈希时使用的原始密码。

五、配置输入源(Inputs)

Graylog 通过「Inputs」接收外部日志数据。进入「System」→「Inputs」。

5.1 Syslog UDP 输入

  • 选择「Syslog UDP」,点击「Launch new input」。
  • 设置绑定地址 0.0.0.0,端口 1514
  • 勾选「Global」使其在所有节点生效。

在被监控的服务器上配置 rsyslog 转发:

# /etc/rsyslog.d/graylog.conf
*.* @YOUR_GRAYLOG_IP:1514;RSYSLOG_SyslogProtocol23Format
systemctl restart rsyslog

5.2 GELF 输入

GELF(Graylog Extended Log Format)是 Graylog 自定义的日志格式,支持结构化数据:

  • 选择「GELF UDP」或「GELF TCP」。
  • 绑定端口 12201

Docker 容器可以直接使用 GELF 日志驱动:

docker run -d \
  --log-driver=gelf \
  --log-opt gelf-address=udp://YOUR_GRAYLOG_IP:12201 \
  --log-opt tag="myapp" \
  your-app:latest

5.3 Raw/Plaintext 输入

用于接收纯文本格式的日志,端口 5555。适合通过 netcat 等工具直接发送日志。

六、日志处理管道(Pipelines)

Graylog 的 Pipeline 功能可以对收到的日志进行实时处理和转换。进入「System」→「Pipelines」。

6.1 创建规则

rule "extract nginx fields"
when
  has_field("message") AND contains(to_string($message.message), "GET")
then
  let parsed = grok(pattern: "%{COMBINEDAPACHELOG}", value: to_string($message.message));
  set_field("client_ip", parsed.clientip);
  set_field("http_method", parsed.verb);
  set_field("http_status", to_long(parsed.response));
  set_field("url_path", parsed.request);
end

6.2 创建管道

  • 创建新管道,添加阶段(Stage)。
  • 将规则绑定到对应的阶段。
  • 将管道连接到指定的数据流(Stream)。

七、数据流(Streams)

Streams 用于将日志按条件路由到不同的存储和处理通道:

  • 进入「Streams」→「Create stream」。
  • 添加规则,例如「field source matches exactly nginx」。
  • 将匹配的日志路由到特定索引集,可设置不同的保留策略。

八、告警配置

Graylog 内置告警系统,进入「Alerts」→「Event Definitions」:

8.1 创建事件定义

  • Condition Type:选择「Filter & Aggregation」。
  • Search Query:输入触发条件,如 http_status:>=500
  • Aggregation:设置聚合条件,如「count() > 10 in 5 minutes」。

8.2 配置通知

在「Notifications」中配置告警发送方式:

  • Email:需要在 Graylog 配置文件中设置 SMTP。
  • HTTP:发送 Webhook 请求到指定 URL。
  • Slack:通过 Slack Webhook 发送通知。

九、索引管理

进入「System」→「Indices」管理索引集:

  • Index Rotation:设置索引轮转策略(按时间、大小或消息数量)。
  • Index Retention:设置保留策略,自动删除过期索引。
  • 建议配置:每天轮转一次,保留 30 天数据。
# 查看索引状态
curl http://localhost:9200/_cat/indices?v

十、常见问题

Graylog 无法启动

# 查看日志
docker compose logs graylog

# 常见原因:
# 1. password_secret 或 root_password_sha2 未正确设置
# 2. OpenSearch 未就绪
# 3. vm.max_map_count 未设置

收不到日志

确认 Input 已正确创建且显示为「Running」状态。检查防火墙是否放行了对应端口。

# 测试日志发送
echo "test message" | nc -u YOUR_GRAYLOG_IP 1514

总结

Graylog 提供了比原生 ELK Stack 更加友好的日志管理体验,内置的告警、权限和管道功能大大降低了运维门槛。对于轻量级场景,也可以考虑 Grafana Loki 方案。选购搬瓦工 VPS 请参考 全部方案,使用优惠码 NODESEEK2026 可享受 6.77% 的循环折扣。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。