将日志从kubernetes转发到splunk

时间:2018-06-01 09:01:41

标签: kubernetes

我对kubernetes很新,并且没有亲身体验过。

我的团队在kubernetes推送到splunk的日志格式方面遇到了问题。

应用程序正在以这种格式将日志推送到stdout

{"logname" : "app-log", "level" : "INFO"}

Splunk最终获得此格式(使用splunkforwarder)

{
  "log" : "{\"logname\": \"app-log\", \"level\": \"INFO \"}",
  "stream" : "stdout",
  "time" : "2018-06-01T23:33:26.556356926Z" 
 }

这种格式使得splunk更难以根据属性进行查询。

kubernetes中是否有任何选项可以从应用转发raw logs而不是分组到另一个json中?

我在splunk中遇到了一个帖子,但配置是在splunk侧完成的 https://answers.splunk.com/answers/592640/kubernetesdocker-json-logs.html

如果我们从kubernetes方面有任何选项从应用程序发送原始日志

,请告知我们

3 个答案:

答案 0 :(得分:1)

本周我们遇到了同样的问题。

  1. 使用splunk转发器DaemonSet

  2. 在splunk上安装https://splunkbase.splunk.com/app/3743/此插件可以解决您的问题。

答案 1 :(得分:0)

Kubernetes架构提供了三种收集日志的方法:

<强> 1。使用在每个节点上运行的节点级日志记录代理。

您可以通过在每个节点上包含节点级日志记录代理来实现群集级日志记录。日志记录代理是一种专用工具,用于公开日志或将日志推送到后端。通常,日志记录代理程序是一个容器,可以访问包含该节点上所有应用程序容器的日志文件的目录。

日志格式取决于Docker设置。您需要在每个节点上的log-driver中设置/etc/docker/daemon.json参数。

例如,

{
  "log-driver": "syslog"
}

{
  "log-driver": "json-file"
}
  • none - 没有可用于容器的日志,而docker日志则没有 返回任何输出。
  • json-file - 日志格式为JSON。该 Docker的默认日志记录驱动程序。
  • syslog - 将日志消息写入 系统日志工具。

有关更多选项,请查看link

<强> 2。包括用于登录应用程序窗格的专用边车容器。

您可以通过以下方式之一使用边车容器:

  • sidecar容器将应用程序日志传输到自己的stdout。
  • sidecar容器运行日志记录代理,该代理配置为从应用程序容器中提取日志。

通过让您的sidecar容器流到他们自己的stdout和stderr流,您可以利用已经在每个节点上运行的kubelet和日志代理。 sidecar容器从文件,套接字或日志中读取日志。每个单独的sidecar容器都会将日志打印到自己的stdout或stderr流。

第3。将日志直接从应用程序中推送到后端。

您可以通过直接从每个应用程序公开或推送日志来实现集群级日志记录。

有关详细信息,请查看Kubernetes的official documentation

答案 2 :(得分:0)

只想使用我们尝试的解决方案进行更新,这对我们的日志结构有效

SEDCMD-1_unjsonify = s/{"log":"(?:\\u[0-9]+)?(.*?)\\n","stream.*/\1/g
SEDCMD-2_unescapequotes = s/\\"/"/g
BREAK_ONLY_BEFORE={"logname":