"앱이 떠 있는 건 앱한테 좋은 소식이야. 그 밑의 기계에 대해선 거의 아무것도 안 알려줘."
좁게 보면 놓쳐
fleet control plane 이라고 하면 다들 앱 모니터링을 떠올려. 웹 서비스 떴나, 큐 빠지나, 컨테이너 멀쩡한가. 진짜 필요한 일이긴 해. 근데 그건 일부야. 건물 꼭대기 층만 보고 건물 전체라고 부르는 거지.
주어는 컴퓨터야
Watchfire 가 보는 건 한 층 아래, Mac 자체야. 어떤 OS 빌드를 도는지. fleet 에 enroll 된 멤버인지, 그냥 네트워크에 굴러다니는 기기인지. 어디로 닿는지. 셸이며 패키지며 설정이며 백그라운드 job 이 흩어졌는지. 돌아야 할 서비스가 진짜 떠 있는지. 앱은 그 신호 중 하나일 뿐이야. health contract 로 받아보는 거지, 일의 경계가 아냐.
넓게 봐야 밥값을 해
앱이 죽는 날, 원인은 대개 한 층 아래 있어. 기계가 OS 업데이트에 뒤처져 의존성이 깨졌거나, 네트워크가 바뀌어 SSH 경로를 잃었거나, 환경이 흩어져 백그라운드 job 이 조용히 멈췄거나. 앱 모니터링은 증상만 보고 원인 앞에선 어깨를 으쓱해. 주어가 기계인 control plane 은 OS 빌드, 도달 여부, drift, 죽은 launchd job 을 한 번에 보고 뭐가 진짜 깨졌는지 짚어.
가져다 쓰되, 흡수하진 마
여기 숨은 규율이 하나 있어. Watchfire 는 형제 엔진의 문서화된 health 를 가져다 써. 떴어? 서빙해? 정도. 근데 그 엔진의 내부 진단이나 재시작 로직을 자기 안에 복사하진 않아. 기계 층은 자기가, 앱 층은 앱이 맡아. 앱한테 기분이 어떤지 묻긴 해도, 앱의 주치의가 되려 들진 않아.