Nagios
Nagios 通知執行的腳本不發送郵件
我正在執行一個新的 nagios(伺服器 3.5.1)系統。所有檢查工作正常
[1461932408] SERVICE NOTIFICATION: nagiosadmin;appserver;Swapfile;CRITICAL;notify-service-by-email;CHECK_NRPE: Socket timeout after 10 seconds. [1461932418] SERVICE NOTIFICATION: nagiosadmin;adminserver;Disk;CRITICAL;notify-service-by-email;CHECK_NRPE: Socket timeout after 10 seconds.
我不能使用郵件,因為郵件伺服器是交換伺服器。所以我將命令更改為以下內容:
# 'notify-host-by-email' command definition define command { command_name notify-host-by-email command_line /usr/bin/printf "%b" "Notification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/local/bin/mailsend.rb "***** Nagios Alert*****" } # 'notify-service-by-email' command definition define command { command_name notify-service-by-email command_line /usr/bin/printf "%b" "Notification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/local/bin/mailsend.rb "***** Nagios Alert*****" }
mailsend.rb
是一個 ruby 腳本,它接受參數並連接到伺服器。如果我直接呼叫它,帶有參數,所以我會收到一封電子郵件。我的聯繫人如下所示:
define contact{ contact_name nagiosadmin ; Short name of user use generic-contact ; Inherit default values from generic-contact template (defined above) alias Nagios Admin ; Full name of user service_notification_period 24x7 host_notification_period 24x7 service_notification_options w,u,c,r host_notification_options d,r service_notification_commands notify-service-by-email host_notification_commands notify-host-by-email email idontcare@examnple.org ; } define contactgroup{ contactgroup_name admins alias Nagios Administrators members nagiosadmin }
看起來命令沒有被 nagios 呼叫。腳本的權限為 755。“觸摸文件”等其他命令也不起作用。
調試模式的輸出:
[1461935539.111737] [032.2] [pid=8391] ** Notifying contact 'nagiosadmin' [1461935539.111762] [032.2] [pid=8391] Raw notification command: /usr/local/bin/mailsend.rb "***** Nagios Alert*****" "Notification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$" [1461935539.111799] [032.2] [pid=8391] Processed notification command: /usr/local/bin/mailsend.rb "***** Nagios Alert*****" "Notification Type: PROBLEM\nHost: mysqlserver\nState: UP\nAddress: 10.130.1.22\nInfo: PING OK - Packet loss = 0%, RTA = 0.33 ms\n\nDate/Time: Fri Apr 29 15:12:19 CEST 2016"
更新:
如果我用原始行替換腳本,我將收到郵件
/var/mail
。使用者 nagios 可以執行該腳本。我使用使用者 nagios 登錄並手動執行命令。
update2(來自評論的附加資訊)
ruby 腳本正在使用
#!/usr/bin/env ruby
並且通過從命令行呼叫它可以正常工作。如果我使用預設的 /usr/bin/mail 比我收到一封郵件到伺服器上的本地使用者帳戶。ruby 腳本正在連接到伺服器,並使用不同的郵件憑據發送郵件。這適用於使用者 nagios有人有想法嗎?
更新3:(發送郵件的ruby腳本)
#!/usr/bin/env ruby require 'net/smtp' require 'logger' require 'rubygems' require 'net-ldap' require '/home/user/lib/ntlm/smtp' logger = Logger.new('/var/log/sendEmail') server = '10.130.1.3' port = 25 # or 25 - double check with your provider username = 'user' password = '****' fromAddress = 'existingmail@existingdomain.de' toAddress = 'me@example.com' subject = ARGV[0] message = ARGV[1] logger.info subject logger.info message message_body = <<END_OF_EMAIL From: Nagios <#{fromAddress}> To: Logs <#{toAddress}> Subject: #{subject} #{message} END_OF_EMAIL smtp = Net::SMTP.new(server, port) smtp.start(server,username,password, :ntlm) smtp.send_message(message_body, fromAddress, toAddress)
更新 4
nagios@background-server:/usr/local/bin$ whoami nagios nagios@background-server:/usr/local/bin$ ./mailsend.rb nagios@background-server:/usr/local/bin$ nagios@background-server:/usr/local/bin$ ls -la mailsend.rb -rwxr-xr-x 1 nagios nagios 811 May 2 09:05 mailsend.rb
所以,首先感謝所有幫助過我的人。
這不是 nagios 的問題。
概括:
- nagios 檢查每個服務工作正常郵件腳本發送
- 通過控制台發送郵件(帶或不帶參數)
- nagios 觸發了事件並很好地執行了郵件腳本
這真是令人困惑。在我絕望中,我在郵件腳本中添加了一個全域異常處理程序,它將異常結果寫入文件。在那裡我發現了一個錯誤條目,該條目僅在從 nagios 執行腳本時拋出。
該腳本現在沒有找到所需的文件,因為 LOAD_PATH 不正確。
解決方案:
所以在要求之前:
require 'ntlm/smtp'
我通過以下方式手動添加了文件的路徑:
$:.unshift File.dirname('/home/application/my_application/current/lib/ntlm')
現在,通過從 nagios 執行郵件腳本可以正常工作。