我对kubernetes很新,并且没有亲身体验过。
我的团队在kubernetes
推送到splunk
的日志格式方面遇到了问题。
{"logname" : "app-log", "level" : "INFO"}
{
"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
方面有任何选项从应用程序发送原始日志
答案 0 :(得分:1)
本周我们遇到了同样的问题。
使用splunk转发器DaemonSet
在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"
}
有关更多选项,请查看link
<强> 2。包括用于登录应用程序窗格的专用边车容器。
您可以通过以下方式之一使用边车容器:
通过让您的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":