An open API service indexing awesome lists of open source software.

https://github.com/sensu-plugins/sensu-plugins-opsgenie

Sensu plugins for OpsGenie
https://github.com/sensu-plugins/sensu-plugins-opsgenie

sensu-handler sensu-plugins

Last synced: 7 months ago
JSON representation

Sensu plugins for OpsGenie

Awesome Lists containing this project

README

        

## Sensu-Plugins-opsgenie

[![Build Status](https://travis-ci.org/sensu-plugins/sensu-plugins-opsgenie.svg?branch=master)](https://travis-ci.org/sensu-plugins/sensu-plugins-opsgenie)
[![Gem Version](https://badge.fury.io/rb/sensu-plugins-opsgenie.svg)](http://badge.fury.io/rb/sensu-plugins-opsgenie)
[![Code Climate](https://codeclimate.com/github/sensu-plugins/sensu-plugins-opsgenie/badges/gpa.svg)](https://codeclimate.com/github/sensu-plugins/sensu-plugins-opsgenie)
[![Test Coverage](https://codeclimate.com/github/sensu-plugins/sensu-plugins-opsgenie/badges/coverage.svg)](https://codeclimate.com/github/sensu-plugins/sensu-plugins-opsgenie)
[![Dependency Status](https://gemnasium.com/sensu-plugins/sensu-plugins-opsgenie.svg)](https://gemnasium.com/sensu-plugins/sensu-plugins-opsgenie)

## Functionality

## Files
* `bin/handler-opsgenie.rb`
* `bin/check-opsgenie-heartbeat.rb`

## Usage

**`handler-opsgenie`**
```json
{
"opsgenie": {
"customerKey": "the-key",
"teams": [
{ "name": "the-team" },
{ "id": "4513b7ea-3b91-438f-b7e4-e3e54af9147c" }
],
"recipients": "the-recipients",
"source": "alert-source",
"overwrite_quiet_hours": true,
"tags": ["sensu"]
}
}
```

## Installation

[Installation and Setup](http://sensu-plugins.io/docs/installation_instructions.html)

## Configuration
To get this to work you need to specify a few different things. For a list of fields that are required/available look at the [sensu documentation](https://sensuapp.org/docs/0.25/enterprise/integrations/opsgenie.html). These files need to be on the server and the client boxes. Once there restart sensu-server and sensu-api.

- declare this as a handler: `/etc/sensu/conf.d/handler_opsgenie.json`
``` json
{
"handlers": {
"opsgenie": {
"type": "pipe",
"command": "/opt/sensu/embedded/bin/handler-opsgenie.rb"
}
},
"opsgenie": {
"customerKey": "YOUR-KEY-HERE"
}
}
```

- add it to the check: `/etc/sensu/conf.d/check_xxx.json`
``` json
{
"checks": {
"check_elastinats_is_running": {
"command": "/opt/sensu/embedded/bin/check-process.rb -p cron",
"interval": 60,
"handlers": [ "opsgenie" ],
"subscribers": [ "core" ]
}
}
}
```

- optionally add it to the default handler: `/etc/sensu/conf.d/default_handler.json`
``` json
{
"handlers": {
"default": {
"type": "set",
"handlers": [
"opsgenie"
]
}
}
}
```

## OpsGenie Alerts

How does the handler map the various Sensu values into the OpsGenie
[alerts and alert fields](https://docs.opsgenie.com/docs/alerts-and-alert-fields) created?

### Message

The OpsGenie _message_ alert field is comprised of the Sensu client name, and
the Sensu check name, _e.g._:
```
web01 : check_mysql_access
```

### Teams

The OpsGenie _team_ alert field uses the values in the Sensu check configuration
if any, otherwise it uses the value from the handler configuration.

### Recipients

The OpsGenie _recipients_ alert field uses the values in the Sensu check
configuration if any, otherwise it uses the value from the handler
configuration.

### Alias

The OpsGenie _alias_ alert is field is comprised of the Sensu client name,
and the Sensu check name to create a unique key, _e.g._:
```
web01:check_mysql_access
```
Note that this can be changed via configuration; see notes below.

### Entity

The OpsGenie _entity_ alert field uses the Sensu client name.

### Description

The OpsGenie _description_ alert field is populated with the Sensu check output.

### Priority

The OpsGenie _priority_ alert field is not explicitly set; OpsGenie will thus
assign the default priority of "P3" to the alert.

## Configuration Notes

### Per Check Attributes

#### `alias`

If the check definition uses the custom `alias` attribute, _e.g._:
```
{
"checks": {
"check_mysql_access": {
"opsgenie": {
"alias": "MyCustomAlias",

```
then the `handler-opsgenie.rb` handler will use that attribute value as the
OpsGenie event ID. This can be useful for alert deduplication; checks on
different clients for the same downstream resource can specify the same
`alias` attribute, so that multiple alerts for the same resource are
de-duplicated.

By default, `handler-opsgenie.rb` creates an event ID from the client name
and the check name. Thus:
```
{
"checks": {
"check_mysql_access": {
"command": "/opt/sensu/embedded/bin/check-database.rb -h mysqldb",
"interval": 60,
"handlers": [ "opsgenie" ],
"standalone": true
}
}
```
running on a client named `web01` will create an alert using an event ID of
`web01:check_mysql_access`. And on a client named `web02`, it would create an
alert with a _different_ event ID of `web02:check_mysql_access`, even though
the `mysqldb` server being checked is the same for these clients.

We can define a custom `alias` attribute in this check:
```
{
"checks": {
"check_mysql_access": {
"command": "/opt/sensu/embedded/bin/check-database.rb -h mysqldb",
"interval": 60,
"handlers": [ "opsgenie" ],
"standalone": true,

"opsgenie": {
"alias": "mysqldb"
}
}
}
```
And with this, running on multiple clients, any alerts would be generated
with the same event ID of `mysqldb`, by using that `alias` attribute as the
event ID.

#### `priority`

By default, an OpsGenie alert is created with a default [priority](https://docs.opsgenie.com/docs/priority-settings) value of "P3". The priority for a specific
check can be explicitly set using the custom `priority` attribute, _e.g._:
```
{
"checks": {
"check_mysql_access": {
"opsgenie": {
"priority": "P1",

```
The list of valid values, per [OpsGenie alert docs](https://docs.opsgenie.com/docs/alert-api#section-create-alert), are:

* P1
* P2
* P3
* P4
* P5

Any value other than these will be ignored.