MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Tích hợp ClusterControl với SNMP - Bằng chứng về khái niệm:Phần thứ nhất

ClusterControl đi kèm với một số cảnh báo (hoặc cảnh báo) đặc biệt mà bạn sẽ không tìm thấy trong các hệ thống giám sát khác. ClusterControl hiểu tổng thể cấu trúc liên kết cụm cơ sở dữ liệu - tất cả các nút cơ sở dữ liệu và mối quan hệ giữa chúng, bao gồm các nút hoặc cụm phụ thuộc như cụm nô lệ, proxy ngược và các nút trọng tài. Ví dụ:ClusterControl có thể phát hiện và báo cáo một cụm được phân vùng, thời gian trôi giữa tất cả các nút trong cụm, lỗi khôi phục cụm, lỗi sao chép từng cụm và nhiều cảnh báo cụ thể trên toàn cụm khác. Do đó, sẽ thật tuyệt nếu chúng ta có thể tích hợp cảnh báo ClusterControl với bất kỳ hệ thống giám sát hoặc phân trang dựa trên SNMP nào hiện có.

Trong loạt bài blog này, chúng tôi sẽ giới thiệu một bằng chứng về khái niệm về cách tích hợp ClusterControl với giao thức SNMP. Ở phần cuối của loạt bài blog, cuối cùng chúng ta sẽ có thể gửi một bẫy SNMP đến một trình quản lý SNMP (Nagios, Zabbix, v.v.). Trong phần này, chúng ta sẽ đề cập đến các phần sau:

  • MIB (định nghĩa đối tượng SNMP)
  • Tác nhân SNMP (báo cáo)

Kiến trúc

Trong ví dụ này, chúng tôi có máy chủ Nagios làm trình quản lý SNMP, với máy chủ ClusterControl (tác nhân SNMP) giám sát Cụm Galera 3 nút như được minh họa trong sơ đồ sau:

Tất cả Hướng dẫn trong bài đăng này đều dựa trên CentOS 7.

Cài đặt SNMP trên máy chủ ClusterControl

1) Cài đặt các gói liên quan đến SNMP:

$ yum -y install net-snmp net-snmp-perl net-snmp-utils perl-Net-SNMP perl-CPAN

2) Đảm bảo nội dung của /etc/snmp/snmpd.conf có những nội dung sau:

$ grep -v '^\s*$\|^\s*\#' /etc/snmp/snmpd.conf
com2sec   notConfigUser  default              public
com2sec   mynet          192.168.10.0/16      private
com2sec   mynet          localhost            private
group   notConfigGroup v1            notConfigUser
group   notConfigGroup v2c           notConfigUser
group   myGroup        v2c           mynet
view    all           included   .1
view    systemview    included   .1.3.6.1.2.1.1
view    systemview    included   .1.3.6.1.2.1.25.1.1
access  notConfigGroup ""      any       noauth    exact  systemview none none
access  myGroup        ""      any       noauth    exact  all        all  none
master agentx
syslocation Unknown (edit /etc/snmp/snmpd.conf)
syscontact Root <[email protected]> (configure /etc/snmp/snmp.local.conf)
dontLogTCPWrappersConnects yes

Giải thích một chút:

  • MIB của Somenines là một thành phần riêng tư, do đó, chúng tôi chỉ cần cho phép mạng của mình, 192.168.10.0/16 và localhost để truy vấn dữ liệu SNMP. Chúng tôi xác định điều này trong phần "com2sec".

  • Sau đó, chúng tôi tạo một nhóm bảo mật có tên "myGroup", nhóm này chỉ cho phép các kết nối từ mạng "mynet" và chấp nhận giao thức SNMP phiên bản 2c.

  • Sau đó, chúng tôi xác định khung nhìn (những gì có thể được nhìn thấy từ người yêu cầu). "tất cả" có nghĩa là người yêu cầu SNMP có thể nhìn thấy mọi thứ (bắt đầu từ OID .1). "systemview" chỉ giới hạn đối với thông tin công khai như tên máy chủ, ngày giờ, v.v. là thông tin mặc định cho người dùng SNMP công khai.

  • Sau đó, chúng tôi cho phép "myGroup" có chế độ xem "tất cả".

3) Khởi động lại dịch vụ SNMP để tải các thay đổi:

$ systemctl restart snmpd

4) Bây giờ, bạn sẽ có thể thấy một số MIB nếu chúng tôi thực hiện snmpwalk:

$ snmpwalk -v2c -cpublic localhost # should return limited entries
$ snmpwalk -v2c -cprivate localhost # should return thousands of entries because the private view starts with .1

Cài đặt MIB của ClusterControl trên máy chủ ClusterControl

MIB là viết tắt của Management Information Base. Nó là một tệp văn bản được định dạng liệt kê các đối tượng dữ liệu được sử dụng bởi một phần thiết bị SNMP cụ thể. Nếu không có MIB, OID được SNMP sử dụng không thể được dịch thành "thứ". Định nghĩa SNMP MIB được viết ở định dạng MIB ngắn gọn phù hợp với RFC 1212. Somenines có Số Doanh nghiệp Tư nhân (PEN), 57397. Bạn có thể kiểm tra cơ sở dữ liệu số doanh nghiệp đã đăng ký tại đây.

1) Sao chép SEVERALNINES-CLUSTERCONTROL-MIB.txt và đặt nó dưới / usr / share / snmp / mibs. Để kiểm tra đường dẫn MIB mà SNMP sẽ tìm kiếm, hãy sử dụng lệnh sau:

$ net-snmp-config --default-mibdirs

2) Để tải MIB tùy chỉnh của chúng tôi, chúng tôi cần tạo tệp cấu hình mới tại /etc/snmp/snmp.conf (thông báo không có "d") và thêm dòng sau:

mibs +SEVERALNINES-CLUSTERCONTROL-MIB

3) Thêm dòng sau vào bên trong / etc / sysconfig / snmpd để cho phép truy cập từ xa vào dịch vụ SNMP:

OPTIONS="-Lsd -Lf /dev/null -p /var/run/snmpd.pid -a"

4) Khởi động lại daemon SNMP để tải thay đổi:

$ systemctl restart snmpd

5) Để xem MIB có được tải đúng cách hay không, hãy sử dụng lệnh snmptranslate:

$ snmptranslate -IR -On -Tp severalnines
+--severalnines(57397)
   |
   +--clustercontrolMIB(1)
      |
      +--alarms(1)
         |
         +--alarmSummary(1)
         |  |
         |  +-- -R-- Integer32 totalAlarms(1)
         |  |        Range: 0..2147483647
         |  +-- -R-- Integer32 totalCritical(2)
         |  |        Range: 0..2147483647
         |  +-- -R-- Integer32 totalWarning(3)
         |  |        Range: 0..2147483647
         |  +-- -R-- Integer32 clusterId(4)
         |           Range: 0..2147483647
         |
         +--alarmSummaryGroup(2)
         |
         +--alarmNotification(3)
            |
            +--criticalAlarmNotification(1)
            +--criticalAlarmNotificationEnded(2)

Kết quả trên cho thấy rằng chúng ta đã tải MIB của ClusterControl. Đối với khái niệm bằng chứng này, chúng tôi chỉ có một thành phần chính được gọi là "cảnh báo" và bên dưới nó, chúng tôi có 3 thành phần phụ cùng với loại dữ liệu của chúng:

  • alertSummary - Tổng hợp các cảnh báo. Chỉ hiển thị quan trọng, cảnh báo và ID cụm tương ứng.

  • alertSummaryGroup - Nhóm các đối tượng SNMP của chúng tôi.

  • alertNotification - Đây là định nghĩa về bẫy SNMP. Nếu không có điều này, người quản lý SNMP sẽ không hiểu được bẫy SNMP của chúng ta.

Việc đánh số bên cạnh nó cho biết định danh đối tượng (OID). Ví dụ:TotalWarning OID là .1.3.6.1.4.1.57397.1.1.1.3 và criticalAlarmNotification OID là .1.3.6.1.4.1.57397.1.1.3.1. Đối với các tổ chức tư nhân, OID luôn bắt đầu bằng ".1.3.6.1.4.1", tiếp theo là số doanh nghiệp (57397 là PEN của Somenines) và sau đó là các đối tượng MIB.

Cài đặt tác nhân SNMP trên máy chủ ClusterControl

Để "phục vụ" đầu ra đối tượng SNMP (số lượng cảnh báo quan trọng, id cụm, v.v.), chúng ta cần mở rộng daemon SNMP với tác nhân SNMP. Trong SNMP, họ gọi giao thức này là AgentX, mà chúng tôi đã định nghĩa trong snmpd.conf dưới phần này:

master agentx

Đối với khái niệm bằng chứng này, tôi đã chuẩn bị một tập lệnh được viết bằng Perl để truy xuất và báo cáo tóm tắt của cảnh báo thành định dạng SNMP / OID.

1) Cài đặt thành phần Perl SNMP:

$ yum install perl-Net-SNMP

2) Đặt clustercontrol-snmp-agent.pl ở bất kỳ đâu mà quy trình SNMP có thể truy cập được. Bạn nên đặt nó trong thư mục / usr / share / snmp.

$ ls -al /usr/share/snmp/clustercontrol-snmp-agent.pl
-rwxr-xr-x 1 root root 2974 May 10 14:16 /usr/share/snmp/clustercontrol-snmp-agent.pl

3) Định cấu hình các dòng sau bên trong tập lệnh (từ dòng 14 đến dòng 17):

my $clusterId = 23; # cluster ID that you want to monitor
my $totalAlarm = `/bin/s9s alarms --list --cluster-id=$clusterId --batch | wc -l`;
my $criticalAlarm = `/bin/s9s alarms --list --cluster-id=$clusterId --batch | grep CRITICAL | wc -l`;
my $warningAlarm = `/bin/s9s alarms --list --cluster-id=$clusterId --batch | grep WARNING | wc -l`;

4) Đặt tập lệnh có quyền thực thi:

$ chmod 755 /usr/share/snmp/clustercontrol-snmp-agent.pl

5) Chạy tập lệnh:

$ perl /usr/share/snmp/clustercontrol-snmp-agent.pl
NET-SNMP version 5.7.2 AgentX subagent connected

Đảm bảo rằng bạn nhìn thấy dòng "thuốc phụ được kết nối". Tại thời điểm này, cảnh báo ClusterControl sẽ được báo cáo chính xác thông qua giao thức SNMP. Để kiểm tra, chỉ cần sử dụng lệnh snmpwalk và thực thi nó từ một máy chủ từ xa, ví dụ từ máy chủ Nagios (snmpwalk được cung cấp bởi gói net-snmp-utils):

$ snmpwalk -v2c -c private 192.168.10.50 .1.3.6.1.4.1.57397.1.1.1
SEVERALNINES-CLUSTERCONTROL-MIB::totalAlarms = INTEGER: 3
SEVERALNINES-CLUSTERCONTROL-MIB::totalCritical = INTEGER: 2
SEVERALNINES-CLUSTERCONTROL-MIB::totalWarning = INTEGER: 1
SEVERALNINES-CLUSTERCONTROL-MIB::clusterId = INTEGER: 23

Ngoài ra, bạn cũng có thể sử dụng tên đối tượng MIB để thay thế cho kết quả tương tự:

$ snmpwalk -v2c -c private 192.168.10.50 SEVERALNINES-CLUSTERCONTROL-MIB::alarmSummary
SEVERALNINES-CLUSTERCONTROL-MIB::totalAlarms = INTEGER: 3
SEVERALNINES-CLUSTERCONTROL-MIB::totalCritical = INTEGER: 2
SEVERALNINES-CLUSTERCONTROL-MIB::totalWarning = INTEGER: 1
SEVERALNINES-CLUSTERCONTROL-MIB::clusterId = INTEGER: 23

Lời kết

Đây chỉ là một bằng chứng khái niệm (PoC) rất đơn giản về cách ClusterControl có thể được tích hợp với giao thức SNMP. Trong tập tiếp theo, chúng ta sẽ xem xét việc gửi các bẫy SNMP từ máy chủ ClusterControl tới trình quản lý SNMP như Nagios, Zabbix hoặc Sensu.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm cách nào để cập nhật giá trị của tài liệu nhúng cụ thể, bên trong một mảng, của một tài liệu cụ thể trong MongoDB?

  2. Mongodb tổng kích thước của các trường mảng

  3. Xác suất va chạm của ObjectId và UUID trong một hệ thống phân tán lớn

  4. Mẹo lưu trữ bản sao lưu MongoDB trên đám mây

  5. Đánh giá về các tùy chọn sao lưu MongoDB