카테고리 없음

fluentd install EFK 연동

오개발 2021. 11. 5. 11:17
1.211.40.28 - - [11/Jun/2019:08:56:30 +0900] "GET /api/v4/users/me/teams/9kztki3nz7foi81je6cy9t1nqr/channels HTTP/1.1" 200 926 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) MTWORKS/4.1.4 Chrome/66.0.3359.181 Electron/3.0.13 Safari/537.36"

nginx 디폴트 경로

sudo cat /var/log/nginx/access.log

 

 

로그가 text로 쌓여서 분석하기가 쉽지가 않고 그래서 json 형식으로 변경을 한다.

 

nginx 설정 파일에 가서 수정을 한다.

log_format main  '{"@time":"$time_iso8601",'
    '"IP":"$remote_addr",'
    '"Status":$status,'
    '"Method":"$request_method",'
    '"RequestTime":$request_time,'
    '"FileName":"$request_filename",'
    '"QueryString":"$query_string",'
    '"SentSize":$bytes_sent,'
    '"UA":"$http_user_agent",'
    '"Referer":"$http_referer"}';


# 결과
{"@time":"2019-06-13T20:20:17+09:00","IP":"1.5.6.252","Status":200,"Method":"POST","RequestTime":0.000,"FileName":"/usr/share/nginx/html/api/v4/users/status/ids","QueryString":"-","SentSize":827,"UA":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36","Referer":"-"}

# 
{
  "@time": "2019-06-13T20:20:17+09:00",
  "IP": "1.5.6.252",
  "Status": 200,
  "Method": "POST",
  "RequestTime": 0.000,
  "FileName": "/usr/share/nginx/html/api/v4/users/status/ids",
  "QueryString": "-",
  "SentSize": 827,
  "UA": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36",
  "Referer": "-"
}

 

sudo service nginx restart

 


fluentd 설치

 

개인적으로 블로그를 찾는 것도 있었지만 공식 홈페이지를 참고 하였고,

기타 설정부분이나 잘 안되는 부분은 블로그를 참고하였습니다.

 

Install by RPM Package (Red Hat Linux)

 

 

 

Amazon Linux 2:

# td-agent 4
$ curl -L https://toolbelt.treasuredata.com/sh/install-amazon2-td-agent4.sh | sh

# td-agent 3
$ curl -L https://toolbelt.treasuredata.com/sh/install-amazon2-td-agent3.sh | sh

 

실행

td-agent 는 두개의 데몬을 지원 합니다.

 

$ sudo systemctl start td-agent.service
$ sudo systemctl status td-agent.service

 

 

자주 쓰는 명령어

 

$ sudo /etc/init.d/td-agent start
$ sudo /etc/init.d/td-agent stop
$ sudo /etc/init.d/td-agent restart
$ sudo /etc/init.d/td-agent status

 

 

Fluentd 플러그인 설치

 

ubuntu@ip-10-10-101-43:/home/ubuntu# sudo td-agent-gem update
Updating installed gems
Updating aws-partitions
Fetching: aws-partitions-1.174.0.gem (100%)
Successfully installed aws-partitions-1.174.0
Parsing documentation for aws-partitions-1.174.0
Installing ri documentation for aws-partitions-1.174.0
Installing darkfish documentation for aws-partitions-1.174.0
Done installing documentation for aws-partitions after 0 seconds
Parsing documentation for aws-partitions-1.174.0
Done installing documentation for aws-partitions after 0 seconds
.
.
ubuntu@ip-10-10-101-43:/home/ubuntu# sudo td-agent-gem install fluent-plugin-config-expander
.
.
ubuntu@ip-10-10-101-43: sudo td-agent-gem install fluent-plugin-elasticsearch

 

접속해서

format은 json

 

<source>
        @type config_expander
        <config>
                @type tail
                path /var/log/nginx/access.log
                pos_file /var/log/nginx/access.log.pos
                format json
                tag nginx-access-log
        </config>
</source>

<match nginx-access-log>
  @type elasticsearch
  host 10.60.101.29
  port 9200
  logstash_format true
</match>

 

config 에서 pos_file 옵션은 마지막에 읽은 위치를 기록하는 파일이다.

@type tail - 저장할 file의 tail을 보면서 로그를 수집하겠다는 것이며, path와 pos_file, tag 등을 필수로 함께 작성해주어야 한다. 

path - 로그를 수집할 file의 위치를 지정한다. 예시처럼 파일을 명시적으로 한 개 지정할 수 도 있고 wildcard 문자로 특정 폴더 내의 모든 파일 등을 지정할 수 도 있다. (/myserver/log/*)  

pos - 모니터링 대상 파일 내용을 어디까지 읽었는지 기록해두는 파일이다. 해당 파일에 기록된 위치를 기반으로 파일에 새로운 내용이 쓰이거나 td-agent가 재시작되었을 때 중복되지 않게 로그를 읽을 수 있게 해 준다. 

 

 

기본적으로 제가 설정한 source 는 input 값

 

match 는 Output 지점

 

 

설정 url

 

서버 로그 다루기 - Fluentd 편

 

 

pos 파일을 만들고 Fluentd 를 시작하자.

 

 

ubuntu@ip-10-10-101-43:/home/ubuntu# touch /var/log/nginx/access.log.pos
ubuntu@ip-10-10-101-43:/home/ubuntu# sudo service td-agent configtest
 * td-agent # 색상이 없으면 OK
ubuntu@ip-10-10-101-43:/home/ubuntu# sudo service td-agent start
td-agent 14620     1  0 Jun11 ?        00:00:11 /opt/td-agent/embedded/bin/ruby /opt/td-agent/embedded/bin/fluentd --log /var/log/td-agent/td-agent.log --daemon /var/run/td-agent/td-agent.pid
td-agent 14626 14620  0 Jun11 ?        00:00:21 /opt/td-agent/embedded/bin/ruby -Eascii-8bit:ascii-8bit /opt/td-agent/embedded/bin/fluentd --log /var/log/td-agent/td-agent.log --daemon /var/run/td-agent/td-agent.pid --under-supervisor

 

 

 

Management → Stack Management → Index Patterns →

 

 

 

 

 

 

참고 url

Fluentd 의 활용. ElasticSearch, Kibana 을 사용한 Nginx Log 수집 - GRIP.News

Introduction