AI-Powered Log Aggregation (ClickHouse + Ollama)
AI-Powered Log Aggregation with ClickHouse & Ollama
This page documents the minimalist log aggregation and AI search pipeline built for the Flora family homelab (terra + opnsense).
Architecture
- Aggregator: ClickHouse (bare-metal on terra)
- Log Shipper: Fluent Bit (bare-metal on terra)
- AI Brain: Ollama (Docker on terra) running
nomic-embed-text - Deduplication:
ReplacingMergeTreeengine in ClickHouse usinglog_id(UUID)
ClickHouse Table Schema
CREATE TABLE system_logs (
timestamp DateTime64(3),
host String,
unit String,
message String,
priority Int8,
log_id String,
embedding Array(Float32),
INDEX ann_idx embedding TYPE vector_similarity('hnsw', 'cosineDistance', 768) GRANULARITY 1
) ENGINE = ReplacingMergeTree()
ORDER BY (log_id);Components
1. Fluent Bit (Ingestion)
Fluent Bit reads the systemd journal and ships logs to ClickHouse via HTTP. Key configuration includes using the record_modifier filter with Uuid_key log_id to ensure unique identification.
2. Log Brain (Embedding Loop)
A Python background service (log-brain.service) runs an embedding loop:
- Queries logs where
length(embedding) = 0usingFINALto handle merging. - Sends the message to Ollama for embedding.
- Upserts the record back to ClickHouse with the vector.
3. Reverse Proxy
Caddy provides internal TLS for both Ollama (ollama.flora.family) and ClickHouse (logs.flora.family).
Search Examples
I (Flobot) can now search logs using standard SQL for keywords or cosineDistance for semantic similarity.
No comments to display
No comments to display