2016-02-01 3 views
1

Я написал портфолон, использующий python, который отправит уведомления о незаконных портах как инцидент для pagerduty. Интеграция работает отлично, но есть небольшая проблема, которая меня пугает. Я не могу отправить уникальный инцидент для каждого хоста, у которого есть открытый порт. Давайте предположим, что мой сценарий сканируется 2 хостов и обнаруживает, что незаконные порты находятся и отправляет уведомление pagerduty следующим образом:Pagerduty группирует инциденты в одном инциденте

for serv in host.services: 
       if serv.port not in safe_port: 
        print ('Illegal Port open :'+str(serv.port)+'/'+str(serv.protocol)+' '+str(serv.service)+', on host=> '+str(host)) 

        notify_slack_forbidden_port(str(serv.port),str(serv.protocol),str(serv.service),str(host)) 
        ###### 
        notify_pagerduty_forbidden_port(str(serv.port),str(serv.protocol),str(serv.service),str(host)) 
       else: 

Функция Defination для notify_pagerduty_forbidden_port выглядит следующим образом:

def notify_pagerduty_forbidden_port(a,b,c,d):  ## Call this when a Forbidden port has been open up 
    headers = { 
     'Authorization': 'Token token={0}'.format(API_ACCESS_KEY), 
     'Content-type': 'application/json', 
    } 
    payload = json.dumps({ 
     "service_key": API_ACCESS_KEY, 
     "incident_key": "illegal/port", 
     "event_type": "trigger", 
     "description": "A Illegle port was found open"+str(a)+"/ "+str(b)+" service "+str(c)+" on "+str(d)+" Found in "+str(box_name), 
    }) 
    print "Sending to Pagerduty",payload 
    r = requests.post(
        'https://events.pagerduty.com/generic/2010-04-15/create_event.json', 
        headers=headers, 
        data=payload, 
    ) 
    print "Done!" 

Моя проблема заключается в том, что когда это отправляется в Pagerduty это рассматривается как один инцидент, а не иной инцидент:

enter image description here

Я ожидаю, что для каждого открытого порта в каждом хосте создается другой incedent.

ответ

2

Это поведение описано в docs:

incident_key - Identifies the incident to which this trigger event should be applied. If there's no open (i.e. unresolved) incident with this key, a new one will be created. If there's already an open incident with a matching key, this event will be appended to that incident's log. The event key provides an easy way to "de-dup" problem reports.

Так что, если вы используете другие incident_key каждый раз, когда вы вставляете новый вопрос, вы получите новый идентификатор проблемы.

+0

Ох .. Спасибо, я предполагаю, что я должен удалить эту '" accident_key ":" незаконный/порт ",' из оповещения pagerduty –

+0

Если вы хотите уникальный инцидент, я бы поставил случайный [uuid] (https : //docs.python.org/2/library/uuid.html). – RickyA

+0

круто, отлично работает сейчас :) –

 Смежные вопросы

  • Нет связанных вопросов^_^