Rust hizkuntzan idatzita dagoenez, errendimendu handia eta RAM kontsumo txikia ditu bere analogikoekin alderatuta. Horrez gain, zuzentasunari lotutako funtzioei arreta handia ematen zaie, bereziki, bidali gabeko gertaerak diskoan buffer batean gordetzeko eta fitxategiak biratzeko gaitasunari.
Arkitektura aldetik, Vector bat edo gehiagoren mezuak jasotzen dituen gertaeren bideratzailea da iturriak, aukeran mezu hauen gainean aplikatuz eraldaketak, eta bati edo gehiagori bidaltzea hustubideak.
Vector filebeat eta logstash-en ordezkoa da, bi roletan jardu dezake (erregistroak jaso eta bidali), haiei buruzko xehetasun gehiago. Online.
Logstash-en katea sarrera → iragazkia → irteera gisa eraikitzen bada, Vector-en dago iturri → transformazio → konketa
Adibideak dokumentazioan aurki daitezke.
Argibide hau berrikusitako instrukzioa da Viatxeslav Rakhinsky. Jatorrizko argibideek geoip prozesatzea dute. Geoip barne sare batetik probatzean, bektoreak errore bat eman zuen.
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
Inork geoip prozesatu behar badu, jo ezazu jatorrizko argibideetara Viatxeslav Rakhinsky.
Nginx-en konbinazioa konfiguratuko dugu (Sarbide-erregistroak) → Vector (Bezeroa | Filebeat) → Bektorea (Zerbitzaria | Logstash) → bereizita Clickhouse-n eta bereizita Elasticsearch-en. 4 zerbitzari instalatuko ditugu. 3 zerbitzariekin saihestu dezakezun arren.
Eskema horrelako zerbait da.
Desgaitu Selinux zure zerbitzari guztietan
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
reboot
HTTP zerbitzariaren emuladorea + utilitateak instalatzen ditugu zerbitzari guztietan
ClickHouse-k SSE 4.2 instrukzio-multzoa erabiltzen du, beraz, bestela zehaztu ezean, erabilitako prozesadorearen euskarria sistema-eskakizun gehigarri bihurtzen da. Hona hemen uneko prozesadoreak SSE 4.2 onartzen duen egiaztatzeko komandoa:
Elasticsearch konfiguratzen nodo bakarreko moduko 1 zati, 0 erreplika. Seguruenik zerbitzari ugariko kluster bat izango duzu eta ez duzu hau egin beharrik.
Erregistroetan horrelako sarrerak egon beharko lirateke
INFO vector::topology::builder: Healthcheck: Passed.
INFO vector::topology::builder: Healthcheck: Passed.
Bezeroan (Web zerbitzaria) - 1. zerbitzaria
Nginx-ekin zerbitzarian, ipv6 desgaitu behar duzu, clickhouse-ko erregistroen taulak eremua erabiltzen baitu. upstream_addr IPv4, ez baitut sare barruan ipv6 erabiltzen. ipv6 desaktibatuta ez badago, erroreak egongo dira:
DB::Exception: Invalid IPv4 value.: (while read the value of key upstream_addr)
Agian irakurleek, gehitu ipv6 euskarria.
Sortu /etc/sysctl.d/98-disable-ipv6.conf fitxategia
Lehenik eta behin, Nginx-en erregistro formatua konfiguratu behar dugu /etc/nginx/nginx.conf fitxategian
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;
}
Zure egungo konfigurazioa ez apurtzeko, Nginx-ek hainbat access_log zuzentarau izan ditzakezu
access_log /var/log/nginx/access.log main; # Стандартный лог
access_log /var/log/nginx/access.json.log vector; # Новый лог в формате json
Ez ahaztu logrotate-ra arau bat gehitzea erregistro berrietarako (erregistro fitxategia .log-rekin amaitzen ez bada)
Kendu default.conf /etc/nginx/conf.d/-tik
rm -f /etc/nginx/conf.d/default.conf
Gehitu ostalari birtuala /etc/nginx/conf.d/vhost1.conf
Eta konfiguratu Filebeat ordezkoa /etc/vector/vector.toml konfigurazioan. IP helbidea 172.26.10.108 erregistro-zerbitzariaren IP helbidea da (Vector-Server)
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"
Ez ahaztu bektore-erabiltzailea behar den taldean gehitzea, erregistro-fitxategiak irakurri ahal izateko. Adibidez, nginx centos-en erregistroak sortzen ditu adm taldeen eskubideekin.
usermod -a -G adm vector
Hasi gaitezen bektore-zerbitzua
systemctl enable vector
systemctl start vector
Erregistro bektorialak honela ikus daitezke:
journalctl -f -u vector
Erregistroetan horrelako sarrera bat egon beharko litzateke
INFO vector::topology::builder: Healthcheck: Passed.
Estres probak
Probak Apache benchmark erabiliz egiten ditugu.
httpd-tools paketea zerbitzari guztietan instalatu zen
Pantailan 4 zerbitzari desberdinetatik Apache benchmark erabiliz probatzen hasten gara. Lehenik eta behin, pantailako terminal-multiplexua abiarazten dugu, eta, ondoren, probak egiten hasiko gara Apache erreferentea erabiliz. Hemen aurki dezakezun pantailarekin nola lan egin Artikulu.
1. zerbitzaritik
while true; do ab -H "User-Agent: 1server" -c 100 -n 10 -t 10 http://vhost1/; sleep 1; done
2. zerbitzaritik
while true; do ab -H "User-Agent: 2server" -c 100 -n 10 -t 10 http://vhost2/; sleep 1; done
3. zerbitzaritik
while true; do ab -H "User-Agent: 3server" -c 100 -n 10 -t 10 http://vhost3/; sleep 1; done
4. zerbitzaritik
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;
Jakin dezagun zenbat erregistro hartu zuen Clickhouse-n.
Erregistroen taularen tamaina 857.19 MB da.
Elasticsearch-en indizeko datu berdinen tamaina 4,5 GB da.
Parametroetan bektorean datuak zehazten ez badituzu, Clickhouse-k Elasticsearch-en baino 4500/857.19 = 5.24 aldiz gutxiago hartzen du.
Bektorean, konpresio eremua erabiltzen da lehenespenez.