Quản lý nhật ký với Quickwit - Công cụ tìm kiếm phân tán bằng Rust

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

  1. Cài đặt và khởi động một server Quickwit:

./quickwit run
  1. 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
  1. 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.

Thẻ: Quickwit Rust Kubernetes opentelemetry Helm

Đăng vào ngày 10 tháng 7 lúc 17:51