@echoteam/signoz-react
Version:
SignOz React JS - Library untuk monitoring dan tracing aplikasi React menggunakan OpenTelemetry dan SignOz
262 lines (231 loc) • 7.02 kB
Markdown
# Troubleshooting Guide
## Error: Timeout from BatchSpanProcessor
### Masalah
Jika Anda mendapatkan error seperti ini di console:
```
Unhandled Promise rejection: Timeout ; Zone: <root> ; Task: Promise.then ; Value: Error: Timeout
at BatchSpanProcessorBase.js:132:1
```
### Penyebab
Error ini terjadi ketika BatchSpanProcessor mencoba mengirim spans ke backend SignOz tetapi mengalami timeout. Ini biasanya terjadi karena:
1. Backend SignOz tidak dapat dijangkau
2. Network lambat atau tidak stabil
3. CORS tidak dikonfigurasi dengan benar di backend
4. Timeout terlalu pendek untuk koneksi Anda
### Solusi
#### 1. Verifikasi Backend SignOz Dapat Dijangkau
Pastikan URL SignOz Anda benar dan dapat diakses dari browser:
```javascript
// Test di browser console
fetch('http://your-signoz-url:4318/v1/traces', {
method: 'POST',
headers: { 'Content-Type': 'application/json' }
})
```
#### 2. Periksa CORS Configuration
Pastikan backend SignOz Anda mengizinkan request dari domain frontend Anda. Lihat [BACKEND_CORS_SETUP.md](./BACKEND_CORS_SETUP.md) untuk panduan lengkap.
#### 3. Tingkatkan Timeout (Recommended)
Sejak versi 1.2.10, timeout default sudah ditingkatkan menjadi 60 detik. Jika masih timeout, Anda bisa meningkatkannya lebih lanjut:
```javascript
import { initializeSignOzTracing } from '@echoteam/signoz-react';
initializeSignOzTracing({
serviceName: 'my-app',
serviceVersion: '1.0.0',
environment: 'production',
serviceNamespace: 'frontend',
url: 'http://your-signoz-url:4318/v1/traces',
batchSpanProcessorConfig: {
maxQueueSize: 100,
scheduledDelayMillis: 5000,
exportTimeoutMillis: 120000, // 120 seconds
maxExportBatchSize: 50
}
});
```
#### 4. Suppress Timeout Errors (Jika Tidak Mengganggu)
Sejak versi 1.2.10, timeout errors dari BatchSpanProcessor secara otomatis di-suppress untuk menghindari noise di console. Error ini biasanya aman untuk diabaikan karena spans akan di-retry atau di-queue ulang.
Jika Anda ingin melihat warning untuk timeout ini, aktifkan console logging:
```javascript
initializeSignOzTracing({
// ... config lainnya
enableConsoleLog: true
});
```
#### 5. Gunakan Network yang Lebih Stabil
Jika Anda mengalami timeout secara konsisten, pertimbangkan:
- Menggunakan koneksi internet yang lebih stabil
- Mengurangi ukuran batch dengan `maxExportBatchSize`
- Meningkatkan `scheduledDelayMillis` untuk mengirim spans lebih jarang
### Catatan Penting
- Timeout errors biasanya tidak mempengaruhi fungsionalitas aplikasi Anda
- Spans yang gagal dikirim akan di-queue ulang dan dicoba lagi
- Jika backend SignOz tidak dapat dijangkau sama sekali, spans akan di-drop setelah queue penuh
## Error: Can't resolve 'perf_hooks'
### Masalah
Jika Anda mendapatkan error seperti ini:
```
ERROR in ./node_modules/@echoteam/signoz-react/dist/index.esm.js 1:0-58
Module not found: Error: Can't resolve 'perf_hooks' in '/path/to/node_modules/@echoteam/signoz-react/dist'
```
### Penyebab
Error ini terjadi karena library OpenTelemetry mencoba mengimpor modul Node.js (`perf_hooks`) yang tidak tersedia di browser. Library ini dirancang untuk berjalan di browser, bukan di Node.js.
### Solusi
#### 1. Pastikan menggunakan versi terbaru
Library ini sudah diperbaiki untuk menangani masalah ini. Pastikan Anda menggunakan versi terbaru:
```bash
yarn add @echoteam/signoz-react@latest
```
#### 2. Konfigurasi Webpack (jika menggunakan Webpack)
Tambahkan konfigurasi berikut di `webpack.config.js`:
```javascript
module.exports = {
// ... konfigurasi lainnya
resolve: {
fallback: {
"perf_hooks": false,
"fs": false,
"path": false,
"os": false,
"crypto": false,
"stream": false,
"util": false,
"events": false,
"assert": false,
"buffer": false,
"querystring": false,
"url": false,
"http": false,
"https": false,
"zlib": false,
"tty": false,
"domain": false,
"dns": false,
"dgram": false,
"child_process": false,
"cluster": false,
"module": false,
"net": false,
"readline": false,
"repl": false,
"string_decoder": false,
"sys": false,
"timers": false,
"tls": false,
"v8": false,
"vm": false,
"worker_threads": false
}
}
};
```
#### 3. Konfigurasi Vite (jika menggunakan Vite)
Tambahkan konfigurasi berikut di `vite.config.js`:
```javascript
import { defineConfig } from 'vite';
export default defineConfig({
// ... konfigurasi lainnya
define: {
global: 'globalThis',
},
resolve: {
alias: {
'perf_hooks': false,
'fs': false,
'path': false,
'os': false,
'crypto': false,
'stream': false,
'util': false,
'events': false,
'assert': false,
'buffer': false,
'querystring': false,
'url': false,
'http': false,
'https': false,
'zlib': false,
'tty': false,
'domain': false,
'dns': false,
'dgram': false,
'child_process': false,
'cluster': false,
'module': false,
'net': false,
'readline': false,
'repl': false,
'string_decoder': false,
'sys': false,
'timers': false,
'tls': false,
'v8': false,
'vm': false,
'worker_threads': false
}
}
});
```
#### 4. Konfigurasi Create React App
Jika menggunakan Create React App, Anda mungkin perlu menggunakan `react-app-rewired` untuk mengoverride konfigurasi webpack:
1. Install react-app-rewired:
```bash
yarn add --dev react-app-rewired
```
2. Buat file `config-overrides.js` di root proyek:
```javascript
module.exports = function override(config, env) {
config.resolve.fallback = {
...config.resolve.fallback,
"perf_hooks": false,
"fs": false,
"path": false,
"os": false,
"crypto": false,
"stream": false,
"util": false,
"events": false,
"assert": false,
"buffer": false,
"querystring": false,
"url": false,
"http": false,
"https": false,
"zlib": false,
"tty": false,
"domain": false,
"dns": false,
"dgram": false,
"child_process": false,
"cluster": false,
"module": false,
"net": false,
"readline": false,
"repl": false,
"string_decoder": false,
"sys": false,
"timers": false,
"tls": false,
"v8": false,
"vm": false,
"worker_threads": false
};
return config;
};
```
3. Update script di `package.json`:
```json
{
"scripts": {
"start": "react-app-rewired start",
"build": "react-app-rewired build",
"test": "react-app-rewired test"
}
}
```
### Catatan Penting
- Library ini dirancang untuk berjalan di browser, bukan di Node.js
- Polyfill sudah disertakan untuk menangani modul Node.js yang tidak tersedia di browser
- Pastikan environment variables untuk SignOz sudah dikonfigurasi dengan benar
### Masalah Lainnya
Jika Anda masih mengalami masalah, silakan buat issue di repository ini dengan detail error yang lengkap.