Trong bài viết này, chúng tôi sẽ nói một chút về việc giám sát các hệ thống lưu trữ IBM Storwize và các hệ thống lưu trữ khác hỗ trợ giao thức CIM/WBEM. Nhu cầu giám sát như vậy bị loại khỏi phương trình; chúng tôi sẽ coi đây là một tiên đề. Chúng tôi sẽ sử dụng Zabbix làm hệ thống giám sát.
Trong các phiên bản mới nhất của Zabbix, công ty bắt đầu chú ý nhiều hơn đến các mẫu - các mẫu bắt đầu xuất hiện cho các dịch vụ giám sát, DBMS, phần cứng Máy chủ (IMM/iBMC) qua IPMI. Việc giám sát hệ thống lưu trữ vẫn nằm ngoài các mẫu sẵn có, vì vậy, để tích hợp thông tin về trạng thái và hiệu suất của các thành phần lưu trữ vào Zabbix, bạn cần sử dụng các mẫu tùy chỉnh. Tôi mang đến cho bạn sự chú ý một trong những mẫu này.
Đầu tiên, một chút lý thuyết.
Để truy cập trạng thái và số liệu thống kê của hệ thống lưu trữ IBM Storwize, bạn có thể sử dụng:
giao thức CIM/WBEM;
API RESTful (được hỗ trợ trong IBM Storwize bắt đầu từ phiên bản phần mềm 8.1.3);
Bẫy SNMP (bộ bẫy hạn chế, không có số liệu thống kê);
Những người quan tâm có thể tìm hiểu thêm về các phương pháp giám sát khác nhau trong các phần liên quan của tài liệu của nhà cung cấp cũng như trong tài liệu Kịch bản ảo hóa IBM Spectrum.
WBEM chạy trên giao thức HTTP. Thông qua WBEM, bạn không chỉ có thể làm việc với các hệ thống lưu trữ mà còn với HBA, bộ chuyển mạch và thư viện băng từ.
Theo Kiến trúc SMI и Xác định cơ sở hạ tầng, thành phần chính của việc triển khai SMI là máy chủ WBEM, xử lý các yêu cầu CIM-XML từ các máy khách WBEM (trong trường hợp của chúng tôi là từ các tập lệnh giám sát):
CIM là một mô hình hướng đối tượng dựa trên Ngôn ngữ mô hình hóa thống nhất (UML).
Các phần tử được quản lý được định nghĩa là các lớp CIM có các thuộc tính và phương thức để thể hiện dữ liệu và chức năng được quản lý.
Theo www.snia.org/pywbem, để truy cập các hệ thống lưu trữ qua CIM/WBEM, bạn có thể sử dụng PyWBEM - một thư viện mã nguồn mở được viết bằng Python, cung cấp cho các nhà phát triển và quản trị viên hệ thống cách triển khai giao thức CIM để truy cập các đối tượng CIM và thực hiện các hoạt động khác nhau với máy chủ WBEM hoạt động trong phù hợp với SMI-S hoặc các thông số kỹ thuật CIM khác.
Để kết nối với máy chủ WBEM, chúng tôi sử dụng hàm tạo lớp Kết nối WBEM:
Đây là kết nối ảo, do CIM-XML/WBEM chạy trên HTTP nên kết nối thực xảy ra khi các phương thức được gọi trên một phiên bản của lớp WBEMConnection. Theo Bộ điều khiển âm lượng SAN lưu trữ hệ thống của IBM và Nguyên tắc thực hành và hiệu suất tốt nhất của Storwize V7000 (Ví dụ C-8, trang 412), chúng tôi sẽ sử dụng “root/ibm” làm vùng tên CIM cho hệ thống lưu trữ IBM Storwize.
Xin lưu ý rằng để thu thập số liệu thống kê qua giao thức CIM-XML/WBEM, bạn phải đưa người dùng vào nhóm bảo mật thích hợp. Ngược lại, khi thực hiện các truy vấn WBEM, đầu ra của các thuộc tính thể hiện của lớp sẽ trống.
Để truy cập số liệu thống kê lưu trữ, người dùng mà hàm tạo được gọi Kết nối WBEM(), phải có ít nhất quyền Quản trị viên hạn chế (có sẵn cho code_level > 7.8.0) hoặc quyền Quản trị viên (không được khuyến nghị vì lý do bảo mật).
Chúng tôi kết nối với hệ thống lưu trữ thông qua SSH và xem số nhóm:
> lsusergrp
id name role remote
0 SecurityAdmin SecurityAdmin no
1 Administrator Administrator no
2 CopyOperator CopyOperator no
3 Service Service no
4 Monitor Monitor no
5 RestrictedAdmin RestrictedAdmin no
Thêm người dùng zabbix vào nhóm mong muốn:
> chuser -usergrp 5 zabbix
Ngoài ra, theo Bộ điều khiển âm lượng SAN lưu trữ hệ thống của IBM và Nguyên tắc hiệu suất và phương pháp thực hành tốt nhất của Storwize V7000 (tr. 415), bạn phải kích hoạt tính năng thu thập số liệu thống kê trên hệ thống lưu trữ. Vì vậy, để thu thập số liệu thống kê mỗi phút:
> startstats -interval 1
Chúng tôi kiểm tra:
> lssystem | grep statistics
statistics_status on
statistics_frequency 1
Để lấy tất cả các lớp lưu trữ hiện có, bạn phải sử dụng phương thức EnumerateClassNames().
Ví dụ:
classnames = conn.EnumerateClassNames(namespace='root/ibm', DeepInheritance=True)
for classname in classnames:
print (classname)
Phương pháp được sử dụng để lấy các giá trị của tham số hệ thống lưu trữ Liệt kê các trường hợp() lớp WBEMConnection, trả về danh sách các phiên bản CIMInstance().
Ví dụ:
instances = conn.EnumerateInstances(classname,
namespace=nd_parameters['name_space'])
for instance in instances:
for prop_name, prop_value in instance.items():
print(' %s: %r' % (prop_name, prop_value))
Đối với một số lớp chứa nhiều phiên bản, chẳng hạn như IBMTSSVC_StorageVolume, truy vấn đầy đủ của tất cả các phiên bản có thể khá chậm. Nó có thể tạo ra khối lượng lớn dữ liệu phải được hệ thống lưu trữ chuẩn bị, truyền qua mạng và xử lý bằng tập lệnh. Có một phương pháp cho trường hợp như vậy Thực thi(), nó cho phép chúng ta chỉ lấy các thuộc tính của một thể hiện của lớp mà chúng ta quan tâm. Phương pháp này liên quan đến việc sử dụng ngôn ngữ truy vấn giống SQL, Ngôn ngữ truy vấn CIM (DMTF:CQL) hoặc Ngôn ngữ truy vấn WBEM (WQL), để truy vấn các đối tượng lưu trữ CIM:
request = 'SELECT Name FROM IBMTSSVC_StorageVolumeStatistics'
objects_perfs_cim = wbem_connection.ExecQuery('DMTF:CQL', request)
Vì vậy, để lấy tham số (không phải bộ đếm hiệu suất) của đĩa vật lý (Ổ đĩa), chúng ta sẽ thăm dò Lớp IBMTSSVC_DiskDrive, để lấy tham số Khối - Lớp IBMTSSVC_StorageVolume, để lấy tham số mảng - Lớp IBMTSSVC_Array, để lấy tham số MDisks - Lớp IBMTSSVC_BackendVolume, v.v.
Để có được số liệu thống kê lưu trữ cho các Tập, bạn phải chỉ định IBMTSSVC_StorageVolumeStatistics làm giá trị của tham số ClassName. Các thuộc tính của lớp IBMTSSVC_StorageVolumeStatistics cần thiết cho việc thu thập số liệu thống kê có thể được xem trong Thống kê nút.
Ngoài ra, để phân tích hiệu suất, bạn có thể sử dụng các lớp IBMTSSVC_BackendVolumeStatistics, IBMTSSVC_DiskDriveStatistics, IBMTSSVC_NodeStatistics.
Để ghi dữ liệu vào hệ thống giám sát chúng ta sẽ sử dụng cơ chế bẫy zabbix, được triển khai bằng python trong một mô-đun py-zabbix. Chúng ta sẽ đặt cấu trúc của các lớp hệ thống lưu trữ và các thuộc tính của chúng vào một từ điển ở định dạng JSON.
Chúng tôi tải mẫu lên máy chủ Zabbix, đảm bảo rằng máy chủ giám sát có quyền truy cập vào hệ thống lưu trữ thông qua giao thức WEB (TCP/5989) và đặt các tệp cấu hình, tập lệnh phát hiện và giám sát trên máy chủ giám sát. Tiếp theo, thêm tập lệnh khởi chạy vào bộ lập lịch. Kết quả là: chúng tôi khám phá các đối tượng lưu trữ (mảng, đĩa vật lý và ảo, vỏ, v.v.), chuyển chúng sang khám phá Zabbix, đọc trạng thái tham số của chúng, đọc thống kê hiệu suất (bộ đếm hiệu suất), chuyển tất cả điều này sang Zabbix tương ứng Các mục của mẫu của chúng tôi.
Bạn có thể sử dụng mẫu Zabbix, tập lệnh python, cấu trúc của các lớp lưu trữ và thuộc tính của chúng, cũng như các ví dụ về tệp cấu hình tìm ở đây.