Masintõlge, mida emakeelne kõneleja pole üle vaadanud. Võrdlusallikaks on ingliskeelne versioon.

Vastuvõtja usaldus ja merendusMuuda GitHubisSource: docs/TRUST-TELEMETRY.md

GNSS usaldus turvatelemeetriana

kshana trust-telemetry muudab epohhipõhise GNSS usaldusvoo (skoor 0-100, tase, põhjused) signaalideks, mida operatsiooni- või turvakeskus juba sisse loeb: Prometheuse mõõdikud, CEF- või LEEF-vormingus syslog-sündmused SIEM-i jaoks ning valikuliselt OpenTelemetry. See loeb voogu; see ei muuda kunagi usaldushinnangut ega edasta midagi peale telemeetria.

Üks usaldustulemus kolmes eksportvormingus, mootori v0.40.0 tegelikest käitustest (`kshana trust-telemetry`) kataloogil examples/maritime-trust: Prometheuse tekstiesitus (viimane usaldusskoor on 5,9 ja usaldamatu riba on see, mis on seatud) ning viimased CEF- ja LEEF-sõnumid. Käsk ei avalda midagi, kui sihtkohta ei anta, ei hoia volitusandmeid ega edasta raadiosignaali. Nõuandev tarkvara, mitte tüübikinnitust omav navigatsiooniseade (IEC 61108, IEC 61162): laeva navigeerimise eest vastutab jätkuvalt operaator.Üks usaldustulemus kolmes eksportvormingus, mootori v0.40.0 tegelikest käitustest (`kshana trust-telemetry`) kataloogil examples/maritime-trust: Prometheuse tekstiesitus (viimane usaldusskoor on 5,9 ja usaldamatu riba on see, mis on seatud) ning viimased CEF- ja LEEF-sõnumid. Käsk ei avalda midagi, kui sihtkohta ei anta, ei hoia volitusandmeid ega edasta raadiosignaali. Nõuandev tarkvara, mitte tüübikinnitust omav navigatsiooniseade (IEC 61108, IEC 61162): laeva navigeerimise eest vastutab jätkuvalt operaator.

Käivitamine#

# live stream on stdin -> /metrics on localhost:9464
kshana receiver-trust live <args> | kshana trust-telemetry

# replay a batch result (the score is the epoch's own for a vessel platform, absent otherwise)
kshana trust-telemetry --result session.result.json --print-metrics
kshana trust-telemetry --result session.result.json --print-syslog --format leef

# SIEM over UDP, one event per band change
kshana trust-telemetry --input stream.jsonl --syslog-udp siem.example:514 --format cef --host ops-gw1

Sisend on reaalajas JSON-lines skeemi v1.1, mis on dokumenteeritud failis docs/MARITIME-TRUST.md. Loetakse: t_s; state (calibrating|nominal|degraded|untrusted, tase); score (0-100 või null); time (epohhi aeg nagu öeldud); gate (off|passed|withheld); position (lat_deg, lon_deg, height_m või null); põhjused on monitoorid väljas deductions, seejärel kõik edasised väljas alarms; skeemist 1,3 alates geometry (status, hdop, pdop, n_used) ja iga mahaarvamise class. Teisi võtmeid ignoreeritakse, sest skeem kasvab ainult lisatud võtmetega. Rida, mis ei parsi, loetakse välja kshana_trust_input_errors_total ja jäetakse vahele; skoorid väljaspool 0-100 lükatakse tagasi, mitte ei piirata, et vormingu muutus märgataks. Ainus kood, mis seda vormingut tunneb, on src/telemetry/sample.rs.

/metrics serveeritakse ilma autentimiseta ja vaikimisi on selleks 127.0.0.1:9464. Mujale sidumine trükib hoiatuse; panna see oma juurdepääsukontrolli taha. Lõpp-punkt teenindab korraga ühte ühendust 2 s lugemispiiriga, nii et jõude klient võib kogumist viivitada kuni selle aja võrra; see on mõeldud ühele koguja jaoks, mitte avaliku võrgu jaoks.

Home Assistant ja NTP seadmed (MQTT)#

--print-mqtt trükib ja --mqtt-tcp <host:port> avaldab JSON olekudokumendi ja Home Assistant MQTT avastamissõnumid. Avastamine (säilitatud, all homeassistant/...) loob kolm olemit: usaldusskoor, usaldustase (põhjused atribuutidena) ja untrusted probleemianduri. Olekudokument läheb teemasse <prefix>/state (vaikimisi kshana/trust/state, säilitatud): state, score (null, kuni ühtegi pole), untrusted, t_s, time, reasons, gate ja nõuandev avaldus; asukohta ei lisata kunagi. Valikud: --mqtt-prefix, --mqtt-node, --mqtt-discovery.

Avaldaja räägib MQTT 3.1.1 protokolli QoS 0 juures ja loeb ainult vahendaja CONNACK-i. Sellel pole mandaate ega TLS-i, seega kasutada kohaliku võrgu vahendajat (või kohalikku releed, mis need lisab). Edastus toimub oma lõimes 1024 järjekorra taga: surnud vahendaja viskab sõnumeid minema, need loetakse ja neist teatatakse lõpus, ning see ei peata kunagi voogu. NTP seade või mis tahes muu tarbija, kes soovib lihtsat JSON-i, saab lugeda sama olekurida. Vastuvõtjale ega kellale midagi ei kirjutata. Python, WebAssembly ja MCP võtavad format = "mqtt" ja tagastavad samad topic<TAB>payload read (seal midagi ei avaldata).

Pythonist, WebAssembly-st ja MCP-st#

Kodeerijad on saadaval ka tekst sisse, tekst välja kutsetena ilma protsessi, sokli ega kellata: Python kshana.trust_telemetry(input, format, host="", input_kind="jsonl", expose_position=False, syslog_all=False, unix_nano=0), WebAssembly eksport trust_telemetry(input, format, host, input_kind, options_json) ja MCP tööriist trust_telemetry (pistikprogrammi käsk /kshana-trust-telemetry). format on prometheus, cef, leef või otlp; input_kind on jsonl (voog) või result (paketitulemus). Need tagastavad sama teksti, mida käsurida trükib (--print-metrics, --print-syslog), samade piirangutega: syslog-read ei kanna ajatemplit, host on kuni 255 trükitavat ASCII märki ilma tühikuteta (muidu lükatakse tagasi, siin ja käsureal) ning vastus, mis on suurem kui pinna piirang (4 MiB MCP-s), lükatakse tagasi, sest CEF ja LEEF valikuga syslog_all kirjutavad ühe sündmuse epohhi kohta. Midagi ei saadeta, serveerita ega kirjutata; töötavad eksportijad jäävad käsureal protsessiks.

Edastus ei peata kunagi hindamist#

Syslog ja OpenTelemetry edastus töötavad oma lõimedes. Sisselugemistsükkel annab neile ainult sõnumi või hetktõmmise ega oota kunagi, nii et surnud, aeglane või mitte-lugev koguja ei saa reaalajavoogu tagasi survestada ega käsku /metrics külmutada:

  • igal ühendamisel ja kirjutamisel on 2 s piirang; ebaõnnestunud ühendus jäetakse maha ja ühendatakse laisalt uuesti, eksponentsiaalse ooteajaga alates 1 s kuni 60 s;
  • sõnum, mida ei saa edastada (koguja maas, kirjutamine aegus, 1024 järjekord täis), visatakse ära ja loetakse väljas kshana_trust_syslog_send_failures_total; häire anda selle sageduse põhjal;
  • OpenTelemetry eksportijale antakse registri koopia, nii et võrgu I/O ajal ei hoita lukku; kui eksport on veel pooleli, jäetakse uus hetktõmmis vahele (järgmine kannab samu kumulatiivseid summasid).

Sisendi lõpus antakse saatelõimedele lõpetamiseks nende allesjäänud ajapiirangud.

Prometheuse mõõdikud#

Mõõdik Tüüp Sildid Tähendus
kshana_build_info gauge version konstant 1
kshana_trust_score gauge viimane skoor 0-100; puudub, kui allikas seda ei anna
kshana_trust_band gauge band 1 praeguse taseme jaoks, 0 teiste jaoks
kshana_trust_gate gauge gate off, passed, withheld, unknown: 1 praeguse oleku jaoks, 0 teiste jaoks; puudub ilma väravata
kshana_trust_position_latitude_degrees, ..._longitude_degrees, ..._height_meters gauge vastuvõtja teatatud asukoht; ainult valikuga --expose-position (lõpp-punkt on autentimata ja asukoht võib tuvastada saidi või laeva)
kshana_trust_reason_active gauge reason 1, kui viimasel epohhil olemas
kshana_trust_epochs_total loendur band vastuvõetud epohhid
kshana_trust_reason_epochs_total loendur reason epohhid, milles põhjus oli olemas
kshana_trust_input_errors_total loendur parsimatud sisendread
kshana_trust_reason_overflow_total loendur põhjuse esinemised, mis on liidetud kategooriasse reason="other" (vt allpool)
kshana_trust_syslog_send_failures_total loendur edastamata syslog-sündmused
kshana_trust_epoch_offset_seconds gauge viimase epohhi nihe voo algusest
kshana_trust_last_sample_timestamp_seconds gauge seinakella vastuvõtuaeg; häire anda selle vanuse põhjal
kshana_trust_geometry gauge status satelliitide geomeetria viimasel epohhil, good, degraded, unknown: 1 praeguse jaoks (skeemi 1,3 sisendid)
kshana_trust_geometry_degraded gauge 1 halvenenud, 0 hea; puudub, kui geomeetria on teadmata (1.3)
kshana_trust_geometry_signal_loss gauge 1, kui nähtavaid satelliite ei jälgita, kuigi nende geomeetria on hea (signaal kadus, mitte taevas; geometry_degraded näitab endiselt 1), muidu 0; puudub, kui geomeetria on teadmata või sisend seda ei ütle (1.3)
kshana_trust_geometry_hdop, ..._pdop, ..._used_satellites gauge HDOP, PDOP ja kasutatud satelliidid viimasel epohhil; igaüks puudub, kui ühtegi pole (1.3)
kshana_trust_geometry_epochs_total loendur status epohhid geomeetria oleku järgi (1.3)
kshana_trust_geometry_label gauge label geomeetria silt viimasel epohhil, good, fair, poor, unknown: 1 praeguse jaoks; ei hinnata kunagi (skoor arvab maha ainult poor eest); sisenditest, mis kannavad silti (0,36)
kshana_trust_geometry_vdop gauge VDOP viimasel epohhil; puudub, kui ühtegi pole (0.36)

Geomeetria silt on peamine. Joonistada graafik ja anda häire väljal kshana_trust_geometry_label (OTLP kshana.geometry.label, CEF kolmas cs6 väli, LEEF geoLabel): poor on ainus silt, mille eest skoor maha arvab. Geomeetria olek on kirjeldav: degraded sisaldab informatiivset juhtu sky-blocked, mis võib tulla hea või keskmise DOP-iga, seega ainult kshana_trust_geometry_degraded põhjal mitte häiret anda.

Skeemi 1,3 sisenditest alates kannab kshana_trust_reason_active ka silti class (geometry, environment, inconsistency) igal põhjusel, millega see kaasas oli: mahaarvamise klass viimasel epohhil. Geomeetria seeriad tulevad pärast kõiki teisi ja alles siis, kui sisendi epohh kannab geometry (reaalajas skeem 1,3, tulemus mootorist 0,36 või hilisemast), nii et 0,35 voog või tulemus renderdatakse bait-baidilt nagu varem. Sildi väärtused on fikseeritud hulgad (tundmatu olek loetakse unknown; tundmatu klass jäetakse välja). Häire anda väljal kshana_trust_reason_active{class="inconsistency"} mitte ainult tasemel, et kehv taevas ei anna häiret rünnakuna; klass geometry on väide taeva kohta, mitte järeldus, et rünnakut ei toimunud (vt docs/RECEIVER-TRUST.md).

Silt class on seeria identiteedi osa: kui põhjuse klass muutub epohhide vahel (loss-of-lock väärtusest environment väärtuseks geometry, kui kaotatud satelliidid olid madalad, või geometry väärtusest inconsistency väärtuseks, kui esitatud HDOP on vastuolus esitatud taevaga), siis vana seeriat enam ei ekspordita ja uus algab. Päring väljal reason koos max by (reason), kui klass ei loe, ja oodata, et selline ümberlülitus näeb välja nagu ühe seeria lõppemine ja teise algamine. Skeemi 1,3 seeriaid, silti class ja CEF/LEEF geomeetria välju kontrollivad mootori enda testid ja CEF sõltumatud etalonid (pycef, Logstash); välistel Prometheuse ja OTLP sõltumatutel etalonidel ei ole veel 1,3 voogu.

Põhjuste nimed lõigatakse 128 märgini ja kuni 64 erineval põhjusel on oma seeria; hilisemad loetakse kategooria reason="other" alla ja väljale kshana_trust_reason_overflow_total, nii et vaenulik või vigane sisend ei saa luua piiramatut sildikardinaalsust.

band on üks väärtustest calibrating, nominal, degraded, untrusted, unknown. Põhjuste nimed on voo monitooride nimed (kinematic, heading-course, ...; paketitulemuse puhul cn0-drop, agc, raim).

Näidisarmatuurlaud on failis deploy/grafana/kshana-gnss-trust.json (importida see ja valida oma Prometheuse andmeallikas).

Syslog: CEF ja LEEF#

Sündmused saadetakse RFC 5424 ümbrises (facility local0, rakendus kshana, sõnumi id GNSSTRUST) UDP kaudu (üks datagramm igaühele; IPv4 või IPv6) või TCP kaudu, vaikimisi reavahetusega lõpetatult või valikuga --syslog-octet-counting kaadristatult <length> <message> nagu RFC 6587. Vaikimisi saadetakse üks sündmus taseme muutuse kohta; --syslog-all saadab ühe epohhi kohta. Tootja kirjutatakse Ashforde OU (ASCII), et ükski SIEM seda valesti ei dekodeeriks.

Mõiste Syslogi tõsidus CEF tõsidus LEEF sev
kalibreerimisel 6 info 0 1
nominaalne 6 info 1 1
halvenenud 4 hoiatus 5 5
ebausaldatav 2 kriitiline 9 9
teadmata 5 teade 3 3

Väljade vastendus (sündmuse id on gnss-trust.<band>):

Tähendus CEF LEEF 2,0 (eraldaja ^)
kategooria cat=gnss-trust cat
saatev host dvchost devHost
tase cs1 (silt band) band
põhjused, komadega eraldatud cs2 (reasons) reasons
eelmine tase cs3 (previousBand) previousBand
skoor cfp1 (trustScore), välja jäetud, kui ühtegi pole trustScore
epohhi nihe, s cfp2 (epochOffsetSeconds) epochOffsetSeconds
logi aja silt cs4 (logTime) logTime
värava olek cs5 (gate) gate
geomeetria olek, seejärel ; ja epohhi mahaarvamiste klassid, komadega eraldatud (näiteks degraded;environment,geometry) (sisendid 1,3); sisenditest, mis kannavad silti (0,36), kolmas väli ; ja silt, klasside väli on siis alati olemas (näiteks degraded;;poor, good;;fair) cs6 (geometry) geoStatus (ainult olek), geoClass (klassid) ja geoLabel (silt)
HDOP (1.3) cfp3 (geometryHdop) geoHdop
PDOP (1.3) cfp4 (geometryPdop) geoPdop (0,36, koos sildiga)
VDOP (0,36, koos sildiga) ei kanta: võetakse neli ujukomaga kohandatud välja geoVdop
kasutatud satelliidid (0,36, koos sildiga) cn1 (geometryUsedSatellites), täisarv geoUsed
signaali kadu: nähtavaid satelliite ei jälgita, kuigi nende geomeetria on hea (1.3) ei kanta väljana (ühtki CEF sõnastiku võtit ei ole selle jaoks vaba): olek on degraded ja geomeetria mahaarvamise klass environment väljas cs6 geoSignalLoss=1, ainult kui see kehtib

CEF-is kasutab geomeetria ainult sõnastiku kohandatud välju (leiutatud võtmeid ei ole); silt liigub väljas cs6, mitte väljas flexString1, sest Logstashi CEF-kodek ei vasta välju flexString. Geomeetria sündmused 1,3, sealhulgas sildijuhud, on VALIDATED CEF rea osa: mõlemad sõltumatu etaloni parserid loevad need tagasi nii, nagu need on kirjutatud (tests/cef_reference.rs, muudatused 4 ja 5, kumbki registreeritud enne, kui kumbagi parserit nende juhtudel käivitati). Sildi, VDOP ja satelliitide arvu väljad lisatakse pärast kõiki varasemaid välju ja seeriaid ning ainult sisenditele, mis kannavad silti, nii et sildita sisend renderdatakse täpselt nagu varem.

Tühjad väljad jäetakse välja (ilma põhjusteta ei ole cs2=). Hostinimi lõigatakse 255 märgini. CEF päise väärtused paoseerivad \ ja |; laiendiväärtused paoseerivad \, = ja reavahetused. LEEF väärtustes asendatakse ^ ja reavahetused tühikutega.

OpenTelemetry (vaikimisi väljas)#

Ehitada valikuga --features otlp ja anda --otlp http://host:4318/v1/metrics. Eksportija postitab OTLP/HTTP JSON-i (kshana.trust.score, kshana.trust.band, kshana.trust.epochs, kshana.trust.reason.epochs ja skeemi 1,3 sisendite puhul kshana.geometry.status, kshana.geometry.degraded, kshana.geometry.signal_loss, kshana.geometry.hdop, kshana.geometry.pdop, kshana.geometry.used_satellites ning sisenditest, mis kannavad silti (0,36), kshana.geometry.label (atribuut label) ja kshana.geometry.vdop; kumulatiivsed summad kannavad startTimeUnixNano) iga --otlp-every epohhi järel (vaikimisi 10) ja sisendi lõpus. See ei lisa sõltuvust ega toeta TLS-i: saata koguja poole samas hostis või usaldatud segmendis, mis edastab edasi TLS-i kaudu. Lõpp-punktid https:// lükatakse tagasi.