본문 바로가기

서비스 최적화 위한 리소스 모니터링 꿀팁: 실시간 대시보드 만들기

systemctl 자체는 서비스의 상태를 확인하는 데 사용되지만, 구체적인 CPU 및 메모리 사용량을 확인하기 위한 기능은 포함되어 있지 않습니다. 이를 확인하려면 systemctl로 실행 중인 서비스의 PID(Process ID)를 확인한 후, 해당 프로세스의 상태를 top, ps, 또는 systemd-cgtop 등을 이용해 확인할 수 있습니다.

1. systemctl로 PID 확인

systemctl을 통해 구동 중인 서비스의 PID를 확인해야 합니다.

systemctl show <서비스명> --property=MainPID

예를 들어, nginx 서비스의 PID를 확인하려면 다음과 같이 입력합니다.

systemctl show nginx --property=MainPID

2. top 명령어를 사용하여 CPU/메모리 사용량 확인

PID를 확인한 후, top 명령어를 이용해 특정 프로세스의 CPU 및 메모리 사용량을 실시간으로 모니터링할 수 있습니다.

top -p <PID>

예를 들어, PID가 1234인 프로세스의 상태를 확인하려면 다음과 같이 입력합니다.

top -p 1234

3. ps 명령어를 사용하여 CPU/메모리 사용량 확인

특정 PID에 대한 메모리 및 CPU 사용량을 한 번에 확인하려면 ps 명령어를 사용할 수 있습니다.

ps -p <PID> -o %cpu,%mem,cmd

이 명령어는 해당 PID의 CPU 사용률(%CPU), 메모리 사용률(%MEM), 명령어(CMD)를 출력합니다.

4. systemd-cgtop 명령어로 서비스별 리소스 사용량 확인

systemd-cgtop은 systemd에서 관리되는 서비스의 CPU, 메모리, IO 사용량을 보여줍니다.

systemd-cgtop

여기서 서비스별로 CPU, 메모리 사용량을 확인할 수 있습니다. systemd-cgtop은 실시간으로 업데이트되며, GUI를 통한 간단한 모니터링 도구로 유용합니다.

5. systemctl을 통한 리소스 사용량 확인 (CPUAccounting, MemoryAccounting)

추가로, systemd의 리소스 제어 기능을 활성화하면 각 서비스가 사용하는 CPU 및 메모리 사용량을 systemd로부터 직접 확인할 수도 있습니다. CPUAccountingMemoryAccounting 옵션을 활성화한 후 다음과 같은 명령어로 확인 가능합니다.

systemctl show <서비스명> -p CPUUsageNS
systemctl show <서비스명> -p MemoryCurrent

이 명령어는 해당 서비스의 누적 CPU 시간 및 현재 메모리 사용량을 나노초 단위로 출력합니다.

 

서비스의 CPU 및 메모리 사용량을 모니터링하고 가시화하는 방법은 다양한 도구와 시스템을 활용할 수 있습니다. 서버의 상태를 실시간으로 수집하고, 이를 한눈에 파악할 수 있는 대시보드를 제공하는 것은 시스템 안정성과 성능을 유지하는 데 매우 중요합니다.

1. Telegraf + InfluxDB + Grafana

이 조합은 가장 널리 사용되는 시스템 모니터링 스택 중 하나로, 수집된 데이터를 가시화하는 데 매우 효과적입니다.

1-1. Telegraf 설치 및 설정

Telegraf는 다양한 입력 플러그인을 통해 시스템 메트릭을 수집하고, 이를 InfluxDB와 같은 데이터베이스로 전송합니다.

  1. Telegraf 설치
    sudo apt-get update
    sudo apt-get install telegraf
  2. Telegraf 설정 파일 수정 (/etc/telegraf/telegraf.conf)
    시스템 메트릭을 수집하는 기본 플러그인들을 활성화할 수 있습니다.여기에서 CPU, 메모리 사용량을 수집하는 플러그인을 활성화할 수 있습니다.
    [[inputs.cpu]]
    percpu = true
    totalcpu = true
    collect_cpu_time = false
    report_active = true
    
    [[inputs.mem]]

1-2. InfluxDB 설치 및 설정

수집된 데이터를 저장하는 시계열 데이터베이스로 InfluxDB를 사용합니다.

  1. InfluxDB 설치
    sudo apt-get update
    sudo apt-get install influxdb
    sudo systemctl start influxdb
  2. InfluxDB에 데이터베이스 생성
    Telegraf가 수집한 데이터를 저장할 데이터베이스를 생성합니다.
    influx
    CREATE DATABASE telegraf

1-3. Grafana를 이용한 데이터 시각화

Grafana는 InfluxDB에 저장된 데이터를 대시보드 형태로 시각화하는 도구입니다.

  1. Grafana 설치
    sudo apt-get update
    sudo apt-get install grafana
    sudo systemctl start grafana-server
  2. InfluxDB 데이터 소스 추가
    Grafana 대시보드에서 InfluxDB를 데이터 소스로 추가하고, CPU 및 메모리 사용량을 시각화할 수 있는 그래프를 생성합니다.
    • Add data source에서 InfluxDB를 선택하고, URL과 데이터베이스 정보를 입력합니다.
  3. 대시보드 생성
    Grafana에서 다양한 차트를 만들어 CPU, 메모리, 네트워크 사용량 등 여러 시스템 메트릭을 실시간으로 시각화할 수 있습니다.

2. Prometheus + Node Exporter + Grafana

Prometheus는 시계열 데이터를 수집하고 분석하는 데 매우 유용한 오픈소스 도구입니다. Prometheus와 Node Exporter를 사용해 서버의 리소스 메트릭을 수집하고, 이를 Grafana를 통해 시각화할 수 있습니다.

2-1. Node Exporter 설치

Node Exporter는 Prometheus에 서버 메트릭을 제공하는 역할을 합니다.

  1. Node Exporter 설치
    이 명령어는 Node Exporter를 설치하고 실행합니다. Node Exporter는 기본적으로 9100 포트에서 메트릭을 노출합니다.
    wget https://github.com/prometheus/node_exporter/releases/download/v1.2.2/node_exporter-1.2.2.linux-amd64.tar.gz
    tar xvfz node_exporter-1.2.2.linux-amd64.tar.gz
    cd node_exporter-1.2.2.linux-amd64
    ./node_exporter

2-2. Prometheus 설치 및 설정

Prometheus는 Node Exporter에서 데이터를 수집하고 이를 저장합니다.

  1. Prometheus 설치
    wget https://github.com/prometheus/prometheus/releases/download/v2.30.3/prometheus-2.30.3.linux-amd64.tar.gz
    tar xvfz prometheus-2.30.3.linux-amd64.tar.gz
    cd prometheus-2.30.3.linux-amd64
    ./prometheus --config.file=prometheus.yml
  2. Prometheus 설정 파일 수정 (prometheus.yml)
    Node Exporter에서 데이터를 수집하기 위해 Prometheus 설정 파일을 수정합니다.
    scrape_configs:
      - job_name: 'node_exporter'
        static_configs:
          - targets: ['localhost:9100']

2-3. Grafana에서 시각화

Grafana에서 Prometheus를 데이터 소스로 추가하고, Node Exporter에서 수집한 메트릭을 기반으로 CPU, 메모리 사용량 등을 시각화할 수 있습니다.

3. Collectd + Graphite + Grafana

Collectd는 시스템 메트릭을 수집하고 Graphite와 같은 백엔드로 전송하는 데 사용할 수 있습니다. Graphite는 시계열 데이터를 저장하고 분석하는 데 특화된 도구이며, 이를 Grafana에서 시각화할 수 있습니다.

3-1. Collectd 설치 및 설정

  1. Collectd 설치
    sudo apt-get install collectd
  2. Collectd 설정 파일 수정 (/etc/collectd/collectd.conf)
    Collectd에서 CPU와 메모리 사용량을 수집하도록 설정합니다.
    LoadPlugin cpu
    LoadPlugin memory

3-2. Graphite 설치 및 설정

Graphite는 시계열 데이터를 수집하고 저장하는 도구입니다.

  1. Graphite 설치
    sudo apt-get install graphite-web graphite-carbon
  2. Collectd와 Graphite 연동
    Collectd에서 수집한 데이터를 Graphite에 저장할 수 있도록 설정 파일을 수정합니다.

3-3. Grafana에서 시각화

Grafana에서 Graphite를 데이터 소스로 추가하고 Collectd에서 수집한 메트릭을 시각화할 수 있습니다.

4. Elastic Stack (ELK) + Metricbeat

Elastic Stack은 메트릭 수집과 분석을 위한 매우 강력한 도구입니다. Metricbeat를 사용하여 시스템 리소스 사용량을 수집하고, 이를 Elasticsearch에 저장한 후 Kibana에서 시각화할 수 있습니다.

4-1. Metricbeat 설치 및 설정

  1. Metricbeat 설치
    sudo apt-get install metricbeat
  2. Metricbeat 설정 파일 수정 (/etc/metricbeat/metricbeat.yml)
    output.elasticsearch:
      hosts: ["http://localhost:9200"]
    
    setup.kibana:
      host: "http://localhost:5601"

4-2. Kibana에서 시각화

Kibana를 통해 수집된 시스템 메트릭을 다양한 시각화 형태로 대시보드에 구성할 수 있습니다.

 

이 방법들은 모두 서버의 리소스 사용량을 실시간으로 수집하고, 대시보드를 통해 쉽게 모니터링할 수 있는 강력한 툴들이며, 각자의 환경에 맞는 도구를 선택해 사용하면 됩니다.

Grafana 서비스 시작

sudo systemctl start grafana-server
sudo systemctl enable grafana-server

Grafana에서 InfluxDB 데이터 소스 추가

  1. 브라우저에서 http://localhost:3000으로 접속하여 Grafana에 로그인합니다. (기본 계정: admin / 비밀번호: admin)
  2. Configuration > Data Sources에서 Add data source를 클릭합니다.
  3. InfluxDB를 선택하고 다음과 같이 설정합니다:
    • URL: http://localhost:8086
    • Database: telegraf
    • User/Password: InfluxDB에 설정한 사용자명과 비밀번호 (기본값으로 공란)

Grafana 대시보드 생성

데이터 소스를 추가한 후 대시보드를 생성하여 실시간으로 수집된 CPU 및 메모리 사용량을 모니터링할 수 있습니다.

  1. Dashboard > New Dashboard > Add new panel을 선택합니다.
  2. Query에서 FROM 필드를 telegraf.autogen.cpu로 선택하여 CPU 데이터를 가져옵니다.
  3. 측정하고 싶은 항목을 선택하여 그래프를 설정합니다. 예를 들어 usage_user, usage_system 등의 필드를 선택할 수 있습니다.

이와 같은 방식으로 메모리, 네트워크, 디스크 사용량 등을 대시보드에 추가하여 전체적인 서버 상태를 한눈에 파악할 수 있습니다.

예시: CPU 사용량 시각화

  • Metric: telegraf.autogen.cpu
  • Field: usage_user, usage_system
  • Group by: time($__interval)

예시: 메모리 사용량 시각화

  • Metric: telegraf.autogen.mem
  • Field: used_percent
  • Group by: time($__interval)

 

이로써 Telegraf + InfluxDB + Grafana 스택을 이용하여 서버의 CPU 및 메모리 사용량을 실시간으로 모니터링하고, 가시화하는 대시보드를 구성할 수 있습니다.

728x90

댓글