NRPE tidak dapat membaca output, tetapi mengapa?

27

Saya memiliki masalah dengan NRPE ini, semua hal yang saya temukan sejauh ini di internet sepertinya menunjukkan hal-hal yang sudah saya coba.

# /usr/local/nagios/plugins/check_nrpe -H nrpeclient

memberi

NRPE v2.12

seperti yang diharapkan.

Menjalankan perintah dengan tangan (sebagaimana didefinisikan dalam nrpe.cfg pada "nrpeclient", memberikan respons yang diharapkan

nrpe.cfg:

command[check_openmanage]=/usr/lib/nagios/plugins/additional/check_openmanage -s -e   -b ctrl_driver=0 bat_charge

"Expected response"

Tetapi jika saya mencoba menjalankan perintah dari server Nagios saya mendapatkan yang berikut:

# /usr/local/nagios/plugins/check_nrpe -H comxps -c check_openmanage
NRPE: Unable to read output

Adakah yang bisa memikirkan tempat lain yang mungkin membuat kesalahan dengan ini? Saya telah melakukan hal yang sama pada beberapa server lain tanpa masalah. Satu-satunya perbedaan yang dapat saya pikirkan adalah kotak ini berbasis RHEL 5, sedangkan yang lain berbasis RHEL 5.

Dua bit di atas yang telah saya uji adalah apa yang tampaknya kebanyakan orang menyarankan ketika orang memiliki masalah ini.

Saya harus menyebutkan bahwa saya mendapatkan kesalahan aneh di log ketika saya memulai kembali nrpe:

nrpe[14534]: Unable to open config file '/usr/local/nagios/etc/nrpe.cfg' for reading 
nrpe[14534]: Continuing with errors...
nrpe[14535]: Starting up daemon
nrpe[14535]: Warning: Daemon is configured to accept command arguments from clients!
nrpe[14535]: Listening for connections on port 5666 
nrpe[14535]: Allowing connections from: bodbck,combck,nam-bck

Meskipun, itu jelas membaca /usr/local/nagios/etc/nrpe.cfgfile itu untuk mendapatkan hal-hal yang dibicarakannya lebih jauh ke bawah ..

ticktockhouse
sumber
Mari kita simpan ini, karena yang lain sudah ditutup.
Bart De Vos
Juga, pastikan STDOUT benar-benar memerah.

Jawaban:

35

Anda memiliki masalah hak.

Ubah perintah menjadi:

command[check_openmanage]=sudo /usr/lib/nagios/plugins/additional/check_openmanage -s -e -b ctrl_driver=0 bat_charge

(tambahkan sudo)

Kemudian, tambahkan pengguna nagios ke sudoers:

nagios ALL=(ALL) NOPASSWD:/usr/lib/nagios/plugins/additional/check_openmanage

Atau Anda bisa chmod file ... Itu juga berfungsi.

Jika Anda menggunakan CentOS, Red Hat, Scientific atau Fedora, pastikan untuk menonaktifkan Defaults requirettydi file sudoers.

Bart De Vos
sumber
1
@ Bart De Vos tetapi jawaban yang Anda tambahkan akan membuat lubang keamanan> menambahkan sesuatu ke file sudoers membuka Anda untuk risiko keamanan potensial. yaitu jika melalui buffer overflow seseorang dapat menjatuhkan file dengan nama yang sama di lokasi yang sama, mereka dapat mengeksekusinya tanpa mengetahui kata sandi root dan mendapatkan kendali atas kotak: S Apakah tidak ada cara untuk entah bagaimana meletakkan tanda tangan (SHA1 atau MD5) aplikasi dalam file sudoers untuk mencegah jenis serangan itu. yaitu file yang disuntikkan tidak akan memiliki tanda tangan yang sama dan karenanya tidak dijalankan. [Baca komentar pertama di sini] ( crashatau.blogspot.co
Ahmad Hajjar
1
@ X-Ware: Meskipun ini benar, kemungkinan buffer overflow dapat disalahgunakan di sini sangat tipis. Untuk mencegahnya terjadi, Anda harus menggunakan apparmor / SELinux. Itulah sebabnya semua ini ada.
Bart De Vos
Saya kira distro yang berbeda bahkan memiliki pengguna yang berbeda, dalam kasus saya pengguna untuk menambahkan visudo adalah npre bukan nagios. Saya masih mengikuti solusi Bart De Vos, namun Anda dapat melihat pengguna mana yang mencoba mengakses perintah nrpe dengan melihat / var / log / log akses aman. 24 Jul 15:39:09 hostname sudo: nrpe: user NOT in sudoers; TTY = tidak diketahui; PWD = /; USER = root; COMMAND = / usr / lib64 / nagios / plugins / check_disk -w 20% -c 10% -p / dev / mapper / vg_uxp-lv_root
@AhmadHajjar Kamu serius? Anda berpikir seseorang akan meretas nagios (sistem yang berumur 20 tahun) dan menggunakan pengguna itu untuk mengeksekusi file dengan izin root. DAN Anda pikir saya tidak membuat executable dijalankan sebagai root sebagai read-only untuk mencegah seseorang menyalin file di atasnya? Jika Anda khawatir tentang hal itu, alih-alih menggunakan sudo Anda dapat mengatur agar check_openmanage dapat dieksekusi dengan sendirinya dan membiarkan siapa pun menjalankannya!
Evan Langlois
11

Jawaban singkat: jika Anda menggunakan plugin Bash, pastikan Anda memiliki shebang yang menyatakan penerjemah mana yang harus digunakan:#!/bin/bash


Saya menghadapi masalah yang sama dengan plugin Nagios yang saya tulis sendiri. Script berjalan seperti yang diharapkan ketika diluncurkan secara lokal, bahkan ketika berjalan sebagai pengguna nagiosmenggunakan pernyataan berikut:

$ sudo sudo -s -u nagios
$ /path/to/my/plugin.sh
STATUS: OK

Tetapi peluncuran jarak jauh menggunakan NRPE dari server Nagios3 tidak berhasil:

$ /usr/lib/nagios/plugins/check_nrpe -H my-nagios-client -c my_plugin
NRPE: Unable to read output

Saya akhirnya menyelesaikan kasus ini dengan menambahkan shebang dalam skrip saya, karena menjalankan skrip melalui NRPE tidak menggunakan penerjemah yang sama seperti saat menjalankan sudo sudo -s -u nagios.

Mickaël Le Baillif
sumber
Punya masalah ini saat menggunakan plugin nagios script ruby ​​dengan rbenv. Perbaiki adalah membuat skrip pembungkus dengan#!/bin/bash -el eval "$(rbenv init -)" /usr/lib/nagios/plugins/check_something $@
TrinitronX
1
jawaban yang luar biasa! sudo -s -u nagios memungkinkan saya untuk melihat mengapa nagios tidak dapat mengembalikan output dari plugin tertentu. Terima kasih banyak!
ufk
6

Dalam kasus saya masalahnya sederhana - pengguna nagios tidak dapat menjalankan skrip. Setelah chmod mulai bekerja. Sudo tidak perlu. Itu bahkan jahat :)

bluszcz
sumber
1
Jawaban sebenarnya adalah ini. Nagios tidak dapat menjalankan skrip, baik karena izin yang buruk, skrip salah eja, atau skrip tidak ada di sana.
droope
5

check_nrpe mendapatkan 'NRPE: Tidak dapat membaca keluaran' meskipun cek bekerja secara lokal karena plugin yang saya gunakan tidak bekerja dengan baik dengan SELinux. Nonaktifkan dan pastikan untuk menghapus konteks file:

$ ls -l check_om_storage
-r-xr-xr--. 1 root nrpe 3808 Feb 27 17:54 check_om_chassis
$ setfattr -x security.selinux check_om_storage
$ ls -l check_om_chassis 
-r-xr-xr-- 1 root nrpe 3808 Feb 27 17:54 check_om_chassis
Lab AX
sumber
sementara menonaktifkan selinux umumnya mungkin bukan ide yang baik untuk menguji ini masih tetap valid.
Dennis Nolte
4

Periksa jalur, izin, selinux, iptables.

Milik saya adalah masalah jalur di klien: nrpe.cfg, periksa jalur perintah ke nama plugin check_ *. Ini dapat membingungkan, (lib / local) (libexec / plugins) sebagai nama path. Saya keliru menarik dan meletakkan path dari file nrpe cfg yang sudah dikomentari sebelumnya untuk membuat perintah. Instal make atau yum plugin install meletakkan ini di direktori difft.

commaneted: / usr / local / nagios / libexec / check_disk

melawan

realpath: / usr / lib / nagios / plugins / check_disk

Dari server saya bisa mengkonfirmasi itu bukan masalah firewall, bisa telnet ke port 5666, bisa menjalankan check_nrpe selimut dan mendapatkan status sebagai nilai kembali. Bisa menjalankan perintah secara lokal tetapi nrpe memiliki jalur yang salah pada klien di nrpe.cfg.

Halo Dunia
sumber
4

Dalam kasus saya, hanya satu plugin gagal sementara beberapa lainnya berfungsi dengan baik. Ternyata menjadi masalah LOCALE.

Plugin itu check_mem.shdan itu dilakukan grep untuk Memdalam output dari free. Tetapi seluruh sistem LOCALE kembali Speicher(Jerman) Mem, jadi semua nilai yang diterima adalah string kosong.

Buru-buru
sumber
2
Terburu-buru, selamat datang di SF! Ini adalah jawaban pertama yang sangat bagus, menurut saya: singkat, to the point, dan itu menambahkan sesuatu yang baru pada kumpulan jawaban yang sudah ada di sini. +1 dari saya, dan saya berharap untuk membaca lebih banyak jawaban seperti itu dari Anda di masa depan (saya harap Anda akan memaafkan suntingan format kecil saya).
MadHatter mendukung Monica
2

Ini adalah masalah izin, cukup berikan eksekusi skrip dan itu akan beres:

berikut sebuah contoh: Sebelum / Remote host :

[root@puppet1 nrpe.d]# ls -l /usr/lib/nagios/plugins/check_mem.sh
-rwxr--r-- 1 root root 1598 Jul  7 10:55 /usr/lib/nagios/plugins/check_mem.sh

Server NRPE :

[root plugins]# ./check_nrpe -H 172.19.9.200 -c check_mem_vb
NRPE: Unable to read output

Setelah: Remote Host :

[root@puppet1 plugins]# chmod o+x /usr/lib/nagios/plugins/check_mem.sh

[root plugins]# ./check_nrpe -H 172.19.9.200 -c check_mem_vb
Memory: OK Total: 1980 MB - Used: 139 MB - 6% used|Total=2076479488;;;Used=145076224;;;Cache=1528111104;;Buffer=211890176;;;

Masalah terpecahkan.

Youssef ASEBRIY
sumber
1
Jawaban yang bagus, tetapi juga baik untuk dicatat bahwa mengizinkan semua pengguna untuk menjalankan check_nrpe, seperti yang dilakukan oleh chmod o + x, bisa menjadi risiko keamanan potensial, tergantung pada bagaimana sistem dikonfigurasikan / diakses / digunakan.
Australia
1

Dalam kasus saya file log yang dipantau dimiliki oleh root: adm, jadi menambahkan pengguna nagios ke grup admin membuat perintah check_log berhasil, tetapi hanya ketika dieksekusi langsung pada host yang dipantau. Itu terus gagal menggunakan check_nrpe di server Nagios sampai saya me-restart layanan nagios-nrpe-server pada host yang dipantau, misalnya

service nagios-nrpe-server restart

Jadi rupanya memulai kembali layanan diperlukan untuk membuat perubahan izin berlaku untuk NRPE, tapi butuh beberapa saat untuk mencari tahu.

Tony
sumber
1

Dalam hal plugin NRPE khusus, pastikan untuk mencetak beberapa output bersama dengan nilai keluar. Jika tidak ada output dari skrip NRPE akan mengeluh mengatakan "NRPE tidak dapat membaca output" . Anda dapat mengaktifkan debugging di nrpe.cfg dan mengamati kesalahan ini.

Karthik
sumber
1

Dalam kasus saya masalahnya adalah selinux terkait (menjalankan RHEL 6.5, selinux diatur ke menegakkan).

Menginstal nagios-plugins- * via yum akan membuat file plugin Anda di / usr / lib64 / nagios / plugins. Jika Anda memeriksa fcontext pada file-file plugin tersebut (ls -lZ), Anda akan melihat file-file tersebut memiliki tipe konteks yang diatur ke "nagios_system_plugin_exec_t", yang merupakan tipe konteks yang diharapkan check_nrpe.

Dalam kasus saya, saya telah membuat skrip khusus "check_mem.sh" menggunakan "vi". File yang dihasilkan memiliki tipe konteks diatur ke "lib_t". Ini menyebabkan nrpe mengeluarkan "NRPE: Tidak dapat membaca keluaran".

Mengubah konteks file ke "nagios_system_plugin_exec_t" memecahkan masalah:

chcon -t nagios_system_plugin_exec_t /usr/lib64/nagios/plugins/check_mem.sh

Pemecahan masalah selinux yang biasa akan mengarahkan saya ke masalah ini juga (memeriksa /var/log/audit/audit.log), tapi itu tentu saja hal terakhir yang saya pikirkan

Sunting: chcon hanya sementara mengubah konteks. Untuk mengubahnya terus-menerus gunakan semanage fcontext -a -t nagios_system_plugin_exec_t /usr/lib64/nagios/plugins/check_mem.sh restorecon -vF /usr/lib64/nagios/plugins/check_mem.sh

Alexandru Todicescu
sumber
0

Bisa jadi Anda belum menginstal plugin Nagios Anda, NRPE tidak dapat menemukannya, atau mengaksesnya.

Saya tidak pernah harus menambahkan perintah saya ke Sudoers. Pastikan perintah dimiliki oleh pengguna Nagios dan dapat dibaca.

Daniel Baker
sumber
0

Saya pikir Anda harus menambahkan plugin di direktori lokal Anda /usr/lib64/nagios/plugins/*. Saya memiliki masalah yang sama seperti Anda dan saya dapat menyelesaikannya dengan solusi ini.

Tarik Nasser
sumber
0

Saya punya masalah yang Anda tulis. Tes yang saya jalankan adalah dari perl. Masukkan baris ini ke dalam file /etc/nagios/nrpe.cfguntuk membuatnya berfungsi.

command [check_memory] = /usr/bin/perl /usr/lib64/nagios/plugins/check_memory -w 75-c 90 
pengguna224319
sumber
0

Ada artikel yang sangat bagus yang mencakup seluruh instalasi dan konfigurasi agen NRPE dengan banyak contoh check_commands, saya menggunakan artikel ini kapan pun saya perlu menginstal NRPE pada server baru. Lebih dari itu, di akhir halaman Anda dapat menemukan skrip keren yang secara otomatis menginstal dan mengkonfigurasi NRPE untuk Anda (berdasarkan variabel yang Anda atur), artikel tersebut dapat ditemukan: Di sini

Itai Ganot
sumber
Tautan telah diperbarui
Itai Ganot
0

Ini biasanya terjadi ketika server NRPE dimulai dengan pengguna nrpe, bukan nagios.

Mengubah nrpe_usernilai menjadi nagios dalam /etc/nagios/nrpe.cfgfile harus menyelesaikan masalah Anda.

The nrpe_groupdapat diubah juga jika diperlukan.

Umut Uzun
sumber
0

Satu hal lagi yang perlu diperiksa adalah bahwa jika perintah Anda digunakan sudo -u <another user>untuk menjalankan perintah, libexecdirektori (dan direktori di atasnya) harus dapat dibaca oleh pengguna yang sudoed.

Sebagai contoh jika perintah Anda adalah:

command[check_tomcat]=sudo -u tomcat /usr/local/nagios/libexec/check_tomcat ...

Pengguna kucing jantan harus dapat mengakses file itu.

Salah satu cara untuk memperbaikinya adalah:

chmod 0775 /usr/local/nagios/
chmod 0755 /usr/local/nagios/libexec

Mengganti bagian terakhir dengan tempat tinggal executable Anda

Mitch
sumber
0

Saya memiliki masalah yang sama dan saya berhasil menyelesaikannya dengan mematikan proses nagios (pada mesin yang dipantau):

ps -ef | grep nagios
kill -9 [NagiosProcessNumber]
/etc/init.d/nagios-nrpe-server start

Semua baik-baik saja setelah itu.

pengguna428879
sumber
0

Baru saja mengalami masalah ini di FreeBSD. Setelah membenturkan kepala ke dinding selama satu jam, saya menyadari bahwa masalahnya /usr/local/nagios/etc/nrpe.cfgadalah menunjuk ke lokasi yang salah untuk sudo.

Untuk menemukan lokasi yang benar untuk diarahkan untuk menjalankan perintah sudo:

# whereis sudo

Saya kemudian mengubah command_prefix di nrpe.cfg dari:

command_prefix=/usr/local/sudo

untuk:

command_prefix=/usr/local/bin/sudo

Kemudian berlari service nrpe restartdan masalahnya selesai.

Bisa jadi masalah serupa pada sistem operasi lain, hanya hal lain untuk memeriksa apakah Anda telah memeriksa semua masalah izin yang mungkin dan Anda masih mendapatkan masalah ini.

Graeme
sumber
-2

Saya punya masalah ini dan saya menyelesaikan menonaktifkan selinux

setenforce 0

Paulo Azedo
sumber
2
Selamat Datang di Kesalahan Server. Bisakah Anda memberikan penjelasan lebih rinci bagaimana / mengapa ini bekerja?
Saya katakan Reinstate Monica