DIY: cara kami mengautomasikan pemantauan gudang

X5 mengendalikan 43 pusat pengedaran dan 4 trak sendiri, memastikan bekalan produk tidak terganggu kepada 029 kedai. Dalam artikel ini saya akan berkongsi pengalaman saya mencipta sistem interaktif untuk memantau acara gudang dari awal. Maklumat ini berguna kepada ahli logistik syarikat perdagangan dengan beberapa dozen pusat pengedaran yang menguruskan pelbagai produk.

DIY: cara kami mengautomasikan pemantauan gudang

Sebagai peraturan, pembinaan sistem pemantauan dan pengurusan proses perniagaan bermula dengan memproses mesej dan insiden. Pada masa yang sama, titik teknologi penting yang berkaitan dengan kemungkinan mengautomasikan fakta kejadian perniagaan dan insiden rakaman terlepas. Kebanyakan sistem perniagaan seperti WMS, TMS, dsb., mempunyai alatan terbina dalam untuk memantau proses mereka sendiri. Tetapi, jika ini adalah sistem daripada pengeluar yang berbeza atau fungsi pemantauan tidak dibangunkan dengan secukupnya, anda perlu memesan pengubahsuaian yang mahal atau menarik perunding khusus untuk tetapan tambahan.

Mari kita pertimbangkan pendekatan di mana kita hanya memerlukan sebahagian kecil daripada perundingan yang berkaitan dengan mengenal pasti sumber (jadual) untuk mendapatkan penunjuk daripada sistem.

Kekhususan gudang kami ialah beberapa sistem pengurusan gudang (WMS Exceed) beroperasi di satu kompleks logistik. Gudang dibahagikan mengikut kategori penyimpanan barang (kering, alkohol, beku, dll.) bukan sahaja secara logik. Dalam satu kompleks logistik terdapat beberapa bangunan gudang yang berasingan, setiap satunya diuruskan oleh WMSnya sendiri.

DIY: cara kami mengautomasikan pemantauan gudang

Untuk membentuk gambaran umum proses yang berlaku di gudang, pengurus menganalisis pelaporan setiap WMS beberapa kali sehari, memproses mesej daripada operator gudang (penerima, pemetik, penyusun) dan meringkaskan penunjuk operasi sebenar untuk refleksi pada papan maklumat.

Untuk menjimatkan masa pengurus, kami memutuskan untuk membangunkan sistem yang murah untuk kawalan operasi acara gudang. Sistem baru, selain memaparkan penunjuk "panas" prestasi operasi proses gudang, juga harus membantu pengurus dalam merekod insiden dan memantau pelaksanaan tugas untuk menghapuskan punca yang mempengaruhi penunjuk yang diberikan. Selepas menjalankan audit umum seni bina IT syarikat, kami menyedari bahawa bahagian individu sistem yang diperlukan sudah wujud dalam satu atau lain cara dalam landskap kami dan bagi mereka terdapat pemeriksaan tetapan dan perkhidmatan sokongan yang diperlukan. Apa yang tinggal ialah membawa keseluruhan konsep ke dalam satu penyelesaian seni bina dan menganggarkan skop pembangunan.

Selepas menilai jumlah kerja yang perlu dilakukan untuk membina sistem baharu, diputuskan untuk membahagikan projek kepada beberapa peringkat:

  1. Pengumpulan penunjuk untuk proses gudang, visualisasi dan kawalan penunjuk dan sisihan
  2. Automasi piawaian proses dan pendaftaran aplikasi dalam perkhidmatan perkhidmatan perniagaan untuk penyelewengan
  3. Pemantauan proaktif dengan ramalan beban dan penciptaan cadangan untuk pengurus.

Pada peringkat pertama, sistem mesti mengumpul kepingan data operasi yang disediakan daripada semua WMS kompleks. Pembacaan berlaku hampir dalam masa nyata (selang kurang daripada 5 minit). Caranya ialah data mesti diperoleh daripada DBMS beberapa dozen gudang apabila menggunakan sistem ke seluruh rangkaian. Data operasi yang diterima diproses oleh logik teras sistem untuk mengira sisihan daripada penunjuk yang dirancang dan mengira statistik. Data yang diproses dengan cara ini mesti dipaparkan pada tablet pengurus atau pada papan maklumat gudang dalam bentuk graf dan rajah yang boleh difahami.

DIY: cara kami mengautomasikan pemantauan gudang

Apabila memilih sistem yang sesuai untuk pelaksanaan perintis peringkat pertama, kami memilih Zabbix. Sistem ini telah digunakan untuk memantau prestasi IT sistem gudang. Dengan menambahkan pemasangan berasingan untuk mengumpul metrik perniagaan operasi gudang, anda boleh mendapatkan gambaran keseluruhan tentang kesihatan gudang.

Seni bina umum sistem ternyata seperti dalam rajah.

DIY: cara kami mengautomasikan pemantauan gudang

Setiap kejadian WMS ditakrifkan sebagai hos untuk sistem pemantauan. Metrik dikumpulkan oleh pelayan pusat dalam rangkaian pusat data dengan menjalankan skrip dengan pertanyaan SQL yang disediakan. Jika anda perlu memantau sistem yang tidak mengesyorkan akses terus kepada pangkalan data (contohnya, SAP EWM), anda boleh menggunakan panggilan skrip ke fungsi API yang didokumenkan untuk mendapatkan penunjuk atau menulis program ringkas dalam python/vbascript.

Contoh proksi Zabbix digunakan dalam rangkaian gudang untuk mengagihkan beban daripada pelayan utama. Melalui Proksi, bekerja dengan semua kejadian WMS tempatan dipastikan. Pada kali seterusnya pelayan Zabbix meminta parameter, skrip dilaksanakan pada hos dengan proksi Zabbix untuk meminta metrik daripada pangkalan data WMS.

Untuk memaparkan graf dan penunjuk gudang pada pelayan Zabbix pusat, kami menggunakan Grafana. Selain memaparkan papan pemuka yang disediakan dengan maklumat grafik operasi gudang, Grafana akan digunakan untuk memantau penyelewengan dalam penunjuk dan menghantar makluman automatik kepada sistem perkhidmatan gudang untuk menangani insiden perniagaan.

Sebagai contoh, mari kita pertimbangkan pelaksanaan kawalan beban di kawasan penerimaan gudang. Berikut telah dipilih sebagai penunjuk utama prestasi proses di kawasan gudang ini:

  • bilangan kenderaan di kawasan penerimaan, dengan mengambil kira status (dirancang, tiba, dokumen, memunggah, berlepas;
  • beban kerja kawasan penempatan dan penambahan semula (mengikut keadaan penyimpanan).

Tetapan

Pemasangan dan konfigurasi komponen utama sistem (SQLcl, Zabbix, Grafana) diterangkan dalam pelbagai sumber dan tidak akan diulang di sini. Penggunaan SQLcl dan bukannya SQLplus adalah disebabkan oleh fakta bahawa SQLcl (antara muka baris arahan Oracle DBMS, ditulis dalam java) tidak memerlukan pemasangan tambahan Pelanggan Oracle dan berfungsi di luar kotak.

Saya akan menerangkan perkara utama yang perlu diberi perhatian apabila menggunakan Zabbix untuk memantau penunjuk proses perniagaan gudang, dan salah satu cara yang mungkin untuk melaksanakannya. Juga, ini bukan siaran tentang keselamatan. Keselamatan sambungan dan penggunaan kaedah yang dibentangkan memerlukan kajian tambahan dalam proses memindahkan penyelesaian perintis ke dalam operasi yang produktif.

Perkara utama ialah apabila melaksanakan sistem sedemikian, adalah mungkin untuk dilakukan tanpa pengaturcaraan, menggunakan tetapan yang disediakan oleh sistem.

Sistem pemantauan Zabbix menyediakan beberapa pilihan untuk mengumpul metrik daripada sistem yang dipantau. Ini boleh dilakukan sama ada dengan mengundi secara langsung hos yang dipantau, atau dengan kaedah yang lebih maju untuk menghantar data ke pelayan melalui zabbix_sender hos, termasuk kaedah untuk mengkonfigurasi parameter penemuan peringkat rendah. Untuk menyelesaikan masalah kami, kaedah pengundian terus hos oleh pelayan pusat agak sesuai, kerana ini membolehkan anda memperoleh kawalan penuh ke atas jujukan pemerolehan metrik dan memastikan anda menggunakan satu set tetapan/skrip tanpa perlu mengedarkannya kepada setiap hos yang dipantau.

Sebagai "subjek ujian" untuk menyahpepijat dan menyediakan sistem, kami menggunakan lembaran kerja WMS untuk pengurusan penerimaan:

  1. Kenderaan di kaunter penerimaan tetamu, semua yang telah tiba: Semua kenderaan dengan status untuk tempoh "- 72 jam dari masa semasa" - Pengecam pertanyaan SQL: getCars.
  2. Sejarah semua status kenderaan: Status semua kenderaan yang tiba dalam masa 72 jam - Pengecam pertanyaan SQL: keretaSejarah.
  3. Kenderaan berjadual untuk penerimaan: Status semua kenderaan dengan ketibaan dalam status "Terjadual", selang masa "- 24 jam" dan "+24 jam" dari masa semasa - Pengecam pertanyaan SQL: keretaDalam.

Jadi, selepas kami memutuskan satu set metrik prestasi gudang, kami akan menyediakan pertanyaan SQL untuk pangkalan data WMS. Untuk melaksanakan pertanyaan, adalah dinasihatkan untuk tidak menggunakan pangkalan data utama, tetapi salinan "panas" - siap sedia.

Kami menyambung ke Oracle DBMS siap sedia untuk menerima data. Alamat IP untuk menyambung ke pangkalan data ujian 192.168.1.106. Kami menyimpan parameter sambungan pada pelayan Zabbix dalam TNSNames.ORA folder kerja 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)
    )
  )

Ini akan membolehkan kami menjalankan pertanyaan SQL kepada setiap hos melalui EZconnect, hanya menyatakan log masuk/kata laluan dan nama pangkalan data:

# sql znew/Zabmon1@WH1_1

Kami menyimpan pertanyaan SQL yang disediakan dalam folder kerja pada pelayan Zabbix:

/etc/zabbix/sql

dan benarkan akses kepada pengguna zabbix pelayan kami:

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

Fail dengan permintaan menerima nama pengecam unik untuk akses daripada pelayan Zabbix. Setiap pertanyaan pangkalan data melalui SQLcl mengembalikan beberapa parameter kepada kami. Dengan mengambil kira butiran Zabbix, yang boleh memproses hanya satu metrik bagi setiap permintaan, kami akan menggunakan skrip tambahan untuk menghuraikan hasil pertanyaan ke dalam metrik individu.

Mari sediakan skrip utama, mari kita panggil wh_Metrics.sh, untuk memanggil pertanyaan SQL ke pangkalan data, menyimpan keputusan dan mengembalikan metrik teknikal dengan penunjuk kejayaan pengambilan 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

Kami meletakkan fail siap dengan skrip dalam folder untuk menyimpan skrip luaran mengikut tetapan konfigurasi proksi Zabbix (secara lalai - /usr/local/share/zabbix/externalscripts).

Pengenalpastian pangkalan data dari mana skrip akan menerima hasil akan diluluskan sebagai parameter skrip. ID pangkalan data mesti sepadan dengan baris tetapan dalam fail TNSNames.ORA.

Hasil daripada panggilan pertanyaan SQL disimpan dalam fail seperti mon_base_id_main.log where base_id = Pengecam pangkalan data diterima sebagai parameter skrip. Pembahagian fail hasil mengikut pengecam pangkalan data disediakan sekiranya terdapat permintaan daripada pelayan kepada beberapa pangkalan data secara serentak. Pertanyaan mengembalikan tatasusunan nilai dua dimensi yang diisih.

Skrip berikut, mari kita panggil getMetrica.sh, diperlukan untuk mendapatkan metrik tertentu daripada fail dengan hasil permintaan:

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

Kini kami bersedia untuk mengkonfigurasi Zabbix dan mula memantau penunjuk proses penerimaan gudang.

Ejen Zabbix dipasang dan dikonfigurasikan pada setiap nod pangkalan data.

Pada pelayan utama kami mentakrifkan semua pelayan dengan proksi Zabbix. Untuk tetapan, pergi ke laluan berikut:

Pentadbiran → Proksi → Buat proksi

DIY: cara kami mengautomasikan pemantauan gudang

Kami mentakrifkan hos terkawal:

Tetapan → Hos → Buat hos

DIY: cara kami mengautomasikan pemantauan gudang

Nama hos mesti sepadan dengan nama hos yang dinyatakan dalam fail konfigurasi ejen.

Kami menentukan kumpulan untuk nod, serta alamat IP atau nama DNS nod dengan pangkalan data.

Kami mencipta metrik dan menentukan sifatnya:

Tetapan → Nod → 'nama nod' → Item Data>Buat Item Data

1) Buat metrik utama untuk menanyakan semua parameter daripada pangkalan data

DIY: cara kami mengautomasikan pemantauan gudang

Kami menetapkan nama elemen data, menunjukkan jenis "Pengesahan luaran". Dalam medan "Kunci", kami mentakrifkan skrip yang kami luluskan sebagai parameter nama pangkalan data Oracle, nama pertanyaan sql, log masuk dan kata laluan untuk menyambung ke pangkalan data. Tetapkan selang kemas kini pertanyaan kepada 5 minit (300 saat).

2) Buat baki metrik untuk setiap status kenderaan. Nilai metrik ini akan dijana berdasarkan hasil semakan metrik utama.

DIY: cara kami mengautomasikan pemantauan gudang

Kami menetapkan nama elemen data, menunjukkan jenis "Pengesahan luaran". Dalam medan "Kunci", kami mentakrifkan skrip yang kami luluskan sebagai parameter nama pangkalan data Oracle dan kod status yang nilainya ingin kami jejak. Kami menetapkan selang kemas kini pertanyaan kepada 10 saat lebih lama daripada metrik utama (310 saat) supaya keputusan mempunyai masa untuk ditulis pada fail.

Untuk mendapatkan metrik dengan betul, susunan semakan diaktifkan adalah penting. Untuk mengelakkan konflik semasa menerima data, pertama sekali kami mengaktifkan metrik utama GetCarsByStatus dengan memanggil skrip - wh_Metrics.sh.

Tetapan → Nod → 'nama nod' → Elemen data → Subfilter “Pemeriksaan luaran”. Tandakan semakan yang diperlukan dan klik "Aktifkan".

DIY: cara kami mengautomasikan pemantauan gudang

Seterusnya, kami mengaktifkan baki metrik dalam satu operasi, memilih kesemuanya bersama-sama:

DIY: cara kami mengautomasikan pemantauan gudang

Kini Zabbix telah mula mengumpul metrik perniagaan gudang.

Dalam artikel berikut, kami akan melihat dengan lebih dekat tentang menyambungkan Grafana dan mencipta papan pemuka maklumat operasi gudang untuk pelbagai kategori pengguna. Juga berdasarkan Grafana, pemantauan penyelewengan dalam operasi gudang dilaksanakan dan, bergantung pada sempadan dan kebolehulangan penyelewengan, pendaftaran insiden dalam sistem pusat perkhidmatan pengurusan gudang melalui API atau penghantaran pemberitahuan ringkas kepada pengurus melalui e-mel.

DIY: cara kami mengautomasikan pemantauan gudang

Sumber: www.habr.com

Tambah komen