Rust dilinde yazılmış olması nedeniyle benzerlerine kıyasla yüksek performans ve düşük RAM tüketimi ile öne çıkıyor. Ek olarak, doğrulukla ilgili işlevlere, özellikle de gönderilmemiş olayları diskteki bir arabelleğe kaydetme ve dosyaları döndürme becerisine çok dikkat edilir.
Mimari olarak Vector, bir veya daha fazla cihazdan mesaj alan bir olay yönlendiricisidir. kaynakların, isteğe bağlı olarak bu mesajların üzerine uygulanarak transformasyonve bunları bir veya daha fazla kişiye göndermek kanalizasyonlar.
Vector, filebeat ve logstash'ın yerine geçer; her iki rolü de üstlenebilir (günlükleri alma ve gönderme), bunlar hakkında daha fazla ayrıntı web sitesi.
Logstash'ta zincir giriş → filtre → çıkış olarak oluşturulmuşsa, Vector'da şöyledir: kaynaklar → dönüşümler → lavabolar
Örnekler belgelerde bulunabilir.
Bu talimat, revize edilmiş bir talimattır. Vyacheslav Rakhinsky. Orijinal talimatlar coğrafi ip işlemeyi içerir. Geoip'i dahili bir ağdan test ederken vektör bir hata verdi.
Aug 05 06:25:31.889 DEBUG transform{name=nginx_parse_rename_fields type=rename_fields}: vector::transforms::rename_fields: Field did not exist field=«geoip.country_name» rate_limit_secs=30
Birisinin geoip'i işlemesi gerekiyorsa, orijinal talimatlara bakın. Vyacheslav Rakhinsky.
Nginx (Erişim logları) → Vector (Client | Filebeat) → Vector (Server | Logstash) → kombinasyonunu Clickhouse'da ayrı ayrı ve Elasticsearch'te ayrı ayrı yapılandıracağız. 4 adet sunucu kuracağız. Yine de 3 sunucuyla bunu atlayabilirsiniz.
Şema bunun gibi bir şey.
Tüm sunucularınızda Selinux'u devre dışı bırakın
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
reboot
Tüm sunuculara bir HTTP sunucusu emülatörü + yardımcı programlar yüklüyoruz
ClickHouse, SSE 4.2 talimat setini kullanır, dolayısıyla aksi belirtilmedikçe, kullanılan işlemcide bunun desteklenmesi ek bir sistem gereksinimi haline gelir. Mevcut işlemcinin SSE 4.2'yi destekleyip desteklemediğini kontrol etmek için komut:
Elasticsearch'ü tek düğüm modu 1 parça, 0 kopya için yapılandırma. Büyük ihtimalle çok sayıda sunucudan oluşan bir kümeye sahip olacaksınız ve bunu yapmanıza gerek yok.
Gelecekteki dizinler için varsayılan şablonu güncelleyin:
Tabloları oluşturduktan sonra Vector'u çalıştırabilirsiniz.
systemctl enable vector
systemctl start vector
Vektör günlükleri şu şekilde görüntülenebilir:
journalctl -f -u vector
Günlüklerde buna benzer girişler olmalı
INFO vector::topology::builder: Healthcheck: Passed.
INFO vector::topology::builder: Healthcheck: Passed.
İstemcide (Web sunucusu) - 1. sunucu
Nginx'li sunucuda ipv6'yı devre dışı bırakmanız gerekir çünkü clickhouse'daki günlükler tablosu bu alanı kullanır upstream_addr IPv4, ağ içinde ipv6 kullanmadığım için. İpv6 kapatılmazsa hatalar olacaktır:
DB::Exception: Invalid IPv4 value.: (while read the value of key upstream_addr)
Öncelikle Nginx'teki günlük formatını /etc/nginx/nginx.conf dosyasında yapılandırmamız gerekiyor.
user nginx;
# you must set worker processes based on your CPU cores, nginx does not benefit from setting more than that
worker_processes auto; #some last versions calculate it automatically
# number of file descriptors used for nginx
# the limit for the maximum FDs on the server is usually set by the OS.
# if you don't set FD's then OS settings will be used which is by default 2000
worker_rlimit_nofile 100000;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
# provides the configuration file context in which the directives that affect connection processing are specified.
events {
# determines how much clients will be served per worker
# max clients = worker_connections * worker_processes
# max clients is also limited by the number of socket connections available on the system (~64k)
worker_connections 4000;
# optimized to serve many clients with each thread, essential for linux -- for testing environment
use epoll;
# accept as many connections as possible, may flood worker connections if set too low -- for testing environment
multi_accept on;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
log_format vector escape=json
'{'
'"node_name":"nginx-vector",'
'"timestamp":"$time_iso8601",'
'"server_name":"$server_name",'
'"request_full": "$request",'
'"request_user_agent":"$http_user_agent",'
'"request_http_host":"$http_host",'
'"request_uri":"$request_uri",'
'"request_scheme": "$scheme",'
'"request_method":"$request_method",'
'"request_length":"$request_length",'
'"request_time": "$request_time",'
'"request_referrer":"$http_referer",'
'"response_status": "$status",'
'"response_body_bytes_sent":"$body_bytes_sent",'
'"response_content_type":"$sent_http_content_type",'
'"remote_addr": "$remote_addr",'
'"remote_port": "$remote_port",'
'"remote_user": "$remote_user",'
'"upstream_addr": "$upstream_addr",'
'"upstream_bytes_received": "$upstream_bytes_received",'
'"upstream_bytes_sent": "$upstream_bytes_sent",'
'"upstream_cache_status":"$upstream_cache_status",'
'"upstream_connect_time":"$upstream_connect_time",'
'"upstream_header_time":"$upstream_header_time",'
'"upstream_response_length":"$upstream_response_length",'
'"upstream_response_time":"$upstream_response_time",'
'"upstream_status": "$upstream_status",'
'"upstream_content_type":"$upstream_http_content_type"'
'}';
access_log /var/log/nginx/access.log main;
access_log /var/log/nginx/access.json.log vector; # Новый лог в формате json
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
Mevcut yapılandırmanızı bozmamak için Nginx, çeşitli erişim_log yönergelerine sahip olmanıza izin verir.
access_log /var/log/nginx/access.log main; # Стандартный лог
access_log /var/log/nginx/access.json.log vector; # Новый лог в формате json
Yeni loglar için logrotate kuralı eklemeyi unutmayın (log dosyası .log ile bitmiyorsa)
Ve /etc/vector/vector.toml yapılandırmasında Filebeat değişimini yapılandırın. IP adresi 172.26.10.108, log sunucusunun (Vector-Server) IP adresidir.
data_dir = "/var/lib/vector"
[sources.nginx_file]
type = "file"
include = [ "/var/log/nginx/access.json.log" ]
start_at_beginning = false
fingerprinting.strategy = "device_and_inode"
[sinks.nginx_output_vector]
type = "vector"
inputs = [ "nginx_file" ]
address = "172.26.10.108:9876"
Günlük dosyalarını okuyabilmesi için vektör kullanıcısını gerekli gruba eklemeyi unutmayın. Örneğin, centos'taki nginx, yönetici grubu haklarına sahip günlükler oluşturur.
usermod -a -G adm vector
Vektör hizmetini başlatalım
systemctl enable vector
systemctl start vector
Vektör günlükleri şu şekilde görüntülenebilir:
journalctl -f -u vector
Günlüklerde böyle bir giriş olması gerekir
INFO vector::topology::builder: Healthcheck: Passed.
Stres testi
Test Apache kıyaslaması kullanılarak gerçekleştirilir.
httpd-tools paketi tüm sunuculara kuruldu
Ekranda 4 farklı sunucudan Apache kıyaslamasını kullanarak teste başlıyoruz. Öncelikle ekran terminal çoklayıcıyı başlatıyoruz ve ardından Apache kıyaslamasını kullanarak test etmeye başlıyoruz. Ekranla nasıl çalışılacağını şurada bulabilirsiniz: Makale.
1. sunucudan
while true; do ab -H "User-Agent: 1server" -c 100 -n 10 -t 10 http://vhost1/; sleep 1; done
2. sunucudan
while true; do ab -H "User-Agent: 2server" -c 100 -n 10 -t 10 http://vhost2/; sleep 1; done
3. sunucudan
while true; do ab -H "User-Agent: 3server" -c 100 -n 10 -t 10 http://vhost3/; sleep 1; done
4. sunucudan
while true; do ab -H "User-Agent: 4server" -c 100 -n 10 -t 10 http://vhost4/; sleep 1; done
select concat(database, '.', table) as table,
formatReadableSize(sum(bytes)) as size,
sum(rows) as rows,
max(modification_time) as latest_modification,
sum(bytes) as bytes_size,
any(engine) as engine,
formatReadableSize(sum(primary_key_bytes_in_memory)) as primary_keys_size
from system.parts
where active
group by database, table
order by bytes_size desc;
Clickhouse'da ne kadar günlük tutulduğunu öğrenelim.
Günlük tablosu boyutu 857.19 MB'dir.
Elasticsearch'teki indekste aynı verinin boyutu 4,5 GB'dir.
Parametrelerde vektördeki verileri belirtmezseniz Clickhouse, Elasticsearch'e göre 4500/857.19 = 5.24 kat daha az alır.
Vektörde sıkıştırma alanı varsayılan olarak kullanılır.