2016-02-02 56 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)