본문으로 건너뛰기

exemONE 전체 아키텍처 및 구성 요소 상세 설명


1. exemONE 전체 구조 개요

exemONE은 모니터링 대상 서버에 설치되는 에이전트중앙 수집 서버(Collector) 로 구성된 통합 모니터링 플랫폼입니다.

[모니터링 대상]                    [수집 서버 (Collector)]
┌──────────────┐ ┌───────────────────────────────────────────┐
│ exem-host- │──→ 9009포트 ──→ │ exemone-receiver → exemone-kafka │
│ agent │ │ ↓ │
├──────────────┤ │ exemone-ingester → exemone-clickhouse │
│ exemone-db- │──→ 9009포트 ──→ │ exemone-postgresql │
│ agent │ │ ↓ │
├──────────────┤ │ exemone-core (스키마 관리) │
│ exemone- │ │ exemone-alerter (알람 처리) │
│ cloud-agent │ │ ↓ │
├──────────────┤ │ exemone-api ↔ exemone-gateway │
│ exem-k8s- │ │ ↓ │
│ agent │ │ exemone-front (Web UI) │
└──────────────┘ └───────────────────────────────────────────┘

2. 수집 서버 구성 모듈 (총 16개)

exemONE 수집 서버가 정상적으로 동작하면 아래 16개 모듈이 모두 실행 중이어야 합니다.

2-1. 수집 서버 정상 기동 확인 명령어

Docker 설치 환경:

docker ps

Binary 설치 환경:

${EXEMONE_HOME}/onctl stat

정상 상태 확인 시 아래 16개 모듈이 모두 running (Docker의 경우 Up) 상태여야 합니다:

exemone-clickhouse
exemone-postgresql
exemone-redis
exemone-kafka
exemone-gateway
exemone-receiver
exemone-core
exemone-alerter
exemone-ingester
exemone-api
exemone-front
exemone-https
exemone-db-agent
exemone-cloud-agent
exemone-api-agent
exemone-cache

(Binary 설치 기준)


3. 수집 서버 핵심 모듈 상세 설명

3-1. exemONE 자체 수집 모듈

모듈명역할
exemone-receiver에이전트로부터 데이터를 수신합니다. 에이전트가 전송하는 데이터를 9009 포트로 수신하는 진입점입니다.
exemone-ingester수신된 데이터를 저장소(ClickHouse, PostgreSQL 등)에 저장합니다. Kafka를 통해 수신된 메시지를 소비하여 처리합니다.
exemone-coreClickHouse 데이터베이스의 테이블 스키마를 관리(형상관리)합니다. 데이터 구조 변경, 테이블 생성/수정 등을 담당합니다.
exemone-alerter알람 처리를 담당합니다. 알람 룰 체크, Notification 발송(Webhook, Telegram, KakaoTalk, Email, SMS 등)을 처리합니다.
exemone-gatewayAPI 게이트웨이로, 클라이언트 요청을 적절한 서비스로 라우팅합니다. 인증, 세션 관리, SSO 처리 등을 담당하며 기본 포트는 8080입니다.
exemone-apiAPI 서버로, 웹 UI 및 외부 연동을 위한 REST API를 제공합니다.
exemone-front프론트엔드 서버(Nginx 기반)로, 웹 UI 화면을 제공합니다.
exemone-db-agent수집 서버 내장 DB Agent로, 데이터베이스 지표를 수집합니다.
exemone-cloud-agent수집 서버 내장 Cloud Agent로, AWS, Azure 등 클라우드 서비스 지표를 수집합니다.
exemone-api-agentAPI 기반 외부 제품(Maxgauge 등) 연동을 위한 에이전트입니다. Prometheus, Elasticsearch 등 외부 데이터 수집에도 활용됩니다.

3-2. 외부(인프라) 지원 모듈

모듈명역할
exemone-clickhouse시계열 데이터 저장용 컬럼형 데이터베이스. 모니터링 지표 데이터(메트릭, 이벤트 등)를 저장합니다.
exemone-postgresqlexemONE의 설정/관리 데이터를 저장하는 Repository DB입니다. 사용자, 에이전트, 알람 룰, 권한 등의 메타데이터를 관리합니다.
exemone-redis캐시 서버. 세션, 토큰 등 임시 데이터를 빠르게 처리합니다.
exemone-kafka메시지 큐. 에이전트로부터 수신된 데이터를 버퍼링하고 ingester에 전달하는 비동기 메시지 파이프라인입니다.
exemone-cacheNginx 기반 캐시 서버. 정적 리소스 및 API 응답 캐싱을 처리합니다.
exemone-httpsHTTPS 처리 모듈. SSL/TLS 종단 처리를 담당합니다.

4. 에이전트 구성 요소 상세 설명

4-1. 에이전트 종류 및 역할

에이전트명모니터링 대상설치 위치
exem-host-agentLinux/Windows 서버 OS 지표 (CPU, Memory, Disk, Network 등)모니터링 대상 서버
exemone-db-agentDatabase (Oracle, MySQL, PostgreSQL, SQL Server, MongoDB 등)DB 서버 또는 수집 서버 내장
exemone-cloud-agentAWS, Azure 클라우드 서비스 지표수집 서버 내장
exemone-api-agentMaxgauge 등 외부 제품, Prometheus, Elasticsearch수집 서버 내장
exem-k8s-agent (k8s-agent)Kubernetes Pod, Node, Container, Namespace 등K8s 클러스터 내
exem-java-agentJava Application (Tomcat, Spring Boot 등) APM애플리케이션 서버 JVM
exem-webserver-agentApache, Nginx 웹서버 및 RUM(Real User Monitoring)웹서버 또는 별도 에이전트 서버
exem-ndm-agentNetwork Device (SNMP 기반 네트워크 장비)별도 설치

4-2. exem-host-agent 설치 지원 환경 및 설치 방법

지원 환경:

  • Linux (64bit): CentOS, Rocky 등
  • Windows (64bit): Windows Server 2012 이상
  • ※ 32비트 아키텍처 미지원

Windows 환경 수동 실행 방법:

# 환경 변수 설정
set EXEM_HOME=경로\exem
set EXEM_HOST_HOME=경로\exem\host
set RECEIVER_ADDR=receiverip:9009

# 에이전트 실행
exem-host-agent_win_64.exe -D

# 디버그 모드 실행 (문제 발생 시)
exem-host-agent_win_64.exe -d

4-3. exemone-db-agent 설치 지원 환경 및 설치 방법

지원 환경:

  • CentOS 7 이상
  • Linux 64bit

설치 절차:

Step 1. Agent 등록 (Web UI)

  • Setting > Database > Agent Management 탭 > Add Agent 선택
  • Agent 생성 후 편집 버튼 선택하여 Agent IDAccess Token 확인

  • Access Token의 경우 Regenerate 선택 후 토큰 확인 (토큰 확인 후 Save 필수)

Step 2. Instance 등록

  • Instance 탭에서 Add Group 선택 → 그룹 추가 후 Add Instance 선택 → 인스턴스 추가
  • Agent 항목에는 1번에서 추가한 Agent를 등록

Step 3. DB 서버에 exemone-db-agent 설치 (tar 파일 방식)

# exemone 계정 생성 후 exemone-db-agent 압축 해제
tar -xvzf exemone-db-agent-{version}.tar.gz

Step 4. 설정 파일 수정

conf/agent.yaml 파일 내 agent ID, Access Token, receiver 정보를 추가합니다.

global:
agent_id: {발급받은 Agent ID}
access_token: {발급받은 Access Token}
receiver: {수집서버IP}:9009
log:
caller: false
level: info
file: /home/exem/exemone-db-agent/logs/agent.log
name: agent

주의: agent_id: 뒤에 반드시 한 칸 공백이 있어야 합니다.

Step 5. 에이전트 실행

./startup.sh

실행 후 logs/agent.log에서 정상 동작 여부를 확인합니다.

Linux systemd 서비스 등록 (db-agent v3.0.506.15.10 이상):

# 서비스 파일 복사
sudo cp exemone-db-agent.service /etc/systemd/system/

# 서비스 파일 적용
sudo systemctl daemon-reload

# 서비스 실행
sudo systemctl start exemone-db-agent

# 서비스 상태 확인
systemctl status exemone-db-agent

# 서비스 종료
sudo systemctl stop exemone-db-agent

5. 설치 방식 (수집 서버)

5-1. Binary(바이너리) 설치 방식

지원 환경:

  • Rocky 8, Rocky 9
  • CPU 8 core / Memory 16 GB (인스턴스 1대 기준)

설치 절차:

# 1. 패키지 압축 해제
tar -zxvf exemone-pkg-v3-0-507-0.tar.gz

# 2. exemone 폴더로 이동

# 3. 설치 진행
./onectl install

# 진행 중 선택
Do you want to continue? (y/n) : y

# OS 버전 선택
Select OS for installation:
1) rocky8
2) rocky9
선택할 OS 숫자를 선택해주세요) 1

# 설치 완료 후 상태 확인
./onectl stat

바이너리 환경 프로세스 관리 명령어 (onectl):

명령어설명
./onectl stat전체 모듈 상태 확인
./onectl start all전체 모듈 시작
./onectl stop all전체 모듈 중지
./onectl restart {모듈명}특정 모듈 재기동 (예: ./onectl restart api)
./onectl log {모듈명}특정 모듈 로그 조회 (예: ./onectl log exemone-core)

5-2. Docker 설치 방식

Docker 환경에서는 {EXEMONE_HOME}/scripts/ 폴더 내 쉘 스크립트로 컨테이너 서비스를 관리합니다.

Docker 환경 프로세스 관리 명령어:

# 전체 컨테이너 상태 확인
docker ps

# 특정 모듈 재기동
${EXEMONE_HOME}/scripts/restart.sh {모듈명}
# 예시
./restart.sh front
./restart.sh api
./restart.sh core

# 특정 모듈 로그 확인
docker logs -f exemone-{모듈명}
# 예시
docker logs -f exemone-api

Docker 단일 모듈 패치 방법:

# 1. 이미지 로드
ls *.tar.gz | xargs -L 1 docker load -i

# 2. .env 파일에서 버전 변경
vi {EXEMONE_HOME}/installer/exemone/.env

# 변경 예시
# 변경 전
FRONT_IMAGE=maxgauge/exemone-front
FRONT_VERSION=v3.0.504.15.16

# 변경 후
FRONT_IMAGE=maxgauge/exemone-front
FRONT_VERSION=v3.0.504.15.17

# 3. 이미지 재실행
./restart.sh front

6. 모듈 간 포트 구성

모듈포트용도
exemone-receiver9009에이전트 → 수집 서버 데이터 전송 포트
exemone-gateway8080웹 UI 및 API 진입 포트
exem-webserver-agent9009 (Receiver 연결), 12848 (모듈 연결)웹서버 에이전트 연결 포트

포트 변경 시 주의 사항:

특정 모듈에서 포트 변경 시 다른 모듈 설정 파일에도 변경된 포트를 동시에 적용해야 합니다.

  • API 포트 변경 시 → Core, Receiver, Ingester, Alerter 설정 파일 함께 수정 필요
  • Front 포트 변경 시 → Gateway의 front-server 설정 함께 수정 필요
# API 포트 변경 예시 (Binary 환경)
vi $EXEMONE_HOME/services/exemone-api/configs/application.yaml
# server port 값 변경 후 재기동
./onectl restart api

7. 이슈 발생 시 로그 확인 방법

Docker 환경:

# 기본 로그 확인
docker logs -f exemone-{모듈명}

# 또는 로그 파일 직접 확인
containers/exemone-{모듈명}/logs/

Binary 환경:

# onctl 로그 조회
./onectl log {모듈명}

# 또는 로그 경로 직접 확인
services/exemone-{모듈명}/logs/

# 예시: core 모듈 오류 확인
tail -f $EXEMONE_HOME/containers/exemone-core/logs/core.log | grep ERR

8. 아키텍처 요약 구성도

┌─────────────────────────────────────────────────────────────────┐
│ 모니터링 대상 (Targets) │
│ [Host Agent] [DB Agent] [Java Agent] [Web Agent] [k8s Agent] │
└──────────────────────────┬──────────────────────────────────────┘
│ 9009 포트
┌──────────────────────────▼──────────────────────────────────────┐
│ exemONE 수집 서버 (Collector) │
│ │
│ ┌────────────┐ ┌─────────────┐ ┌──────────────────────┐ │
│ │ Receiver │→→│ Kafka │→→│ Ingester │ │
│ │ (수신) │ │ (메시지 큐) │ │ (저장 처리) │ │
│ └────────────┘ └─────────────┘ └──────────┬───────────┘ │
│ │ │
│ ┌─────────────────────────────────────────┐ │ │
│ │ 데이터 저장소 │◄──┘ │
│ │ ClickHouse (시계열/메트릭 데이터 저장) │ │
│ │ PostgreSQL (설정/메타 데이터 저장) │ │
│ └─────────────────────────────────────────┘ │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │
│ │ Core │ │ Alerter │ │ API │ │ Gateway │ │
│ │(스키마관리)│ │(알람처리) │ │(API 서버)│ │(8080 진입점) │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────────┐ │
│ │ 지원 인프라: Redis | Kafka | PostgreSQL | ClickHouse │ │
│ │ Cache(Nginx) | HTTPS(SSL) │ │
│ └──────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
│ 8080 포트
┌──────────────────────────▼──────────────────────────────────────┐
│ 사용자 (Web Browser) │
│ exemONE Front (Web UI - Nginx) │
└─────────────────────────────────────────────────────────────────┘

참고 문서 URL