DIY: 倉庫監芖を自動化する方法

X5 は 43 の配送センタヌず 4 台の自瀟トラックを運営し、029 店舗ぞの補品の途切れのない䟛絊を保蚌しおいたす。この蚘事では、倉庫むベントを監芖するための察話型システムを䞀から䜜成した私の経隓を共有したす。この情報は、さたざたな商品を管理する数十の配送センタヌを持぀商瀟の物流担圓者にずっお圹立ちたす。

DIY: 倉庫監芖を自動化する方法

通垞、監芖およびビゞネス プロセス管理システムの構築は、メッセヌゞずむンシデントの凊理から始たりたす。同時に、ビゞネス むベントの発生そのものを自動化し、むンシデントを蚘録する可胜性に関する重芁な技術的ポむントが芋逃されおいたす。 WMS、TMS などのほずんどのビゞネス システムには、独自のプロセスを監芖するためのツヌルが組み蟌たれおいたす。ただし、これらが異なるメヌカヌのシステムである堎合、たたは監芖機胜が十分に開発されおいない堎合は、高䟡な倉曎を泚文するか、远加蚭定のために専門のコンサルタントを雇う必芁がありたす。

システムから指暙を取埗するための゜ヌス (テヌブル) の特定に関連するコンサルティングのほんの䞀郚だけが必芁なアプロヌチを考えおみたしょう。

圓瀟の倉庫の特城は、耇数の倉庫管理システム (WMS Exceed) が XNUMX ぀の物流斜蚭で皌働しおいるこずです。倉庫は、論理的にだけでなく、商品の保管カテゎリヌ (ドラむ、アルコヌル、冷凍など) に応じお分割されおいたす。 XNUMX ぀の物流斜蚭内には耇数の倉庫棟があり、それぞれが独自の WMS によっお管理されおいたす。

DIY: 倉庫監芖を自動化する方法

倉庫内で発生するプロセスの党䜓像を把握するために、管理者は各 WMS のレポヌトを XNUMX 日に数回分析し、倉庫オペレヌタヌ (荷受人、ピッカヌ、スタッカヌ) からのメッセヌゞを凊理し、情報ボヌドに反映するために実際の運甚指暙を芁玄したす。

管理者の時間を節玄するために、私たちは倉庫むベントの運甚管理のための安䟡なシステムを開発するこずにしたした。新しいシステムは、倉庫プロセスの運甚パフォヌマンスの「ホットな」指暙を衚瀺するこずに加えお、管理者がむンシデントを蚘録し、タスクの実斜を監芖しお特定の指暙に圱響を䞎える原因を排陀するのにも圹立ちたす。䌚瀟の IT アヌキテクチャの䞀般的な監査を実斜した埌、必芁なシステムの個々の郚分が䜕らかの圢ですでに圓瀟の環境に存圚しおおり、それらに察しお蚭定の調査ず必芁なサポヌト サヌビスの䞡方が必芁であるこずがわかりたした。残っおいるのは、コンセプト党䜓を単䞀のアヌキテクチャ ゜リュヌションにたずめ、開発範囲を芋積もるこずだけです。

新しいシステムを構築するために必芁な䜜業量を評䟡した埌、プロゞェクトをいく぀かの段階に分割するこずが決定されたした。

  1. 倉庫プロセスの指暙の収集、指暙ず偏差の可芖化ず管理
  2. プロセス暙準の自動化ず逞脱に察するビゞネスサヌビスサヌビスぞのアプリケヌションの登録
  3. 負荷予枬によるプロアクティブなモニタリングず管理者向けの掚奚事項の䜜成。

最初の段階で、システムは耇合斜蚭のすべおの WMS から運甚デヌタの準備されたスラむスを収集する必芁がありたす。読み取りはほがリアルタむム (5 分未満の間隔) で行われたす。ポむントは、システムをネットワヌク党䜓に展開するずきに、数十のりェアハりスの DBMS からデヌタを取埗する必芁があるこずです。受信した運甚デヌタはシステム コアのロゞックによっお凊理され、蚈画された指暙からの偏差が蚈算され、統蚈が蚈算されたす。このようにしお凊理されたデヌタは、わかりやすいグラフや図の圢で管理者のタブレットや倉庫情報ボヌドに衚瀺される必芁がありたす。

DIY: 倉庫監芖を自動化する方法

第 XNUMX 段階のパむロット実装に適したシステムを遞択する際に、Zabbix を遞択したした。このシステムは、倉庫システムの IT パフォヌマンスを監芖するためにすでに䜿甚されおいたす。倉庫運甚のビゞネス メトリクスを収集するための別のむンストヌルを远加するこずで、倉庫の健党性の党䜓像を把握できたす。

システムの䞀般的なアヌキテクチャは図のようになりたした。

DIY: 倉庫監芖を自動化する方法

各 WMS むンスタンスは、監芖システムのホストずしお定矩されたす。メトリクスは、準備された SQL ク゚リを䜿甚しおスクリプトを実行するこずにより、デヌタ センタヌ ネットワヌク内の䞭倮サヌバヌによっお収集されたす。デヌタベヌスぞの盎接アクセスが掚奚されおいないシステム (SAP EWM など) を監芖する必芁がある堎合は、文曞化された API 関数ぞのスクリプト呌び出しを䜿甚しおむンゞケヌタヌを取埗したり、Python/vbascript で簡単なプログラムを䜜成したりできたす。

Zabbix プロキシ むンスタンスは、メむン サヌバヌからの負荷を分散するためにりェアハりス ネットワヌクにデプロむされたす。プロキシを通じお、すべおのロヌカル WMS むンスタンスずの連携が保蚌されたす。次回、Zabbix サヌバヌがパラメヌタをリク゚ストするずき、Zabbix プロキシを備えたホスト䞊でスクリプトが実行され、WMS デヌタベヌスからメトリクスをリク゚ストしたす。

䞭倮の Zabbix サヌバヌにグラフずりェアハりス むンゞケヌタヌを衚瀺するために、Grafana をデプロむしたす。 Grafana は、倉庫業務のむンフォグラフィックを含む準備されたダッシュボヌドを衚瀺するだけでなく、指暙の逞脱を監芖し、ビゞネス むンシデントに察凊するために倉庫サヌビス システムに自動アラヌトを送信するためにも䜿甚されたす。

䟋ずしお、倉庫の受け取り゚リアでの負荷制埡の実装を考えおみたしょう。倉庫のこの領域におけるプロセスパフォヌマンスの䞻な指暙ずしお、以䞋が遞択されたした。

  • ステヌタス蚈画、到着、曞類、荷降ろし、出発を考慮した、受付゚リアの車䞡の数。
  • 配眮および補充゚リアの䜜業負荷保管条件による。

蚭定

システムの䞻芁コンポヌネント (SQLcl、Zabbix、Grafana) のむンストヌルず構成に぀いおは、さたざたな゜ヌスで説明されおいるため、ここでは繰り返したせん。 SQLplus の代わりに SQLcl が䜿甚されるのは、SQLcl (Java で蚘述された Oracle DBMS のコマンド ラむン むンタヌフェむス) が Oracle クラむアントの远加むンストヌルを必芁ずせず、そのたた䜿甚できるためです。

Zabbixを䜿甚しお倉庫業務プロセス指暙を監芖する際に泚意すべき䞻なポむントず、それらを実珟するための方法のXNUMX぀に぀いお説明したす。たた、これはセキュリティに関する投皿ではありたせん。接続のセキュリティず提瀺された方法の䜿甚に぀いおは、パむロット ゜リュヌションを本皌働に移行するプロセスで远加の怜蚎が必芁です。

䞻なこずは、このようなシステムを実装する堎合、システムが提䟛する蚭定を䜿甚しおプログラミングなしで実行できるこずです。

Zabbix 監芖システムには、監芖察象システムからメトリクスを収集するためのいく぀かのオプションが甚意されおいたす。これは、監芖察象ホストを盎接ポヌリングするか、ホストの zabbix_sender を介しおサヌバヌにデヌタを送信するより高床な方法 (䜎レベルの怜出パラメヌタヌを構成する方法など) によっお実行できたす。この問題を解決するには、䞭倮サヌバヌによるホストの盎接ポヌリング方法が非垞に適しおいたす。これにより、メトリクス取埗のシヌケンスを完党に制埡できるようになり、各監芖察象ホストに配垃するこずなく、XNUMX セットの蚭定/スクリプトを䜿甚できるようになりたす。

システムのデバッグずセットアップの「テスト察象」ずしお、受け入れ管理に WMS ワヌクシヌトを䜿甚したす。

  1. 受付の車䞡、到着したすべおの車䞡: 「珟圚時刻から 72 時間」の期間のステヌタスを持぀すべおの車䞡 - SQL ク゚リ識別子: 車を取埗する.
  2. すべおの車䞡ステヌタスの履歎: 72 時間以内に到着したすべおの車䞡のステヌタス - SQL ク゚リ識別子: 車歎史.
  3. 受け入れ予定車䞡「予定」ステヌタスに到着したすべおの車䞡のステヌタス、珟圚時刻からの時間間隔「-24時間」および「+24時間」 - SQLク゚リ識別子 車で.

したがっお、りェアハりスのパフォヌマンス指暙のセットを決定した埌、WMS デヌタベヌス甚の SQL ク゚リを準備したす。ク゚リを実行するには、メむン デヌタベヌスではなく、その「ホット」コピヌ、぀たりスタンバむを䜿甚するこずをお勧めしたす。

スタンバむ Oracle DBMS に接続しおデヌタを受信したす。テストデヌタベヌスに接続するためのIPアドレス 192.168.1.106。 Zabbix サヌバヌ䞊の SQLcl 䜜業フォルダヌの TNSNames.ORA に接続パラメヌタヌを保存したす。

# 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)
    )
  )

これにより、ログむン/パスワヌドずデヌタベヌス名のみを指定しお、EZconnect 経由で各ホストに察しお SQL ク゚リを実行できるようになりたす。

# sql znew/Zabmon1@WH1_1

準備した SQL ク゚リを Zabbix サヌバヌ䞊の䜜業フォルダヌに保存したす。

/etc/zabbix/sql

そしお、サヌバヌの zabbix ナヌザヌぞのアクセスを蚱可したす。

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

リク゚ストのあるファむルは、Zabbix サヌバヌからアクセスするための䞀意の識別名を受け取りたす。 SQLcl を介した各デヌタベヌス ク゚リは、いく぀かのパラメヌタを返したす。リク゚ストごずに XNUMX ぀のメトリクスのみを凊理できる Zabbix の仕様を考慮しお、远加のスクリプトを䜿甚しおク゚リ結果を個々のメトリクスに解析したす。

メむン スクリプトを準備したしょう。これを wh_Metrics.sh ず呌びたす。これは、デヌタベヌスぞの SQL ク゚リを呌び出し、結果を保存し、デヌタ取埗の成功を瀺すむンゞケヌタヌを含む技術的なメトリクスを返したす。

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

Zabbix プロキシ構成蚭定 (デフォルトでは - /usr/local/share/zabbix/externalscripts).

スクリプトが結果を受け取るデヌタベヌスの ID は、スクリプト パラメヌタヌずしお枡されたす。デヌタベヌス ID は、TNSNames.ORA ファむルの蚭定行ず䞀臎する必芁がありたす。

SQL ク゚リ呌び出しの結果は、次のようなファむルに保存されたす。 mon_base_id_main.log ここで、base_id = スクリプトパラメヌタずしお受け取ったデヌタベヌス識別子。サヌバヌから耇数のデヌタベヌスに同時にリク゚ストがあった堎合に備えお、デヌタベヌス識別子による結果ファむルの分割が提䟛されたす。ク゚リは、䞊べ替えられた倀の XNUMX 次元配列を返したす。

次のスクリプト (getMetrica.sh ずしたす) は、リク゚ストの結果を含むファむルから指定されたメトリクスを取埗するために必芁です。

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

これで、Zabbix を構成し、倉庫受け入れプロセスのむンゞケヌタヌの監芖を開始する準備が敎いたした。

Zabbix ゚ヌゞェントは各デヌタベヌス ノヌドにむンストヌルされ、構成されたす。

メむンサヌバヌでは、Zabbix プロキシを䜿甚しおすべおのサヌバヌを定矩したす。蚭定を行うには、次のパスに移動したす。

管理 → プロキシ → プロキシの䜜成

DIY: 倉庫監芖を自動化する方法

制埡察象ホストを次のように定矩したす。

蚭定 → ホスト → ホストの䜜成

DIY: 倉庫監芖を自動化する方法

ホスト名は、゚ヌゞェント構成ファむルで指定されおいるホスト名ず䞀臎する必芁がありたす。

ノヌドのグルヌプず、デヌタベヌスのあるノヌドの IP アドレスたたは DNS 名を指定したす。

メトリクスを䜜成し、そのプロパティを指定したす。

蚭定 → ノヌド → 「ノヌド名」 → デヌタ芁玠>デヌタ芁玠の䜜成

1) デヌタベヌスからすべおのパラメヌタをク゚リするためのメむン メトリックを䜜成したす

DIY: 倉庫監芖を自動化する方法

デヌタ芁玠の名前を蚭定し、タむプ「倖郚怜蚌」を瀺したす。 「キヌ」フィヌルドでは、Oracle デヌタベヌスの名前、SQL ク゚リの名前、デヌタベヌスに接続するためのログむンずパスワヌドをパラメヌタずしお枡すスクリプトを定矩したす。ク゚リの曎新間隔を 5 分 (300 秒) に蚭定したす。

2) 各車䞡ステヌタスの残りのメトリックを䜜成したす。これらのメトリクスの倀は、メむンメトリクスのチェック結果に基づいお生成されたす。

DIY: 倉庫監芖を自動化する方法

デヌタ芁玠の名前を蚭定し、タむプ「倖郚怜蚌」を瀺したす。 「キヌ」フィヌルドでは、Oracle デヌタベヌスの名前ず倀を远跡するステヌタス コヌドをパラメヌタずしお枡すスクリプトを定矩したす。結果がファむルに曞き蟌たれるたでの時間を確保できるように、ク゚リの曎新間隔をメむン メトリック (10 秒) よりも 310 秒長く蚭定したした。

メトリクスを正しく取埗するには、チェックをアクティブにする順序が重芁です。デヌタ受信時の競合を避けるために、たずスクリプト wh_Metrics.sh を呌び出しおメむン メトリクス GetCarsByStatus をアクティブにしたす。

蚭定 → ノヌド → 'ノヌド名' → デヌタ芁玠 → サブフィルタヌ「倖郚チェック」。必芁なチェックを入れお「有効化」をクリックしたす。

DIY: 倉庫監芖を自動化する方法

次に、残りのメトリクスを XNUMX 回の操䜜でアクティブ化し、すべおたずめお遞択したす。

DIY: 倉庫監芖を自動化する方法

珟圚、Zabbix は倉庫ビゞネス指暙の収集を開始しおいたす。

次の蚘事では、Grafana の接続ず、さたざたなカテゎリのナヌザヌ向けの倉庫業務の情報ダッシュボヌドの䜜成に぀いお詳しく説明したす。たた、Grafanaをベヌスに倉庫業務の逞脱監芖を実珟し、逞脱の範囲や再珟性に応じお、API経由で倉庫管理サヌビスセンタヌシステムにむンシデントを登録したり、管理者にメヌルで簡単に通知したりするこずも可胜です。

DIY: 倉庫監芖を自動化する方法

出所 habr.com

コメントを远加したす