3.4 KiB
3.4 KiB
KISA Connector Observability & Localisation
The KISA/KNVD connector now ships with structured telemetry, richer logging, and a localisation brief so Docs/QA can extend operator material without reverse-engineering the source.
Telemetry counters
All metrics are emitted from KisaDiagnostics (Meter name StellaOps.Concelier.Source.Kisa).
| Metric | Description | Tags |
|---|---|---|
kisa.feed.attempts |
RSS fetch attempts per scheduled job. | — |
kisa.feed.success |
Successful RSS fetches (increments even when no new items). | — |
kisa.feed.failures |
RSS fetch failures. | reason (exception type) |
kisa.feed.items |
Number of items returned by the RSS window. | — |
kisa.detail.attempts |
Advisory detail fetch attempts. | category (Hangul category from RSS) |
kisa.detail.success |
Detail payloads fetched and persisted. | category |
kisa.detail.unchanged |
HTTP 304 responses reused from cache. | category |
kisa.detail.failures |
Detail fetch failures or empty payloads. | category, reason |
kisa.parse.attempts |
Documents pulled from Mongo for parsing. | category |
kisa.parse.success |
Documents parsed into DTOs. | category |
kisa.parse.failures |
Download or JSON parse failures. | category, reason |
kisa.map.success |
Canonical advisories persisted. | severity (e.g. High, unknown) |
kisa.map.failures |
Mapping or DTO hydration failures. | severity, reason |
kisa.cursor.updates |
Published cursor advanced after ingest. | — |
categorytags surface the original Hangul labels (for example취약점정보), normalised to NFC. Downstream dashboards should render them as-is; do not transliterate or trim.
Logging patterns
Informationlevel summary when the RSS feed completes (ItemCount), on each persisted detail document (IDX, category, documentId), and when a canonical advisory is written (IDX/severity).Debuglevel logs capture cache hits (304) and cursor movements (Publishedtimestamp).Warninglevel emits when a document or DTO is missing so operators can correlate with parse/map counters.Errorlevel retains exception context for feed/detail/parse/map failures; state repository backoffs are still applied.
The messages use structured properties (Idx, Category, DocumentId, Severity) so Grafana/Loki dashboards can filter without regex.
Localisation notes for Docs & QA
- Hangul fields (
title,summary,category,reference.label, product vendor/name) are normalised to NFC before storage. Sample category취약점정보roughly translates to “vulnerability information”. - Advisory HTML is sanitised via
HtmlContentSanitizer, stripping script/style while preserving inline anchors for translation pipelines. - Metrics carry Hangul
categorytags and logging keeps Hangul strings intact; this ensures air-gapped operators can validate native-language content without relying on MT. - Fixtures live under
src/StellaOps.Concelier.Source.Kisa.Tests/Fixtures/. Regenerate withUPDATE_KISA_FIXTURES=1 dotnet test src/StellaOps.Concelier.Source.Kisa.Tests/StellaOps.Concelier.Source.Kisa.Tests.csproj. - The regression suite asserts canonical mapping, state cleanup, and telemetry counters (
KisaConnectorTests.Telemetry_RecordsMetrics) so QA can track instrumentation drift.
For operator docs, link to this brief when documenting Hangul handling or counter dashboards so localisation reviewers have a single reference point.