sar를 활용해서 시스템 모니터링을 해보자!

1. sar(Systecm Activity Reporter 이하 sar) 란?

  • sar 는 리눅스에서 유용하게 쓰는 시스템 모니터링 프로그램입니다.
  • 모니터링 대상이 상당히 넓은 편이며 기본값은 CPU 활동에 대한 통계를 출력합니다.
  • 각종 활동에 대한 통계를 다른프로그램을 이용하여 파일로 저장하고 통계치를 리포팅 하는 기능을 제공합니다.
  • sadc에서 생성한 daily activity 파일을 읽어서 보고서를 작성하기도 하고 시스템의 활동 상황을 수집 할 수도 있습니다.

2. sar 명령어로 모니터링 가능한 항목

  • I/O 전송량
  • 페이징
  • 프로세스 생성 숫자
  • 블락 디바이스 활동
  • 인터럽트
  • 네트워크 통계
  • run 큐 및 시스템 부하 평균
  • 메모리와 스왑 공간 활용 통계
  • 메모리 통계
  • CPU 이용도
  • 특정 프로세스에 대한 CPU 이용도
  • inode, 파일, 기타 커널 테이블에 대한 상태
  • 시스템 스위칭 활동(context switch)
  • 스와핑 통계
  • 특정 프로세스 통계
  • 특정 프로세스의 자식 프로세스 통계
  • TTY 디바이스 활동

3. 설치

sar 툴은 sysstat 패키지를 설치하면 포함되어 있습니다

sysstat 이란?

리눅스 성능 측정 도구 패키지입니다.
해당 패키지에는 아래와 같은 성능 분석 툴을 제공합니다. sar을 사용하기 위해선 sysstat 설치해야 합니다.

sysstat 패키지는 다음을 포함하고 있습니다.

  • sar : cpu, memory, network, diks io 등 지표를 수치화하며 파일로 저장.
  • iostat : disk io에 지표 측정
  • mpstat : cpu 지표 측정
  • tapestat : tape 드라이버의 IO 지표 측정
  • pidstat : 특정 프로세스의 CPU 및 스레드 정보 지표 측정
  • cifsiostat : cifs 파일 시스템 지표 측정

설치 명령어

일반적으로 패키지 매니저를 통해서 쉽게 설치가 가능합니다.

$ sudo apt-get install sysstat

4. 실행

여러가지 sar를 활용한 명령어가 있지만, 간단하게 실시간으로 메모리와 CPU 사용을 확인하는 명령어를 작성해봅니다.

# -u는 CPU 사용율을 확인 합니다.
# 공통적으로 1의 뜻은 1초마다 갱신을 3은 3회를 의미 합니다. 
$ sar -u 1 3
Linux 5.10.63-v8+ (raspberrypi)     2021년 12월 10일     _aarch64_    (4 CPU)

11시 09분 25초     CPU     %user     %nice   %system   %iowait    %steal     %idle
11시 09분 26초     all      2.27      0.00      1.01      0.00      0.00     96.73
11시 09분 27초     all      1.75      0.00      0.75      0.00      0.00     97.49
11시 09분 28초     all      2.24      0.00      0.75      0.00      0.00     97.01
평균값:            all      2.09      0.00      0.83      0.00      0.00     97.08

# -q는 Load Average를 확인 합니다. 실행 큐에 쌓여 있는 프로세스 수, 시스템 상의 프로세스 사이즈, Load Average 등을 참조 할 수 있습니다.
$ sar -q 1 3
Linux 5.10.63-v8+ (raspberrypi)     2021년 12월 10일     _aarch64_    (4 CPU)

11시 10분 07초   runq-sz  plist-sz   ldavg-1   ldavg-5  ldavg-15   blocked
11시 10분 08초         0       697      0.00      0.00      0.00         0
11시 10분 09초         0       697      0.00      0.00      0.00         0
11시 10분 10초         0       697      0.00      0.00      0.00         0
평균값:                0       697      0.00      0.00      0.00         0

# -r은 메모리 사용 현황 확인
$ sar -r 1 3
Linux 5.10.63-v8+ (raspberrypi)     2021년 12월 10일     _aarch64_    (4 CPU)

11시 12분 54초 kbmemfree   kbavail kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
11시 12분 55초   1494172   4980124   2479504     31.72    452392   2869548   8294984    104.75   1814580   3887664         8
11시 12분 56초   1493668   4979620   2479484     31.72    452392   2870064   8295500    104.75   1814580   3887660         8
11시 12분 57초   1493668   4979620   2479480     31.72    452392   2870060   8295496    104.75   1814580   3887660         8
평균값:          1493836   4979788   2479489     31.72    452392   2869891   8295327    104.75   1814580   3887661         8

# -W은 스왑 발생상황 확인
$ sar -W 1 3
Linux 5.10.63-v8+ (raspberrypi)     2021년 12월 10일     _aarch64_    (4 CPU)

11시 13분 06초  pswpin/s pswpout/s
11시 13분 07초      0.00      0.00
11시 13분 08초      0.00      0.00
11시 13분 09초      0.00      0.00
평균값:             0.00      0.00

더 많은 옵션은 아래 참고자료를 확인해주세요. :)

참고 자료

Posted by lahuman

댓글을 달아 주세요

raspberry pi 에 Redmine 설치하기

redmine은 오픈소스 이슈트래커로 꽤 유명한 툴입니다

오늘은 reapberry pi 에 redmine을 설치해보고, redmineup이라는 무료 플러그인을 설치해보려고 합니다.
설치는 docker-compose를 이용해서 쉽게 진행할 예정입니다.

Put Redmine docker container in Raspberry Pi 4 Model B 2GB에서 제공되는 명령어를 간략하게 작성하려고 합니다.

docker-compose 설치

sudo apt-get update #업데이트
sudo apt-get -y upgrade #업그레이드
curl -sSL https://get.docker.com | sh #install docker
sudo apt-get -y install python3-dev #pip 설치
sudo apt-get -y install python3-pip #pip 설치
sudo pip3 install --upgrade setuptools #Because pip3 may get an error
sudo pip3 install wheel #Because pip3 may get an error
sudo pip3 install docker-compose # docker-install compose

docker-compose 설정

sudo vi .bashrc
# pip3 path 추가
export PATH="$PATH:~/.local/bin

source .bashrc # 변경 내역 반영
echo $PATH # 변경내역 확인
sudo usermod -a -G docker pi # docker 명령어를 pi  계정으로 사용 처리 
sudo reboot # 재기동

redmine docker-compose.yml 파일 생성

mkdir /home/pi/docker/redmine # 작업 디렉토리 생성
sudo chown root:users /home/pi/docker/redmine # 사용자 지정
sudo chmod 775 /home/pi/docker/redmine # 접근 설정
cd /home/pi/docker/redmine # 작업 디렉토리로 이동
sudo touch docker-compose.yml # 파일 생성
sudo vi docker-compose.yml # 파일 내역 작성 (아래 참고)
docker-compose -f docker-compose.yml up -d # 실행

docker-compose.yml

비밀번호나, 디렉토리 위치는 적절하게 변경하여 사용하셔요.

version: '3.8'
services:
  redmine:
    image: arm32v7/redmine
    container_name: redmine
    ports:
      - 3000:3000
    volumes:
      - ./files:/usr/src/redmine/files
      - ./log:/usr/src/redmine/log
      - ./plugins:/usr/src/redmine/plugins
      - ./public/themes:/usr/src/redmine/public/themes
    environment:
      REDMINE_DB_POSTGRES: redmine-db
      REDMINE_DB_DATABASE: redmine
      REDMINE_DB_USERNAME: redmine
      REDMINE_DB_PASSWORD: redmine
      REDMINE_DB_ENCODING: utf8
    depends_on:
      - redmine-db
    restart: always

  redmine-db:
    image: postgres
    restart: always
    environment:
      POSTGRES_DB: redmine-db
      POSTGRES_USER: redmine
      POSTGRES_PASSWORD: redmine
    volumes:
      - ./dbdata/:/var/lib/postgresql/data

postgresql 데이터 베이스 생성

처음 실행을 하면 아마 redmine에서 테이블이 없다는 오류가 발생합니다.

오류 내용중 발췌

ActiveRecord::NoDatabaseError: FATAL: database "redmine" does not exist

데이터 베이스 create 처리

docker logs redmine # 위의 오류가 발생하는지 확인
docker container exec -it redmine-db /bin/bash # redmine db container접속 
createdb redmine --encoding=utf8 -O redmine -U redmine # 데이터 베이스 생성
exit #redmine db container 나가기
docker rm redmine # 기존 redmine container 삭제 
docker-compose -f docker-compose.yml up -d # 재실행

이후 redmine이 정상적으로 기동 되는 것을 확인 할 수 있습니다.

redmineup 플러그인 설치

redmineup은 칸반보드를 제공하는 플러그인입니다.

먼저 무료 버젼을 다운로드 받습니다.

redmineup 사이트에서 다운로드를 누르면 이메일 정보를 입력하라고 합니다.

입력을 완료 하면 메일 첨부파일로 전달하여 줍니다.

첨부된 파일을 다운로드 받고 ./plugins:/usr/src/redmine/plugins에서 압축을 풉니다.

cp redmine_agile-x_x_x-pro.zip plugins/
cd plugins
unzip redmine_agile-x_x_x-pro.zip

이후 docker container 안에서 플러그인을 설치해줍니다.

# container 목록 확인
docker ps
...
225fd2755f66   arm32v7/redmine                 "/docker-entrypoint.…"   23 hours ago   Up 20 hours   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp             redmine
...

# container bash shell 접근
docker exec -it redmine /bin/bash

플러그인 설치 명령어

cd /var/www/redmine
bundle install --without development test --no-deployment

테이블 마이그레이션

bundle exec rake redmine:plugins NAME=redmine_agile RAILS_ENV=production

redmine 재시작

touch tmp/restart.txt

반영된 화면

칸반 보드로 시각화되고 각각 단계는 열로 표시하여 작업진행이 한눈에 보입니다.

칸반보드

이슈들은 "수영 레인(SwimLane)"으로 불리는 행으로 나누고 우선순위가 낮은 이슈들을 아래에 배치합니다. 칸반의 핵심은 Work-In-Process(WIP)가 동시에 개발이 진행 될 수 있는 아이템의 수를 제한하는 것이며, 작업자는 WIP에 여유가 있을 때 만 작업을 왼쪽에서 오른쪽으로 당길 수 있습니다.

참고 자료

Posted by lahuman

댓글을 달아 주세요

얼마전 nosql을 왜 써야 하냐는 질문을 받았습니다.

nosql은 개발을 빠르고 편하기 위해 사용하지, 운영 업무 담당자의 입장에서는 관리 되지 않는 데이터라고 말씀 주셨습니다.

제 생각은 명확하게 nosql과 sql은 구조, 사용법이 다르다 이야기 했지만 잘 전달 되지는 않았네요.

SQL vs NoSQL의 내용을 보면 수정이 거의 없는 대량 데이터는 sql보다는 nosql이 같는 잇점이 크다고 이야기 합니다.
(물론 sql 만으로도 처리가 가능하지만요.)

NoSQL은 언제 가장 좋은가요?

  • 정확한 데이터 요구 사항 또는 데이터 자체가 알려지지 않았거나 변경/확장될 수 있음
  • 높은(읽기) 처리량이 필요하지만 데이터를 자주 변경하지 않습니다(즉, 한 번의 변경으로 인해 항상 수십 개의 문서를 업데이트할 필요가 없음).
  • 데이터베이스를 수평으로 확장해야 합니다(즉, 엄청난 양의 데이터를 저장하고 엄청난 읽기 및 쓰기 처리량을 가짐)

출처 : SQL vs NoSQL

이전 회사 경험으로 방화벽 로그를 mongodb(nosql)에 담았습니다.

대량의 데이터를 민첩하게 적재 하였고 샤딩을 사용해 조회 성능도 꽤 우수했습니다.

로그는 기본적으로 여러 방화벽 장비로 부터 다양한 형식으로 되어 있습니다. 따라서 모든 형식을 알지 못하고 필요한 데이터만 정재해서 저장합니다.
모든 방화벽 장비가 필요한 데이터를 제공하지는 않았습니다. 또한 꽤 많은 데이터를 저장하였습니다.

만약 이 방화벽 데이터를 sql형식으로 저장한다면, 데이터 정형화 과정을 거치며 여러 테이블로 분산하여 저장해야 합니다.
이는 데이터 조회시 조인으로 복잡한 sql로 작성해야 합니다. 또한 성능 역시 문제가 될 수 있습니다.
물론 설계의 묘미로 하나의 테이블로 관리 할 수 있습니다. 다만 그렇게 sql을 사용한다면, sql을 사용하는 의미가 있을까요?

방화벽 로그와 같이 수정이 없고, 특정기간 동안 빠른 조회가 필요하는 대량의 데이터를 쌓는 경우 nosql이 적합하다고 생각합니다.

참고자료

Posted by lahuman

댓글을 달아 주세요