본문으로 건너뛰기

관리 콘솔

데이터레이크 노드의 운영 콘솔입니다. 브라우저로 상태 · 지표 · 로그 · 진단 · 설정 · 백업 · 워커를 한 화면에서 보고, 허용된 pd 명령을 실행하고, 같은 주소로 외부 모니터링 시스템(Grafana · Prometheus · Zabbix)에 헬스 API 를 제공합니다.

🎬 Tour the DataLake admin console · 53초 · 2026.09 기준 화면
항목값
백엔드 모듈plantpulse-datalake-admin-api
어디서 도나plantpulse-datalake 컨테이너 안 — 마스터 · 워커 노드 모두
주소 (TLS)https://<서버IP>:4950/
주소 (평문)http://<서버IP>:4949/ — 같은 콘솔 · 같은 API
로그인PP_DATALAKE_ADMIN_USER(기본 admin) / PP_DATALAKE_ADMIN_PASSWORD
기본 언어영문. ?lang=ko 를 붙이면 한국어

이 절의 문서​

화면무엇을 하나
이 페이지콘솔 전반 — 접속 · 로그인 · 화면 구성
배치배치 잡의 상태와 이력
웨어하우스웨어하우스 적재 현황
어시스턴트지금 뭐가 문제고, 왜 그렇고, 뭘 하면 되나 — 자연어 질문과 승인 카드

접속​

브라우저에서 두 주소 중 하나로 들어갑니다. 같은 콘솔이고 스킴만 다릅니다.

https://<서버IP>:4950/?lang=ko # TLS — 권장
http://<서버IP>:4949/?lang=ko # 평문 — 4950 으로 리다이렉트하지 않습니다
4949 는 평문입니다

로그인 비밀번호와 세션 쿠키가 그대로 흐릅니다. 신뢰할 수 없는 망에서는 반드시 4950 을 쓰세요. 4949 를 남겨 둔 것은 실수가 아니라 선택입니다 — 자체 서명 인증서 경고가 실제로 운영자를 막아 세우는 상자가 있기 때문입니다.

TLS 로 접속하면 자체 서명 인증서 경고가 뜰 수 있습니다. 실제 인증서로 바꾸는 방법은 보안 설정에 있습니다.

로그인​

로그인 화면에는 이 노드의 이름과 역할(마스터 / 워커) 이 함께 표시됩니다. 여러 노드를 열어 놓고 작업할 때 어느 상자인지 확인하세요.

변수기본값설명
PP_DATALAKE_ADMIN_USERadmin로그인 이름
PP_DATALAKE_ADMIN_PASSWORD2026-09-05 이후 설치본은 개발용 기본값, 그 전은 비어 있음비어 있으면 콘솔이 열리지 않습니다
PP_DATALAKE_ADMIN_API_KEY없음로그 엔드포인트를 기계가 호출할 때의 X-API-Key

비밀번호를 바꾸거나 처음 넣는 방법은 웹 화면 로그인 계정 — 관리 콘솔에 있습니다.

«이 노드의 콘솔이 설정되지 않았습니다» 가 뜨면

PP_DATALAKE_ADMIN_PASSWORD 가 비어 있다는 뜻입니다. 콘솔만 안 켜지고 데이터레이크는 정상 기동합니다. 장애가 아니라 커미셔닝에서 빠뜨린 것이니, 값을 넣고 재시작하세요.

화면 구성 — 레일과 사이드바​

데이터레이크 관리 콘솔 대시보드 — 레일, 한 줄 요약, 데이터 경로, 서비스, 컴포넌트 헬스, 타임라인 (노드 주소는 가림)

번호무엇
①아이콘 레일 — 그룹 사이를 옮깁니다. 대시보드 아이콘의 점 하나가 이 노드의 종합 판정입니다(아래)
②한 줄 요약 — 「컴포넌트 N개 모두 정상 · 서비스 N/N · 알람 없음」. 이 줄만 초록이면 더 볼 것이 없습니다. 아래 줄은 이 노드의 이름 · 역할 · 주소 · 노드 수이고, [노드 목록] 이 토폴로지의 노드 탭으로 갑니다
③데이터 경로 — 기동 순서대로 놓인 단계(메시징 → CEP → 시계열 → 스토리지 → 워크플로 → 분석 → 데이터 게이트웨이)와 단계마다 «실행 중 / 전체» 서비스 수. 화살표는 선언된 경로이지 실제 처리량이 아닙니다 — 실측 처리율은 더 아래 유입 흐름 카드에 있습니다
④서비스 — ③ 의 단계에 속한 서비스를 같은 순서로 펼쳐 봅니다. «메시징 3/4» 처럼 빈 단계는 여기서 어느 서비스인지 찾습니다
⑤컴포넌트 헬스 — 전체 · 비정상 · 주의 · 미측정 · 정상 · 멈춤. 미측정은 «정상» 이 아닙니다
⑥타임라인 — 컴포넌트별로 시간축에 상태를 칠합니다(24시간 / 48시간). 빗금은 기록이 없는 구간입니다
⑦언어 전환 — EN / KO. 주소에 ?lang=ko 를 붙여도 같습니다

알람 카드는 걸린 알람이 있을 때만 ② 와 ③ 사이에 나타납니다(연속 세 번 임계를 넘은 것만). 알람이 없으면 카드 자체를 그리지 않으므로 그림에는 없습니다. ⑥ 아래로는 시스템 게이지 · 유입 흐름 · 부하 · 스토리지 · 최근 이벤트가 이어집니다.

왼쪽의 좁은 세로 띠가 레일이고 그룹 9개가 아이콘으로 놓입니다. 레일은 아이콘만 보여줍니다 — 이름은 마우스를 올리면 툴팁으로 나옵니다.

그룹을 고르면 그 그룹의 화면들이 사이드바로 펼쳐집니다. 단, 화면이 하나뿐인 그룹은 사이드바가 없습니다 — 고를 것이 없는데 칸만 차지하기 때문입니다.

레일의 순서는 장애 때 사람이 묻는 순서입니다 — «지금 이상이 있나» → «어디가» → «무엇이 참인가» → «누구에게 알리나» → «무엇을 바꾸나» → «명령» → «다른 화면으로» → «무슨 일이 있었나».

화면은 모두 22개, 그룹은 9개입니다.

그룹구역화면무엇을 답하나
개요—대시보드지금 이상이 있는가
토폴로지—토폴로지 (탭: 데이터 흐름 · 노드)파이프라인의 어디가 막혔나, 나머지로는 데이터가 흐르나
관측상태상태 · 메트릭지금의 판정과, 지난 한 시간~이레의 추이
자원스토리지 · 보존볼륨 · WAL · 복제 슬롯 · 저장소 크기 / 무엇이 언제 지워지는가
활동워크플로우 · 이벤트 · 로그 · 진단 · 작업야간 잡이 돌았나, 무슨 일이 있었나 — 이벤트 저널, 서비스 로그, pd doctor, 잡 이력
알람—알람누구에게, 언제 알리는가
운영설정설정 · API 키 · 인증서템플릿과 렌더 결과의 diff, 템플릿 편집과 되돌리기 · 콘솔이 발행한 API 키 · 인증서
유지업그레이드 · 워커모듈별 버전, 클러스터 워커에 대해 무엇을 바꿔야 하나
백업백업백업 세트 · 스케줄 편집 · 실행 · 복원
명령—명령허용된 pd 동사를 화면에서 실행
도구—도구다른 제품 웹 UI 로 가는 카드
기록—감사이 콘솔에서 누가 무엇을 바꿨나
어시스턴트—어시스턴트지금 뭐가 문제고, 왜 그렇고, 뭘 하면 되나 — 게이트웨이 설정과 승인 카드까지

레일의 점 읽는 법​

레일의 점은 대시보드 아이콘에 하나뿐입니다. 어느 화면에 있든 「이 노드에 이상이 있나」를 보여 주고, 값은 /api/health 의 status, 즉 서버가 컴포넌트를 종합한 판정 그대로입니다. 자세한 내용은 대시보드에서 봅니다.

점뜻
OK서버의 종합 판정이 정상
WARN서버의 종합 판정이 경고
FAIL서버의 종합 판정이 실패
UNKNOWN (회색)판정을 믿을 수 없음 — 폴링이 멈췄거나, 서버의 수집기가 멈췄거나, 응답이 없거나, 모르는 판정
못 잰 것은 회색입니다 — 초록이 아닙니다

회색 점은 「정상」이 아니라 「못 쟀다」 입니다. 다른 그룹의 아이콘에는 점이 없습니다. 그 그룹이 정상이라는 뜻이 아니라, 그룹별 상태를 레일에 그리지 않는다는 뜻입니다.

조용한 것은 정상이 아닙니다. 음소거 · 규칙 꺼짐 · 최소 심각도 미만 · 억제 구간 · 채널 없음 — 알람이 소리를 내지 않는 이유는 다섯 가지이고, 콘솔은 그 다섯을 각각 다른 문장으로 알려 줍니다.

화면별로 알아 둘 것​

화면알아 둘 것
토폴로지두 탭은 한 시스템의 두 그림입니다 — 데이터 흐름(MQTT → Kafka → 소비자)과 노드(마스터 · 워커). 대시보드가 «이상이 있다» 고 하면 여기서 어느 구간인지 봅니다
상태 및 정보 → 컴포넌트행을 누르면 컴포넌트 상세로 들어갑니다. pd status 표와 같은 행이고 15초마다 갱신됩니다. 기동 직후 몇십 초의 STOPPED 는 창(window)입니다
로그pd logs --list 가 선언한 파일만 보여 줍니다. 앱 컨테이너(서버 · 배치 · 웨어하우스)의 로그는 여기 없습니다 — 호스트의 logs.sh 를 쓰세요
진단pd doctor 의 결과. «검사 실행» 버튼이 즉시 한 번 더 돌립니다. 한 번에 하나만 받으므로 «busy» 가 뜨면 잠깐 뒤 다시 누릅니다
작업백업 · 아카이브 · 유지 작업의 이력을 한 곳에서. 백업 화면은 백업만 따로 봅니다
설정«지금 렌더하면 무엇이 바뀌나»(pd config diff)와 «내 템플릿이 이미지 기본값과 다른가»(pd config diff --templates). 템플릿을 화면에서 고치면 리비전이 남아 되돌릴 수 있습니다. 값(비밀번호 · 주소)의 정본은 여전히 호스트입니다 → 설정 바꾸는 법
업그레이드이미지 태그(/etc/plantpulse-image.env)와 모듈별 버전·리비전(/etc/plantpulse-modules.json). 보고만 하고 올리지 않습니다 → 아래
워커클러스터 워커에 대해 무엇을 바꿔야 하는지 명령을 보여 줄 뿐, 실행하지는 않습니다. 실행은 호스트에서 합니다 → 클러스터 설치
백업세트 목록 · 스케줄 · 지금 도는 것. «Schedule editor» 가 pd backup schedule set 을 부릅니다. 일정은 systemd 타이머가 아니라 backup_schedule 표 + Quartz 입니다 → 백업 · 복원
명령서버가 정한 허용 목록의 pd 동사만 실행됩니다(목록이 화면 오른쪽에 그대로 보입니다). 그 밖의 명령은 컨테이너 셸에서 → pd CLI · 아래
도구다른 제품의 웹 UI 를 카드로 모아 새 탭으로 엽니다. 주소의 호스트는 지금 접속한 호스트를 따라가므로 어느 상자에서 열든 그 상자의 도구로 갑니다. 이 노드에 없는 서비스의 카드는 그려지지 않습니다
워크플로우Temporal 과 Kestra 둘을 함께 봅니다. 읽기 전용 — 이 화면은 실행·트리거·일시정지·종료를 하지 않습니다. "대상 아님" 은 아직 실행 기록이 없어 판정할 것이 없다는 뜻입니다
보존테이블 TTL · 토픽 보존 · 콜드 티어 · 아카이브 잡을 한곳에. 「없음」은 만료가 없는 표(카운터·현재값)입니다
자격증명따로 화면이 없습니다. 상태 및 정보 → 컴포넌트 상세의 카드에서 그 컴포넌트의 값을 한 건씩 보고 바꿉니다 → 아래
어시스턴트이 노드에 대해 말로 묻고, 승인 카드로 실행합니다. LLM 게이트웨이를 직접 연결해야 합니다 → 어시스턴트
감사이 콘솔에서 누가 무엇을 바꿨는지. 워커 노드에는 감사 저장소가 없어 항상 «읽을 수 없음» 으로 나옵니다 — 조용한 한 주가 아닙니다

주요 화면​

토폴로지 — 파이프라인의 어디가 막혔는지. 데이터 흐름과 노드, 두 탭입니다.

토폴로지 화면

상태 및 정보 — 컴포넌트별 판정. pd status 와 같은 행이고 15초마다 갱신됩니다. 맨 아래 컴포넌트 버전 표는 이 노드가 아니라 이 판의 구성입니다 — 공식 버전 · 우리 버전 · 포트 · 라이선스 · 출처 · 모듈. - 는 해당 없음입니다(그대로 쓰는 컴포넌트에는 우리 버전이 없고, 듣는 포트가 없는 것도 있습니다). 컴포넌트 상세에도 같은 값이 나옵니다.

상태 및 정보 화면

워크플로우 — 야간 아카이브와 배치 플로우가 제때 돌았는지. 엔진 둘을 함께 봅니다: Temporal(Aster TSDB → Iceberg 아카이브)과 Kestra(배치 플로우).

워크플로우 화면 — 엔진 카드 · 스케줄 · 최근 실행

읽기 전용입니다

실행은 엔진이 합니다. 이 화면은 트리거 · 일시정지 · 종료를 하지 않습니다 — 보기만 합니다. 스케줄을 바꾸는 자리는 백업 화면(또는 pd backup schedule set)입니다.

보존 — 무엇이 언제 지워지는가. Aster TSDB 테이블 TTL 과 크기, Kafka 토픽 보존, 콜드 티어와 그것을 채우는 아카이브 잡을 한 화면에 모읍니다.

보존 화면 — 테이블별 TTL · 크기 · 컴팩션

보존 기간을 눈으로 확인하는 가장 빠른 길

pp.tm_tag_point 의 TTL 이 3650일로 보입니다. 값을 바꾸는 방법은 데이터 보존 기간에 있습니다.

설정 — 「지금 렌더하면 무엇이 바뀌나」와 「내 템플릿이 이미지 기본값과 다른가」.

설정 화면 — 템플릿과 렌더 결과의 diff

백업 — 세트 목록 · 일정 · 지금 도는 것.

백업 화면

도구 — 다른 제품 웹 UI 를 카드로 모아 새 탭으로 엽니다.

도구 화면 — 제품별 카드

감사 — 이 콘솔에서 누가 무엇을 바꿨는지.

감사 화면

비어 있는 화면이 «이상 없음» 은 아닙니다

아직 데이터를 제공하지 않는 화면은 비어 있다고 알려 주면서, 그것이 «이상 없음» 이라는 뜻이 아니라고 함께 적습니다. 빈 화면을 정상으로 읽지 마세요.

관측 그룹의 네 화면​

앞의 「주요 화면」이 «무엇이 잘못됐나» 를 다뤘다면, 관측 그룹의 네 화면은 «왜 그런가» 를 답합니다. 넷 다 관측 → 상태 / 자원 / 활동 사이드바에서 옵니다.

메트릭 — 컴포넌트 하나의 측정 이력​

메트릭 화면 — 번호는 읽는 순서

번호자리하는 일
①사이드바관측 그룹의 화면들 — 상태 및 정보 · 메트릭 / 스토리지 · 보존 / 워크플로우 · 이벤트 · 로그 · 진단 · 작업
②좌측컴포넌트 목록 — 하나를 고릅니다
③목록 아래회색으로 칠해진 컴포넌트의 뜻과, 한 번에 하나만 조회한다는 안내
④우측 위구간 — 1시간 · 6시간 · 24시간 · 48시간 · 7일
⑤본문단위별로 묶인 차트 (% · B/S · BYTES · LOAD …)
대시보드와 나누어 둔 이유

대시보드는 아무것도 고르지 않고 읽는 분류 화면이라 하루보다 긴 구간이 없습니다. 이 화면은 반대로 컴포넌트 하나 · 구간 하나를 골라 파고드는 자리입니다.

7일보다 긴 구간과, 데이터레이크 자신이 아닌 «플랜트 데이터» 는 PlantPulse Dashboard 의 몫입니다. 이 화면에 「PlantPulse Dashboard 에서 열기」 링크가 없는 것은 일부러입니다 — 있는지 확인되지 않은 대시보드로 보내는 링크는 링크가 없는 것만 못합니다.

회색은 «없다» 가 아니라 «서버가 없다고 답했다» 입니다

컴포넌트가 회색으로 칠해지는 것은 그 컴포넌트에 대해 응답이 도착했고 그 응답이 「수집 안 됨」이었을 때뿐입니다. 아직 아무도 열어 보지 않은 컴포넌트에는 아무 표시도 하지 않습니다 — 짐작해서 칠하면 그것이 또 하나의 «지어낸 판정» 이 되기 때문입니다.

한 번에 한 컴포넌트만 조회합니다. 다른 컴포넌트를 고르면 요청이 옮겨 갈 뿐 늘지 않습니다.

스토리지 — 디스크에 무엇이 있고 얼마나 머무나​

스토리지 화면 — 번호는 읽는 순서

번호자리하는 일
①사이드바자원 구역 — 스토리지 · 보존
②맨 위볼륨 — 런타임 트리 · 데이터 · 임시 · 백업 각각의 사용률과 판정
③그 아래PostgreSQL WAL 과 복제 슬롯 — PG_WAL · MAX_SLOT_WAL_KEEP_SIZE · MAX_WAL_SIZE · 역할, 그리고 슬롯 표
④좌측 아래Aster TSDB 디스크 — 데이터 · 커밋 로그 · 스냅샷과 키스페이스별 크기
⑤우측 아래Kafka 디스크 — 설정 파일 · 로그 디렉터리 · 크기 · 보존 · 가장 오래된 세그먼트 · 다음 정리 예상
이 화면이 생긴 이유 — 멈춘 복제 슬롯이 디스크를 채운다

2026-09-03 에 실제로 있었던 일입니다. 복제 슬롯 replica_worker_1 이 비활성인 채로 1.4 GB 의 WAL 을 붙잡고 있었고 max_slot_wal_keep_size 는 -1(무제한)이었습니다. 제품의 어느 화면도 그것을 말해 주지 않아, 운영자가 알아챌 방법은 디스크가 가득 차는 것뿐이었습니다.

그래서 화면 순서가 이렇습니다 — 볼륨(차고 있나) → WAL·슬롯(무엇이 붙잡고 있나) → 저장소 크기와 보존(줄어들기는 하나). 슬롯 표의 «활성» 과 «붙잡은 WAL» 을 함께 보세요.

이벤트 — 이 노드에서 일어난 일​

이벤트 화면 — 번호는 읽는 순서

번호자리하는 일
①상단범위 — 24시간 / 7일
②그 옆종류 필터 — 알람 발생·해소 · 시작·시작됨 · 정지·정지됨 · 재시작 · 백업 시작·종료 · 작업 시작·종료 · 부팅 · 배포 · 운영자 · PD
③카드 머리이벤트 (N) — 지금 범위에 걸린 건수
④표 머리시각 · 종류 · 컴포넌트 · 심각도 · 메시지
⑤본문실패한 백업처럼 ERROR 인 줄은 빨강으로 갈립니다

감사 기록이 같은 화면 아래에 붙습니다. 「무슨 일이 있었나」와 「우리가 무엇을 했나」는 장애 중에는 같은 질문이라, 두 화면에 나눠 두면 시계를 두 번 읽어야 합니다. 같은 시간 범위로 아래에 이어 붙여, 01:25 의 재시작과 그것을 시킨 운영자가 나란히 놓입니다.

메모리 저장소면 재시작에서 사라집니다

저장소가 memory 인 노드는 최근 수백 건만 RAM 에 들고 있다가 재시작하면 잃습니다. 화면이 그렇다고 한 줄로 알려 줍니다 — 반쪽짜리 이력을 온전한 것처럼 읽지 마세요.

읽지 못한 이벤트 저장소를 «조용한 밤» 처럼 그리지 않습니다. 로딩 · 이벤트 있음 · 범위가 빈 것 · 아직 제공되지 않는 엔드포인트 · 못 잰 것(이유 포함) 다섯을 각각 다르게 그립니다.

알람 — 무엇을 알람으로 셀지, 그리고 어디로 알릴지​

알람 화면 — 번호는 읽는 순서

번호자리하는 일
①맨 위활성 알람 — 지금 걸린 것. 없으면 「활성 알람이 없습니다」
②가운데규칙 카드
③표 머리컴포넌트 · 알림 · 연속 · 억제(초) · 이상일 때 · 출처 · 동작
④한 줄컴포넌트 하나의 규칙. [고치기] 로 그 줄만 바꿉니다
⑤아래채널 카드 + [채널 추가] — 「켜진 채널 N개」
⑥그 아래채널이 없으면 그렇다고 말합니다

세 카드가 한 화면에 있는 것은 한 질문을 세 번 묻는 것이기 때문입니다 — 지금 이상이 있나(활성) · 무엇을 이상이라 부르기로 했나(규칙) · 누가 그것을 듣나(채널). 셋을 나누면 조용히 비어 있을 수 있는 세 번째를 아무도 열어 보지 않습니다.

조용한 것은 정상이 아닙니다 — 이유가 다섯 가지입니다

활성 알람이 소리를 내지 않는 이유는 다섯이고, 화면은 각각을 다른 문장으로 적습니다.

화면 문구뜻
음소거됨그 알람을 사람이 껐다
규칙이 꺼져 있음규칙 표의 «알림» 이 꺼짐
최소 심각도 미만규칙의 «이상일 때» 기준에 못 미침
억제 구간 안규칙의 «억제(초)» 창 안에 있음
채널이 없음내보낼 곳이 없음

머리에 「그중 N개가 조용합니다」 가 함께 나옵니다. 하나의 «무음» 뱃지로 뭉뚱그리지 않는 이유는, 다섯 가지 대처가 각각 다르기 때문입니다.

그리고 설정을 읽지 못한 것을 «설정이 없다» 로 그리지 않습니다. 서버가 store: "NA" 와 이유를 주면 표 위에 그 문장을 적습니다 — 갓 설치한 것처럼 빈 화면을 그리지 않습니다. 설정을 저장할 수 없는 노드에서는 편집 버튼이 아예 사라집니다. 눌리는 회색 버튼은 「저장했다」고 답하고 아무것도 바꾸지 않기 때문입니다.

활동 그룹의 네 화면 — 무슨 일이 있었나​

작업 — 오래 걸린 일 전부를 한 원장에​

작업 화면 — 번호는 읽는 순서

번호자리하는 일
①맨 위지금 실행 중 — 없으면 없다고 말합니다
②그 아래종류 · 상태 필터 — 백업 · 복원 · 복원 계획 · 덤프 · 진단 · 시작 · 정지 · 재시작 · 설정 렌더 · PD / 실행 중 · 성공 · 실패 · 알 수 없음
③카드 머리이력 (N)
④표 머리상태 · 종류 · 대상 · 시작 · 소요 · 주체 · 출처 · 메시지
⑤실패 행실패는 이유까지 한 줄에 — 예: 「exit 0 인데 저장소가 자라지 않았다 — 아무것도 쓰이지 않았다」
⑥알 수 없음 행「pd restart 는 완료 줄을 쓰지 않는다 — 결과가 저널에 없다」
⑦출처 열백업 원장 / pd 저널 — 어느 장부에서 온 줄인지
이 화면이 생긴 이유 — 장부가 셋이었다

백업 · 복원 · 덤프 · pd doctor · 서비스 조작은 모두 몇 분씩 걸리는데, 끝나면 서로 다른 곳에 기록이 남았습니다 — 콘솔의 작업 원장, 백업 원장, 그리고 브라우저에서 시작하지 않은 실행에 대한 pd 자신의 저널. 화면마다 자기 몫만 보여 주니 「오늘 이 상자에서 무엇이 돌았고 잘 됐나」 는 감사 로그로만 답할 수 있었는데, 감사 로그는 HTTP 호출을 적지 결과를 적지 않습니다.

«알 수 없음» 은 실패도 성공도 아닙니다

별도의 결과로 그립니다. 예컨대 pd restart 는 완료 줄을 남기지 않아 결과가 저널에 없습니다 — 그것을 성공으로 칠하면 거짓말이고 실패로 칠해도 거짓말입니다.

여기서는 아무것도 시작·취소·재시도하지 않습니다. 그 일들은 확인 절차와 영향 범위가 이미 적혀 있는 화면(백업 · 진단)에 있습니다. 취소 버튼이 없는 것은 이 서버에 실행을 취소하는 엔드포인트가 없기 때문입니다.

로그 — 이 노드에 «있는» 로그​

로그 화면 — 번호는 읽는 순서

번호자리하는 일
①좌측 머리로그목록
②첫 줄기동 뱃지가 붙은 부팅 로그
③목록컴포넌트 · 파일명 · 크기 · 마지막 갱신
④우측 머리로그내용
⑤찾기문자열 — 리터럴이고 정규식이 아닙니다 · 레벨 칩 (TRACE · DEBUG · INFO · WARN · ERROR)
⑥기간부터 ~ 까지 · [검색] · [지우기]
⑦우상단줄바꿈 토글
경로를 브라우저가 정하지 않습니다

클라이언트는 경로를 말하지 않습니다. 서버가 발급한 id 를 보내고 경로는 서버가 들고 있습니다 — 빠져나갈 ?path= 같은 파라미터가 아예 없습니다.

로그 본문은 텍스트로만 그려집니다. 로그 한 줄에 <script> 가 들어 있을 수 있고, 그것을 실행하는 로그 뷰어는 운영 콘솔에 뚫린 구멍이기 때문입니다.

「선언됐지만 디스크에 없는 파일」은 「빈 파일」이 아닙니다

결과가 둘이 아니라 셋입니다 — 읽었다 / 서버가 pd 에게 물어보지 못했다 / 선언은 됐는데 파일이 없다. 뒤의 둘은 「이 노드에 로그가 없다」 나 「빈 파일」 이 아니라 못 쟀다로 그립니다.

목록에 나오는 것은 pd logs --list 가 선언한 파일뿐입니다. 앱 컨테이너(서버 · 배치 · 웨어하우스)의 로그는 여기 없습니다 — 호스트의 logs.sh 를 쓰세요.

진단 — pd doctor 가 잰 것​

진단 화면 — 번호는 읽는 순서

번호자리하는 일
①제목 옆모드 — MASTER / 워커
②안내「마지막 실행」이라는 것과 [검사 실행] 버튼
③그 아래진단 결과 (언제 잰 것인지)
④요약실패 · 대상 아님 · 통과 · 검사 수
⑤그룹 카드inputs · tools · … 그룹별로 갈라 놓습니다
⑥표 머리판정 · 검사 · 내용
폴링하지 않습니다 — 화면 숫자는 «마지막 실행» 입니다

pd doctor 는 검사를 전부 돌려 3초쯤 걸리므로 주기적으로 돌리지 않습니다. 화면의 결과는 이 노드가 들고 있는 마지막 실행이고, ③ 의 시각이 그것을 언제 쟀는지 말합니다. 다시 재려면 [검사 실행] 을 누르세요 — 한 번에 하나만 돌아서 「busy」가 뜨면 잠깐 뒤 다시 누릅니다.

「대상 아님 0」 과 「못 쟀다」 는 다릅니다

답이 다섯이고 각각 다르게 그립니다 — 엔드포인트가 아직 없음 / 세션 끊김 / 요청 실패 / 명령이 아예 돌지 못함(사유 필수) / 명령은 돌았는데 검사가 0건.

특히 뒤의 둘이 중요합니다. 문서 상태가 na 인 것은 「전부 통과」가 아닙니다 — 아무것도 재지 못한 것이고 사유가 반드시 붙습니다. 검사 목록이 빈 것은 또 다른 셋째입니다. 둘 중 어느 것이든 빈 패널로 그리면 아무것도 재지 않은 화면에서 「이상 없음」을 읽게 됩니다.

「대상 아님」 항목에는 행마다 사유가 붙습니다 — 화면이 그렇게 안내합니다.

워커 — 명령을 «보여 줄» 뿐입니다​

워커 화면 — 번호는 읽는 순서

번호자리하는 일
①카드 머리워커 (잰 시각)
②표 머리워커 · 주소 · 명부 · 링 · POSTGRESQL · 슬롯 · REDIS · 헬스 · 상태
③한 줄워커 하나. 복제 슬롯 이름과 뒤처진 양까지 한 줄에
④그 아래워커 헬스 — 펼치면 상세
⑤다음 카드무엇을 쟀나
⑥통과 항목워커 명부(/etc/kopens/workers.roster) · Aster TSDB 링 · PostgreSQL · Redis 복제본 · 워커 헬스 에이전트 · 이 노드 자신의 주소
⑦대상 아님워커 컨테이너 · 워커 볼륨 — 사유가 그대로 적힙니다
보여 준다고 실행한 것이 아닙니다

워커를 넣고 빼는 명령(worker-add.sh · worker-decommission.sh · worker-remove.sh)은 Docker 데몬 · 명부 파일 · compose 오버레이를 건드리는데, 그 셋은 전부 호스트에 있습니다. 이 화면 뒤의 API 는 데이터레이크 컨테이너 안에서 돌고 Docker 소켓이 없습니다.

그래서 넷으로 구분을 지켜 둡니다 —

  1. 동사 모양의 컨트롤이 없습니다. 화면의 유일한 버튼은 복사입니다
  2. 모든 명령은 「호스트에서 실행」 이라는 제목과 작업 디렉터리를 달고 나옵니다
  3. 명령이 화면에 있는 동안은 읽기 전용 안내가 늘 함께 있고, 그 문구는 서버의 것 입니다 — 화면이 API 의 주장과 어긋날 수 없게
  4. 위 셋이 깨지면 빌드가 실패합니다

바꿀 것이 없으면 명령 카드 자체가 나오지 않습니다 — 위 그림이 그 상태입니다.

「대상 아님」 은 「이상 없음」 이 아닙니다

위 그림의 워커 컨테이너 · 워커 볼륨이 그렇습니다. 사유가 그대로 적혀 있습니다 — Docker 소켓이 이 컨테이너에 마운트되지 않아 여기서는 들여다볼 수 없다는 뜻이지, 문제가 없다는 뜻이 아닙니다.

운영·명령 두 화면과 자격증명​

이것들은 바꾸는 쪽에 가까워, 「무엇을 보여 주는가」보다 **「무엇을 하지 않는가」**가 더 중요합니다.

업그레이드 — 보고만 한다​

업그레이드 화면 — 번호는 읽는 순서

번호자리하는 일
①사이드바운영 그룹 — 설정 / 업그레이드 · 워커 / 백업
②카드 머리지금 이 노드
③이미지 태그빌드된 이름 · build.version · 굽기 커밋 · 빌드 날짜 · 읽은 곳(/etc/plantpulse-image.env) · 판정
④그 아래이미지 다이제스트는 호스트에서 확인한다는 설명 — 이미지 안에서는 알 수 없습니다
⑤다음 카드이 이미지를 이루는 프로젝트 — 「N 중 M 개가 여기서 리비전을 밝힙니다」
⑥표프로젝트 · 판정 · 버전 · 리비전 · 읽은 곳(MANIFEST · build-info.json · dist.env … 프로젝트마다 다릅니다)
이 화면은 «올려 주지» 않습니다 — 명령을 «보여 줄» 뿐입니다

서버로 나가는 유일한 버튼은 사전 점검이고 그것도 읽기 전용 진단(pd doctor)입니다. 명령 블록에 달린 컨트롤은 복사 하나뿐이며, 그 버튼의 이름은 어떤 언어에서도 「복사」입니다 — 「실행」도 「적용」도 아닙니다.

그리고 「최신입니다」 류의 문장은 번들에 아예 들어 있지 않습니다. 이 노드는 자기가 돌고 있는 이미지 태그를 볼 수도, 나와 있는 버전을 조회할 수도 없습니다. 안심시키는 문장은 지어낸 말이 되고, 그것을 읽은 운영자는 더 찾아보기를 그만둡니다 — 이 화면이 할 수 있는 가장 위험한 거짓말이라 아예 만들지 않았습니다.

pd doctor 는 측정에 3초 남짓 걸려 주기적으로 돌리지 않습니다. 버튼을 누르면 잡으로 돌고 그 잡을 폴링합니다.

명령 — 셸이 아니다​

명령 화면 — 번호는 읽는 순서

번호자리하는 일
①맨 위상시 안내 — 「정해진 명령만 실행합니다」
②터미널 머리콘솔 이름과 상태 점 — 준비 · 전송 중 · 스트리밍 · 끊김
③본문출력(스크롤백 · ANSI 색)
④맨 아래 줄프롬프트 — Tab 완성 · ↑↓ 기록 · Ctrl+L 지우기
⑤우측 머리「읽기 전용 N개, 노드를 바꾸는 것 M개」
⑥우측읽기 전용 동사들 (help version status storage flow env doctor config list config diff node status logs --list backup list backup status backup schedule)
⑦그 아래노드를 바꿈 — 빨간 테두리로 갈라 둡니다 (config render)
터미널처럼 보이지만 셸이 아닙니다

느낌만 터미널입니다 — 기록 · 스크롤백 · ANSI 색 · Tab 완성. 실제로 도는 것은 서버가 강제하는 pd 허용 목록뿐입니다.

이것을 셸로 오해한 사람은 거절을 «버그» 로 읽습니다. 그래서 안내가 스크롤백의 색깔 있는 한 줄이 아니라 화면에 늘 떠 있는 요소입니다 — 스크롤로 밀려 올라간 경고는 더 이상 경고가 아닙니다.

허용 목록은 화면이 뜰 때마다 서버에서 받아옵니다. 문서나 코드에 사본을 두지 않습니다 — 사본은 언젠가 어긋나고, 그때 운영자가 읽는 것은 어긋난 쪽입니다. 목록을 못 받으면 자동완성이 꺼지고 그렇다고 말합니다 — 짐작한 목록으로 대신하지 않습니다.

노드를 바꾸는 명령은 확인을 받고서야 실행됩니다. 그리고 거절당하면 서버가 준 거절 사유가 그대로 화면에 나옵니다 — 「실패」로 뭉뚱그리면 제품의 안전장치가 원인 모를 오류로 보이기 때문입니다.

출력에 섞인 자격증명은 서버에서 가려집니다

화면 안내 그대로입니다 — 「이 출력의 자격증명은 서버를 떠나기 전에 가려집니다」. 브라우저가 받아서 감추는 것이 아니라, 애초에 오지 않습니다.

자격증명 — 컴포넌트 상세의 카드​

자격증명은 그 값을 쓰는 컴포넌트의 페이지에서 보고 바꿉니다. 별도의 자격증명 화면은 없습니다. 상태 및 정보 화면에서 컴포넌트 행을 눌러 상세로 들어가면 자격증명 카드가 있고, 서버가 그 컴포넌트에 대어 주는 자격증명이 없으면 카드도 나오지 않습니다.

열내용
항목그 값이 무엇인가 — 관리자 계정 · 내부 API 키 등
환경변수변수 이름
계정계정 이름. 읽기 전용입니다
비밀번호 / 키점으로 가려져 있고, 값 보기로 그 한 건만 드러냅니다
접속 확인접속 확인됨 · 값이 맞지 않음 · 확인 못 함 (연결 안 됨) · 접속 확인 대상 아님
마지막 변경마지막으로 바뀐 시각
끝[변경], 또는 바꿀 수 없는 사유(잠김)

카드 아래에는 이 컴포넌트의 최근 변경 요청 셋이 나오고, 실패한 요청은 [다시 실행] 할 수 있습니다. 전체 기록은 감사 화면에 있습니다.

값은 «누르면» 보입니다 — 그리고 그 누름이 기록됩니다

목록에는 민감한 값이 실려 있지 않습니다. 값 보기를 누르면 그 변수 이름 하나로 따로 요청을 보내 값 하나만 받아 옵니다. 이 요청은 POST 이므로 감사에 남고, 이름이 주소에 실리지도 않습니다.

변경은 대기열에 들어가고, 스택이 다시 뜹니다

[변경] 은 값을 바로 바꾸지 않습니다. 패널이 진행 순서를 먼저 보여 주고, 생성 (32자) 또는 값 입력을 고른 뒤 콘솔 비밀번호와 변수 이름을 다시 입력해야 대기열에 들어갑니다.

  1. 새 값을 암호화해 저장하고 변경을 대기열에 넣습니다
  2. 데이터레이크 안에서, 이 값을 확인하거나 읽는 곳에 적용합니다
  3. 데이터레이크의 모든 서비스를 새 값으로 다시 띄웁니다 — 수 분 중단됩니다. 이 값을 받아 쓰는 다른 제품은 자기 컨테이너를 다시 만들 때 새 값을 받습니다
  4. 각 컴포넌트가 새 값으로 접속되는지 확인합니다. 단계가 실패하면 요청은 실패로 남고, 같은 값으로 다시 실행합니다

콘솔은 계정이 하나이고 역할이 없어, 로그인한 사람은 모든 자격증명을 바꿀 수 있습니다. 비밀번호와 변수 이름을 다시 받는 것이 그 대신의 안전장치입니다. 비밀번호와 새 값이 지나가므로 4950(TLS) 에서 하세요.

생성된 값은 요청했을 때 한 번만 보입니다. 다시 표시할 수 없습니다.

«여기서 못 읽음» 을 «설정 안 됨» 으로 읽지 마세요

값 칸의 빈 값은 정말로 비어 있다는 뜻이고, 여기서 못 읽음은 이 콘솔이 그 값을 읽지 못했다는 뜻입니다. 잠긴 행에는 사유가 붙습니다 — 계정 이름은 바꾸지 않음, 다른 값에서 계산됨, 바꿀 현재 값이 없음, 바꾸는 도구가 아직 없음.

호스트에서 바꾸는 절차는 비밀번호 바꾸기에 있습니다.

도구 화면의 카드​

카드주소무엇
CEPhttps://<호스트>:7401/EQL 규칙과 그것이 매칭한 이벤트
PlantPulse Dashboardhttps://<호스트>:3000/시계열 데이터의 대시보드
Timeseries Enginehttps://<호스트>:7801/시계열 데이터가 아니라 엔진 자체의 관리 화면
Sparkhttp://<호스트>:4440/Spark 마스터 · 워커 · 실행 중인 애플리케이션
Temporalhttp://<호스트>:8233/워크플로우 실행과 이력
Kestrahttps://<호스트>:8380/데이터 파이프라인 — 플로 · 실행 · 로그
RustFShttp://<호스트>:9001/오브젝트 스토리지 — 버킷 · 객체 · 액세스 키
Data Gatewayhttps://<호스트>:5501/SQL 실행 콘솔. 옛 SQL 도구 카드는 이것으로 합쳐졌습니다(2026-09-07)

카드가 여는 도구 중 셋은 사용법을 따로 정리해 두었습니다 — 데이터 게이트웨이 콘솔 · 시계열 분석기 · CEP 콘솔.

TLS 쌍둥이 포트가 있는 화면은 TLS 쪽으로 링크됩니다. 이 콘솔이 TLS(4950)라, 평문 주소를 건네지 않기 위해서입니다.

콘솔이 pd 를 얼마나 자주 부르나​

콘솔의 화면은 요청마다 pd 를 돌리지 않습니다. 백엔드의 수집 루프가 한 번에 하나씩 돌리고 마지막 문서를 캐시하며, 화면은 그 캐시를 읽습니다.

동사주기
pd status --json · pd logs --list15초
pd node status --json · pd storage --json30초
pd flow --json · pd config diff --json · pd env --json60초
pd doctor --json · pd retention --json · pd config diff --templates --json300초

주기대로면 60초 중 약 46초가 pd 를 돌리는 데 쓰입니다. 그래서 콘솔이 떠 있는 상자에서 pd status 가 가끔 느린 것은 정상입니다.

헬스 API​

콘솔이 그리는 화면은 전부 /api/* 위에 있고, 전체 목록과 스키마는 콘솔이 /api/openapi.json 을 읽어 API 표로 보여 줍니다.

curl -kfsS https://<서버IP>:4950/api/health | jq # TLS
curl -fsS http://<서버IP>:4949/api/health | jq # 평문 — 같은 API
docker exec plantpulse-datalake curl -kfsS https://127.0.0.1:4950/api/health | jq # 컨테이너 안 — 어떤 구성에서도
curl -kfsS https://<서버IP>:4950/api/services | jq # 서비스 목록과 상태

호스트의 status.sh · ops-check.sh · doctor.sh · stack-verify-boot.sh 가 모두 이 /api/health 를 읽습니다. /api/health 는 인증 없이 답하고, 그 밖의 API 는 로그인 세션이나 X-API-Key(로그 엔드포인트)가 필요합니다.

Prometheus 연동​

https://<서버IP>:4950/metrics 를 스크레이프합니다. 자체 서명 CA 면 insecure_skip_verify 를 켭니다. 플랫폼 동봉 PlantPulse Dashboard(3000)나 외부 Grafana 에서 데이터 소스로 연결하세요.

자주 발생하는 문제​

증상원인조치
콘솔이 열리지 않음 · «설정되지 않았습니다»PP_DATALAKE_ADMIN_PASSWORD 가 비어 있음웹 화면 로그인 계정
4949 는 되는데 4950 이 안 됨인증서 문제브라우저 경고를 확인하거나 보안 설정에서 인증서 교체
헬스 엔드포인트 응답 없음데이터레이크 컨테이너 이상호스트에서 status.sh → logs.sh plantpulse-datalake
화면 전체가 «Not measured»폴링이 멈췄거나 옛 이미지pd env 의 IMAGE_BUILT_AT 을 봅니다. 2026-09-04 이전 admin-api 는 «Another job is already running» 을 자주 냈습니다
도구 카드가 안 그려짐그 서비스가 이 노드에 없음(워커) 또는 폴링 미응답마스터 노드의 콘솔로
Prometheus 스크레이프 5xx백엔드 모듈 다운status.sh 로 의존 모듈 확인
감사 화면이 «읽을 수 없음»워커 노드정상 — 마스터에서 보세요

관련 문서​