AMQPS에서 Syslog로

AMQPS에서 Syslog로

현재 저는 기본 API를 사용하여 클라우드 보안 공급업체에서 로그를 가져오지만 매우 깔끔한 프로세스는 아닙니다. 그들이 제공하는 이벤트 스트리밍(AMQPS) 서비스로 전환하고 싶습니다.

이미 대기열을 설정했고 클라우드 측에 관련 정보가 있지만 현재 직면한 문제는 해당 스트림을 수락하고 syslog에 덤프하는 가장 좋은 방법을 찾는 것입니다. 지금은 syslog-ng를 활용하고 있는데 RabbitMQ로만 보낼 수 있고 받아들일 수 없는 것 같습니다.

현재 Pika를 보고 AMQPS를 수락한 다음 이를 로그 파일로 퍼널하는 데 작동하는지 확인하고 있지만 여기에서 몇 가지 문제가 발생합니다. 어떤 도움이라도 대단히 감사하겠습니다.

감사해요

답변1

walbit이 만든 github 페이지를 찾았습니다(https://github.com/walbit/AMP_API), 그것은 나에게 올바르게 작동하는 것 같습니다. 나는 "consume_event_stream_by_name.py"를 사용하고 있으며 모든 입력을 표준 출력으로 덤프합니다. syslog에도 보내도록 약간 수정했는데 이제 syslog-ng가 이를 수락합니다.

현재 이 코드의 유일한 문제는 때때로 시간이 초과되거나 연결이 들어오지 않으면 전체적으로 죽어가는 것 같다는 것입니다. 따라서 무슨 일이 일어나고 있는지 알아내야 합니다.

#!/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()

관련 정보