AACWorkflow Docs

커넥터 감시 로깅

모든 MCP, Telegram 및 ChatGPT 도구 호출에 대한 감시 추적 — 준수, 비용 추적 및 사건 조사.

MCP, Telegram 또는 ChatGPT를 통한 외부 커넥터 도구의 모든 호출은 준수, 비용 추적 및 보안 조사를 위해 커넥터 감시 로그에 기록됩니다.

기록되는 것

필드주의
idUUID유일한 감시 기록 ID
workspace_idUUID호출을 시작한 워크스페이스
user_idUUID도구를 트리거한 사용자(사람인 경우)
platformmcp | telegram | chatgpt | stdio도구가 호출된 인터페이스
tool_namestring도구명 (예: create_issue, list_comments)
scopesstring[]토큰이 가진 OAuth 범위 (예: ["issues:read", "issues:write"])
outcomeok | denied | error성공, 권한 거부 또는 오류
error_codestring | null오류 시 코드 (예: insufficient_scope, malformed_input)
input_summarystring편집된 입력 (절대 비밀이나 전체 페이로드 포함 안함)
result_sizeinteger반환된 바이트
tokens_ininteger | null입력 토큰 (호출이 모델을 구동한 경우)
tokens_outinteger | null출력 토큰 (호출이 모델을 구동한 경우)
cost_microsinteger | null예상 비용 (마이크로달러 단위)
created_attimestamp호출 발생 시간
duration_msinteger왕복 레이턴시

감시 로그 쿼리 API

감시 항목 나열

GET /api/audit/connectors

쿼리 매개변수:

매개변수유형설명
platformstringmcp, telegram, chatgpt, stdio로 필터링
user_idUUID사용자로 필터링
toolstring도구 이름으로 필터링
outcomestringok, denied, error로 필터링
sinceISO 8601시작 날짜 (기본값: 지난 7일)
untilISO 8601종료 날짜
limitinteger페이지 크기 (기본값: 100)
offsetinteger페이지 매김 오프셋

예:

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는 다음을 제공합니다:

  • 타임라인 보기 — 상태 표시기가 있는 최근 도구 호출 (녹색 = 성공, 황색 = 거부됨, 적색 = 오류)
  • 필터링 — 플랫폼, 도구, 결과, 사용자 및 날짜 범위별
  • 비용 분석 — 기간 동안의 토큰 비용 합계
  • 사건 조사 — 실패하거나 거부된 호출에 대해 드릴다운하여 이유 파악

예: 의심스러운 오류 급증 조사

  1. 설정 → 감시 & 준수 → 커넥터 로그로 이동
  2. platform: mcp, outcome: error, since: yesterday로 필터링
  3. 실패한 호출을 클릭하여 다음을 확인:
    • 호출된 도구
    • 발생한 오류
    • 호출을 시작한 사람
    • 당시의 전체 토큰 범위
  4. 에이전트 실행 로그와 관련시켜 맥락 이해

편집 정책

감시 로그는 절대 저장하지 않음:

  • 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"안전

범위 강제 + 감시

도구가 불충분한 범위로 호출될 때:

  1. 호출이 거부됨 — 도구가 절대 실행되지 않음
  2. 감시가 거부를 기록 — 결과는 denied, error_code는 insufficient_scope
  3. 변화 없음 — 호출이 기록되지만 조치를 취하지 않음

거부 로그 예:

{
  "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으로 거부됨.