3.2.1. Kiến trúc và chức năng hệ thống
Hệ tác tử quản trị được phát triển dựa trên kiến trúc quản lý mạng nổi tiếng SNMP, vì vậy kiến trúc cơ bản chính là mô hình Manager/Agent. Tuy nhiên, như phần trên đã trình bày, các ứng dụng Manager khá phức tạp, và hiện nay đã có rất nhiều kể cả sản phẩm thương mại và mã nguồn mở. Do vậy, trong khuôn khổ luận này ta tập trung vào các thành phần phía Agent.
Kiến trúc lý thuyết tổng quan của một Agent gồm các thành phần sau: - Thành phần điều phối giao vận, UDP, thông điệp
- Thành phần xử lý thông điệp - Thành phần kiểm soát an ninh
- Thành phần điều khiển truy nhập, lệnh và các thông báo - Thành phần uỷ quyền (proxy)
- Và các cơ sở thông tin quản lý MIB
Mối quan hệ giữa các thành có thể được mô tả như hình 3.1.
Kiến trúc của Agent được thiết kết gồm các thành phần: - Engine: là thành phần xử lý trung tâm của Agent.
Kiến trúc tổng quan trên thể hiện đầy đủ các thành phần được phân chia theo chức năng mức xử lý đối với bất kỳ một Agent nào, do đó đây chỉ là mô hình lý thuyết. Trong khuôn khổ luận văn này ta không thực hiện các thành phần với giao thức SNMP phiên bản v2 và v3, phần kiểm soát an ninh (Security Subsystem) và phần uỷ quyền (Proxy Forwarder).
Đối với Agent cho dịch vụ web của ta sẽ được phân chia thành các thành phần theo chức năng mức ứng dụng, do đó ta có các thành phần sau:
SNMP entity Dispatcher - Transport - PDU - Message Message Processing Subsystem - SNMPv1, v2, v3 - Other Message Command Responder Network Access Control Notification Originator MIB instrumentation Security Subsystem - User-base security - Other security Proxy Forwarder Hình 3.1 - Kiến trúc tổng quan một tác tử
- Apache-Scoreboard: thành phần này có nhiệm vụ thu thập thông tin về máy chủ web.
- Apache-Config: thành phần thực hịên cấu hình cho máy chủ web. - Www: thành phần thu thập, xử lý thông tin dịch vụ web.
Tương ứng với các thành phần Apache-Scoreboard, Apache-Config, Www là ba cơ sở dữ liệu thông tin MIB. Ta có thể mô tả các thành phần này trong hình 3.2.
Trong kiến trúc này, các thành phần có chức năng như sau:
* Engine: đây là thành phần trung tâm có nhiệm vụ khởi tạo hệ thống, nhận và xử lý tin thông từ phía Manager, trao đổi thông tin với các thành phần khác của hệ thống để có thông tin trả lời lại Manager. Các nhiệm vụ cụ thể cho Engine gồm:
- Kết nối với máy chủ web, khởi tạo tiến trình, mở số hiệu cổng dịch vụ UDP 161, và lắng nghe truy nhập từ Manager.
- Thực hiện dịch vụ SNMP đối với phía Manager, bao gồm: xử lý thông tin nhận được từ Manager và trả lại thông tin mà nó yêu cầu.
- Trao đổi thông tin với các thành phần khác để thu thập và xử lý thông tin mà Manager yêu cầu.
Apache-Scoreboard Apache-Config Www Engine MIB MIB MIB Hình 3.2 - Kiến trúc tác tử
Đây là thành phần phức tạp nhất, bởi nó phải thực hiện toàn bộ các công đoạn bao gồm hầu hết các thành phần xử lý chính trong kiến trúc Agent lý thuyết tổng thể hình 3.1.
* Apache-Scoreboard: là thành phần có nhiệm vụ thu thập các thông tin nội bộ của máy chủ web. Cụ thể các chức năng gồm:
- Trạng thái các tiến trình và định danh của nó. - Thời gian từ khi khởi tạo tiến trình gốc.
- Số lần truy nhập, số byte truy nhập của từng tiến trình. - Số lượng yêu cầu tới các máy ảo.
Các thông tin của thành phần này có mục đích giúp cho người quản trị mạng nắm được đầy đủ các thông tin và trạng thái hoạt động về hệ thống máy chủ web. Và để từ đó có các điều chỉnh phù hợp tránh xẩy ra các trường hợp không mong muốn như sự quá tải, hoặc các trạng thái bất thường của các tiến trình.
* Apache-Config: đây là thành phần cho phép người quản trị thiết lập các thông số cơ bản nhất của máy chủ web. Các thông số như:
- Số lượng tiến trình khởi tạo ban đầu.
- Số lượng truy nhập tối đa đối với mỗi tiến trình.
- Cho phép/không cho phép giải nghĩa tên máy trạm khi ghi nhật ký. - Trạng thái KeepAlive, giá trị Timeout.
- Mức ghi nhật ký: debug, warn, error, info,…
Đây là thành phần duy nhất cho phép người quản trị có thể cấu hình các thông số máy chủ web thông qua giao thức SNMP. Do vậy cần phải có các chính sách bảo mật để tránh việc người dùng không có thẩm quyền cũng có thể truy nhập được.
* Www: đây là thành phần có nhiều tính năng nhất cho phép người quản trị có thể giám sát thời gian thực các thông số giao thức web như HTTP, FTP. Các nhóm tính năng cơ bản cần có như:
- Nhóm mô tả dịch vụ, bao gồm: các mô tả chung, tên dịch vụ, thời gian sửa đổi cuối cùng, thời gian khởi tạo,…
- Nhóm trạng thái dịch vụ, đây là nhóm quan trọng bao gồm các nhóm nhỏ như: nhóm yêu cầu vào (Request In), nhóm yêu cầu ra (Request Out), nhóm trả lời vào(Response In), nhóm trả lời ra (Response Out). Trong các nhóm con này đều có các thông tin như: số byte dữ liệu vào và ra, thời gian của thao tác cuối cùng.
- Nhóm trạng thái tài liệu, nhóm này cũng có các nhóm nhỏ như: nhóm trạng thái tài liệu, nhóm các tài liệu đã được truy nhập cuối cùng, nhóm thời gian truy nhập tài liệu.
Www là thành phần có nhiều thông tin nhất giúp cho người quản trị nắm được cụ thể các thao tác vào ra trên mỗi giao dịch, cũng như trạng thái các tài liệu. Như thế người quản trị sẽ có được các thông tin cần thiết để điều chỉnh hệ thống phục vụ hoặc trợ giúp việc lập kế hoạch phát triển mạng trong tương lai.
Như vậy, trên đây ta đã có được thiết kế và sơ bộ các chức năng của một tác tả quản trị cho hệ thống máy chủ web. Các thành phần Apache- Scoreboard, Apache-Config và Www hoạt động phải tuân theo các cơ sở dữ liệu quản trị MIB nhất định. Các MIB này cũng là các thành phần hết sức quan trọng, phần tiếp theo đây ta sẽ định nghĩa các cơ sở dữ liệu này.
3.2.2. Cở dữ liệu thông tin quản lý
Như trong Chương 2 đã trình bày, MIB (Management Information Base) là một cơ sở dữ liệu thông tin quản trị có nhiệm vụ chứa và biểu diễn tất cả các thông tin về tài nguyên cần quản lý. Hiện nay các MIB thông dụng cho các tài nguyên mạng thì đều đã được định nghĩa sẵn như: MIB cho router, MIB cho Switch, MIB cho hệ điều hành, … Tuy nhiên, vì ta tự xây dụng một hệ tác tử quản trị riêng nên ta cũng phải tự xây dựng MIB riêng. Đây là một phần công đoạn hết sức quan trọng, vì cả hai phía Agent và Manager đều phải hiểu các MIB này thì mới có thể trao đổi thông tin được.
Để các hệ thống NMS có thể hiểu được các MIB mà ta định nghĩa thì buộc phải định nghĩa chúng tuân theo cấu trúc thông tin quản lý SMI (Structure of Management Information) và ngôn ngữ định nghĩa dữ liệu ASN.1 (Abstract Syntax Notation One). Trước hết cần xác định các MIB sẽ định nghĩa gồm:
- Apache-Scoreboard-MIB - Apache-Config-MIB - Www-MIB
Ta cần xác định Apache-Scoreboard-MIB và Apache-Config-MIB là các MIB riêng cho máy chủ web, do đó ta sẽ đặt chúng trong nhánh enterprise
với OID như sau:
iso.org.dod.internet.private.enterprise hay 1.3.6.1.4.1
Còn Www-MIB có thể truy nhập tự do nên ta sẽ đặt nó trong nhánh
mgmt với OID như sau:
iso.org.dod.internet.mgmt hay 1.3.6.1.2
Trước khi định nghĩa các MIB cụ thể ta cần nắm vững lý thuyết về SMI và ASN.1. Ta sẽ nhắc lại một số kiến thức cơ bản:
* Kiểu dữ liệu và giá trị, ví dụ: INTEGER (0..255), OCTET STRING,…
* Macro dùng để định nghĩa đầy đủ một một đối tượng, macro OBJECT-TYPE được sử dụng thông dụng nhất. Một macro có dạng:
TÊN-MACRO LOẠI-MACRO
SYNTAX “kiểu dữ liệu”
ACCESS “quyền truy nhập, chính là các tên định danh” STATUS “kiểu trạng thái”
DESCRIPTION “Mô tả đối tượng” ::= { “nhánh OID” }
Ví dụ:
sysContact OBJECT-TYPE
SYNTAX DisplayString (SIZE (0..255)) ACCESS read-write
STATUS mandatory DESCRIPTION
person for this manage node, and information on how to contact this person.”
::= { system 4 }
Như thế OID của sysContact là: iso.org.dod.internet.mgmt.mib- 2.system hay 1.3.6.1.2.1.1.4.
* Module có thể hiểu như một tập hợp các mô tả thành các nhóm đối tượng thích hợp, thông thường mỗi module sẽ được lưu thành một tệp văn bản. Cấu trúc module có dạng như sau:
TÊN-MODULE DEFINITIONS ::= BEGIN IMPORTS
-- các module, dữ liệu liên quan --//////
-- định nghĩa các đối tượng quản lý, các macro END
Ở đây, ký hiệu “--” có nghĩa là chú thích. Ví dụ một mẫu module định nghĩa IP-MIB:
IP-MIB DEFINITIONS ::= BEGIN IMPORTS
MODULE-IDENTITY, OBJECT-TYPE, Integer32,
Counter32, IpAddress, mib-2 FROM SNMPv2-SMI PhysAddress FROM SNMPv2-TC MODULE-COMPLIANCE, OBJECT-GROUP FROM SNMPv2-CONF; ipMIB MODULE-IDENTITY
LAST-UPDATED "9411010000Z"
ORGANIZATION "IETF SNMPv2 Working Group" CONTACT-INFO
"Keith McCloghrie .. .. Email: kzm@cisco.com" DESCRIPTION
"The MIB module for managing IP and ICMP implementations, but excluding their management of IP routes."
REVISION "9103310000Z" DESCRIPTION
"The initial revision of this MIB module was part of MIB-II." ::= { mib-2 4}
--
-- định nghĩa các nhóm đối tượng của IP -- END
Trong ví dụ trên, module IP-MIB được định nghĩa có OID là 4 nằm trong nhánh MIB-2 bởi câu lệnh: “::= { mib-2 4}”,
tức OID của IP là: iso.org.dod.internet.mgmt.mib-2.ip hay 1.3.6.1.2.1.4. Bây giờ ta định nghĩa các MIB riêng của ta.
a) Apache-Scoreboard-MIB (lưu thành tệp tin văn bản apache-scoreboard- mib.txt)
Trước hết, ta xác định rằng MIB định nghĩa các đối tượng cần quản lý riêng, do đó sau từ kháo IMPORTS sẽ không có module nào liên quan. Tiếp theo ta cần gắn MIB này vào một nhánh cụ thể, ở đây ta sẽ chọn là nhánh sau enterprises, tức OID sẽ là:
iso.org.dod.internet.private.enterprises.myapache hay 1.3.6.1.4.1.x Ở đây, “x” là giá trị OID mà ta sẽ tự lựa chọn (hoặc đăng ký miễn phí tại http://www.isi.edu/cgi-bin/iana/enterprise.pl) (thông tin chi tiết cũng có thể xem tại RFC 1700), ta có thể chọn giá trị là x=785 đại diện cho nhánh
myapache. Do đó ta sẽ có phần mở đầu như sau: APACHE-MIB DEFINITIONS ::= BEGIN
IMPORTS ;
myApache OBJECT IDENTIFIER ::= { enterprises 785 } -- OID: 1.3.6.1.4.1.785
Phần tiếp theo là các mô tả chung về module bao gồm các thông tin: lần cập nhật cuối (LAST-UPDATE), tổ chức nào (ORGANIZATION), thông tin liên hệ (CONTACT-INFO), và mô tả chung về module. Thông thường, đây là một macro là một nhánh con trong nhánh myApache, ta định nghĩa như sau: apacheMIB MODULE-IDENTITY
LAST-UPDATED "Thời gian"
ORGANIZATION "Thông tin về tổ chức" CONTACT-INFO
"Thông tin về tác giả" DESCRIPTION
"Đây là module đặc tả các đối tượng quản lý cho máy chủ Apache HTTP-Server"
::= { myApache 5 } -- OID: 1.3.6.1.4.1.785.5
Bây giờ ta định nghĩa các đối tượng cụ thể
apacheMIBObjects OBJECT IDENTIFIER ::= { apacheMIB 1 } -- OID: 1.3.6.1.4.1.785.5.1
-- Định nghĩa một bảng kiểu “SEQUENCE OF” apScoreBoardTable OBJECT-TYPE
SYNTAX SEQUENCE OF ApScoreBoardEntry MAX-ACCESS not-accessible
STATUS current DESCRIPTION
"Bảng này duy trì thông tin các đối tượng quản lý." ::= { apacheMIBObjects 1 }
-- Đối tượng này không thể truy nhập được -- OID: 1.3.6.1.4.1.785.5.1.1
apScoreBoardEntry OBJECT-TYPE SYNTAX ApScoreBoardEntry MAX-ACCESS not-accessible STATUS current DESCRIPTION "Điểm vào bảng." INDEX { apScoreBoardIndex } ::= { apScoreBoardTable 1 }
-- Đối tượng này không thể truy nhập được -- OID: 1.3.6.1.4.1.785.5.1.1.1
-- Chú thích: mô tả kiểu dữ liệu cho các đối tượng ApScoreBoardEntry ::= SEQUENCE { apScoreBoardIndex Unsigned32, apScoreBoardProcessId Unsigned32, apScoreBoardStatus ApacheServerStatusType, apScoreBoardStartTime TimeStamp, apScoreBoardAccessCount Unsigned32, apScoreBoardAccessBytes Unsigned32, apScoreBoardClient DisplayString, apScoreBoardRequest DisplayString, apScoreBoardVirtualHost Unsigned32 }
Ở đây, các kiểu dữ liệu Unsigned32, TimeStamp, DisplayString là các kiểu chuẩn, còn ApacheServerStatusType là kiểu ta sẽ tự định nghĩa. Vì các đối tượng của máy chủ Apache có chín trạng thái khác nhau (thực chất là trạng thái của các tiến trình), ta sẽ định nghĩa một kiểu dữ liệu riêng chứa các trạng thái này như sau:
ApacheServerStatusType ::= TEXTUAL-CONVENTION STATUS current
DESCRIPTION
"Định nghĩa các trạng thái cho máy chủ Apache." SYNTAX INTEGER {
dead(1), starting(2), ready(3), read(4), write(5), keepalive(6), log(7), dns(8), graceful(9)
}
Chú ý: ta phải đặt định nghĩa kiểu dữ liệu riêng trước khi có mô tả hay sử dụng chúng, tức là phải đặt định nghĩa ApacheServerStatusType trước ApScoreboardEntry. apScoreBoardIndex OBJECT-TYPE SYNTAX Unsigned32 MAX-ACCESS not-accessible STATUS current
DESCRIPTION
"Chỉ số bảng duy trì thông tin cho máy chủ Apache." ::= { apScoreBoardEntry 1 }
-- Đối tượng này không thể truy nhập được -- OID: 1.3.6.1.4.1.785.5.1.1.1.1 apScoreBoardProcessId OBJECT-TYPE SYNTAX Unsigned32 MAX-ACCESS read-only STATUS current DESCRIPTION
"Định danh các tiến trình của máy chủ." ::= { apScoreBoardEntry 2 }
-- Đối tượng này truy nhập được, nhưng chỉ đọc thông tin -- OID: 1.3.6.1.4.1.785.5.1.1.1.2 apScoreBoardStatus OBJECT-TYPE SYNTAX ApacheServerStatusType MAX-ACCESS read-only STATUS current DESCRIPTION
"Trạng thái của máy chủ." ::= { apScoreBoardEntry 3 }
-- Đối tượng này truy nhập được, nhưng chỉ đọc thông tin -- OID: 1.3.6.1.4.1.785.5.1.1.1.3 apScoreBoardStartTime OBJECT-TYPE SYNTAX TimeStamp MAX-ACCESS read-only STATUS current DESCRIPTION
"Thời gian từ khi máy chủ kích hoạt." ::= { apScoreBoardEntry 4 }
-- Đối tượng này truy nhập được, nhưng chỉ đọc thông tin -- OID: 1.3.6.1.4.1.785.5.1.1.1.4 apScoreBoardAccessCount OBJECT-TYPE SYNTAX Unsigned32 MAX-ACCESS read-only STATUS current DESCRIPTION
"Số lượng truy nhập được quản lý bởi máy chủ." ::= { apScoreBoardEntry 5 }
-- Đối tượng này truy nhập được, nhưng chỉ đọc thông tin -- OID: 1.3.6.1.4.1.785.5.1.1.1.5 apScoreBoardAccessBytes OBJECT-TYPE SYNTAX Unsigned32 MAX-ACCESS read-only STATUS current DESCRIPTION
"Số lượng byte đã trả lời bởi máy chủ." ::= { apScoreBoardEntry 6 }
-- Đối tượng này truy nhập được, nhưng chỉ đọc thông tin -- OID: 1.3.6.1.4.1.785.5.1.1.1.6
apScoreBoardClient OBJECT-TYPE
SYNTAX DisplayString MAX-ACCESS read-only
STATUS current DESCRIPTION
"Máy trạm đã kết nối đến máy chủ." ::= { apScoreBoardEntry 7 }
-- Đối tượng này truy nhập được, nhưng chỉ đọc thông tin -- OID: 1.3.6.1.4.1.785.5.1.1.1.7 apScoreBoardRequest OBJECT-TYPE SYNTAX DisplayString MAX-ACCESS read-only STATUS current DESCRIPTION
"Yêu cầu từ máy trạm." ::= { apScoreBoardEntry 8 }
-- Đối tượng này truy nhập được, nhưng chỉ đọc thông tin -- OID: 1.3.6.1.4.1.785.5.1.1.1.8 apScoreBoardVirtualHost OBJECT-TYPE SYNTAX Unsigned32 MAX-ACCESS read-only STATUS current DESCRIPTION
"Số máy ảo đang truy nhập bởi máy chủ." ::= { apScoreBoardEntry 9 }
-- Đối tượng này truy nhập được, nhưng chỉ đọc thông tin -- OID: 1.3.6.1.4.1.785.5.1.1.1.9
-- Gộp các đối tượng trên thành một nhóm, các thông tin này -- không thể truy nhập được mà mục đích chỉ để quản lý. -- OID: 1.3.6.1.4.1.785.5.2
apMIBConformance OBJECT IDENTIFIER ::= { apacheMIB 2 } -- OID: 1.3.6.1.4.1.785.5.2.1
apMIBCompliances OBJECT IDENTIFIER ::= { apMIBConformance 1 } -- OID: 1.3.6.1.4.1.785.5.2.2
apMIBGroups OBJECT IDENTIFIER ::= { apMIBConformance 2 }
apScoreBoardGroup OBJECT-GROUP OBJECTS { apScoreBoardProcessId, apScoreBoardStatus, apScoreBoardStartTime, apScoreBoardAccessCount, apScoreBoardAccessBytes, apScoreBoardClient, apScoreBoardRequest, apScoreBoardVirtualHost } STATUS current DESCRIPTION
"Gộp các đối tượng thành một nhóm MIB" ::= { apMIBGroups 1 }
-- OID: 1.3.6.1.4.1.785.5.2.2.1
Kết thúc module bằng từ khoá END END
Trên đây là định nghĩa đầy đủ cho module ApacheScoreboard-MIB. Và như thế, ta sẽ có cây thứ bậc với nhánh myApache như sau:
osi.org.dod.internet.private.interprise.myapache hay 1.3.6.1.4.1.785 1.3.6.1.4.1.785 myApache 1.3.6.1.4.1.785.5 apacheMIB 1.3.6.1.4.1.785.5.1 apacheMIBObjects 1.3.6.1.4.1.785.5.1.1 apScoreBoardTable 1.3.6.1.4.1.785.5.1.1.1 apScoreBoardEntry 1.3.6.1.4.1.785.5.1.1.1.1 apScoreBoardIndex 1.3.6.1.4.1.785.5.1.1.1.2 apScoreBoardProcessId 1.3.6.1.4.1.785.5.1.1.1.3 apScoreBoardStatus 1.3.6.1.4.1.785.5.1.1.1.4 apScoreBoardStartTime 1.3.6.1.4.1.785.5.1.1.1.5 apScoreBoardAccessCount 1.3.6.1.4.1.785.5.1.1.1.6 apScoreBoardAccessBytes 1.3.6.1.4.1.785.5.1.1.1.7 apScoreBoardClient 1.3.6.1.4.1.785.5.1.1.1.8 apScoreBoardRequest 1.3.6.1.4.1.785.5.1.1.1.9 apScoreBoardVirtualHost 1.3.6.1.4.1.785.5.2 apMIBConformance 1.3.6.1.4.1.785.5.2.1 apMIBCompliances 1.3.6.1.4.1.785.5.2.2 apMIBGroups 1.3.6.1.4.1.785.5.2.2.1 apScoreBoardGroup
Sau khi khởi tạo ta có thể sử dụng các lệnh của SNMP để thu thập thông tin từ MIB này. Ví dụ lệnh của bộ công cụ Net-Snmp [17]:
#snmpwalk –v1 127.0.0.1 –c private .1.3.6.1.4.1.785.5.1.1.1.2 SNMPv2-SMI::enterprises.785.5.1.1.1.2.1 = Gauge32: 2949 SNMPv2-SMI::enterprises.785.5.1.1.1.2.2 = Gauge32: 2951 SNMPv2-SMI::enterprises.785.5.1.1.1.2.3 = Gauge32: 2952 SNMPv2-SMI::enterprises.785.5.1.1.1.2.4 = Gauge32: 2954 SNMPv2-SMI::enterprises.785.5.1.1.1.2.5 = Gauge32: 2955 SNMPv2-SMI::enterprises.785.5.1.1.1.2.6 = Gauge32: 2956 SNMPv2-SMI::enterprises.785.5.1.1.1.2.7 = Gauge32: 2957
Kết quả cho thấy máy chủ Apache đang khởi động 7 tiến trình, mỗi tiến