분석 · 관제핵심 · 17분 읽기

Cacti: SNMP 값이 RRD 그래프로 만들어지는 과정

장비 등록, Poller 실행, 데이터 소스와 RRA, 그래프 생성의 관계를 복원하고 원본 RRD 오류 화면을 수집 경로에 따라 진단합니다.

개념부터 찾아보기

정의·역할·동작 원리를 독립 페이지에서 확인하세요. 본문의 밑줄 용어에도 설명이 있습니다.

이 노트에서 설명할 수 있게 되는 것

  1. 장비·Poller·RRD·Graph의 데이터 흐름을 설명한다.
  2. Counter와 Gauge, unknown과 0을 구분한다.
  3. 원본 오류 화면을 단계별 수집 점검으로 연결한다.

01개념과 구성 요소

  • 는 장비 정의·수집 설정·주기 실행· 저장·그래프 표시를 연결한다.
  • 는 설정·메타데이터를, 는 정책에 따른 시계열 값을 관리한다.
  • 장비 상태 표시, 응답, 갱신, 그래프 렌더링은 각각 다른 단계다.

02SNMP 값이 Cacti 그래프가 되는 순서

  1. 장비 접속 정보와 Data Query··를 연결하여 어떤 값을 읽을지 정한다.
  2. 스케줄러가 또는 경로를 실행하며 실제 실행 계정·권한·환경이 적용된다.
  3. Agent에서 해당 OID 값을 받아 형식·유효성·수집 시각을 처리한다. 가용성 검사 성공만으로 모든 OID가 수집되지는 않는다.
  4. 의 타입·step· 조건에 맞게 값을 넣고 필요한 통합값을 에 보관한다.
  5. 정의된 기간·데이터 소스·통합 함수로 이미지를 만든다. 정의가 있어도 파일 누락·권한·값 누락 때문에 그래프가 비어 있을 수 있다.

03전체 경로와 저장소의 역할

  • 는 수집 결과를 시계열로 저장하고 그래프로 보여 주는 관리 도구다. Scheduler가 주기적으로 실행을 시작하면 가 장비의 Agent 또는 지정된 script에서 값을 가져오고, 을 통해 데이터 소스를 갱신한다.
  • 웹 화면은 저장된 시계열과 그래프 정의를 사용해 결과를 그린다.
  • /에는 사용자, 장비, 템플릿, 항목과 그래프 설정 같은 관리 메타데이터가 들어간다. 모든 트래픽 샘플이 이 의 행으로 저장되는 구조라고 이해하면 파일 장애를 잘못 진단한다.
  • 파일과 DB 설정은 서로 대응하지만 별도의 저장 대상이다.
  • 서버 자신도 Agent를 가진 관리 대상으로 등록할 수 있다. 웹 서버가 설치된 머신이라는 이유만으로 그 머신의 CPU·인터페이스 값이 자동으로 모든 그래프에 들어오는 것은 아니다.

04설치 구성 요소와 권한의 경계

  • 구성에는 웹 서버·, , , Net- 관련 도구가 연결된다. 의 DB 연결 정보, DB 사용자 권한, 실행 사용자와 파일 경로가 맞아야 한다.
  • 을 선택하면 의 DB 연결 설정도 확인하지만 다른 비밀번호를 문서에 복사하는 식으로 관리하지 않는다.
  • 배포판 패키지와 소스 설치는 경로·서비스·스케줄러 구성이 다를 수 있다. 노트의 /usr/share/ 경로를 모든 환경의 정답으로 복사하지 말고 설치된 패키지 목록과 웹 설정, UI의 경로 정보를 대조한다.
  • 기존 scheduler가 있는데 을 추가하면 중복 가 실행될 수 있다.
  • ·log·cache 등 쓰기가 필요한 디렉터리에만 실행 사용자 권한을 부여한다. 애플리케이션 코드 전체에 재귀 chmod/chown을 적용하면 웹 가 코드까지 바꿀 수 있는 범위가 커진다.
  • 파일 접근 실패는 Unix 권한, 정책, 실제 실행 사용자와 대상 경로를 함께 확인한다.

05장비 등록부터 그래프 생성까지

  • 먼저 서버의 위치에서 대상 IP·이름 해석·을 확인하고 CLI로 알려진 OID를 조회한다. 그 다음 Device에 주소, 버전·자격 증명, 포트·타임아웃과 Device Template을 지정한다.
  • 단일 호스트 입력란에는 일반적으로 호스트 주소를 넣으며 전체를 장비 주소처럼 넣지 않는다.
  • Data Query는 인터페이스 목록처럼 여러 인스턴스를 발견하고, 선택한 행에서 와 Graph를 만든다. ifIndex만 기억하지 말고 ifName/ifDescr 등과 맞춰 실제 관찰하려는 포트인지 확인한다.
  • 그래프 이름이 맞아도 인덱스가 바뀌면 다른 인터페이스의 값일 수 있다.
  • Graph Tree에 추가하는 것은 사용자가 찾아보는 표시 구조를 구성하는 단계다. Tree에 나타났다고 수집이 시작되었다는 뜻은 아니며, 반대로 Tree에 없어도 가 이미 수집되고 있을 수 있다.
  • 접근 권한과 폴링 대상·데이터 파일·표시를 각각 확인한다.

06가용성 점검과 실제 수집은 다르다

  • 장비가 를 막고 는 허용하면 Ping만 사용하는 Downed Device Detection에서 down으로 보일 수 있다. 장비의 관리 정책에 맞는 가용성 검사 방식을 선택해야 한다.
  • 응답이 온다는 사실도 인증이나 특정 OID의 정상 응답을 보장하지 않는다.
  • SNMPv3는 authPriv 등 실제 보호 수준을 확인하고 v2c 실습은 읽기 전용 view와 관리 서버 출발지 제한을 적용한다. 요청 timeout을 무작정 늘리면 폴링 주기 전체가 지연될 수 있다.
  • 잘못된 community, view 제한, 장비 부하와 패킷 손실을 먼저 구분한다.
  • 한 장비의 모든 그래프가 동시에 끊기면 장비· 공통 경로를, 특정 그래프만 비면 해당 OID·데이터 소스·템플릿을 우선 본다. 장비 상태 색 하나로 저장과 렌더링의 모든 문제를 설명하지 않는다.

07PHP Poller·Spine·스케줄러의 연결

  • 기본 와 C 기반 은 수집 작업을 수행하는 선택지이다. 은 많은 장비를 병렬 조회할 때 도움이 될 수 있지만 설치만 했다고 사용되지는 않는다.
  • UI의 유형·실행 파일 경로·DB 설정과 실제 실행 로그를 확인한다.
  • 은 주기적 실행 자체를 담당하는 scheduler를 대체하지 않는다. .는 또는 해당 설치가 제공하는 서비스 구성에서 주기적으로 실행할 수 있다.
  • 현재 설치 방식이 무엇인지 확인한 뒤 하나의 실행 경로가 정상 동작하도록 맞춘다.
  • 핵심 조건은 runtime < Poll interval이다. 수집 주기가 300초인데 작업이 400초 걸리면 다음 주기와 겹치거나 건너뛰어 backlog와 unknown 값이 늘 수 있다.
  • thread를 늘리면 장비·DB·CPU 부하도 늘므로 실행 시간, 요청 수와 timeout을 함께 측정한다.

08RRD의 DS·PDP·RRA와 오래된 값의 압축

  • 는 미리 정한 시간 해상도와 보존량을 가진 순환 시계열 저장 방식이다. 는 저장할 값의 종류를 정의한다.
  • 는 온도·현재 사용자 수처럼 측정값 자체이고 는 누적 증가값의 변화율을 구한다. DERIVE도 차이를 시간으로 나누지만 감소 처리 등 의미가 달라 자료의 성질에 맞게 선택한다.
  • 입력 시각이 정확히 경계에 맞지 않아도 은 step 단위의 기본 데이터인 를 만들도록 정규화한다. 보다 오랫동안 유효한 업데이트가 없으면 unknown이 된다.
  • unknown은 0이 아니며 실제 트래픽 부재와 수집 장애를 구분해야 한다.
  • 는 여러 를 AVERAGE·MAX 등의 함수로 묶은 보관 영역을 정의한다. 오래된 값을 더 굵은 간격으로 유지하면 파일 크기를 제한할 수 있지만 평균화가 짧은 peak를 숨길 수 있다.
  • 알려지지 않은 표본이 너무 많으면 xfilesfactor 조건에 따라 묶은 값도 unknown이 된다.
  • 그래프는 최소한 비교할 두 측정점이 필요하다. 첫 폴링 직후 빈 그래프만 보고 설치 실패로 단정하지 않되, 여러 주기 뒤에도 비어 있다면 마지막 업데이트 시각과 타입··장비 를 검사한다.
값의 성질예해석 주의
현재 로그인 사용자 3명두 값의 차이 대신 현재 값 자체
누적 인터페이스 수신 octet시간 차이로 나눈 변화율, 폭·wrap 확인
Unknown수집 누락· 초과0으로 채우지 않고 원인 구분
AVERAGE/MAX긴 기간 그래프평균·최대가 같은 질문에 답하지 않음
원리 심화

09PDP·CDP·XFF가 그래프 해상도를 바꾸는 방식

  • 는 들어온 표본을 기본 step 시간 격자의 로 정규화한다. 불규칙한 입력 표본 하나와 그래프 점 하나가 항상 대응하지는 않는다.
  • 의 steps는 하나의 통합 점을 만들 때 묶는 수다. AVERAGE·MAX 같은 통합 함수에 따라 남는 정보가 달라진다.
  • 의 시간 범위는 기본 step×통합 steps×rows로 계산한다. rows가 같아도 통합 간격이 커지면 오래 보존하지만 세밀한 변화는 사라진다.
  • 는 통합 구간 안의 UNKNOWN 비중을 얼마나 허용할지 정한다. 누락값을 0으로 바꾸어 평균을 낮추는 것과 다르다.
  • 입력 간격이 를 넘으면 해당 구간이 UNKNOWN이 될 수 있다. 정상적인 0 트래픽과 수집 부재는 다른 상태다.
예제로 추적

10가상 여섯 PDP가 한 점으로 줄어드는 계산

  1. 같은 단위의 1분 여섯 개가 10, 10, 10, 10, 10, 70이라고 가정한다. 모두 알려진 값이다.
  2. AVERAGE로 6개를 통합하면 합계 120÷6=20이다. 마지막 1분의 70이라는 피크가 평균 20으로 보인다.
  3. 같은 구간의 MAX는 70이다. 장기 그래프에서 평균과 최대가 다른 이유는 같은 원시 구간에서 서로 다른 특징을 남기기 때문이다.
  4. 여섯 개 중 네 개가 UNKNOWN이고 =0.5라면 누락 비중 4/6이 허용치를 넘으므로 통합값도 UNKNOWN이다.
  5. step=60초· steps=5·rows=288이면 60×5×288=86,400초, 즉 하루를 5분 해상도로 저장한다.
검증·예외

11현재 값과 그래프 모양이 다른 경우

  • 조회 기간이 길어지면서 더 거친 가 선택되었는지 본다. 확대·축소에 따라 피크가 바뀌는 것은 통합 결과일 수 있다.
  • 원값을 로 저장하거나 반대로 처리했는지 확인한다. 데이터 소스 타입은 숫자를 속도로 변환하는 의미를 결정한다.
  • 실행 지연·중복 실행·를 비교한다. 단순 조회 성공은 정해진 시간 안에 가 갱신되었다는 증거가 아니다.
  • 0·UNKNOWN·파일 부재·권한 오류를 구분한다. 그래프 빈칸을 전부 장비 Down으로 해석하지 않는다.
LEARN THROUGH PRACTICE

장비별 Cacti 그래프의 값·NaN·빈 시간을 읽기

그래프 틀이 생성된 것과 실제 값이 수집되는 것을 구분하고 지원 OID 차이를 조사한다.

실습 구성과 전제

  • 자기 실습 의 조회 가능한 장비 두 대와 동일한 시간 범위를 준비한다.
  • 사진의 라우터와 은 다른 대상이다. 한 장비의 변경 전후 그래프로 해석하지 않는다.
  1. 수집되는 지표와 비어 있는 지표를 나눈다

    • 라우터 화면에서 Uptime은 증가하지만 Processes·Memory는 NaN이다. 일부 지표가 수집된다고 템플릿의 모든 OID가 지원된다는 뜻은 아니다.
    • NaN은 0 프로세스나 메모리 0바이트가 아니라 알려지지 않은 값으로 해석해야 한다.
    실습 · 설정·관리 화면 4원본 크기로 보기 ↗
    • 라우터 Uptime에는 증가하는 파란 영역과 현재 137.22 m가 보인다.
    • Processes·Memory 범례에는 -nan이 표시된다. 빈 그래프를 자원이 전혀 사용되지 않는 상태로 읽으면 안 된다.
    확인 기준

    장비 템플릿·Data Query·실제 지원 OID를 비교한다.

  2. 다른 장비의 정상 지표와 수집 구간을 비교한다

    • 은 수와 메모리 값이 표시된다. 대상 종류에 맞는 MIB·템플릿이 실제 데이터를 반환한 결과인지 확인한다.
    • 시간축의 빈 구간은 데이터 누락·미수집·표시 범위 등의 후보가 있다. 그래프 모양만으로 호스트 재부팅을 확정하지 않는다.
    실습 · 설정·관리 화면 5원본 크기로 보기 ↗
    • VM의 Processes 범례에는 Current 241, Average 240, Maximum 243이 보인다.
    • Uptime과 메모리에는 데이터가 있는 구간과 빈 구간이 나뉜다. 같은 시간 범위에서도 지표별 값의 의미가 다르다.
    확인 기준

    최신 폴링 시각과 원시 조회 결과를 확인해 그래프를 보완한다.

  3. Poller→RRD→Graph 순서로 문제를 좁힌다

    • 직접 조회가 되면 권한·주기·로그를 보고, 다음으로 갱신 시각과 자료형을 확인한다. 마지막으로 그래프의 ·단위·집계 함수를 본다.
    • 는 보존 기간이 길어지면 여러 표본을 하나의 로 합칠 수 있다. 평균 그래프는 순간 최댓값을 그대로 보여 주지 않는다.
    shell
    rrdtool info /path/to/lab.rrd
    rrdtool lastupdate /path/to/lab.rrd

    실제 의 경로를 확인한 뒤 읽기 전용으로 조회한다.

    확인 기준

    빈 값이 처음 발생하는 단계와 파일 갱신 시각을 특정한다.

실습에서 확인한 동작 원리

  • NaN·0·빈 구간은 서로 다른 의미다.
  • 한 지표의 성공이 다른 OID와 전체 수집 경로의 정상까지 증명하지 않는다.

설정·출력 추가로 확인하기 7장

아래 화면을 펼쳐 위 실습의 설정값, 명령과 확인 기준을 비교해 보세요. 각 묶음은 별도 실습 기록입니다.

실습 화면 묶음 01 2장
0703 보고서 · 설정·관리 화면 8원본 크기로 보기 ↗
  • 「cacti 관제」 문맥에 삽입된 원본 설정·관리 화면이다. Cacti 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
0703 보고서 · 실습·개념 참고 화면 7원본 크기로 보기 ↗
  • 「cacti 관제」 문맥에 삽입된 원본 실습·개념 참고 화면이다. Cacti 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
실습 화면 묶음 02 1장
Cacti 데이터 수집과 그래프원본 크기로 보기 ↗
  • 학습 원본 · Cacti 데이터 수집과 그래프의 Cacti에 수록된 화면·도식이다.
실습 화면 묶음 03 3장
snmp · 실습·개념 참고 화면 1원본 크기로 보기 ↗
  • 문서 문맥에 삽입된 원본 실습·개념 참고 화면이다. Cacti 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
snmp · 실습·개념 참고 화면 2원본 크기로 보기 ↗
  • 문서 문맥에 삽입된 원본 실습·개념 참고 화면이다. Cacti 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
snmp · 실습·개념 참고 화면 4원본 크기로 보기 ↗
  • 문서 문맥에 삽입된 원본 실습·개념 참고 화면이다. Cacti 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
실습 화면 묶음 04 1장
실습 · 실습·개념 참고 화면 10원본 크기로 보기 ↗
  • 「시나리오 4 (pc8→gateway)」 문맥에 삽입된 원본 실습·개념 참고 화면이다. Cacti 학습 내용과 함께 당시 구성·설정·관찰 결과를 비교할 수 있다.
동작·명령 참고 문서

12원본 오류 화면: 그래프 정의와 RRD 파일 분리

  • 아래 수업 화면에는 Logged in Users 그래프 설정과 연결된 가 있지만 파일 열기에 실패했다. 이는 그래프 설정이 DB에 존재해도 해당 시계열 파일을 읽을 수 없는 상태가 가능하다는 사례다.
  • 화면의 안내는 가능한 원인을 제시할 뿐 진단 완료 결과는 아니다.
  • 가 해당 데이터 소스를 작업 대상으로 등록했는지, 실행됐는지, 값을 받았는지, 올바른 경로에 를 만들었는지 순서대로 확인한다. 파일이 있다면 실행 사용자·웹 사용자 읽기 권한과 , 경로 설정을 본다.
  • 폰트 오류와 데이터 파일 오류는 별도로 해결한다.
수업 원본 자료

그래프 설정이 있어도 데이터 파일은 없을 수 있다

Cacti의 Logged in Users 그래프 편집 화면에 RRD 데이터 파일 열기 실패가 표시된 수업 캡처원본 크기로 보기 ↗
Cacti 실습 화면. 사용자 수 그래프와 Data Source 항목은 존재하지만 그래프 데이터 파일을 읽지 못하고 있다.

이 자료에서 읽어낼 것

  1. Failed to open data file은 화면 설정의 존재와 실제 시계열 저장의 성공이 별개임을 보여 준다.
  2. poller may not have run yet는 가능한 원인 안내다. 이 한 장으로 Poller 미실행을 확정할 수 없으며 경로·파일 존재·실행 사용자 권한·수집 오류도 확인해야 한다.
  3. rocky_server_users_13.rrd는 이 실습의 데이터 파일이다. 트래픽 Counter가 아니라 로그인 사용자 수라는 Gauge 계열 측정의 예다.
  4. 한글이 네모로 보이는 글꼴 문제와 RRD 파일 오류를 분리해 진단한다. 폰트를 설치하는 것만으로 데이터가 수집되지는 않는다.

13단계별 진단과 확인 결과 기록

  • 첫 단계는 Agent에서 실제 값이 나오는지 확인하는 것이다. 그 다음 로그에서 대상·OID·응답·소요 시간을 보고 의 마지막 업데이트와 메타데이터를 확인한다.
  • 마지막으로 Graph 정의가 올바른 와 단위·배율을 참조하는지 검증한다. octet/s를 bit/s로 바꾸는 8배 변환을 중복 적용하지 않는다.
  • last와 info는 파일 상태를 읽는 데 유용하다. 반면 . --force는 수집과 파일 갱신을 실제 수행하므로 단순 조회 명령과 구분한다.
  • 수동 실행이 성공해도 scheduler의 사용자·환경·권한이 다르면 정기 실행은 실패할 수 있다.
shell
rrdtool last <DATA_FILE.rrd>
rrdtool info <DATA_FILE.rrd>
# 아래는 구조 예: 실행하면 수집 및 저장이 발생한다.
php <CACTI_PATH>/poller.php --force

자리표시자는 설치 경로로 바꿔 읽는다. 이 페이지는 결과를 실행하거나 정상이라고 가정하지 않는다.

14장기 보존과 변경 후 재검증

  • 백업에는 DB 설정뿐 아니라 시계열, 템플릿·플러그인 설정, 자격 증명 저장 파일의 보호가 필요하다. DB만 복원하면 그래프 이름은 돌아와도 과거 시계열이 없을 수 있다.
  • 가능하면 서로 대응하는 시점의 데이터를 보존하고 별도 환경에서 복원 검증한다.
  • 장비 교체·ifIndex 변화· 보안 설정 변경· 유형 변경 뒤에는 기존 그래프와 새로운 측정값의 대응을 다시 확인한다. DB 튜닝 수치는 메모리 용량과 부하를 검토한 뒤 정한다.
  • 마지막 정상 수집 시각, 작업 시간과 unknown 구간을 관찰해야 그래프가 그려진다는 사실 이상의 품질을 확인할 수 있다.
학습 확인

이해했는지 확인하기

  • 그래프가 참조하는 데이터 소스와 OID를 확인한다.
  • Counter·Gauge·단위·집계 해상도를 구분한다.
  • 수집기 실행과 RRD 갱신·권한을 단계별로 확인한다.

함께 확인할 공식 자료