首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sensu处理程序通知插件如何确定其JSON配置文件的路径?

Sensu处理程序通知插件如何确定其JSON配置文件的路径?
EN

DevOps用户
提问于 2019-09-25 17:45:17
回答 1查看 208关注 0票数 2

所以,我们正在从斯拉克过渡到MSTeams。我的任务是更新我们的Sensu配置,以便将警报发送到MSTeams通道,而不是Slack通道。

/etc/sensu/conf.d/handlers.json中,Slack通知配置如下:

代码语言:javascript
复制
...
"slack" : {
    "type": "pipe",
    "command": "handler-slack.rb -j slack",
    "filters": [
        "occurrences"
    ]
},
....

-j slack告诉处理程序加载位于/etc/sensu/conf.d/slack.d/slack.json的JSON文件。

团队处理程序的配置类似于:

代码语言:javascript
复制
...
"microsoft-teams" : {
    "type": "pipe",
    "command": "handler-microsoft-teams.rb -j microsoft-teams",
    "filters": [
        "occurrences"
    ]
},
...

但是,当Sensu试图将通知传递给团队处理程序时,我会得到一个错误,导致我相信JSON配置没有加载:

代码语言:javascript
复制
/opt/sensu/embedded/lib/ruby/gems/2.4.0/gems/sensu-plugins-microsoft-teams-2.0.0/bin/handler-microsoft-teams.rb:104:in `get_setting': undefined method `[]' for nil:NilClass (NoMethodError)
    from /opt/sensu/embedded/lib/ruby/gems/2.4.0/gems/sensu-plugins-microsoft-teams-2.0.0/bin/handler-microsoft-teams.rb:28:in `payload_template'
    from /opt/sensu/embedded/lib/ruby/gems/2.4.0/gems/sensu-plugins-microsoft-teams-2.0.0/bin/handler-microsoft-teams.rb:108:in `handle'
    from /opt/sensu/embedded/lib/ruby/gems/2.4.0/gems/sensu-plugin-2.7.1/lib/sensu-handler.rb:89:in `block in <class:Handler>'

payload_template是第一个尝试加载处理程序的设置-Microsoft-Teams.rb。它没有在我的JSON中指定,代码是作为可选的来编写的。

因此,我的问题是: Slack如何从传递给-j参数(slack)的字符串传递到路径/etc/sensu/conf.d/slack.d/slack.json?如何确定团队插件的等效路径魔法?我不知道这种魔力是否是Ruby (我不是专家)、Sensu、感觉插件或其他东西所固有的。我已经挖了很长一段时间了,现在我要空出来了。

(是的,我知道Sensu Go并希望升级;这在我目前的时间表上不是一个选项。)

EN

回答 1

DevOps用户

回答已采纳

发布于 2019-09-25 18:32:26

好吧,原来这不是我的问题,但我知道我问的问题的答案:

文件/opt/sensu/embedded/lib/ruby/gems/2.4.0/gems/sensu-plugins-microsoft-teams-2.0.0/bin/handler-microsoft-teams.rb定义了一个函数get_setting,如下所示:

代码语言:javascript
复制
def get_setting(name)
  settings[config[:json_config]][name]
end

config[:json_config]是与-j交换机一起传递的字符串。

转到config/opt/sensu/embedded/lib/ruby/gems/2.4.0/gems/sensu-plugin-2.7.1/lib/sensu-handler.rb文件需要sensu-plugin/utils,它定义了以下内容:

代码语言:javascript
复制
module Sensu
  module Plugin
    module Utils # rubocop:disable Metrics/ModuleLength
      def config_files
        if ENV['SENSU_LOADED_TEMPFILE'] && File.file?(ENV['SENSU_LOADED_TEMPFILE'])
          IO.read(ENV['SENSU_LOADED_TEMPFILE']).split(':')
        elsif ENV['SENSU_CONFIG_FILES']
          ENV['SENSU_CONFIG_FILES'].split(':')
        else
          ['/etc/sensu/config.json'] + Dir['/etc/sensu/conf.d/**/*.json']
        end
      end

      def load_config(filename)
        JSON.parse(File.open(filename, 'r').read)
      rescue
        {}
      end

      def settings
        @settings ||= config_files.map { |f| load_config(f) }.reduce { |a, b| deep_merge(a, b) }
      end
...

因此,settings将加载/etc/sensu/conf.d/下任何地方嵌套的所有JSON文件,并对它们进行深度合并。除此之外,路径与Sensu使用字符串slack加载它的能力无关;这是JSON有效负载中条目的名称。这种机制对于所有的Sensu配置来说都是通用的,而不仅仅是处理程序插件。文档在这里:https://docs.sensu.io/sensu-core/1.8/reference/configuration/

我查看了我的日志文件,它似乎确实找到并加载了我乐观地放置在/etc/sensu/conf.d/teams.d/下的文件,但它不起作用。

在找到这里记录的答案之前,我尝试将目录从teams.d重命名为microsoft-teams.d,并将从teamsmicrosoft-teams定义的配置对象重新命名。我不知道为什么会有任何效果,但现在起作用了。也许我在添加microsoft前缀的过程中无意中解决了一些胖手指或复制的问题。

票数 2
EN
页面原文内容由DevOps提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://devops.stackexchange.com/questions/9279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档