TSDuck a úsáid chun Monatóireacht a dhéanamh ar Shruthanna IP(TS).

Sa lá atá inniu ann, tá réitigh réamhdhéanta (dílseánaigh) ann chun monatóireacht a dhéanamh ar shruthanna IP(TS), mar shampla VB и iQ, tá sraith feidhmeanna sách saibhir acu agus de ghnáth bíonn réitigh den sórt sin ag oibreoirí móra a bhíonn ag déileáil le seirbhísí teilifíse. Déanann an t-alt seo cur síos ar réiteach atá bunaithe ar thionscadal foinse oscailte TSDuck, atá deartha le haghaidh rialú íosta ar shruthanna IP(TS) ag cuntar CC (cuntar leanúnachais) agus ráta giotán. Feidhm fhéideartha is ea caillteanas paicéid nó an sreabhadh iomlán a rialú trí chainéal L2 ar léas (nach féidir monatóireacht a dhéanamh air de ghnáth, mar shampla, trí áiritheoirí caillteanais a léamh i scuainí).

Go hachomair faoi TSDuck

Is bogearraí foinse oscailte é TSDuck (ceadúnas BSD 2-Chlásal) (sraith d’fhóntas consól agus leabharlann chun fóntais nó breiseán saincheaptha a fhorbairt) chun sruthanna TS a ionramháil. Mar ionchur, is féidir é a bheith ag obair le IP (multicast/unicast), http, hls, tuners dvb, dektec dvb-asi demodulator, tá gineadóir inmheánach TS-sruth agus léamh ó chomhaid. Is féidir an t-aschur a scríobh chuig comhad, IP (ilchraoladh/unicast), hls, modhnóirí dektec dvb-asi agus HiDes, imreoirí (mplayer, vlc, xine) agus drop. Is féidir próiseálaithe tráchta éagsúla a áireamh idir ionchur agus aschur, mar shampla, athmhapáil PID, scrambling / descrambling, anailís cuntair CC, ríomh ráta giotán, agus oibríochtaí tipiciúla eile le haghaidh sruthanna TS.

San Airteagal seo, úsáidfear sruthanna IP (ilchraoladh) mar ionchur, úsáidtear bitrate_monitor na próiseálaithe (ón ainm is léir cad é) agus leanúnachas (anailís ar chuntair CC). Is féidir leat ilchraoladh IP a athsholáthar go héasca le cineál eile ionchuir le tacaíocht ó TSDuck.

tógálacha/pacáistí oifigiúla TSDuck don chuid is mó de na córais oibriúcháin reatha. Níl siad ar fáil do Debian, ach d'éirigh linn iad a thógáil faoi debian 8 agus debian 10 gan aon fhadhbanna.

Ar aghaidh, úsáidtear leagan TSDuck 3.19-1520, úsáidtear Linux mar an OS (úsáideadh debian 10 chun an réiteach a ullmhú, baineadh úsáid as CentOS 7 le haghaidh fíorúsáide)

TSDuck agus OS a ullmhú

Sula ndéanann tú monatóireacht ar shreafaí fíor, ní mór duit a chinntiú go n-oibríonn TSDuck i gceart agus nach bhfuil aon titeann ag leibhéal an chárta líonra nó an OS (soicéad). Tá sé seo riachtanach ionas nach dtabharfar buille faoi thuairim níos déanaí cá háit ar tharla na titeann - ar an líonra nó "taobh istigh den fhreastalaí". Is féidir leat titeann a sheiceáil ar leibhéal an chárta líonra leis an ordú ethtool -S ethX, déantar an tiúnadh ag an ethtool céanna (de ghnáth, ní mór duit an maolán RX (-G) a mhéadú agus uaireanta roinnt uaslódálacha a dhíchumasú (-K)). Mar mholadh ginearálta, is féidir a mholadh go n-úsáidfí calafort ar leith chun an trácht anailísithe a fháil, más féidir, laghdaíonn sé seo dearfacha bréagacha a bhaineann leis an bhfíric gur tharla an titim go díreach ar an gcalafort anailísí mar gheall ar láithreacht tráchta eile. Mura féidir é seo a dhéanamh (úsáidtear mion-ríomhaire/NUC le calafort amháin), tá sé thar a bheith inmhianaithe tús áite a thabhairt don trácht anailísithe maidir leis an gcuid eile ar an ngléas a bhfuil an anailíseoir ceangailte leis. Maidir le timpeallachtaí fíorúla, anseo ní mór duit a bheith cúramach agus a bheith in ann titeann paicéad a aimsiú ag tosú ó chalafort fisiceach agus ag críochnú le hiarratas taobh istigh de mheaisín fíorúil.

Giniúint agus fáiltiú sruth taobh istigh den ósta

Mar chéad chéim in ullmhú TSDuck, ginfimid agus gheobhaidh muid trácht laistigh d'óstach amháin ag baint úsáide as netns.

An timpeallacht a ullmhú:

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

Tá an timpeallacht réidh. Cuirimid tús leis an anailíseoir tráchta:

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

nuair a chiallaíonn "-p 1 -t 1" go gcaithfidh tú an ráta giotán a ríomh gach soicind agus faisnéis faoin ráta giotán a thaispeáint gach soicind
Cuirimid tús leis an gineadóir tráchta le luas 10Mbps:

tsp -I craft 
 -P regulate -b 10000000 
 -O ip -p 7 -e --local-port 6000 239.0.0.1:1234

áit a gciallaíonn "-p 7 -e" gur gá duit 7 bpaicéad TS a phacáil isteach i bpaicéad 1 IP agus é a dhéanamh go dian (-e), i.e. fan i gcónaí 7 bpaicéad TS ón bpróiseálaí deireanach sula seolann tú paicéad IP.

Tosaíonn an anailíseoir na teachtaireachtaí ionchais a aschur:

* 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

Anois cuir roinnt braon leis:

ip netns exec P iptables -I INPUT -d 239.0.0.1 -m statistic --mode random --probability 0.001 -j DROP

agus tá teachtaireachtaí mar seo le feiceáil:

* 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 

a bhfuiltear ag súil leis. Díchumasaigh caillteanas paicéad (ip netns exec P iptables -F) agus déan iarracht an ráta giotán gineadóra a mhéadú go 100Mbps. Tuairiscíonn an anailíseoir a bunch de earráidí CC agus thart ar 75 Mbps in ionad 100. Táimid ag iarraidh a dhéanamh amach cé atá an milleán - nach bhfuil an gineadóir ag am nó nach bhfuil an fhadhb ann, le haghaidh seo tosaímid ag giniúint líon seasta de paicéid (700000 paicéad TS = 100000 paicéad IP):

# 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

Mar a fheiceann tú, gineadh díreach 100000 paicéad IP (151925460-151825460). Mar sin déanaimis a dhéanamh amach cad atá ag tarlú leis an anailísí, le haghaidh seo déanaimid seiceáil leis an gcuntar RX ar veth1, tá sé go docht comhionann leis an gcuntar TX ar veth0, ansin féachaimid ar cad a tharlaíonn ag an leibhéal soicéad:

# 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 

Anseo is féidir leat líon na dtiteann = 24355 a fheiceáil. I bpacáistí TS, is é seo 170485 nó 24.36% de 700000, mar sin feicimid go bhfuil an 25% céanna sin den ráta giotán caillte mar thiteann sa soicéad udp. Tarlaíonn titeann i soicéad UDP de ghnáth mar gheall ar easpa maoláin, féach ar mhéid maoláin réamhshocraithe an tsoicéid agus ar uasmhéid maoláin an tsoicéid:

# sysctl net.core.rmem_default
net.core.rmem_default = 212992
# sysctl net.core.rmem_max
net.core.rmem_max = 212992

Mar sin, mura n-iarrann feidhmchláir méid maoláin go sainráite, cruthaítear soicéid le maolán 208 KB, ach má iarrann siad níos mó, ní bhfaighidh siad an méid a iarradh fós. Ós rud é gur féidir leat an méid maoláin a shocrú i tsp don ionchur IP (-buffer-size), ní dhéanfaimid teagmháil leis an méid réamhshocraithe soicéad, ach socróimid an t-uasmhéid maolán soicéad agus sonraigh an méid maoláin go sainráite trí na hargóintí tsp:

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

Leis an tiúnadh seo ar an maolán soicéad, anois tá an ráta giotán tuairiscithe thart ar 100Mbps, níl aon earráidí CC ann.

De réir tomhaltas LAP an iarratais tsp féin. I gcomparáid le croí amháin i5-4260U CPU @ 1.40GHz, beidh gá le hanailís sreabhadh 10Mbps 3-4% LAP, 100Mbps - 25%, 200Mbps - 46%. Agus an % Caillteanas Paicéad á shocrú, ní mhéadóidh an t-ualach ar an LAP go praiticiúil (ach d'fhéadfadh sé laghdú).

Ar chrua-earraí níos táirgiúla, bhíothas in ann sruthanna níos mó ná 1Gb / s a ​​ghiniúint agus a anailísiú gan aon fhadhbanna.

Tástáil ar chárta líonra saor in aisce,

Tar éis tástáil a dhéanamh ar phéire veth, ní mór duit dhá óstach nó dhá chalafoirt óstach amháin a ghlacadh, na calafoirt a nascadh lena chéile, an gineadóir a thosú ar cheann amháin, agus an anailíseoir ar an dara ceann. Ní raibh aon iontas anseo, ach i ndáiríre braitheann sé ar fad ar an iarann, an níos laige, an níos suimiúla a bheidh sé anseo.

Ag baint úsáide as na sonraí faighte ag an gcóras monatóireachta (Zabbix)

níl aon API meaisín-inléite ag tsp mar SNMP nó a leithéid. Ní mór teachtaireachtaí CC a chomhiomlánú ar feadh soicind 1 ar a laghad (le céatadán ard de chaillteanas paicéid, is féidir na céadta/míle/na mílte in aghaidh an tsoicind a bheith ann, ag brath ar an ráta giotán).

Mar sin, d’fhonn an dá fhaisnéis a shábháil agus graif a tharraingt le haghaidh earráidí CC agus giotánráta agus tionóiscí de chineál éigin a dhéanamh, d’fhéadfadh na roghanna seo a leanas a bheith ann:

  1. Parsáil agus comhiomlán (de réir CC) aschur tsp, i.e. é a thiontú go dtí an fhoirm atá ag teastáil.
  2. Críochnaigh tsp féin agus/nó breiseán próiseálaí bitrate_monitor agus leanúnachas ionas go dtabharfar an toradh i bhfoirm atá inléite ag meaisín agus atá oiriúnach don chóras monatóireachta.
  3. Scríobh d’iarratas ar bharr leabharlann tsduck.

Ar ndóigh, is í rogha 1 an ceann is fusa ó thaobh iarrachta de, go háirithe ag cur san áireamh go bhfuil an tsduck féin scríofa i dteanga ísealleibhéil (de réir caighdeáin nua-aimseartha) (C ++)

Léirigh fréamhshamhail simplí parsálaí + comhbhailitheoir bash, ar shruth 10Mbps agus caillteanas paicéad 50% (an cás is measa), gur ith an próiseas bash 3-4 huaire níos mó LAP ná an próiseas tsp féin. Níl an cás seo do-ghlactha. I ndáiríre píosa den fhréamhshamhail seo thíos

Núdail ar an mbarr

#!/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

Chomh maith le bheith mall do-ghlactha, níl aon snáitheanna gnáth i bash, tá poist bash próisis ar leith agus bhí orm a scríobh ar an luach ar iarraidhPackets uair sa soicind ar an éifeacht taobh (nuair a fháil teachtaireachtaí giotán ráta a thagann gach soicind). Mar thoradh air sin, fágadh bash leis féin agus socraíodh fillteán (parser + aggregator) a scríobh i golang. Tá tomhaltas LAP cód golang den chineál céanna 4-5 huaire níos lú ná an próiseas tsp féin. D'éirigh le luasú an fhillteáin mar gheall ar athsholáthar bash le golang a bheith thart ar 16 huaire agus go ginearálta tá an toradh inghlactha (LAP lastuas de 25% sa chás is measa). Tá an comhad foinse golang suite anseo.

Rith fillteán

Chun an fillteán a thosú, rinneadh an teimpléad seirbhíse is simplí do systemd (anseo). Tá an fillteán féin ceaptha le tiomsú isteach i gcomhad dénártha (go build tsduck-stat.go) atá suite in /opt/tsduck-stat/. Glactar leis go bhfuil tú ag úsáid golang le tacaíocht don chlog monotonach (>=1.9).

Chun sampla den tseirbhís a chruthú, ní mór duit an t-ordú cumasaithe systemctl a rith [ríomhphost faoi chosaint]:1234 ansin rith le systemctl tosaithe [ríomhphost faoi chosaint]: 1234.

Fionnachtain ó Zabbix

Ionas go mbeidh zabbix in ann seirbhísí reatha a fháil amach, déantar é Gineadóir liosta grúpa (discovery.sh), san fhormáid atá ag teastáil le haghaidh fionnachtain Zabbix, glactar leis go bhfuil sé suite san áit chéanna - in /opt/tsduck-stat. Chun fionnachtain a rith trí zabbix-agent, ní mór duit a chur leis comhad .conf chuig an eolaire cumraíochta zabbix-agent chun an paraiméadar úsáideora a chur leis.

Teimpléad Zabbix

Teimpléad cruthaithe (tsduck_stat_template.xml) ina bhfuil an riail autodiscover, fréamhshamhlacha míreanna, graif, agus truicear.

Seicliosta gairid (bhuel, cad má chinneann duine é a úsáid)

  1. Déan cinnte nach dtiteann tsp paicéid faoi choinníollacha "idéalach" (tá an gineadóir agus an anailísí ceangailte go díreach), má tá titeann ann, féach mír 2 nó téacs an ailt ar an ábhar seo.
  2. Déan an maolán soicéad uasta a thiúnta (net.core.rmem_max=8388608).
  3. Tiomsaigh tsduck-stat.go (téigh le tógáil tsduck-stat.go).
  4. Cuir an teimpléad seirbhíse i /lib/systemd/system.
  5. Cuir tús le seirbhísí le systemctl, seiceáil go bhfuil na cuntair tosaithe ag feiceáil (grep "" /dev/shm/tsduck-stat/*). Líon na seirbhísí de réir líon na sruthanna ilchraolacháin. Anseo b'fhéidir go mbeadh ort bealach a chruthú chuig an ngrúpa ilchraolacháin, b'fhéidir rp_filter a dhíchumasú nó bealach chuig an bhfoinse ip a chruthú.
  6. Rith discovery.sh, déan cinnte go ngineann sé json.
  7. Cuir config gníomhaire zabbix leis, atosú gníomhaire zabbix.
  8. Uaslódáil an teimpléad go zabbix, cuir i bhfeidhm é ar an ósta a bhfuil monatóireacht á déanamh air agus tá an gníomhaire zabbix suiteáilte, fan thart ar 5 nóiméad, féach an bhfuil míreanna, graif agus truicear nua ann.

Toradh

TSDuck a úsáid chun Monatóireacht a dhéanamh ar Shruthanna IP(TS).

Chun an tasc a bhaineann le caillteanas paicéad a bhrath, tá sé beagnach go leor, ar a laghad tá sé níos fearr ná aon mhonatóireacht.

Go deimhin, is féidir le “caillteanais” CC tarlú nuair a dhéantar blúirí físe a chumasc (chomh fada agus is eol dom, is é seo an chaoi a ndéantar ionsá in ionaid teilifíse áitiúla i gCónaidhm na Rúise, ie gan an cuntar CC a athríomh), ní mór cuimhneamh air seo. Téann réitigh dílseánaigh timpeall ar an bhfadhb seo go páirteach trí lipéid SCTE-35 a bhrath (má chuireann an gineadóir sruth leis).

Maidir le monatóireacht ar cháilíocht an iompair, tá easpa monatóireachta Giodam (IAT). Tá ceanglais maidir leis an bparaiméadar seo ag trealamh teilifíse (bíodh sé ina mhodhnóirí nó ina ghléasanna deiridh) agus ní féidir i gcónaí an jitbuffer a insroicheadh ​​go héigríoch. Agus is féidir le Giodam snámh nuair a úsáidtear trealamh le maoláin mhóra faoi bhealach agus nach bhfuil QoS cumraithe nó nach bhfuil cumraithe go maith go leor chun trácht fíor-ama den sórt sin a tharchur.

Foinse: will.com

Add a comment