getsentry / sentry-python

The official Python SDK for Sentry.io
https://sentry.io/for/python/
MIT License
1.86k stars 483 forks source link

Please add Ray framework integration for sentry/apm. #2400

Closed dPeS closed 3 weeks ago

dPeS commented 11 months ago

Problem Statement

https://www.ray.io/

I want to annotate that kind of code with spans:

import ray
import os
import time
import sentry_sdk
import random
import asyncio
from sentry_sdk.integrations.asyncio import AsyncioIntegration

logging.basicConfig(level=logging.DEBUG)

def step1():
    with sentry_sdk.start_span(description="step1"):
        time.sleep(random.randint(200,500)/1000.)
def step2():
    with sentry_sdk.start_span(description="step2"):
        time.sleep(random.randint(200,500)/1000.)
def step3():
    with sentry_sdk.start_span(description="step3"):
        time.sleep(random.randint(200,500)/1000.)

@ray.remote
def retrieve_task(item):
    step1()
    step2()
    step3()
    return 1

async def main():
    sentry_sdk.init(
        dsn=os.getenv('SENTRY_DSN'),
        traces_sample_rate=1.0,
        integrations=[
            AsyncioIntegration(),
        ],
    )
    #---
    ray.init()
    with sentry_sdk.start_transaction(op="task", name="example ray task transaction"):
        object_references = [
            retrieve_task.remote(item) for item in range(8)
        ]
        data = ray.get(object_references)
        print(data)

if __name__ ==  '__main__':
    asyncio.run(main())

But I only see one big transaction trace without those 3 spans.

Solution Brainstorm

I think new integration needs to be done.

antonpirker commented 11 months ago

Hey @dPeS !

Thanks for bringing this up!

I guess the problem is that the step*() functions are run in another process or something like this (don't know how Ray works) And that the tracing data are not propagated to the other process thus the spans can not be attached to the transaction you create...

antonpirker commented 11 months ago

Lets test how much demand there is:

If you want to see us support Ray, please "Thumb up" this issue!

dPeS commented 11 months ago

I guess the problem is that the step*() functions are run in another process or something like this (don't know how Ray works) And that the tracing data are not propagated to the other process thus the spans can not be attached to the transaction you create...

@antonpirker not the only problem - in those "remote" ray workers sentry isn't initialized - that's for starter.

glowskir commented 10 months ago

@szokeasaurusrex Hey I made PR with Ray integration, it handles tracing propagation to ray cluster, feedback is more than welcome! https://github.com/getsentry/sentry-python/pull/2444

antonpirker commented 10 months ago

Thanks @glowskir for the integration! We will have a look sometime soon. Can not promise any ETA yet.

leokster commented 4 months ago

@antonpirker is it planned to merge this PR? ray is becoming more and more popular, would be great to use sentry with it.

szokeasaurusrex commented 4 months ago

@leokster Thanks for reaching out, I will try to look into this later this week

antonpirker commented 3 weeks ago

@dPeS the Ray integration has been released in Sentry SDK version 2.13.0: https://github.com/getsentry/sentry-python/releases/tag/2.13.0

Thanks again for the great work! 🥇