从零开始搭建GrayLog分布式日志收集框架

787 阅读1分钟

1:拉镜像

docker pull mongo:3
ocker pull daocloud.io/library/elasticsearch:6.6.0
docker pull graylog/graylog:3.3

2:启动容器

docker run --name mongo -d mongo:3
docker run -d --name elasticsearch --restart=always -p 9200:9200 -p 9300:9300 -e ES_JAVA_OPTS="-Xms512m -Xmx512m" daocloud.io/library/elasticsearch:6.6.0
docker run --name graylog --link mongo --link elasticsearch \                                             
    -p 9000:9000 -p 12201:12201/udp -p 1514:1514 -p 5555:5555 \
    -e GRAYLOG_HTTP_EXTERNAL_URI="http://ip:9000/" \
    -d graylog/graylog:3.3
    
 注意这里的ip换成自己的ip地址,还有要确认几个端口都没有被占用

3:访问首页

浏览器直接输入 http://ip:9000, 默认账户是 admin/admin

image.png

4:设置

1:点击 System->input

image.png

2:下拉选择 GELF UDP -> 点击右边的 Launch new input

image.png

3:我们是单机的,选择 Global,填写title保存

image.png

image.png

4:SpringBoot整合GrayLog

1:添加maven配置

<dependency>
    <groupId>de.siegmar</groupId>
    <artifactId>logback-gelf</artifactId>
    <version>2.0.0</version>
</dependency>

2:在日志文件logback-spring.xml中配置GrayLog配置信息

<!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter"/>
<conversionRule conversionWord="wex"
                converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter"/>
<conversionRule conversionWord="wEx"
                converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter"/>
<!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN"
          value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{50}){cyan} %clr(:){faint} %file:%line - %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<!-- graylog全日志格式 -->
<property name="GRAY_LOG_FULL_PATTERN"
          value="%n%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] [%logger{50}] %file:%line%n%-5level: %msg%n"/>
<!-- graylog简化日志格式 -->
<property name="GRAY_LOG_SHORT_PATTERN"
          value="%m%nopex"/>

<!-- 获取服务名 -->
<springProperty scope="context" name="APP_NAME" source="spring.application.name"/>

<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
        <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        <charset>utf8</charset>
    </encoder>
</appender>

<!-- graylog 日志收集 这里的ip要改成你自己的ip地址-->
<appender name="GELF" class="de.siegmar.logbackgelf.GelfUdpAppender">
    <graylogHost>ip</graylogHost>
    <graylogPort>12201</graylogPort>
    <maxChunkSize>508</maxChunkSize>
    <useCompression>true</useCompression>
    <encoder class="de.siegmar.logbackgelf.GelfEncoder">
        <includeRawMessage>true</includeRawMessage>
        <includeMarker>true</includeMarker>
        <includeMdcData>true</includeMdcData>
        <includeCallerData>false</includeCallerData>
        <includeRootCauseData>false</includeRootCauseData>
        <includeLevelName>true</includeLevelName>
        <shortPatternLayout class="ch.qos.logback.classic.PatternLayout">
            <pattern>${GRAY_LOG_SHORT_PATTERN}</pattern>
        </shortPatternLayout>
        <fullPatternLayout class="ch.qos.logback.classic.PatternLayout">
            <pattern>${GRAY_LOG_FULL_PATTERN}</pattern>
        </fullPatternLayout>
        <staticField>app_name:${APP_NAME}</staticField>
        <staticField>os_arch:${os.arch}</staticField>
        <staticField>os_name:${os.name}</staticField>
        <staticField>os_version:${os.version}</staticField>
    </encoder>
</appender>

<!-- 日志输出级别 -->
<root level="INFO">
    <appender-ref ref="STDOUT"/>
    <appender-ref ref="GELF" />
</root>

<logger name="net.sf.ehcache" level="INFO"/>
<logger name="druid.sql" level="INFO"/>


<!-- MyBatis log configure -->
<logger name="com.apache.ibatis" level="INFO"/>
<logger name="org.mybatis.spring" level="DEBUG"/>
<logger name="java.sql.Connection" level="DEBUG"/>
<logger name="java.sql.Statement" level="DEBUG"/>
<logger name="java.sql.PreparedStatement" level="DEBUG"/>

<!-- 减少部分debug日志 -->
<logger name="druid.sql" level="INFO"/>
<logger name="org.apache.shiro" level="INFO"/>
<logger name="org.mybatis.spring" level="INFO"/>
<logger name="org.springframework" level="INFO"/>
<logger name="org.springframework.context" level="WARN"/>
<logger name="org.springframework.beans" level="WARN"/>
<logger name="com.baomidou.mybatisplus" level="INFO"/>
<logger name="org.apache.ibatis.io" level="INFO"/>
<logger name="org.apache.velocity" level="INFO"/>
<logger name="org.eclipse.jetty" level="INFO"/>
<logger name="io.undertow" level="INFO"/>
<logger name="org.xnio.nio" level="INFO"/>
<logger name="org.thymeleaf" level="INFO"/>
<logger name="springfox.documentation" level="INFO"/>
<logger name="org.hibernate.validator" level="INFO"/>
<logger name="com.netflix.loadbalancer" level="INFO"/>
<logger name="com.netflix.hystrix" level="INFO"/>
<logger name="com.netflix.zuul" level="INFO"/>
<logger name="de.codecentric" level="INFO"/>
<!-- cache INFO -->
<logger name="net.sf.ehcache" level="INFO"/>
<logger name="org.springframework.cache" level="INFO"/>
<!-- cloud -->
<logger name="org.apache.http" level="INFO"/>
<logger name="com.netflix.discovery" level="INFO"/>
<logger name="com.netflix.eureka" level="INFO"/>
<!-- 业务日志 -->
<Logger name="com.zuozewei" level="DEBUG"/>

3:启动项目就可以看到日志信息了

image.png