问题标签 [gelf]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
129 浏览

scala - 如何通过 akka 流接收 gzip 格式的 udp-GELF 消息

我正在尝试编写一个程序来侦听另一个程序以 UDP 和 gzips 格式发送假 GELF 消息的特定端口。当 GELF 消息没有被压缩时使用它很容易,但是当它被压缩时我不知道该怎么做。我的代码和错误是:

com.fasterxml.jackson.core.JsonParseException:非法字符((CTRL-CHAR,代码 31)):标记之间只允许常规空格(\r、\n、\t)��8�TE���� D�xP����ϕ���8�3��nn+����oRֲ+4ĥR�Byn��|>j��c �+4$�9cV���E7v�A������ _@Aq�... (�I0�� ���>�� ; line: 1, column: 2] at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1702) at com.fasterxml.jackson.core.base。 ParserMinimalBase._reportError(ParserMinimalBase.java:558) 在 com.fasterxml.jackson.core.base.ParserMinimalBase._throwInvalidSpace(ParserMinimalBase.java:509) 在 com.fasterxml.jackson.core.json.ReaderBasedJsonParser._skipWSOrEnd(ReaderBasedJsonParser.java: 2364) 在 com.fasterxml.jackson.core.json.ReaderBasedJsonParser.nextToken(ReaderBasedJsonParser.java:644) 在 com。com.fasterxml.jackson.databind.ObjectMapper._readValue(ObjectMapper.java:3756) 上的 fasterxml.jackson.databind.ObjectMapper._initForReading(ObjectMapper.java:3834) com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper. java:2099) 在 play.api.libs.json.jackson.JacksonJson$.parseJsValue(JacksonJson.scala:234) 在 play.api.libs.json.StaticBinding$.parseJsValue(StaticBinding.scala:15) 在 play.api .libs.json.Json$.parse(Json.scala:168) at io.skul.ListenUdp$$anonfun$io$skul$ListenUdp$$convertToGelf$1.apply(ListenUdp.scala:48) at io.skul.ListenUdp $$anonfun$io$skul$ListenUdp$$convertToGelf$1.apply(ListenUdp.scala:46) at scala.util.Try$.apply(Try.scala:192) at io.skul.ListenUdp.io$skul$ListenUdp $$convertToGelf(ListenUdp.scala:46) 在 io.skul.ListenUdp$$anonfun$ready$1。applyOrElse(ListenUdp.scala:36) at akka.actor.Actor$class.aroundReceive(Actor.scala:484) at io.skul.ListenUdp.akka$stream$actor$ActorPublisher$$super$aroundReceive(ListenUdp.scala:22 ) at akka.stream.actor.ActorPublisher$class.aroundReceive(ActorPublisher.scala:325) at io.skul.ListenUdp.aroundReceive(ListenUdp.scala:22) at akka.actor.ActorCell.receiveMessage(ActorCell.scala:526)在 akka.actor.ActorCell.invoke(ActorCell.scala:495) 在 akka.dispatch.Mailbox.processMailbox(Mailbox.scala:257) 在 akka.dispatch.Mailbox.run(Mailbox.scala:224) 在 akka.dispatch。 Mailbox.exec(Mailbox.scala:234) at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) at scala.concurrent .forkjoin.ForkJoinPool。runWorker(ForkJoinPool.java:1979) 在 scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)

我该如何处理?

0 投票
1 回答
1851 浏览

java - 以 Gelf 格式将日志发送到 Graylog

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

0 投票
0 回答
335 浏览

nginx - 来自前 8 个字节的 Nginx UDP 负载平衡哈希

我正在使用 nginx 在一组灰色日志服务器前对记录器 UDP 流量进行负载平衡。大型日志消息被分成块,然后使用 8 字节的消息 id 从 2 字节标头后重新拼凑在一起,如 GELF 文档中所述:http://docs.graylog.org/en/2.3/pages/gelf。 html

我想根据这 8 个字节(或仅有效负载的前 10 个字节)对消息进行负载平衡,但是我不确定如何提取这些字节,以便可以将它们用作散列参数中的变量:

这对nginx可行吗?可以通过定义自定义变量并用于路由流量吗?

http://nginx.org/en/docs/stream/ngx_stream_upstream_module.html

0 投票
1 回答
50 浏览

docker - 无法获取 kibana 中的索引相关数据

我可以使用 logstash.conf 创建索引。我的输入类型是gelf。我正在将 logstash 日志发送到 kibana。这是我的logstash.conf

问题:日志现在发送到所有索引。我想将日志发送到相应的索引。

我添加了喜欢

它给出了一个错误 INFO logstash.agent - 没有找到持久的 UUID 文件。生成新的 UUID {:uuid=>"67f7a48e-fc7c-499b-85a0-3fd6979f88f6", :path=>"/var/lib/logstash/uuid"} 14:58:14.308 [LogStash::Runner] ERROR logstash.agent - 无法创建管道 {:reason=>“输出后第 22 行第 9 列(字节 179)中的预期之一 #, => \n\n{\n\n elasticsearch {\n hosts”} 2017-10-11 14:58:14,355 Api Webserver 错误未找到 log4j2 配置文件。使用默认配置:仅将错误记录到控制台。

0 投票
1 回答
658 浏览

docker - logstash-5.x gelf 输入多行编解码器不起作用

我有一个简单明了的配置,但我不确定试图让这个多线工作我做错了什么。

我正在测试它,如下所示,我得到单行,没有添加多行标签,我在logstash调试日志中看到事件一一通过过滤器。

  • 我用两个 logstash 版本 5.5.2 和 5.6.3 => elasticsearch 5.5 对此进行了测试
  • 我安装了 logstash-codec-multiline
  • 我知道我可以使用 logstash 2.4 中的(现已删除的)多行过滤器来做到这一点
0 投票
1 回答
3535 浏览

docker - 将非 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 将更新后的映像作为容器运行。

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

还有另一个官方 docker 源

哪个州

Docker 支持用于存储和/或流式传输主容器进程 (pid 1) 的容器 stdout 和 stderr 日志的不同日志记录驱动程序

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

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

0 投票
1 回答
647 浏览

docker - Logstash 聚合 docker 日志(修复多行问题)

我有从不同容器进入logstash的日志。每个 logentry 都包含一个 fieldContainerID和一个 field Message。任何与ContainerID我假设相同的消息都已正确排序。

我想将多个日志的消息内容与相同的 containerId 合并,如下所示:

  1. 前缀 | 字符串1
  2. 字符串2
  3. 字符串3
  4. 前缀 | 字符串 4

所以我最终得到了日志:

  1. 前缀 | 字符串1 \n 字符串2 \n 字符串3
  2. 前缀 | 字符串 4

这可以通过logstash 聚合过滤器插件来完成吗?

具体来说,如果在上面的 1.、2.、3.和 4. 之间接收到具有不同 containerID 的消息,是否会出现问题?


背景:

我有多个 docker 容器生成日志条目,这些条目使用来自多个 docker 守护进程(在一个 swarm 中)的 docker gelf 日志驱动程序发送到 logstash。

所有这些都有效,logstash 接收并过滤日志。

Docker 将每一行视为一个单独的日志条目,并将其转发到 logstash。在多行日志的情况下,这是一个问题。我想将许多对应于一条多行消息的日志“合并”为一个。我知道“逻辑”日志条目何时结束,因为下一个条目将以 PREFIX 开头,这就是我建议上述解决方案的原因。

0 投票
1 回答
1102 浏览

json - NXLog:GELF UDP 输出的 Json 输入

我们有一个设置,程序以遵循 GELF 规范的格式记录到 .Json 文件。

目前,这是使用 HTTP 发送到 Graylog2 服务器的。这可行,但由于 HTTP 的性质,存在很大的延迟,如果有大量日志消息,这是一个问题。

我想将 HTTP 传递方法更改为 UDP,以便“触发并忘记”。

日志被写入这样的文件:

目前的配置是这样的:

通过此设置,部分 json 日志消息被添加到 GELF 消息的“消息”字段,并发送到服务器。

我尝试添加行 `Exec parse_json(),但这只会导致除 short_message 和 full_message 之外的所有字段被排除。

我不确定如何正确配置它。即使只是将完整的日志消息添加到字段中也是可取的,因为我可以在服务器端添加一个提取器。

0 投票
0 回答
296 浏览

docker - '\0' 空分隔消息的 Logstash tcp 输入(无 \n)

我想使用logstash通过下面的配置通过tcp解析gelf日志。我的消息流是空字节分隔的,从不包含 \n。不幸的是,即使在设置中设置了 config.support_escapes: true 之后,logstash 也不接受 \0 作为分隔符。该选项仅适用于更常见的 \n、\r、\t 等。

有谁知道一种可以从这些gelf消息中生成logstash事件的方法?

logstash -e 'input { tcp { port => 7777 codec => json_lines { delimiter => "\0" } } } output { stdout{ } }'

消息由 docker gelf 日志驱动程序生成,如下所示: {"version":"1.1","host":"herm-VirtualBox","short_message":"{ counter: 1 } ","timestamp":1515490442.825,"level":6,"_command":"bin/sh -c COUNTER=1;while true; do printf \"{ counter: $COUNTER } \\n\"; COUNTER=$((COUNTER+1)); sleep 1; done","_container_id":"4aa5b8bd52381b005ad9c5d07db8bd71358a16510f16ef9e0f1887b25ac3040b","_container_name":"inspiring_booth","_created":"2018-01-09T09:34:02.506691976Z","_image_id":"sha256:00fd29ccc6f167fa991580690a00e844664cb2381c74cd14d539e36ca014f043","_image_name":"ubuntu","_tag":"4aa5b8bd5238"}

它们总是以 {"version":

0 投票
1 回答
3632 浏览

graylog - 将现有日志文件发送到 graylog?

有什么方法可以将一堆现有的日志文件(json 内容)发送到 graylog?我发现很少有帖子在谷歌上搜索,但都涉及将实时数据发送到 graylog,并且找不到任何关于如何发送现有日志文件的说明