AMQPS zu Syslog

AMQPS zu Syslog

Derzeit verwende ich grundlegende API-Abrufe, um Protokolle von einem Cloud-Sicherheitsanbieter herunterzuladen, aber das ist kein sehr sauberer Prozess. Ich würde gerne auf den von ihnen bereitgestellten Event-Streaming-Dienst (AMQPS) umsteigen.

Ich habe die Warteschlange bereits eingerichtet und verfüge über die relevanten Informationen auf der Cloud-Seite, aber das Problem, auf das ich stoße, besteht darin, herauszufinden, wie ich diesen Stream am besten annehmen und in Syslog übertragen kann. Ich verwende derzeit syslog-ng, aber es sieht so aus, als ob es nur an RabbitMQ senden und nicht akzeptieren kann.

Ich schaue mir gerade Pika an, um zu sehen, ob es funktioniert, AMQPS zu akzeptieren und es dann in eine Protokolldatei umzuleiten, aber da stoße ich auf einige Probleme. Für jede Hilfe wäre ich sehr dankbar.

Danke

Antwort1

Ich habe eine GitHub-Seite von Walbit gefunden (https://github.com/walbit/AMP_API), das scheint bei mir richtig zu funktionieren. Ich verwende „consume_event_stream_by_name.py“ und es gibt alle Eingaben an den Standardausgang aus. Ich habe eine kleine Änderung vorgenommen, um es auch an Syslog zu senden, und jetzt akzeptiert Syslog-ng es.

Mein einziges Problem mit diesem Code ist im Moment, dass er anscheinend von Zeit zu Zeit abläuft oder ganz abstürzt, wenn keine Verbindungen eingehen. Ich muss also herausfinden, was da los ist.

#!/usr/bin/env python

import argparse
import pika
import pprint
import requests
import sys
import logging
import logging.handlers

# YOU NEED TO CREATE AN auth.py FILE WITH CLIENT_ID AND API_KEY STRINGS
from auth import CLIENT_ID, API_KEY

parser = argparse.ArgumentParser()
parser.add_argument('event_stream_name', metavar='event_stream_name',
                    nargs=1, help='event stream name')
parser.parse_args()
event_stream_name = parser.parse_args().event_stream_name[0]

api_endpoint = 'https://api.amp.cisco.com/v1/event_streams'

session = requests.Session()
session.auth = (CLIENT_ID, API_KEY)

event_streams = session.get(api_endpoint).json()['data']

event_stream = {}

for e in event_streams:
    if e['name'] is event_stream_name:
        event_stream = e

amqp_url = 'amqps://{user_name}:{password}@{host}:{port}'.format(
    **e['amqp_credentials'])
queue = e['amqp_credentials']['queue_name']
parameters = pika.URLParameters(amqp_url)
connection = pika.BlockingConnection(parameters)
channel = connection.channel()


parameters = pika.URLParameters(amqp_url)
connection = pika.BlockingConnection(parameters)
channel = connection.channel()

my_logger = logging.getLogger('MyLogger')
my_logger.setLevel(logging.INFO)
handler = logging.handlers.SysLogHandler(address = '/dev/log')
my_logger.addHandler(handler)

def callback(ch, method, properties, body):
#    print(" [x] Received meth:\t%r" % method)
#    print(" [x] Received prop:\t%r" % properties)
#    print(" [x] Received body:\t%r" % body)
#    print(body)
    my_logger.info('Fireamp: ' + body)


channel.basic_consume(callback, queue, no_ack=True)

print(" [*] Connecting to:\t%r" % amqp_url)
print(" [*] Waiting for messages. To exit press CTRL+C")
channel.start_consuming()

verwandte Informationen