Скрипт за изчистване на Docker логове

Скрипт за изчистване на Docker логове

Управлението на логовете на Docker контейнерите е важен аспект от поддръжката на контейнеризираните приложения. Логовете съдържат ценна информация за работата на контейнерите и могат да помогнат при отстраняване на проблеми. Въпреки това, натрупването на логове може да доведе до изчерпване на дисковото пространство и забавяне на системата. В тази статия ще разгледаме как да създадете и използвате скрипт за автоматично изчистване на Docker логове.

Защо е важно да се управляват Docker логовете?

Docker контейнерите генерират логове по време на работа. Тези логове съдържат информация за събития, грешки и други важни данни. Без редовно управление, логовете могат да запълнят дисковото пространство и да причинят проблеми. Редовното изчистване на логовете предотвратява натрупването на ненужни данни и поддържа системата ви ефективна.

Как работят Docker логовете?

Docker логовете се записват във файлове в директорията /var/lib/docker/containers/<container_id>/. Всеки контейнер има свой собствен лог файл, който по подразбиране използва json-file драйвера. Docker също поддържа други лог драйвери, но в тази статия ще се фокусираме върху json-file.

Създаване на скрипт за изчистване на Docker логове

Създаването на скрипт за изчистване на Docker логове изисква няколко стъпки. Ще използваме Bash скрипт, който автоматично намира и изчиства логовете на всички работещи контейнери.

Стъпка 1: Създаване на скрипт файл

Започнете, като създадете нов файл, например clear_docker_logs.sh. Можете да използвате текстов редактор като nano или vi.

vi clear_docker_logs.sh

Стъпка 2: Добавяне на скрипта

Копирайте и поставете следния код в скрипта. Този код намира и изчиства логовете на всички работещи контейнери.

#!/bin/bash

# Получаване на списък с всички работещи контейнери
containers=$(docker ps -q)

# Проверка дали има работещи контейнери
if [ -z "$containers" ]; then
  echo "Няма работещи контейнери."
  exit 0
fi

# Цикъл през всички контейнери и изчистване на логовете
for container in $containers; do
  # Намери точния път до лог файла с помощта на docker inspect
  log_path=$(docker inspect --format='{{.LogPath}}' $container)
  
  # Проверка дали лог файлът съществува
  if [ -f "$log_path" ]; then
    sudo truncate -s 0 "$log_path"
    echo "Изчистени логове за контейнер: $container"
  else
    echo "Лог файлът не е намерен за контейнер: $container"
  fi
done

echo "Изчистването на логовете е завършено."

Стъпка 3: Правене на скрипта изпълним

Направете скрипта изпълним с помощта на командата chmod.

chmod +x clear_docker_logs.sh

Стъпка 4: Стартиране на скрипта

Стартирайте скрипта с административни права, за да има достъп до лог файловете.

sudo ./clear_docker_logs.sh

Обяснение на скрипта

Получаване на списък с контейнери

Скриптът започва с получаване на списък с всички работещи контейнери. Това се постига с командата docker ps -q, която връща само идентификаторите на контейнерите.

containers=$(docker ps -q)

Проверка за работещи контейнери

След това скриптът проверява дали има работещи контейнери. Ако няма, той излиза с подходящо съобщение.

if [ -z "$containers" ]; then
  echo "Няма работещи контейнери."
  exit 0
fi

Изчистване на логовете

Скриптът цикли през всички контейнери и намира точния път до лог файла на всеки контейнер с помощта на docker inspect. Ако лог файлът съществува, той се изчиства с командата truncate -s 0.

for container in $containers; do
  log_path=$(docker inspect --format='{{.LogPath}}' $container)
  
  if [ -f "$log_path" ]; then
    sudo truncate -s 0 "$log_path"
    echo "Изчистени логове за контейнер: $container"
  else
    echo "Лог файлът не е намерен за контейнер: $container"
  fi
done

Автоматизация с cron

Можете да автоматизирате изпълнението на скрипта с помощта на cron. Това ще осигури редовно изчистване на Docker логовете.

Стъпка 1: Отваряне на crontab

Отворете crontab за редактиране.

sudo crontab -e

Стъпка 2: Добавяне на ново cron задание

Добавете ново cron задание, което да изпълнява скрипта всеки ден в полунощ.

0 0 * * * /path/to/clear_docker_logs.sh

Това ще гарантира, че логовете ще бъдат изчиствани редовно и системата ви ще остава чиста.

Показване размера на логовете на Docker контейнерите

За да покажете размера на логовете на Docker контейнерите, можете да използвате командата du (disk usage) в комбинация с docker inspect, за да получите пътя до лог файловете. Ето командата:

for container in $(docker ps -q); do
  log_path=$(docker inspect --format='{{.LogPath}}' $container)
  if [ -f "$log_path" ]; then
    size=$(sudo du -sh "$log_path" | cut -f1)
    echo "Размер на логовете за контейнер $container: $size"
  else
    echo "Лог файлът не е намерен за контейнер: $container"
  fi
done

Примерен изход

Когато изпълните скрипта, ще получите изход, подобен на този:

Размер на логовете за контейнер 425bdc7da4e1: 456K
Размер на логовете за контейнер 7a6b3b9b496c: 0
Размер на логовете за контейнер 254783db4880: 0
Размер на логовете за контейнер 071c02f96c80: 192K
Размер на логовете за контейнер 0b3498843841: 52K
Размер на логовете за контейнер 601a28a74854: 100K
Размер на логовете за контейнер 71bda7ae2155: 0
Размер на логовете за контейнер ef478f3b8f14: 28K
Размер на логовете за контейнер d3f292f55701: 8.0K
Размер на логовете за контейнер 0f5bcedeac24: 20K
Размер на логовете за контейнер 1c14a27e7b70: 0
Размер на логовете за контейнер af4d98b51ed4: 0

Заключение

Управлението на Docker логовете е критична задача за поддържане на ефективността на контейнеризираните приложения. Използвайки скрипт за автоматично изчистване на логовете, можете да предотвратите натрупването на ненужни данни и да поддържате системата си в оптимално състояние. Следвайки стъпките в тази статия, ще можете лесно да създадете и използвате такъв скрипт. Автоматизацията с cron допълнително улеснява процеса и гарантира редовно изчистване на логовете.

Благодарим ви за прочитането на статията! Ако намерихте информацията за полезна, можете да дарите посредством бутоните по-долу: