
eBPF 기반 Linux 관측 가능성 및 AI 인시던트 탐지. AGPL-3.0 라이선스.
SLO를 해치고 있는 프로세스를 찾아보세요 — CPU를 누가 쓰는지가 아니라, 누가 지연(stall)을 일으키는지까지.
top은 CPU 80%를 보여줍니다. Prometheus는 높은 지연 시간을 보여줍니다. 하지만 실제로 결제 서비스를 지연시키는 *포드(pod)*는 어느 것일까요?
Linnix는 eBPF + **PSI(Pressure Stall Information)**를 사용하여 이 질문에 답합니다. PSI는 실제 지연 시간을 측정합니다 — 사용량이 아닌 경합(contention)을 측정합니다. CPU 40%를 사용하면서 PSI 60%인 포드는 CPU 100%에 PSI 5%인 포드보다 더 나쁩니다.
Linnix가 감지하는 것:
top에 나타나지 않는 CPU/IO/메모리 압력[!IMPORTANT] 기본적으로 모니터링 전용입니다. Linnix는 감지하고 보고만 합니다 — 명시적인 구성 없이는 어떤 조치도 취하지 않습니다.
핵심 약속: 모든 분석은 로컬에서 수행됩니다. Slack 알림을 명시적으로 구성하지 않는 한 어떤 데이터도 인프라를 떠나지 않습니다. 데이터 개인정보 보호 자세히 보기 →
Linnix를 DaemonSet으로 배포하여 클러스터를 모니터링하세요.
# Apply the manifests
kubectl apply -f k8s/
API 접근:
kubectl port-forward daemonset/linnix-agent 3000:3000
# API available at http://localhost:3000
# Stream events: curl http://localhost:3000/stream
30초 만에 로컬 머신에서 시도해 보세요.
git clone https://github.com/linnix-os/linnix.git && cd linnix
./quickstart.sh
fork, exec, exit, 스케줄러 이벤트를 1% 미만의 오버헤드로 관찰합니다.Linnix는 프로덕션 안전을 위해 설계되었습니다.
/proc 폴링이 아닌 eBPF perf 버퍼를 사용합니다.CAP_BPF 및 CAP_PERFMON으로 실행할 수 있습니다. Kubernetes DaemonSet은 단순성을 위해 현재 권한 모드(privileged mode)를 사용합니다.자세한 안전 모델은 SAFETY.md를 참조하세요.
Linnix는 일급(first-class) Kubernetes 지원을 제공합니다:
pod_name, namespace, container_id로 태그됩니다.# Example: Get processes causing stalls in the payments namespace
curl "http://localhost:3000/processes?namespace=payments&sort=psi_contribution"
Linnix는 ERC-20 스테이블코인을 통해 에이전트 간 작업을 온체인에서 정산하는 신뢰 불필요(trustless) 결제 레이어(Linnix-Claw)를 포함합니다. 한 에이전트가 다른 에이전트에게 작업을 위임하면, 텔레메트리 증명이 포함된 서명된 영수증이라는 결과물이 TaskSettlement 스마트 계약에 제출되어 지급자(payer)에서 수취자(payee)로 직접 결제가 이루어집니다.
Agent A (payer) Agent B (payee)
│ createTask(taskId, payeeDID, maxAmount)
│──────────────────────────────────▶│
│ │ ← does work, captures eBPF telemetry
│ submitReceipt(taskId, amount, receipt, sig)
│◀──────────────────────────────────│
│ │
└──── TaskSettlement.sol ─── ERC-20 transfer ──▶ payee
주요 계약 (Base Sepolia 테스트넷):
| 계약 | 주소 |
|---|---|
| AgentRegistry | 0x9a6FeBA6d7B97ef91099051eB61F372d1EcD83a3 |
| TaskSettlement | 0x60eE6872920addF41359625B47A07401496bBD5b |
| StakeBond | 0xEE31fC610B9b64982990adB3ba228E9dBbfF6a73 |
linnix.toml에 [chain] 섹션을 추가하세요:
[chain]
enabled = true
rpc_url = "https://sepolia.base.org"
chain_id = 84532
settlement_contract = "0x60eE6872920addF41359625B47A07401496bBD5b"
registry_contract = "0x9a6FeBA6d7B97ef91099051eB61F372d1EcD83a3"
token_address = "0x036CbD53842c5426634e7929541eC2318f3dCF7e" # USDC on Base Sepolia
token_decimals = 6
서명자 키는 다음 우선순위로 결정됩니다:
chain.private_keyLINNIX_CHAIN_PRIVATE_KEY 환경 변수# Deploy contracts to a local Hardhat node
cd linnix-claw-contracts && npx hardhat node &
npx hardhat run scripts/deploy.js --network localhost
# Run the commerce demo
./scripts/demo_commerce_e2e.sh --local
구현 세부 사항은 계약 소스 및 cognitod/src/onchain.rs를 참조하세요.
이 프로젝트는 활발히 개발 중입니다. 사용 중이거나 평가 중이라면 이슈를 열거나 [email protected]으로 이메일을 보내주세요.
cognitod): AGPL-3.0AGPL을 사용할 수 없는 팀을 위한 상업용 라이선스도 제공됩니다. 자세한 내용은 LICENSE_FAQ.md를 참조하세요.
| 사고 유형 | 감지 로직 | 트라이지 가치 |
|---|
| 서킷 브레이커(Circuit Breaker) | 높은 PSI(>40%) + 높은 CPU(>90%) | 지연을 유발하는 특정 프로세스 트리를 식별합니다. |
| 포크 스톰(Fork Storm) | 2초 동안 초당 10회 이상의 fork | 노드를 크래시시키기 전에 통제 불능 스크립트를 포착합니다. |
| 메모리 누수(Memory Leak) | 지속적인 RSS 증가 | 결국 OOM이 발생할 컨테이너를 표시합니다. |
| 수명이 짧은 작업(Short-lived Jobs) | 빠른 exec/exit 반복 | 비효율적인 빌드 스크립트 또는 크래시 루프를 식별합니다. |