# ec2 사양
AMI: Amazon Linux release 2023.5.20240624 (Amazon Linux)
인스턴스 유형: t2.small
1. Fluentd 설치
curl -fsSL https://toolbelt.treasuredata.com/sh/install-amazon2023-fluent-package5-lts.sh | sh
fluentd를 설치하는 shell script를 다운로드 받고 실행시킵니다. 링크를 참조하여 본인의 서버 사양에 맞는 스크립트를 다운로드 받습니다.
cd /usr/lib/systemd/system
ls -al | grep fluent
위 명령어를 실행하면 정상적으로 fluentd가 설치된 것을 확인할 수 있습니다. 설치되고 바로 서비스가 돌지는 않기 때문에 직접 실행시켜주어야 합니다.
sudo systemctl status fluentd.service
이제 제대로 실행이 되고 있는지 한번 테스트를 해보겠습니다.
curl -X POST -d 'json={"json":"message"}' http://localhost:8888/debug.test
tail -n 1 /var/log/fluent/fluentd.log
위 사진을 보면 http 요청으로 보낸 로그가 fluent에서 인식이 된 것을 확인할 수 있습니다.
그러면 어떻게 위처럼 동작했는지 conf파일을 한번 확인해보겠습니다. 아래는 fluent를 설치하면 기본으로 생성되는 conf파일에서 주석처리된 부분을 제외한 conf파일입니다. (conf파일 기본 경로: /etc/fluent/fluentd.conf)
<match td.*.*>
@type tdlog
@id output_td
apikey YOUR_API_KEY
auto_create_table
<buffer>
@type file
path /var/log/fluent/buffer/td
</buffer>
<secondary>
@type secondary_file
directory /var/log/fluent/failed_records
</secondary>
</match>
<match debug.**>
@type stdout
@id output_stdout
</match>
<source>
@type forward
@id input_forward
</source>
<source>
@type http
@id input_http
port 8888
</source>
<source>
@type debug_agent
@id input_debug_agent
bind 127.0.0.1
port 24230
</source>
위 conf파일에서 아래와 같은 부분이 있습니다. source는 로그를 어디서 받아올지는 결정하는 부분입니다. @type은 http로 설정되어 있기 때문에 http를 통해서 로그를 수집하고, port는 8888번을 사용합니다. 그래서 우리는 http://localhost:8888/debug.test 으로 요청을 보낸 것입니다. 여기서 debug.test는 태그의 이름입니다.
<source>
@type http
@id input_http
port 8888
</source>
또한 아래 부분의 의미는 debug.**라는 태그를 가진 로그가 인풋되면 표준출력을 하라는 의미입니다.
<match debug.**>
@type stdout
@id output_stdout
</match>
그래서 우리가 curl -X POST -d 'json={"json":"message"}' http://localhost:8888/debug.test 으로 요청을 보냈을 때, fluentd 로그에 출력이 되었던 것입니다.
2. Fluentd 설정
그러면, 이제 conf파일을 수정하여 nginx의 로그를 수집하고 출력하도록 설정을 변경해보겠습니다. source는 type을 tail로 설정하여 파일에서 로그를 읽어올 수 있도록 하였습니다. path에는 nginx의 기본 로그 경로를 설정해주었고, pos_file은 access.log와 동일한 경로로 세팅해주었습니다(pos_file는 로그파일을 어디까지 읽었는지에 대한 정보를 저장하기 위한 파일입니다. 해당 파일이 없으면 프로그램 재시작시 로그 중복이 발생할 수 있습니다. ). parse는 nginx플러인을 사용하였습니다. parse에 nginx플러그인을 사용하면 nginx의 로그의 형식에 맞도록 파싱을 해줍니다. 그리고 nginx.log라는 태그를 설정하여 출력하도록 합니다.
<source>
@type tail
tag nginx.log
path /var/log/nginx/access.log
pos_file /var/log/nginx/access.log.pos
<parse>
@type nginx
</parse>
</source>
<match nginx.log>
@type stdout
</match>
설정 파일을 작성한 후 아래 명령어를 사용하면 해당 conf파일의 문법을 확인할 수 있습니다.
fluentd --dry-run -c ./fluentd.conf
이렇게 작성 후 서비스를 재시작하고 fluentd의 로그를 출력해보면
sudo systemctl restart fluentd.service
tail -n 1 /var/log/fluent/fluentd.log
위처럼 로그가 파싱되어 출력되는 것을 확인할 수 있습니다.
*참고 (원래 nginx 로그 형식)
다음 글에서는 Fluentd를 활용해서 S3로 로그를 올리는 포스팅을 가져와보겠습니다.
'데브옵스' 카테고리의 다른 글
Nexus Repository 설치하기 (2) | 2024.11.14 |
---|---|
Fluentd로 S3에 로그 저장하기 (0) | 2024.11.01 |
Node Exporter + Prometheus + grafana로 모니터링 (3) | 2024.10.30 |
EC2 세부 모니터링 설정하기 (0) | 2024.05.18 |
VisualVM Remote로 연결하여 모니터링하기 (feat. EC2, Docker) (0) | 2024.05.18 |