2016-02-02 55 views
1

编辑:标题和添加了一些代码示例。哨兵 - 日志烧瓶中并哨兵在同一时间/相同DSN

我试图找出如何使用相同的DSN都芹菜工人和瓶日志发送给哨兵。

设置如下:

  • 瓶的应用程序发送异步任务的芹菜工人。
  • 瓶和芹菜工人均在链接Docker容器运行
  • 我们正在使用Application Factory模式创建的__init__.py文件中的飞行应用实例,因此,这就是芹菜和哨兵设置的东西目前发生的情况:

(代码已简化用于演示目的。)

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 

通过遵循Sentry Celery instructions,哨兵(在他们自己的话说) “劫持(S)芹菜错误处理”,以及作品好。但是,这会在流程中删除Flask错误处理。

是否有登记记录仪都(瓶和芹菜),使它们都发送日志条目多达哨兵方式?或者,芹菜注册是否在芹菜容器内运行的单独celery_worker.py文件中进行?

回答

1

我设法做到这一点是这样的:

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)