标签: gelf

将非 pid 1 进程的输出重定向到 docker 日志

如何将非 pid 1 进程的日志重定向到dockerlogs,最终目标是将它们重定向到gelf

docker容器中有 2 个进程:

1) pid 1 进程

2) 非 pid 1 进程写入路径中的日志文件

关注docker docs 特别是

nginx官方镜像创建了一个从/dev/stdout到/var/log/nginx/access.log的符号链接,并创建了另一个从/dev/stderr到/var/log/nginx/error.log的符号链接,覆盖了日志文件并导致日志被发送到相关的特殊设备。

没有帮助。只有pid 1进程日志被重定向到dockerlogs

执行的步骤:

1ln -sf /dev/stdout _path_Dockerfile 中

2 将更新后的镜像作为容器运行。

3docker logs -f _containerid_ 只显示pid 1进程的日志

还有另一个官方 docker 源

哪个州

Docker 支持不同的日志驱动程序,用于存储和/或流式传输主容器进程(pid 1)的容器标准输出和标准错误日志

所以这可能是没有看到非pid 1进程日志的原因。

尽管如此,仍然不明白为什么ln -sf /dev/stdout /var/log/mysql/error.log创建的符号链接不起作用。

docker gelf

9
推荐指数
1
解决办法
2898
查看次数

将日志以 Gelf 格式发送到 Graylog

我想使用graylog作为中央日志服务器,目前我只是使用slf4j Logger“slf4j-api”作为Java日志框架来登录我的java应用程序。我可以使用 SLF4J 将日志记录发送到 Graylog 吗?或者我需要哪些额外的库才能将这些日志发送到 Graylog?

java slf4j graylog2 graylog gelf

9
推荐指数
1
解决办法
3497
查看次数

log4j2-gelf"ERROR StatusLogger appenders包含无效的元素或属性"GELF""

刚开始进入Graylog2并希望通过GELF输入记录一些Java应用程序.因此我使用了库log4j2并添加了graylog2-gelfclient.所有依赖项都得到满足并且程序正在运行.但是我的Logmanager初始化会引发以下错误:

ERROR StatusLogger appenders contains an invalid element or attribute "GELF"
Run Code Online (Sandbox Code Playgroud)

我的代码只是将错误记录到记录器:

static final Logger logger = LogManager.getLogger(Application.class); 
    public static void main(String[] args) {
        logger.error("This is an error log entry");
    }
}
Run Code Online (Sandbox Code Playgroud)

我的log4j2.xml文件配置为使用GELF和GelfAppender:

<configuration status="OFF">
    <appenders>
        <GELF name="gelfAppender" server="192.168.1.1" port="12201" hostName="myhost"/>
    </appenders>
    <loggers>
        <root level="info">
            <appender-ref ref="gelfAppender"/>
        </root>
    </loggers>
</configuration>
Run Code Online (Sandbox Code Playgroud)

有人熟悉这个问题吗?谢谢你的帮助.

java logging graylog2 log4j2 gelf

6
推荐指数
1
解决办法
6607
查看次数

如何定义docker-compose服务登录graylog

我有docker-compose.yaml如下
问题:我的问题是标准输出打印或写入它的日志出现在灰色日志中 - 但只是在命令 /usr/bin/tini 下的那些 - foo1.start。当我尝试使用以下
docker exec -it [container_hash] bash
命令进入服务的 docker 容器时:启动命令,例如 echo "Hello" 或运行我将在其中执行的 python 脚本import sys; sys.stdout.write("Hello again")--> 在 Graylog UI 中收到的消息中不会出现这些消息。

知道为什么没有通过在容器内执行 shell 命令或脚本来收集 stdout 吗?并且仅从作为 make file 命令的结果运行的内容中收集打印?

我不理解这种行为,因为我将所有标准输出通过管道传输到 docker-compose 中的 gelf 日志驱动程序。
编辑如何在撰写中使用 graylog 的说明来自这里

version: '3.4'
  services:  
     foo1:  
        ports:
          - target: 8081
            published: 8084
            mode: host
        networks:
          - dev-net
        command: make foo1.start
        logging:
            driver: gelf
            options:
               gelf-address: udp://localhost:12201

     some-mongo:
        image: "mongo:3"
        networks:
          - dev-net …
Run Code Online (Sandbox Code Playgroud)

graylog2 docker docker-compose gelf

6
推荐指数
0
解决办法
1588
查看次数

Docker Gelf 驱动程序自定义字段

我可以在 Docker 文档中看到:https : //docs.docker.com/config/containers/logging/gelf/

在 GELF 中,每条日志消息都是一个包含以下字段的字典:...您自己配置的任何自定义字段

这是否意味着此驱动程序支持自定义字段?

我想为每个 GELF 消息添加自定义字段环境。我怎样才能做到这一点?

docker graylog gelf

6
推荐指数
1
解决办法
507
查看次数

如何使用GELF HTTP输入

我正在尝试设置GrayLog2服务器,需要使用GELF HTTP输入监听器.我做了一个小型的C#控制台程序,它将测试日志发送到服务器.然而,似乎只有几条消息实际上是由gl2解析的,我无法弄清楚为什么.例如,以下程序应创建5个日志pr.第二.无论运行多长时间,Gl2总共可以获得1或2个日志.有没有人成功使用GELF HTTP输入,我在这里缺少什么?

do
{
    var client = new RestClient("http://10.8.0.39:12201");
    var request = new RestRequest("gelf", Method.POST);
    request.RequestFormat = DataFormat.Json;
    var glog2 = new GLogEntry
    {
        host = "example.org",
        short_message = "Short message...",
    };
    request.AddBody(glog2);
    client.ExecuteAsync(request, r => { });
    Thread.Sleep(200);
} while (1 == 1);
Run Code Online (Sandbox Code Playgroud)

logging graylog2 gelf

5
推荐指数
0
解决办法
1890
查看次数

如何通过gelf将MDC传输到graylog?

我们有一个日志记录流,其中我们的 java 应用程序填充 MDC,该 MDC 通过 log4j2 传输到 syslog 到中央 rsyslog 安装。在这里,我们广泛使用了 MDC。我们的设置是这样的:

   <Syslog name="syslog" format="RFC5424" host="localhost" port="514" protocol="UDP"
        appName="messaging_platform.${application}" mdcId="mdc" includeMDC="true" facility="LOCAL5" connectTimeoutMillis="100" ignoreExceptions="false">
    <LoggerFields>
        <KeyValuePair key="class" value="%c"/>
        <KeyValuePair key="classname" value="%c{1}"/>
        <KeyValuePair key="exception" value="%ex{full}"/>
        <KeyValuePair key="method" value="%method"/>
        <KeyValuePair key="line" value="%line"/>
        <KeyValuePair key="application_name" value="${application}"/>
        <KeyValuePair key="sequenceNumber" value="%sequenceNumber"/>
        <KeyValuePair key="application_version" value="${application.version}"/>
        <KeyValuePair key="marker" value="%marker"/>
        <KeyValuePair key="thread" value="%thread"/>
        <KeyValuePair key="system_nano_time" value="%nano"/>
        <KeyValuePair key="app_uptime" value="%relative"/>
    </LoggerFields>
</Syslog>
Run Code Online (Sandbox Code Playgroud)

我正在尝试将其转换为使用 graylog,似乎 GELF 是推荐的传输协议。我找到了多个库来做到这一点,并从GelfLayoutlog4j2 的内置开始。但那不支持LoggerFields

那么将这些字段放入 Graylog 的推荐方法是什么?如果我做

   <Socket name="Graylog" protocol="udp" host="localhost" …
Run Code Online (Sandbox Code Playgroud)

mdc graylog2 log4j2 gelf

5
推荐指数
1
解决办法
1863
查看次数

日志级别作为Docker GELF日志记录驱动程序的字段

我想从docker容器中获取stdout日志并将它们发送到ELK堆栈.到目前为止,我知道Docker中有一个GELF日志记录驱动程序.

不过,我想不通我怎么能分析ERROR,WARNINGDEBUG从消息的消息,并把它们在一个新的领域像log_level在日志消息码头工人将它们发送到ELK之前.

日志消息应该是这样的:

{
  "client": "127.0.0.1",
  "user": "frank",
  "timestamp": "2000-10-10 13:55:36 -0700",
  "method": "GET",
  "uri": "/apache_pb.gif",
  "protocol": "HTTP/1.0",
  "status": 200,
  "size": 2326,
  "message": "[ERROR] Error connecting to MongoDB",
  "_logLevel" : "ERROR"
}
Run Code Online (Sandbox Code Playgroud)

"_logLevel" : "ERROR"在发送给ELK之前添加了哪个docker.

谢谢.

logging logstash docker elastic-stack gelf

4
推荐指数
1
解决办法
1126
查看次数

Graylog GELF 最大射野大小

我正在尝试将 Web 服务输入/输出作为 xml 插入 Graylog 中。为此,我使用了“GELFJ - 用于 Log4j 的 GELF Appender 和用于 JDK Logging 的 GELF Handler”。这是示例代码:

public static void main(String[] args) throws IOException {
    GelfSender gelfSender = new GelfTCPSender("172.21.120.139", 12201);

    String xmlMessage = readFile("c:\\temp\\xml.xml");

    GelfMessage message = new GelfMessage("short message", "long message", System.currentTimeMillis(), "1");
    message.setHost("localhost");

    message.addField("XML", xmlMessage);
    message.addField("LEN", xmlMessage.length());

    if (message.isValid()) {
        GelfSenderResult result = gelfSender.sendMessage(message);
        Exception exception = result.getException();
        if (exception != null) {
            exception.printStackTrace();
        }
    } else {
        System.err.println("Message is not valid!");
    }
}
Run Code Online (Sandbox Code Playgroud)

这是 …

java logging elasticsearch graylog2 gelf

3
推荐指数
1
解决办法
5693
查看次数