简体   繁体   English

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

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

I'm trying to integrate a java application with a graylog server on the docker.我正在尝试将 Java 应用程序与 docker 上的 Graylog 服务器集成。 but I'm not able to send messages from my application to graylog, can someone help me?但我无法将消息从我的应用程序发送到 graylog,有人可以帮助我吗?

Here is my Docker Run :这是我的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

here is my Input config inside Graylog这是我在Graylog 中的输入配置

Graylog Input Graylog 输入

here is the application tutorial i am using: https://talhature.com/2020/04/25/using-graylog-with-log4j2/这是我正在使用的应用程序教程: https : //talhature.com/2020/04/25/using-graylog-with-log4j2/

here is my log4j2.xml这是我的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>

* SOLUTION *解决方案

up my docker this way to open a port 5555:以这种方式启动我的 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

in my log4j2.xml i change the line 7:在我的 log4j2.xml 中,我更改了第 7 行:

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

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

Graylog employee here. Graylog 员工在这里。 From what you're saying, it sounds like you've not enabled a GELF input on your Graylog instance.根据您的说法,听起来您尚未在 Graylog 实例上启用 GELF 输入。 I'd recommend reading through our Docker installation docs here: https://docs.graylog.org/en/3.3/pages/installation/docker.html#how-to-get-log-data-in我建议在这里阅读我们的 Docker 安装文档: https : //docs.graylog.org/en/3.3/pages/installation/docker.html#how-to-get-log-data-in

I'll note that while the input in the example is for Raw/Plaintext, if you create a GELF TCP input using the instructions in that portion of the docs, then you should start seeing your logs show in the UI.我会注意到,虽然示例中的输入是针对原始/纯文本的,但如果您使用文档该部分中的说明创建 GELF TCP 输入,那么您应该开始在 UI 中看到您的日志。

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

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