关键词:CentOS、Graylog、日志管理、Elasticsearch、MongoDB、系统部署、日志分析
摘要:本文详细讲解在 CentOS 系统中部署 Graylog 日志管理系统的完整流程,涵盖核心依赖组件(Elasticsearch、MongoDB)的安装配置、Graylog Server 的部署优化、日志收集规则配置、Web 界面初始化及实战应用。通过分步解析技术细节与最佳实践,帮助读者掌握企业级日志管理平台的搭建与运维方法,提升系统故障排查、安全审计和性能分析效率。
随着分布式系统、微服务架构的普及,日志管理成为系统运维与监控的核心环节。Graylog 作为开源日志管理平台,支持多源日志收集、实时分析、可视化展示及警报触发,广泛应用于企业级日志处理场景。本文聚焦 CentOS 7/8 系统,完整覆盖从环境准备到生产级部署的全流程,包含依赖组件安装、服务配置优化、日志接入测试及实战应用案例。
缩写 | 全称 |
---|---|
JVM | Java 虚拟机(Java Virtual Machine) |
HTTP | 超文本传输协议(HyperText Transfer Protocol) |
TLS/SSL | 传输层安全/安全套接字层(Transport Layer Security/Secure Sockets Layer) |
Graylog 采用 分布式架构,核心组件包括:
组件交互流程图(Mermaid):
wget
、curl
、tar
等基础工具组件 | 最低配置(单节点) | 生产环境建议(单节点) |
---|---|---|
CPU | 2 核 | 4 核及以上 |
内存 | 4GB | 8GB 及以上(Elasticsearch 至少分配 2GB) |
存储 | 50GB 硬盘 | SSD 存储,200GB 以上 |
网络 | 千兆网卡 | 双千兆网卡(分离管理与数据流量) |
# 临时关闭 SELinux
setenforce 0
# 永久关闭(修改 /etc/selinux/config)
sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config
# 关闭防火墙(生产环境建议配置规则而非关闭)
systemctl stop firewalld
systemctl disable firewalld
cat > /etc/yum.repos.d/mongodb-org-4.4.repo <<EOF
[mongodb-org-4.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/\$releasever/mongodb-org/4.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-4.4.asc
EOF
yum install -y mongodb-org
/var/lib/mongodb
)vi /etc/mongod.conf
# 修改以下配置
storage:
dbPath: /data/mongodb # 建议使用独立数据分区
journal:
enabled: true
systemLog:
destination: file
logAppend: true
path: /var/log/mongodb/mongod.log
net:
port: 27017
bindIp: 0.0.0.0 # 允许远程访问(生产环境需限制IP)
systemctl start mongod
systemctl enable mongod
systemctl status mongod # 检查状态
# 添加 Elasticsearch YUM 源
cat > /etc/yum.repos.d/elasticsearch.repo <<EOF
[elasticsearch-7.x]
name=Elasticsearch 7.x
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF
yum install -y elasticsearch
vi /etc/elasticsearch/jvm.options
# 修改以下参数(建议分配物理内存的 50%,不超过 32GB)
-Xms2g
-Xmx2g
vi /etc/elasticsearch/elasticsearch.yml
# 添加以下配置
cluster.name: graylog-es-cluster
node.name: node-1
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["localhost"] # 单节点模式
cluster.initial_master_nodes: ["node-1"]
# 修改系统限制(临时生效)
ulimit -n 65536
ulimit -u 4096
# 永久生效(添加到 /etc/security/limits.conf)
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096
systemctl start elasticsearch
systemctl enable elasticsearch
systemctl status elasticsearch
# Graylog 4.3 版本(截至2023年)
rpm --import https://packages.graylog2.org/RPM-GPG-KEY-graylog
cat > /etc/yum.repos.d/graylog.repo <<EOF
[graylog]
name=Graylog
baseurl=https://packages.graylog2.org/repo/centos/\$releasever/\$basearch/
enabled=1
gpgcheck=1
gpgkey=https://packages.graylog2.org/RPM-GPG-KEY-graylog
EOF
yum install -y graylog-server
vi /etc/graylog/server/server.conf
# HTTP 服务配置
http_bind_address = 0.0.0.0 # 绑定所有IP
http_port = 9000 # 访问端口
http_external_uri = http://your-server-ip:9000 # 外部访问URL
# MongoDB 配置
mongodb_uri = mongodb://localhost:27017/graylog # 数据库名称
mongodb_username = # 无认证时留空
mongodb_password = # 无认证时留空
# Elasticsearch 配置
elasticsearch_hosts = http://localhost:9200 # 集群地址(逗号分隔)
elasticsearch_number_of_shards = 2 # 索引分片数
elasticsearch_number_of_replicas = 1 # 副本数(生产环境根据节点数调整)
# 日志存储配置
root_password_sha2 = # 初始管理员密码哈希(后续通过Web界面设置)
timezone = Asia/Shanghai # 时区设置
# JVM 内存配置(修改 /etc/sysconfig/graylog-server)
GRAYLOG_SERVER_JAVA_OPTS="-Xms1g -Xmx1g -server" # 建议至少1GB,根据内存大小调整
# 生成密码哈希(例如密码为 'admin')
echo -n "admin" | sha256sum | cut -d' ' -f1
systemctl start graylog-server
systemctl enable graylog-server
systemctl status graylog-server # 检查日志输出,确保无启动错误
打开浏览器访问 http://服务器IP:9000
,首次访问会进入初始化向导。
admin
)、密码(与之前生成的哈希对应)Graylog Cluster
)Asia/Shanghai
GELF-UDP-Input
0.0.0.0
12201
(默认GELF端口)Recieve GELF Chunked Messages
(处理大日志)514
,协议 UDP
RFC3164
或 RFC5424
# 发送 GELF 格式日志
echo '{"version":"1.1","host":"test-host","short_message":"Test log","level":5,"facility":"graylog"}' | nc -u localhost 12201
# 发送 Syslog 日志
echo "<13>Oct 10 12:34:56 test-host myapp[1234]: Hello Graylog" | nc -u localhost 514
Last 15 minutes
source:test-host
验证日志是否存在# 修改 Docker 服务配置(/etc/docker/daemon.json)
{
"log-driver": "gelf",
"log-opts": {
"gelf-address": "udp://graylog-server-ip:12201",
"tag": "docker-container"
}
}
# 重启 Docker 服务
systemctl restart docker
使用查询条件 tag:docker-container
筛选 Docker 日志,通过 container_name
字段定位具体容器。
rule "Extract custom fields from JSON"
when
message contains "custom_data"
then
let json = parseJson(message.custom_data);
message.put("user_id", json.user_id);
message.put("event_type", json.event_type);
end
通过管道提取 user_id
和 event_type
,可在仪表盘创建用户行为趋势图,统计各事件发生频率。
level:ERROR
# 通过 Elasticsearch API 创建策略(/etc/elasticsearch/lifecycle/policy.json)
{
"policy": {
"phases": {
"hot": {
"min_age": "0ms",
"actions": {
"set_priority": { "priority": 100 }
}
},
"warm": {
"min_age": "30d",
"actions": {
"forcemerge": { "max_num_segments": 1 }
}
},
"delete": {
"min_age": "90d",
"actions": {
"delete": {}
}
}
}
}
}
在 System > Index Management 中,设置索引按天创建,关联上述生命周期策略。
openssl req -x509 -nodes -days 3650 -newkey rsa:4096 -keyout /etc/graylog/graylog.key -out /etc/graylog/graylog.crt
修改 server.conf
:
http_enable_tls = true
http_tls_cert_file = /etc/graylog/graylog.crt
http_tls_key_file = /etc/graylog/graylog.key
/var/log/graylog/server.log
)http_bind_address
和 http_port
,配置防火墙规则允许 9000 端口通过在 CentOS 系统中完整部署 Graylog 日志管理系统,企业可实现:
未来,随着边缘计算、Serverless 架构的普及,Graylog 将进一步与云原生工具链(如 Kubernetes、Prometheus)深度整合,推动日志管理向智能化、自动化方向发展。建议在生产环境中结合集群部署与数据持久化方案,确保日志系统的高可用性与可扩展性。
通过本文的实践指导,读者可掌握从环境搭建到高级配置的全流程,为企业级日志管理平台的落地提供坚实技术支撑。