본문으로 건너뛰기

타 솔루션 연동 가이드

FlowKat을 외부 포털, 통합 대시보드, ITSM 솔루션과 연결하는 방법을 정의한다. 연동 방식은 표시 목적과 데이터 접근 방식에 따라 선택한다.


1. 개요

1.1 연동 시나리오

시나리오방식포트비고
외부 포털에 FlowKat 화면 임베드Iframe6300 (ui-server)인증 토큰 쿠키 전달 필요
특정 대시보드 링크 공유공유 URL6300 (ui-server)읽기 전용 세션
외부 시스템에서 성능 데이터 조회REST API6188 (api-server)Bearer 토큰 인증
알람 이벤트를 외부 채널로 전송웹훅 플러그인N/A (아웃바운드)Slack/Mattermost/Telegram/Email/LINE

1.2 서비스 포트 구조

연동 시 접근하는 포트는 역할이 다르다.

외부 접근 (방화벽 개방)
:6300 ui-server (Next.js) — Iframe / 공유 URL
(내부 전용)
:6600 dashboard-server — Dashboard 메타데이터 API
:6188 api-server — 성능 데이터 REST API (3rd-party 연동)

Nginx 리버스 프록시를 사용하는 경우 외부 포트는 80/443이며 내부적으로 6300으로 프록시된다. 자세한 포트 구성은 17.network-ports.md를 참고한다.


2. Iframe 통합 대시보드

2.1 개요

FlowKat 대시보드 화면을 외부 포털이나 통합 운영 콘솔에 삽입한다. ui-server(:6300)의 URL을 <iframe src> 속성에 지정한다.

2.2 URL 구조

https://{flowkat-host}:6300/{locale}/dashboard
경로 세그먼트설명예시
{locale}언어 코드ko, en
/dashboard대시보드 메인기본 진입점

특정 대시보드 직접 링크:

https://{flowkat-host}:6300/ko/dashboard?dashboardId={id}

2.3 인증 처리

FlowKat은 NextAuth.js v5 기반의 세션 쿠키 인증을 사용한다. Iframe에서 외부 포털과 FlowKat 간 도메인이 다르면 쿠키가 전달되지 않아 로그인 페이지로 리다이렉트된다.

처리 방법:

  1. 동일 도메인 배포: 외부 포털과 FlowKat을 같은 도메인 하위 경로에 배포한다.
    • 예: portal.example.com + portal.example.com/flowkat
  2. 사전 로그인 후 Iframe 로드: Iframe 로드 전에 /auth/signin을 팝업 창으로 열어 세션을 생성한 뒤 Iframe을 표시한다.
  3. SSO 연동: 동일 IdP(Identity Provider)를 사용하는 경우 SAML/OIDC를 통한 세션 공유 방식은 현재 지원하지 않는다. 커스텀 구현이 필요하다.

2.4 X-Frame-Options 해제

ui-server는 기본적으로 X-Frame-Options 헤더를 설정하지 않는다. 단, Nginx 리버스 프록시에서 헤더를 추가한 경우 해제가 필요하다.

Nginx 설정 예시 — Iframe 허용:

# /etc/nginx/conf.d/flowkat.conf
server {
listen 443 ssl;
server_name flowkat.example.com;

location / {
proxy_pass http://localhost:6300;

# X-Frame-Options 제거 (Iframe 허용)
proxy_hide_header X-Frame-Options;

# 특정 포털 도메인만 허용하는 경우
add_header Content-Security-Policy "frame-ancestors 'self' https://portal.example.com";
}
}

frame-ancestors에 와일드카드 도메인(*)을 사용하면 클릭재킹 공격에 노출된다. 허용 도메인을 명시적으로 지정한다.

2.5 CORS 설정

api-server 직접 호출이 필요한 경우(Iframe 내부에서 XHR), .envCORS_ORIGINS를 수정한다.

# volumes/api-server/.env 또는 docker-compose 환경변수
CORS_ORIGINS=https://flowkat.example.com,https://portal.example.com

3. 공유 URL

3.1 개요

특정 대시보드 뷰를 읽기 전용으로 외부에 공유한다. 현재 FlowKat은 별도의 공개 공유 링크 기능을 제공하지 않는다. 따라서 공유는 아래 방식으로 구현한다.

3.2 읽기 전용 역할 계정

공유 URL 접근용 전용 계정을 생성하고 읽기 전용 역할을 부여한다.

설정 경로: 설정 > 역할/권한 > 역할 추가

항목설정값
역할명readonly-viewer
권한대시보드 조회만 허용, 설정 변경 권한 없음
계정공유용 전용 계정 생성

공유 받는 사람은 해당 계정으로 로그인 후 URL에 접근한다.

3.3 URL 파라미터

대시보드 URL에 파라미터를 추가해 초기 상태를 지정할 수 있다.

https://{flowkat-host}:6300/ko/dashboard?dashboardId={id}&timeRange=1h
파라미터설명예시
dashboardId특정 대시보드 IDdashboard_001
timeRange시간 범위 (UI 지원 시)1h, 6h, 24h

4. REST API 연동

4.1 개요

api-server(:6188)는 Scouter-compatible REST API를 제공한다. 외부 모니터링 시스템이나 BI 도구에서 FlowKat 성능 데이터를 직접 조회할 때 사용한다.

API 스펙은 Swagger UI에서 확인한다:

http://{api-server-host}:6188/swagger-ui.html

OpenAPI 스펙 다운로드:

curl http://{api-server-host}:6188/swagger/api-docs -o flowkat-api.json

api-server(:6188)는 기본적으로 외부에 노출되지 않는다. 직접 접근이 필요한 경우 방화벽 개방과 보안 검토가 필요하다.

4.2 인증 방식

api-server는 Bearer 토큰 방식을 사용한다.

Bearer 토큰 발급

curl -X POST http://{api-server-host}:6188/v1/user/loginGetToken \
-H "Content-Type: application/json" \
-d '{
"user": {
"id": "admin",
"password": "password"
},
"serverId": 0
}'

응답 예시:

{
"resultCode": 0,
"message": "success",
"result": {
"success": true,
"token": "eyJhbGciOiJIUzI1NiJ9..."
}
}

resultCode === 0이면 성공이다. result.token 값을 이후 요청의 Authorization 헤더에 사용한다.

토큰 사용

curl http://{api-server-host}:6188/v1/info/server \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiJ9..."

토큰 갱신

토큰 만료 시 동일한 loginGetToken 엔드포인트로 재발급한다. 토큰 유효 기간은 서버 설정에 따라 다르다.

4.3 주요 API 엔드포인트

엔드포인트메서드설명인증 필요
GET /v1/info/serverGET연결된 Collect Server 목록 조회불필요
GET /v1/objectGET모니터링 객체(에이전트) 목록 조회필요
GET /v1/counter/{counter}/realtimeGET실시간 카운터 값 조회필요
GET /v1/counter/{counter}/ofType/{objType}GET오브젝트 타입별 카운터 이력 조회필요
GET /v1/xlog/realTimeGET실시간 XLog 조회필요
GET /v1/xlogGETXLog 이력 조회필요
GET /v1/alertGET알람 이력 조회필요
GET /v1/summary/serviceGET서비스 요약 통계 조회필요
GET /v1/visitor/realTimeGET실시간 방문자 수 조회필요
GET /v1/activeService/realTimeGET실시간 활성 서비스 수 조회필요

4.4 응답 형식

모든 API 응답은 공통 래퍼 형식을 따른다.

{
"resultCode": 0,
"message": "success",
"result": { ... }
}
필드타입설명
resultCodeint0 = 성공, 그 외 = 오류 코드
messagestring결과 메시지
resultobject실제 응답 데이터

오류 코드 예시:

코드설명
0성공
-1일반 오류
401인증 실패
403권한 없음
503요청 타임아웃 (기본 30초)

4.5 API 요청 예시

실시간 활성 서비스 수 조회:

curl "http://{api-server-host}:6188/v1/activeService/realTime?serverId=0" \
-H "Authorization: Bearer {token}"

특정 오브젝트의 카운터 이력 조회:

curl "http://{api-server-host}:6188/v1/counter/Heap_Used/ofObject/{objHash}?startTime=20260101000000&endTime=20260101235959" \
-H "Authorization: Bearer {token}"

오브젝트 목록 조회:

curl "http://{api-server-host}:6188/v1/object?serverId=0" \
-H "Authorization: Bearer {token}"

5. 알림 외부 연동

5.1 개요

FlowKat 알람 이벤트를 외부 채널로 전송한다. flowkat.plugin.* 모듈은 Collect Server에 플러그인으로 로드되어 알람 발생 시 외부 웹훅을 호출한다.

아키텍처:

임계값 초과 이벤트
→ collect-server (AlertRule 평가)
→ 알림 데이터 생성
→ flowkat.plugin.* (플러그인 체인 실행)
→ 외부 채널 웹훅 호출 (Slack / Mattermost / Telegram / Email / LINE)

5.2 지원 알림 채널

채널모듈설정 키 네임스페이스
Slackflowkat.plugin.slackSLACK_PLUGIN
Mattermostflowkat.plugin.mattermostMATTERMOST_PLUGIN
Telegramflowkat.plugin.telegramTELEGRAM_PLUGIN
Emailflowkat.plugin.emailEMAIL_PLUGIN
LINEflowkat.plugin.lineLINE_PLUGIN
Synology Chatflowkat.plugin.synochatSYNOCHAT_PLUGIN

5.3 플러그인 설정 방법

플러그인 설정은 FlowKat UI를 통해 KV Store에 저장된다.

설정 경로: 설정 > 알람 > 알람 연동

각 플러그인은 공통적으로 {plugin}_enabled 키로 활성화 여부를 제어한다.

Slack 설정

설정 키설명예시
slack_enabledSlack 알림 활성화true
slack_webhook_urlSlack Incoming Webhook URLhttps://hooks.slack.com/services/...
slack_channel전송 채널#monitoring-alerts
slack_username발신 봇 이름FlowKat Alert
slack_icon_emoji봇 아이콘 이모지:bell:

Mattermost 설정

Mattermost 플러그인은 Slack과 동일한 Incoming Webhook 형식을 사용한다.

설정 키설명
mattermost_enabledMattermost 알림 활성화
mattermost_webhook_urlMattermost Webhook URL
mattermost_channel전송 채널

Telegram 설정

설정 키설명
telegram_enabledTelegram 알림 활성화
telegram_bot_tokenTelegram Bot API 토큰
telegram_chat_id전송 대상 채팅 ID

Email 설정

설정 키설명
email_enabled이메일 알림 활성화
email_smtp_hostSMTP 서버 주소
email_smtp_portSMTP 포트
email_from발신자 이메일 주소
email_to수신자 이메일 주소 (복수 시 콤마 구분)
email_use_tlsTLS 사용 여부

5.4 알림 메시지 형식

모든 알림 플러그인은 동일한 알림 데이터 정보를 전송한다.

The following alert [CRITERIA] was caught by FlowKat.

Object Type: {objType}
Object Name: {objName}
Alert Level: {WARN|CRITICAL|FATAL}
Alert Time: {datetime}
Alert Title: {title}
Alert Message: {message}

5.5 플러그인 동작 테스트

알림 설정 후 동작 테스트:

방법 1: UI 테스트 기능 사용

설정 > 알람 > 알람 연동 > [채널] > 테스트 발송 버튼 클릭

방법 2: API 직접 테스트

# collect-server 알람 API를 통해 테스트 알람 발생
curl -X POST http://localhost:6180/api/plugin/test \
-H "Content-Type: application/json" \
-d '{"plugin": "SLACK_PLUGIN"}'

6. 주의사항

6.1 보안 고려사항

API 키 / 토큰 관리

  • Bearer 토큰을 소스코드나 버전 관리 시스템에 커밋하지 않는다.
  • 연동 전용 계정은 최소 권한 원칙을 적용한다 (읽기 전용 권한).
  • 토큰 유효 기간을 최대한 짧게 설정하고 만료 시 재발급 로직을 구현한다.

IP 제한

api-server(:6188)를 외부에 노출하는 경우 Nginx에서 허용 IP를 제한한다.

location /v1/ {
allow 10.0.0.0/24; # 허용 IP 대역
deny all;
proxy_pass http://localhost:6188;
}

Iframe 보안

  • frame-ancestors에 명시적인 허용 도메인만 지정한다.
  • frame-ancestors * 설정은 클릭재킹 취약점을 발생시키므로 사용하지 않는다.

웹훅 URL 보안

  • Slack/Mattermost 웹훅 URL이 외부에 노출되면 스팸 메시지가 전송될 수 있다.
  • KV Store에 저장된 웹훅 URL은 설정 > 역할/권한에서 설정 편집 권한을 가진 계정만 조회할 수 있다.

6.2 성능 영향

API 폴링 주기

외부 시스템에서 REST API를 폴링하는 경우 최소 간격을 준수한다.

데이터 종류권장 최소 폴링 주기비고
실시간 카운터5초이하 주기는 collect-server 부하 유발
XLog 이력30초대용량 쿼리 시 더 긴 간격 권장
알람 이력60초
오브젝트 목록60초자주 변하지 않음

동시 연결 수

api-server의 기본 스레드 풀은 제한되어 있다. 외부 연동 시스템이 다수의 동시 요청을 보내면 응답 지연이 발생한다. 연동 시스템 당 최대 5개의 동시 연결을 유지한다.

6.3 타임아웃 처리

api-server의 비동기 응답 타임아웃은 기본 30초다. 외부 연동 클라이언트의 HTTP 타임아웃을 35초 이상으로 설정해 응답을 대기한다.

# curl 예시 — 타임아웃 35초 설정
curl --max-time 35 "http://{api-server-host}:6188/v1/counter/..." \
-H "Authorization: Bearer {token}"

연동 관련 핵심 파라미터

파라미터타입기본값conf 키중요도설명
NEXTAUTH_URLstringhttp://localhost:3000.env NEXTAUTH_URL필수인증 콜백 URL. Iframe/공유 URL 연동 시 외부 도메인 설정 필수
CORS_ORIGINSstring-.env CORS_ORIGINS필수CORS 허용 도메인. Iframe 연동 시 외부 도메인 추가
x_frame_optionsstringSAMEORIGINnginx.conf핵심X-Frame-Options 헤더. Iframe 연동 시 해제 또는 ALLOW-FROM 설정
api_auth_token_expire_secint3600application.yml핵심API 토큰 만료 시간(초). REST API 연동 시 갱신 주기 고려
webhook_urlstring-알림 채널 설정고급외부 웹훅 URL. 알림 연동 시 플러그인별 설정
async_response_timeout_msint30000application.yml고급비동기 응답 타임아웃(ms). 외부 클라이언트 타임아웃보다 짧게 설정

관련 문서