gpt4 book ai didi

kubernetes - 使用Java应用程序中的Logback配置发送到控制台的日志,使用Kubectl日志在Kubernetes中不可见

转载 作者:行者123 更新时间:2023-12-02 12:07:20 26 4
gpt4 key购买 nike

我在kubernetes文档中某个地方读到了kubernetes,它从pod中的stdout和stderror读取应用程序日志。
我创建了一个新应用程序,并将其配置为将日志发送到远程splunk hec端点(使用splunk-logback jars)并同时进行控制台。
因此,默认情况下,控制台的登录日志应转到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应用程序,那么那时我也可以在终端上看到日志。但是,如果我让容器默认情况下自行启动,那么日志只会溢出,并且我无法使用 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

最佳答案

根据Kubenetes的documentation,默认情况下,所有输出(容器化应用程序将其写入stdoutstderr)都重定向到JSON文件。您可以使用kubectl logs访问它。

让我们通过创建一个简单的Pod来测试此功能,该Pod在stdout中输出数字:

kubectl create -f https://k8s.io/docs/tasks/debug-application-cluster/counter-pod.yaml

counter-pod.yaml:
apiVersion: v1
kind: Pod
metadata:
name: counter
spec:
containers:
- name: count
image: busybox
args: [/bin/sh, -c,
'i=0; while true; do echo "$i: $(date)"; i=$((i+1)); sleep 1; done']

哪里:
counter- pods 名称
count-“计数器” Pane 中容器的名称

您可以通过运行以下命令访问该文件的内容:
$ kubectl logs counter

您可以通过以下命令访问容器中以前崩溃的容器的日志文件:
$ kubectl logs --previous

如果容器中有多个容器,则应按如下所示添加容器的名称:
$ kubectl logs counter -c count

从集群中删除Pod时,还将删除其所有日志(当前和以前的日志)。

确保在应用程序中正确配置了stdout,并且由于任何原因都不会无提示地跳过应用程序中stdout的输出。

关于kubernetes - 使用Java应用程序中的Logback配置发送到控制台的日志,使用Kubectl日志在Kubernetes中不可见,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50263724/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com