본문 바로가기
운영체제 (LNX,WIN)

소프트웨어별 네트워크 사용량 분석: Ubuntu 환경에서 활용 방법

by 날으는물고기 2024. 12. 11.

소프트웨어별 네트워크 사용량 분석: Ubuntu 환경에서 활용 방법

Ubuntu에서 소프트웨어별 네트워크 트래픽을 모니터링하는 방법으로 몇 가지 유용한 도구와 명령어가 있습니다. 각 도구는 시스템에서 네트워크 트래픽을 추적하고 분석하는 데 효과적입니다.

1. nethogs

nethogs는 프로세스별로 네트워크 트래픽을 모니터링할 수 있는 도구로, 매우 직관적입니다.

설치 및 사용 방법

sudo apt update
sudo apt install nethogs

사용 방법

sudo nethogs

이 명령을 실행하면 각 프로세스별로 사용하고 있는 네트워크 대역폭을 실시간으로 확인할 수 있습니다.

특정 인터페이스 모니터링

sudo nethogs [인터페이스 이름]

예: sudo nethogs eth0 (인터페이스 이름이 eth0인 네트워크 인터페이스 모니터링)

2. iftop

iftop는 네트워크 인터페이스를 통한 실시간 트래픽을 모니터링하는 도구입니다. 이는 소프트웨어나 프로세스 단위보다는 IP 주소와의 트래픽 흐름을 분석하는 데 유용합니다.

설치 및 사용 방법

sudo apt update
sudo apt install iftop

사용 방법

sudo iftop

특정 인터페이스 모니터링

sudo iftop -i [인터페이스 이름]

예: sudo iftop -i eth0

3. bmon

bmon은 네트워크 인터페이스별로 트래픽을 그래픽적으로 모니터링할 수 있는 도구입니다.

설치 및 사용 방법

sudo apt update
sudo apt install bmon

사용 방법

sudo bmon

4. nload

nload는 네트워크 트래픽을 시각적으로 모니터링할 수 있는 도구입니다.

설치 및 사용 방법

sudo apt update
sudo apt install nload

사용 방법

sudo nload

5. Netdata

Netdata는 매우 강력한 실시간 시스템 모니터링 도구로, CPU, 메모리, 디스크 사용량뿐만 아니라 네트워크 트래픽도 시각적으로 실시간 모니터링할 수 있습니다.

설치 방법

sudo apt update
sudo apt install netdata
sudo systemctl start netdata

웹 브라우저를 통해 실시간 모니터링을 할 수 있습니다.

http://localhost:19999

위 도구들을 사용하면 Ubuntu에서 소프트웨어별, 또는 네트워크 인터페이스별로 트래픽 현황을 모니터링할 수 있습니다. 프로세스별 트래픽 모니터링이 필요하다면 nethogs를 추천드리며, 시스템 전체 트래픽 분석을 원한다면 Netdata 같은 통합 도구를 사용하는 것이 좋습니다.

 

Ubuntu 호스트 서버에서 네트워크 인터페이스별로 트래픽을 수집하고 이를 Home Assistant의 센서로 전달해 모니터링 및 그래프 시각화를 구현하는 방법을 단계별로 설명하겠습니다.

1. 네트워크 트래픽 수집

네트워크 트래픽을 수집하는 방법에는 여러 가지가 있지만, 여기서는 vnstat를 사용하여 네트워크 트래픽을 인터페이스별로 수집합니다.

vnstat 설치 및 설정

sudo apt update
sudo apt install vnstat

vnstat는 설치 후 자동으로 네트워크 트래픽을 기록합니다. 네트워크 인터페이스별로 수집된 트래픽 데이터를 확인할 수 있습니다.

네트워크 트래픽 확인

vnstat -i [인터페이스 이름]

예: vnstat -i eth0

네트워크 트래픽을 JSON 형식으로 출력

vnstat --json -i [인터페이스 이름]

2. Home Assistant에서 센서 설정

Home Assistant에서 사용자 정의 센서를 만들기 위해서는 REST API를 사용하여 외부에서 데이터를 전달할 수 있습니다. 이를 위해 command line sensor를 사용할 수 있습니다.

Home Assistant 설정 파일 (configuration.yaml) 수정

Home Assistant가 트래픽 데이터를 수신할 수 있도록 센서를 정의합니다.

sensor:
  - platform: command_line
    name: Network Traffic eth0
    command: "curl -s http://[우분투 서버 IP]:[포트]/vnstat_eth0"
    scan_interval: 60
    value_template: '{{ value_json.interfaces[0].traffic.total.rx }}'
    unit_of_measurement: 'MB'
  • command: 트래픽 데이터를 수집할 curl 명령어입니다.
  • value_template: JSON 응답에서 특정 값을 추출하는 템플릿입니다.
  • scan_interval: 트래픽 데이터를 갱신할 주기입니다 (60초 단위로 설정됨).

3. Ubuntu에서 Home Assistant로 트래픽 데이터 전송

Ubuntu 서버에서 Home Assistant로 트래픽 데이터를 제공하기 위해 간단한 웹 서버를 구성해야 합니다. 이를 위해 Python Flask와 같은 경량 웹 프레임워크를 사용할 수 있습니다.

Python Flask 설치

sudo apt install python3-pip
pip3 install Flask

Flask 앱 작성

/opt/vnstat_server.py와 같은 경로에 Flask 앱을 작성합니다.

from flask import Flask, jsonify
import os
import json

app = Flask(__name__)

@app.route('/vnstat_<interface>', methods=['GET'])
def vnstat(interface):
    # vnstat 명령어 실행 후 결과를 JSON으로 저장
    result = os.popen(f"vnstat --json -i {interface}").read()
    return jsonify(json.loads(result))

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)
  • /vnstat_<interface>: 네트워크 인터페이스에 맞는 URL로 트래픽 데이터를 제공합니다.
  • app.run(host='0.0.0.0', port=5000): Flask 서버를 모든 IP에서 접근 가능하도록 설정하고, 5000번 포트에서 실행합니다.

Flask 서버 실행

python3 /opt/vnstat_server.py

이제 http://[우분투 서버 IP]:5000/vnstat_eth0에 접속하면 JSON 형식의 트래픽 데이터를 확인할 수 있습니다.

4. Home Assistant에서 트래픽 시각화

Home Assistant에서 수집된 트래픽 데이터를 그래프로 표현하려면 기본 제공되는 "History Graph" 카드 또는 커스텀 카드인 "Mini Graph Card"를 사용할 수 있습니다.

History Graph 카드 예시

configuration.yaml 또는 UI 편집에서 다음과 같이 카드를 추가합니다.

type: history-graph
entities:
  - entity: sensor.network_traffic_eth0
hours_to_show: 24
refresh_interval: 60

이 설정은 sensor.network_traffic_eth0 센서에서 수집된 데이터를 기반으로 24시간 동안의 네트워크 트래픽 변동을 시각화합니다.

5. Flask 앱을 서비스로 실행

Flask 앱을 백그라운드에서 지속적으로 실행하려면 시스템 서비스로 등록할 수 있습니다.

시스템 서비스 등록 파일 생성

/etc/systemd/system/vnstat_service.service 파일을 생성합니다.

[Unit]
Description=vnstat traffic service
After=network.target

[Service]
User=root
ExecStart=/usr/bin/python3 /opt/vnstat_server.py
Restart=always

[Install]
WantedBy=multi-user.target

서비스 시작 및 등록

sudo systemctl daemon-reload
sudo systemctl start vnstat_service
sudo systemctl enable vnstat_service

이제 Flask 웹 서버가 백그라운드에서 지속적으로 실행되며, Home Assistant는 지속적으로 네트워크 트래픽을 모니터링하게 됩니다. 이 과정을 통해 Ubuntu 서버의 네트워크 인터페이스별 트래픽 데이터를 Home Assistant에 전달하고, 이를 시각화하여 네트워크 사용량을 모니터링할 수 있습니다.

 

vnstat에서 rx(수신) 및 tx(송신) 값이 0으로 나오는 문제는 주로 vnstat가 네트워크 인터페이스에 대한 데이터를 아직 수집하지 않았거나, 올바른 네트워크 인터페이스를 사용하지 않아서 발생할 수 있습니다.

1. 올바른 네트워크 인터페이스 확인

vnstat가 올바른 네트워크 인터페이스를 모니터링하고 있는지 확인해야 합니다. 인터페이스 이름이 잘못된 경우 트래픽이 기록되지 않습니다.

네트워크 인터페이스 확인

ip a

이 명령을 통해 시스템에 활성화된 네트워크 인터페이스 목록을 확인할 수 있습니다. vnstat에서 사용하는 인터페이스 이름과 이 목록을 비교해 보세요.

2. vnstat가 인터페이스를 모니터링하는지 확인

vnstat가 네트워크 인터페이스에 대해 모니터링을 수행하고 있는지 확인해야 합니다.

vnstat에 등록된 인터페이스 목록 확인

vnstat --iflist

이 명령을 통해 vnstat가 모니터링하고 있는 인터페이스 목록을 확인할 수 있습니다. 사용하려는 인터페이스가 목록에 없다면, 해당 인터페이스가 vnstat에 의해 모니터링되지 않고 있다는 의미입니다.

3. 수집된 트래픽 데이터 확인

vnstat가 데이터 수집을 시작하면 수집된 트래픽 데이터를 확인할 수 있습니다.

네트워크 트래픽 데이터 확인

vnstat -i [인터페이스 이름]

이 명령어는 해당 인터페이스의 누적 트래픽 정보를 보여줍니다. 만약 여기에서도 트래픽이 0으로만 나오는 경우, 데이터 수집이 시작되지 않은 것입니다.

4. 데이터베이스 초기화

vnstat 데이터베이스에 문제가 있거나 손상된 경우 데이터베이스를 초기화할 수 있습니다. 이 작업은 vnstat가 데이터를 다시 수집하도록 강제합니다.

데이터베이스 초기화

sudo systemctl stop vnstat
sudo vnstat --force --create -i [인터페이스 이름]
sudo systemctl start vnstat

이후 vnstat가 다시 데이터를 수집할 수 있도록 잠시 기다린 후 데이터를 확인합니다.

5. 수집 주기와 데이터 갱신 대기

vnstat는 실시간으로 데이터를 수집하는 대신 주기적으로 수집된 데이터를 업데이트합니다. 기본적으로 vnstat는 5분 간격으로 데이터를 갱신하기 때문에 트래픽 데이터가 바로 반영되지 않을 수 있습니다.

즉시 업데이트

vnstat의 데이터가 0으로 나오는 경우, 시간이 지남에 따라 수집 데이터가 누적되어야 합니다. 몇 분 후 다시 데이터를 확인해 보세요.

vnstat --json -i [인터페이스 이름]

6. 네트워크 트래픽 발생 여부 확인

만약 여전히 트래픽 데이터가 0으로 나오는 경우, 실제로 네트워크 트래픽이 발생하는지 확인해 볼 필요가 있습니다. 예를 들어, 네트워크 트래픽을 유발하는 명령이나 다운로드를 시도해 보고, vnstat 데이터를 다시 확인해 보세요.

wget http://speedtest.tele2.net/1MB.zip

이러한 다운로드 작업을 통해 트래픽이 발생했는지 확인한 후, vnstat 데이터를 다시 확인합니다.

7. 인터페이스 활성화 여부 확인

모니터링하려는 네트워크 인터페이스가 비활성화되어 있으면 트래픽이 기록되지 않습니다. ip a 명령으로 해당 인터페이스가 활성화되어 있는지 확인하세요.

ip a

인터페이스가 비활성화되어 있으면 다음 명령으로 활성화할 수 있습니다.

sudo ip link set [인터페이스 이름] up

이러한 점검 과정을 통해 vnstat가 데이터를 제대로 수집하고 Home Assistant로 전달할 수 있게 할 수 있습니다.

 

vnstat 설정 파일에서 특정 인터페이스만 모니터링하도록 설정하려면, 설정 파일에서 인터페이스를 명시적으로 지정해야 합니다. 이를 위해 /etc/vnstat.conf 파일을 수정해야 합니다.

1. 설정 파일 열기

vnstat의 설정 파일을 수정하기 위해 편집기를 사용하여 /etc/vnstat.conf 파일을 엽니다.

sudo nano /etc/vnstat.conf

2. 인터페이스 설정 수정

파일을 열면 Interface 항목을 찾을 수 있습니다. 기본값은 공백으로 설정되어 있어 모든 인터페이스를 모니터링하게 됩니다. 특정 인터페이스만 모니터링하려면 해당 항목을 수정해야 합니다.

# 기존 설정
# Interface ""

# 수정된 설정 (enp0s3, ppp0, tun+만 모니터링)
Interface "enp0s3"
Interface "ppp0"
Interface "tun+"

이 설정을 적용하면 enp0s3, ppp0, tun+만 모니터링하게 됩니다.

3. 서비스 재시작

설정을 변경한 후에는 vnstat 서비스를 다시 시작하여 변경 사항을 적용해야 합니다.

sudo systemctl restart vnstat

4. 인터페이스 추가 확인

설정이 올바르게 적용되었는지 확인하려면 다음 명령어를 사용하여 vnstat가 모니터링하고 있는 인터페이스 목록을 확인할 수 있습니다.

vnstat --iflist

이 명령어는 현재 vnstat가 모니터링 중인 인터페이스 목록을 출력합니다. 여기서 enp0s3, ppp0, tun+이 출력되면 설정이 제대로 적용된 것입니다. 이 과정을 통해 vnstat가 특정 네트워크 인터페이스만 모니터링하도록 설정할 수 있습니다.

 

만약, vnstat가 제대로 동작하지 않는다면, 다른 방법으로 네트워크 트래픽을 수집하고 Home Assistant와 연동하는 방법입니다. 이번에는 nloadTelegraf를 사용하여 트래픽 데이터를 수집하고, 이를 MQTT를 통해 Home Assistant로 전송하는 방법입니다.

1. Telegraf를 사용하여 네트워크 트래픽 수집

Telegraf는 시스템 모니터링 에이전트로, 다양한 플러그인을 통해 네트워크 트래픽을 포함한 여러 시스템 데이터를 수집할 수 있습니다.

Telegraf 설치

sudo apt update
sudo apt install telegraf

2. Telegraf 설정

Telegraf의 설정 파일을 수정하여 네트워크 트래픽 데이터를 수집하고, 이를 MQTT를 통해 Home Assistant로 전송할 수 있도록 설정합니다.

설정 파일 수정

Telegraf 설정 파일은 /etc/telegraf/telegraf.conf에 있습니다. 이 파일을 편집하여 네트워크 인터페이스에서 데이터를 수집하고 MQTT로 전송하도록 설정합니다.

sudo nano /etc/telegraf/telegraf.conf

다음 내용을 추가하여 inputs.net 플러그인과 outputs.mqtt를 설정합니다.

# 네트워크 인터페이스 모니터링을 위한 입력 플러그인 설정
[[inputs.net]]
  interfaces = ["eth0"] # eth0 대신 실제 모니터링할 네트워크 인터페이스 이름 입력

# MQTT로 데이터를 전송하기 위한 출력 플러그인 설정
[[outputs.mqtt]]
  servers = ["tcp://[MQTT_BROKER_IP]:1883"]
  topic_prefix = "homeassistant/sensor/network_traffic"
  qos = 0
  retain = true
  client_id = "telegraf"
  username = "mqtt_user" # MQTT 사용자 이름
  password = "mqtt_password" # MQTT 비밀번호

여기서 [MQTT_BROKER_IP]는 Home Assistant가 실행되고 있는 MQTT 브로커의 IP 주소입니다.

설정 적용 및 Telegraf 서비스 시작

sudo systemctl restart telegraf
sudo systemctl enable telegraf

이 설정은 Telegraf가 네트워크 트래픽 데이터를 수집하고, 이를 MQTT로 Home Assistant에 전송하도록 합니다.

3. Home Assistant에서 MQTT 센서 설정

Home Assistant가 Telegraf에서 전송된 MQTT 데이터를 센서로 인식할 수 있도록 설정합니다.

configuration.yaml 파일 수정

Home Assistant의 설정 파일인 configuration.yaml에 다음 내용을 추가하여 MQTT 센서를 정의합니다.

sensor:
  - platform: mqtt
    name: "Network Traffic RX"
    state_topic: "homeassistant/sensor/network_traffic/eth0/rx"
    unit_of_measurement: "MB"
    value_template: "{{ value | multiply(0.000001) }}" # 바이트를 MB로 변환

  - platform: mqtt
    name: "Network Traffic TX"
    state_topic: "homeassistant/sensor/network_traffic/eth0/tx"
    unit_of_measurement: "MB"
    value_template: "{{ value | multiply(0.000001) }}" # 바이트를 MB로 변환
  • state_topic: Telegraf에서 전송된 MQTT 메시지를 구독하는 토픽입니다.
  • value_template: 데이터를 바이트 단위에서 메가바이트(MB)로 변환합니다.

4. Home Assistant에서 트래픽 데이터 시각화

Home Assistant의 UI에서 History Graph 또는 Mini Graph Card를 사용하여 수집된 네트워크 트래픽 데이터를 시각화할 수 있습니다.

History Graph 카드 추가 예시

type: history-graph
entities:
  - entity: sensor.network_traffic_rx
  - entity: sensor.network_traffic_tx
hours_to_show: 24
refresh_interval: 60

이 설정을 통해 최근 24시간 동안의 수신(RX) 및 송신(TX) 트래픽 데이터를 그래프로 시각화할 수 있습니다.

5. Home Assistant에서 MQTT 설정 확인

Home Assistant가 MQTT 브로커와 연결되어 있는지 확인하고, 연결되지 않았다면 configuration.yaml 파일에 MQTT 브로커 설정을 추가합니다.

mqtt:
  broker: [MQTT_BROKER_IP]
  username: mqtt_user
  password: mqtt_password

이후 Home Assistant를 재시작하여 설정을 적용합니다.

6. Telegraf 서비스 및 트래픽 모니터링 확인

Telegraf가 제대로 동작하는지 확인하려면 다음 명령을 사용하여 로그를 확인할 수 있습니다.

sudo journalctl -u telegraf -f

네트워크 트래픽 데이터가 수집되고 MQTT로 전송되는지 확인하세요.

 

이 방법을 사용하면 Telegraf가 Ubuntu 서버의 네트워크 인터페이스 트래픽 데이터를 수집하고, MQTT를 통해 Home Assistant로 데이터를 전송하여 트래픽을 모니터링하고 시각화할 수 있습니다. 이 방식은 vnstat 대신 TelegrafMQTT를 사용하여 더 유연하게 데이터를 수집하고 처리할 수 있는 장점이 있습니다.

 

Ubuntu 시스템에 Telegraf를 설치는 InfluxData의 공식 저장소에서 설치할 수 있으며, 다음 두 가지 방법으로 설치가 가능합니다.

InfluxData 저장소에서 설치

  1. 저장소 키와 리포지토리 추가
    curl --silent --location -O https://repos.influxdata.com/influxdata-archive.key
    echo "943666881a1b8d9b849b74caebf02d3465d6beb716510d86a39f6c8e8dac7515 influxdata-archive.key" | sha256sum -c -
    cat influxdata-archive.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/influxdata-archive.gpg > /dev/null
    echo 'deb [signed-by=/etc/apt/trusted.gpg.d/influxdata-archive.gpg] https://repos.influxdata.com/debian stable main' | sudo tee /etc/apt/sources.list.d/influxdata.list
  2. 패키지 목록 업데이트 및 Telegraf 설치
    sudo apt-get update sudo apt-get install telegraf

.deb 파일로 설치

  1. 최신 Telegraf .deb 파일 다운로드
    Telegraf 다운로드 페이지를 통해 최신 .deb 파일을 다운로드합니다.
  2. .deb 파일 설치
    sudo dpkg -i telegraf_1.32.0-1_amd64.deb

커스텀 빌드 옵션

Telegraf를 특정 플러그인만 포함하여 빌드하려면 Go를 설치하고 Telegraf 저장소를 클론하여 커스텀 빌드를 할 수 있습니다.

Go 설치

sudo apt install golang

Telegraf 저장소 클론 및 빌드 도구 생성

git clone https://github.com/influxdata/telegraf.git
cd telegraf
make build_tools

커스텀 빌드 실행

./tools/custom_builder/custom_builder --config /etc/telegraf/telegraf.conf

이렇게 하면 플러그인 설정에 맞춘 Telegraf 바이너리가 생성됩니다.

 

Telegraf의 config.d 폴더 안에 CPU, 디스크, 프로세스, 트래픽 모니터링을 위한 설정을 각각 분리된 파일로 구성하면 각 모니터링 항목을 개별 설정 파일로 저장하고 관리할 수 있습니다. 아래는 각 설정 파일을 config.d 디렉터리 내에 각각 생성하여 저장하는 방법입니다.

CPU 모니터링 설정 (cpu.conf)

[[inputs.cpu]]
  percpu = true            # CPU 코어별 메트릭 수집
  totalcpu = true          # 전체 CPU 메트릭 수집
  collect_cpu_time = false # CPU 시간 수집 비활성화
  report_active = false    # 활성 상태의 CPU 사용량 보고 비활성화
  core_tags = false        # 코어 태그 추가 비활성화

파일 경로: /etc/telegraf/telegraf.d/cpu.conf

디스크 모니터링 설정 (disk.conf)

[[inputs.disk]]
  mount_points = ["/", "/etc", "/home", "/usr", "/var"] # 모니터링할 디스크 경로
  ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"] # 제외할 파일 시스템

[[inputs.diskio]]
  devices = ["sda", "sdb"] # 모니터링할 디스크 장치

파일 경로: /etc/telegraf/telegraf.d/disk.conf

프로세스 모니터링 설정 (process.conf)

[[inputs.processes]]
  fielddrop = ["pid"] # 프로세스 ID 필드를 제외

[[inputs.system]]
[[inputs.kernel]]
[[inputs.mem]]
[[inputs.swap]]

파일 경로: /etc/telegraf/telegraf.d/process.conf

네트워크 트래픽 모니터링 설정 (traffic.conf)

[[inputs.net]]
  interfaces = ["enp0s3", "ppp0", "tun+", "br-*"] # 모니터링할 네트워크 인터페이스

[[inputs.netstat]]

파일 경로: /etc/telegraf/telegraf.d/traffic.conf

기본 설정 파일 (telegraf.conf)

기존의 telegraf.conf는 아래처럼 유지하면서, 추가된 설정 파일을 telegraf.d 디렉토리에서 자동으로 불러옵니다.

[global_tags]
# 글로벌 태그 설정 (필요시)

[agent]
  interval = "10s"
  round_interval = true
  metric_batch_size = 1000
  metric_buffer_limit = 10000
  collection_jitter = "0s"
  flush_interval = "10s"
  flush_jitter = "0s"
  precision = "0s"

# plugins from /etc/telegraf/telegraf.d/ will be loaded automatically

설정 적용 및 Telegraf 재시작

각 설정 파일을 /etc/telegraf/telegraf.d/ 폴더에 저장한 후 Telegraf 서비스를 재시작하여 변경 사항을 적용합니다.

sudo systemctl restart telegraf

이제 Telegraf가 CPU, 디스크, 프로세스, 네트워크 트래픽 데이터를 각각의 설정에 맞춰 수집하게 됩니다. config.d 폴더를 통해 설정 파일을 분리 관리하면 모니터링 항목별로 구성을 보다 유연하게 관리할 수 있습니다.

 

각각의 수집된 정보를 MQTT로 Home Assistant로 전달하려면 각 설정 파일에 outputs.mqtt 항목을 추가해야 합니다. 이때 MQTT 토픽을 각기 다르게 설정하여 Home Assistant에서 데이터를 구분하여 받을 수 있게 할 수 있습니다. 각각의 설정 파일에 MQTT 출력을 추가하는 방법입니다.

CPU 모니터링 설정 (cpu.conf)

[[inputs.cpu]]
  percpu = true
  totalcpu = true
  collect_cpu_time = false
  report_active = false
  core_tags = false

[[outputs.mqtt]]
  servers = ["tcp://[MQTT_BROKER_IP]:1883"]
  topic_prefix = "homeassistant/sensor/cpu"
  qos = 0
  retain = true
  client_id = "telegraf_cpu"
  username = "mqtt_user"
  password = "mqtt_password"

파일 경로: /etc/telegraf/telegraf.d/cpu.conf

디스크 모니터링 설정 (disk.conf)

[[inputs.disk]]
  mount_points = ["/", "/etc", "/home", "/usr", "/var"]
  ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"]

[[inputs.diskio]]
  devices = ["sda", "sdb"]

[[outputs.mqtt]]
  servers = ["tcp://[MQTT_BROKER_IP]:1883"]
  topic_prefix = "homeassistant/sensor/disk"
  qos = 0
  retain = true
  client_id = "telegraf_disk"
  username = "mqtt_user"
  password = "mqtt_password"

파일 경로: /etc/telegraf/telegraf.d/disk.conf

프로세스 모니터링 설정 (process.conf)

[[inputs.processes]]
  fielddrop = ["pid"]

[[inputs.system]]
[[inputs.kernel]]
[[inputs.mem]]
[[inputs.swap]]

[[outputs.mqtt]]
  servers = ["tcp://[MQTT_BROKER_IP]:1883"]
  topic_prefix = "homeassistant/sensor/process"
  qos = 0
  retain = true
  client_id = "telegraf_process"
  username = "mqtt_user"
  password = "mqtt_password"

파일 경로: /etc/telegraf/telegraf.d/process.conf

네트워크 트래픽 모니터링 설정 (traffic.conf)

[[inputs.net]]
  interfaces = ["enp0s3", "ppp0", "tun+", "br-*"]

[[inputs.netstat]]

[[outputs.mqtt]]
  servers = ["tcp://[MQTT_BROKER_IP]:1883"]
  topic_prefix = "homeassistant/sensor/traffic"
  qos = 0
  retain = true
  client_id = "telegraf_traffic"
  username = "mqtt_user"
  password = "mqtt_password"

파일 경로: /etc/telegraf/telegraf.d/traffic.conf

Home Assistant에서 센서 설정

Home Assistant에서 각각의 센서를 설정하려면, configuration.yaml 파일에 각각의 MQTT 센서를 정의해야 합니다.

sensor:
  - platform: mqtt
    name: "CPU Usage"
    state_topic: "homeassistant/sensor/cpu/cpu-total"
    unit_of_measurement: "%"

  - platform: mqtt
    name: "Disk Usage"
    state_topic: "homeassistant/sensor/disk/sda"
    unit_of_measurement: "GB"

  - platform: mqtt
    name: "Processes"
    state_topic: "homeassistant/sensor/process/process_count"
    unit_of_measurement: "Count"

  - platform: mqtt
    name: "Network Traffic"
    state_topic: "homeassistant/sensor/traffic/eth0/rx"
    unit_of_measurement: "MB"

이 설정을 통해 각각의 cpu, disk, process, traffic 데이터를 Home Assistant에서 구분하여 받아 처리할 수 있습니다.

Telegraf 재시작

설정을 적용한 후, Telegraf 서비스를 재시작하여 설정이 반영되도록 합니다.

sudo systemctl restart telegraf

이 설정을 통해 Telegraf에서 수집된 각각의 데이터를 MQTT를 통해 Home Assistant로 전송할 수 있습니다. 각 설정 파일에서 outputs.mqtt 섹션을 추가하여 토픽을 다르게 설정하면, Home Assistant에서 데이터를 쉽게 구분하고 모니터링할 수 있습니다.

 

Telegraf의 설정 파일에서 outputs 섹션을 지정하지 않으면, 기본적으로 수집된 데이터는 어디에도 전송되지 않습니다. Telegraf는 데이터를 수집할 수 있는 다양한 입력(inputs) 플러그인과, 데이터를 저장하거나 전송할 수 있는 출력(outputs) 플러그인을 사용합니다. outputs 섹션이 없으면, Telegraf는 데이터를 수집만 하고 출력하거나 저장하는 곳이 없기 때문에 데이터를 버리게 됩니다.

 

따라서 Telegraf를 제대로 사용하려면 적어도 하나 이상의 outputs 플러그인을 설정해야 데이터를 InfluxDB, MQTT, 파일 등 원하는 곳에 전송할 수 있습니다.

주요 outputs 플러그인 예시

Telegraf는 여러 가지 출력 플러그인을 지원합니다. 자주 사용하는 출력 플러그인은 다음과 같습니다.

  1. InfluxDB (기본)
    • Telegraf는 InfluxDB 생태계의 일부로 개발되었으므로, InfluxDB가 가장 많이 사용되는 기본 출력 대상입니다.
    • InfluxDB에 데이터를 기록하려면 다음과 같이 outputs.influxdb 플러그인을 설정합니다.
    [[outputs.influxdb]]
      urls = ["http://localhost:8086"]
      database = "telegraf"
  2. MQTT
    • Telegraf 데이터를 MQTT로 전송하려면 outputs.mqtt 플러그인을 설정합니다.
    [[outputs.mqtt]]
      servers = ["tcp://localhost:1883"]
      topic_prefix = "homeassistant/sensor"
      qos = 0
  3. 파일 출력
    • 데이터를 파일에 기록하려면 outputs.file 플러그인을 사용할 수 있습니다.
    [[outputs.file]]
      files = ["stdout", "/var/log/telegraf/metrics.out"]
      data_format = "influx"

outputs 섹션이 없다면, Telegraf는 데이터를 수집하더라도 어디에도 저장하지 않습니다. 기본적으로는 데이터가 저장되거나 기록되지 않으므로, 데이터를 저장하거나 전송하고자 한다면 반드시 하나 이상의 출력 플러그인을 설정해야 합니다.

 

InfluxDB로 데이터를 전송할 때 InfluxDB에 인증이 필요하다면, Telegrafoutputs.influxdb 설정에 인증 정보를 추가해야 합니다. 특히, InfluxDB가 사용자 이름과 비밀번호로 보호되어 있는 경우 또는 InfluxDB 2.x 버전에서 토큰 기반 인증을 사용하는 경우 인증 정보를 포함해야 합니다.

InfluxDB 1.x 인증 설정 예시

InfluxDB 1.x 버전에서는 사용자 이름과 비밀번호를 사용한 인증이 가능합니다. Telegraf 설정에서 usernamepassword를 추가해 줍니다.

[[outputs.influxdb]]
  urls = ["http://localhost:8086"] # InfluxDB의 주소
  database = "telegraf"            # 저장할 데이터베이스 이름
  username = "your_username"       # InfluxDB 사용자 이름
  password = "your_password"       # InfluxDB 비밀번호
  retention_policy = ""            # 선택사항: 보존 정책
  write_consistency = "any"        # 선택사항: 쓰기 일관성
  timeout = "5s"                   # 선택사항: 연결 시간 초과 설정
  • urls: InfluxDB 서버의 URL (포트 기본값은 8086)
  • username: InfluxDB에서 설정된 사용자 이름
  • password: 해당 사용자의 비밀번호
  • database: 데이터를 저장할 데이터베이스 이름

InfluxDB 2.x 토큰 기반 인증 설정 예시

InfluxDB 2.x에서는 인증이 API 토큰을 기반으로 이루어집니다. Telegraf 설정에서 token을 사용해 인증을 설정해야 합니다.

[[outputs.influxdb_v2]]
  urls = ["http://localhost:8086"] # InfluxDB의 주소
  token = "your_token"             # InfluxDB 2.x API 토큰
  organization = "your_org"        # InfluxDB에서 사용하는 조직 이름
  bucket = "your_bucket"           # 데이터를 저장할 버킷 이름
  timeout = "5s"                   # 선택사항: 연결 시간 초과 설정
  • urls: InfluxDB 2.x 서버의 URL
  • token: InfluxDB 2.x에서 발급받은 API 토큰
  • organization: InfluxDB에서 사용하는 조직(Organization) 이름
  • bucket: 데이터를 저장할 버킷 이름

 

InfluxDB에서 인증 설정을 확인하고, 이에 맞게 Telegraf의 출력 설정을 맞춰 주시면 됩니다. InfluxDB에 수집된 정보를 효과적으로 시각화하고, 임계치 초과 등의 상황에서 알람을 운영하기 위해서는 시각화 도구모니터링 및 알림 시스템을 결합하는 것이 중요합니다. 일반적으로 GrafanaKapacitor를 사용하여 InfluxDB 데이터를 시각화하고, 알람을 설정하는 방식이 많이 사용됩니다.

Grafana를 사용한 시각화

Grafana는 InfluxDB와 쉽게 통합되는 강력한 시각화 도구입니다. InfluxDB에 저장된 데이터를 효과적으로 조회하고, 대시보드를 통해 실시간으로 모니터링할 수 있습니다.

Grafana 설치 및 InfluxDB 연동

    1. Grafana 설치
      sudo apt-get install -y software-properties-common
      sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
      sudo apt-get update
      sudo apt-get install grafana
    2. Grafana 실행 및 브라우저에서 접속
      sudo systemctl start grafana-server
      sudo systemctl enable grafana-server
    3. 브라우저에서

http://localhost:3000

    으로 접속하여 Grafana에 접근할 수 있습니다.
  1. InfluxDB 데이터 소스 추가
    • Grafana에 로그인한 후, 왼쪽 사이드바에서 "Configuration > Data Sources"로 이동하여 InfluxDB를 데이터 소스로 추가합니다.
    • URL: http://localhost:8086
    • InfluxDB 1.x에서는 사용자 이름과 비밀번호, 데이터베이스 이름을 입력하고, InfluxDB 2.x에서는 API 토큰버킷조직 정보를 입력합니다.
  2. 대시보드 생성 및 모니터링
    • 데이터를 시각화하기 위해 "Create > Dashboard"로 이동하여 그래프, 게이지, 테이블 등 다양한 시각화 요소를 추가합니다.
    • CPU, 메모리, 디스크, 네트워크 트래픽 등 다양한 성능 지표를 한눈에 파악할 수 있도록 대시보드를 구성합니다.

Grafana에서 임계치 경고 설정

Grafana는 특정 메트릭이 설정한 임계치를 초과했을 때 경고를 생성할 수 있습니다. 알림을 설정하려면 다음 단계를 따르세요.

  1. 알림 채널 설정
    • Grafana에서 알림을 받을 방법(Slack, 이메일, Telegram 등)을 설정하려면, "Alerting > Notification Channels"에서 새로운 알림 채널을 추가합니다.
  2. 경고 조건 설정
    • 대시보드의 각 그래프에 대해 "Alert" 탭으로 이동하여 알림을 설정할 수 있습니다.
    • 예를 들어 CPU 사용률이 80%를 초과하면 알림을 보내도록 설정할 수 있습니다.
      • "Alert" 탭에서 경고를 설정하고, 조건을 지정합니다. 예를 들어, CPU 사용률이 80% 이상이면 경고를 발생시키도록 설정합니다.
      • 경고 발생 시, 알림 채널을 통해 통보받도록 설정합니다.

Kapacitor를 사용한 임계치 경고 및 자동화

Kapacitor는 InfluxDB와 연동되어 데이터를 실시간으로 처리하고, 임계치에 따른 경고를 자동화할 수 있는 도구입니다. Kapacitor는 InfluxDB에서 데이터를 받아 조건에 맞는 트리거를 발생시킬 수 있으며, 이를 통해 알림을 보낼 수 있습니다.

Kapacitor 설치 및 설정

  1. Kapacitor 설치
    sudo apt-get update
    sudo apt-get install kapacitor
  2. Kapacitor 설정
    /etc/kapacitor/kapacitor.conf 파일을 열어 InfluxDB와의 연결을 설정합니다.
    [[influxdb]]
      enabled = true
      name = "localhost"
      default = true
      urls = ["http://localhost:8086"]
      username = "influxdb_user"
      password = "influxdb_password"
      retention-policy = ""
  3. Kapacitor 태스크 작성
    Kapacitor는 TICKscript라는 언어를 사용하여 알림을 설정합니다. 예를 들어, CPU 사용률이 80%를 초과할 때 경고를 보내도록 스크립트를 작성할 수 있습니다.
    var cpu = stream
        |from()
            .measurement('cpu')
        |alert()
            .crit(lambda: "usage_idle" < 20)
            .message('Critical: CPU 사용률이 80% 이상입니다.')
            .log('/tmp/alerts.log')
            .slack()
  4. 태스크 활성화
    작성한 태스크를 활성화하려면 다음 명령을 사용합니다.
    kapacitor define cpu_alert -type stream -tick /path/to/cpu_alert.tick -dbrp telegraf.autogen
    kapacitor enable cpu_alert

Kapacitor의 주요 기능

  • 알림: 특정 조건(예: CPU 사용량 초과, 메모리 부족 등)이 발생했을 때 Slack, 이메일, Telegram 등으로 알림을 보냅니다.
  • 자동화: 임계치 초과 시 자동으로 작업을 수행하도록 스크립트를 작성할 수 있습니다. 예를 들어, 스케일링을 자동으로 수행하거나 특정 서비스를 재시작하는 작업을 트리거할 수 있습니다.

효과적인 운영을 위한 통합 전략

  1. 대시보드와 경고 통합
    • Grafana에서 실시간으로 시스템 상태를 시각화하면서 Kapacitor와 연동하여 임계치 경고를 관리하면 실시간 모니터링과 경고 시스템을 통합할 수 있습니다.
    • Grafana의 알림 기능과 Kapacitor의 알림 기능을 함께 활용하여 경고와 자동화 작업을 더 정교하게 관리할 수 있습니다.
  2. 알림 이력 관리
    • 알림 이력은 Slack 또는 이메일을 통해 기록을 남기거나, Kapacitor에서 로그 파일로 남길 수 있습니다. 이를 통해 특정 시점의 경고 상황을 추적하고, 시스템의 상태 변화를 장기적으로 분석할 수 있습니다.
  3. 임계치 조정 및 최적화
    • 임계치 경고를 너무 낮게 설정하면 과도한 알림이 발생하고, 너무 높게 설정하면 중요한 문제를 놓칠 수 있으므로, 시스템의 성능 데이터에 기반하여 적절한 임계치를 설정하는 것이 중요합니다.
    • 초과 경고 외에도 변화율(예: CPU 사용률이 10초 동안 급격히 증가)과 같은 동적 조건을 고려하여 경고를 설정하는 것이 효과적입니다.

이 두 가지 도구를 함께 사용하여 효과적인 모니터링과 알림 체계를 구축할 수 있습니다.

728x90

댓글