写点什么

【苍狮技术团队】打造高效日志系统:Graylog + Docker 快速部署 + Spring Boot 日志集成全攻略

  • 2025-07-24
    重庆
  • 本文字数:4515 字

    阅读完需:约 15 分钟

【苍狮技术团队】打造高效日志系统:Graylog + Docker 快速部署 + Spring Boot 日志集成全攻略

一、Graylog 介绍

Graylog 是一款功能强大的日志管理和分析工具,广泛应用于集中化日志管理、实时监控与告警等领域。它为企业提供了一个全面的解决方案,帮助用户高效地收集、索引和分析来自各种数据源的日志信息。Graylog 支持通过插件扩展其功能,并拥有友好的用户界面,使得搜索、可视化及报告生成变得简单直观。此外,该平台还支持多种集成方式,允许与其他软件如 LDAP、Active Directory 等进行整合,增强用户认证和权限管理。


  1. 官网:https://graylog.org/

  2. GitHub:https://github.com/Graylog2/graylog2-server


二、Graylog 一键部署

docker-compose 安装

  1. 参考地址:https://mp.weixin.qq.com/s/vlbYzEnCB8qrcUQF5okM7g

Graylog 部署

官方安装文档

  1. 官方部署文档:https://go2docs.graylog.org/current/downloading_and_installing_graylog/docker_installation.htm

  2. GitHub yaml 文件:https://github.com/Graylog2/docker-compose



博主自定义 yaml

  1. 建议大家先参考官方文档了解 docker-compose 里面的文件,博主对 yaml 进行了小的改动,比如镜像使用了国内的镜像源、把挂载卷去掉了,默认在 docker-compose.yaml 目录进行持久化至宿主机;

  2. 执行以下代码进行部署:


mkdir -p /data/graylog
复制代码


vi docker-compose.yaml
复制代码


# For DataNode setup, graylog starts with a preflight UI, this is a change from just using OpenSearch/Elasticsearch.# Please take a look at the README at the top of this repo or the regular docs for more info.
services: # MongoDB: https://hub.docker.com/_/mongo/ mongodb: image: "crpi-33mr80vehc50lqh8.cn-chengdu.personal.cr.aliyuncs.com/yunxinai/mongo:6.0" restart: "on-failure" networks: - graylog volumes: - "./volumes/mongodb/data/db:/data/db" - "./volumes/mongodb/data/configdb:/data/configdb"
# For DataNode setup, graylog starts with a preflight UI, this is a change from just using OpenSearch/Elasticsearch. # Please take a look at the README at the top of this repo or the regular docs for more info. # Graylog Data Node: https://hub.docker.com/r/graylog/graylog-datanode datanode: image: "crpi-33mr80vehc50lqh8.cn-chengdu.personal.cr.aliyuncs.com/yunxinai/graylog-datanode:6.3.1" hostname: "datanode" environment: GRAYLOG_DATANODE_NODE_ID_FILE: "/var/lib/graylog-datanode/node-id" # GRAYLOG_DATANODE_PASSWORD_SECRET and GRAYLOG_PASSWORD_SECRET MUST be the same value GRAYLOG_DATANODE_PASSWORD_SECRET: "${GRAYLOG_PASSWORD_SECRET:?Please configure GRAYLOG_PASSWORD_SECRET in the .env file}" GRAYLOG_DATANODE_MONGODB_URI: "mongodb://mongodb:27017/graylog" ulimits: memlock: hard: -1 soft: -1 nofile: soft: 65536 hard: 65536 ports: - "8999:8999/tcp" # DataNode API - "9200:9200/tcp" - "9300:9300/tcp" networks: - graylog volumes: - "./volumes/datanode/var/lib/graylog-datanode:/var/lib/graylog-datanode" restart: "on-failure"
# Graylog: https://hub.docker.com/r/graylog/graylog-enterprise graylog: hostname: "server" image: "crpi-33mr80vehc50lqh8.cn-chengdu.personal.cr.aliyuncs.com/yunxinai/graylog:6.3.1" depends_on: mongodb: condition: "service_started" datanode: condition: "service_started" entrypoint: "/usr/bin/tini -- /docker-entrypoint.sh" environment: GRAYLOG_NODE_ID_FILE: "/usr/share/graylog/data/data/node-id" # GRAYLOG_DATANODE_PASSWORD_SECRET and GRAYLOG_PASSWORD_SECRET MUST be the same value GRAYLOG_PASSWORD_SECRET: "${GRAYLOG_PASSWORD_SECRET:?Please configure GRAYLOG_PASSWORD_SECRET in the .env file}" GRAYLOG_ROOT_PASSWORD_SHA2: "${GRAYLOG_ROOT_PASSWORD_SHA2:?Please configure GRAYLOG_ROOT_PASSWORD_SHA2 in the .env file}" GRAYLOG_HTTP_BIND_ADDRESS: "0.0.0.0:9000" GRAYLOG_HTTP_EXTERNAL_URI: "http://localhost:9000/" GRAYLOG_MONGODB_URI: "mongodb://mongodb:27017/graylog" ports: - "5044:5044/tcp" # Beats - "5140:5140/udp" # Syslog - "5140:5140/tcp" # Syslog - "5555:5555/tcp" # RAW TCP - "5555:5555/udp" # RAW UDP - "9000:9000/tcp" # Server API - "12201:12201/tcp" # GELF TCP - "12201:12201/udp" # GELF UDP #- "10000:10000/tcp" # Custom TCP port #- "10000:10000/udp" # Custom UDP port - "13301:13301/tcp" # Forwarder data - "13302:13302/tcp" # Forwarder config networks: - graylog volumes: - "./volumes/graylog/usr/share/graylog/data/data:/usr/share/graylog/data/data" restart: "on-failure"
networks: graylog: driver: "bridge"
复制代码


  1. 增加 .env 文件,这是新版本必须要的文件,里面的参数详情参考官方文档,后面的博文中也会进行一步步介绍。


vi .env
复制代码


# You MUST set a secret to secure/pepper the stored user passwords here. Use at least 64 characters.# Generate one by using for example: pwgen -N 1 -s 96# ATTENTION: This value must be the same on all Graylog nodes in the cluster.# Changing this value after installation will render all user sessions and encrypted values in the database invalid. (e.g. encrypted access tokens)GRAYLOG_PASSWORD_SECRET="aB3cD9eF7gH2jK5mLpQwRtXvZx8sWn2kPmLrTv9hYqWeJkLmNpRfGtHsUjVnKdQw"
# You MUST specify a hash password for the root user (which you only need to initially set up the# system and in case you lose connectivity to your authentication backend)# This password cannot be changed using the API or via the web interface. If you need to change it,# modify it in this file.# Create one by using for example: echo -n yourpassword | shasum -a 256# and put the resulting hash value into the following line# CHANGE THIS!GRAYLOG_ROOT_PASSWORD_SHA2="8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918"
复制代码


  1. 由于 .env 是隐藏文件,可以通过 ll -a 命令进行查看

启动 docker-compose

  1. 执行命令 docker-compose up 进行启动

  2. 首先会进行镜像拉取,国内的镜像,大概 2 分钟左右镜像拉取完成


  1. 执行命令 docker-compose ps 查看容器拉取信息


  1. 到这里我们就已经把 Graylog 成功的启动起来啦。

问题处理(挂载权限问题)

  1. 执行 docker-compose ps 可以看到有两个容器一直在重启

  1. 执行命令查看日志:docker logs graylog-graylog-1

  1. 在 docker-compose.yaml 目录下执行权限修复命令,这是挂载目录权限问题导致宿主机没有权限。


chmod -R 777 ./volumes/graylog/usr/share/graylog/data/data
复制代码


  1. 再执行命令停止:docker-compose down -v

  2. 最后执行重新启动:docker-compose up

问题处理(/proc/sys/vm/max_map_count)

  1. 执行命令查看日志:docker logs graylog-datanode-1


  1. 问题描述: 从日志来看,Graylog 启动失败的原因是系统参数 /proc/sys/vm/max_map_count 的值太低(当前为 65530),而 Graylog 要求至少为 262144,因为它们对内存映射区域有较高的需求。

  2. 问题修复:vi /etc/sysctl.conf

  3. 再末尾加上:vm.max_map_count=262144

  4. 保存并退出,然后应用更改:sudo sysctl -p

  5. 再执行命令停止:docker-compose down -v

  6. 最后执行重新启动:docker-compose up

三、Graylog 初始化

密码获取

  1. 打开浏览器访问,IP+9000 端口,如博主的:http://11.0.1.180:9000/


  1. 用户名为:admin

  2. 密码为:anQlBkYzlv ,密码获取查看 docker 日志:docker logs graylog-graylog-1


应用初始化

  1. CA 证书初始化

  1. 自动 30 天需求,点击下一步

  1. 进行节点认证及初始化操作


  1. 点击进行重启

  1. 重启完成后,默认跳转登录页面,账号密码均为 admin

  1. 到这里就成功登录进去并访问首页

四、Graylog 配置

  1. 点击 System input 进行创建

  1. 选择 GELF UDP 进行创建



  1. 选中 Global,并填入 Title


  1. 点击 Set-up Input ,点击 Next


  2. 当状态显示为 running 时表示配置成功




五、SpringBoot 项目集成应用

增加 pom.xml 依赖

<dependency>    <groupId>biz.paluch.logging</groupId>    <artifactId>logstash-gelf</artifactId>    <version>1.11.1</version></dependency>
复制代码

增加 logback-spring.xml 配置文件

  1. 在原有的 logback-spring.xml 文件中加入配置文件


<appender name="GELF" class="biz.paluch.logging.gelf.logback.GelfLogbackAppender">        <host>udp:11.0.1.180</host><!--graylog 服务器ip-->        <port>12201</port><!--graylog udp端口-->        <version>1.1</version>        <facility>dify-server</facility>        <extractStackTrace>true</extractStackTrace>        <filterStackTrace>true</filterStackTrace>        <mdcProfiling>true</mdcProfiling>        <timestampPattern>yyyy-MM-dd HH:mm:ss,SSSS</timestampPattern>        <maximumMessageSize>8192</maximumMessageSize>        <!-- This are fields using MDC -->        <mdcFields>portal_2_uid,query,conversationId,userId,searchType</mdcFields>        <dynamicMdcFields>portal_2_uid.*,(mdc|MDC)fields</dynamicMdcFields>        <includeFullMdc>true</includeFullMdc>    </appender>
复制代码


 <!-- 根日志. -->    <root level="${LOG-LEVEL}">        <appender-ref ref="consoleLog" />        <appender-ref ref="infoLog" />        <appender-ref ref="errorLog" />        <appender-ref ref="GELF" />    </root>
复制代码


  1. 新增调试控制器


@Slf4j@RestControllerpublic class HealthyController {
@GetMapping("/check") public Mono<HttpResult> check() {
log.info("处理->健康检查"); log.error("处理->健康检查完成"); // 使用 Mono 包装返回值 return Mono.just(HttpResult.successView()); }}
复制代码

参数详解

六、效果展示

  1. 启动我们的 SpringBoot 项目


  2. 访问我们的应用地址,如:http://192.168.0.112:8077/dify/check

  3. 访问 Graylog 首页,查看日志是否正常写入



七、总结

  1. 到目前为止,我们基本完成 Graylog 的容器部署,Graylog 的初始化及我们的 SpringBoot 项目的集成

  2. 其实还有很多很多问题,比如这是单机的、我们演示的是 UDP 的,这个协议没有 TCP 可靠、还有集成的日志时间也是不对的,需要改成东八区,

  3. 差不多还有很多很多需要优化的地方,包括一些配置解释,这里只讲了最基础的集成应用,让大家有个直观的感受,后面会继续更新这个系列。



发布于: 刚刚阅读数: 5
用户头像

沉稳如山、威猛如狮的技术团队。 2019-04-11 加入

苍狮技术团队,专注全栈开发、云原生与人工智能应用。 分享高质量实战教程、工程经验、AI工具与技术趋势。 沉稳如狮,专精于技,与开发者同行成长。

评论

发布
暂无评论
【苍狮技术团队】打造高效日志系统:Graylog + Docker 快速部署 + Spring Boot 日志集成全攻略_日志管理_苍狮技术团队_InfoQ写作社区