Lewati ke konten utama

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

FileTanggung Jawab
modules/analytics/pages/AnalyticsDashboardPage.tsxOrkestrasi rute analitik utama, pengambilan data, filter, ekspor, dan state chat
modules/analytics/partials/AnalyticsWorkspaceShell.tsxTata letak workspace, batas gulir, dan kontainer chat overlay/sheet
modules/analytics/partials/AnalyticsHeader.tsxJudul analitik, filter, chip filter aktif, penyegaran, ekspor, dan peluncur chat AI
modules/analytics/partials/AnalyticsSummaryCards.tsxGrid kartu ringkasan
modules/analytics/partials/AnalyticsChartsGrid.tsxBagan timeline, prioritas, protokol, dan klasifikasi
modules/analytics/partials/AnalyticsInsightPanels.tsxIP sumber/tujuan teratas, daftar aliran IP, dan panel sensor
modules/analytics/partials/AnalyticsAlertsTable.tsxTabel detail peringatan, kontrol pengurutan, dan paginasi
modules/analytics/chat/AnalyticsChatShell.tsxShell overlay/sheet chat AI, batas ubah ukuran, dan kontainer panel
lib/analyticsFilters.tsPenguraian/pembuatan parameter pencarian URL dan pembantu filter
lib/analyticsChat.tsKlien streaming untuk respons chat analitik bergaya SSE
lib/pdfReport.tsPembuatan ringkasan keamanan dan PDF detail peringatan
lib/api.tsGrup titik akhir opensearch, analyticsChat, dan analyticsVirtualSensors
types/index.tsFilter 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 APIJalur BackendTujuan
getDashboardSummary/opensearch/dashboard/summaryJumlah ringkasan dan analitik yang dikelompokkan
getTotalAlerts/opensearch/alerts/countJumlah peringatan
getAlertsByPriority/opensearch/alerts/by-priorityBagan prioritas
getAlertsByClassification/opensearch/alerts/by-classificationBagan klasifikasi
getAlertsByProtocol/opensearch/alerts/by-protocolBagan protokol
getAlertsTimeline/opensearch/alerts/timelineBagan deret waktu (time-series)
getTopSources/opensearch/alerts/top-sourcesIP sumber teratas
getTopDestinations/opensearch/alerts/top-destinationsIP tujuan teratas
getTopSourceCountries/opensearch/alerts/top-source-countriesData peta negara sumber
getTopDestinationCountries/opensearch/alerts/top-destination-countriesData peta negara tujuan
getAlertsBySensor/opensearch/alerts/by-sensorPeringatan dikelompokkan berdasarkan sensor
getIpFlow/opensearch/alerts/ip-flowAliran sumber-ke-tujuan
getAlertsList/opensearch/alerts/listTabel peringatan terpaginasi
getGeoMap/opensearch/alerts/geo-mapData 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:

FungsiTujuan
generateSecurityReportLaporan analitik ringkasan
generateAlertsReportLaporan 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 APIJalur 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:

  • onStart
  • onChunk
  • onComplete
  • onError
  • 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

SkenarioPerilaku Frontend
Ringkasan/daftar OpenSearch gagalPemuatan berakhir dan kesalahan dicatat atau dimunculkan di UI
URL filter memiliki rentang waktu tidak validKembali ke 15m
Bendera fitur chat bernilai falseUI chat disembunyikan
Status chat menyatakan dinonaktifkanPanel chat melaporkan status dinonaktifkan
Aliran chat mengembalikan 401Auth dibersihkan dan browser mengalihkan ke /
Body aliran chat hilangAnalyticsChatStreamError dilemparkan
Aliran chat dibatalkanisAbortError() mengidentifikasi pembatalan untuk penanganan yang tenang