Журналы, отправленные на консоль с использованием конфигурации обратного входа в Java-приложении, не видны в Kubernetes с помощью журналов kubectl - PullRequest
0 голосов
/ 10 мая 2018

Я где-то читал в документации по kubernetes, что kubernetes читает журналы приложений из stdout и stderror в модулях. Я создал новое приложение и настроил его на отправку журналов на удаленную конечную точку hell splunk (используя jar-файлы splunk-logback) и одновременно на консоль. Таким образом, по умолчанию журналы консоли в logback должны идти в System.out, который затем должен отображаться с помощью журналов kubectl. Но в моем приложении этого не происходит.

мой файл журнала:

<?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>

YML-файл kubernetes для моего приложения-регистратора:

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

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

хорошо, так что это наконец-то решено. Проблема была в том, что журналы не сбрасывались.

В PatternLayout отсутствует% n. Следовательно, я думаю, что все идет в некоторый буфер и не достигает консоли.

0 голосов
/ 10 мая 2018

Согласно документации Kubenetes весь вывод (который контейнерное приложение записывает в stdout и stderr) по умолчанию перенаправляется в файл JSON. Вы можете получить к нему доступ, используя kubectl logs.

Давайте проверим эту функцию, создав простой модуль, который выводит числа в стандартный вывод:

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

Счетчик-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 - название стручка
count - название контейнера внутри «счетчика» pod

Вы можете получить доступ к содержимому этого файла, запустив:

$ kubectl logs counter

Вы можете получить доступ к файлу журнала ранее разбитого контейнера в модуле с помощью следующей команды:

$ kubectl logs --previous

В случае нескольких контейнеров в пакете, вы должны добавить имя контейнера следующим образом:

$ kubectl logs counter -c count

Когда модуль удаляется из кластера, все его журналы (текущий и предыдущий) также удаляются.

Убедитесь, что вы правильно сконфигурировали стандартный вывод в приложении, и вывод на стандартный вывод в вашем приложении не пропускается по какой-либо причине.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...