Docker安装graylog和详解

本文介绍如何使用Docker部署Graylog日志管理系统,包括详细的安装步骤、配置文件修改指南,以及如何通过SpringBoot集成Graylog进行日志收集。文章还提供了日志保留时间的设置方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Docker安装graylog和详解

‌Graylog是一个轻量级的分布式日志管理平台‌,具有以下特点:
‌核心功能全面‌:提供日志聚合、分析、审计、展示和预警等多种功能,满足全方位的日志管理需求‌。
‌简洁高效‌:相较于ELK等日志管理工具,Graylog更加简洁且易于部署使用,同时保持了高效性能‌。
‌组件清晰‌:由Elasticsearch、MongoDb和Graylog三个核心模块组成,分别负责日志数据的存储与检索、配置存储以及Web界面和接口提供‌。
‌扩展性强‌:能够处理大规模的日志数据,支持水平扩展,轻松应对更多负载‌。
‌实时监控与报警‌:能够实时监控日志数据,并通过多种方式发送报警通知,及时发现和解决潜在问题‌

1. 环境准备

安装docker
安装docker compose

2. 安装graylog

mkdir -p /home/graylog/mongo_data && chmod -R +777 /home/graylog/mongo_data
mkdir -p /home/graylog/es_data && chmod -R +777 /home/graylog/es_data
mkdir -p /home/graylog/graylog_data && chmod -R +777 /home/graylog/graylog_data
mkdir -p /home/graylog/graylog_data/config && cd /home/graylog/graylog_data/config 
wget https://raw.githubusercontent.com/Graylog2/graylog-docker/4.2/config/graylog.conf
wget https://raw.githubusercontent.com/Graylog2/graylog-docker/4.2/config/log4j2.xml
chown -R 1100:1100 /home/graylog/graylog_data
cd /home/graylog
vi docker-compose.yml

2.1. 设置查询高亮和国内时区

vim graylog.conf
修改 root_timezone = PRC
修改 allow_highlighting = true
version: '3'
services:
  # MongoDB: https://hub.docker.com/_/mongo/
  mongodb:
    image: mongo:4.2
    volumes:
      - /home/graylog/mongo_data:/data/db
      - /etc/localtime:/etc/localtime:ro
      - /usr/share/zoneinfo/Asia/Shanghai:/etc/timezone:ro
   # Elasticsearch: https://www.elastic.co/guide/en/elasticsearch/reference/7.10/docker.html
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch-oss:7.10.2
    volumes:
      - /home/graylog/es_data:/usr/share/elasticsearch/data
      - /etc/localtime:/etc/localtime:ro
      - /usr/share/zoneinfo/Asia/Shanghai:/etc/timezone:ro
    environment:
      - http.host=0.0.0.0
      - transport.host=localhost
      - network.host=0.0.0.0
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - TZ=Asia/Shanghai
    ulimits:
      memlock:
        soft: -1
        hard: -1
  # Graylog: https://hub.docker.com/r/graylog/graylog/
  graylog:
    image: graylog/graylog:4.2
    volumes:
      - /home/graylog/graylog_data:/usr/share/graylog/data
      - /etc/localtime:/etc/localtime:ro
      - /usr/share/zoneinfo/Asia/Shanghai:/etc/timezone:ro
    environment:
      # CHANGE ME (must be at least 16 characters)!
      - GRAYLOG_PASSWORD_SECRET=somepasswordpepper
      # Password: admin
      - GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
      - GRAYLOG_HTTP_EXTERNAL_URI=http://127.0.0.1:9000/
      - TZ=Asia/Shanghai
    entrypoint: /usr/bin/tini -- wait-for-it elasticsearch:9200 --  /docker-entrypoint.sh
    links:
        - mongodb:mongo
        - elasticsearch
    restart: always
    depends_on:
      - mongodb
      - elasticsearch
    ports:
      # Graylog web interface and REST API
      - 9000:9000
      # Syslog TCP
      - 1514:1514
      # Syslog UDP
      - 1514:1514/udp
      # GELF TCP
      - 12201:12201
      # GELF UDP
      - 12201:12201/udp

3. 开始安装

docker-compose up -d 

4. 浏览器中打开,密码admin/admin

http://192.168.56.100:9000/

在这里插入图片描述

5. 测试

5.1. 查看运行的镜像 协议观察,可以看到12201 udp这样才算成功

docker ps
在这里插入图片描述

5.2. springBoot集成graylog

5.2.1. 创建 gref udp input

在这里插入图片描述

在这里插入图片描述

5.2.2. 使用logback进行日志的封装
<!--logback-->
	 <dependency>
            <groupId>de.siegmar</groupId>
            <artifactId>logback-gelf</artifactId>
            <version>2.0.0</version>
        </dependency>
<dependency>
	<groupId>ch.qos.logback</groupId>
	<artifactId>logback-core</artifactId>
	<version>1.1.6</version>
</dependency>

<dependency>
	<groupId>ch.qos.logback</groupId>
	<artifactId>logback-classic</artifactId>
	<version>1.1.6</version>
</dependency>

<dependency>
	<groupId>ch.qos.logback</groupId>
	<artifactId>logback-access</artifactId>
	<version>1.1.6</version>
</dependency>
5.2.3. springBoot配置
  • 1、application.properties
spring.application.name=tools
server.port=8085
spring.profiles.active=prod


#log level
logging.level.root=info
logging.level.org.springframework=info
logging.level.org.mybatis=error
  • application-prod.properties
server.port=8080

#logging properties
logging.config=classpath:logback-prod.xml
5.2.4. logback-prod.xml 配置如下
 <appender name="logging" class="de.siegmar.logbackgelf.GelfUdpAppender">
        <graylogHost>${graylogIp}</graylogHost>
        <graylogPort>${graylogPort}</graylogPort>
        <maxChunkSize>508</maxChunkSize>
        <useCompression>true</useCompression>
        <encoder class="de.siegmar.logbackgelf.GelfEncoder">
            <originHost>${applicationName}</originHost>-->
            <includeRawMessage>false</includeRawMessage>
            <includeMarker>true</includeMarker>
            <includeMdcData>true</includeMdcData>
            <includeCallerData>false</includeCallerData>
            <includeRootCauseData>false</includeRootCauseData>
            <includeLevelName>true</includeLevelName>
            <shortPatternLayout class="ch.qos.logback.classic.PatternLayout">
                <pattern>%d - %m%nopex</pattern>
            </shortPatternLayout>
            <fullPatternLayout class="ch.qos.logback.classic.PatternLayout">
                <pattern>%d - %m%n</pattern>
            </fullPatternLayout>
            <staticField>os_arch:${os.arch}</staticField>
            <staticField>os_name:${os.name}</staticField>
            <staticField>os_version:${os.version}</staticField>
        </encoder>
    </appender>

或者代码添加

import ch.qos.logback.classic.AsyncAppender;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.LoggerContext;
import de.siegmar.logbackgelf.GelfEncoder;
import de.siegmar.logbackgelf.GelfUdpAppender;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;


@Component
@Slf4j
public class GelfUdpAppenderRunner implements ApplicationRunner {


    @Value("${graylog.ip}")
    private String graylogIp;
    @Value("${graylog.port:12201}")
    private Integer graylogPort;

    @Value("${graylog.opened}")
    private boolean graylogOpened;
    @Value("${spring.application.name}")
    private String contextName;

    @Override
    public void run(ApplicationArguments args) throws Exception {
        if(!graylogOpened){
            return;
        }
        LoggerContext context = (LoggerContext) LoggerFactory.getILoggerFactory();
        Logger logger = context.getLogger("root");

        GelfUdpAppender gelfUdpAppender = new GelfUdpAppender();
        gelfUdpAppender.setName("graylog");
        gelfUdpAppender.setGraylogHost(graylogIp);
        gelfUdpAppender.setGraylogPort(graylogPort);
        GelfEncoder gelfEncoder = new GelfEncoder();
        gelfEncoder.setOriginHost(contextName);
        gelfEncoder.setContext(context);
        gelfEncoder.start();
        gelfUdpAppender.setEncoder(gelfEncoder);
        gelfUdpAppender.setContext(context);
        gelfUdpAppender.start();
        // Atach appender to logger
        logger.addAppender(gelfUdpAppender);

        AsyncAppender asyncAppender = new AsyncAppender();
        asyncAppender.setContext(context);
        asyncAppender.setName("async");
        asyncAppender.setQueueSize(1024);
        asyncAppender.setDiscardingThreshold(-1);
        asyncAppender.setIncludeCallerData(true);
        asyncAppender.addAppender(gelfUdpAppender);
        asyncAppender.start();


         log.info("gelfUdpAppender启动完成");
    }
}

5.2.5.测试controller,下面有个异常哦
@Slf4j
@RestController
public class TestController {
    @GetMapping("log")
    public String log(){

        log.error("error");
        log.warn("warn");
        log.info("info");
        log.debug("debug");
        int i = 1/0;
        return "success";
    }
}

6. 开始启动springBoot的朋友们。观察浏览器graylog

可以看到日志和控制台是一样的

在这里插入图片描述

6.1. 日志保留时间

默认保留时间

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

liuhm~

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

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

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

打赏作者

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

抵扣说明:

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

余额充值