Oh f*ck
error
@xf3l1x
f3l1x.io
26.11.2022
nonroot@myhomeserver /srv/hosting/myweb/var/log # tree
.
├── access.log
├── exception.log
├── exception--2020-01-10--11-53--dioth4sfqq.html
├── exception--2020-03-13--05-00--puu05ty49w.html
├── exception--2020-03-22--05-43--sax38djo7u.html
├── exception--2020-03-29--11-45--uinbbg49ek.html
├── exception--2020-06-10--08-12--j8gy3mrf27.html
├── exception--2020-12-13--05-01--3d2ffe5567.html
├── exception--2020-12-22--07-43--tbthm9fkq8.html
├── exception--2021-02-30--13-22--gm9f2pdi0o.html
├── exception--2021-05-13--05-00--wj7cz5ntl4.html
├── exception--2021-06-22--07-12--9rx28vi6tg.html
├── exception--2021-09-29--11-25--uhnag3qwj7.html
├── exception--2022-09-30--13-22--f932521753.html
├── exception--2022-10-04--10-06--9ef0aff0c9.html
├── exception--2022-10-04--14-45--kjrxfkatth.html
├── exception--2022-10-06--13-45--d0ttmrwk7d.html
├── exception--2022-10-06--21-15--773f46333b.html
├── exception--2022-10-11--08-37--a792ea033d.html
├── exception--2022-10-17--12-44--482474d173.html
├── exception--2022-10-24--11-58--0dcb67675c.html
└── exception--2022-11-07--14-30--55d43ea1c6.html
Sentry
try {
$this->functionFailsForSure();
} catch (\Throwable $exception) {
\Sentry\captureException($exception);
}
composer require sentry/sdk
Installation
\Sentry\init(['dsn' => 'https://KEY1@KEY2.ingest.sentry.io/KEY3']);
Contributte
Sentry
# config.neon
extensions:
sentry: Contributte\Sentry\DI\SentryExtension
sentry:
enable: %productionMode%
client:
dsn: "https://{KEY1}@{KEY2}.ingest.sentry.io/{KEY3}"
composer require contributte/sentry
Installation
Contributte / Sentry
// Sentry
EnvironmentIntegration
ErrorListenerIntegration
ExceptionListenerIntegration
FatalErrorListenerIntegration
FrameContextifierIntegration
ModulesIntegration
RequestIntegration
TransactionIntegration
// Nette
NetteApplicationIntegration
NetteHttpIntegration
NetteSecurityIntegration
NetteSessionIntegration
ExtraIntegration
// Upload
S3UploadIntegration
// Performance
NetteApplicationMonitor
NetteDatabaseMonitor
LatteMonitor
NetteContainerMonitor
# config.neon
extensions:
sentry: Contributte\Sentry\DI\SentryExtension
sentry:
enable: %productionMode%
client:
dsn: "https://{KEY1}@{KEY2}.ingest.sentry.io/{KEY3}"
sample_rate: 0.5 # 0-1 * 100
Sentry [sample rate]
Sentry [enable/disable keys]
...or business plan
Sentry [relay]
docker run --rm -it
-v $(pwd)/config/:/srv/relay/ \
-p 3000:3000 \
getsentry/relay \
run --config /srv/relay/
# /srv/relay/config.yml
relay:
mode: proxy
host: 0.0.0.0
port: 3000
metrics:
sample_rate: 0.1 # 0-1 * 100
managed
static
proxy
capture
extensions:
sentry: Contributte\Sentry\DI\SentryExtension
sentry:
client:
integrations:
- Contributte\Sentry\Integration\S3UploadIntegration()
services:
- Contributte\Sentry\Upload\S3Uploader(
Contributte\Sentry\Upload\S3Signer(
accessKeyId: secret
secretKey: secret
url: myorg.r2.cloudflarestorage.com / s3.eu-central-1.amazonaws.com
bucket: mybucket
region: auto
prefix: null
)
)
Sentry [uploader]
mangoweb-backend
monolog-tracy-handler
Tracy
Tracy
X
Tracy
X
❌ Ladenky / RSOD
🍳 Easy wheezy
🌤️ Cloud services
💆♀️ Self hosted
🚧 Creating / making
class Bootstrap
{
public static function boot(): Configurator
{
$configurator = new Configurator;
$configurator->setDebugMode(true / false);
$configurator->enableTracy(__DIR__ . '/../log');
TracyX::enable([
'accessId' => 'secret',
'accessToken' => 'secret',
]);
}
}
TracyX [config]
TracyX [architecture]
API
APP
PAGES
STORAGE (R2)
DB (D1)
ERROR
Text
TRACY
TRACY-X
WORKER
WEB
store
save
upload
catch
AUTH
Zero Trust
presigned URL
TracyX [pricing]
Workers → 100k reqs / day 🆓
Pages → unlimited reqs 🆓
R2 → 10M ops / month 🆓
D1 → private beta 🆓
Zero Trust → 50 users 🆓
Tracy X → 🤑💰🍺
TracyX [self hosted]
Time to selfie 📷
Thank you!
@xf3l1x
f3l1x.io