sentry-php-sdk
getsentry/sentry-for-ai
Complete Sentry error monitoring, tracing, profiling, and logging setup for PHP applications.
What is sentry-php-sdk?
Full-featured Sentry SDK wizard for PHP that guides you through installing and configuring error monitoring, tracing, profiling, logging, metrics, crons, and AI monitoring. Works with plain PHP, Laravel, and Symfony frameworks.
- Detects your PHP framework (Laravel, Symfony, or plain PHP) and project configuration
- Installs the appropriate Sentry SDK package via Composer
- Initializes Sentry with sensible defaults for error monitoring and tracing
- Configures framework-specific integrations (exception handlers, queue workers, schedulers)
- Enables optional features like profiling, metrics, crons monitoring, and AI instrumentation
- Provides step-by-step guidance for each monitoring feature with verification steps
How to install sentry-php-sdk
npx skills add https://github.com/getsentry/sentry-for-ai --skill sentry-php-sdk- PHP 7.2 or later
- Composer package manager
- Required PHP extensions: ext-json, ext-mbstring, ext-curl
- Sentry account and DSN (from sentry.io)
- For profiling: excimer PECL extension (Linux/macOS only)
How to use sentry-php-sdk
- 1.Run detection commands to identify your framework (Laravel, Symfony, or plain PHP) and existing Sentry setup
- 2.Review the recommendation matrix to decide which features to enable (error monitoring, tracing, profiling, logging, metrics, crons, AI monitoring)
- 3.Install the appropriate SDK package: sentry/sentry (plain PHP), sentry/sentry-laravel, or sentry/sentry-symfony
- 4.Initialize Sentry at your application entry point with your DSN and desired configuration options
- 5.For Laravel: register the exception handler in bootstrap/app.php and publish config with php artisan sentry:publish
- 6.For Symfony: register the SentryBundle and create config/packages/sentry.yaml with your DSN
- 7.Set environment variables (.env) for SENTRY_DSN, SENTRY_ENVIRONMENT, and sampling rates
- 8.Enable specific features (tracing, profiling, logging, crons) by following the referenced feature guides
Use cases
- Add error monitoring and exception tracking to an existing PHP application
- Set up distributed tracing across Laravel routes, Symfony controllers, and database queries
- Enable performance profiling in production PHP apps to identify bottlenecks
- Monitor scheduled tasks and queue jobs in Laravel or Symfony applications
- Instrument Laravel AI library calls for LLM token usage and latency tracking
- PHP backend developers setting up observability
- DevOps engineers configuring monitoring for Laravel or Symfony applications
- Teams using Laravel AI or other PHP AI libraries who need LLM monitoring
- Developers maintaining plain PHP applications without a framework
sentry-php-sdk FAQ
Yes. Use sentry/sentry-laravel for Laravel apps, sentry/sentry-symfony for Symfony apps, or sentry/sentry for plain PHP. Each provides framework-specific integrations.
Start with traces_sample_rate: 1.0 for testing, then lower to 0.1–0.2 in high-traffic production to reduce costs. Adjust based on your traffic volume.
No. Profiling is optional and requires the excimer PHP extension (Linux/macOS only). Enable it only if you need production performance insights.
Yes, if you use sentry/sentry-laravel >= 4.27.0 with tracing enabled. Other PHP AI libraries require manual span instrumentation.
The skill provides separate guides for Laravel Scheduler, Symfony Scheduler, and queue workers (Horizon, Messenger). Follow the crons and queue references after core setup.
Full instructions (SKILL.md)
Source of truth, from getsentry/sentry-for-ai.
name: sentry-php-sdk description: Full Sentry SDK setup for PHP. Use when asked to "add Sentry to PHP", "install sentry/sentry", "setup Sentry in PHP", or configure error monitoring, tracing, profiling, logging, metrics, crons, or AI monitoring for PHP applications. Supports plain PHP, Laravel, and Symfony. license: Apache-2.0 category: sdk-setup parent: sentry-sdk-setup disable-model-invocation: true
All Skills > SDK Setup > PHP SDK
Sentry PHP SDK
Opinionated wizard that scans your PHP project and guides you through complete Sentry setup.
Invoke This Skill When
- User asks to "add Sentry to PHP" or "setup Sentry" in a PHP app
- User wants error monitoring, tracing, profiling, logging, metrics, or crons in PHP
- User mentions
sentry/sentry,sentry/sentry-laravel,sentry/sentry-symfony, or Sentry + any PHP framework - User wants to monitor Laravel routes, Symfony controllers, queues, scheduled tasks, or plain PHP scripts
Note: SDK versions and APIs below reflect Sentry docs at time of writing (sentry/sentry 4.x, sentry/sentry-laravel 4.x, sentry/sentry-symfony 5.x). Always verify against docs.sentry.io/platforms/php/ before implementing.
Phase 1: Detect
Run these commands to understand the project before making recommendations:
# Check existing Sentry
grep -i sentry composer.json composer.lock 2>/dev/null
# Detect framework
cat composer.json | grep -E '"laravel/framework"|"symfony/framework-bundle"|"illuminate/'
# Confirm framework via filesystem markers
ls artisan 2>/dev/null && echo "Laravel detected"
ls bin/console 2>/dev/null && echo "Symfony detected"
# Detect queue systems
grep -E '"laravel/horizon"|"symfony/messenger"' composer.json 2>/dev/null
# Detect AI libraries
grep -E '"(laravel/ai|openai-php|openai/|anthropic|llm)' composer.json 2>/dev/null
# Check for companion frontend
ls frontend/ resources/js/ assets/ 2>/dev/null
cat package.json 2>/dev/null | grep -E '"react"|"svelte"|"vue"|"next"'
What to note:
- Is
sentry/sentry(or-laravel/-symfony) already incomposer.json? If yes, check if the init call exists — may just need feature config. - Framework detected? Laravel (has
artisan+laravel/frameworkin composer.json), Symfony (hasbin/console+symfony/framework-bundle), or plain PHP. - Queue system? (Laravel Queue / Horizon, Symfony Messenger need queue worker configuration.)
- AI libraries? (
laravel/aiis auto-instrumented bysentry/sentry-laravel >= 4.27.0when tracing is enabled; other PHP AI libraries need manual spans.) - Companion frontend? (Triggers Phase 4 cross-link.)
Phase 2: Recommend
Based on what you found, present a concrete proposal. Don't ask open-ended questions — lead with a recommendation:
Always recommended (core coverage):
- ✅ Error Monitoring — captures unhandled exceptions and PHP errors
- ✅ Logging — Monolog integration (Laravel/Symfony auto-configure; plain PHP uses
MonologHandler)
Recommend when detected:
- ✅ Tracing — web framework detected (Laravel/Symfony auto-instrument HTTP, DB, Twig/Blade, cache)
- ⚡ Profiling — production apps where performance matters (requires
excimerPHP extension, Linux/macOS only) - ⚡ Crons — scheduler patterns detected (Laravel Scheduler, Symfony Scheduler, custom cron jobs)
- ⚡ Metrics — business KPIs or SLO tracking (uses
TraceMetricsAPI) - ✅ AI Monitoring —
laravel/aidetected in a Laravel app (auto-instrumented insentry/sentry-laravel >= 4.27.0)
Recommendation matrix:
| Feature | Recommend when... | Reference |
|---|---|---|
| Error Monitoring | Always — non-negotiable baseline | ${SKILL_ROOT}/references/error-monitoring.md |
| Tracing | Laravel/Symfony detected, or manual spans needed | ${SKILL_ROOT}/references/tracing.md |
| Profiling | Production + excimer extension available | ${SKILL_ROOT}/references/profiling.md |
| Logging | Always; Monolog for Laravel/Symfony | ${SKILL_ROOT}/references/logging.md |
| Metrics | Business events or SLO tracking needed | ${SKILL_ROOT}/references/metrics.md |
| Crons | Scheduler or cron patterns detected | ${SKILL_ROOT}/references/crons.md |
| AI Monitoring | laravel/ai detected in a Laravel app, or manual PHP AI spans needed | ${SKILL_ROOT}/references/ai-monitoring.md |
Propose: "I recommend Error Monitoring + Tracing [+ Logging]. Want Profiling, Crons, Metrics, or AI Monitoring too?"
Phase 3: Guide
Install
# Plain PHP
composer require sentry/sentry "^4.0"
# Laravel
composer require sentry/sentry-laravel "^4.0"
# Laravel with Laravel AI monitoring
composer require sentry/sentry-laravel "^4.27.0"
# Symfony
composer require sentry/sentry-symfony "^5.0"
System requirements:
- PHP 7.2 or later
- Extensions:
ext-json,ext-mbstring,ext-curl(all required) excimerPECL extension (Linux/macOS only — required for profiling)
Framework-Specific Initialization
Plain PHP
Place \Sentry\init() at the top of your entry point (index.php, bootstrap.php, or equivalent), before any application code:
<?php
require_once 'vendor/autoload.php';
\Sentry\init([
'dsn' => $_SERVER['SENTRY_DSN'] ?? '',
'environment' => $_SERVER['SENTRY_ENVIRONMENT'] ?? 'production',
'release' => $_SERVER['SENTRY_RELEASE'] ?? null,
'send_default_pii' => true,
'traces_sample_rate' => 1.0,
'profiles_sample_rate' => 1.0,
'enable_logs' => true,
]);
// rest of application...
Laravel
Step 1 — Register exception handler in bootstrap/app.php:
use Sentry\Laravel\Integration;
return Application::configure(basePath: dirname(__DIR__))
->withExceptions(function (Exceptions $exceptions) {
Integration::handles($exceptions);
})->create();
Step 2 — Publish config and set DSN:
php artisan sentry:publish --dsn=YOUR_DSN
This creates config/sentry.php and adds SENTRY_LARAVEL_DSN to .env.
Step 3 — Configure .env:
SENTRY_LARAVEL_DSN=https://examplePublicKey@o0.ingest.sentry.io/0
SENTRY_TRACES_SAMPLE_RATE=1.0
SENTRY_PROFILES_SAMPLE_RATE=1.0
For full Laravel configuration options, read
${SKILL_ROOT}/references/laravel.md.
Symfony
Step 1 — Register the bundle in config/bundles.php (auto-done by Symfony Flex):
Sentry\SentryBundle\SentryBundle::class => ['all' => true],
Step 2 — Create config/packages/sentry.yaml:
sentry:
dsn: '%env(SENTRY_DSN)%'
options:
environment: '%env(APP_ENV)%'
release: '%env(SENTRY_RELEASE)%'
send_default_pii: true
traces_sample_rate: 1.0
profiles_sample_rate: 1.0
enable_logs: true
Step 3 — Set the DSN in .env:
SENTRY_DSN=https://examplePublicKey@o0.ingest.sentry.io/0
For full Symfony configuration options, read
${SKILL_ROOT}/references/symfony.md.
Quick Start — Recommended Init (Plain PHP)
Full init enabling the most features with sensible defaults:
\Sentry\init([
'dsn' => $_SERVER['SENTRY_DSN'] ?? '',
'environment' => $_SERVER['SENTRY_ENVIRONMENT'] ?? 'production',
'release' => $_SERVER['SENTRY_RELEASE'] ?? null,
'send_default_pii' => true,
// Tracing (lower to 0.1–0.2 in high-traffic production)
'traces_sample_rate' => 1.0,
// Profiling — requires excimer extension (Linux/macOS only)
'profiles_sample_rate' => 1.0,
// Structured logs (sentry/sentry >=4.12.0)
'enable_logs' => true,
]);
For Each Agreed Feature
Walk through features one at a time. Load the reference, follow its steps, verify before moving on:
| Feature | Reference file | Load when... |
|---|---|---|
| Error Monitoring | ${SKILL_ROOT}/references/error-monitoring.md | Always (baseline) |
| Tracing | ${SKILL_ROOT}/references/tracing.md | HTTP handlers / distributed tracing |
| Profiling | ${SKILL_ROOT}/references/profiling.md | Performance-sensitive production |
| Logging | ${SKILL_ROOT}/references/logging.md | Always; Monolog for Laravel/Symfony |
| Metrics | ${SKILL_ROOT}/references/metrics.md | Business KPIs / SLO tracking |
| Crons | ${SKILL_ROOT}/references/crons.md | Scheduler / cron patterns detected |
| AI Monitoring | ${SKILL_ROOT}/references/ai-monitoring.md | laravel/ai detected in Laravel, or manual PHP AI spans needed |
For each feature: Read ${SKILL_ROOT}/references/<feature>.md, follow steps exactly, verify it works.
Configuration Reference
Key \Sentry\init() Options (Plain PHP)
| Option | Type | Default | Purpose |
|---|---|---|---|
dsn | string|bool|null | $_SERVER['SENTRY_DSN'] | SDK disabled if empty or false |
environment | string|null | $_SERVER['SENTRY_ENVIRONMENT'] | e.g., "staging" |
release | string|null | $_SERVER['SENTRY_RELEASE'] | e.g., "myapp@1.0.0" |
send_default_pii | bool | false | Include request headers, cookies, IP |
sample_rate | float | 1.0 | Error event sample rate (0.0–1.0) |
traces_sample_rate | float|null | null | Transaction sample rate; null disables tracing |
traces_sampler | callable|null | null | Custom per-transaction sampling (overrides rate) |
profiles_sample_rate | float|null | null | Profiling rate relative to traces; requires excimer |
enable_logs | bool | false | Send structured logs to Sentry (>=4.12.0) |
max_breadcrumbs | int | 100 | Max breadcrumbs per event |
attach_stacktrace | bool | false | Stack traces on captureMessage() |
in_app_include | string[] | [] | Path prefixes belonging to your app |
in_app_exclude | string[] | [] | Path prefixes for third-party code (hidden in traces) |
ignore_exceptions | string[] | [] | Exception FQCNs to never report |
ignore_transactions | string[] | [] | Transaction names to never report |
error_types | int|null | error_reporting() | PHP error bitmask (e.g., E_ALL & ~E_NOTICE) |
capture_silenced_errors | bool | false | Capture errors suppressed by @ operator |
max_request_body_size | string | "medium" | "none" / "small" / "medium" / "always" |
before_send | callable | identity | fn(Event $event, ?EventHint $hint): ?Event — return null to drop |
before_breadcrumb | callable | identity | fn(Breadcrumb $b): ?Breadcrumb — return null to discard |
trace_propagation_targets | string[]|null | null | Downstream hosts to inject sentry-trace headers into; null = all, [] = none |
strict_trace_continuation | bool | false | Only continue an incoming distributed trace if the sentry-org_id baggage matches the SDK's org ID; prevents trace contamination from third-party Sentry-instrumented services (>=4.21.0) |
debug | bool | false | Verbose SDK output (use a PSR-3 logger option instead for structured output) |
Environment Variables
| Variable | Maps to | Notes |
|---|---|---|
SENTRY_DSN | dsn | Also $_SERVER['SENTRY_DSN'] |
SENTRY_ENVIRONMENT | environment | |
SENTRY_RELEASE | release | Also reads $_SERVER['AWS_LAMBDA_FUNCTION_VERSION'] |
SENTRY_SPOTLIGHT | spotlight |
Laravel note: Uses
SENTRY_LARAVEL_DSN(falls back toSENTRY_DSN). Other options followSENTRY_TRACES_SAMPLE_RATE,SENTRY_PROFILES_SAMPLE_RATE, etc.
Verification
Test that Sentry is receiving events:
// Trigger a real error event — check the Sentry dashboard within seconds
throw new \Exception('Sentry PHP SDK test');
Or for a non-crashing check:
\Sentry\captureMessage('Sentry PHP SDK test');
Laravel:
php artisan sentry:test
If nothing appears:
- Enable debug output:
\Sentry\init([ 'dsn' => '...', 'logger' => new \Sentry\Logger\DebugStdOutLogger(), ]); - Verify the DSN is correct (format:
https://<key>@o<org>.ingest.sentry.io/<project>) - Check
SENTRY_DSN(orSENTRY_LARAVEL_DSN) env var is set in the running process - For queue workers: ensure Sentry is initialized inside the worker process, not just the web process
Phase 4: Cross-Link
After completing PHP setup, check for a companion frontend missing Sentry:
ls frontend/ resources/js/ assets/ public/ 2>/dev/null
cat package.json frontend/package.json 2>/dev/null \
| grep -E '"react"|"svelte"|"vue"|"next"|"nuxt"'
If a frontend exists without Sentry, suggest the matching skill:
| Frontend detected | Suggest skill |
|---|---|
| React / Next.js | sentry-react-sdk |
| Svelte / SvelteKit | sentry-svelte-sdk |
| Vue / Nuxt | Use @sentry/vue — see docs.sentry.io/platforms/javascript/guides/vue/ |
| Other JS/TS | sentry-react-sdk (covers generic browser JS patterns) |
Troubleshooting
| Issue | Solution |
|---|---|
| Events not appearing | Enable logger option (DebugStdOutLogger), verify DSN, check env vars in the running process |
| Malformed DSN error | Format: https://<key>@o<org>.ingest.sentry.io/<project> |
| Laravel exceptions not captured | Ensure Integration::handles($exceptions) is in bootstrap/app.php |
| Symfony exceptions not captured | Verify SentryBundle is registered in config/bundles.php |
| No traces appearing | Set traces_sample_rate (not null); confirm auto-instrumentation is enabled |
| Profiling not working | excimer extension required (Linux/macOS only; not available on Windows); requires traces_sample_rate > 0 |
enable_logs not working | Requires sentry/sentry >= 4.12.0, sentry/sentry-laravel >= 4.15.0, or sentry/sentry-symfony >= 5.4.0 |
| Queue worker errors missing | Init Sentry in the worker process itself, not just the web process; for Laravel use SENTRY_LARAVEL_DSN in worker .env |
| Too many transactions | Lower traces_sample_rate or use traces_sampler to drop health check routes |
| PII not captured | Set send_default_pii: true; for Laravel set send_default_pii: true in config/sentry.php |
@-suppressed errors missing | Set capture_silenced_errors: true |
| Cross-service traces broken | Check trace_propagation_targets; ensure downstream services have Sentry installed |
| Trace contamination from third-party services | Set strict_trace_continuation: true to only continue traces where the incoming sentry-org_id baggage matches your SDK's org ID (>=4.21.0) |
Related skills
More from getsentry/sentry-for-ai and the wider catalog.

sentry-pr-code-review
Review and fix code issues detected by Sentry's Seer bug prediction in GitHub PRs.

sentry-python-sdk
Complete Sentry error monitoring, tracing, profiling, and AI observability setup for Python applications.

sentry-react-native-sdk
Full Sentry SDK setup for React Native and Expo apps with error monitoring, tracing, and session replay.

sentry-react-router-framework-sdk
Full Sentry SDK setup for React Router Framework v7 with error monitoring, tracing, profiling, and session replay.

sentry-react-sdk
Complete Sentry error monitoring, tracing, and session replay setup for React applications.

sentry-ruby-sdk
Full Sentry SDK setup for Ruby apps with error monitoring, tracing, logging, metrics, and crons.