일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- docker
- #api 문서화
- server
- Redux
- 프로세스
- #Swagger-codegen
- 프로세스 통신
- action
- fluentd
- Reducer
- SRE
- 기술PM
- IP
- 카카오게임즈
- AWS
- javascript
- #Swagger
- Kubernetes
- #Swagger-editor
- Site Reliability engineering
- ecs
- 쿠버네티스 컨트롤러
- 모두의캠퍼스
- 쿠버네티스
- 모캠
- React
- #Swagger-ui
- React.js
- 북딜
- #스웨거
- Today
- Total
탕구리's 블로그
fluentd 설정하기 (with docker) 본문
fluentd Docker image 생성
- 알파인 기반의 이미지는 플러그인 설치가 불가능
- 데비안 기반의 이미지에 커스텀 도커라이징 진행
- 이미지에 설치한 플러그인 리스트
- elasticsearch
- output-http
- mysql-bulk
Dockerfile
FROM fluent/fluentd:v1.11-debian-1
# Use root account to use apt USER root
# below RUN includes plugin as examples elasticsearch is not required # you may customize including plugins as you wish RUN buildDeps="sudo make gcc g++ libc-dev" \ && apt-get update \ && apt-get install -y --no-install-recommends $buildDeps \ && sudo apt-get install -y libmariadb-dev \ && sudo gem install fluent-plugin-elasticsearch \ && sudo gem install fluent-plugin-out-http -v 0.1.4 \ && sudo gem install fluent-plugin-mysql-bulk \ && sudo gem sources --clear-all \ && SUDO_FORCE_REMOVE=yes \ apt-get purge -y --auto-remove \ -o APT::AutoRemove::RecommendsImportant=false \ $buildDeps \ && rm -rf /var/lib/apt/lists/* \ && rm -rf /tmp/* /var/tmp/* /usr/lib/ruby/gems/*/cache/*.gem
#COPY ./config/fluent.conf /fluentd/etc/fluent.conf #COPY ./entrypoint.sh /bin/entrypoint.sh
USER fluent |
fluentd 실행 명령어
docker-run
docker container run \ -u root \ -p 24224:24224 \ -v /home/ec2-user/fluentd/conf/fluent.conf:/fluentd/etc/fluent.conf \ -v /home/ec2-user/logs/:/fluentd/log/ \ --name fluentd \ accs/fluentd:latest |
fluent.conf
Dockerfile
## http call 요청 받기 <source> @type http port 24224 </source>
## 로그 파일 읽어오기 <source> @type tail path /fluentd/log/test.log pos_file /fluentd/log/test.log.pos tag mysql.input <parse> @type json </parse> </source>
## nginx 로그 파싱 <source> @type tail path /fluentd/log/nginx/access.log pos_file /fluentd/log/nginx/access.pos.log tag nginx.log <parse> @type nginx </parse> </source>
## apache 로그 파싱 <source> @type tail path /fluentd/log/apache/access.log pos_file /fluentd/log/apache/access.pos.log tag apache.log <parse> @type nginx </parse> </source>
## regex 기반 로그 파싱 <source> @type regexp path /fluentd/log/test/access.log pos_file /fluentd/log/test/access.pos.log tag test.log <parse> @type regexp expression /^(?<remote>[^ ]*) (?<host>[^ ]*) (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^\"]*?)(?: +\S*)?)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)"(?:\s+(?<http_x_forwarded_for>[^ ]+))?)?$/ </parse> </source>
## match 결과에 따른 output 발생 <match mysql.input> @type mysql_bulk host 172.31.19.253 database test_scheme username root password root column_names id,data table test flush_interval 10s </match>
<match platform.log> @type http endpoint_url http://172.31.19.253/ serializer json </match>
<match es.log> @type elasticsearch host 15.165.132.138 port 9200 index_name ${tag} flush_interval </match> |
수정 필요한 부분
- 컨테이너 내부에서 파일 실행시 현재 root 권한으로 실행 중
- 파일에 대한 권한 발급 후 컨테이너 내부 명령 진행하면 좋을 듯
Parser type
third party type
- multi-format-parser
- grok
테스트 진행 사항
- mysql bulk insert
- 특정 주기에 따라 파일을 읽어올 수 있음
- 한번 읽어온 파일에 대한 position을 따로 관리하여 중복된 데이터는 서치하지 않음
- http call
- http를 통한 로그 전송 시 원하는 endpoint로 전달 가능
- file read
- 파일을 읽고 out을 생성하는 작업 진행 완료
- log to elasticsearch
- http call을 통해 요청 발생시 index 생성 후 데이터 정상 삽입 여부까지 확인
'devOps' 카테고리의 다른 글
Prometheus - webhook 설정하기(with alertmanager) (2) | 2020.08.10 |
---|---|
[Kubernetes] #6 Replication Controller & ReplicaSet (0) | 2020.06.15 |
[Kubernetes] #5 NodePort, port, targetPort (feat.쉬어가기) (0) | 2020.06.14 |
[Kubernetes] #4 컨트롤러(Controller) 개념정리 (0) | 2020.06.07 |
[Kubernetes] #3 파드(pod) 설정 및 사용하기 (0) | 2020.05.22 |