콘텐츠로 이동

Guance 데이터 전송을 위한 Doris 사용자 권한 구성

Guance 데이터 전송 기능은 Apache Doris Stream Load 방식을 통해 데이터를 Doris 데이터베이스에 기록합니다. 데이터를 정상적으로 가져오려면 Guance이 Doris에서 해당 권한을 가진 사용자를 생성해야 합니다.

사용자 역할 확인

다음 중 사용자 역할에 맞는 작업 경로를 선택하세요.


사전 조건

  • Apache Doris 클러스터(1.2.x 이상) 배포 완료
  • 대상 데이터베이스 이름 확인(예: guance_data)
  • 대상 테이블 이름 확인(예: log_archive 또는 Guance에서 자동 생성)
  • Doris FE의 HTTP 포트(기본값 8030)가 Guance 서비스에서 접근 가능

최소 권한 설명

Guance 데이터 전송 Doris 사용자에게는 다음 권한이 필요합니다.

권한 용도 필수 여부
INSERT_PRIV 대상 테이블에 데이터 삽입
LOAD_PRIV 데이터 쓰기 권한(Insert, Delete 등 포함), Stream Load 시나리오 지원 예(INSERT_PRIV와 함께 부여하여 호환성 보장)
CREATE_PRIV '자동 테이블 생성' 기능 사용 시 테이블 생성 필요 자동 테이블 생성 시나리오에서 필수
권한 관계

Doris 공식 문서에 따르면 Stream Load 최소 권한은 INSERT_PRIV입니다. LOAD_PRIV는 더 포괄적인 데이터 쓰기 권한 패키지(Insert, Delete 등 포함)로, 함께 부여하면 다양한 버전에서 호환성을 보장합니다. CREATE_PRIV는 Guance이 자동으로 테이블을 생성할 때만 필요합니다.


경로 A: 관리자 작업 단계

1단계: Doris 관리 노드 연결

MySQL 클라이언트를 통해 Doris FE 관리 포트에 연결합니다.

mysql -h <Doris_FE_IP> -P 9030 -u root -p
참고

관리 작업은 MySQL 프로토콜 포트(기본값 9030)를 사용하며, HTTP 포트(8030)가 아닙니다. HTTP 포트는 Stream Load 데이터 가져오기에만 사용됩니다.

2단계: 대상 데이터베이스 생성(없는 경우)

CREATE DATABASE IF NOT EXISTS guance_data;

3단계: 전용 사용자 생성

CREATE USER 'guance_writer'@'%' IDENTIFIED BY 'your_secure_password';
권장 사항
  • 사용자 이름에 guance 접두사를 포함하여 용도를 식별하기 쉽게 지정
  • 비밀번호는 16자 이상, 대소문자, 숫자 및 특수 문자 포함 권장
  • '%'는 모든 IP 연결을 허용합니다. 출처를 제한해야 하는 경우 Guance 서비스의 송신 IP 또는 네트워크 세그먼트(예: 'guance_writer'@'10.0.0.%')로 변경 가능

4단계: 권한 부여

시나리오 A: '자동 테이블 생성' 사용(권장)

Guance이 데이터 유형에 따라 대상 테이블을 자동으로 생성합니다. 데이터베이스 수준 권한 부여가 필요합니다.

-- 데이터베이스 수준 권한 부여(테이블 생성, 가져오기 포함)
GRANT CREATE_PRIV, INSERT_PRIV, LOAD_PRIV ON guance_data.* TO 'guance_writer'@'%';

시나리오 B: '기존 테이블' 사용

대상 테이블이 미리 생성되어 있으며, 테이블 수준 쓰기 권한만 부여하면 됩니다.

-- 테이블 수준 권한 부여(가져오기)
GRANT INSERT_PRIV, LOAD_PRIV ON guance_data.log_archive TO 'guance_writer'@'%';
참고

여러 테이블에 쓰기 권한이 필요한 경우 각 테이블에 개별적으로 권한을 부여하거나 guance_data.*를 사용하여 전체 데이터베이스에 권한을 부여할 수 있습니다.

5단계: 권한 확인

1. 사용자 로그인 확인

mysql -h <Doris_FE_IP> -P 9030 -u guance_writer -p

비밀번호 입력 후 정상적으로 로그인되면 사용자 생성이 완료된 것입니다.

2. 사용자 권한 확인

SHOW GRANTS FOR 'guance_writer'@'%';

예상 출력에는 다음이 포함되어야 합니다.

+--------------------------------------------------+
| Grants for guance_writer@%                       |
+--------------------------------------------------+
| GRANT INSERT_PRIV, LOAD_PRIV ON guance_data.*    |
| GRANT CREATE_PRIV ON guance_data.*               |  -- 자동 테이블 생성 시나리오만 해당
+--------------------------------------------------+

3. Stream Load 확인(선택 사항)

curl을 사용하여 Stream Load 요청을 시뮬레이션합니다(Guance 백엔드 동작과 동일).

curl --location-trusted -u guance_writer:your_secure_password \
  -H "label:test_guance_001" \
  -H "format:json" \
  -H "strip_outer_array:true" \
  -X PUT \
  http://<Doris_FE_IP>:8030/api/guance_data/log_archive/_stream_load \
  -d '{"host":"test","message":"hello"}'

예상 반환값:

{
    "Status": "Success",
    "NumberLoadedRows": 1,
    "NumberFilteredRows": 0
}
참고

Fail 또는 Label Already Exists가 반환되면 네트워크 연결 상태와 label 고유성을 확인하세요.


경로 B: DBA용 원클릭 권한 부여 스크립트

Doris 관리자가 아닌 경우 다음 스크립트를 전체 복사하여 회사 DBA 또는 운영 담당자에게 전달하여 실행하세요.

-- ============================================
-- Guance 데이터 전송 - Doris 사용자 권한 부여 스크립트
-- 
-- DBA가 실행 후 다음 정보를 요청자에게 전달하세요.
--   1. 사용자 생성 확인: guance_writer
--   2. 데이터베이스 생성 확인: guance_data(또는 요청자가 지정한 데이터베이스 이름)
--   3. FE의 HTTP 포트 8030이 Guance 서비스에 개방되어 있는지 확인
-- ============================================

-- 1단계: 데이터베이스 생성(없는 경우)
CREATE DATABASE IF NOT EXISTS guance_data;

-- 2단계: 전용 사용자 생성(비밀번호를 강력한 비밀번호로 변경)
CREATE USER IF NOT EXISTS 'guance_writer'@'%' IDENTIFIED BY '강력한 비밀번호로 변경';

-- 3단계: 권한 부여
-- Guance 자동 테이블 생성이 필요한 경우(권장):
GRANT CREATE_PRIV, INSERT_PRIV, LOAD_PRIV ON guance_data.* TO 'guance_writer'@'%';

-- 테이블이 이미 존재하고 쓰기 권한만 필요한 경우(아래 줄 주석 해제, 위 줄 주석 처리):
-- GRANT INSERT_PRIV, LOAD_PRIV ON guance_data.* TO 'guance_writer'@'%';

-- 4단계: 확인(선택 사항)
SHOW GRANTS FOR 'guance_writer'@'%';

DBA 실행 후 확인 사항:

  • 사용자 guance_writer가 생성되었고 잠금 상태가 아님
  • 데이터베이스 guance_data가 존재함
  • 권한이 적용됨(SHOW GRANTS 출력에 INSERT_PRIV, LOAD_PRIV 포함)
  • Doris FE의 HTTP 포트(8030)가 Guance 서비스 네트워크에서 접근 가능

확인 방법(권장: Guance 인터페이스)

수동 curl 대신 Guance 인터페이스를 통해 확인하는 것을 권장합니다.

  1. Guance 콘솔 로그인 → 관리 → 데이터 전송 → 규칙 생성
  2. 1단계: 규칙 이름 입력
  3. 2단계: 전송 규칙 정의(선택 사항, 예: 필터 조건)
  4. 3단계:
    • 보관 유형에서 Apache Doris 선택
    • 연결 주소 입력(예: 192.168.1.1:8030)
    • 데이터베이스 이름 입력(예: guance_data)
    • 사용자 이름 입력(예: guance_writer)
    • 비밀번호 입력
    • 대상 테이블 이름 입력(예: log_archive)
  5. '연결 테스트' 버튼 클릭

확인 결과 판단:

메시지 의미 다음 단계
연결 성공 권한 및 네트워크 정상 규칙 구성 완료
연결 시간 초과 네트워크 연결 불가 또는 포트 오류 방화벽 확인, 8030 포트 개방 여부 확인
인증 실패 사용자 이름 또는 비밀번호 오류 비밀번호에 특수 문자 포함 여부 확인, 사용자 존재 여부 확인
권한 부족 INSERT_PRIV / LOAD_PRIV / CREATE_PRIV 부족 DBA가 권한 부여 스크립트 재실행
테이블 없음 자동 테이블 생성 실패 사용자에게 CREATE_PRIV 권한 확인, 또는 '기존 테이블 사용'으로 변경 후 수동 테이블 생성

권한 회수(삭제 필요 시)

-- 모든 권한 취소
REVOKE ALL PRIVILEGES ON guance_data.* FROM 'guance_writer'@'%';

-- 사용자 삭제
DROP USER 'guance_writer'@'%';

자주 묻는 질문

Q1: 연결 테스트 시 '인증 실패' 메시지

확인 단계: 1. Guance 구성의 사용자 이름 및 비밀번호가 Doris에서 생성한 것과 일치하는지 확인 2. 비밀번호에 이스케이프 문제를 일으킬 수 있는 특수 문자(@, #, $ 등)가 포함되지 않았는지 확인(따옴표로 감싸거나 사용하지 않는 것이 좋음) 3. 사용자가 잠금 상태가 아닌지 확인:

```sql
SELECT user, host, password_expired FROM mysql.user WHERE user='guance_writer';
```

Q2: 연결 테스트 시 '권한 부족' 메시지

확인 단계:

  1. Doris에서 SHOW GRANTS FOR 'guance_writer'@'%'를 실행하여 권한이 부여되었는지 확인
  2. '자동 테이블 생성' 사용 시 CREATE_PRIV 권한이 부여되었는지 확인
  3. '기존 테이블' 사용 시 해당 테이블에 INSERT_PRIVLOAD_PRIV 권한이 부여되었는지 확인
  4. Guance 구성의 데이터베이스 이름 및 테이블 이름이 권한 부여 대상과 일치하는지 확인

Q3: Stream Load가 'Fail'을 반환하지만 권한은 구성됨

확인 단계:

  1. Doris BE 노드에 접근 가능한지 확인(Stream Load는 FE를 통해 BE로 리디렉션됨)
  2. 대상 테이블이 존재하는지 확인(자동 테이블 생성 시나리오에서는 최초 쓰기 시 자동으로 테이블 생성)
  3. 테이블 필드 유형이 데이터와 호환되는지 확인(엄격 모드에서 유형 불일치 시 실패)
  4. label이 중복되지 않는지 확인(동일 label은 24시간 내에 재사용 불가)

Q4: '자동 테이블 생성' 사용 시 테이블 생성 실패

확인 단계:

  1. 사용자에게 CREATE_PRIV 권한이 있는지 확인
  2. 데이터베이스가 존재하는지 확인(CREATE DATABASE IF NOT EXISTS)
  3. 테이블 이름이 충돌하지 않는지 확인(시스템이 CREATE TABLE IF NOT EXISTS를 사용하므로 기존 테이블을 덮어쓰지 않음)
  4. Doris 클러스터의 디스크 공간이 충분한지 확인

Q5: Guance에서 '연결 시간 초과' 메시지

확인 단계:

  1. Doris FE의 HTTP 주소와 포트(8030)가 올바르게 입력되었는지 확인
  2. Guance 서비스에서 Doris까지의 네트워크 연결 가능 여부 확인(방화벽, 보안 그룹, VPC 피어링 등)
  3. Doris가 내부 네트워크에 있는 경우 Guance 워크스페이스와 Doris가 동일한 네트워크 환경에 있거나 네트워크가 연결되어 있는지 확인

최소 권한 빠른 참조 표

시나리오 필요 권한 SQL 예시
자동 테이블 생성 + 쓰기 CREATE_PRIV, INSERT_PRIV, LOAD_PRIV GRANT CREATE_PRIV, INSERT_PRIV, LOAD_PRIV ON db.* TO 'user'@'%'
기존 테이블에만 쓰기 INSERT_PRIV, LOAD_PRIV GRANT INSERT_PRIV, LOAD_PRIV ON db.table TO 'user'@'%'

참고 문서


문서 평가

이 페이지가 도움이 되었나요?