IoT와 같은 환경에서는 MQTT 브로커로부터 데이터를 수집하고 이를 Elasticsearch에 기록하여 분석하는 것이 중요합니다. 이 글에서는 Filebeat를 통해 MQTT 브로커에서 데이터를 읽어와 Elasticsearch에 전송하는 전체 과정을 다룹니다. 각 단계별로 자세한 설정 방법과 사용자 정의 모듈 추가, Docker 환경에서의 사용 예시까지 포함하여 설명합니다.
목차
- 배경 및 필요성
- 환경 구성 요소
- Filebeat 설치
- Filebeat 설정 파일 수정 및 MQTT 입력 설정
- 커스텀 MQTT 모듈 추가 및 Docker 설정
- Filebeat 실행 및 데이터 확인
- 주의 사항 및 최적화 팁
1. 배경 및 필요성
MQTT(Message Queuing Telemetry Transport)는 저전력 장치에 최적화된 경량 메시지 프로토콜입니다. IoT 장치에서 주로 사용되는 이 프로토콜을 통해 데이터 수집 및 모니터링 시스템을 구축하면 실시간으로 장치 상태를 추적할 수 있습니다. Elasticsearch와 Kibana와 같은 도구를 활용하여 수집된 데이터를 효과적으로 저장하고 분석할 수 있습니다.
Filebeat는 경량 데이터 수집기로, MQTT 브로커와 Elasticsearch 간 데이터 전송의 안정성을 보장하며, 이를 통해 높은 가용성을 유지하는 IoT 모니터링 시스템을 구축할 수 있습니다.
2. 환경 구성 요소
본 가이드에서는 다음과 같은 구성 요소를 사용합니다.
- MQTT 브로커: 메시지를 발행하고 구독하는 중개 서버 (예: Mosquitto, EMQX).
- Filebeat: 경량 로그 및 이벤트 수집기, Filebeat를 통해 MQTT 데이터를 수집하고 Elasticsearch로 전송.
- Elasticsearch: 수집된 데이터를 저장하고 검색하는 분산 검색 엔진.
- Kibana: Elasticsearch에 저장된 데이터를 시각화하는 대시보드 도구.
3. Filebeat 설치
각 운영 체제에 맞는 방법으로 Filebeat를 설치합니다. 예를 들어, Ubuntu에서는 다음 명령어를 사용합니다.
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.0.0-amd64.deb
sudo dpkg -i filebeat-8.0.0-amd64.deb
다른 운영 체제에 대한 설치 방법은 Filebeat 공식 설치 가이드를 참고하세요.
4. Filebeat 설정 파일 수정 및 MQTT 입력 설정
4.1 filebeat.yml 파일 수정
설치된 Filebeat의 filebeat.yml
파일을 열어 MQTT 입력 설정과 Elasticsearch 출력을 추가합니다.
filebeat.inputs:
- type: mqtt
enabled: true
hosts:
- tcp://broker:1883
- ssl://secure_broker:8883
topics:
- sample_topic
qos: 1
client_id: "unique_client_id"
username: "mqtt_username"
password: "mqtt_password"
ssl:
certificate_authorities: ["/path/to/ca.pem"]
certificate: "/path/to/cert.pem"
key: "/path/to/key.pem"
tags: ["mqtt"]
fields:
app_id: "mqtt_data_collector"
fields_under_root: true
index: "mqtt-events-%{+yyyy.MM.dd}"
output.elasticsearch:
hosts: ["http://your_elasticsearch_host:9200"]
username: "elastic"
password: "your_elasticsearch_password"
indices:
- index: "mqtt-events-%{+yyyy.MM.dd}"
when.contains:
tags: "mqtt"
4.2 설정 요소 설명
- MQTT 입력 설정
type: mqtt
: MQTT 입력을 지정.hosts
: 연결할 MQTT 브로커의 주소 목록 (tcp:// 또는 ssl:// 사용).topics
: 구독할 MQTT 토픽 목록.qos
: 메시지 전달 품질 수준 (0: at most once, 1: at least once, 2: exactly once).client_id
: MQTT 브로커에 연결할 고유한 클라이언트 ID.username
,password
: MQTT 브로커 인증에 사용할 사용자 이름과 비밀번호.ssl
: 인증서와 키를 통한 SSL 설정.tags
: 데이터에 태그를 추가해 후속 분석 시 필터로 사용 가능.fields
,fields_under_root
: 추가 정보를 상위 레벨에 포함.
- Elasticsearch 출력 설정
hosts
: 연결할 Elasticsearch 호스트 목록.username
,password
: Elasticsearch 인증 정보.indices
: 특정 조건을 만족할 때 사용되는 인덱스 패턴.
5. 커스텀 MQTT 모듈 추가 및 Docker 설정
Filebeat에 기본적으로 MQTT 모듈이 포함되지 않아 사용자 정의 모듈을 추가해야 합니다.
5.1 모듈 디렉토리 생성 및 mqtt.yml 파일 작성
mkdir modules.d
modules.d/mqtt.yml
파일을 생성하고 다음 내용을 추가합니다.
- module: mqtt
mqtt:
enabled: true
hosts:
- tcp://broker:1883
topics:
- your/topic
qos: 1
client_id: "unique_client_id"
username: "mqtt_username"
password: "mqtt_password"
ssl:
certificate_authorities: ["/path/to/ca.pem"]
certificate: "/path/to/cert.pem"
key: "/path/to/key.pem"
tags: ["mqtt"]
fields:
source: "mqtt_broker"
fields_under_root: true
index: "mqtt-events-%{+yyyy.MM.dd}"
5.2 Docker Compose를 사용한 Filebeat 설정
Docker 환경에서 Filebeat를 실행하는 경우, docker-compose.yml
파일에 사용자 정의 MQTT 모듈을 마운트하여 설정합니다.
version: '3.7'
services:
filebeat:
image: docker.elastic.co/beats/filebeat:8.0.0
volumes:
- ./filebeat.yml:/usr/share/filebeat/filebeat.yml
- ./modules.d/mqtt.yml:/usr/share/filebeat/modules.d/mqtt.yml
- /var/lib/docker/containers:/var/lib/docker/containers:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
- ELASTICSEARCH_HOST=http://your_elasticsearch_host:9200
- ELASTICSEARCH_USERNAME=elastic
- ELASTICSEARCH_PASSWORD=your_elasticsearch_password
docker-compose up -d
명령을 사용하여 Filebeat 컨테이너를 실행합니다.
6. Filebeat 실행 및 데이터 확인
6.1 Filebeat 실행
설정 파일이 완성되었으면 Filebeat를 실행합니다.
sudo filebeat -e -c filebeat.yml
또는 Docker Compose 환경에서 실행할 경우
docker-compose up -d
6.2 Kibana에서 데이터 확인
- Kibana에 접속하여 "Stack Management" 메뉴로 이동합니다.
- "Index Patterns"에서
mqtt-events-*
와 같은 인덱스 패턴을 추가합니다. - 인덱스를 생성한 후, Discover 탭에서 MQTT 데이터를 확인하고 분석합니다.
7. 주의 사항 및 최적화 팁
- SSL 설정 확인: SSL을 사용하는 경우 인증서와 키 파일의 경로를 정확히 설정해야 합니다.
- Filebeat 버전: 사용하는 Filebeat 버전과 설정 파일이 호환되는지 확인하세요.
- 로그 모니터링: Filebeat 실행 시 출력되는 로그를 모니터링하여 오류나 경고가 발생하는지 확인합니다.
- 데이터 필터링: 수집된 데이터가 많아질 경우,
tags
나fields
필드를 활용해 인덱스 조건을 세분화할 수 있습니다.
이 가이드를 통해 MQTT 데이터를 Filebeat를 사용해 Elasticsearch에 기록하고, Kibana로 시각화할 수 있습니다. Docker 환경에서의 Filebeat 실행, 사용자 정의 모듈을 통한 입력 추가 등 다양한 환경에 맞춘 설정이 가능하므로, 실제 시스템에 맞게 구성해 보시기 바랍니다.
댓글