로그 공간 관리 실제 응용
로그 공간 관리 실제 응용
끌어내다
최근 서버 공간이 부족하다는 경고가 자주 발생하고 있습니다. 로그 점용을 배제한 결과 Docker 용기를 사용하는 서버 공간이 로그 점용의 2배에 달하는 것으로 분석되었습니다. 시스템 공간을 관찰한 결과
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 50G 47.4G 2.5G 95% /
none 4.0K 0 4.0K 0% /sys/fs/cgroup
udev 988M 12K 988M 1% /dev
tmpfs 201M 476K 200M 1% /run
none 5.0M 0 5.0M 0% /run/lock
none 1001M 164K 1001M 1% /run/shm
none 100M 0 100M 0% /run/user
/dev/xvdf1 493G 4.6G 463G 1% /Sioeye
전체 xvda1 볼륨의 공간이 부족함을 알 수 있습니다.docker 표준 출력 json 로그 보기가 가득 찼습니다.
ll -h /var/lib/docker/containers/*/*-json.log
-rw-r----- 1 root root 13.8G Oct 11 14:00 /var/lib/docker/containers/2b6643f688a5234165fa1c3ad151f50bc4e7e4126020037584a0a39597d63f73/2b6643f688a5234165fa1c3ad151f50bc4e7e4126020037584a0a39597d63f73-json.log
-rw-r----- 1 root root 7.7G Oct 11 14:01 /var/lib/docker/containers/331768f0a8f5461a433cd317108be3703c5c2d0fa587596cb55545d3d91b1f06/331768f0a8f5461a433cd317108be3703c5c2d0fa587596cb55545d3d91b1f06-json.log
-rw-r----- 1 root root 12.4G Oct 11 13:59 /var/lib/docker/containers/8b78072e9819975ced653883b53e905bc1bab7dced597121c62264aa97835479/8b78072e9819975ced653883b53e905bc1bab7dced597121c62264aa97835479-json.log
세 용기의 표준 출력 로그가 대량의 공간을 차지하는 것을 발견할 수 있다.
설명하다
Docker가 로그를 처리할 때 대부분 Docker logs 명령을 사용합니다. Docker가 기본적으로 사용하는 log-driver는 json-file이기 때문에 Docker는 모든 용기 프로세스의 stdOUTS와 stdERR를 포착하여 디스크 파일에 저장합니다.json.Dockerlogs 명령 질의는 log에서 사용할 수 있습니다.
그러나 우리가 로그를 처리할 때 응용 프로그램 로그를 로그 파일에 기록하고 호스트에 마운트했기 때문에docker의 json-file 로그는 전체 로그를 중복 기록하는 것으로 공간 낭비를 초래하는 것과 같다.
처리하다
이 때 json-file을 직접 삭제할 수 있습니다. 파일을 직접 삭제할 수 없습니다. 삭제한 후 차지하는 공간이 방출되지 않습니다. 이것은 Linux나 Unix 시스템에서 rm나 파일 관리자를 통해 파일을 삭제하면 파일 시스템의 디렉터리 구조에서 링크가 해제되기 때문입니다.그러나 만약 파일이 열려 있다면, 프로세스는 이 파일을 읽을 수 있고, 디스크 공간도 계속 차지할 것이다
올바른 자세는 >*-json입니다.log, 물론 rm를 통해 삭제한 후docker를 다시 시작할 수 있습니다
해결하다
정시 스크립트를 통해 일정 크기를 초과한 json을 삭제합니다.log
실현은 다음과 같다.
#!/bin/bash
# docker
container_path=/var/lib/docker/containers
for container_shortid in $(docker ps -a -q);do
container_id=$(docker inspect -f '``.`Id`' $container_shortid)
[ -f ${container_path}/${container_id}/${container_id}-json.log ] || continue
log_size=$(ls -l ${container_path}/${container_id}/${container_id}-json.log | awk '{print $5}')
#log size great than 1G ,
if [ ${log_size} -gt 1073741824 ] ;then
echo "$(docker inspect -f '``.`Name`' ${container_id}) ${container_id}-json.log $(date +%F\ %T) size is: $[${log_size}/1073741824]G $[${log_size}%1073741824/1048576]M $[${log_size}%1073741824%1048576/1024]K $[${log_size}%1073741824%1048576%1024]B = $(echo "scale=2;${log_size}/1073741824" | bc)G "
: > ${container_path}/${container_id}/${container_id}-json.log
fi
done
출력:/microsrv_zuul 3d03e47c87df387e8e963b854cc3de37b310f03ffcf36a476b2191388c8fd74e-json.log 2017-10-13 05:32:41size is: 3G 884M 973K 59B = 3.86G
crontab를 매일 추가하면 됩니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
소샤게 CS 워크 플로우 개선 바람 관리 화면 12/16로 투고2020/02/08 구성과 설계를 기재 안녕하세요, 코로나입니다. 이번에는 업무에 가깝지만 가상 포트폴리오를 준비해 보았습니다. 신규 개발팀 백엔드 2명 프런트 x명 기획 2명 운영팀 백엔드 1명 문의 겸 기획 1명...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.