커넥터 감시 로깅
모든 MCP, Telegram 및 ChatGPT 도구 호출에 대한 감시 추적 — 준수, 비용 추적 및 사건 조사.
MCP, Telegram 또는 ChatGPT를 통한 외부 커넥터 도구의 모든 호출은 준수, 비용 추적 및 보안 조사를 위해 커넥터 감시 로그에 기록됩니다.
기록되는 것
| 필드 | 값 | 주의 |
|---|---|---|
id | UUID | 유일한 감시 기록 ID |
workspace_id | UUID | 호출을 시작한 워크스페이스 |
user_id | UUID | 도구를 트리거한 사용자(사람인 경우) |
platform | mcp | telegram | chatgpt | stdio | 도구가 호출된 인터페이스 |
tool_name | string | 도구명 (예: create_issue, list_comments) |
scopes | string[] | 토큰이 가진 OAuth 범위 (예: ["issues:read", "issues:write"]) |
outcome | ok | denied | error | 성공, 권한 거부 또는 오류 |
error_code | string | null | 오류 시 코드 (예: insufficient_scope, malformed_input) |
input_summary | string | 편집된 입력 (절대 비밀이나 전체 페이로드 포함 안함) |
result_size | integer | 반환된 바이트 |
tokens_in | integer | null | 입력 토큰 (호출이 모델을 구동한 경우) |
tokens_out | integer | null | 출력 토큰 (호출이 모델을 구동한 경우) |
cost_micros | integer | null | 예상 비용 (마이크로달러 단위) |
created_at | timestamp | 호출 발생 시간 |
duration_ms | integer | 왕복 레이턴시 |
감시 로그 쿼리 API
감시 항목 나열
GET /api/audit/connectors쿼리 매개변수:
| 매개변수 | 유형 | 설명 |
|---|---|---|
platform | string | mcp, telegram, chatgpt, stdio로 필터링 |
user_id | UUID | 사용자로 필터링 |
tool | string | 도구 이름으로 필터링 |
outcome | string | ok, denied, error로 필터링 |
since | ISO 8601 | 시작 날짜 (기본값: 지난 7일) |
until | ISO 8601 | 종료 날짜 |
limit | integer | 페이지 크기 (기본값: 100) |
offset | integer | 페이지 매김 오프셋 |
예:
curl https://aacworkflow.example.com/api/audit/connectors \
?platform=mcp \
&outcome=error \
&since=2025-06-01T00:00:00Z \
&limit=50반환:
{
"entries": [
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"workspace_id": "550e8400-e29b-41d4-a716-446655440001",
"user_id": "550e8400-e29b-41d4-a716-446655440002",
"platform": "mcp",
"tool_name": "update_issue",
"scopes": ["issues:write", "issues:read"],
"outcome": "ok",
"error_code": null,
"input_summary": "issue_id: AAC-42, status: done",
"result_size": 2048,
"tokens_in": 150,
"tokens_out": 80,
"cost_micros": 12,
"created_at": "2025-06-22T15:30:00Z",
"duration_ms": 245
}
],
"total": 1247,
"limit": 50,
"offset": 0
}감시 로그 UI
워크스페이스 관리자는 설정 → 감시 & 준수 → 커넥터 로그에서 감시 로그를 볼 수 있습니다.
UI는 다음을 제공합니다:
- 타임라인 보기 — 상태 표시기가 있는 최근 도구 호출 (녹색 = 성공, 황색 = 거부됨, 적색 = 오류)
- 필터링 — 플랫폼, 도구, 결과, 사용자 및 날짜 범위별
- 비용 분석 — 기간 동안의 토큰 비용 합계
- 사건 조사 — 실패하거나 거부된 호출에 대해 드릴다운하여 이유 파악
예: 의심스러운 오류 급증 조사
- 설정 → 감시 & 준수 → 커넥터 로그로 이동
platform: mcp,outcome: error,since: yesterday로 필터링- 실패한 호출을 클릭하여 다음을 확인:
- 호출된 도구
- 발생한 오류
- 호출을 시작한 사람
- 당시의 전체 토큰 범위
- 에이전트 실행 로그와 관련시켜 맥락 이해
편집 정책
감시 로그는 절대 저장하지 않음:
- API 토큰 또는 비밀
- 전체 요청/응답 본문
- 결과 자체가 드러내는 것 이상의 PII
input_summary 필드는 민감 데이터를 편집합니다:
- ❌
input_summary: "token=sk-..."— 편집됨 - ✓
input_summary: "issue_id: AAC-42, status: done"— 안전 - ✓
input_summary: "create issue, title length: 45 chars, 3 labels"— 안전
범위 강제 + 감시
도구가 불충분한 범위로 호출될 때:
- 호출이 거부됨 — 도구가 절대 실행되지 않음
- 감시가 거부를 기록 — 결과는
denied, error_code는insufficient_scope - 변화 없음 — 호출이 기록되지만 조치를 취하지 않음
거부 로그 예:
{
"platform": "mcp",
"tool_name": "delete_issue",
"scopes": ["issues:read"],
"outcome": "denied",
"error_code": "insufficient_scope",
"input_summary": "issue_id: AAC-100",
"created_at": "2025-06-22T16:00:00Z"
}outcome: ok의 성공적인 호출은 토큰이 올바른 범위를 가졌음을 증명합니다. 거부된 호출은 그렇지 않음을 증명합니다.
비용 & 사용 추적
언어 모델을 구동하는 호출(예: MCP를 통해 도구를 호출하는 에이전트)의 경우 감시 로그는 다음을 캡처합니다:
tokens_in— 모델에 전송된 입력 토큰tokens_out— 수신된 출력 토큰cost_micros— 예상 비용 (가격은 모델에 따라 다름)
관리자는 감시 로그를 쿼리하여:
- 비용 예측 — 청구 기간 동안의
cost_micros합계 - 폭발적인 에이전트 감지 — 비정상적인 토큰 개수를 가진 사용자/워크스페이스 찾기
- 프롬프트 최적화 — 가장 높은 입력 토큰 오버헤드를 가진 도구 식별
비용 쿼리 예:
curl https://aacworkflow.example.com/api/audit/connectors \
?since=2025-06-01&until=2025-06-30 \
| jq '[.entries[] | .cost_micros] | add'
# 6월의 마이크로달러 단위 총 비용 반환준수 및 보유
- 감시 로그는 기본적으로 90일 동안 보유 (워크스페이스별 구성 가능)
- 로그는 불변 — 편집 또는 삭제할 수 없음
- 로그는 워크스페이스별로 인덱싱됨 — 한 워크스페이스는 다른 워크스페이스의 감시 추적을 볼 수 없음
- 워크스페이스, 사용자 또는 토큰 삭제는 감시 항목을 소급해서 삭제하지 않음 (역사 기록)
보안 주의사항
감시 로그는 관리자 전용입니다. 관리자가 아닌 사용자는 자신의 워크스페이스에 대한 감시 항목을 볼 수 없습니다.
- 감시 작성은 즉발-망각 방식 — 로그 실패는 도구 실행을 블록하지 않음
- 감시 데이터는 전송 중 암호화됨 (이슈 데이터와 동일한 암호화)
- 감시 쿼리는 워크스페이스 관리자 역할 필요
- 감시 항목은
workspace_id를 포함하여 워크스페이스 간 데이터 누출 방지
예 워크플로우
1. 지원 티켓 조사
"사용자가 이슈 업데이트가 실패했다고 말합니다. 감시 로그를 확인해 보겠습니다."
curl https://aacworkflow.example.com/api/audit/connectors \
?user_id=<user_id> \
&tool=update_issue \
&outcome=error \
&since=2025-06-22T00:00:00Z호출이 insufficient_scope로 실패했음을 확인합니다. 사용자의 토큰은 issues:read만 있고 issues:write는 없습니다.
2. Telegram 봇 사용 모니터링
"우리 Telegram 봇이 이번 주에 도구를 몇 개 호출했나요?"
curl https://aacworkflow.example.com/api/audit/connectors \
?platform=telegram \
&since=2025-06-15T00:00:00Z \
| jq '.total'결과: 이번 주 Telegram을 통한 342개 도구 호출.
3. 비용 계산
"우리 MCP 도구의 6월 비용은 얼마인가요?"
curl https://aacworkflow.example.com/api/audit/connectors \
?platform=mcp \
&since=2025-06-01 \
&until=2025-06-30 \
| jq '[.entries[] | select(.cost_micros != null) | .cost_micros] | add'결과: 45,000 마이크로달러 = $0.045
4. 거부된 호출 찾기
"왜 일부 도구 호출이 거부되나요? 확인해 보겠습니다."
curl https://aacworkflow.example.com/api/audit/connectors \
?outcome=denied \
&since=yesterday결과: 12개 호출이 insufficient_scope로 거부, 1개가 malformed_input으로 거부됨.