Docs » Splunk On-Callインテグレーション » Splunk On-CallのSensuインテグレーション

Splunk On-CallのSensuインテグレーション 🔗

Sensuとのインテグレーションでは、専用のSensuエンドポイントキーを使用して、Splunk On-Callタイムラインにアラートを送信します。以下の手順には、必要な部分とSensuの関連ドキュメントが含まれています。

要件 🔗

このインテグレーションは以下のバージョンのSplunk On-Callと互換性があります:

  • Starter

  • Growth

  • エンタープライズ

Splunk On-Callの設定 🔗

IntegrationsSensu を選択し、Enable Integration を選択してAPIエンドポイントURLを生成します。サービスAPIエンドポイントをクリップボードにコピーし、APIエンドポイントの末尾の $routing_key を有効なルーティングキーに置き換えます。Splunk On-Callでルーティングキーを作成する を参照してください。

Splunk On-Call.jsonファイルを編集する 🔗

以下の設定ファイルの18行目を編集し、コピーしたサービスAPIエンドポイントが含まれるようにします:

{
"handlers": {
   "victorops": {
      "type": "pipe",
   "command": "/etc/sensu/handlers/victorops.rb"
   }
},
"checks": {
   "tmp_check": {
      "description": "check that /tmp exists ",
      "handler": "victorops",
      "command": "ls /tmp",
      "interval": 30,
      "subscribers": [ "all_servers" ]
   }
},
"victorops" : {
   "api_url": "<integration_service_api_endpoint>",
   "routing_key" : "everyone"
   }
}

このファイルをetc/sensu/conf.dディレクトリに置きます。

Splunk On-Callハンドラをダウンロードして、インテグレーションを完了します。

Splunk On-Callハンドラ 🔗

#!/usr/bin/env ruby
#!/usr/bin/env ruby
# This handler creates and resolves victorops incidents
#
# Released under the same terms as Sensu (the MIT license); see LICENSE
# for details.
# Downloaded from:
# https://help.victorops.com/knowledge-base/victorops-sensu-integration/#

require 'rubygems' if RUBY_VERSION < '1.9.0'
require 'sensu-handler'
require 'uri'
require 'net/http'
require 'net/https'
require 'json'

class VictorOps < Sensu::Handler
def handle
   config = settings['victorops']
   incident_key = @event['client']['name'] + '/' + @event['check']['name']

   description = @event['check']['notification']
   description ||= [@event['client']['name'], @event['check']['name'], @event['check']['output']].join(' : ')
   host = @event['client']['name']
   entity_id = incident_key
   state_message  = description
   begin
   Timeout.timeout(10) do

      case @event['action']
      when 'create'
         case @event['check']['status']
         when 1
         message_type = 'WARNING'
         else
         message_type = 'CRITICAL'
         end
      when 'resolve'
         message_type = 'RECOVERY'
      end

      payload = Hash.new
      payload[:message_type] = message_type
      payload[:state_message] = state_message.chomp
      payload[:entity_id] = entity_id
      payload[:host_name] = host
      payload[:monitoring_tool] = 'sensu'

      # Add in client data
      payload[:check] = @event['check']
      payload[:client] = @event['client']

      uri   = URI("#{config['api_url'].chomp('/')}/#{config['routing_key']}")
      https = Net::HTTP.new(uri.host, uri.port)

      https.use_ssl = true

      request      = Net::HTTP::Post.new(uri.path)
      request.body = payload.to_json
      response     = https.request(request)

      if response.code == '200'
         puts "victorops -- #{@event['action'].capitalize}'d incident -- #{incident_key}"
      else
         puts "victorops -- failed to #{@event['action']} incident -- #{incident_key}"
         puts "victorops -- response: #{response.inspect}"
      end
   end
   rescue Timeout::Error
   puts 'victorops -- timed out while attempting to ' + @event['action'] + ' a incident -- ' + incident_key
   end
end
end

詳細については、Sensu documentation on Handlers を参照してください。

このページは 2024年04月29日 に最終更新されました。