Могу ли я направить ошибки конвейера Luigi в Sentry?

Моя команда использует Sentry для отслеживания ошибок, поэтому я бы предпочел не использовать встроенные возможности электронной почты Луиджи, чтобы хранить все наши отчеты в одном месте.

Вот как я его сейчас настроил, и, похоже, он полностью пропускает Sentry:

if __name__ == '__main__':
    try:
        luigi.run()
    except Exception as e:
        client = Client(
            ***
        )
        client.captureException(tags={
            sys.argv[0]
        })
        logger.critical('Error occurred: {e}'.format(e=e))
        raise

person flybonzai    schedule 16.11.2016    source источник


Ответы (1)


Я думаю, это должно быть возможно, если вы объявите обратный вызов события сбоя и выполнить там отслеживание часового:

import luigi

@luigi.Task.event_handler(luigi.Event.FAILURE)
def mourn_failure(task, exception):
    client = Client(
        ***
    )
    # we also include extra context for the current task
    client.captureException(
       (type(e), e.message, e.traceback),
       extra=dict(task=repr(task))
    )
    logger.critical('Error occurred: {e}'.format(e=exception))


if __name__ == '__main__':
    luigi.run()

ВНИМАНИЕ, что e.traceback будет работать только на python 3+, как объяснено в этом ответе.

person matagus    schedule 17.11.2016