Analitik dan Chat AI
Pendahuluan
Dokumen ini menjelaskan dasbor analitik keamanan, integrasi API OpenSearch, filter URL, ekspor PDF, dan chat AI analitik opsional.
File Utama
| File | Tanggung Jawab |
|---|---|
modules/analytics/pages/AnalyticsDashboardPage.tsx | Orkestrasi rute analitik utama, pengambilan data, filter, ekspor, dan state chat |
modules/analytics/partials/AnalyticsWorkspaceShell.tsx | Tata letak workspace, batas gulir, dan kontainer chat overlay/sheet |
modules/analytics/partials/AnalyticsHeader.tsx | Judul analitik, filter, chip filter aktif, penyegaran, ekspor, dan peluncur chat AI |
modules/analytics/partials/AnalyticsSummaryCards.tsx | Grid kartu ringkasan |
modules/analytics/partials/AnalyticsChartsGrid.tsx | Bagan timeline, prioritas, protokol, dan klasifikasi |
modules/analytics/partials/AnalyticsInsightPanels.tsx | IP sumber/tujuan teratas, daftar aliran IP, dan panel sensor |
modules/analytics/partials/AnalyticsAlertsTable.tsx | Tabel detail peringatan, kontrol pengurutan, dan paginasi |
modules/analytics/chat/AnalyticsChatShell.tsx | Shell overlay/sheet chat AI, batas ubah ukuran, dan kontainer panel |
lib/analyticsFilters.ts | Penguraian/pembuatan parameter pencarian URL dan pembantu filter |
lib/analyticsChat.ts | Klien streaming untuk respons chat analitik bergaya SSE |
lib/pdfReport.ts | Pembuatan ringkasan keamanan dan PDF detail peringatan |
lib/api.ts | Grup titik akhir opensearch, analyticsChat, dan analyticsVirtualSensors |
types/index.ts | Filter analitik, payload chat, sitasi, dan tipe sensor virtual |
Rute Analitik
- Rute:
/dashboard/analytics - Komponen:
AnalyticsDashboard
Dasbor merender:
- Pemilih rentang waktu.
- Filter sensor virtual.
- Filter prioritas, protokol, klasifikasi, IP sumber, dan IP tujuan.
- Kartu ringkasan.
- Bagan prioritas/protokol/klasifikasi peringatan.
- Bagan timeline.
- Sumber dan tujuan teratas.
- Visualisasi/tabel aliran IP.
- Daftar peringatan dengan pengurutan dan paginasi.
- Tindakan ekspor PDF.
- Titik masuk chat AI opsional.
Model Filter
Rentang waktu yang didukung adalah:
'15m' | '1h' | '6h' | '24h' | '7d' | '30d'
Filter yang didukung adalah:
interface AnalyticsDashboardFilters {
virtualSensorId: string | null;
priority: string[];
protocol: string[];
classification: string[];
srcAddr: string[];
dstAddr: string[];
}
analyticsFilters.ts menjaga sinkronisasi antara state dasbor dan URL:
parseAnalyticsSearchParams()buildAnalyticsSearchParams()buildAnalyticsRequestParams()toggleAnalyticsFilterValue()hasActiveAnalyticsFilters()clearAnalyticsFilters()
Filter array diserialisasikan sebagai parameter kueri yang diulang.
Panggilan API OpenSearch
Dasbor analitik menggunakan api.opensearch.
| Metode API | Jalur Backend | Tujuan |
|---|---|---|
getDashboardSummary | /opensearch/dashboard/summary | Jumlah ringkasan dan analitik yang dikelompokkan |
getTotalAlerts | /opensearch/alerts/count | Jumlah peringatan |
getAlertsByPriority | /opensearch/alerts/by-priority | Bagan prioritas |
getAlertsByClassification | /opensearch/alerts/by-classification | Bagan klasifikasi |
getAlertsByProtocol | /opensearch/alerts/by-protocol | Bagan protokol |
getAlertsTimeline | /opensearch/alerts/timeline | Bagan deret waktu (time-series) |
getTopSources | /opensearch/alerts/top-sources | IP sumber teratas |
getTopDestinations | /opensearch/alerts/top-destinations | IP tujuan teratas |
getTopSourceCountries | /opensearch/alerts/top-source-countries | Data peta negara sumber |
getTopDestinationCountries | /opensearch/alerts/top-destination-countries | Data peta negara tujuan |
getAlertsBySensor | /opensearch/alerts/by-sensor | Peringatan dikelompokkan berdasarkan sensor |
getIpFlow | /opensearch/alerts/ip-flow | Aliran sumber-ke-tujuan |
getAlertsList | /opensearch/alerts/list | Tabel peringatan terpaginasi |
getGeoMap | /opensearch/alerts/geo-map | Data peta peringatan geografis |
Tabel Peringatan (Alert Table)
Tabel ini mendukung state yang dikontrol klien untuk:
- Halaman saat ini.
- Ukuran halaman melalui payload respons backend.
- Field pengurutan.
- Arah pengurutan.
- Penyorotan dari sitasi chat AI.
Field pengurutan yang didukung dalam state komponen:
'timestamp' | 'priority' | 'src_addr' | 'dst_addr'
Jalur pengambilan daftar peringatan menggunakan rentang waktu saat ini, filter, halaman, dan opsi pengurutan.
Ekspor PDF
Ekspor PDF diimplementasikan di src/lib/pdfReport.ts.
Laporan yang didukung:
| Fungsi | Tujuan |
|---|---|
generateSecurityReport | Laporan analitik ringkasan |
generateAlertsReport | Laporan daftar peringatan detail |
AnalyticsDashboard dapat mengambil semua halaman peringatan untuk diekspor menggunakan ALERTS_EXPORT_PAGE_SIZE = 200, lalu meneruskan daftar yang terkumpul ke pembuat laporan.
Bendera Fitur (Feature Flag) Chat AI
Chat AI analitik hanya muncul jika:
appConfig.VITE_ANALYTICS_AI_CHAT_ENABLED === true
Sheet chat tetap memanggil status backend dengan:
api.analyticsChat.getStatus()
Hal ini memungkinkan bendera fitur UI dan kapabilitas backend untuk bersama-sama menentukan ketersediaan.
API Chat AI
Metode API percakapan yang disimpan:
| Metode API | Jalur Backend |
|---|---|
getStatus | /analytics/chat/status |
listConversations | /analytics/chat/conversations |
createConversation | /analytics/chat/conversations |
getConversation | /analytics/chat/conversations/:conversationId |
deleteConversation | /analytics/chat/conversations/:conversationId |
Titik akhir streaming: POST /analytics/chat/conversations/:conversationId/stream
Klien streaming mendukung:
onStartonChunkonCompleteonError- Pembatalan melalui
AbortSignal
Sitasi dan Konteks
Respons chat AI dapat mencakup sitasi dengan bentuk berikut:
interface AnalyticsChatCitation {
sourceId: string;
label: string;
panel: 'summary' | 'top-sources' | 'top-destinations' | 'alerts-list' | 'ip-flow';
detail: string;
}
Dasbor dapat menggunakan sitasi untuk memandu pengguna kembali ke panel analitik yang relevan atau baris peringatan tertentu.
Mode Kegagalan
| Skenario | Perilaku Frontend |
|---|---|
| Ringkasan/daftar OpenSearch gagal | Pemuatan berakhir dan kesalahan dicatat atau dimunculkan di UI |
| URL filter memiliki rentang waktu tidak valid | Kembali ke 15m |
| Bendera fitur chat bernilai false | UI chat disembunyikan |
| Status chat menyatakan dinonaktifkan | Panel chat melaporkan status dinonaktifkan |
Aliran chat mengembalikan 401 | Auth dibersihkan dan browser mengalihkan ke / |
| Body aliran chat hilang | AnalyticsChatStreamError dilemparkan |
| Aliran chat dibatalkan | isAbortError() mengidentifikasi pembatalan untuk penanganan yang tenang |