Installing BlackHole Search
BlackHole Search cung cấp giải pháp tích hợp đầy đủ để khám phá, tìm hiểu và truy vấn dữ liệu quan sát của bạn một cách trực quan. Bạn có thể cài đặt BlackHole Search với bất kỳ tùy chọn nào sau đây:
- Docker
- Tarball
- RPM
- Debian
- Helm
- Windows
Browser compatibility
BlackHole Search hỗ trợ các trình duyệt web sau:
- Chrome
- Firefox
- Safari
- Edge (Chromium) Các trình duyệt khác dựa trên Chromium cũng có thể hoạt động. Internet Explorer và Microsoft Edge Legacy không được hỗ trợ.
Node.js compatibility
BlackHole Search yêu cầu cài đặt Node.js runtime binary để chạy. Một gói cài đặt có sẵn trong các gói phân phối có sẵn trên trang tải xuống BlackHole. Để sử dụng tệp nhị phân thời gian chạy Node.js khác với tệp có trong các gói phân phối, hãy làm theo các bước sau:
- Tải xuống và cài đặt Node.js; các phiên bản tương thích là
>=14.20.1 <19 - Đặt đường dẫn cài đặt tới biến môi trường NODE_HOME hoặc NODE_OSD_HOME.
- On UNIX, if Node.js is installed to /usr/local/nodejs and the runtime binary is /usr/local/nodejs/bin/node:
export NODE_HOME=/usr/local/nodejs
- If Node.js is installed using NVM and the runtime binary is /Users/user/.nvm/versions/node/v18.19.0/bin/node:
export NODE_HOME=/Users/user/.nvm/versions/node/v18.19.0 # or, if NODE_HOME is used for something else: export NODE_OSD_HOME=/Users/user/.nvm/versions/node/v18.19.0
- On Windows, if Node.js is installed to C:\Program Files\nodejs and the runtime binary is C:\Program Files\nodejs\node.exe:
set "NODE_HOME=C:\Program Files\nodejs"
# or using PowerShell:
$Env:NODE_HOME = 'C:\Program Files\nodejs'Tham khảo tài liệu của hệ điều hành để thực hiện thay đổi liên tục đối với các biến môi trường. Tập lệnh khởi động BlackHole Search, bin/blackhole-search, sẽ tìm kiếm tệp nhị phân thời gian chạy Node.js bằng NODE_OSD_HOME, sau đó là NODE_HOME, trước khi sử dụng các tệp nhị phân đi kèm với các gói phân phối. Nếu không tìm thấy tệp nhị phân thời gian chạy Node.js khả dụng, tập lệnh khởi động sẽ cố gắng tìm một tệp trong PATH trên toàn hệ thống trước khi thất bại.
Configuration
Để tìm hiểu cách cấu hình TLS cho BlackHole Search, hãy xem Configure TLS.
Run BlackHole Search using Docker and Docker Compose
Bạn có thể sử dụng Docker hoặc Docker Compose để chạy BlackHole Search. Phương pháp Docker Compose dễ dàng hơn vì bạn có thể định nghĩa toàn bộ cấu hình trong một tệp duy nhất.
Chạy BlackHole Search bằng Docker
Nếu bạn đã xác định mạng của mình bằng docker network, hãy tạo bh-net và khởi động BlackHole bằng lệnh sau:
docker run -d --name blackhole-node -p 9200:9200 -p 9600:9600 --network bh-net -e "discovery.type=single-node" -e "BLACKHOLE_INITIAL_ADMIN_PASSWORD=<admin_password>" ghcr.io/gcsclabs/blackhole-backend:latest- Tạo tệp cấu hình blackhole_search.yml:
server.name: blackhole_search
server.host: "0.0.0.0"
server.customResponseHeaders : { "Access-Control-Allow-Credentials" : "true" }# Disabling HTTPS on BlackHole Search
server.ssl.enabled: false
blackhole.hosts: ["https://blackhole-node:9200"] # Using the BlackHole container name
blackhole.ssl.verificationMode: none
blackhole.username: kibanaserver
blackhole.password: kibanaserver
blackhole.requestHeadersWhitelist: ["securitytenant","Authorization"]
# Multitenancy
blackhole_security.multitenancy.enabled: true
blackhole_security.multitenancy.tenants.preferred: ["Private", "Global"]
blackhole_security.readonly_mode.roles: ["kibana_read_only"]- Thực hiện lệnh sau để bắt đầu BlackHole Search
docker run -d --name bhd \
--network bh-net \
-p 3000:3000 \
-v ./blackhole_search.yml:/usr/share/blackhole-search/config/blackhole_search.yml \
ghcr.io/gcsclabs/siem-dashboards:latestChạy BlackHole Search bằng Docker Compose
Sử dụng các bước sau để chạy BlackHole Search bằng Docker Compose:
- Tạo tệp docker-compose.yml phù hợp với môi trường của bạn. Tệp mẫu bao gồm BlackHole Search có sẵn trên trang cài đặt BlackHole Docker. Bạn có thể truyền tệp blackhole_search.yml tùy chỉnh vào vùng chứa trong tệp Docker Compose. Để biết thêm thông tin, hãy xem Ví dụ Docker Compose hoàn chỉnh với cấu hình tùy chỉnh.
- Tạo tệp blackhole_search.yml:
server.name: blackhole_search
server.host: "0.0.0.0"
server.customResponseHeaders : { "Access-Control-Allow-Credentials" : "true" }
# Disabling HTTPS on BlackHole Search
server.ssl.enabled: false
blackhole.ssl.verificationMode: none
blackhole.username: kibanaserver
blackhole.password: kibanaserver
blackhole.requestHeadersWhitelist: ["securitytenant","Authorization"]
# Multitenancy
blackhole_security.multitenancy.enabled: true
blackhole_security.multitenancy.tenants.preferred: ["Private", "Global"]
blackhole_security.readonly_mode.roles: ["kibana_read_only"]Thiết lập blackhole.hosts phải được cấu hình nếu bạn không truyền nó dưới dạng biến môi trường. Để biết ví dụ về cách cấu hình thiết lập này, hãy xem. Ví dụ Docker Compose hoàn chỉnh với cấu hình tùy chỉnh. 3. Chạy docker compose up Đợi các container khởi động. Sau đó, xem tài liệu Tìm kiếm BlackHole 4. Khi hoàn tất, hãy chạy docker compose down.
Chạy BlackHole Search bằng tarball
- Tải xuống tarball tại đây.
- Giải nén tệp TAR vào một thư mục và chuyển đến thư mục đó:
# x64
tar -zxf blackhole-dashboards-linux-x64.tar.gz
cd blackhole-dashboards- Nếu muốn, hãy sửa đổi config/blackhole_search.yml, sau đây là config demo.
# ============================================================
# Blackhole Dashboards – Demo Configuration File
# ============================================================
# ------------------------------------------------------------
# Server connection settings
# ------------------------------------------------------------
server.host: "0.0.0.0"
server.port: 3000
# ------------------------------------------------------------
# Enable HTTPS for the Dashboards server
# ------------------------------------------------------------
server.ssl.enabled: true
server.ssl.certificate: /path/to/certs/client.pem
server.ssl.key: /path/to/certs/client-key.pem
# ------------------------------------------------------------
# Backend (Blackhole) connection settings
# ------------------------------------------------------------
blackhole.hosts:
- "https://localhost:9200"
blackhole.username: "kibanaserver"
blackhole.password: "kibanaserver"
# ------------------------------------------------------------
# TLS / SSL settings for backend connection
# ------------------------------------------------------------
blackhole.ssl.verificationMode: full
blackhole.ssl.certificateAuthorities:
- /path/to/certs/root-ca.pem
blackhole.ssl.certificate: /path/to/certs/client.pem
blackhole.ssl.key: /path/to/certs/client-key.pem
# Ignore version mismatch between Dashboards and backend
blackhole.ignoreVersionMismatch: true
# ------------------------------------------------------------
# Allowed request headers
# ------------------------------------------------------------
blackhole.requestHeadersAllowlist:
- securitytenant
- Authorization
# ------------------------------------------------------------
# Security plugin settings
# ------------------------------------------------------------
blackhole_security.cookie.secure: true
# Multi-tenancy configuration
blackhole_security.multitenancy.enabled: true
blackhole_security.multitenancy.tenants.enable_global: true
blackhole_security.multitenancy.tenants.enable_private: true
blackhole_security.multitenancy.tenants.preferred:
- Private
- Global
blackhole_security.multitenancy.enable_filter: false
# Read-only roles
blackhole_security.readonly_mode.roles:
- kibana_read_only
# Login UI customization
blackhole_security.ui.basicauth.login.title: "Login into BlackHole Dashboard"
# ------------------------------------------------------------
# UI / UX settings
# ------------------------------------------------------------
home.disableWelcomeScreen: true
# ------------------------------------------------------------
# External services (demo example)
# ------------------------------------------------------------
device_management.api.base_url: "http://blackhole-devices-management:3000"
# ------------------------------------------------------------
# Branding configuration
# ------------------------------------------------------------
blackholeDashboards.branding:
applicationTitle: "Blackhole"
useExpandedHeader: false- Run BlackHole Search:
./bin/blackhole-searchCấu hình TLS cho Blackhole Dashboards
Theo mặc định, để thuận tiện cho việc thử nghiệm và bắt đầu sử dụng, Blackhole Dashboards chạy trên HTTP.
Để bật TLS cho HTTPS, hãy cập nhật các thiết lập sau trong file blackhole_dashboards.yml.
Các thiết lập TLS
| Thiết lập | Mô tả |
|---|---|
server.ssl.enabled | Bật giao tiếp SSL giữa máy chủ Blackhole Dashboards và trình duyệt web của người dùng. Đặt true cho HTTPS hoặc false cho HTTP. |
server.ssl.supportedProtocols | Chỉ định danh sách các giao thức TLS được hỗ trợ. Các giá trị có thể gồm TLSv1, TLSv1.1, TLSv1.2, TLSv1.3. Mặc định: ['TLSv1.1', 'TLSv1.2', 'TLSv1.3']. |
server.ssl.cipherSuites | Chỉ định danh sách các bộ mã TLS. Không bắt buộc. |
server.ssl.certificate | Khi server.ssl.enabled: true, chỉ định đường dẫn đầy đủ tới chứng chỉ máy chủ PEM hợp lệ cho Blackhole Dashboards. |
server.ssl.key | Khi server.ssl.enabled: true, chỉ định đường dẫn đầy đủ tới khóa của chứng chỉ máy chủ. |
server.ssl.keyPassphrase | Mật khẩu của khóa. Bỏ qua nếu khóa không có mật khẩu. Không bắt buộc. |
server.ssl.keystore.path | Sử dụng file JKS hoặc PKCS12/PFX thay cho chứng chỉ và khóa PEM. |
server.ssl.keystore.password | Mật khẩu của keystore. Bắt buộc. |
server.ssl.clientAuthentication | Chế độ xác thực TLS phía client: none, optional, hoặc required. Mặc định: none. |
server.ssl.certificateAuthorities | Đường dẫn đầy đủ tới một hoặc nhiều chứng chỉ CA (dạng mảng) dùng cho xác thực client. Bắt buộc nếu clientAuthentication là optional hoặc required. |
server.ssl.truststore.path | Sử dụng trust store JKS hoặc PKCS12/PFX thay cho chứng chỉ CA dạng PEM. |
server.ssl.truststore.password | Mật khẩu của trust store. Bắt buộc. |
blackhole.ssl.verificationMode | Thiết lập giao tiếp giữa Blackhole và Blackhole Dashboards. Giá trị: full, certificate, none. Khuyến nghị dùng full. |
blackhole.ssl.certificateAuthorities | Đường dẫn đầy đủ tới một hoặc nhiều chứng chỉ CA tạo thành chuỗi tin cậy cho cụm Blackhole. |
blackhole.ssl.truststore.path | Sử dụng trust store JKS hoặc PKCS12/PFX thay cho chứng chỉ CA dạng PEM. |
blackhole.ssl.truststore.password | Mật khẩu của trust store. Bắt buộc. |
blackhole.ssl.alwaysPresentCertificate | Nếu true, luôn gửi chứng chỉ client tới cụm Blackhole (cần thiết khi bật mTLS). Mặc định: false. |
blackhole.ssl.certificate | Khi alwaysPresentCertificate: true, chỉ định đường dẫn tới chứng chỉ client cho cụm Blackhole. |
blackhole.ssl.key | Khi alwaysPresentCertificate: true, chỉ định đường dẫn tới khóa của chứng chỉ client. |
blackhole.ssl.keyPassphrase | Mật khẩu của khóa. Bỏ qua nếu khóa không có mật khẩu. Không bắt buộc. |
blackhole.ssl.keystore.path | Sử dụng keystore JKS hoặc PKCS12/PFX thay cho chứng chỉ và khóa PEM. |
blackhole.ssl.keystore.password | Mật khẩu của keystore. Bắt buộc. |
blackhole_security.cookie.secure | Nếu bật TLS cho Blackhole Dashboards, đặt true. Với HTTP, đặt false. |
blackhole_security.session.keepalive | Xác định TTL của phiên có được gia hạn sau mỗi hoạt động người dùng hay không. Mặc định: true. |
blackhole_security.session.ttl | Thời gian tồn tại (TTL) của phiên người dùng, tính bằng mili giây. Mặc định: 3600000 (1 giờ). |
Ví dụ cấu hình demo
# ============================================================
# Blackhole Dashboards – Demo Configuration File
# ============================================================
# ------------------------------------------------------------
# Server connection settings
# ------------------------------------------------------------
server.host: "0.0.0.0"
server.port: 3000
# ------------------------------------------------------------
# Enable HTTPS for the Dashboards server
# ------------------------------------------------------------
server.ssl.enabled: true
server.ssl.certificate: /path/to/certs/client.pem
server.ssl.key: /path/to/certs/client-key.pem
# ------------------------------------------------------------
# Backend (Blackhole) connection settings
# ------------------------------------------------------------
blackhole.hosts:
- "https://localhost:9200"
blackhole.username: "kibanaserver"
blackhole.password: "kibanaserver"
# ------------------------------------------------------------
# TLS / SSL settings for backend connection
# ------------------------------------------------------------
blackhole.ssl.verificationMode: full
blackhole.ssl.certificateAuthorities:
- /path/to/certs/root-ca.pem
blackhole.ssl.certificate: /path/to/certs/client.pem
blackhole.ssl.key: /path/to/certs/client-key.pem
# Ignore version mismatch between Dashboards and backend
blackhole.ignoreVersionMismatch: true
# ------------------------------------------------------------
# Allowed request headers
# ------------------------------------------------------------
blackhole.requestHeadersAllowlist:
- securitytenant
- Authorization
# ------------------------------------------------------------
# Security plugin settings
# ------------------------------------------------------------
blackhole_security.cookie.secure: true
# Multi-tenancy configuration
blackhole_security.multitenancy.enabled: true
blackhole_security.multitenancy.tenants.enable_global: true
blackhole_security.multitenancy.tenants.enable_private: true
blackhole_security.multitenancy.tenants.preferred:
- Private
- Global
blackhole_security.multitenancy.enable_filter: false
# Read-only roles
blackhole_security.readonly_mode.roles:
- kibana_read_only
# Login UI customization
blackhole_security.ui.basicauth.login.title: "Login into BlackHole Dashboard"
# ------------------------------------------------------------
# UI / UX settings
# ------------------------------------------------------------
home.disableWelcomeScreen: true
# ------------------------------------------------------------
# External services (demo example)
# ------------------------------------------------------------
device_management.api.base_url: "http://blackhole-devices-management:3000"
# ------------------------------------------------------------
# Branding configuration
# ------------------------------------------------------------
blackholeDashboards.branding:
applicationTitle: "Blackhole"
useExpandedHeader: falseDocker
Nếu bạn sử dụng tùy chọn cài đặt bằng Docker, bạn có thể truyền một file blackhole_dashboards.yml tùy chỉnh vào container.
Tham khảo thêm trong tài liệu cài đặt Docker.
Truy cập
Sau khi bật các thiết lập trên và khởi động ứng dụng, bạn có thể truy cập Blackhole Dashboards tại:
https://localhost:3000Nếu sử dụng chứng chỉ tự ký, trình duyệt có thể hiển thị cảnh báo bảo mật.
Để tránh cảnh báo (hoặc vấn đề tương thích trình duyệt), nên sử dụng chứng chỉ được cấp bởi một CA đáng tin cậy.
Cấu hình License
License là tệp có định dạng .license được cung cấp bởi quản trị viên. License là bắt buộc để BlackHole Search có thể thực hiện các thao tác insert dữ liệu vào hệ thống.
Khi nào cần upload License
Bạn cần upload License trong các trường hợp sau:
- License chưa được cài đặt
- License đã hết hạn
- Cần thay đổi License hiện tại
Các bước upload License
Thực hiện theo các bước sau để upload License:
Truy cập License Management: Điều hướng đến đường dẫn
app/license-managementtrong giao diện BlackHole Search.Mở hộp thoại Add License: Bấm vào nút "+ Add License" ở góc trên bên phải.
Chọn tệp License:
- Kéo thả tệp License vào vùng upload, hoặc
- Bấm vào vùng "Choose file or drag & drop" để chọn tệp từ máy tính
Xác nhận upload: Bấm nút "Upload License" để hoàn tất.

Nếu upload thành công, hệ thống sẽ hiển thị thông báo "License uploaded successfully".
Kết nối với Device Management
Device Management là dịch vụ quản lý tập trung cho xác thực và cấu hình của các Agent và Forwarder. Để BlackHole Search có thể tương tác với Device Management, bạn cần cấu hình URL của dịch vụ trong file blackhole_search.yml.
Cấu hình kết nối
Thêm hoặc cập nhật thiết lập sau trong file blackhole_search.yml:
# ------------------------------------------------------------
# External services - Device Management
# ------------------------------------------------------------
device_management.api.base_url: "http://blackhole-devices-management:3000"Trong đó:
blackhole-devices-managementlà tên container hoặc hostname của dịch vụ Device Management3000là cổng mặc định của Device Management API
Lưu ý về mạng
Khi sử dụng Docker, đảm bảo BlackHole Search và Device Management cùng nằm trong một Docker network để có thể giao tiếp với nhau. Nếu sử dụng Docker Compose, các service sẽ tự động nằm trong cùng một network.
Để biết cách cài đặt Device Management, hãy xem Hướng dẫn cài đặt Device Management.
Chạy BlackHole Dashboards như một dịch vụ với systemd
Tài liệu này hướng dẫn chi tiết cách chạy BlackHole Dashboards như một dịch vụ nền (daemon) được quản lý bởi systemd trên Linux.
Sau khi hoàn tất, bạn có thể quản lý BlackHole Dashboards bằng các lệnh chuẩn:
systemctl start blackhole-dashboards
systemctl stop blackhole-dashboards
systemctl status blackhole-dashboards
systemctl enable blackhole-dashboardsHướng dẫn này giả định BlackHole Dashboards được cài đặt bằng tarball tại:
/opt/blackhole-dashboards-3.1.0-SNAPSHOT-linux-x64Nếu bạn cài ở vị trí khác, hãy đổi toàn bộ đường dẫn tương ứng.
Giả định & phạm vi
Với production:
- Dùng Docker / Kubernetes
- Hoặc triển khai phía sau reverse proxy (Nginx)
Tổng quan kiến trúc
flowchart LR
systemd -->|start/stop| Dashboards
Dashboards -->|HTTP/HTTPS| BlackHole
Dashboards --> Browser- Dashboards là Node.js application
- systemd quản lý vòng đời tiến trình
- Log được ghi vào
journalctl - Không yêu cầu quyền root
Bước 0: Di chuyển BlackHole Dashboards vào /opt
Giả sử bạn đã giải nén tarball tại:
~/blackhole-dashboards-3.1.0-SNAPSHOT-linux-x64/Di chuyển vào vị trí chuẩn:
sudo mv ~/blackhole-dashboards-3.1.0-SNAPSHOT-linux-x64 /opt/blackhole-dashboardsBước 1: Tạo user hệ thống cho Dashboards
sudo adduser \
--system \
--shell /bin/bash \
-U \
--no-create-home \
blackholeBước 2: Gán quyền cho thư mục Dashboards
sudo chown -R blackhole:blackhole /opt/blackhole-dashboardsBước 3: Tạo file systemd service
sudo vi /etc/systemd/system/blackhole-dashboards.serviceBước 4: Cấu hình blackhole-dashboards.service
Toàn bộ nội dung file
[Unit]
Description=BlackHole Dashboards
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
WorkingDirectory=/opt/blackhole-dashboards
ExecStart=/opt/blackhole-dashboards/bin/blackhole-dashboards
User=blackhole
Group=blackhole
Environment=NODE_ENV=production
StandardOutput=journal
StandardError=inherit
Restart=on-failure
RestartSec=10
LimitNOFILE=65535
TimeoutStartSec=60
[Install]
WantedBy=multi-user.targetGiải thích chi tiết
[Unit]
| Cấu hình | Ý nghĩa |
|---|---|
network-online.target | Đảm bảo backend sẵn sàng |
[Service] – Node.js app
| Cấu hình | Ý nghĩa |
|---|---|
Type=simple | Node.js chạy foreground |
ExecStart | Script khởi động Dashboards |
Restart=on-failure | Tự restart khi crash |
NODE_ENV=production | Chế độ production |
Log xem bằng:
journalctl -u blackhole-dashboards -fUser & Permission
Dashboards:
- không cần root
- chỉ cần quyền đọc config và bind port (>1024)
Bước 5: Reload systemd
sudo systemctl daemon-reloadBước 6: Enable service
sudo systemctl enable blackhole-dashboards.serviceBước 7: Khởi động Dashboards
sudo systemctl start blackhole-dashboardsBước 8: Kiểm tra trạng thái & log
=== "Trạng thái" bash systemctl status blackhole-dashboards
=== "Log realtime" bash journalctl -u blackhole-dashboards -f
Checklist khi Dashboards không start
- [ ] BlackHole backend đang chạy
- [ ]
blackhole_dashboards.ymlcấu hình đúng endpoint - [ ] Port 3000 chưa bị chiếm
- [ ] Node.js binary tồn tại trong
/bin - [ ] Quyền thư mục đúng
Ghi chú cho production
Không áp dụng cho tarball.
- Chạy Dashboards phía sau Nginx
- Bật HTTPS
- Bật authentication
- Giới hạn memory Node.js
- Dùng Docker/Kubernetes nếu có thể
