> ## Documentation Index
> Fetch the complete documentation index at: https://docs.inferable.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Observability

> End-to-end Observability

## Using your existing observability setup

Since Inferable workflows execute in your own infrastructure, logging, tracing and monitoring is as easy as adding your existing observability tools into the workflow.

```typescript
import { logger, span } from "./my-observability-library";

workflow.version(1).define(async (ctx, input) => {
  const value = ctx.llm.structured({ ... });

  // This will log to stdout
  console.log("Hello, world!");

  // This will log the value to your observability tool
  logger.info("And the value is", value);
});
```

## Timeline View

[Inferable app](https://app.inferable.ai) provides a near real-time view of the workflow timeline, as it happens.

<Frame>![Workflow list](https://mintlify.s3.us-west-1.amazonaws.com/inferable/images/workflow-list.png)</Frame>

<div style={{ marginTop: "1rem" }} />

<Frame>![Workflow timeline](https://mintlify.s3.us-west-1.amazonaws.com/inferable/images/workflow-timeline.png)</Frame>

## Logger Utility

Inferable also provides a `ctx.log` function that can be used to send arbitrary messages and data to the workflow timeline.

```typescript
workflow.version(1).define(async (ctx, input) => {
  await ctx.log("info", {
    message: "Starting workflow",
  });
});
```

<Frame>![Logs in the workflow timeline](https://mintlify.s3.us-west-1.amazonaws.com/inferable/images/logging.png)</Frame>

You can also send arbitrary data to the workflow timeline.

```typescript
await ctx.log("info", {
  message: "My API call Result",
  data: {
    value: apiResult.data,
  },
});
```
