Hodie solutiones paratae factae sunt pro magna IP(TS) profluentia, e.g
Brevissime de TSDuck
TSDuck fons apertus est (2-Clause BSD licentia) programmata (copia consolandi utilitates et bibliotheca ad explicandas tuas utilitates vel plugins) ad manipulationem TS rivorum. Prout initus, potest laborare cum IP (multicast/unicast), http, hls, dvb tuners, dektec dvb-asi demodulator, internus TS amnis generator est et e lima legens. Output notare potest fasciculi, IP (multicast/unicast), hls, dektec dvb-asi et HiDes modulatores, histriones (mplayer, vlc, xine) et guttatim. Inter input et output, varias negotiationes processores efficere potes, exempli gratia, PIDs remapping, faciens ruere/discendere, dividere CC calculis, calculare bitrates aliasque operationes typicas pro TS fluminum.
In hoc articulo, IP rivi (multicast) adhibebuntur pro input, processores bitrate_monitoris (ex nomine patet quid hoc est) et continuitas (analysis CC counter) adhibebitur. Sine ullis quaestionibus, IP multicastum reponere potes cum alio input genere suffulti TSDuck.
sunt
Deinceps TSDuck versio 3.19-1520 adhibetur, Linux ut OS (debian 10 ad solutionem parandam adhibebatur), CentOS 7 ad usum actualem adhibitum erat)
Praeparans TSDuck et OS
Ante vigilantiam realem fluit, opus fac ut TSDuck recte operetur et guttae non occurrant in gradu retis vel OS (socket). Hoc requiritur ut postea suspicari non debeas ubi guttae cecidere - in reticulo vel "intra servo." Potes guttas in card retis inhibere cum praecepto ethtool -S ethX, tuning ab eodem ethtool fieri (plerumque debes quiddam RX augere (-G) et interdum aliquas offload disable (-K)). Pro generali commendatione, visum est portum separatum uti ad negotiationem analyticam, si fieri potest, accipiendam, hoc positivis falsis extenuabit ob hoc quod gutta simul in portum analystoris incidit ob praesentiam aliorum negotiationis. Si hoc fieri non potest (uteris mini-computer/NUC uno portu), tunc valde opportune est prioritatem negotiationis analystae configurare respectu reliquarum machinae in quam analystor conectitur. Circa ambitus virtuales, hic diligenter debes invenire et guttas fasciculi a portu physica incipientes invenire et cum applicatione intra machinam virtualem terminare.
Generare et recipere rivum intra exercitum
Primum gradum in TSDuck parando, negotiationem generabimus et intra unum exercitum retibus utentes.
Praeparans ambitum:
ip netns add P #создаём netns P, в нём будет происходить анализ трафика
ip link add type veth #создаём veth-пару - veth0 оставляем в netns по умолчанию (в этот интерфейс будет генерироваться трафик)
ip link set dev veth1 netns P #veth1 - помещаем в netns P (на этом интерфейсе будет приём трафика)
ip netns exec P ifconfig veth1 192.0.2.1/30 up #поднимаем IP на veth1, не имеет значения какой именно
ip netns exec P ip ro add default via 192.0.2.2 #настраиваем маршрут по умолчанию внутри nents P
sysctl net.ipv6.conf.veth0.disable_ipv6=1 #отключаем IPv6 на veth0 - это делается для того, чтобы в счётчик TX не попадал посторонний мусор
ifconfig veth0 up #поднимаем интерфейс veth0
ip route add 239.0.0.1 dev veth0 #создаём маршрут, чтобы ОС направляла трафик к 239.0.0.1 в сторону veth0
Amet paratus. Analyser negotiationis launch:
ip netns exec P tsp --realtime -t
-I ip 239.0.0.1:1234
-P continuity
-P bitrate_monitor -p 1 -t 1
-O drop
ubi "-p 1 -t 1" significat vos postulo ut bitrate computare omnem secundam et informationem proponere de bitrate in secundo.
Deductis negotiationis generans cum celeritate X Mbit / s:
tsp -I craft
-P regulate -b 10000000
-O ip -p 7 -e --local-port 6000 239.0.0.1:1234
ubi "-p 7 -e" significat quod debes 7 TS packets in 1 IP conleci et facere difficile (-e), i.e. semper exspecta 7 TS packets ab ultimis processus antequam mittat formationis ipsius fasciculi IP.
Analyser incipit nuntiis expectata propono:
* 2020/01/03 14:55:44 - bitrate_monitor: 2020/01/03 14:55:44, TS bitrate: 9,970,016 bits/s
* 2020/01/03 14:55:45 - bitrate_monitor: 2020/01/03 14:55:45, TS bitrate: 10,022,656 bits/s
* 2020/01/03 14:55:46 - bitrate_monitor: 2020/01/03 14:55:46, TS bitrate: 9,980,544 bits/s
Nunc aliquas guttas addamus:
ip netns exec P iptables -I INPUT -d 239.0.0.1 -m statistic --mode random --probability 0.001 -j DROP
nuntiique sic apparent;
* 2020/01/03 14:57:11 - continuity: packet index: 80,745, PID: 0x0000, missing 7 packets
* 2020/01/03 14:57:11 - continuity: packet index: 83,342, PID: 0x0000, missing 7 packets
quae expectatur. Inactivum fasciculum disable (ip netns exec P iptables -F) et generans bitrate 100 Mbit/s augere conamur. Analystor refert fasciculum errorum CC et circa 75 Mbit/s pro 100. Conamur e figurare quis reprehendat - generans non servare vel quaestionem non esse in eo, hoc facere incipimus generare. certum numerum facis (700000 TS = 100000 IP facis)
# ifconfig veth0 | grep TX
TX packets 151825460 bytes 205725459268 (191.5 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
# tsp -I craft -c 700000 -P regulate -b 100000000 -P count -O ip -p 7 -e --local-port 6000 239.0.0.1:1234
* count: PID 0 (0x0000): 700,000 packets
# ifconfig veth0 | grep TX
TX packets 151925460 bytes 205861259268 (191.7 GiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Ut vides, facillime IP generata sunt omnino 100000 (151925460-151825460). Ita figuramus quid cum analysi aguntur, hoc facere quod reprehendo cum RX occurro in veth1, stricte aequale est TX contra in veth0, tunc inspicimus quid agatur in gradu nervus:
# ip netns exec P cat /proc/net/udp
sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode ref pointer drops
133: 010000EF:04D2 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 72338 2 00000000e0a441df 24355
Hic videre potes numerum guttae = 24355. In TS fasciculis hoc 170485 vel 24.36% 700000 est, ut videmus eadem 25% bitrati damnati esse guttae in UDP nervum. Guttae in UDP nervum plerumque occurrunt ob defectum quiddam, videamus quae defalta nervum quiddam magnitudine et maximi magnitudine nervum quiddam sint:
# sysctl net.core.rmem_default
net.core.rmem_default = 212992
# sysctl net.core.rmem_max
net.core.rmem_max = 212992
Si igitur applicationes non expresse petant magnitudinem quiddam, bases creantur cum quiddam 208 KB, sed si plura petant, adhuc id quod petierunt non accipient. Cum in tsp potes magnitudinem quiddam pro IP input ponere (--buffer-size), non tangemus defaltam nervum magnitudinem, sed solum ponemus magnitudinem maximam nervum quiddam et magnitudinem quiddam expresse per argumenta tsp expresse denota:
sysctl net.core.rmem_max=8388608
ip netns exec P tsp --realtime -t -I ip 239.0.0.1:1234 -b 8388608 -P continuity -P bitrate_monitor -p 1 -t 1 -O drop
Cum hoc quiddam nervum iungendum est, bitrate nuntiata nunc circiter 100Mbps sunt, CC errores non sunt.
Consummatio CPU fundatur in ipsa applicatione tsp. Quoad nucleum unum i5-4260U CPU @ 1.40GHz, ad resolvendum fluxum 10Mbit/s, 3-4% CPU requiretur, 100Mbit/s 25%, 200Mbit/s - 46%. Cum damnum% occasum fasciculi, CPU onus paene non augetur (sed minui potest).
In ferramentis fertilioribus, rivos plus 1Gb/s sine ullis problematibus generare et resolvere potuit.
Testis in ipsa network pecto
Post experimentum in par veth, debes accipere duas turmas vel duos portus unius exercitus, coniungere portus inter se, discurrere generans in uno, et analystor in secundo. Nihil hic admiror, sed totum pendet in ferramentis, quo infirmior est, eo plus hic erit.
Accepit data per magna ratio (Zabbix)
tsp non habet aliquem machinae-readabilem API similem SNMP vel similem. CC nuntiis necesse est ut saltem 1 secundo ad tempus aggregari (cum magno centesimae amissionis fasciculi, possunt esse centeni/mille/ decem milia per alterum secundum bitrate).
Quapropter, ut notitias servent et graphas pro CC errores hauriant et aliquantulum accidentia ulterius mordeant, possunt sequentia optiones fieri:
- Parse et aggregatum (per CC) tsp output, i.e. transform in formam desideravit.
- Adde ipsum tsp et/vel bitrate_monitorem et continuum processus plugins ita ut effectus sit output in forma machinae readable apta rationi vigilantiae.
- Applicationem tuam scribe super bibliothecam tsduck.
Patet, secundum laboris impensas, optio 1 simplicissima est, praesertim cum ipsum tsduck in lingua vulgari (per recentiora signa) lingua (C ++) conscriptum esse.
Simplex prototypum parser + aggregatoris in bash monstravit fluxum 10 Mbit/s et 50 fasciculum amissi (pessimi casus), vercundus processus 3—4 temporibus plus CPU consumptus quam ipse processus tsp. Haec missio inconveniens est. Prototypum hoc est fragmen infra
Noodles in basha
#!/usr/bin/env bash
missingPackets=0
ccErrorSeconds=0
regexMissPackets='^* (.+) - continuity:.*missing ([0-9]+) packets$'
missingPacketsTime=""
ip netns exec P tsp --realtime -t -I ip -b 8388608 "239.0.0.1:1234" -O drop -P bitrate_monitor -p 1 -t 1 -P continuity 2>&1 |
while read i
do
#line example:* 2019/12/28 23:41:14 - continuity: packet index: 6,078, PID: 0x0100, missing 5 packets
#line example 2: * 2019/12/28 23:55:11 - bitrate_monitor: 2019/12/28 23:55:11, TS bitrate: 4,272,864 bits/s
if [[ "$i" == *continuity:* ]]
then
if [[ "$i" =~ $regexMissPackets ]]
then
missingPacketsTimeNew="${BASH_REMATCH[1]}" #timestamp (seconds)
if [[ "$missingPacketsTime" != "$missingPacketsTimeNew" ]] #new second with CC error
then
((ccErrorSeconds += 1))
fi
missingPacketsTime=$missingPacketsTimeNew
packets=${BASH_REMATCH[2]} #TS missing packets
((missingPackets += packets))
fi
elif [[ "$i" == *bitrate_monitor:* ]]
then
: #...
fi
done
Praeterquam quod haec ingrata lente operantur, nulla sunt fila normalia in bash, bash jobs processuum independentium sunt et habui scribere valorem absentisPackets semel in secunda parte effectus (cum acceptis nuntiis bitrate secundo secundo venientibus). Quam ob rem bash solus relictus est et fasciculus (parser + aggregator) in golang scribere placuit. Consumptio CPU similium codicis in golang 4-5 temporibus minor est quam ipse processus tsp. Acceleratio involucri ponendo vercundus cum golang circiter 16 vicibus fuit et altiore eventu acceptus est (CPU supra caput per 25% in casu gravissimo). Fons file golang sita est
Deductis fascia
Ad involucrum deducendum, simplex religio templates systemd factum (
Exempli gratia creare opus est ut systemctl currunt mandatum [Inscriptio protected]1234:XNUMX, tunc currunt cum systemctl incipiendi [Inscriptio protected]: 1234.
Inventio de Zabbix
Ut zabbix invenire possit operas cursus.
Zabbix template
Brevis maculosus (quod si aliquis uti voluerit)
- Fac quod tsp condiciones "speciales" sub "ideale" facis non cadere (directe connectuntur generans et analyser), si guttae sunt, vide punctum 2 vel textus articuli de hac re.
- Hitum fac maximi quiddam nervum (net.core.rmem_max=8388608).
- Compilare tsduck-stat.go (ire construere tsduck-stat.go).
- Pone munus template in /lib/systemd/system.
- Officia incipiunt utentes systemctl, calculi reprehendo qui inceperunt apparere (grep "" /dev/shm/tsduck-stat/*). Numero officiorum numero multicast rivi. Hic debes creare iter ad catervam multicastam, fortasse rp_filter disable vel iter ad fontem ip creare.
- Curre invention.sh, fac generat json.
- Pone zabbix agente config, sileo agente zabbix.
- Formulam ad zabbix adplica, applica ad exercitum in quo vigilantia exercetur et zabbix agentis inauguratus est, circiter 5 minuta expecta, vide ut nova elementa, graphes et triggers apparuerint.
exitum
Negotium enim cognoscendi fasciculi iacturam fere satis est, saltem nulla vigilantia melior est.
Re quidem vera CC "damna" accidere possunt cum splicatio imaginum fragmentorum (quantum scio, hoc modo insertiones televisificarum localium in Russica Foederatione, i.e. sine recalculando CC occurro) accidere possunt, hoc memorandum est. In solutionibus proprietatis, quaestio haec partim circumvenit detecta SCTE-35 tags (si adduntur a generante flumine).
Ex parte onerariae qualitatis vigilantia, jitter vigilantia non sufficit, quia Instrumentum TV (sive machinis modulatoribus sive fine) ad hunc modulum requisita habet nec semper possibile est jitbuffer indefinite inflare. Et jitter innatare potest, cum transitus instrumentis utitur cum magnis buffers et QoS non configuratur vel satis non configuratur ad talem mercaturam realem tradendam.
Source: www.habr.com