- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想从 docker 容器获取 stdout 日志并将它们发送到 ELK 堆栈。到目前为止,我知道Docker中有一个GELF日志驱动程序。
但是,我不知道如何从消息中解析 ERROR
、WARNING
或 DEBUG
消息并将它们放入在 Docker 将日志消息发送到 ELK 之前,在日志消息中添加像 log_level
这样的新字段。
日志消息应该类似于:
{
"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"
}
哪个 docker 在发送到 ELK 之前添加了 "_logLevel": "ERROR"
。
谢谢。
最佳答案
我认为您混淆了 docker 为您做什么和logstash(或潜在的logspout)在这里的用途。 Docker Gelf 驱动程序添加了以下字段:主机名 – 容器 ID – 容器名称 – 镜像 ID – 镜像名称 – 创建(容器创建时间) – 级别(6 表示 stdout,3 表示 stderr,不要与应用程序日志级别混淆)。这些事情 Docker 都知道。 Docker 不知道你的用户或客户端。这些字段不是由 gelf 驱动程序或 docker 创建的。
<小时/>要实现您想要的效果,您必须在logstash中使用grok过滤器:
我的消息的日志格式为:
${date:format=yyyy-MM-dd HH:mm:ss.fff} | ${correlationId} | ${level} | ${callSite} | ${message}
我从 docker compose 运行logstash,如下所示:
logstash:
image: docker.elastic.co/logstash/logstash:5.3.1
logging:
driver: "json-file"
networks:
- logging
ports:
- "12201:12201"
- "12201:12201/udp"
entrypoint: logstash -e 'input { gelf { } }
filter{
grok {
match=> ["message", "%{SPACE}%{DATESTAMP:timestamp}%{SPACE}\|%{SPACE}%{DATA:correlation_Id}%{SPACE}\|%{SPACE}%{DATA:log_level}%{SPACE}\|%{SPACE}%{DATA:call_site}%{SPACE}\|%{SPACE}%{DATA:message}%{SPACE}$$"]
overwrite => [ "message" ]
}
date {
locale => "en"
match => ["timestamp", "dd-MM-YYYY HH:mm:ss:SSS"]
target => "@timestamp"
remove_field => [ "timestamp" ]
}
}
output { stdout{ } elasticsearch { hosts => ["http://elasticsearch:9200"] } }'
这里是我如何运行一个以指定格式传递日志的容器(除了日期之外,所有内容都相同):
docker run --log-driver=gelf --log-opt gelf-address=udp://0.0.0.0:12201 ubuntu /bin/sh -c 'while true; do date "+%d-%m-%Y %H:%M:%S:%3N" | xargs printf "%s %s | 51c489da-2ba7-466e-abe1-14c236de54c5 | INFO | HostingLoggerExtensions.RequestFinished | Request finished in 35.1624ms 200 application/json; charset=utf-8 message end\n"; sleep 1 ; done'
我希望这可以帮助您入门。确保在logstash之后启动创建日志的容器。
也许可以阅读grok documentation了解更多信息。
关于logging - 日志级别作为 Docker GELF 日志记录驱动程序的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43781570/
我正在尝试通过 tcp 将以下 json 写入 graylog 服务器: {"facility":"GELF","file":"","full_message":"Test Message Tcp",
刚开始接触 Graylog2,想通过 GELF 输入记录一些 Java 应用程序。因此我使用了库 log4j2 并添加了 graylog2-gelfclient。满足所有依赖项并且程序正在运行。但是我
我正在尝试使用 GELF 协议(protocol)让我的 docker-compose 文件将其日志记录写入 Graylog 服务器。这很好用,使用以下配置(docker-compose.yml 的片
我可以在 Docker 文档中看到: https://docs.docker.com/config/containers/logging/gelf/ 在 GELF 中,每条日志消息都是一个包含以下字段
我正在尝试将 Web 服务输入/输出作为 xml 插入到 Graylog 中。为此,我使用了“GELFJ - 用于 Log4j 的 GELF Appender 和用于 JDK 日志记录的 GELF 处
我想从 docker 容器获取 stdout 日志并将它们发送到 ELK 堆栈。到目前为止,我知道Docker中有一个GELF日志驱动程序。 但是,我不知道如何从消息中解析 ERROR、WARNING
我正在使用Logstash/Gelf作为我的应用程序中的日志工具。我关注this sample将我的记录器设置为 JSON文件。这是我的 Wildfly 配置(standalone.xml):
我想使用 graylog 作为中央日志服务器,目前我只是使用 slf4j Logger“slf4j-api”作为 Java 日志框架来登录我的 Java 应用程序。我可以使用 SLF4J 将日志发送到
我正在使用 java webapp (log4j1) 中的 GraylogAppender 通过 TCP 将日志记录发送到我的 Graylog 服务器。 在graylog(graylog2)服务器中,
我想使用 ssl 将我的错误日志发送到我的 Graylog2 服务器。不幸的是,我总是遇到异常(exception)。我已经在 Java 的 cacerts 中安装了我的 ssl/tls 证书。证
我们有一个设置,其中程序以遵循 GELF 规范的格式记录到 .Json 文件。 目前这是使用 HTTP 发送到 Graylog2 服务器。这行得通,但由于 HTTP 的性质,存在明显的延迟,如果有大量
我遇到了一个奇怪的问题,log4j 在控制台上正确显示了我的所有日志消息,但仅将日志消息发送到我没有编写的graylog 服务器(例如,我正在使用的库写入 log.info 将显示在graylog
对于我们的 spring boot 应用程序,我们使用 logback + GELF将应用程序日志发送到我们可以分析它们的中央日志服务器。是否可以对 spring boot 的访问日志做同样的事情?
根据 to the official Docker docs ,可以获得容器的 stdout 和 stderr 输出为 GELF messages这是一种可以理解的格式,例如Graylog / Gra
我已经设置了日志记录,如 https://quarkus.io/guides/centralized-log-management 中所述使用 7.7 版的 ELK 堆栈。 我的 logstash 管
我正在尝试将 Sleuth Span-Id 和 Trace-Id 作为 additonalFields 包含在我的 logback-sping.xml GELF 附加程序中,但运气不佳。它们在控制台的
我正在尝试使用 gelf 格式将日志从 symfony 2 应用流式传输到 graylog 2 服务器。 我的独白配置如下: monolog: handlers: # --
我最近开始使用 kubernetes,现在正在研究如何配置集中式日志记录。对于大多数 pod,应用程序本身直接记录到 GELF 端点 (logstash),但是我也需要从中获取许多“管理”pod。 以
我有一个 play-2.2.3 应用程序。我想使用 GELF-TCP 将日志发送到 graylog2 服务器。我尝试使用 me.moocar GELF logback appender,但似乎存在问题
我在 log4j2-spring.xml 中配置的 Spring Boot 项目中有一个 log4j2 gelf 附加程序: 使用maven导入gelfappender库:
我是一名优秀的程序员,十分优秀!