구축 배경
SW QA Engineer로 업무를 하다보면 검증 대상 SW와의 연동 시험 환경 구축을 위해 오픈 소스를 활용하는 경우가 종종 있다. 이번에 로그 모니터링 솔루션을 신규 도입하기로 하였는데, 모니터링 서버와 GUI Admin은 자체 솔루션으로 개발하고 로그 수집은 ELK를 활용하기로 결정되어 미리 사용법을 익혀 볼겸 간단히 구성해 보기로 하였다.
예전에 LogStash(input: mysql) + ES + Grafana 조합으로 서비스 모니터링(Counter, Graph) 시스템을 구성해 본 적은 있었는데, 그 당시에는 주변에서 Kibana 보다는 Grafana를 많이 사용하는 추세였다. 이번에도 frontend는 직접 개발하기로 하여 Kibana를 사용하지는 않게 되었으나 frontend가 개발되려면 한달 이상을 기다려야 했고(GUI 기획 단계였기에..), Filebeat를 도입해 보자는 의견이 있어 빠르게 Filebeat + ES + Kibana 조합으로 실시간 로그 수집 환경을 구성해 보았다.
참고 사이트
kibana configurations : https://www.elastic.co/guide/en/kibana/7.x/settings.html
ES configurations : https://www.elastic.co/guide/en/elasticsearch/reference/7.x/docker.html
filebeat configurations : https://www.elastic.co/guide/en/beats/filebeat/7.x/running-on-docker.html
설치하기
host에 직접 설치해도 되지만, 최근에는 대부분의 설치를 docker 기반에서 작업을 하다 보니 docker-compose.yml 를 생성해서 설정을 백업해 두기 위해docker 를 활용하여 환경 구성을 진행 하였다.
구성도에 IP를 그대로 노출한 이유는 아래 설정 파일에 IP가 포함되는 항목이 있어 연관성을 파악하기 쉽도록 하였다.
(1) ES + kibana 설치
docker-compose.yml
version: '3'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.11.1
container_name: elasticsearch
hostname: elasticsearch
environment:
- bootstrap.memory_lock=true
- http.host=0.0.0.0
- discovery.type=single-node
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
volumes:
- ./conf/elasticsearch.yml:/usr/share/elasticsearch/elasticsearch.yml:ro
- esdata:/usr/share/elasticsearch/data
ports:
- 9200:9200
- 9300:9300
restart: always
kibana:
image: docker.elastic.co/kibana/kibana:7.11.1
container_name: kibana
hostname: kibana
volumes:
- ./conf/kibana.yml:/usr/share/kibana/config/kibana.yml:ro
ports:
- 5601:5601
restart: always
depends_on:
- elasticsearch
volumes:
esdata:
driver: local
conf/elasticsearch.yml
elasticsearch.password: espassword
cluster.name: docker-elk-cluster
node.name: node-1
path.data: /usr/share/elasticsearch/data
http.port: 9200
conf/kibana.yml
server.host: 0.0.0.0
server.port: 5601
elasticsearch:
hosts: ["http://10.220.150.66:9200"]
username: elastic
password: espassword
status.allowAnonymous: true
(2) filebeat 설치
docker-compose.yml
version: '3'
services:
filebeat:
image: docker.elastic.co/beats/filebeat:7.11.1
container_name: filebeat
hostname: filebeat-log1
user: root
volumes:
- ./conf/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro
- fbdata:/usr/share/filebeat/data/
- /var/log/:/logs/host/
restart: always
volumes:
fbdata:
driver: local
conf/filebeat.yml
# input
filebeat.inputs:
- type: log
enabled: true
paths:
- /logs/host/messages*
# multiline.pattern: ^\[
# for kibana dashboard
setup.kibana:
host: "10.220.150.66:5601"
protocol: "http"
setup.dashboards.enabled: true
# output
output.elasticsearch:
hosts: ["10.220.150.66:9200"]
username: "elastic"
password: "espassword"
(3) kibana 에 로그 모니터링 Dashboard 추가
- kibana 접속 URL : http://10.220.150.66:5601/
위 URL(설치된 환경의 IP:5601)로 접속하여 “Logs” 메뉴를 선택하여 Filter에 filebeat-* 를 선택해주면 실시간 으로 수집되고 있는 로그를 볼 수 있다.
'Engineering > ELK' 카테고리의 다른 글
(스크랩) logstash-output-jdbc ( timestamp value를 INSERT 문에서 CAST 하기 ) (0) | 2021.06.04 |
---|
댓글