앱 확장
앱 확장
다른 로그프레소 앱은 자체 노드/관계 타입, 자동 적재 빌더, 위협 인텔리전스 탭을 그래프에
등록할 수 있습니다. 앱 번들 루트(Maven 기준 src/main/resources)에 sonar_graph.json
매니페스트를 두면, 앱을 시작할 때 자동으로 등록되고 중지하면 해제됩니다.
별도의 API 호출은 필요 없습니다.
Note
이 페이지는 앱 개발자를 위한 요약입니다. 필드별 상세 스펙은 sonar-graph 저장소의
docs/app-registration.md 문서를 참고하세요.
docs/app-registration.md 문서를 참고하세요.
매니페스트 구조
{
"manifest_version": "1.0.0",
"node_defs": { "<타입>": { ... } },
"edge_defs": { "<관계>": { ... } },
"builders": [ { ... } ],
"ip_intels": { "<키>": { ... } }
}
네 섹션 모두 선택 사항입니다. 위협 인텔 탭만 제공하는 앱이라면 ip_intels만 쓰면 됩니다.
node_defs — 노드 타입
names/descriptions(en·ko·ja), attrs(속성 정의: 타입·enum·범위)에 더해 값 형식을
선언할 수 있습니다.
value_examples— 로케일별 값 예시. 지식 그래프의 노드 추가 화면에서 입력 안내 (placeholder)로 표시됩니다.value_pattern— 값이 따라야 할 정규식. 화면 입력과 배치 명령어 양쪽에서 검증됩니다.
"myapp-scanner": {
"type": "myapp-scanner",
"names": { "en": "Scanner", "ko": "스캐너" },
"descriptions": { "en": "Scanner appliance keyed by serial", "ko": "시리얼로 식별되는 스캐너 장비" },
"value_examples": { "en": "SN-2024-0001" },
"value_pattern": "^SN-\\d{4}-\\d{4}$",
"attrs": {}
}
edge_defs — 관계 타입
pairs로 허용되는 출발/도착 타입 조합을 선언합니다. 지식 그래프 연결 화면의
"연결 가능한 노드 타입" 안내에 사용되고, 쓰기 시에도 강제됩니다. pairs를 생략한 관계는
모든 조합을 허용하는 일반 관계로 취급됩니다.
"scanned-by": {
"type": "scanned-by",
"names": { "en": "Scanned By", "ko": "스캔 수행" },
"descriptions": { "en": "ipv4-addr scanned by myapp-scanner", "ko": "IP가 스캐너에 의해 점검됨" },
"attrs": {},
"pairs": [ { "src": "ipv4-addr", "dst": "myapp-scanner" } ]
}
builders — 자동 적재
크론 일정으로 쿼리를 실행해 그래프를 채우는 선언적 배치입니다. 앱이 시작되면 일정이 등록되고, 중지하면 비활성화됩니다.
"builders": [
{
"cron_schedule": "0 5/30 * * * ?",
"names": { "en": "Sync scanners", "ko": "스캐너 동기화" },
"descriptions": { "en": "Sync scanner inventory", "ko": "스캐너 인벤토리 동기화" },
"query": "myapp-scanners | eval type=\"myapp-scanner\", value=serial | sonar-set-node-batch run=t"
}
]
ip_intels — 위협 인텔 탭
위협 인텔리전스 화면의 IP 카드에 탭을 추가합니다. query의 $("ip") 자리에 조회 대상
IP가 주입되며, type이 single이면 속성 시트로, multiple이면 표로 표시됩니다.
탭 이름 옆에는 앱 아이콘이 자동으로 붙습니다.
"ip_intels": {
"myapp-ports": {
"type": "multiple",
"names": { "en": "Open Ports", "ko": "열린 포트" },
"descriptions": { "en": "Ports detected for the IP", "ko": "탐지된 열린 포트" },
"query": "myapp-open-ports ip=$(\"ip\")",
"fields": [
{ "key": "port", "names": { "en": "Port", "ko": "포트" } },
{ "key": "service", "names": { "en": "Service", "ko": "서비스" } }
]
}
}
주의 사항
- 타입 이름에 네임스페이스가 없습니다. 같은 타입명을 등록하면 나중에 로드된 앱이
덮어쓰므로, 앱 전용 타입에는
myapp-같은 고유 접두어를 붙이세요. - 잘못된 JSON은 조용히 무시됩니다. 등록이 안 될 때는 아래 확인 방법으로 점검하세요.
- 빌더는 앱이 Sonar에 설치되어 있어야 동작합니다.
등록 확인
앱이 등록한 타입이 결과에 나오는지 확인합니다. 빌더는 sonar-graph-builders로,
위협 인텔 탭은 위협 인텔리전스 화면에서 IP 카드를 열어 확인합니다.