【发布时间】:2018-10-20 04:23:20
【问题描述】:
我在 kubernetes 文档中读到 kubernetes 从 pod 中的 stdout 和 stderror 读取应用程序日志。 我创建了一个新应用程序并将其配置为将日志发送到远程 splunk hec 端点(使用 splunk-logback jars)并同时发送到控制台。 所以默认情况下,logback 中的控制台日志应该转到 System.out,然后使用 kubectl logs 应该可以看到。 但这并没有发生在我的应用程序中。
我的日志文件:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<Appender name="SPLUNK" class="com.splunk.logging.HttpEventCollectorLogbackAppender">
<url>${splunk_hec_url}</url>
<token>${splunk_hec_token}</token>
<index>${splunk_app_token}</index>
<disableCertificateValidation>true</disableCertificateValidation>
<batch_size_bytes>1000000</batch_size_bytes>
<batch_size_count>${batch_size_count}</batch_size_count>
<send_mode>sequential</send_mode>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%msg</pattern>
</layout>
</Appender>
<Appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%msg</pattern>
</encoder>
</Appender>
<Appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="STDOUT" />
</Appender>
<root level="INFO">
<appender-ref ref="SPLUNK"/>
<appender-ref ref="ASYNC"/>
</root>
</configuration>
我可以在 splunk 中看到日志,如果我从后端登录到容器并启动我的 java 应用程序,那么我当时也可以在终端上看到日志。但是如果我让容器默认启动它自己,那么日志只会splunk,我无法使用kubectl logs <POD_NAME>查看它们
我的记录器应用的 kubernetes yml 文件:
apiVersion: v1
kind: Pod
metadata:
name: logging-pod
labels:
app: logging-pod
spec:
containers:
- name: logging-container
image: logger-splunk:latest
command: ["java", "-jar", "logger-splunk-1.0-SNAPSHOT.jar"]
resources:
requests:
cpu: 1
memory: 1Gi
limits:
cpu: 1
memory: 1Gi
【问题讨论】:
-
如果我从后端登录容器并启动我的 java 应用程序这是什么意思?
-
只是为了测试,能不能把AsyncAppender去掉,直接登录STDOUT?这有什么不同吗?
-
@MatthewLDaniel 记录到容器,我的意思是以交互方式附加到 pod
kubectl exec -it <pod> -- /bin/sh,然后从 shell 运行命令“java -jar logger-splunk-1.0-SNAPSHOT.jar” -
@ewramner 首先我只尝试了 STDOUT,后来我应用了 asyncAppender,但两者都不起作用
-
Ashu,只是想让您知道还有一些其他选项可以让您从 Splunk 中的应用程序获取日志并将它们保存在本地节点上,以便能够使用
kubectl logs命令.您可以尝试我们的解决方案 outcoldsolutions.com,它将应用程序日志、指标、主机日志等转发到 Splunk,并提供用于探索这些数据的仪表板。
标签: kubernetes logback kubectl kubelet