AI 에이전트 운영·감시 시스템
AI 에이전트들이 일한 기록을 매일 자동으로 정리하고, 서비스와 예약 작업이 제대로 도는지 감시하는 운영 시스템을 만들었다.
무엇을 만들었나
AI 에이전트가 끝낸 작업을 매일 포트폴리오 문서로 정리하고, 서비스와 예약 작업의 이상을 감시하는 운영 시스템이다. 같은 경보가 반복되는 오탐을 바로잡고 오래 이어지는 장애는 한 번만 알리며, 로그가 계속 커지는 것을 막고, 예약 작업 사이의 연결 고장을 주 1회 점검할 수 있는 읽기 전용 점검기를 만들었다. 검증은 임시 저장소와 시험 실행(dry-run) 위주로 했고, 정기 실행에서의 실제 동작 확인은 아직 남아 있다.
구현 방식과 보안 설계는 ‘기술 상세’에 있습니다.
구조와 설계
Python 3 표준 라이브러리 위주의 스크립트 묶음이며 새 외부 의존성은 추가하지 않았다. 헬스체크는 항목별 최초 실패 시각을 기준으로 24시간(설정 가능)을 초과하면 만성 장애로 전환해 알림을 한 번만 보내고 복구 때 총 장애 시간을 알리며, 하트비트 설정에 별칭(aliases)을 넣어 식별자가 바뀌어도 오탐이 나지 않게 했다. 포트폴리오 정리 파이프라인은 Codex 세션 로그의 UUID를 검증해 원래 세션을 재개하고, 재개 성공과 로그 기반 보완을 구분해 기록하며 보완 비율이 절반을 넘으면 degraded로 표시한다. 로그 회전은 열린 파일을 옮기지 않도록 copytruncate 방식으로 원본 경로와 inode를 유지하고, 계약 점검기는 예약 작업의 스케줄·실행·참조·데이터 흐름·메시지 게시 계약을 읽기 전용으로 대조한다. 기록 세션이 작업 전후를 볼 수 있도록 worklog 변경을 로컬 Git에 스냅샷으로 남기되, 커밋 전에 비밀값 의심 줄과 .env·.pem·.key 파일을 걸러낸다.
사용 기술
Python 3 (표준 라이브러리), Bash, Git, unittest, JSON / JSONL, launchd, Codex CLI, Claude Code CLI, gzip
보안·안정성 설계
- 커밋 전에 추가된 줄에서 웹훅 주소·API 토큰·개인 키·접근 키 형태를 검사하고, 의심 줄이 있거나 파일명이 .env·.pem·.key로 끝나면 해당 파일만 스테이징에서 빼고 나머지를 커밋한다.
- 문서 작성 세션에는 지정된 두 문서에만 쓰고 커밋·푸시·상태 파일 변경을 하지 않도록 지시했다. 이는 프롬프트 지시이며 운영체제 수준의 파일 격리는 아니라고 문서에 명시했다.
- 시험 재개(test-resume)는 새 임시 디렉터리에만 쓰도록 격리해 실제 포트폴리오·상태 파일·최신 실행 결과를 건드리지 않는다.
- 재개 성공 판정에 종료 코드 0, 원래 세션 ID 일치, 문서의 이번 실행 중 갱신, 크기·STUB 부재를 모두 요구하고, 근거 없는 과거 결과는 보수적으로 로그 기반으로 표시한다.
- 작업별 900초·전체 7,200초 제한을 두고, 시간 초과 시 자식 프로세스까지 종료한다. 파일 잠금으로 실행 중인 작업의 중복 시작을 막는다.
- 만성 장애는 전환 알림 1회, 복구 알림 1회로 제한하고 상태 조회에 CHRONIC으로 표시해 경보 채널이 반복 알림으로 묻히지 않게 했다.
- 계약 점검기는 설정·로그 수정이나 메시지 전송 기능이 없는 읽기 전용이며, 디스코드도 읽기 요청으로만 확인한다. 읽기 실패는 다른 항목과 분리해 보고한다.
- 로그 회전은 심링크·일반 파일이 아닌 대상을 건너뛰고, 파일 잠금으로 동시 실행을 막으며, 한 파일에서 오류가 나도 나머지를 계속 처리한다.
작업 기록
작업 이력을 Git 스냅샷으로 파이프라인에 연결
기록 세션이 시작되기 전에 worklog 변경을 로컬 Git 이력으로 남기고, 정리 완료 뒤에도 커밋하도록 파이프라인을 보강했다. 비밀값 의심 파일은 커밋에서 제외하며 전용 테스트 37개와 전체 231개가 통과했다.
예약 루틴 계약 점검기 작성과 검수
예약 작업의 설정·실행 기록·산출물·메시지 게시 여부를 주기적으로 대조하는 읽기 전용 점검기를 만들었다. 검수에서 설정 변경 전 기록이 만드는 오탐을 찾아 발화 시각과 수정 시각을 비교하는 가드로 고쳤다.
로그 회전 스크립트 신규 작성
실행 중인 서비스가 열어 둔 로그를 옮기지 않고, 크기 기준으로 압축 복사한 뒤 원본을 비우는 회전 스크립트를 만들었다. 신규 테스트 10개와 기존 회귀 42개가 통과했고 실제 환경에서는 dry-run만 실행했다.
헬스체크 오탐 정리와 만성 장애 처리
최근 72시간 동안 같은 두 항목에서 22차례 울린 경보의 원인을 실제 응답과 실행 기록으로 바로잡았다. 24시간을 넘긴 장애는 전환 알림을 한 번만 보내고 복구 때까지 재알림을 억제한다.
포트폴리오 파이프라인 세션 재개 경로 추가
Codex로 진행한 작업의 원래 세션도 재개해 문서를 쓰도록 파이프라인을 고쳤다. 재개와 로그 기반 보완을 구분해 표시하고, 격리된 시험에서 실제 대기 작업 한 건의 문서 두 개 작성을 확인했다.
이 페이지는 작업 기록 문서 5건을 바탕으로 정리했습니다. 고객 정보, 접속 주소, 비밀값은 공개 전에 걸러 냅니다.