Rust-kielellä kirjoitettuna sille on ominaista korkea suorituskyky ja alhainen RAM-muistin kulutus verrattuna sen analogeihin. Lisäksi kiinnitetään paljon huomiota oikeellisuuteen liittyviin toimintoihin, erityisesti mahdollisuuteen tallentaa lähettämättömät tapahtumat levyllä olevaan puskuriin ja kiertää tiedostoja.
Arkkitehtonisesti Vector on tapahtumareititin, joka vastaanottaa viestejä yhdeltä tai useammalta lähteet, valinnaisesti sovelletaan näihin viesteihin muunnoksiaja lähettää ne yhdelle tai useammalle viemärit.
Vector korvaa filebeatin ja logstash, se voi toimia molemmissa rooleissa (vastaanottaa ja lähettää lokeja), lisätietoja niistä Online.
Jos Logstashissa ketju rakennetaan tuloksi → suodatin → ulostuloksi, niin Vectorissa se on lähteet → muunnoksia → nielujen
Esimerkkejä löytyy dokumentaatiosta.
Tämä ohje on tarkistettu ohje Vjatšeslav Rakhinsky. Alkuperäiset ohjeet sisältävät geoip-käsittelyn. Testattaessa geoippiä sisäisestä verkosta, vektori antoi virheen.
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
Jos jonkun on käsiteltävä geoippiä, katso alkuperäiset ohjeet osoitteesta Vjatšeslav Rakhinsky.
Määritämme yhdistelmän Nginx (käyttölokit) → Vector (Client | Filebeat) → Vector (palvelin | Logstash) → erikseen Clickhousessa ja erikseen Elasticsearchissa. Asennamme 4 palvelinta. Vaikka voit ohittaa sen 3 palvelimella.
Kaava on jotain tämän kaltaista.
Poista Selinux käytöstä kaikilla palvelimillasi
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
reboot
Asennamme HTTP-palvelinemulaattorin + apuohjelmat kaikille palvelimille
ClickHouse käyttää SSE 4.2 -käskysarjaa, joten ellei toisin mainita, sen tuki käytettävässä prosessorissa tulee lisäjärjestelmävaatimuksena. Tässä on komento tarkistaaksesi, tukeeko nykyinen prosessori SSE 4.2:ta:
Elasticsearchin määrittäminen yhden solmun tilassa 1 sirpale, 0 replikaa. Todennäköisesti sinulla on suuren määrän palvelimia sisältävä klusteri, eikä sinun tarvitse tehdä tätä.
INFO vector::topology::builder: Healthcheck: Passed.
INFO vector::topology::builder: Healthcheck: Passed.
Asiakkaalla (Web-palvelin) - 1. palvelin
Palvelimella, jossa on nginx, sinun on poistettava ipv6 käytöstä, koska clickhousen lokitaulukko käyttää kenttää upstream_addr IPv4, koska en käytä ipv6:ta verkossa. Jos ipv6:ta ei ole kytketty pois päältä, tulee virheitä:
DB::Exception: Invalid IPv4 value.: (while read the value of key upstream_addr)
Ensin meidän on määritettävä lokimuoto Nginxissä tiedostossa /etc/nginx/nginx.conf
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;
}
Jotta nykyinen kokoonpanosi ei riko, Nginx antaa sinulle mahdollisuuden käyttää useita access_log-komentoja
access_log /var/log/nginx/access.log main; # Стандартный лог
access_log /var/log/nginx/access.json.log vector; # Новый лог в формате json
Muista lisätä uusien lokien logrotate-sääntö (jos lokitiedoston lopussa ei ole .log)
Ja määritä Filebeat-korvaus tiedostossa /etc/vector/vector.toml. IP-osoite 172.26.10.108 on lokipalvelimen (Vector-Server) IP-osoite.
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"
Älä unohda lisätä vektorikäyttäjää vaadittuun ryhmään, jotta hän voi lukea lokitiedostoja. Esimerkiksi nginx in centos luo lokeja adm-ryhmäoikeuksilla.
usermod -a -G adm vector
Aloitetaan vektoripalvelu
systemctl enable vector
systemctl start vector
Vektorilokit voidaan tarkastella seuraavasti:
journalctl -f -u vector
Lokeissa pitäisi olla tällainen merkintä
INFO vector::topology::builder: Healthcheck: Passed.
Stressitestaus
Testaus suoritetaan Apache benchmarkilla.
httpd-tools-paketti asennettiin kaikille palvelimille
Aloitamme testaamisen Apache-benchmarkilla neljältä eri palvelimelta näytöllä. Ensin käynnistämme näyttöpäätteen multiplekserin ja sitten alamme testata Apache-benchmarkilla. Kuinka työskennellä näytön kanssa, löydät kohdasta статье.
1. palvelimelta
while true; do ab -H "User-Agent: 1server" -c 100 -n 10 -t 10 http://vhost1/; sleep 1; done
2. palvelimelta
while true; do ab -H "User-Agent: 2server" -c 100 -n 10 -t 10 http://vhost2/; sleep 1; done
3. palvelimelta
while true; do ab -H "User-Agent: 3server" -c 100 -n 10 -t 10 http://vhost3/; sleep 1; done
4. palvelimelta
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;
Selvitetään kuinka paljon tukia vei Clickhousessa.
Lokitaulukon koko on 857.19 MB.
Saman datan koko Elasticsearchin hakemistossa on 4,5 Gt.
Jos et määritä dataa vektorissa parametreissa, Clickhouse ottaa 4500/857.19 = 5.24 kertaa vähemmän kuin Elasticsearchissa.