Elastic Stack을 이용한 데이터 파이프라인을 구성 합니다. MySQL의 ErrorLog, SlowQuery 파일을 FileBeat로 Elasticsearch에 적재 후 Kibana에서 시각화 합니다.
Elastic Stack은 FileBeat, Logstash, Elasticsearch, Kibana로 구성됩니다.
이번 실습에서는 Logstash는 제외되었습니다.
Elastic Stack을 설치한 후 Filebeat를 설치, 구성 및 실행하는 방법에 대해 알아보겠습니다.
실습 환경 정보는 아래와 같습니다.
Docker : 20.10.2
Filebeat : 6.7.1
Elasticsearch : 6.7.1
MySQL : MySQL 8.0.23 (Debian GNU/Linux 10.8)
docker-compose 디렉토리 구조 및 파일을 살펴보도록 하겠습니다.
elasticsearch, kibana, filebeat, mysql 구성에 필요한 폴더구조와 파일로 구성되어있습니다.
elastic-stack-6.7.1
├── docker-compose.yml
├── elasticsearch
│ ├── conf
│ │ └── elasticsearch.yml
│ ├── data
├── kibana
│ ├── conf
│ │ └── kibana.yml
├── filebeat
│ ├─ filebeat-6.7.1-amd64.deb
│ └── conf
│ ├── filebeat.yml
│ └── modules.d
│ └── mysql.yml
├── mysql-01
├── conf
│ └── my.cnf
├── data
└── log
"docker-compose.yml", "filebeat.yml", "mysql.yml"를 살펴봅니다.
elasticsearch, kibana, filebeat, mysql 구성에 필요한 이미지를 불러옵니다. 그리고 환경설정 파일 및 데이터가 저장될 볼륨을 마운트 합니다.
version: '3.2'
services:
elasticsearch:
image: elasticsearch:6.7.1
hostname: elasticsearch
volumes:
- type: bind
source: "${PWD}/elasticsearch/config/elasticsearch.yml"
target: /usr/share/elasticsearch/config/elasticsearch.yml
read_only: true
- "${PWD}/elasticsearch/data:/usr/share/elasticsearch/data"
ports:
- "9200:9200"
- "9300:9300"
environment:
ES_JAVA_OPTS: "-Xmx256m -Xms256m"
ELASTIC_PASSWORD: changeme
# Use single node discovery in order to disable production mode and avoid bootstrap checks
# see https://www.elastic.co/guide/en/elasticsearch/reference/current/bootstrap-checks.html
discovery.type: single-node
networks:
- mybridge
kibana:
image: kibana:6.7.1
hostname: kibana
volumes:
- type: bind
source: "${PWD}/kibana/config/kibana.yml"
target: /usr/share/kibana/config/kibana.yml
read_only: true
ports:
- "5601:5601"
networks:
- mybridge
depends_on:
- elasticsearch
mysql-01:
container_name: mysql-01
hostname: mysql-01
image: mysql:8.0.23
command: mysqld --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
environment:
MYSQL_ROOT_PASSWORD: root
ports:
- '3306:3306'
volumes:
- "${PWD}/mysql-01/data:/var/lib/mysql"
- "${PWD}/mysql-01/log:/var/log/mysql"
- "${PWD}/mysql-01/conf/my.cnf:/etc/mysql/conf.d/my.cnf"
- "${PWD}/filebeat/conf/filebeat-6.7.1-amd64.deb:/tmp/"
- "${PWD}/filebeat/conf/filebeat.cnf:/tmp/"
- "${PWD}/filebeat/conf/modules.d/mysql.yml:/tpm/"
networks:
- mybridge
networks:
mybridge:
external: true
filebeat 환경설정의 input, output을 설정합니다. 실습에서는 filebeat modules 중 mysql modules를 사용할 예정입니다. 그리고 outputs를 elasticsearch를 바라보도록 합니다. logstash 연동이 필요한 경우 outputs을 logstash 주소로 변경합니다.
#=========================== Filebeat inputs =============================
filebeat.inputs:
- type: log
enabled: false
paths:
- /var/log/*.log
#============================= Filebeat modules ===============================
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
#================================ Outputs =====================================
output.elasticsearch:
hosts: ["elasticsearch:9200"]
mysql 서버에서 elasticsearch로 서버통신허용이 되어있는지 확인합니다. 연동이 되면 다음 단계로 넘어갑니다.
curl http://elasticsearch:9200
filebeat modules with mysql 에서 Mysql의 Error logs, SLow logs를 설정 및 위치를 지정합니다. 실습에서는 slow logs만 설정했습니다. mysql의 slowquery 설정은 my.cnf에 미리 설정해 두었습니다.
root@mysql-01:/etc/filebeat/modules.d# cat mysql.yml
- module: mysql
# Error logs
error:
enabled: false
# Set custom paths for the log files. If left empty,
# Filebeat will choose the paths depending on your OS.
# var.paths:
# Slow logs
slowlog:
enabled: true
# Set custom paths for the log files. If left empty,
# Filebeat will choose the paths depending on your OS.
var.paths: ["/var/log/mysql/mysql-slow.log*"]
docker-compose를 실행하여 Elastic Stack 및 Mysql 서비스를 시작합니다.
docker-compose up -d
mysql서버에 filebeat를 설치 합니다.
dpkg -i /tmp/filebeat-6.7.1-amd64.deb
FileBeat MySQL 모듈을 활성화 하고 FileBeat 서비스를 시작합니다.
filebeat modules enable mysql
filebeat modules list
filebeat setup -e
service filebeat start
미리 설정한 filebeat.yml, mysql.yml 파일을 복사합니다.
cp /tmp/filebeat.yml /etc/filebeat/filebeat.yml
cp /tmp/modules.d/mysql.yml /etc/filebeat/modules.d/mysql.yml
kibana를 통해 elasticsearch에 적재된 mysql slowquery 데이터를 확인합니다.
"http://localhost:5601/"로 접속합니다.
github 에서 모든 코드를 확인할수 있습니다.