Sensu邮件程序和管道

3
我正在从Nagios转移至Sensu,使用Chef自动化流程。除了邮件发送器或者说我已经缩小到"pipe"应该重定向检查的JSON输出到处理程序,它没有生效。当我使用时,一切都工作得很好。

{
  "handlers": {
    "email": {
      "type": "pipe",
      "command": "mail -s \"sensu alert\" alert@example.com",
      "severities": [
        "ok",
        "critical"
      ]
    }
  }
}

我收到了一封空白的电子邮件。当我使用 mailer.rb 处理程序时,根本没有收到任何电子邮件。我确保在 mailer.json 中包含了正确的邮件地址和发件人地址。从日志中可以看到处理程序和电子邮件参数的信息都是准确的。
因此,我得出结论称 "管道" 没有正常工作。有人能帮忙解决吗?我将不胜感激。我希望能有一个 Sensu 社区,但可能还太新以至于没有这样的社区存在。
6个回答

2
你可以编写自己的事件数据JSON,并通过以下方式将其传递给一个管道:
cat event.json | /opt/sensu/embedded/bin/ruby mailer.rb

从sensu-server.log获取event.json文件是最简单的方法。

2
关于 mailer.rb,你是否已经检查了服务器日志(默认在 /var/log/sensu/sensu-server.log)以查找错误?如果处理程序中有任何错误,它们将显示在这些日志中。
mailer.rb 需要几个 gem 才能运行。要查看是否使用了 sensu 的嵌入式 ruby,请检查 /etc/default/sensu 中的 EMBEDDED_RUBY。如果设置为 false,则需要确保系统 ruby 已安装所有这些 gem(sensu-handler、mail、timeout)。如果设置为 true,请执行相同的操作以使用 sensu 的嵌入式 ruby:
/opt/sensu/embedded/bin/gem list
确保 gem 已安装,然后重试,并检查 sensu-server.log 是否有错误。
如果您有更多问题,实际上有一个社区 - 在 Freenode 上查看 #sensu。

1

要使用 mailer.rb,您需要拥有自己的邮件服务器!如果您将发布 sensu 服务器日志,我认为我可以帮助您。


0

我已经进行了一些测试,发现使用GNU mail/mailx(假设您正在使用Ubuntu或其他类似系统)时,邮件管道不起作用

有两个解决方案:

1)安装BSD邮件:

sudo apt-get install bsd-mailx

2) 或者稍微修改一下命令,让邮件从标准输入读取,你需要做的是:

{
  "handlers": {
    "email": {
      "type": "pipe",
      "command": " echo $(cat) > /tmp/mail.txt;  mail -s \"sensu alert\" alert@example.com < /tmp/mail.txt"
    }
  }
}

通常的想法是在脚本语言中从stdin读取事件json,然后提取您要发送的event.json的部分。以上内容将通过电子邮件发送整个json文件。


0

您可以使用Sensu邮件处理程序。请按照以下步骤进行设置:

  1. sensu-install -p sensu-plugins-mailer
  2. apt-get install postifx
  3. /etc/init.d/postfix start
  4. cd /etc/sensu/conf.d/

当我们安装此插件时,将获得3个Ruby文件。

这次我们正在使用此文件:handler-mailer.rb

首先,我们需要在此位置 /etc/sensu/conf.d/ 中创建处理程序文件:

  1. vim handler-mailer.json

    { "mailer": { "admin_gui": "http://127.0.0.1:3000/", "mail_from": "localhost", "mail_to": ["yourmailid-1","yourmailid-2"], "smtp_address": "localhost", "smtp_port": "25" } }

现在,我们需要在此位置 /etc/sensu/conf.d/ 中创建一个邮件处理程序文件:

  • { "handlers": { "mymailer": { "type": "pipe", "command": "/opt/sensu/embedded/bin/handler-mailer.rb", "severities": [ "critical", "unknown" ] } } }

  • 在上述文件中,处理程序名称为 mymailer,我们需要在检查中使用此处理程序名称。


    0

    使用 bin/handler-mailer-mailgun.rbbin/handler-mailer-ses.rbbin/handler-mailer.rb

    示例:

    echo '{
    "id": "ef6b87d2-1f89-439f-8bea-33881436ab90",
    "action": "create",
    "timestamp": 1460172826,
    "occurrences": 2,
    "check": {
      "type": "standard",
      "total_state_change": 11,
      "history": ["0", "0", "1", "1", "2", "2"],
      "status": 2,
      "output": "No keepalive sent from client for 230 seconds (>=180)",
      "executed": 1460172826,
      "issued": 1460172826,
      "name": "keepalive",
      "thresholds": {
        "critical": 180,
        "warning": 120
      }
    },
    "client": {
      "timestamp": 1460172596,
      "version": "1.0.0",
      "socket": {
        "port": 3030,
        "bind": "127.0.0.1"
      },
      "subscriptions": [
        "production"
      ],
      "environment": "development",
      "address": "127.0.0.1",
      "name": "client-01"
    } }' | /opt/sensu/embedded/bin/handler-mailer-mailgun.rb
    

    输出:

    mail -- sent alert for client-01/keepalive to your.email@example.com
    

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接