Quickwit được xây dựng từ đầu để lập chỉ mục dữ liệu phi cấu trúc một cách hiệu quả và dễ dàng tìm kiếm dữ liệu trên các hệ thống lưu trữ đám mây. Ngoài ra, Quickwit hỗ trợ giao thức OpenTelemetry gRPC và HTTP (chỉ protobuf) ngay từ đầu và cung cấp một API REST có thể nhận bất kỳ định dạng JSON nào của nhật ký. Điều này khiến Quickwit trở thành lựa chọn lý tưởng cho việc quản lý nhật ký!
Gửi nhật ký sử dụng OTEL Collector
Nếu bạn đã có bộ thu thập OpenTelemetry Collector của riêng mình và muốn xuất nhật ký đến Quickwit, bạn cần cấu hình một exporter OLTP gRPC mới trong file config.yaml:
Đối với macOS/Windows
receivers:
otlp:
protocols:
grpc:
http:
processors:
batch:
exporters:
otlp/log_target:
endpoint: host.docker.internal:7281
tls:
insecure: true
# Mặc định, nhật ký sẽ được gửi đến otel-logs-v0_7.
# Bạn có thể tùy chỉnh ID chỉ mục bằng cách thiết lập tiêu đề này.
# headers:
# qw-log-index: otel-logs-v0_7
service:
pipelines:
logs:
receivers: [otlp]
processors: [batch]
exporters: [otlp/log_target]
Đối với Linux
receivers:
otlp:
protocols:
grpc:
http:
processors:
batch:
exporters:
otlp/log_target:
endpoint: 127.0.0.1:7281
tls:
insecure: true
# Mặc định, nhật ký sẽ được gửi đến otel-logs-v0_7.
# Bạn có thể tùy chỉnh ID chỉ mục bằng cách thiết lập tiêu đề này.
# headers:
# qw-log-index: otel-logs-v0_7
service:
pipelines:
logs:
receivers: [otlp]
processors: [batch]
exporters: [otlp/log_target]
Kiểm tra cấu hình OTEL của bạn
- Cài đặt và khởi động một server Quickwit:
./quickwit run
- Sử dụng cấu hình trước đó để khởi động một collector:
Đối với macOS/Windows
docker run -v ${PWD}/collector-config.yaml:/etc/otelcol/config.yaml -p 4317:4317 -p 4318:4318 -p 7281:7281 otel/opentelemetry-collector
Đối với Linux
docker run -v ${PWD}/collector-config.yaml:/etc/otelcol/config.yaml --network=host -p 4317:4317 -p 4318:4318 -p 7281:7281 otel/opentelemetry-collector
- Sử dụng cURL để gửi một nhật ký tới collector của bạn:
curl -XPOST "http://localhost:4318/v1/logs" -H "Content-Type: application/json" \
--data-binary @- << EOF
{
"resource_logs": [
{
"resource": {
"attributes": [
{
"key": "service.name",
"value": {
"stringValue": "test-curl"
}
}
]
},
"scope_logs": [
{
"scope": {
"name": "kiem-tra"
},
"log_records": [
{
"time_unix_nano": "1678974011000000000",
"observed_time_unix_nano": "1678974011000000000",
"name": "kiểm_tra",
"severity_text": "INFO"
}
]
}
]
}
]
}
EOF
Bạn nên thấy nhật ký tương tự như sau trên server Quickwit:
2023-03-16T13:44:09.369Z INFO indexer: new-split split_id="01GVNAKT5TQW0T2QGA245XCMTJ" partition_id=6444214793425557444
Điều này có nghĩa là Quickwit đã nhận được nhật ký và tạo một shard mới. Trước khi tìm kiếm nhật ký, hãy chờ shard được phát hành.
Gửi nhật ký K8s thông qua OTEL
Hướng dẫn này sẽ giúp bạn mở khóa khả năng tìm kiếm nhật ký trên các cluster Kubernetes. Chúng ta sẽ bắt đầu bằng cách triển khai Quickwit và OTEL Collector bằng Helm, sau đó tìm hiểu cách lập chỉ mục và tìm kiếm những nhật ký này.
Yêu cầu
Hoàn thành hướng dẫn này, bạn cần có:
- Một cluster Kubernetes.
- Công cụ dòng lệnh kubectl.
- Công cụ dòng lệnh Helm.
- Truy cập vào lưu trữ đối tượng (như AWS S3, GCS, Azure Blob Storage hoặc Scaleway) để lưu trữ dữ liệu chỉ mục.
Cài đặt sử dụng Helm
Chúng ta sẽ tạo một namespace để cô lập thử nghiệm của mình và thiết lập nó làm namespace mặc định:
kubectl create namespace demo-tutorial
kubectl config set-context --current --namespace=demo-tutorial
Rồi thêm các kho Helm của Quickwit và Otel:
helm repo add quickwit https://helm.quickwit.io
helm repo add open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
Bây giờ bạn sẽ thấy hai kho này trong Helm:
helm repo list
NAME URL
quickwit https://helm.quickwit.io
open-telemetry https://open-telemetry.github.io/opentelemetry-helm-charts
Triển khai Quickwit
Tạo một cấu hình chart cơ bản:
export AWS_REGION=us-east-1
export AWS_ACCESS_KEY_ID=XXXX
export AWS_SECRET_ACCESS_KEY=XXXX
export INDEX_ROOT_URI=s3://your-bucket/indexes
# Tạo file cấu hình Quickwit.
echo "
searcher:
replicaCount: 1
indexer:
replicaCount: 1
metastore:
replicaCount: 1
janitor:
enabled: true
control_plane:
enabled: true
environment:
NO_COLOR: 1
config:
storage:
s3:
region: ${AWS_REGION}
access_key_id: ${AWS_ACCESS_KEY_ID}
secret_access_key/XMLSchema: ${AWS_SECRET_ACCESS_KEY}
metastore_uri: ${INDEX_ROOT_URI}
default_index_root_uri: ${INDEX_ROOT_URI}
indexer:
enable_otlp_endpoint: true
" > quickwit-values.yaml
Trước khi cài đặt chart Quickwit, đảm bảo bạn có quyền truy cập vào S3 và không có lỗi chính tả trong biến INDEX_ROOT_URI. Điều này có thể dễ dàng thực hiện bằng cách sử dụng CLI aws với lệnh ls đơn giản:
aws s3 ls ${INDEX_ROOT_URI}
Nếu CLI không trả về lỗi, bạn có thể cài đặt chart:
helm install quickwit quickwit/quickwit -f quickwit-values.yaml
Vài giây sau, bạn sẽ thấy các pod đang chạy dịch vụ Quickwit:
kubectl get pods
NAME READY STATUS RESTARTS AGE
quickwit-control-plane-7fc495f4c4-slqv4 1/1 Running 2 (84s ago) 87s
quickwit-indexer-0 1/1 Running 2 (84s ago) 87s
quickwit-janitor-7f75f4bc8-jrfv6 1/1 Running 2 (84s ago) 87s
quickwit-metastore-6989978fc-9s82j 1/1 Running 2 (85s ago) 87s
quickwit-searcher-0 1/1 Running 2 (84s ago) 87s
Hãy kiểm tra xem Quickwit có hoạt động bình thường hay không:
kubectl port-forward svc/quickwit-searcher 7280
Rồi mở trình duyệt và vào http://localhost:7280/ui/indexes. Bạn nên thấy danh sách các chỉ mục. Nếu mọi thứ ổn, tiếp tục với các lệnh kubectl và mở một terminal mới.
Triển khai OTEL Collector
Chúng ta cần cấu hình collector để:
- Từ Kubernetes thu thập nhật ký
- Làm giàu nhật ký bằng các thuộc tính Kubernetes
- Xuất nhật ký đến indexer Quickwit.
echo "
mode: daemonset
presets:
collect_logs:
enabled: true
enrich_k8s_attributes:
enabled: true
config:
exporters:
otlp:
endpoint: quickwit-indexer.demo-tutorial.svc.cluster.local:7281
tls:
insecure: true
service:
pipelines:
logs:
exporters:
- otlp
" > otel-values.yaml
helm install otel-collector open-telemetry/opentelemetry-collector -f otel-values.yaml
Vài giây sau, bạn sẽ thấy các log hiển thị trên indexer rằng index đã bắt đầu.