DIY: sut rydym yn awtomeiddio monitro warws

Mae X5 yn gweithredu 43 o ganolfannau dosbarthu a 4 o'i lorïau ei hun, gan sicrhau cyflenwad di-dor o gynhyrchion i 029 o siopau. Yn yr erthygl hon byddaf yn rhannu fy mhrofiad o greu system ryngweithiol ar gyfer monitro digwyddiadau warws o'r dechrau. Bydd y wybodaeth yn ddefnyddiol i logistegwyr cwmnïau masnachu gyda sawl dwsin o ganolfannau dosbarthu yn rheoli ystod eang o gynhyrchion.

DIY: sut rydym yn awtomeiddio monitro warws

Fel rheol, mae adeiladu systemau monitro a rheoli prosesau busnes yn dechrau gyda phrosesu negeseuon a digwyddiadau. Ar yr un pryd, mae pwynt technolegol pwysig yn ymwneud â'r posibilrwydd o awtomeiddio'r union ffaith o ddigwyddiadau busnes a chofnodi digwyddiadau yn cael ei fethu. Mae gan y rhan fwyaf o systemau busnes fel WMS, TMS, ac ati, offer adeiledig ar gyfer monitro eu prosesau eu hunain. Ond, os yw'r rhain yn systemau gan weithgynhyrchwyr gwahanol neu os nad yw'r swyddogaeth fonitro wedi'i datblygu'n ddigonol, mae'n rhaid i chi archebu addasiadau drud neu ddenu ymgynghorwyr arbenigol ar gyfer gosodiadau ychwanegol.

Gadewch i ni ystyried dull gweithredu lle mai dim ond rhan fach o'r ymgynghori sy'n gysylltiedig â nodi ffynonellau (tablau) sydd ei angen arnom i gael dangosyddion o'r system.

Penodoldeb ein warysau yw bod nifer o systemau rheoli warws (WMS Exceed) yn gweithredu mewn un cyfadeilad logisteg. Rhennir warysau yn ôl categorïau storio nwyddau (sych, alcohol, wedi'u rhewi, ac ati) nid yn unig yn rhesymegol. O fewn un cyfadeilad logisteg mae sawl adeilad warws ar wahân, a rheolir pob un ohonynt gan ei WMS ei hun.

DIY: sut rydym yn awtomeiddio monitro warws

Er mwyn ffurfio darlun cyffredinol o'r prosesau sy'n digwydd yn y warws, mae rheolwyr yn dadansoddi adrodd pob WMS sawl gwaith y dydd, yn prosesu negeseuon gan weithredwyr warws (derbynwyr, codwyr, stacwyr) ac yn crynhoi'r dangosyddion gweithredol gwirioneddol i'w hystyried ar y bwrdd gwybodaeth.

Er mwyn arbed amser i reolwyr, penderfynasom ddatblygu system rad ar gyfer rheolaeth weithredol o ddigwyddiadau warws. Dylai'r system newydd, yn ogystal ag arddangos dangosyddion “poeth” o berfformiad gweithredol prosesau warws, hefyd helpu rheolwyr i gofnodi digwyddiadau a monitro gweithrediad tasgau i ddileu'r achosion sy'n effeithio ar y dangosyddion a roddir. Ar ôl cynnal archwiliad cyffredinol o saernïaeth TG y cwmni, sylweddolom fod rhannau unigol o'r system ofynnol eisoes yn bodoli mewn rhyw ffordd neu'i gilydd yn ein tirwedd ac ar eu cyfer mae archwiliad o'r gosodiadau a'r gwasanaethau cymorth angenrheidiol. Y cyfan sydd ar ôl yw dod â'r cysyniad cyfan i un ateb pensaernïol ac amcangyfrif cwmpas y datblygiad.

Ar ôl asesu faint o waith sydd angen ei wneud i adeiladu system newydd, penderfynwyd rhannu’r prosiect yn sawl cam:

  1. Casglu dangosyddion ar gyfer prosesau warws, delweddu a rheoli dangosyddion a gwyriadau
  2. Awtomeiddio safonau proses a chofrestru ceisiadau yn y gwasanaeth gwasanaethau busnes ar gyfer gwyriadau
  3. Monitro rhagweithiol gyda rhagolygon llwyth a chreu argymhellion i reolwyr.

Yn y cam cyntaf, rhaid i'r system gasglu darnau parod o ddata gweithredol o holl WMS y cyfadeilad. Mae darllen yn digwydd bron mewn amser real (sbeidiau o lai na 5 munud). Y tric yw bod yn rhaid cael data gan y DBMS o sawl dwsin o warysau wrth ddefnyddio'r system i'r rhwydwaith cyfan. Mae'r data gweithredol a dderbynnir yn cael ei brosesu gan resymeg craidd y system i gyfrifo gwyriadau oddi wrth ddangosyddion arfaethedig a chyfrifo ystadegau. Rhaid arddangos y data a brosesir yn y modd hwn ar dabled y rheolwr neu ar fwrdd gwybodaeth y warws ar ffurf graffiau a diagramau dealladwy.

DIY: sut rydym yn awtomeiddio monitro warws

Wrth ddewis system addas ar gyfer gweithredu peilot y cam cyntaf, fe wnaethom ddewis Zabbix. Defnyddir y system hon eisoes i fonitro perfformiad TG systemau warws. Trwy ychwanegu gosodiad ar wahân ar gyfer casglu metrigau busnes o weithrediad warws, gallwch gael darlun cyffredinol o iechyd y warws.

Trodd pensaernïaeth gyffredinol y system allan fel yn y ffigur.

DIY: sut rydym yn awtomeiddio monitro warws

Diffinnir pob enghraifft WMS fel gwesteiwr ar gyfer y system fonitro. Cesglir metrigau gan weinydd canolog yn rhwydwaith y ganolfan ddata trwy redeg sgript gydag ymholiad SQL parod. Os oes angen i chi fonitro system nad yw'n argymell mynediad uniongyrchol i'r gronfa ddata (er enghraifft, SAP EWM), gallwch ddefnyddio galwadau sgript i swyddogaethau API wedi'u dogfennu i gael dangosyddion neu ysgrifennu rhaglen syml yn python / vbascript.

Mae enghraifft dirprwy Zabbix yn cael ei ddefnyddio yn y rhwydwaith warws i ddosbarthu'r llwyth o'r prif weinydd. Trwy Ddirprwy, sicrheir gwaith gyda phob achos WMS lleol. Y tro nesaf y bydd gweinydd Zabbix yn gofyn am baramedrau, gweithredir sgript ar y gwesteiwr gyda dirprwy Zabbix i ofyn am fetrigau o gronfa ddata WMS.

I arddangos graffiau a dangosyddion warws ar weinydd canolog Zabbix, rydym yn defnyddio Grafana. Yn ogystal ag arddangos dangosfyrddau parod gyda ffeithluniau o weithrediadau warws, bydd Grafana yn cael ei ddefnyddio i fonitro gwyriadau mewn dangosyddion ac anfon rhybuddion awtomatig i'r system gwasanaeth warws ar gyfer gweithio gyda digwyddiadau busnes.

Er enghraifft, gadewch i ni ystyried gweithredu rheolaeth llwyth yn yr ardal dderbyn warws. Dewiswyd y canlynol fel y prif ddangosyddion perfformiad proses yn y maes hwn o'r warws:

  • nifer y cerbydau yn y dderbynfa, gan ystyried statws (wedi'i gynllunio, cyrraedd, dogfennau, dadlwytho, gadael;
  • llwyth gwaith ardaloedd lleoli ac ailgyflenwi (yn ôl amodau storio).

Gosodiadau

Disgrifir gosod a chyfluniad prif gydrannau'r system (SQLcl, Zabbix, Grafana) mewn amrywiol ffynonellau ac ni fyddant yn cael eu hailadrodd yma. Mae'r defnydd o SQLcl yn lle SQLplus oherwydd y ffaith nad oes angen gosod y Cleient Oracle yn ychwanegol ar SQLcl (rhyngwyneb llinell orchymyn yr Oracle DBMS, a ysgrifennwyd yn java) ac mae'n gweithio allan o'r blwch.

Disgrifiaf y prif bwyntiau y dylid rhoi sylw iddynt wrth ddefnyddio Zabbix i fonitro dangosyddion prosesau busnes warws, ac un o'r ffyrdd posibl o'u gweithredu. Hefyd, nid post am ddiogelwch yw hwn. Mae diogelwch cysylltiadau a'r defnydd o'r dulliau a gyflwynir yn gofyn am astudiaeth ychwanegol yn y broses o drosglwyddo'r datrysiad peilot i weithrediad cynhyrchiol.

Y prif beth yw, wrth weithredu system o'r fath, mae'n bosibl gwneud heb raglennu, gan ddefnyddio'r gosodiadau a ddarperir gan y system.

Mae system fonitro Zabbix yn darparu sawl opsiwn ar gyfer casglu metrigau o'r system fonitro. Gellir gwneud hyn naill ai drwy bleidleisio gwesteiwyr a fonitrir yn uniongyrchol, neu drwy ddull mwy datblygedig o anfon data i'r gweinydd trwy zabbix_sender y gwesteiwr, gan gynnwys dulliau ar gyfer ffurfweddu paramedrau darganfod lefel isel. I ddatrys ein problem, mae'r dull o bleidleisio gwesteiwyr yn uniongyrchol gan weinydd canolog yn eithaf addas, oherwydd mae hyn yn eich galluogi i gael rheolaeth lawn dros y dilyniant o gaffael metrigau ac yn sicrhau eich bod yn defnyddio un set o osodiadau/sgriptiau heb fod angen eu dosbarthu i bob gwesteiwr a fonitrir.

Fel “pynciau prawf” ar gyfer dadfygio a sefydlu'r system, rydym yn defnyddio taflen waith WMS ar gyfer rheoli derbyn:

  1. Cerbydau yn y dderbynfa, pob un sydd wedi cyrraedd: Pob cerbyd â statws am y cyfnod “- 72 awr o’r amser presennol” - Dynodwr ymholiad SQL: caelCars.
  2. Hanes pob statws cerbyd: Statws pob cerbyd sy'n cyrraedd o fewn 72 awr - Dynodwr ymholiad SQL: ceirHanes.
  3. Cerbydau wedi'u hamserlennu i'w derbyn: Statws pob cerbyd sy'n cyrraedd y statws “Wedi'i Drefnu”, cyfwng amser “- 24 awr” a “+24 awr” o'r amser presennol - Dynodwr ymholiad SQL: ceirYn.

Felly, ar ôl i ni benderfynu ar set o fetrigau perfformiad warws, byddwn yn paratoi ymholiadau SQL ar gyfer cronfa ddata WMS. I weithredu ymholiadau, fe'ch cynghorir i ddefnyddio nid y brif gronfa ddata, ond ei chopi “poeth” - wrth gefn.

Rydym yn cysylltu ag Oracle DBMS wrth gefn i dderbyn data. Cyfeiriad IP ar gyfer cysylltu â'r gronfa ddata prawf 192.168.1.106. Rydym yn cadw'r paramedrau cysylltiad ar y gweinydd Zabbix yn TNSNames.ORA o'r ffolder gweithio SQLcl:

# cat  /opt/sqlcl/bin/TNSNames.ORA
WH1_1=
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.106)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME =  WH1_1)
    )
  )

Bydd hyn yn caniatáu inni redeg ymholiadau SQL i bob gwesteiwr trwy EZconnect, gan nodi dim ond y mewngofnodi / cyfrinair ac enw cronfa ddata:

# sql znew/Zabmon1@WH1_1

Rydym yn cadw'r ymholiadau SQL parod yn y ffolder gweithio ar y gweinydd Zabbix:

/etc/zabbix/sql

a chaniatáu mynediad i ddefnyddiwr zabbix ein gweinydd:

# chown zabbix:zabbix -R /etc/zabbix/sql

Mae ffeiliau gyda cheisiadau yn derbyn enw dynodwr unigryw i'w cyrchu o'r gweinydd Zabbix. Mae pob ymholiad cronfa ddata trwy SQLcl yn dychwelyd sawl paramedr inni. Gan ystyried manylion Zabbix, sy'n gallu prosesu un metrig yn unig fesul cais, byddwn yn defnyddio sgriptiau ychwanegol i ddosrannu canlyniadau'r ymholiad yn fetrigau unigol.

Gadewch i ni baratoi'r brif sgript, gadewch i ni ei alw'n wh_Metrics.sh, i alw ymholiad SQL i'r gronfa ddata, arbed y canlyniadau a dychwelyd metrig technegol gyda dangosyddion llwyddiant adfer data:

#!/bin/sh 
## настройка окружения</i>
export ORACLE_HOME=/usr/lib/oracle/11.2/client64
export PATH=$PATH:$ORACLE_HOME/bin
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib64:/usr/lib:$ORACLE_HOME/bin
export TNS_ADMIN=$ORACLE_HOME/network/admin
export JAVA_HOME=/
alias sql="opt/sqlcl/bin/sql"
## задаём путь к файлу с sql-запросом и параметризованное имя файла
scriptLocation=/etc/zabbix/sql
sqlFile=$scriptLocation/sqlScript_"$2".sql
## задаём путь к файлу для хранения результатов
resultFile=/etc/zabbix/sql/mon_"$1"_main.log
## настраиваем строку подключения к БД
username="$3"
password="$4"
tnsname="$1"
## запрашиваем результат из БД
var=$(sql -s $username/$password@$tnsname < $sqlFile)
## форматируем результат запроса и записываем в файл
echo $var | cut -f5-18 -d " " > $resultFile
## проверяем наличие ошибок
if grep -q ora "$resultFile"; then
    echo null > $resultFile
    echo 0
else
    echo 1
fi

Rydyn ni'n gosod y ffeil orffenedig gyda'r sgript yn y ffolder ar gyfer storio sgriptiau allanol yn unol â gosodiadau cyfluniad Zabbix-proxy (yn ddiofyn - /usr/local/share/zabbix/externalscripts).

Bydd adnabyddiaeth y gronfa ddata y bydd y sgript yn derbyn canlyniadau ohoni yn cael ei basio fel paramedr sgript. Rhaid i ID y gronfa ddata gyfateb i'r llinell gosodiadau yn y ffeil TNSNames.ORA.

Mae canlyniad yr alwad ymholiad SQL yn cael ei gadw mewn ffeil fel mon_base_id_main.log lle base_id = Dynodwr y gronfa ddata a dderbyniwyd fel paramedr sgript. Darperir rhaniad y ffeil canlyniad â dynodwyr cronfa ddata rhag ofn y bydd ceisiadau gan y gweinydd i sawl cronfa ddata ar yr un pryd. Mae'r ymholiad yn dychwelyd amrywiaeth o werthoedd dau ddimensiwn wedi'u didoli.

Mae angen y sgript ganlynol, gadewch i ni ei alw'n getMetrica.sh, i gael metrig penodol o ffeil gyda chanlyniad cais:

#!/bin/sh 
## определяем имя файла с результатом запроса
resultFile=/etc/zabbix/sql/mon_”$1”_main.log
## разбираем массив значений результата средствами скрипта:
## при работе со статусами, запрос возвращает нам двумерный массив (RSLT) в виде 
## {статус1 значение1 статус2 значение2…} разделённых пробелами (значение IFS)
## параметром запроса передаём код статуса и скрипт вернёт значение
IFS=’ ‘
str=$(cat $resultFile)
status_id=null
read –ra RSLT <<< “$str”
for i in “${RSLT[@]}”; do
if [[ “$status_id” == null ]]; then
status_id=”$I"
elif [[ “$status_id” == “$2” ]]; then
echo “$i”
break
else
status_id=null
fi
done

Nawr rydym yn barod i ffurfweddu Zabbix a dechrau monitro dangosyddion prosesau derbyn warws.

Mae asiant Zabbix wedi'i osod a'i ffurfweddu ar bob nod cronfa ddata.

Ar y prif weinydd rydym yn diffinio pob gweinydd gyda dirprwy Zabbix. Ar gyfer gosodiadau, ewch i'r llwybr canlynol:

Gweinyddu → Dirprwy → Creu dirprwy

DIY: sut rydym yn awtomeiddio monitro warws

Rydym yn diffinio gwesteiwyr rheoledig:

Gosodiadau → Gwesteiwyr → Creu gwesteiwr

DIY: sut rydym yn awtomeiddio monitro warws

Rhaid i'r enw gwesteiwr gyfateb i'r enw gwesteiwr a nodir yn y ffeil ffurfweddu asiant.

Rydym yn nodi'r grŵp ar gyfer y nod, yn ogystal â'r cyfeiriad IP neu enw DNS y nod gyda'r gronfa ddata.

Rydym yn creu metrigau ac yn nodi eu priodweddau:

Gosodiadau → Nodau → 'enw nod' → Eitemau Data> Creu Eitem Data

1) Creu prif fetrig i gwestiynu'r holl baramedrau o'r gronfa ddata

DIY: sut rydym yn awtomeiddio monitro warws

Rydym yn gosod enw'r elfen ddata, yn nodi'r math "Gwirio allanol". Yn y maes “Allweddol”, rydym yn diffinio sgript y byddwn yn trosglwyddo iddi fel paramedrau enw cronfa ddata Oracle, enw'r ymholiad sql, y mewngofnodi a'r cyfrinair ar gyfer cysylltu â'r gronfa ddata. Gosodwch yr egwyl diweddaru ymholiad i 5 munud (300 eiliad).

2) Creu'r metrigau sy'n weddill ar gyfer statws pob cerbyd. Bydd gwerthoedd y metrigau hyn yn cael eu cynhyrchu yn seiliedig ar ganlyniad gwirio'r prif fetrig.

DIY: sut rydym yn awtomeiddio monitro warws

Rydym yn gosod enw'r elfen ddata, yn nodi'r math "Gwirio allanol". Yn y maes “Allweddol”, rydym yn diffinio sgript y byddwn yn trosglwyddo iddo fel paramedrau enw cronfa ddata Oracle a'r cod statws yr ydym am olrhain ei werth. Rydym yn gosod cyfwng diweddaru'r ymholiad i 10 eiliad yn hwy na'r prif fetrig (310 eiliad) fel bod amser i ysgrifennu'r canlyniadau i'r ffeil.

Er mwyn cael metrigau'n gywir, mae'r drefn y caiff gwiriadau eu rhoi ar waith yn bwysig. Er mwyn osgoi gwrthdaro wrth dderbyn data, yn gyntaf oll rydym yn actifadu'r prif fetrig GetCarsByStatus trwy ffonio'r sgript - wh_Metrics.sh.

Gosodiadau → Nodau → 'enw nod' → Elfennau data → Is-hidlen “Gwiriadau allanol”. Marciwch y siec angenrheidiol a chlicio "Activate".

DIY: sut rydym yn awtomeiddio monitro warws

Nesaf, rydym yn actifadu'r metrigau sy'n weddill mewn un gweithrediad, gan eu dewis i gyd gyda'i gilydd:

DIY: sut rydym yn awtomeiddio monitro warws

Nawr mae Zabbix wedi dechrau casglu metrigau busnes warws.

Yn yr erthyglau canlynol, byddwn yn edrych yn agosach ar gysylltu Grafana a chreu dangosfyrddau gwybodaeth o weithrediadau warws ar gyfer gwahanol gategorïau o ddefnyddwyr. Defnyddir Grafana hefyd i fonitro gwyriadau mewn gweithrediadau warws ac, yn dibynnu ar ffiniau ac amlder gwyriadau, cofrestru digwyddiadau yn y system canolfan gwasanaeth rheoli warws trwy API neu anfon hysbysiadau at y rheolwr trwy e-bost.

DIY: sut rydym yn awtomeiddio monitro warws

Ffynhonnell: hab.com

Ychwanegu sylw