MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Mengintegrasikan ClusterControl dengan SNMP :Bagian Kedua

Pos blog ini merupakan kelanjutan dari bagian 1 sebelumnya, di mana kita telah membahas dasar-dasar integrasi SNMP dengan ClusterControl.

Dalam posting blog ini, kita akan fokus pada jebakan dan peringatan SNMP. Perangkap SNMP adalah pesan peringatan yang paling sering digunakan yang dikirim dari perangkat berkemampuan SNMP jarak jauh (agen) ke kolektor pusat, "manajer SNMP". Dalam kasus ClusterControl, jebakan bisa menjadi peringatan setelah alarm kritis untuk sebuah cluster tidak 0, menunjukkan sesuatu yang buruk sedang terjadi.

Seperti yang ditunjukkan dalam posting blog sebelumnya, untuk tujuan pembuktian konsep ini, kami memiliki dua definisi pemberitahuan perangkap SNMP:

criticalAlarmNotification NOTIFICATION-TYPE
    OBJECTS { totalCritical, clusterId }
    STATUS current
    DESCRIPTION
        "Notification if critical alarm is not 0"
    ::= { alarmNotification 1 }

criticalAlarmNotificationEnded NOTIFICATION-TYPE
    OBJECTS { totalCritical, clusterId }
    STATUS  current
    DESCRIPTION
        "Notification ended - Critical alarm is 0"
    ::= { alarmNotification 2 }

Notifikasi (atau jebakan) sangat pentingAlarmNotification dan criticalAlarmNotificationEnded. Kedua peristiwa notifikasi dapat digunakan untuk memberi sinyal pada layanan Nagios kami, apakah cluster secara aktif memiliki alarm kritis atau tidak. Di Nagios, istilah untuk ini adalah pemeriksaan pasif, di mana Nagios tidak mencoba untuk menentukan apakah atau host/layanan TURUN atau TIDAK TERJANGKAU. Kami juga akan mengonfigurasi pemeriksaan aktif, di mana pemeriksaan dimulai oleh logika pemeriksaan di daemon Nagios dengan menggunakan definisi layanan untuk juga memantau alarm kritis/peringatan yang dilaporkan oleh cluster kami.

Perhatikan bahwa entri blog ini memerlukan agen MIB dan SNMP Somenines yang dikonfigurasi dengan benar seperti yang ditunjukkan di bagian pertama seri blog ini.

Menginstal Nagios Core

Nagios Core adalah versi gratis dari rangkaian pemantauan Nagios. Pertama dan terpenting, kita harus menginstalnya dan semua paket yang diperlukan, diikuti oleh plugin Nagios, snmptrapd dan snmptt. Perhatikan bahwa instruksi dalam posting blog ini mengasumsikan semua node berjalan di CentOS 7.

Instal paket yang diperlukan untuk menjalankan Nagios:

$ yum -y install httpd php gcc glibc glibc-common wget perl gd gd-devel unzip zip sendmail net-snmp-utils net-snmp-perl

Buat pengguna nagios dan grup nagcmd untuk mengizinkan perintah eksternal dijalankan melalui antarmuka web, tambahkan pengguna nagios dan apache untuk menjadi bagian dari grup nagcmd:

$ useradd nagios
$ groupadd nagcmd
$ usermod -a -G nagcmd nagios
$ usermod -a -G nagcmd apache

Unduh versi terbaru Nagios Core dari sini, kompilasi dan instal:

$ cd ~
$ wget https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.4.6.tar.gz
$ tar -zxvf nagios-4.4.6.tar.gz
$ cd nagios-4.4.6
$ ./configure --with-nagios-group=nagios --with-command-group=nagcmd
$ make all
$ make install
$ make install-init
$ make install-config
$ make install-commandmode

Instal konfigurasi web Nagios:

$ make install-webconf

Opsional, instal tema pengelupasan kulit Nagios (atau Anda dapat tetap menggunakan tema default):

$ make install-exfoliation

Buat akun pengguna (nagiosadmin) untuk masuk ke antarmuka web Nagios. Ingat kata sandi yang Anda tetapkan untuk pengguna ini:

$ htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

Mulai ulang server web Apache untuk membuat pengaturan baru berlaku:

$ systemctl restart httpd
$ systemctl enable httpd

Unduh Plugin Nagios dari sini, kompilasi dan instal:

$ cd ~ 
$ wget https://nagios-plugins.org/download/nagios-plugins-2.3.3.tar.gz
$ tar -zxvf nagios-plugins-2.3.3.tar.gz
$ cd nagios-plugins-2.3.3
$ ./configure --with-nagios-user=nagios --with-nagios-group=nagios
$ make
$ make install

Verifikasi file konfigurasi Nagios default:

$ /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

Nagios Core 4.4.6
Copyright (c) 2009-present Nagios Core Development Team and Community Contributors
Copyright (c) 1999-2009 Ethan Galstad
Last Modified: 2020-04-28
License: GPL
Website: https://www.nagios.org
Reading configuration data...
   Read main config file okay...
   Read object config files okay...
Running pre-flight check on configuration data...
Checking objects...
Checked 8 services.
Checked 1 hosts.
Checked 1 host groups.
Checked 0 service groups.
Checked 1 contacts.
Checked 1 contact groups.
Checked 24 commands.
Checked 5 time periods.
Checked 0 host escalations.
Checked 0 service escalations.
Checking for circular paths...
Checked 1 hosts
Checked 0 service dependencies
Checked 0 host dependencies
Checked 5 timeperiods
Checking global event handlers...
Checking obsessive compulsive processor commands...
Checking misc settings...
Total Warnings: 0
Total Errors:   0
Things look okay - No serious problems were detected during the pre-flight check
If everything looks okay, start Nagios and configure it to start on boot:
$ systemctl start nagios
$ systemctl enable nagios

Buka browser dan buka http://{IPaddress}/nagios dan Anda akan melihat otentikasi dasar HTTP muncul di mana Anda perlu menentukan nama pengguna sebagai nagiosadmin dengan kata sandi pilihan Anda yang dibuat sebelumnya.

Menambahkan server ClusterControl ke Nagios

Buat file definisi host Nagios untuk ClusterControl:

$ vim /usr/local/nagios/etc/objects/clustercontrol.cfg

Dan tambahkan baris berikut:

define host {
        use                     linux-server
        host_name               clustercontrol.local
        alias                   clustercontrol.mydomain.org
        address                 192.168.10.50
}

define service {
        use                     generic-service
        host_name               clustercontrol.local
        service_description     Critical alarms - ClusterID 23
        check_command           check_snmp! -H 192.168.10.50 -P 2c -C private -o .1.3.6.1.4.1.57397.1.1.1.2 -c0
}

define service {
        use                     generic-service
        host_name               clustercontrol.local
        service_description     Warning alarms - ClusterID 23
        check_command           check_snmp! -H 192.168.10.50 -P 2c -C private -o .1.3.6.1.4.1.57397.1.1.1.3 -w0
}


define service {
        use                     snmp_trap_template
        host_name               clustercontrol.local
        service_description     Critical alarm traps
        check_interval          60 ; Don't clear for 1 hour
}

Beberapa penjelasan:

  • Di bagian pertama, kita mendefinisikan host kita, dengan nama host dan alamat server ClusterControl.

  • Bagian layanan tempat kami meletakkan definisi layanan untuk dipantau oleh Nagios. Dua yang pertama pada dasarnya memberi tahu layanan untuk memeriksa keluaran SNMP untuk ID objek tertentu. Layanan pertama adalah tentang alarm kritis, oleh karena itu kami menambahkan -c0 pada perintah check_snmp untuk menunjukkan bahwa itu harus menjadi peringatan kritis di nagios jika nilainya melampaui 0. Sedangkan untuk alarm peringatan, kami akan menunjukkannya dengan peringatan jika nilainya 1 dan lebih tinggi.

  • Definisi layanan terakhir adalah tentang jebakan SNMP yang kami harapkan datang dari server ClusterControl jika alarm kritis dinaikkan lebih tinggi dari 0. Bagian ini akan menggunakan definisi snmp_trap_template, seperti yang ditunjukkan pada langkah berikutnya.

Konfigurasikan snmp_trap_template dengan menambahkan baris berikut ke /usr/local/nagios/etc/objects/templates.cfg:

define service {
        name                            snmp_trap_template
        service_description             SNMP Trap Template
        active_checks_enabled           1       ; Active service checks are enabled
        passive_checks_enabled          1       ; Passive service checks are enabled/accepted
        parallelize_check               1       ; Active service checks should be parallelized
        process_perf_data               0
        obsess_over_service             0       ; We should obsess over this service (if necessary)
        check_freshness                 0       ; Default is to NOT check service 'freshness'
        notifications_enabled           1       ; Service notifications are enabled
        event_handler_enabled           1       ; Service event handler is enabled
        flap_detection_enabled          1       ; Flap detection is enabled
        process_perf_data               1       ; Process performance data
        retain_status_information       1       ; Retain status information across program restarts
        retain_nonstatus_information    1       ; Retain non-status information across program restarts
        check_command                   check-host-alive      ; This will be used to reset the service to "OK"
        is_volatile                     1
        check_period                    24x7
        max_check_attempts              1
        normal_check_interval           1
        retry_check_interval            1
        notification_interval           60
        notification_period             24x7
        notification_options            w,u,c,r
        contact_groups                  admins       ; Modify this to match your Nagios contactgroup definitions
        register                        0
}

Sertakan file konfigurasi ClusterControl ke dalam Nagios, dengan menambahkan baris berikut di dalam  

/usr/local/nagios/etc/nagios.cfg:
cfg_file=/usr/local/nagios/etc/objects/clustercontrol.cfg

Jalankan pemeriksaan konfigurasi pra-penerbangan:

$ /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

Pastikan Anda mendapatkan baris berikut di akhir output:

"Things look okay - No serious problems were detected during the pre-flight check"

Mulai ulang Nagios untuk memuat perubahan:

$ systemctl restart nagios

Sekarang jika kita melihat halaman Nagios di bawah bagian Layanan (menu sisi kiri), kita akan melihat sesuatu seperti ini:

Perhatikan baris "Alarm kritis - ClusterID 1" berubah menjadi merah jika nilai alarm kritis yang dilaporkan oleh ClusterControl lebih besar dari 0, sedangkan "Alarm peringatan - ClusterID 1" berwarna kuning, menunjukkan bahwa ada alarm peringatan yang dinaikkan. Jika tidak ada hal menarik yang terjadi, Anda akan melihat semuanya berwarna hijau untuk clustercontrol.local.

Mengonfigurasi Nagios untuk menerima jebakan

Trap dikirim oleh perangkat jarak jauh ke server Nagios, ini disebut pemeriksaan pasif. Idealnya, kita tidak tahu kapan jebakan akan dikirim karena tergantung pada perangkat pengirim yang memutuskan akan mengirim jebakan. Misalnya dengan UPS (baterai cadangan), segera setelah perangkat kehilangan daya, ia akan mengirim jebakan untuk mengatakan "hei, saya kehilangan daya". Dengan cara ini Nagios segera diinformasikan.

Untuk menerima jebakan SNMP, kita perlu mengkonfigurasi server Nagios dengan hal-hal berikut:

  • snmptrapd (daemon penerima perangkap SNMP)

  • snmptt (Penerjemah Perangkap SNMP, daemon penangan perangkap)

Setelah snmptrapd menerima jebakan, snmptrapd akan meneruskannya ke snmptt di mana kami akan mengonfigurasinya untuk memperbarui sistem Nagios dan kemudian Nagios akan mengirimkan peringatan sesuai dengan konfigurasi grup kontak.

Instal repositori EPEL, diikuti dengan paket-paket yang diperlukan:

$ yum -y install epel-release
$ yum -y install net-snmp snmptt net-snmp-perl perl-Sys-Syslog

Konfigurasikan daemon trap SNMP di /etc/snmp/snmptrapd.conf dan atur baris berikut:

disableAuthorization yes
traphandle default /usr/sbin/snmptthandler

Hal di atas berarti jebakan yang diterima oleh daemon snmptrapd akan diteruskan ke /usr/sbin/snmptthandler.

Tambahkan SEVERALNINES-CLUSTERCONTROL-MIB.txt ke /usr/share/snmp/mibs dengan membuat /usr/share/snmp/mibs/SEVERALNINES-CLUSTERCONTROL-MIB.txt:

$ ll /usr/share/snmp/mibs/SEVERALNINES-CLUSTERCONTROL-MIB.txt
-rw-r--r-- 1 root root 4029 May 30 20:08 /usr/share/snmp/mibs/SEVERALNINES-CLUSTERCONTROL-MIB.txt

Buat /etc/snmp/snmp.conf (pemberitahuan tanpa "d") dan tambahkan MIB khusus kami di sana:

mibs +SEVERALNINES-CLUSTERCONTROL-MIB

Mulai layanan snmptrapd:

$ systemctl start snmptrapd
$ systemctl enable snmptrapd

Selanjutnya, kita perlu mengkonfigurasi baris konfigurasi berikut di dalam /etc/snmp/snmptt.ini:

net_snmp_perl_enable = 1
snmptt_conf_files = <<END
/etc/snmp/snmptt.conf
/etc/snmp/snmptt-cc.conf
END

Perhatikan bahwa kami mengaktifkan modul net_snmp_perl dan telah menambahkan jalur konfigurasi lain, /etc/snmp/snmptt-cc.conf di dalam snmptt.ini. Kita perlu mendefinisikan event snmptt ClusterControl di sini sehingga bisa diteruskan ke Nagios. Buat file baru di /etc/snmp/snmptt-cc.conf dan tambahkan baris berikut:

MIB: SEVERALNINES-CLUSTERCONTROL-MIB (file:/usr/share/snmp/mibs/SEVERALNINES-CLUSTERCONTROL-MIB.txt) converted on Sun May 30 19:17:33 2021 using snmpttconvertmib v1.4.2

EVENT criticalAlarmNotification .1.3.6.1.4.1.57397.1.1.3.1 "Status Events" Critical
FORMAT Notification if the critical alarm is not 0
EXEC /usr/local/nagios/share/eventhandlers/submit_check_result $aA "Critical alarm traps" 2 "Critical - Critical alarm is $1 for cluster ID $2"
SDESC
Notification if critical alarm is not 0
Variables:
  1: totalCritical
  2: clusterId
EDESC

EVENT criticalAlarmNotificationEnded .1.3.6.1.4.1.57397.1.1.3.2 "Status Events" Normal
FORMAT Notification if the critical alarm is not 0
EXEC /usr/local/nagios/share/eventhandlers/submit_check_result $aA "Critical alarm traps" 0 "Normal - Critical alarm is $1 for cluster ID $2"
SDESC
Notification ended - critical alarm is 0
Variables:
  1: totalCritical
  2: clusterId
EDESC

Beberapa penjelasan:

  • Kami memiliki dua jebakan yang ditentukan - criticalAlarmNotification dan criticalAlarmNotificationEnded.

  • The criticalAlarmNotification hanya memunculkan peringatan kritis dan meneruskannya ke layanan "Perangkap alarm kritis" yang ditentukan di Nagios. $aA berarti mengembalikan alamat IP agen perangkap. Nilai 2 adalah nilai hasil pemeriksaan yang dalam hal ini kritis (0=OK, 1=WARNING, 2=CRITICAL, 3=UNKNOWN).

  • The criticalAlarmNotificationEnded hanya memunculkan peringatan OK dan meneruskannya ke layanan "Perangkap alarm kritis", untuk membatalkan jebakan sebelumnya setelah semuanya kembali normal. $aA berarti mengembalikan alamat IP agen perangkap. Nilai 0  adalah nilai hasil pemeriksaan yang dalam hal ini OK. Untuk detail selengkapnya tentang penggantian string yang dikenali oleh snmptt, baca artikel ini di bawah bagian "FORMAT".

  • Anda dapat menggunakan snmpttconvertmib untuk membuat file snmptt event handler untuk MIB tertentu.

Perhatikan bahwa secara default, jalur eventhandler tidak disediakan oleh Nagios Core. Oleh karena itu, kita harus menyalin direktori eventhandlers dari sumber Nagios di bawah direktori contrib, seperti yang ditunjukkan di bawah ini:

$ cp -Rf nagios-4.4.6/contrib/eventhandlers /usr/local/nagios/share/
$ chown -Rf nagios:nagios /usr/local/nagios/share/eventhandlers

Kita juga perlu menetapkan grup snmptt sebagai bagian dari grup nagcmd, sehingga ia dapat mengeksekusi nagios.cmd di dalam skrip submit_check_result:

$ usermod -a -G nagcmd snmptt

Mulai layanan snmptt:

$ systemctl start snmptt
$ systemctl enable snmptt

Manajer SNMP (server Nagios) sekarang siap menerima dan memproses jebakan SNMP yang masuk.

Mengirim jebakan dari server ClusterControl

Misalkan seseorang ingin mengirim jebakan SNMP ke manajer SNMP, 192.168.10.11 (Server Nagios) karena jumlah total alarm kritis telah mencapai 2 untuk ID cluster 1, seseorang akan menjalankan perintah berikut pada server ClusterControl (sisi klien), 192.168.10.50:

$ snmptrap -v2c -c private 192.168.10.11 '' SEVERALNINES-CLUSTERCONTROL-MIB::criticalAlarmNotification \
SEVERALNINES-CLUSTERCONTROL-MIB::totalCritical i 2 \
SEVERALNINES-CLUSTERCONTROL-MIB::clusterId i 1

Atau, dalam format OID (disarankan):

$ snmptrap -v2c -c private 192.168.10.11 '' .1.3.6.1.4.1.57397.1.1.3.1 \
.1.3.6.1.4.1.57397.1.1.1.2 i 2 \
.1.3.6.1.4.1.57397.1.1.1.4 i 1

Di mana, .1.3.6.1.4.1.57397.1.1.3.1 sama dengan peristiwa perangkap criticalAlarmNotification, dan OID berikutnya adalah representasi dari jumlah total alarm kritis saat ini dan ID cluster, masing-masing .

Pada server Nagios, Anda akan melihat layanan trap berubah menjadi merah:

Anda juga dapat melihatnya di /var/log/messages dari baris berikut:

May 30 23:52:39 ip-10-15-2-148 snmptrapd[27080]: 2021-05-30 23:52:39 UDP: [192.168.10.50]:33151->[192.168.10.11]:162 [UDP: [192.168.10.50]:33151->[192.168.10.11]:162]:#012DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (2423020) 6:43:50.20#011SNMPv2-MIB::snmpTrapOID.0 = OID: SEVERALNINES-CLUSTERCONTROL-MIB::criticalAlarmNotification#011SEVERALNINES-CLUSTERCONTROL-MIB::totalCritical = INTEGER: 2#011SEVERALNINES-CLUSTERCONTROL-MIB::clusterId = INTEGER: 1
May 30 23:52:42 nagios.local snmptt[29557]: .1.3.6.1.4.1.57397.1.1.3.1 Critical "Status Events" UDP192.168.10.5033151-192.168.10.11162 - Notification if critical alarm is not 0
May 30 23:52:42 nagios.local nagios: EXTERNAL COMMAND: PROCESS_SERVICE_CHECK_RESULT;192.168.10.50;Critical alarm traps;2;Critical - Critical alarm is 2 for cluster ID 1
May 30 23:52:42 nagios.local nagios: PASSIVE SERVICE CHECK: clustercontrol.local;Critical alarm traps;0;PING OK - Packet loss = 0%, RTA = 22.16 ms
May 30 23:52:42 nagios.local nagios: SERVICE NOTIFICATION: nagiosadmin;clustercontrol.local;Critical alarm traps;CRITICAL;notify-service-by-email;Critical - Critical alarm is 2 for cluster ID 1
May 30 23:52:42 nagios.local nagios: SERVICE ALERT: clustercontrol.local;Critical alarm traps;CRITICAL;HARD;1;Critical - Critical alarm is 2 for cluster ID 1

Setelah alarm teratasi, untuk mengirim jebakan normal, kami dapat menjalankan perintah berikut:

$ snmptrap -c private -v2c 192.168.10.11 '' .1.3.6.1.4.1.57397.1.1.3.2 \ 
.1.3.6.1.4.1.57397.1.1.1.2 i 0 \
.1.3.6.1.4.1.57397.1.1.1.4 i 1

Di mana, .1.3.6.1.4.1.57397.1.1.3.2 sama dengan kejadian criticalAlarmNotificationEnded, dan OID berikutnya adalah representasi dari jumlah total alarm kritis saat ini (harus 0 untuk kasus ini ) dan ID cluster, masing-masing.

Di server Nagios, Anda akan melihat layanan trap kembali ke hijau:

Hal di atas dapat diotomatisasi dengan skrip bash sederhana:

#!/bin/bash
# alarmtrapper.bash - SNMP trapper for ClusterControl alarms

CLUSTER_ID=1
SNMP_MANAGER=192.168.10.11
INTERVAL=10

send_critical_snmp_trap() {
        # send critical trap
        local val=$1
        snmptrap -v2c -c private ${SNMP_MANAGER} '' .1.3.6.1.4.1.57397.1.1.3.1 .1.3.6.1.4.1.57397.1.1.1.1 i ${val} .1.3.6.1.4.1.57397.1.1.1.4 i ${CLUSTER_ID}
}

send_zero_critical_snmp_trap() {
        # send OK trap
        snmptrap -v2c -c private ${SNMP_MANAGER} '' .1.3.6.1.4.1.57397.1.1.3.2 .1.3.6.1.4.1.57397.1.1.1.1 i 0 .1.3.6.1.4.1.57397.1.1.1.4 i ${CLUSTER_ID}
}

while true; do
        count=$(s9s alarm --list --long --cluster-id=${CLUSTER_ID} --batch | grep CRITICAL | wc -l)
        [ $count -ne 0 ] && send_critical_snmp_trap $count || send_zero_critical_snmp_trap
        sleep $INTERVAL
done

Untuk menjalankan skrip di latar belakang, cukup lakukan:

$ bash alarmtrapper.bash &

Pada titik ini, kita seharusnya dapat melihat layanan "Critical alarm traps" Nagios beraksi jika ada kegagalan di cluster kita secara otomatis.

Pemikiran Terakhir

Dalam seri blog ini, kami telah menunjukkan bukti konsep tentang bagaimana ClusterControl dapat dikonfigurasi untuk memantau, menghasilkan/memproses jebakan, dan memperingatkan menggunakan protokol SNMP. Ini juga menandai awal dari perjalanan kami untuk memasukkan SNMP dalam rilis mendatang kami. Pantau terus karena kami akan memberikan lebih banyak pembaruan tentang fitur menarik ini.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana cara menyimpan file ke MongoDB?

  2. Bagaimana cara memasukkan banyak dokumen sekaligus di MongoDB melalui Java

  3. Flask - Permintaan Buruk Peramban (atau proxy) mengirimkan permintaan yang tidak dapat dipahami oleh server ini

  4. peringkat papan peringkat di mongo dengan pemain di sekitarnya

  5. Halaman login sederhana di nodejs menggunakan ekspres dan paspor dengan mongodb