DIY: cách chúng tôi tự động hóa việc giám sát kho hàng

X5 vận hành 43 trung tâm phân phối và 4 xe tải riêng, đảm bảo cung cấp sản phẩm liên tục cho 029 cửa hàng. Trong bài viết này, tôi sẽ chia sẻ kinh nghiệm tạo một hệ thống tương tác để theo dõi các sự kiện kho hàng từ đầu. Thông tin này sẽ hữu ích cho các nhà hậu cần của các công ty thương mại có hàng chục trung tâm phân phối quản lý nhiều loại sản phẩm.

DIY: cách chúng tôi tự động hóa việc giám sát kho hàng

Theo quy định, việc xây dựng hệ thống giám sát và quản lý quy trình kinh doanh bắt đầu bằng việc xử lý các thông báo và sự cố. Đồng thời, một điểm công nghệ quan trọng liên quan đến khả năng tự động hóa chính việc xảy ra các sự kiện kinh doanh và ghi lại sự cố đã bị bỏ sót. Hầu hết các hệ thống kinh doanh như WMS, TMS, v.v. đều có các công cụ tích hợp để giám sát các quy trình của riêng chúng. Tuy nhiên, nếu đây là hệ thống của các nhà sản xuất khác nhau hoặc chức năng giám sát chưa được phát triển đầy đủ, bạn phải đặt hàng những sửa đổi tốn kém hoặc thu hút các chuyên gia tư vấn chuyên môn để cài đặt bổ sung.

Hãy xem xét một cách tiếp cận mà chúng ta chỉ cần một phần nhỏ trong việc tư vấn liên quan đến việc xác định nguồn (bảng) để có được các chỉ số từ hệ thống.

Điểm đặc biệt của kho hàng của chúng tôi là một số hệ thống quản lý kho hàng (WMS Exceed) hoạt động tại một khu phức hợp hậu cần. Kho được phân chia theo chủng loại lưu trữ hàng hóa (khô, rượu, đông lạnh, v.v.) không chỉ một cách hợp lý. Trong một khu phức hợp hậu cần có một số tòa nhà kho riêng biệt, mỗi tòa nhà được quản lý bởi WMS riêng.

DIY: cách chúng tôi tự động hóa việc giám sát kho hàng

Để hình thành bức tranh tổng thể về các quy trình diễn ra trong kho, người quản lý phân tích báo cáo của từng WMS nhiều lần trong ngày, xử lý tin nhắn từ người vận hành kho (người nhận, người lấy hàng, người xếp) và tổng hợp các chỉ số hoạt động thực tế để phản ánh trên bảng thông tin.

Để tiết kiệm thời gian cho người quản lý, chúng tôi quyết định phát triển một hệ thống rẻ tiền để kiểm soát hoạt động các sự kiện trong kho. Hệ thống mới ngoài việc hiển thị các chỉ số “nóng” về hiệu quả hoạt động của các quy trình kho còn giúp người quản lý ghi nhận các sự cố và giám sát việc thực hiện nhiệm vụ nhằm loại bỏ các nguyên nhân ảnh hưởng đến các chỉ số nhất định. Sau khi tiến hành kiểm tra tổng thể kiến ​​trúc CNTT của công ty, chúng tôi nhận ra rằng các phần riêng lẻ của hệ thống được yêu cầu đã tồn tại theo cách này hay cách khác trong bối cảnh của chúng tôi và đối với chúng, chúng tôi phải kiểm tra cả cài đặt và các dịch vụ hỗ trợ cần thiết. Tất cả những gì còn lại là đưa toàn bộ ý tưởng vào một giải pháp kiến ​​trúc duy nhất và ước tính phạm vi phát triển.

Sau khi đánh giá khối lượng công việc cần thực hiện để xây dựng một hệ thống mới, người ta quyết định chia dự án thành nhiều giai đoạn:

  1. Thu thập các chỉ số cho quy trình kho, trực quan hóa và kiểm soát các chỉ số và sai lệch
  2. Tự động hóa các tiêu chuẩn quy trình và đăng ký các ứng dụng trong dịch vụ dịch vụ kinh doanh đối với các sai lệch
  3. Giám sát chủ động với tính năng dự báo phụ tải và đưa ra khuyến nghị cho người quản lý.

Ở giai đoạn đầu tiên, hệ thống phải thu thập các phần dữ liệu vận hành đã được chuẩn bị sẵn từ tất cả WMS của tổ hợp. Việc đọc diễn ra gần như theo thời gian thực (khoảng thời gian dưới 5 phút). Bí quyết là dữ liệu phải được lấy từ DBMS của vài chục kho khi triển khai hệ thống trên toàn mạng. Dữ liệu vận hành nhận được được xử lý bằng logic của lõi hệ thống để tính toán độ lệch so với các chỉ số đã lập kế hoạch và tính toán số liệu thống kê. Dữ liệu được xử lý theo cách này phải được hiển thị trên máy tính bảng của người quản lý hoặc trên bảng thông tin kho hàng dưới dạng biểu đồ, sơ đồ dễ hiểu.

DIY: cách chúng tôi tự động hóa việc giám sát kho hàng

Khi chọn một hệ thống phù hợp để triển khai thử nghiệm giai đoạn đầu tiên, chúng tôi đã chọn Zabbix. Hệ thống này đã được sử dụng để giám sát hiệu suất CNTT của hệ thống kho. Bằng cách thêm một cài đặt riêng để thu thập số liệu kinh doanh về hoạt động của kho, bạn có thể có được bức tranh tổng thể về tình trạng của kho.

Kiến trúc chung của hệ thống hóa ra như trong hình.

DIY: cách chúng tôi tự động hóa việc giám sát kho hàng

Mỗi phiên bản WMS được xác định là máy chủ cho hệ thống giám sát. Các số liệu được thu thập bởi máy chủ trung tâm trong mạng trung tâm dữ liệu bằng cách chạy tập lệnh với truy vấn SQL đã chuẩn bị sẵn. Nếu bạn cần giám sát một hệ thống không khuyến nghị truy cập trực tiếp vào cơ sở dữ liệu (ví dụ: SAP EWM), bạn có thể sử dụng lệnh gọi tập lệnh tới các hàm API được ghi lại để lấy chỉ báo hoặc viết một chương trình đơn giản bằng python/vbascript.

Một phiên bản proxy Zabbix được triển khai trong mạng kho để phân phối tải từ máy chủ chính. Thông qua Proxy, đảm bảo hoạt động với tất cả các phiên bản WMS cục bộ. Lần tiếp theo máy chủ Zabbix yêu cầu tham số, một tập lệnh sẽ được thực thi trên máy chủ có proxy Zabbix để yêu cầu số liệu từ cơ sở dữ liệu WMS.

Để hiển thị biểu đồ và chỉ báo kho trên máy chủ Zabbix trung tâm, chúng tôi triển khai Grafana. Ngoài việc hiển thị các bảng thông tin đã được chuẩn bị sẵn với đồ họa thông tin về hoạt động kho hàng, Grafana sẽ được sử dụng để theo dõi sự sai lệch trong các chỉ số và gửi cảnh báo tự động đến hệ thống dịch vụ kho hàng để xử lý các sự cố kinh doanh.

Ví dụ: hãy xem xét việc thực hiện kiểm soát tải trong khu vực tiếp nhận kho. Những điều sau đây được chọn làm chỉ số chính về hiệu suất quy trình trong khu vực này của nhà kho:

  • số lượng xe trong khu vực tiếp tân, có tính đến các trạng thái (theo kế hoạch, đã đến, chứng từ, dỡ hàng, khởi hành;
  • khối lượng công việc của khu vực bố trí, bổ sung (theo điều kiện bảo quản).

Cài đặt

Việc cài đặt và cấu hình các thành phần chính của hệ thống (SQLcl, Zabbix, Grafana) được mô tả trong nhiều nguồn khác nhau và sẽ không được lặp lại ở đây. Việc sử dụng SQLcl thay vì SQLplus là do SQLcl (giao diện dòng lệnh của Oracle DBMS, được viết bằng java) không yêu cầu cài đặt bổ sung Máy khách Oracle và hoạt động tốt.

Tôi sẽ mô tả những điểm chính cần chú ý khi sử dụng Zabbix để giám sát các chỉ số quy trình kinh doanh kho hàng và một trong những cách khả thi để triển khai chúng. Ngoài ra, đây không phải là một bài viết về bảo mật. Tính bảo mật của các kết nối và việc sử dụng các phương pháp được trình bày đòi hỏi phải nghiên cứu bổ sung trong quá trình chuyển giải pháp thí điểm sang vận hành sản xuất.

Điều chính là khi triển khai một hệ thống như vậy, có thể thực hiện mà không cần lập trình, sử dụng các cài đặt do hệ thống cung cấp.

Hệ thống giám sát Zabbix cung cấp một số tùy chọn để thu thập số liệu từ hệ thống được giám sát. Điều này có thể được thực hiện bằng cách thăm dò trực tiếp các máy chủ được giám sát hoặc bằng phương pháp gửi dữ liệu đến máy chủ nâng cao hơn thông qua zabbix_sender của máy chủ, bao gồm các phương pháp định cấu hình các tham số khám phá cấp thấp. Để giải quyết vấn đề của chúng ta, phương pháp thăm dò trực tiếp các máy chủ bằng máy chủ trung tâm là khá phù hợp, bởi vì điều này cho phép bạn có toàn quyền kiểm soát trình tự thu thập số liệu và đảm bảo rằng bạn sử dụng một bộ cài đặt/tập lệnh mà không cần phân phối chúng đến từng máy chủ được giám sát.

Là “đối tượng thử nghiệm” để gỡ lỗi và thiết lập hệ thống, chúng tôi sử dụng bảng tính WMS để quản lý chấp nhận:

  1. Xe tại quầy lễ tân, tất cả đã đến: Tất cả các xe có trạng thái trong khoảng thời gian “- 72 giờ kể từ thời điểm hiện tại” - Mã định danh truy vấn SQL: getCars.
  2. Lịch sử của tất cả các trạng thái xe: Trạng thái của tất cả các xe đến trong vòng 72 giờ - Mã định danh truy vấn SQL: xe ô tôLịch sử.
  3. Các phương tiện đã lên lịch để chấp nhận: Trạng thái của tất cả các phương tiện đến ở trạng thái “Đã lên lịch”, khoảng thời gian “- 24 giờ” và “+24 giờ” kể từ thời điểm hiện tại - Mã định danh truy vấn SQL: xe ô tôTrong.

Vì vậy, sau khi quyết định bộ số liệu hiệu suất kho, chúng tôi sẽ chuẩn bị các truy vấn SQL cho cơ sở dữ liệu WMS. Để thực hiện các truy vấn, bạn không nên sử dụng cơ sở dữ liệu chính mà sử dụng bản sao "nóng" - chế độ chờ của nó.

Chúng tôi kết nối với Oracle DBMS dự phòng để nhận dữ liệu. Địa chỉ IP để kết nối với cơ sở dữ liệu thử nghiệm 192.168.1.106. Chúng tôi lưu các tham số kết nối trên máy chủ Zabbix trong TNSNames.ORA của thư mục làm việc 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)
    )
  )

Điều này sẽ cho phép chúng tôi chạy các truy vấn SQL đến từng máy chủ thông qua EZconnect, chỉ xác định thông tin đăng nhập/mật khẩu và tên cơ sở dữ liệu:

# sql znew/Zabmon1@WH1_1

Chúng tôi lưu các truy vấn SQL đã chuẩn bị trong thư mục làm việc trên máy chủ Zabbix:

/etc/zabbix/sql

và cho phép truy cập vào người dùng zabbix trên máy chủ của chúng tôi:

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

Các tệp có yêu cầu sẽ nhận được tên định danh duy nhất để truy cập từ máy chủ Zabbix. Mỗi truy vấn cơ sở dữ liệu qua SQLcl trả về cho chúng ta một số tham số. Có tính đến các chi tiết cụ thể của Zabbix, vốn chỉ có thể xử lý một số liệu cho mỗi yêu cầu, chúng tôi sẽ sử dụng các tập lệnh bổ sung để phân tích kết quả truy vấn thành các số liệu riêng lẻ.

Hãy chuẩn bị tập lệnh chính, hãy gọi nó là wh_Metrics.sh, để gọi một truy vấn SQL đến cơ sở dữ liệu, lưu kết quả và trả về một số liệu kỹ thuật kèm theo các chỉ báo về sự thành công của việc truy xuất dữ liệu:

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

Chúng tôi đặt tệp đã hoàn thành với tập lệnh vào thư mục để lưu trữ tập lệnh bên ngoài theo cài đặt cấu hình Zabbix-proxy (theo mặc định - /usr/local/share/zabbix/externalscripts).

Việc xác định cơ sở dữ liệu mà tập lệnh sẽ nhận kết quả sẽ được chuyển dưới dạng tham số tập lệnh. ID cơ sở dữ liệu phải khớp với dòng cài đặt trong tệp TNSNames.ORA.

Kết quả của lệnh gọi truy vấn SQL được lưu trong một tệp như mon_base_id_main.log trong đó base_id = Mã định danh cơ sở dữ liệu nhận được dưới dạng tham số tập lệnh. Việc phân chia tệp kết quả theo mã định danh cơ sở dữ liệu được cung cấp trong trường hợp có yêu cầu từ máy chủ đến một số cơ sở dữ liệu cùng một lúc. Truy vấn trả về một mảng giá trị hai chiều được sắp xếp.

Tập lệnh sau đây, hãy gọi nó là getMetrica.sh, là cần thiết để lấy số liệu được chỉ định từ một tệp có kết quả của một yêu cầu:

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

Bây giờ chúng tôi đã sẵn sàng định cấu hình Zabbix và bắt đầu giám sát các chỉ số của quy trình chấp nhận kho.

Tác nhân Zabbix được cài đặt và định cấu hình trên mỗi nút cơ sở dữ liệu.

Trên máy chủ chính, chúng tôi xác định tất cả các máy chủ có proxy Zabbix. Để cài đặt, hãy đi tới đường dẫn sau:

Quản trị → Proxy → Tạo proxy

DIY: cách chúng tôi tự động hóa việc giám sát kho hàng

Chúng tôi xác định các máy chủ được kiểm soát:

Cài đặt → Máy chủ → Tạo máy chủ

DIY: cách chúng tôi tự động hóa việc giám sát kho hàng

Tên máy chủ phải khớp với tên máy chủ được chỉ định trong tệp cấu hình tác nhân.

Chúng tôi chỉ định nhóm cho nút, cũng như địa chỉ IP hoặc tên DNS của nút có cơ sở dữ liệu.

Chúng tôi tạo số liệu và chỉ định các thuộc tính của chúng:

Cài đặt → Nút → 'Tên nút' → Mục dữ liệu>Tạo mục dữ liệu

1) Tạo số liệu chính để truy vấn tất cả các tham số từ cơ sở dữ liệu

DIY: cách chúng tôi tự động hóa việc giám sát kho hàng

Chúng tôi đặt tên của thành phần dữ liệu, cho biết loại “Xác minh bên ngoài”. Trong trường “Khóa”, chúng tôi xác định một tập lệnh mà chúng tôi chuyển làm tham số tên của cơ sở dữ liệu Oracle, tên của truy vấn sql, thông tin đăng nhập và mật khẩu để kết nối với cơ sở dữ liệu. Đặt khoảng thời gian cập nhật truy vấn thành 5 phút (300 giây).

2) Tạo các số liệu còn lại cho từng trạng thái xe. Giá trị của các số liệu này sẽ được tạo dựa trên kết quả kiểm tra số liệu chính.

DIY: cách chúng tôi tự động hóa việc giám sát kho hàng

Chúng tôi đặt tên của thành phần dữ liệu, cho biết loại “Xác minh bên ngoài”. Trong trường “Khóa”, chúng tôi xác định một tập lệnh mà chúng tôi chuyển đến dưới dạng tham số, tên của cơ sở dữ liệu Oracle và mã trạng thái có giá trị mà chúng tôi muốn theo dõi. Chúng tôi đặt khoảng thời gian cập nhật truy vấn dài hơn 10 giây so với chỉ số chính (310 giây) để kết quả có thời gian được ghi vào tệp.

Để có được số liệu chính xác, thứ tự kích hoạt kiểm tra là rất quan trọng. Để tránh xung đột khi nhận dữ liệu, trước hết chúng tôi kích hoạt số liệu chính GetCarsByStatus bằng cách gọi tập lệnh - wh_Metrics.sh.

Cài đặt → Nút → 'tên nút' → Thành phần dữ liệu → Bộ lọc con “Kiểm tra bên ngoài”. Đánh dấu kiểm tra bắt buộc và nhấp vào “Kích hoạt”.

DIY: cách chúng tôi tự động hóa việc giám sát kho hàng

Tiếp theo, chúng tôi kích hoạt các số liệu còn lại trong một thao tác, chọn tất cả chúng cùng nhau:

DIY: cách chúng tôi tự động hóa việc giám sát kho hàng

Bây giờ Zabbix đã bắt đầu thu thập số liệu kinh doanh kho hàng.

Trong các bài viết sau, chúng ta sẽ xem xét kỹ hơn cách kết nối Grafana và tạo bảng thông tin thông tin về hoạt động kho hàng cho nhiều loại người dùng khác nhau. Grafana cũng được sử dụng để theo dõi các sai lệch trong hoạt động của kho và tùy theo ranh giới và tần suất sai lệch, đăng ký các sự cố trong hệ thống trung tâm dịch vụ quản lý kho thông qua API hoặc chỉ cần gửi thông báo cho người quản lý qua email.

DIY: cách chúng tôi tự động hóa việc giám sát kho hàng

Nguồn: www.habr.com

Thêm một lời nhận xét