sentry-python icon indicating copy to clipboard operation
sentry-python copied to clipboard

Please add Ray framework integration for sentry/apm.

Open dPeS opened this issue 2 years ago • 7 comments

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.

dPeS avatar Sep 29 '23 12:09 dPeS

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 avatar Oct 02 '23 10:10 antonpirker

Lets test how much demand there is:

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

antonpirker avatar Oct 02 '23 10:10 antonpirker

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.

dPeS avatar Oct 04 '23 10:10 dPeS

@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

glowskir avatar Oct 14 '23 18:10 glowskir

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

antonpirker avatar Oct 16 '23 14:10 antonpirker

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

leokster avatar May 03 '24 12:05 leokster

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

szokeasaurusrex avatar May 06 '24 09:05 szokeasaurusrex

@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! 🥇

antonpirker avatar Aug 13 '24 14:08 antonpirker