NRPE không thể đọc đầu ra, nhưng tại sao?


27

Tôi gặp vấn đề này với NRPE, tất cả những thứ tôi tìm thấy cho đến nay trên mạng dường như chỉ cho tôi những thứ tôi đã thử.

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

cho

NRPE v2.12

như mong đợi.

Chạy lệnh bằng tay (như được định nghĩa trong nrpe.cfg trên "nrpeclient", sẽ cho phản hồi mong đợi

nrpe.cfg:

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

"Expected response"

Nhưng nếu tôi cố chạy lệnh từ máy chủ Nagios, tôi sẽ nhận được như sau:

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

Bất cứ ai có thể nghĩ về bất cứ nơi nào khác tôi có thể đã phạm sai lầm với điều này? Tôi đã làm điều tương tự trên nhiều máy chủ khác mà không có vấn đề gì. Sự khác biệt duy nhất tôi có thể nghĩ đến với điều này là hộp này dựa trên RHEL 5, trong khi các hộp khác dựa trên RHEL 4.

Hai bit trên mà tôi đã kiểm tra là những gì hầu hết mọi người dường như đề xuất khi mọi người gặp vấn đề này.

Tôi nên đề cập rằng tôi gặp một lỗi lạ trong nhật ký khi tôi khởi động lại 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

Mặc dù, nó chỉ đơn giản là đọc /usr/local/nagios/etc/nrpe.cfgtập tin đó để hiểu nội dung mà nó đang nói thêm.



Hãy giữ cái này, vì cái kia đã bị đóng.
Bart De Vos

Ngoài ra, đảm bảo rằng STDOUT thực sự được tuôn ra.

Câu trả lời:


35

Bạn có một vấn đề quyền.

Thay đổi lệnh thành:

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

(thêm sudo)

Sau đó, thêm người dùng nagios vào sudoers:

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

Hoặc bạn chỉ có thể chmod tập tin ... Điều đó cũng hoạt động.

Nếu bạn đang sử dụng CentOS, Red Hat, Khoa học hoặc Fedora, hãy đảm bảo tắt Defaults requirettytrong tệp sudoers.


1
@Bart De Vos nhưng câu trả lời bạn đã thêm sẽ tạo ra lỗ hổng bảo mật> thêm một cái gì đó vào tệp sudoers mở ra cho bạn một rủi ro bảo mật tiềm ẩn. tức là nếu thông qua bộ đệm tràn, ai đó có thể thả một tệp có cùng tên vào cùng một vị trí, họ có thể thực thi nó mà không cần biết mật khẩu gốc và giành quyền kiểm soát hộp: S Không có cách nào để đặt chữ ký (SHA1 hoặc MD5) của ứng dụng trong tệp sudoers để ngăn chặn kiểu tấn công đó. tức là tệp được chèn sẽ không có cùng chữ ký và do đó không thực thi. [Đọc bình luận đầu tiên ở đây] ( crashatau.blogspot.co
Ahmad Hajjar

1
@ X-Ware: Mặc dù điều này là đúng, nhưng khả năng tràn bộ đệm có thể bị lạm dụng ở đây là rất mong manh. Tuy nhiên, để ngăn chặn điều đó xảy ra, bạn nên sử dụng apparmor / SELinux. Đó là lý do tại sao những điều này tồn tại.
Bart De Vos

Tôi đoán các distro khác nhau thậm chí có những người dùng khác nhau, trong trường hợp của tôi, người dùng để thêm vào visudo không phải là nagios. Tôi vẫn theo dõi giải pháp của Bart De Vos, tuy nhiên bạn có thể thấy người dùng nào đang cố truy cập lệnh nrpe bằng cách xem nhật ký truy cập / var / log / safe. Jul 24 15:39:09 tên máy chủ sudo: nrpe: người dùng KHÔNG trong sudoers; TTY = chưa biết; NKT = /; NGƯỜI DÙNG = root; COMMAND = / usr / lib64 / nagios / plugins / check_disk -w 20% -c 10% -p / dev / mapper / vg_uxp-lv_root

@AhmadHajjar Bạn có nghiêm túc không? Bạn nghĩ rằng ai đó sẽ hack nagios (một hệ thống đã 20 năm tuổi) và sử dụng người dùng đó để thực thi một tệp có quyền root. VÀ bạn nghĩ rằng tôi đã không làm cho tệp thực thi được chạy dưới dạng root dưới dạng chỉ đọc để ngăn người khác sao chép tệp qua nó? Nếu bạn lo lắng về điều đó, thay vì sử dụng sudo, bạn có thể thiết lập check_openmanage thực thi chính nó và cho phép bất cứ ai chạy nó!
Evan Langlois

11

Câu trả lời ngắn: nếu bạn đang sử dụng plugin Bash, hãy đảm bảo rằng bạn có một shebang cho biết nên sử dụng trình thông dịch nào:#!/bin/bash


Tôi đã phải đối mặt với cùng một vấn đề với một plugin Nagios do tôi tự viết. Tập lệnh đã chạy như mong đợi khi được khởi chạy cục bộ, ngay cả khi chạy với tư cách người dùng nagiossử dụng câu lệnh sau:

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

Nhưng khởi chạy từ xa bằng NRPE từ máy chủ Nagios3 đã không thành công:

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

Cuối cùng tôi đã giải quyết trường hợp này bằng cách thêm một shebang trong tập lệnh của mình, vì có vẻ như việc chạy tập lệnh thông qua NRPE đã không sử dụng trình thông dịch giống như khi chạy qua sudo sudo -s -u nagios.


Có vấn đề này khi sử dụng plugin nagios script ruby ​​với rbenv. Khắc phục là tạo tập lệnh bao bọc với#!/bin/bash -el eval "$(rbenv init -)" /usr/lib/nagios/plugins/check_something $@
TrinitronX

1
câu trả lời tuyệt vời! sudo -s -u nagios cho phép tôi xem tại sao nagios không thể trả lại đầu ra từ một plugin cụ thể. cảm ơn bạn rất nhiều!
ufk

6

Trong trường hợp của tôi, vấn đề chỉ đơn giản là - nagios người dùng không thể thực thi tập lệnh. Sau khi chmod nó bắt đầu làm việc. Sudo là không cần thiết. Nó thậm chí xấu xa :)


1
Câu trả lời thực sự là đây. Nagios đã không thể thực thi tập lệnh, do các điều khoản xấu, tập lệnh bị sai, hoặc tập lệnh không có ở đó.
droope

5

check_nrpe đã nhận được 'NRPE: Không thể đọc đầu ra' mặc dù kiểm tra hoạt động cục bộ vì plugin tôi đang sử dụng không hoạt động tốt với SELinux. Vô hiệu hóa nó và đảm bảo xóa bối cảnh của tệp:

$ 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

trong khi vô hiệu hóa selinux thường có thể không phải là một ý tưởng tốt để kiểm tra thì điều này vẫn còn hiệu lực.
Dennis Nolte

4

Kiểm tra đường dẫn, quyền, selinux, iptables.

Của tôi là một vấn đề đường dẫn trong máy khách: nrpe.cfg, kiểm tra kỹ đường dẫn lệnh đến tên plugin check_ *. Chúng có thể gây nhầm lẫn, (lib / local) (libexec / plugin) làm tên đường dẫn. Tôi đã nhầm lẫn kéo mạnh và đặt các đường dẫn từ tệp ngpe cfg đã đóng gói sẵn để thực hiện các lệnh. Việc cài đặt plugin hoặc cài đặt yum đặt những thứ này trong một thư mục khác nhau.

được viết tắt: / usr / local / nagios / libexec / check_disk

đấu với

realpath: / usr / lib / nagios / plugin / check_disk

Từ máy chủ, tôi có thể xác nhận đó không phải là sự cố tường lửa, có thể telnet đến cổng 5666, có thể chạy một check_nrpe chăn và lấy trạng thái làm giá trị trả về. Có thể chạy các lệnh cục bộ nhưng nrpe có đường dẫn sai trên máy khách trong nrpe.cfg.


4

Trong trường hợp của tôi, chỉ có một plugin thất bại trong khi một số plugin khác hoạt động tốt. Nó hóa ra là một vấn đề ĐỊA PHƯƠNG.

Các plugin là check_mem.shvà nó đã thực hiện một grep cho Memđầu ra của free. Nhưng Speicherthay vào đó Mem, hệ thống LOCALE trả về (tiếng Đức) thay vì vậy, vì vậy tất cả các giá trị nhận được là các chuỗi rỗng.


2
Nhanh lên, chào mừng bạn đến với SF! Đây là một câu trả lời đầu tiên tuyệt vời, theo ý kiến ​​của tôi: ngắn gọn, và nó bổ sung một cái gì đó mới vào bộ sưu tập các câu trả lời đã có ở đây. +1 từ tôi và tôi hy vọng sẽ đọc được nhiều câu trả lời như vậy từ bạn trong tương lai (tôi hy vọng bạn sẽ tha thứ cho chỉnh sửa định dạng nhỏ của tôi).
MadHatter hỗ trợ Monica

2

Đây là một vấn đề về quyền, chỉ cần cung cấp cho thực thi tập lệnh đúng và nó sẽ ổn:

đây là một ví dụ: Before / 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

Máy chủ NRPE :

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

Sau: Máy chủ từ xa :

[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;;;

Giải quyết vấn đề.


1
Câu trả lời tốt, nhưng cũng tốt để lưu ý rằng việc cho phép tất cả người dùng chạy check_nrpe, như chmod o + x, có thể là một rủi ro bảo mật tiềm ẩn, tùy thuộc vào cách hệ thống được định cấu hình / truy cập / sử dụng.
austinian

1

Trong trường hợp của tôi, tệp nhật ký đang được giám sát thuộc sở hữu của root: adm, do đó, việc thêm người dùng nagios vào nhóm adm đã khiến lệnh check_log thành công, nhưng chỉ khi được thực thi trực tiếp trên các máy chủ được giám sát. Nó tiếp tục thất bại khi sử dụng check_nrpe trên máy chủ Nagios cho đến khi tôi khởi động lại dịch vụ máy chủ nagios-nrpe trên các máy chủ được giám sát, vd

service nagios-nrpe-server restart

Vì vậy, rõ ràng việc khởi động lại dịch vụ là cần thiết để thay đổi quyền có hiệu lực đối với NRPE, nhưng tôi phải mất một thời gian để tìm ra điều này.


1

Trong trường hợp các plugin NRPE tùy chỉnh, hãy đảm bảo in một số đầu ra cùng với giá trị thoát. Nếu không có đầu ra từ tập lệnh NRPE sẽ khiếu nại rằng "NRPE không thể đọc đầu ra" . Bạn có thể bật gỡ lỗi trong nrpe.cfg và quan sát lỗi này.


1

Trong trường hợp của tôi, các vấn đề liên quan đến selinux (chạy RHEL 6.5, selinux được đặt thành thi hành).

Cài đặt nagios-plugins- * qua yum sẽ tạo các tệp plugin của bạn trong / usr / lib64 / nagios / plugin. Nếu bạn kiểm tra fcontext trên các tệp plugin đó (ls -lZ), bạn sẽ thấy các tệp có loại ngữ cảnh được đặt thành "nagios_system_plugin_exec_t", đây là loại ngữ cảnh mà check_nrpe mong đợi.

Trong trường hợp của tôi, tôi đã tạo một tập lệnh tùy chỉnh "check_mem.sh" bằng cách sử dụng "vi". Tệp kết quả có loại ngữ cảnh được đặt thành "lib_t". Điều này đã khiến nrpe xuất ra "NRPE: Không thể đọc đầu ra".

Thay đổi bối cảnh tệp thành "nagios_system_plugin_exec_t" đã giải quyết vấn đề:

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

Việc xử lý sự cố selinux thông thường cũng sẽ chỉ cho tôi vấn đề này (kiểm tra /var/log/audit/audit.log), nhưng đó là điều cuối cùng tôi nghĩ đến

Chỉnh sửa: chcon chỉ tạm thời thay đổi bối cảnh. Để thay đổi nó liên tục sử dụng 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


0

Có thể là bạn chưa cài đặt plugin Nagios của mình, NRPE không thể tìm thấy chúng hoặc truy cập chúng.

Tôi chưa bao giờ phải thêm các lệnh của mình vào Sudoers. Đảm bảo các lệnh được sở hữu bởi người dùng Nagios và chúng có thể đọc được.


0

Tôi nghĩ bạn phải thêm các plugin trong thư mục địa phương của bạn /usr/lib64/nagios/plugins/*. Tôi đã có cùng một vấn đề như bạn và tôi có thể giải quyết nó bằng giải pháp này.


0

Tôi đã có vấn đề mà bạn viết. Bài kiểm tra tôi đã chạy là từ perl. Đặt dòng này vào tập tin /etc/nagios/nrpe.cfgđể làm cho nó hoạt động.

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

0

Có một bài viết thực sự hay bao gồm toàn bộ cài đặt và cấu hình tác nhân NRPE với nhiều ví dụ check_commands, tôi sử dụng bài viết này khi tôi cần cài đặt NRPE trên máy chủ mới. Hơn thế nữa, ở cuối trang, bạn có thể tìm thấy một tập lệnh thú vị tự động cài đặt và định cấu hình NRPE cho bạn (dựa trên các biến bạn đặt), có thể tìm thấy bài viết: Tại đây


Liên kết đã được cập nhật
Itai Ganot

0

Điều này thường xảy ra khi máy chủ NRPE được khởi động với nrpe người dùng, thay vì nagios.

Thay đổi nrpe_usergiá trị thành nagios trong /etc/nagios/nrpe.cfgtệp sẽ giải quyết vấn đề của bạn.

nrpe_groupthể thay đổi quá nếu cần.


0

Một điều khác để kiểm tra là nếu lệnh của bạn đang sử dụng sudo -u <another user>để chạy lệnh, libexecthư mục (và thư mục phía trên nó) phải được đọc bởi người dùng bị sudo.

Ví dụ: nếu lệnh của bạn là:

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

Người dùng tomcat phải có thể truy cập tệp đó.

Một cách khắc phục điều này sẽ là:

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

Thay thế phần cuối cùng với bất cứ nơi nào thực thi của bạn sống


0

Tôi đã có cùng một vấn đề và tôi quản lý để giải quyết nó bằng cách giết quá trình nagios (trên máy được giám sát):

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

Tất cả đều ổn sau đó.


0

Chỉ có vấn đề này trên FreeBSD. Sau khi đập đầu vào tường trong một giờ, tôi nhận ra vấn đề là việc /usr/local/nagios/etc/nrpe.cfgchỉ vào vị trí sai cho sudo.

Để tìm vị trí chính xác để trỏ đến lệnh sudo chạy:

# whereis sudo

Sau đó tôi đã thay đổi lệnh_prefix trong nrpe.cfg từ:

command_prefix=/usr/local/sudo

đến:

command_prefix=/usr/local/bin/sudo

Sau đó chạy service nrpe restartvà vấn đề đã được giải quyết.

Có thể là một vấn đề tương tự trên các hệ điều hành khác, chỉ là một điều khác để kiểm tra xem bạn đã kiểm tra tất cả các vấn đề về quyền có thể khác hay chưa và bạn vẫn gặp phải sự cố này.



-2

Tôi gặp vấn đề này và tôi đã giải quyết việc vô hiệu hóa selinux

thiết lập lực lượng 0


2
Chào mừng bạn đến với Lỗi Máy chủ. Bạn có thể cung cấp thêm chi tiết giải thích làm thế nào / tại sao điều này hoạt động?
Tôi nói phục hồi Monica
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.