Það er skrifað á Rust tungumálinu og einkennist af mikilli afköstum og lítilli vinnsluminni í samanburði við hliðstæður þess. Að auki er mikil athygli beint að aðgerðum sem tengjast réttmæti, einkum getu til að vista ósenda atburði á biðminni á diski og snúa skrám.
Byggingarfræðilega séð er Vector viðburðarbein sem tekur við skilaboðum frá einum eða fleiri heimildir, valfrjálst að nota yfir þessi skilaboð umbreytingar, og senda þær til eins eða fleiri niðurföll.
Vector kemur í staðinn fyrir filebeat og logstash, hann getur virkað í báðum hlutverkum (móttaka og senda logs), frekari upplýsingar um þau Online.
Ef í Logstash er keðjan byggð sem inntak → filter → output þá er það í Vector Heimildir → umbreytir → vaskur
Dæmi er að finna í skjölunum.
Þessi leiðbeining er endurskoðuð leiðbeining frá Vyacheslav Rakhinsky. Upprunalegu leiðbeiningarnar innihalda geoip vinnslu. Þegar geoip var prófað frá innra neti gaf vektor upp villu.
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
Ef einhver þarf að vinna geoip, þá vísaðu til upprunalegu leiðbeininganna frá Vyacheslav Rakhinsky.
Við munum stilla samsetninguna af Nginx (Access logs) → Vector (Client | Filebeat) → Vector (Server | Logstash) → sérstaklega í Clickhouse og sérstaklega í Elasticsearch. Við munum setja upp 4 netþjóna. Þó að þú getir farið framhjá því með 3 netþjónum.
Skipulagið er eitthvað á þessa leið.
Slökktu á Selinux á öllum netþjónum þínum
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
reboot
Við setjum upp HTTP netþjónahermi + tól á öllum netþjónum
ClickHouse notar SSE 4.2 leiðbeiningasettið, þannig að nema annað sé tekið fram verður stuðningur við það í örgjörvanum sem notaður er auka kerfiskrafa. Hér er skipunin til að athuga hvort núverandi örgjörvi styður SSE 4.2:
Eftir að hafa búið til töflurnar geturðu keyrt Vector
systemctl enable vector
systemctl start vector
Hægt er að skoða vektorskrár svona:
journalctl -f -u vector
Það ættu að vera svona færslur í loggunum
INFO vector::topology::builder: Healthcheck: Passed.
INFO vector::topology::builder: Healthcheck: Passed.
Á biðlara (vefþjónn) - 1. þjónn
Á þjóninum með nginx þarftu að slökkva á ipv6, þar sem logtaflan í clickhouse notar reitinn upstream_addr IPv4, þar sem ég nota ekki ipv6 inni á netinu. Ef ekki er slökkt á ipv6 verða villur:
DB::Exception: Invalid IPv4 value.: (while read the value of key upstream_addr)
Kannski lesendur, bættu við ipv6 stuðningi.
Búðu til skrána /etc/sysctl.d/98-disable-ipv6.conf
Fyrst þurfum við að stilla log sniðið í Nginx í skránni /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;
}
Til að brjóta ekki núverandi stillingar þínar, gerir Nginx þér kleift að hafa nokkrar access_log tilskipanir
access_log /var/log/nginx/access.log main; # Стандартный лог
access_log /var/log/nginx/access.json.log vector; # Новый лог в формате json
Ekki gleyma að bæta við reglu til að logrotate fyrir nýja annála (ef logskráin endar ekki á .log)
Fjarlægðu default.conf úr /etc/nginx/conf.d/
rm -f /etc/nginx/conf.d/default.conf
Bættu við sýndarhýsingu /etc/nginx/conf.d/vhost1.conf
Og stilltu Filebeat skiptin í /etc/vector/vector.toml stillingunni. IP vistfang 172.26.10.108 er IP vistfang notendaþjóns (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"
Ekki gleyma að bæta vektornotandanum við tilskilinn hóp svo hann geti lesið annálaskrár. Til dæmis, nginx í centos býr til annála með adm hóparéttindum.
usermod -a -G adm vector
Byrjum á vektorþjónustunni
systemctl enable vector
systemctl start vector
Hægt er að skoða vektorskrár svona:
journalctl -f -u vector
Það ætti að vera svona færsla í loggunum
INFO vector::topology::builder: Healthcheck: Passed.
Streitupróf
Við framkvæmum próf með því að nota Apache viðmið.
httpd-tools pakkinn var settur upp á öllum netþjónum
Við byrjum að prófa að nota Apache viðmið frá 4 mismunandi netþjónum á skjánum. Fyrst ræsum við multiplexer skjástöðvarinnar og byrjum síðan að prófa með Apache viðmiðinu. Hvernig á að vinna með skjá sem þú getur fundið í grein.
Frá 1. server
while true; do ab -H "User-Agent: 1server" -c 100 -n 10 -t 10 http://vhost1/; sleep 1; done
Frá 2. server
while true; do ab -H "User-Agent: 2server" -c 100 -n 10 -t 10 http://vhost2/; sleep 1; done
Frá 3. server
while true; do ab -H "User-Agent: 3server" -c 100 -n 10 -t 10 http://vhost3/; sleep 1; done
Frá 4. server
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;
Við skulum komast að því hversu mikið logs tóku upp í Clickhouse.
Stærð annálatöflunnar er 857.19 MB.
Stærð sömu gagna í vísitölunni í Elasticsearch er 4,5GB.
Ef þú tilgreinir ekki gögn í vektornum í breytunum tekur Clickhouse 4500/857.19 = 5.24 sinnum minna en í Elasticsearch.
Í vektor er þjöppunarreiturinn notaður sjálfgefið.