Fluentd + MongoDB
728x90

회사에서  Fluentd 에서 수집한 로그를 MongoDB에 넣는 것도 한번 해보는게 어떻냐고 해서 함 해봤다.

 

회사에서 할 때는 fluentd 버전이 1.11.0 버전이여서 fluent-plugin-mongo를 설치 하려고 할 때마다 안됬었던거 같았다.

 

fluentd 초짜였던 나는 fluentd 내장 ruby와 bson의 버전이 낮아 업그레이드 하는 방법을 몰라서 삭제하는 방법으로 했는데 역시 가장 좋은건 있는 그대로 놔두는게 제일 좋은거 같다. 이 후에 나오는건 에러 폭탄이였다.

 

결국 td-agent를 삭제를 했다. 

sudo yum remove td-agent

sudo rpm -e --allmatches gpg-pubkey-ab97acbe-586223cc

sudo rm /etc/yum.repos.d/td.repo

순차적으로 해준 결과 fluentd를 다시 설치했을 때 플러그인이 날아간 상태에서 설치가 되지 않아서 아무것도 할 수 없는 상태가 되었다.

 

그래서 오늘 설정해볼 것은 개인 컴으로 할 예정이다.

 

환경

Mac OS

fluentd 1.14.3 -> 내장된 ruby 버전이 2.6.8p205, bson 버전 4.15.0

docker MongoDB 4.0.0 회사에서 쓰는 버전이 4.0.0이다.

 

MongoDB Create Database

이건 간단하다. docker 명령어로 mongodb cli에 접속해서 db생성과 createUser를 해주면된다. 미래의 내가 까먹고 삽질하고 있을까봐 명령어도 같이 적어둔다.

 

# mongo

//db 버전 확인 shell 버전 정보가 나와서 헷갈릴 수 있으니 명령어로 찾아본다.
db.version()


//db 생성? 아무 조건을 주지 않은 상태로 만든다. 약식으로 만들었다.
use <dbName>

//아무 collection 넣기
db.<collectionName>.insert({"test":"test"})

//db 목록에 내가 방금 생성한 db가 있는지 확인
show dbs

//create User
db.createUser({user:"<userName>",pwd:"<Password>",roles:[{"role":"readWrite","db":"<dbName>"}]})

db설정은 이제 끝났다.

 

DB 툴로 connection이 잘 되는지 확인해보기 까지 하면 좋다.

 

Fluentd 설치

https://docs.fluentd.org/installation/install-by-rpm

 

Install by RPM Package (Red Hat Linux) - Fluentd

Step 3: Post Sample Logs via HTTP

docs.fluentd.org

여기서 Mac 전용으로 다운 받는다.

 

Mac과 CentOS는 td-agent의 경로가 다르다.

 

공식 사이트에서 설명대로 설치가 완료 되었다면 실행해본다.

 

# td-agent 실행
sudo launchctl load /Library/LaunchDaemons/td-agent.plist

#config 파일 경로
cd /etc/td-agent/td-agent.conf

#td-agent-gem 경로
cd /opt/td-agent/usr/sbin/ # 플러그인 install 시 여기서 

sudo ./td-agent-gem install <plugin name>

 

fluent-plugin-mongo 설치

 

#아까 봤던 td-agent-gem 경로에서

sudo ./td-agent-gem install fluent-plugin-mongo

이러면 최신 버전의 mongo 플러그인이 설치가 된다.

 

이제 conf파일 수정하러 가면된다.

 

/etc/td-agent/td-agent.conf

 

<source>
 @type tail
 path <path>/logs/%Y-%m-%d.log
 pos_file <path>/logs/pos/%Y-%m-%d.log.pos
 tag mongo
 <parse>
  @type none
 </parse>
</source>


<match mongo>
 @type mongo
 host <host>
 port 27017
 database fluent
 collection logs

 #authentication
 user <userName>
 password <password>

 <inject>
 #key name of timestamp
 time_key time
 </inject>
 <buffer>
  #flush
  flush_interval 10s
 </buffer>
</match>

flush_interval 10s 10초마다 flush한다는 의미

 

만약 fluentd가 돌아가는 중에 conf를 수정했다면 재시작을 해주자.

 

Test

나는 바탕화면에 logs라는 폴더를 만들어 이쪽에다가 log를 날리도록 하겠다.

 

아 그리고 iterm을 쓰는 사람들은 전체디스크 접근 해제 시키고 하길 바란다. 그리고 ruby도 디스크에 접근을 하기 때문에 ruby에도 체크를 해주길 바란다.

 

ruby에 체크 되있는게 보일 것이다.

 

이제 iterm이나 기타 터미널에서 logs 폴더로 들어가서 명령어를 쳐준다.

 

echo "test message" | sudo tee -a <path>/logs/2022-05-10.log

이렇게 하면 logs 폴더에 log 파일이 저렇게 생성된다.

 

그 후에 DB 툴에서  설정한 test message가 들어가면 test 성공이다.

 

test 성공!

728x90

'Fluentd > 적용' 카테고리의 다른 글

Fluentd + Azure Loganalytics  (0) 2022.07.25
Fluentd Installation ( ruby gem )  (0) 2022.07.25
Fluentd access log 500 에러만 남기기  (0) 2022.06.23
Fluentd Test  (0) 2022.05.06
Fluentd + Newrelic  (0) 2022.04.29