java - 如何通过 Log4j2 将日志发送到 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中的输入配置
这是我正在使用 的应用程序教程: 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 中看到您的日志。
推荐阅读
- azure - 尝试以非 root 用户身份运行时 AKS crashloopbackoff
- paypal - 处理 PayPal 付款导致付款人未批准付款错误
- android - 缺少键盘映射“Windows 正确重做”颤动
- java - 使用从 ESP32 到 Spring Boot 安全 API 的预共享密钥
- azure - Azure 拒绝自定义策略,如果未启用 vm 备份
- python - python logging 函数可以返回日志消息吗?
- python - pandas resample 是否会更改日期时间索引的排序顺序?我怎样才能避免这种情况?
- webpack - Webpack:没有 luxon 的捆绑库(打字稿)
- neutralinojs - 对 HTML 输入属性接受的中性诺伊斯解决方法
- count - 在 DAX / Power BI 中结合 COUNTA() 和 AVERAGEX()