Настройка Error Tracking (Rollbar) для веб-приложения
Rollbar отличается от Sentry и Bugsnag акцентом на deploy tracking и RQL (Rollbar Query Language) — SQL-подобный язык для анализа ошибок. Полезен когда нужно быстро ответить на вопросы типа «сколько уникальных пользователей получили эту ошибку за неделю» или «коррелирует ли рост ошибок с конкретным деплоем».
Бесплатный план: 5000 событий/месяц.
Установка PHP / Laravel
composer require rollbar/rollbar-laravel
.env:
ROLLBAR_TOKEN=your_post_server_item_token
ROLLBAR_LEVEL=error
ROLLBAR_ENVIRONMENT=production
config/logging.php:
'rollbar' => [
'driver' => 'monolog',
'handler' => \Rollbar\Laravel\MonologHandler::class,
'access_token' => env('ROLLBAR_TOKEN'),
'level' => env('ROLLBAR_LEVEL', 'error'),
'environment' => env('ROLLBAR_ENVIRONMENT', 'production'),
],
'stack' => [
'driver' => 'stack',
'channels' => ['daily', 'rollbar'],
],
Ручная отправка с person context:
\Rollbar\Rollbar::configure([
'person_fn' => function () {
$user = auth()->user();
if (!$user) return null;
return [
'id' => $user->id,
'username' => $user->name,
'email' => $user->email,
];
},
]);
// Отправить исключение с дополнительным контекстом
\Rollbar\Rollbar::error('Payment processing failed', [
'order_id' => $order->id,
'gateway' => 'stripe',
'error_code' => $e->getCode(),
]);
Фильтрация ожидаемых исключений:
\Rollbar\Rollbar::configure([
'check_ignore' => function ($isUncaught, $toLog, $payload) {
// Игнорировать 404 и 401
if ($toLog instanceof \Symfony\Component\HttpKernel\Exception\HttpException) {
$code = $toLog->getStatusCode();
if (in_array($code, [404, 401, 403])) {
return true; // true = игнорировать
}
}
return false;
},
]);
JavaScript / React
npm install rollbar
// src/rollbar.ts
import Rollbar from 'rollbar';
const rollbar = new Rollbar({
accessToken: import.meta.env.VITE_ROLLBAR_TOKEN,
environment: import.meta.env.MODE,
codeVersion: import.meta.env.VITE_APP_VERSION,
captureUncaught: true,
captureUnhandledRejections: true,
payload: {
client: {
javascript: {
source_map_enabled: true,
code_version: import.meta.env.VITE_APP_VERSION,
guess_uncaught_frames: true,
},
},
},
checkIgnore: (_isUncaught, _args, payload) => {
// Игнорировать ошибки из расширений браузера
const url = payload?.body?.trace?.frames?.[0]?.filename ?? '';
if (url.startsWith('chrome-extension://')) return true;
return false;
},
});
export default rollbar;
React Provider:
// src/main.tsx
import { Provider, ErrorBoundary } from '@rollbar/react';
import rollbar from './rollbar';
root.render(
<Provider instance={rollbar}>
<ErrorBoundary
fallbackUI={({ error }: { error: Error }) => (
<div>
<p>Ошибка: {error.message}</p>
</div>
)}
>
<App />
</ErrorBoundary>
</Provider>
);
Использование в компонентах:
import { useRollbar } from '@rollbar/react';
function PaymentForm() {
const rollbar = useRollbar();
const handleSubmit = async (data: PaymentData) => {
try {
await processPayment(data);
} catch (error) {
rollbar.error(error as Error, {
payment_method: data.method,
amount: data.amount,
});
showErrorMessage();
}
};
}
Deploy Tracking
Rollbar умеет связывать ошибки с деплоями. В CI/CD:
curl -X POST https://api.rollbar.com/api/1/deploy \
-H "Content-Type: application/json" \
-d '{
"access_token": "'"$ROLLBAR_TOKEN"'",
"environment": "production",
"revision": "'"$GIT_COMMIT"'",
"rollbar_username": "deploy-bot",
"comment": "Deploy '"$GIT_COMMIT_MESSAGE"'",
"status": "succeeded"
}'
После этого в Rollbar на таймлайне ошибок видны маркеры деплоев — сразу понятно, какие ошибки появились после конкретного релиза.
Source Maps
# Загрузка source maps после сборки
curl -X POST https://api.rollbar.com/api/1/sourcemap \
-F "access_token=$ROLLBAR_TOKEN" \
-F "version=$APP_VERSION" \
-F "minified_url=https://example.com/assets/app.js" \
-F "source_map=@dist/assets/app.js.map"
Или через rollbar-cli:
npx @rollbar/cli sourcemaps upload \
--access-token $ROLLBAR_TOKEN \
--version $APP_VERSION \
--directory dist/assets \
--url-prefix https://example.com/assets/
RQL — аналитика ошибок
Rollbar Query Language позволяет делать запросы прямо из UI:
-- Топ ошибок последних 7 дней
SELECT item.counter, item.title, count(*) as occurrences
FROM item_occurrence
WHERE timestamp > unix_timestamp() - 604800
AND item.environment = 'production'
GROUP BY item.counter, item.title
ORDER BY occurrences DESC
LIMIT 20
-- Уникальные пользователи по ошибке
SELECT count(distinct(person.id)) as affected_users
FROM item_occurrence
WHERE item.counter = 123
AND timestamp > unix_timestamp() - 86400
-- Корреляция ошибок с версией
SELECT item.code_version, count(*) as count
FROM item_occurrence
WHERE item.title LIKE '%PaymentException%'
GROUP BY item.code_version
ORDER BY count DESC
Уведомления
Settings → Notifications → Rules:
- New item — при первом появлении нового типа ошибки
- Occurrence rate — если ошибка превысила N в час
- Regression — если resolved ошибка вернулась
- Deploy — при каждом задеплоенном релизе
Каналы: Slack, PagerDuty, email, webhook (для Telegram через промежуточный сервис).
Сроки
Полная настройка Rollbar для PHP + JavaScript приложения, deploy tracking в CI/CD, source maps, первичные уведомления: 2-4 часа.







