/ / Sentry - Log Flask e Sentry ao mesmo tempo / mesmo DSN - python, log, flask, aipo, sentry

Sentry - Log Flask e Sentry ao mesmo tempo / mesmo DSN - python, log, flask, aipo, sentry

Edit: Title e adicionou alguns exemplos de código.

Estou tentando descobrir como enviar o trabalhador do Aipo e o registro do Flask para o Sentry usando o mesmo DSN.

A instalação é a seguinte:

  • O aplicativo Flask envia tarefas assíncronas para um trabalhador do aipo.
  • O trabalhador do balão e do aipo está sendo executado em contêineres vinculados do Docker
  • Nós estamos usando o Fábrica de Aplicação padrão para criar instâncias de aplicativos dinamicamente dentro do __init__.py , para que seja onde as coisas de configuração do Aipo e da Sentinela acontecem atualmente:

(O código foi simplificado para fins de demonstração.)

celery = Celery(__name__, broker=config[config_name].CELERY_BROKER_URL)
client = Client(dsn={my_dsn}, transport=HTTPTransport, )
sentry = Sentry(client=client)
def create_app(config_filename):
app = Flask(__name__)
app.config.from_pyfile(config_filename)
celery.conf.update(app.config)
# https://docs.getsentry.com/hosted/clients/python/integrations/flask/#extended-setup :
sentry.init_app(app, logging=True, level=logging.INFO, )
# https://docs.getsentry.com/hosted/clients/python/integrations/celery/ :
register_logger_signal(client, loglevel=logging.INFO)
register_signal(client)
return app

Seguindo o Instruções Sentry Aipo, Sentry (em suas próprias palavras) "seqüestra (s) tratamento de erros de aipo" e funciona bem. No entanto, isso elimina a manipulação de erros do Flask no processo.

Existe uma maneira de registrar os dois loggers (Flask e Aipo) para que ambos enviem entradas de log para o Sentry? Ou o registro do aipo deve ser realizado em separado celery_worker.py arquivo que é executado no contêiner de aipo?

Respostas:

1 para resposta № 1

Eu consegui fazer assim:

app = Flask(__name__)
celery = Celery(app.import_name, broker=app.config["CELERY_BROKER_URL"], backend=app.config["CELERY_RESULT_BACKEND"], worker_send_task_events=True, task_send_sent_event=True)
celery.conf.update(app.config)

client = Client(dsn={my_dsn})
sentry = Sentry(app, dsn={my_dsn})
register_logger_signal(client)
register_logger_signal(client, loglevel=logging.INFO)
register_signal(client)
register_signal(client, ignore_expected=True)