MongoDB 를 이용 하여 Docker 로 그 를 저장 하 는 방법 에 대한 자세 한 설명

3924 단어 기억docker로그
머리말
로 그 는 시스템 의 매우 중요 한 구성 부분 으로 로 그 를 통 해 시스템 에 존재 하 는 문제점 을 신속하게 발견 할 수 있 고 문 제 를 복구 하 는 데 단 서 를 제공 할 수 있다.Docker 는 다양한 플러그 인 방식 으로 로 그 를 관리 합 니 다.본 고 는 MongoDB 를 사용 하여 Docker 로 그 를 저장 하 는 과정 을 기록 합 니 다.
데이터 흐름

Docker 가 생 성 한 날 짜 를 FluentD 로 보 낸 다음 FluentD 는 MongoDB 로 저장 합 니 다.
Fluentd 설정
전제:운영 체 제 는 CentOS 7 이 고 MongoDB 3.4 가 설치 되 어 있 습 니 다.
1.Fluentd 설치
CentOS 7 의 소프트웨어 라 이브 러 리 에는 Fluentd 설치 패키지 가 포함 되 어 있 지 않 기 때문에 수 동 으로 설치 해 야 합 니 다.CentOS 에서 사용 하 는 소프트웨어td-agent

# curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent3.sh | sh
위의 명령 은/etc/yum.repo.d/디 렉 터 리 에 td-agent 의 설치 라 이브 러 리 td.repo 를 만 든 다음 td-agent 를 자동 으로 설치 합 니 다.설치 완료 후 자동 시작 으로 설정 합 니 다.

# systemctl start td-agent
# systemctl enable td-agent
시작 과정 에서 문제 가 발생 하면/var/log/td-agent/아래 로그 파일 td-agent.log 를 볼 수 있 습 니 다.
2.docker 로 그 를 MongoDB 에 저장 하도록 설정
MongoDB 로 저장 하려 면 플러그 인 지원 이 필요 하지만 기본적으로 td-agent 는 이 플러그 인 을 설치 하지 않 았 기 때문에 설치 해 야 합 니 다.

# yum -y install td-agent-gemt
# td-agent-gem install fluent-plugin-mongo
편집/etc/td-agent/td-agent.conf,증가

## match tag=docker.* and dump to mongodb
##  docker     ,   tag   docker.*   
<match docker.*>
 @type mongo
 #      
 host 127.0.0.1
 #      
 port 22017
 #               
 database docker
 collection log
</match>
td-agent 를 다시 시작 합 니 다.
시동 용기
용기 시작 명령 변경:

$ docker run --mount type=bind,source=/home/demo/app,destination=/app --log-driver=fluentd --log-opt tag="docker.log" python3:latest python3 /app/test.py
실행 이 끝나 면 MongoDB 에서 로 그 를 볼 수 있 습 니 다.
후속
그러나 실제 사용 과정 에서 Docker 가 생 성 한 로 그 는 MongoDB 에 바로 기록 되 지 않 고 약 1 분 정도 지연 되 는 것 으로 나 타 났 다.
Fluentd 문 서 를 보면 로그 의 기록 빈 도 를 조절 할 수 있 는 flush 인자 가 있 습 니 다.기본 값 은 60s 입 니 다.flush 변경interval 매개 변 수 는 쓰기 빈 도 를 높 일 수 있 습 니 다.구체 적 으로 다음 과 같이 변경 할 수 있 습 니 다.

## match tag=docker.* and dump to console <match docker.*> @type mongo host 127.0.0.1 port 22017 database docker collection log <buffer> flush_mode interval flush_interval 1s </buffer> </match>
처음에는 문서 에 대한 이해 가 투철 하지 않 아 flush 가 증가 하 였 습 니 다.interval 매개 변수 후 역할 을 발휘 하지 않 았 습 니 다.처음 변경 할 때 flush 를mode 와 flushinterval 은 buffer 구조 에 놓 여 있 습 니 다.즉:

## match tag=docker.* and dump to console <match docker.*> @type mongo host 127.0.0.1 port 22017 database docker collection log flush_mode interval flush_interval 1s </match>
로그 에서 도 위의 설정 을 볼 수 있 습 니 다.역할 을 하지 않 았 습 니 다.
2018-01-19 14:33:32 +0800 [warn]: parameter '**flush_mode**' in @type mongo host "1270.0.0.1" port 22017 database "docker" collection "log" flush_mode interval flush_interval 1s buffer_chunk_limit 8m time_key time time_key time time_format %Y-%m-%d %H:%M:%S.%L is not used.
위 에서 flushmode 는 작 동 하지 않 습 니 다.
총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
참고 문서:
  • https://docs.treasuredata.com/articles/td-agent
  • https://docs.docker.com/engine/admin/logging/fluentd/
  • https://docs.fluentd.org/v1.0/articles/out_mongo
  • 좋은 웹페이지 즐겨찾기