![translation](https://cdn.durumis.com/common/trans.png)
Ini adalah postingan yang diterjemahkan oleh AI.
Pilih Bahasa
Teks yang dirangkum oleh AI durumis
- Vector, alat pengumpulan dan agregasi log yang diluncurkan oleh DataDog, dikembangkan dengan Rust, sehingga pembuatan kode konversi log lebih mudah daripada alat yang ada, dan memiliki keuntungan pengelolaan deklaratif, tetapi ada masalah dalam pembaruan dokumentasi resmi dan keterbatasan materi.
- Saat menggunakan Vector berbasis Helm untuk mengintegrasikan log k8s dengan Loki, kami mengalami masalah seperti pengaturan customConfig, penggabungan log multibaris, pengaturan data_dir, dan konflik dengan sintaks Helm, dan menyediakan solusi dan informasi tambahan untuk masalah ini.
- Jika Anda memiliki kekhawatiran tentang arsitektur Vector, Anda dapat memilih metode penyebaran yang tepat dengan merujuk pada artikel tentang arsitektur di dokumentasi resmi.
Hari ini, saya akan memperkenalkan alat bernama Vector.
Ini adalah produk dari DataDog.
Vector melakukan peran yang sama dengan promtail dan otel yang kita kenal.
Vector mendukung pengumpulan, agregasi, dan transformasi log.
Berikut adalah fitur-fiturnya:
1. Ditulis dalam bahasa Rust, bukan golang
2. Lebih mudah untuk menulis kode transformasi log dibandingkan dengan otel
3. Dapat dikelola secara deklaratif
4. Dokumentasi resmi yang baik
Meskipun situs resminya menyebutkan poin-poin di atas sebagai kelebihan,
Saya rasa sebagian besar kelebihan tersebut juga dimiliki oleh alat lain, jadi saya tidak menyertakannya di sini.
Berikut adalah kekurangan yang saya temukan saat menggunakannya:
1. Dokumentasi resmi yang belum diperbarui
2. Sulit untuk menemukan materi terkait
Kurang lebih itu saja.
Saya tidak menemukan kendala berarti saat menggunakannya, tetapi saya merasa sangat disayangkan karena banyak materi yang belum diperbarui atau sulit ditemukan.
Saya hanya menggunakan helm, jadi saya mohon maaf jika penjelasan ini hanya berdasarkan helm. 흑....
role: Agent
data_dir: /var/lib/vector
customConfig:
data_dir: "/vector-data-dir"
api:
enabled: true
address: 0.0.0.0:8686
sources:
kubernetes_logs:
type: kubernetes_logs
exclude_paths_glob_patterns:
- "**/*.gz" # default
- "**/*.tmp" # default
transforms:
handle_multiline:
type: reduce
inputs:
- kubernetes_logs
expire_after_ms: 1000
group_by:
- kubernetes_pod_name
merge_strategies:
message: concat_newline
starts_when: match(string!(.message), r'^[((\d{4}-\d{2}-\d{2})|(\d{4}/\d{2}/\d{2})|GIN|(\d{2}:\d{2}:\d{2} ))')
message_parsing:
type: remap
inputs:
- handle_multiline
source: |-
.message = replace!(.message, r'\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]', "")
structured, err1 =
parse_grok(.message, "\\[%{YEAR}/%{MONTHNUM}/%{MONTHDAY} %{TIME}\\] %{LOGLEVEL:level} (?(.|\r|\n)*)") ??
parse_grok(.message, "\\[%{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{TIME}\\] %{LOGLEVEL:level} (?(.|\r|\n)*)")
if err1 == null {
. = merge(., structured)
}
.level = downcase(string(.level) ?? "info")
., err2 = merge(., .kubernetes)
if err2 == null {
del(.kubernetes)
del(.namespace_labels.kubernetes_io_metadata_name)
}
sinks:
loki:
type: loki
compression: snappy
encoding:
codec: json
inputs:
- message_parsing
endpoint: http://loki-write.monitoring:3100
labels:
forwarder: vector
app: "{{{{container_name}}}}"
namespace: "{{{{pod_namespace}}}}"
Buat file values.yaml sederhana seperti di bawah ini,
helm repo add vector https://helm.vector.dev
dan jalankan perintah di atas untuk mengintegrasikan log dari k8s ke loki dengan mudah.
Saat menulis kode di atas, saya menemukan beberapa masalah.
Pertama, saat menulis customConfig, semua opsi default akan dinonaktifkan, jadi Anda harus menulis source, transform, dan sinks secara manual.
Kedua, log masuk berdasarkan baris, jadi log multi-baris seperti error trace harus digabungkan.
Source.file memiliki opsi terkait multiline, tetapi k8s tidak memilikinya.
Setelah diskusi internal dengan tim Vector, kami memutuskan untuk mendukung transform.reduce dan menggunakannya.
Ketiga, Anda harus mengatur data_dir di dalam custom_config selain root.data_dir.
Nilai itu ada di dalam, dan jika tidak diatur, Anda akan sering mendapatkan kesalahan izin terkait log. ㅎ
Keempat, saya menggunakan helm untuk penyebaran, jadi ada tumpang tindih sintaks dan memerlukan escape.
Karena itu, dokumentasi menyebutkan "{{ metadata }}" seperti di bawah ini, dan saya menggunakannya begitu saja, tetapi itu menyebabkan kesalahan.
sinks:
my_sink_id:
type: loki
inputs:
- my-source-or-transform-id
compression: snappy
endpoint: http://localhost:3100
labels:
Jadi, di helm, Anda harus menggunakan escape seperti "{{ {{ metadata }} }}"!
Jika Anda memiliki masalah dengan arsitektur, saya sarankan Anda untuk membaca artikel di bawah ini.
https://vector.dev/docs/setup/deployment/topologies/