适用场景:
1.如果需求复杂,服务器资源不受限制,推荐使用ELK(Logstash + Elasticsearch + Kibana
)方案;
2.如果需求仅是将不同服务器上的日志采集上来集中展示和检索,且需要一个轻量级的框架,那使用PLG(Promtail + Loki + Grafana
)最合适不过了。
3.Graylog专注于日志管理,内置报警功能,可配置当系统发生异常时下发邮件进行通知。
三者对比如下所示:
从左到右分别是: ELK Graylog Loki + Grafana + Promtail
资源消耗 | 高 | 中 | 低 |
部署复杂度 | 高 | 中 | 低 |
查询能力 | 强 | 中 | 弱 |
可视化能力 | 强(Kibana 丰富) | 一般 | 强(Grafana 丰富) |
适合场景 | 大规模日志,复杂查询和分析 | 中小型项目,快速部署 | 中等日志量,轻量化监控 |
特点和适用场景:
下面介绍下它的安装:
安装 Docker:
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker
安装 Docker Compose:
1. sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
2. sudo chmod +x /usr/local/bin/docker-compose
3. docker-compose --version
为持久化存储 MongoDB 和 Elasticsearch 数据,创建本地目录:
mkdir -p /opt/graylog/mongo/data
mkdir -p /opt/graylog/elasticsearch/data
mkdir -p /opt/graylog/graylog
设置权限(确保 Docker 有权限写入):
sudo chown -R 1000:1000 /opt/graylog/elasticsearch/data
sudo chown -R 1000:1000 /opt/graylog/mongo/data
sudo chown -R 1000:1000 /opt/graylog/graylog
3. 创建 Docker Compose 配置文件
version: '3'
services:
mongo:
image: mongo:5.0
container_name: mongo
restart: always
volumes:
- /opt/graylog/mongo/data:/data/dbelasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.10.2
container_name: elasticsearch
environment:
- discovery.type=single-node
- bootstrap.memory_lock=true
ulimits:
memlock:
soft: -1
hard: -1
mem_limit: 2g
volumes:
- /opt/graylog/elasticsearch/data:/usr/share/elasticsearch/data
restart: alwaysgraylog:
image: graylog/graylog:5.0
container_name: graylog
environment:
- GRAYLOG_PASSWORD_SECRET=<生成的密码密钥>
- GRAYLOG_ROOT_PASSWORD_SHA2=<你的密码的 SHA-256 值>
- GRAYLOG_HTTP_BIND_ADDRESS=0.0.0.0:9000
depends_on:
- mongo
- elasticsearch
volumes:
- /opt/graylog/graylog:/usr/share/graylog/data
ports:
- "9000:9000"
- "12201:12201/udp"
restart: always
GRAYLOG_PASSWORD_SECRET
):pwgen -N 1 -s 96
如果没有pwgen,则先执行下面的命令安装:
sudo yum install -y epel-release
sudo yum install -y pwgen
再生成密码密钥:
pwgen -N 1 -s 96
生成管理员密码哈希 (GRAYLOG_ROOT_PASSWORD_SHA2
),下面的yourpassword需替换为具体密码:
echo -n "yourpassword" | sha256sum
将生成的值填入 docker-compose.yml
的 GRAYLOG_PASSWORD_SECRET
和GRAYLOG_ROOT_PASSWORD_SHA2
。
运行以下命令启动容器:
docker-compose up -d
确保所有容器都在运行:
docker ps
http://<服务器IP>:9000
。admin
GRAYLOG_ROOT_PASSWORD_SHA2
中生成的原始密码。如果使用防火墙,确保开放必要的端口:
sudo firewall-cmd --add-port=9000/tcp --permanent
sudo firewall-cmd --add-port=12201/udp --permanent
sudo firewall-cmd --reload
docker logs graylog
/opt/graylog/mongo/data
。/opt/graylog/elasticsearch/data
。/opt/graylog/graylog
。docker-compose down
重启服务:
docker-compose up -d
Graylog总内存需求
测试环境(低日志量、少并发):
总消耗约 4 GB(1 GB Graylog + 512 MB MongoDB + 2 GB Elasticsearch)。
小型生产环境(中等日志量、适度并发):
总消耗约 6 GB(1.5 GB Graylog + 1 GB MongoDB + 4 GB Elasticsearch)。
大型生产环境(高日志量、高并发):
总消耗可能在 8 GB - 16 GB 或更高。
Elasticsearch 调优:
/etc/elasticsearch/jvm.options
或 Docker Compose 的 ES_JAVA_OPTS
环境变量:
-Xms2g -Xmx2g
-Xmx2g
建议分配总系统内存的 50%,但不要超过 32 GB。
2.Graylog Server 调优:
/etc/graylog/server/server.conf
或 Docker Compose 的 GRAYLOG_SERVER_JAVA_OPTS
:GRAYLOG_SERVER_JAVA_OPTS="-Xms512m -Xmx1g"
使用 wiredTiger 存储引擎(默认),优化内存利用率。
配置日志保留时间,减少 Elasticsearch 的索引压力。
拓展:关于Loki + Grafana + Promtail安装和使用可参考:
轻量级日志系统docker-compose搭建Loki+Grafana+Promtail,配置、部署,查询全流程_docker compose loki-CSDN博客
使用 Loki、Loki4j、Grafana 和 Spring Boot 搭建一个轻量级、简单、易用的 Java 日志系统_loki springboot-CSDN博客
Promtail+Loki+Grafana搭建轻量级日志管理平台 - C3Stones - 博客园