Ротация журналов в журналах, занимающих дисковое пространство в модуле Google Cloud Kubernetes
В кластере Google Cloud Platform Kubernetes есть модуль, записывающий JsonFormatted в StdOut. Это поднял Stackdriver из коробки. Однако мы видим, что использование диска модулем только растет и растет, и мы не можем понять, как установить максимальный размер для развертывания для ротации журналов.
Документация по Google Cloud и Kubernetes неясна по этому вопросу.
Это только последний час:
1 ответ
Вы уверены, что использование дисков в модуле является высоким из-за журналов? Если приложение записывает логи в стандартный вывод, оно не использует дисковое пространство внутри модуля. Все журналы обычно хранятся в файле журнала в файловой системе узла и могут управляться процессом logrotate узла.
Возможно, приложение использует дисковое пространство модуля для чего-то другого, например временных файлов или отладочной информации?
Вот часть документации, связанной с ротацией логов:
Ведение журнала на уровне узла:
Все, что контейнерное приложение записывает в stdout и stderr, обрабатывается и перенаправляется где-то механизмом контейнера. Например, механизм контейнера Docker перенаправляет эти два потока в драйвер ведения журнала, который настроен в Kubernetes для записи в файл в формате json.
Важным соображением при ведении журнала на уровне узла является реализация ротации журналов, чтобы журналы не занимали все доступное хранилище на узле.
Kubernetes в настоящее время не несет ответственности за ротацию логов, а средство развертывания должно установить решение для решения этой проблемы. Например, в кластерах Kubernetes, развернутых с помощью сценария kube-up.sh, существует средство logrotate, настроенное для работы каждый час.
Вы также можете настроить среду выполнения контейнера для автоматического поворота журналов приложения, например, с помощью log-opt в Docker.
В сценарии kube-up.sh последний подход используется для образа COS в GCP, а первый подход используется в любой другой среде. В обоих случаях по умолчанию ротация выполняется, когда размер файла журнала превышает 10 МБ.
Например, вы можете найти подробную информацию о том, как kube-up.sh настраивает ведение журнала для образа COS на GCP в соответствующем скрипте.
Вот часть скрипта, связанная с logrotate:
# Installs logrotate configuration files
function setup-logrotate() {
mkdir -p /etc/logrotate.d/
# Configure log rotation for all logs in /var/log, which is where k8s services
# are configured to write their log files. Whenever logrotate is ran, this
# config will:
# * rotate the log file if its size is > 100Mb OR if one day has elapsed
# * save rotated logs into a gzipped timestamped backup
# * log file timestamp (controlled by 'dateformat') includes seconds too. This
# ensures that logrotate can generate unique logfiles during each rotation
# (otherwise it skips rotation if 'maxsize' is reached multiple times in a
# day).
# * keep only 5 old (rotated) logs, and will discard older logs.
cat > /etc/logrotate.d/allvarlogs <<EOF
/var/log/*.log {
rotate ${LOGROTATE_FILES_MAX_COUNT:-5}
copytruncate
missingok
notifempty
compress
maxsize ${LOGROTATE_MAX_SIZE:-100M}
daily
dateext
dateformat -%Y%m%d-%s
create 0644 root root
}
EOF
}