#  Пишем хандлер для Sensu
Difrex (mira, 14) → All  –  12:53:28 2016-01-28

Как и обещал, будем разбирать процесс создания хандлера.

В терминологии Sensu хандлер – это тот же плагин, только вызывающийся по определенным событиям.

Рассмотрим ситуацию, когда нам надо запускать хандлер на события OK и CRITICAL. Пример конфигурации:

{
"checks": {
"cpu": {
"handlers": ["email"],
"command": "/etc/sensu/plugins/system/check-cpu.rb",
"interval": 60,
"subscribers": [
"base"
]
}
}
}


Проверка запускается раз в 60 секунд.

{
"handlers": {
"email": {
"type": "pipe",
"command": "/etc/sensu/handlers/notification/mailer.pl",
"severities": ["critical", "ok"]
}
}
}

При наступлении события смены состояния чека ok<->critical выхлоп проверки в формате JSON отправится на STDIN программе mailer.pl.

Как же выглядит выхлоп? А вот так:

$VAR1 = {
'check' => {
'status' => 2,
'handlers' => [
'test'
],
'subscribers' => [
'test'
],
'interval' => 60,
'history' => [
'0',
'0',
'0',
'0',
'0',
'0',
'0',
'0',
'0',
'0',
'0',
'0',
'0',
'0',
'0',
'0',
'0',
'2',
'2',
'2',
'2'
],
'issued' => 1442576325,
'executed' => 1442576325,
'total_state_change' => 5,
'duration' => '0.086',
'name' => 'test_check',
'command' => '/etc/sensu/plugins/files/check-checksums.rb -f /tmp/testfile -h e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855',
'output' => 'Checksum CRITICAL: /tmp/testfile does not match
'
},
'action' => 'create',
'client' => {
'timestamp' => 1442576321,
'address' => 'graphite.bingo-boom.ru',
'name' => 'graphite.bingo-boom.ru',
'version' => '0.20.0',
'subscriptions' => [
'hp',
'base',
'uchiwa',
'test',
'dizard_snmp'
]
},
'id' => '0139b1f9-db4c-4a2b-8124-a2c9b076e40d',
'occurrences' => 4
};

Теперь мы можем взять этот JSON и преобразовать его в объект. В python это будет выглядеть примерно так:

import ast
import fileinput

json = ''

for line in fileinput.input():
json += line

# Get dictionary from string
def get_dict(json):
out_dict = ast.literal_eval(json)

return out_dict


check_message_dict = get_dict(json)



Теперь, когда у нас есть с структурированной информацией о проверке, я думаю, понятно, что делать дальше.

Код из нашего продакшена – мылохандлера(немного устаревший код) https://github.com/Difrex/sensu/blob/master/handlers/mailer.pl
Powered by iii-php v0.11