繁体   English   中英

如何通过 Log4j2 将日志发送到 Graylog?

[英]How to send log by Log4j2 to Graylog?

我正在尝试将 Java 应用程序与 docker 上的 Graylog 服务器集成。 但我无法将消息从我的应用程序发送到 graylog,有人可以帮助我吗?

这是我的Docker 运行

$ docker run --name mongo -d mongo:3
$ docker run --name elasticsearch \
    -e "http.host=0.0.0.0" \
    -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
    -d docker.elastic.co/elasticsearch/elasticsearch-oss:6.8.10
$ docker run --name graylog --link mongo --link elasticsearch \
    -p 9000:9000 -p 12201:12201 -p 1514:1514 \
    -e GRAYLOG_HTTP_EXTERNAL_URI="http://127.0.0.1:9000/" \
    -d graylog/graylog:3.3

这是我在Graylog 中的输入配置

Graylog 输入

这是我正在使用的应用程序教程: https : //talhature.com/2020/04/25/using-graylog-with-log4j2/

这是我的log4j2.xml

<?xml version="1.0" encoding="UTF-8" ?>
<Configuration status="TRACE" monitorInterval="180">
    <Properties>
        <Property name="app-name">graylog-example-fatjar</Property>

        <!-- CHANGE log-path ACCORDING TO YOUR NEEDS -->
        <Property name="log-path">$${sys:application-directory}/${app-name}/log
        </Property>
        <Property name="log-pattern">[%sn] %d{yyyy/MM/dd HH:mm:ss,SSS} [%-6p] [%t]
            %c{3}:%L - %m%n</Property>
    </Properties>

    <!-- CHANGE HOST AND PORT PROPERTIES ACCORDING TO YOUR NEEDS -->
    <Appenders>
        <Gelf name="gelf" host="udp:127.0.0.1" port="12201"
            version="1.1" extractStackTrace="true" filterStackTrace="true"
            mdcProfiling="true" includeFullMdc="true" maximumMessageSize="8192"
            originHost="%host{fqdn}">

            <!-- THESE FIELD DEFINITIONS ARE NOT MANDATORY, YOU CAN USE DEFAULTS -->
            <Field name="timestamp" pattern="%d{dd MMM yyyy HH:mm:ss,SSS}" />
            <Field name="level" pattern="%level" />
            <Field name="simpleClassName" pattern="%C{1}" />
            <Field name="className" pattern="%C" />
            <Field name="server" pattern="%host" />
            <Field name="server.fqdn" pattern="%host{fqdn}" />

            <!-- THESE ARE MY CUSTOM GRAYLOG FIELDS -->
            <Field name="logStream" literal="MYAWESOMEAPPS" />
            <Field name="projectName" literal="MYAWESOMEPROJECT" />
        </Gelf>
        <RollingFile name="RollingFile"
            fileName="${log-path}/server/${app-name}-server"
            filePattern="${log-path}/server/${app-name}-server-%d{yyyy-MM-dd}-%i.log.gz"
            append="false">
            <PatternLayout>
                <pattern>${log-pattern}</pattern>
            </PatternLayout>
            <Policies>
                <SizeBasedTriggeringPolicy size="100 MB" />
            </Policies>
        </RollingFile>
    </Appenders>

    <Loggers>
        <Root level="INFO" additivity="false" includeLocation="true">
            <AppenderRef ref="RollingFile" />
            <AppenderRef ref="gelf" />
        </Root>
    </Loggers>
</Configuration>

*解决方案

以这种方式启动我的 docker 以打开端口 5555:

$ docker run --link mongo --link elasticsearch \
    -p 9000:9000 -p 12201:12201 -p 1514:1514 -p 5555:5555 \
    -e GRAYLOG_HTTP_EXTERNAL_URI="http://127.0.0.1:9000/" \
    -d graylog/graylog:3.3

在我的 log4j2.xml 中,我更改了第 7 行:

<Gelf name="Gelf" host="tcp:127.0.0.1" port="5555" version="1.1"

和我的 Graylog Input (Gelf:TCP): Graylog Input Gelf TCP

Graylog 员工在这里。 根据您的说法,听起来您尚未在 Graylog 实例上启用 GELF 输入。 我建议在这里阅读我们的 Docker 安装文档: https : //docs.graylog.org/en/3.3/pages/installation/docker.html#how-to-get-log-data-in

我会注意到,虽然示例中的输入是针对原始/纯文本的,但如果您使用文档该部分中的说明创建 GELF TCP 输入,那么您应该开始在 UI 中看到您的日志。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM