서버구축 (WEB,DB)

Filebeat 활용 MQTT 이벤트 수집 및 Elasticsearch 기록 분석 가이드

날으는물고기 2024. 11. 3. 00:59

Ingest MQTT Data into Elasticsearch - EMQX Docs

IoT와 같은 환경에서는 MQTT 브로커로부터 데이터를 수집하고 이를 Elasticsearch에 기록하여 분석하는 것이 중요합니다. 이 글에서는 Filebeat를 통해 MQTT 브로커에서 데이터를 읽어와 Elasticsearch에 전송하는 전체 과정을 다룹니다. 각 단계별로 자세한 설정 방법과 사용자 정의 모듈 추가, Docker 환경에서의 사용 예시까지 포함하여 설명합니다.

목차

  1. 배경 및 필요성
  2. 환경 구성 요소
  3. Filebeat 설치
  4. Filebeat 설정 파일 수정 및 MQTT 입력 설정
  5. 커스텀 MQTT 모듈 추가 및 Docker 설정
  6. Filebeat 실행 및 데이터 확인
  7. 주의 사항 및 최적화 팁

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에서 데이터 확인

  1. Kibana에 접속하여 "Stack Management" 메뉴로 이동합니다.
  2. "Index Patterns"에서 mqtt-events-*와 같은 인덱스 패턴을 추가합니다.
  3. 인덱스를 생성한 후, Discover 탭에서 MQTT 데이터를 확인하고 분석합니다.

7. 주의 사항 및 최적화 팁

  • SSL 설정 확인: SSL을 사용하는 경우 인증서와 키 파일의 경로를 정확히 설정해야 합니다.
  • Filebeat 버전: 사용하는 Filebeat 버전과 설정 파일이 호환되는지 확인하세요.
  • 로그 모니터링: Filebeat 실행 시 출력되는 로그를 모니터링하여 오류나 경고가 발생하는지 확인합니다.
  • 데이터 필터링: 수집된 데이터가 많아질 경우, tagsfields 필드를 활용해 인덱스 조건을 세분화할 수 있습니다.

이 가이드를 통해 MQTT 데이터를 Filebeat를 사용해 Elasticsearch에 기록하고, Kibana로 시각화할 수 있습니다. Docker 환경에서의 Filebeat 실행, 사용자 정의 모듈을 통한 입력 추가 등 다양한 환경에 맞춘 설정이 가능하므로, 실제 시스템에 맞게 구성해 보시기 바랍니다.

728x90