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

Mengintegrasikan ClusterControl dengan SNMP - Bukti Konsep:Bagian Satu

ClusterControl hadir dengan sejumlah peringatan (atau alarm) khusus yang tidak akan Anda temukan di sistem pemantauan lainnya. ClusterControl memahami topologi cluster database secara keseluruhan - semua node database dan hubungan di antara mereka, termasuk node dependen atau cluster seperti node slave, reverse-proxy dan node arbitrator. Misalnya, ClusterControl mampu mendeteksi dan melaporkan cluster yang dipartisi, penyimpangan waktu antara semua node dalam cluster, kegagalan pemulihan cluster, kegagalan replikasi cluster-ke-cluster, dan banyak lagi alarm spesifik di seluruh cluster. Oleh karena itu, akan sangat bagus jika kita dapat mengintegrasikan alarm ClusterControl dengan sistem pemantauan atau paging berbasis SNMP yang ada.

Dalam seri blog ini, kami akan menampilkan bukti konsep tentang cara mengintegrasikan ClusterControl dengan protokol SNMP. Di akhir seri blog, kami akhirnya dapat mengirim jebakan SNMP ke manajer SNMP (Nagios, Zabbix, dll). Di bagian ini, kita akan membahas bagian-bagian berikut:

  • MIB (definisi objek SNMP)
  • Agen SNMP (pelaporan)

Arsitektur

Dalam contoh ini, kami memiliki server Nagios sebagai manajer SNMP, dengan server ClusterControl (agen SNMP) memantau Cluster Galera 3-simpul seperti yang diilustrasikan dalam diagram berikut:

Semua Instruksi dalam posting ini didasarkan pada CentOS 7.

Menginstal SNMP di server ClusterControl

1) Instal paket terkait SNMP:

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

2) Pastikan konten /etc/snmp/snmpd.conf memiliki yang berikut:

$ 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

Sedikit penjelasan:

  • MIB Beberapa N adalah komponen pribadi, oleh karena itu, kita hanya perlu mengizinkan jaringan kita, 192.168.10.0/16 dan localhost untuk menanyakan data SNMP. Kami mendefinisikan ini di bagian "com2sec".

  • Kemudian kita membuat grup keamanan bernama "myGroup", yang hanya mengizinkan koneksi dari jaringan "mynet", dan menerima protokol SNMP versi 2c.

  • Kemudian kita mendefinisikan view (apa yang bisa dilihat dari pemohon). "all" berarti pemohon SNMP dapat melihat semuanya (mulai dari OID .1). "systemview" hanya terbatas pada informasi yang aman untuk publik seperti nama host, datetime, dll yang merupakan default untuk pengguna SNMP publik.

  • Kemudian kami mengizinkan "myGroup" memiliki tampilan "semua".

3) Mulai ulang layanan SNMP untuk memuat perubahan:

$ systemctl restart snmpd

4) Sekarang, Anda seharusnya dapat melihat beberapa MIB jika kita melakukan 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

Menginstal MIB ClusterControl di server ClusterControl

MIB adalah singkatan dari Basis Informasi Manajemen. Ini adalah file teks berformat yang mencantumkan objek data yang digunakan oleh peralatan SNMP tertentu. Tanpa MIB, OID yang digunakan oleh SNMP tidak dapat diterjemahkan menjadi "benda". Definisi SNMP MIB ditulis dalam format MIB ringkas sesuai dengan RFC 1212. Beberapa memiliki Private Enterprise Number (PEN), 57397. Anda dapat memeriksa database nomor perusahaan yang terdaftar di sini.

1) Salin SEVERALNINES-CLUSTERCONTROL-MIB.txt dan letakkan di bawah /usr/share/snmp/mibs. Untuk memeriksa jalur MIB mana yang akan dicari SNMP, gunakan perintah ini:

$ net-snmp-config --default-mibdirs

2) Untuk memuat MIB kustom kita, kita perlu membuat file konfigurasi baru di /etc/snmp/snmp.conf (perhatikan tanpa "d") dan tambahkan baris berikut:

mibs +SEVERALNINES-CLUSTERCONTROL-MIB

3) Tambahkan baris berikut di dalam /etc/sysconfig/snmpd untuk mengizinkan akses jarak jauh ke layanan SNMP:

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

4) Mulai ulang daemon SNMP untuk memuat perubahan:

$ systemctl restart snmpd

5) Untuk melihat apakah MIB dimuat dengan benar, gunakan perintah 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)

Output di atas menunjukkan bahwa kami telah memuat MIB ClusterControl kami. Untuk pembuktian konsep ini, kami hanya memiliki satu komponen utama yang disebut "alarm", dan di bawahnya, kami memiliki 3 sub-komponen di samping tipe datanya:

  • alarmSummary - Ringkasan alarm. Hanya menunjukkan kritis, peringatan, dan ID cluster yang sesuai.

  • alarmSummaryGroup - Pengelompokan objek SNMP kami.

  • alarmNotification - Ini untuk definisi jebakan SNMP. Tanpa ini, jebakan SNMP kita tidak akan dapat dimengerti oleh manajer SNMP.

Penomoran di sebelahnya menunjukkan pengenal objek (OID). Misalnya, totalWarning OID adalah .1.3.6.1.4.1.57397.1.1.1.3 dan criticalAlarmNotification OID adalah .1.3.6.1.4.1.57397.1.1.3.1. Untuk organisasi swasta, OID selalu dimulai dengan ".1.3.6.1.4.1", diikuti dengan nomor perusahaan (57397 adalah PEN) dan kemudian objek MIB.

Menginstal agen SNMP di server ClusterControl

Untuk "melayani" output objek SNMP (jumlah alarm kritis, id cluster, dan sebagainya), kita perlu memperluas daemon SNMP dengan agen SNMP. Di SNMP, mereka menyebut protokol ini sebagai AgentX, yang telah kita definisikan di snmpd.conf di bawah bagian ini:

master agentx

Untuk pembuktian konsep ini, saya telah menyiapkan skrip yang ditulis dalam Perl untuk mengambil dan melaporkan ringkasan alarm ke dalam format SNMP/OID.

1) Instal komponen Perl SNMP:

$ yum install perl-Net-SNMP

2) Letakkan clustercontrol-snmp-agent.pl di mana saja yang dapat diakses oleh proses SNMP. Disarankan untuk meletakkannya di bawah direktori /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) Konfigurasikan baris berikut di dalam skrip (baris 14 hingga 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) Atur skrip dengan izin yang dapat dieksekusi:

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

5) Jalankan skrip:

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

Pastikan Anda melihat baris "subagent connected". Pada titik ini, alarm ClusterControl harus dilaporkan dengan benar melalui protokol SNMP. Untuk memeriksa, cukup gunakan perintah snmpwalk dan jalankan dari server jauh, misalnya dari server Nagios (snmpwalk disediakan oleh paket 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

Atau, Anda juga dapat menggunakan nama objek MIB yang menghasilkan hasil yang sama:

$ 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

Pemikiran Terakhir

Ini hanyalah bukti konsep (PoC) yang sangat sederhana tentang bagaimana ClusterControl dapat diintegrasikan dengan protokol SNMP. Di episode berikutnya, kita akan melihat pengiriman jebakan SNMP dari server ClusterControl ke manajer SNMP seperti Nagios, Zabbix atau Sensu.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Pembaruan MongoDB Banyak ()

  2. Bagaimana Anda memperbarui objek dalam larik dokumen (pembaruan bersarang)

  3. Bagaimana saya harus mengimplementasikan skema ini di MongoDB?

  4. Panduan untuk Penerapan &Pemeliharaan MongoDB Menggunakan Wayang:Bagian 2

  5. Cluster MongoDB yang terdistribusi secara geografis di AWS di wilayah UE