N'ịbụ nke edere n'asụsụ Rust, a na-eji ọrụ dị elu na obere oriri RAM tụnyere ihe analogues ya. Na mgbakwunye, a na-akwụ ụgwọ nlebara anya nke ukwuu na ọrụ ndị metụtara izi ezi, ọkachasị, ikike ịchekwa ihe omume anaghị eziga na nchekwa na diski ma tụgharịa faịlụ.
N'usoro ihe owuwu, Vector bụ rawụta mmemme na-enweta ozi site na otu ma ọ bụ karịa isi mmalite, nhọrọ na-etinye n'elu ozi ndị a mgbanwe, na iziga ha otu ma ọ bụ karịa igbapu.
Vector bụ onye nnọchi maka filebeat na logstash, ọ nwere ike rụọ ọrụ na ọrụ abụọ ahụ (nata na zipu ndekọ), nkọwa ndị ọzọ na ha. saịtị.
Ọ bụrụ na Logstash a na-arụ agbụ ahụ dị ka ntinye → filter → mmepụta mgbe ahụ na Vector ọ bụ isi mmalite → na-agbanwe → sinks
Enwere ike ịhụ ihe atụ na akwụkwọ.
Ntuziaka a bụ ntụzịaka emegharịrị site na Vyacheslav Rakhinsky. Ntuziaka izizi nwere nhazi geoip. Mgbe ị na-anwale geoip site na netwọk dị n'ime, vector nyere mperi.
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
Ọ bụrụ na onye ọ bụla kwesịrị ịhazi geoip, wee rụtụ aka na ntuziaka izizi sitere na Vyacheslav Rakhinsky.
Anyị ga-ahazi nchikota Nginx (ndekọ nweta) → Vector (Client | Filebeat) → Vector (Server | Logstash) → iche na Clickhouse na iche na Elasticsearch. Anyị ga-etinye sava 4. Agbanyeghị na ị nwere ike iji sava 3 gafere ya.
Usoro ahụ dị ka nke a.
Gbanyụọ Selinux na sava gị niile
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
reboot
Anyị wụnye emulator + ihe nkesa HTTP na sava niile
ClickHouse na-eji usoro ntụziaka SSE 4.2, yabụ ọ gwụla ma akọwapụtaghị ya, nkwado maka ya na ihe nrụpụta eji eme ihe na-aghọ ihe achọrọ sistemụ ọzọ. Nke a bụ iwu iji lelee ma onye nrụpụta ugbu a na-akwado SSE 4.2:
INFO vector::topology::builder: Healthcheck: Passed.
INFO vector::topology::builder: Healthcheck: Passed.
Na onye ahịa (ihe nkesa webụ) - nkesa nke mbụ
Na ihe nkesa nwere nginx, ịkwesịrị gbanyụọ ipv6, ebe ọ bụ na tebụl ndekọ na clickhouse na-eji ubi. upstream_addr IPv4, ebe ọ bụ na anaghị m eji ipv6 n'ime netwọk. Ọ bụrụ na agbanyụrụ ipv6, a ga-enwe mperi:
DB::Exception: Invalid IPv4 value.: (while read the value of key upstream_addr)
Nke mbụ, anyị kwesịrị ịhazi usoro ndekọ na Nginx na faịlụ /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;
}
Ka ị ghara imebi nhazi gị ugbu a, Nginx na-enye gị ohere ịnweta ọtụtụ ntụziaka access_log
access_log /var/log/nginx/access.log main; # Стандартный лог
access_log /var/log/nginx/access.json.log vector; # Новый лог в формате json
Echefula ịgbakwunye iwu iji logrotate maka ndekọ ọhụrụ (ọ bụrụ na faịlụ ndekọ akwụsịghị na .log)
Wepu default.conf na /etc/nginx/conf.d/
rm -f /etc/nginx/conf.d/default.conf
Tinye mebere onye ọbịa /etc/nginx/conf.d/vhost1.conf
Ma hazie ngbanwe Filebeat na /etc/vector/vector.toml config. Adreesị IP 172.26.10.108 bụ adreesị IP nke sava log (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"
Echefula itinye onye ọrụ vector na otu achọrọ ka o nwee ike ịgụ faịlụ ndekọ. Dịka ọmụmaatụ, nginx na centos na-emepụta ndekọ na ikike otu adm.
usermod -a -G adm vector
Ka anyị bido ọrụ vector
systemctl enable vector
systemctl start vector
Enwere ike ịlele ndekọ vector dị ka nke a:
journalctl -f -u vector
Ekwesịrị inwe ntinye dị ka nke a na ndekọ
INFO vector::topology::builder: Healthcheck: Passed.
Nnwale nrụgide
Anyị na-eme nnwale site na iji benchmark Apache.
Awụnyere ngwungwu httpd-tools na sava niile
Anyị na-amalite ịnwale iji Apache benchmark sitere na sava 4 dị iche iche na ihuenyo. Nke mbụ, anyị na-amalite multiplexer ihuenyo ọnụ, mgbe ahụ anyị na-amalite ịnwale site na iji Apache benchmark. Otu esi arụ ọrụ na ihuenyo ị nwere ike ịchọta ederede.
Site na nkesa nke mbụ
while true; do ab -H "User-Agent: 1server" -c 100 -n 10 -t 10 http://vhost1/; sleep 1; done
Site na nkesa nke mbụ
while true; do ab -H "User-Agent: 2server" -c 100 -n 10 -t 10 http://vhost2/; sleep 1; done
Site na nkesa nke mbụ
while true; do ab -H "User-Agent: 3server" -c 100 -n 10 -t 10 http://vhost3/; sleep 1; done
Site na nkesa nke mbụ
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;
Ka anyị chọpụta ego ole ndekọ ejirila na Clickhouse.
Nha tebụl ndekọ bụ 857.19 MB.
Ogo nke otu data dị na ndeksi na Elasticsearch bụ 4,5GB.
Ọ bụrụ na ị kọwapụtaghị data na vector na paramita, Clickhouse na-ewe 4500/857.19 = 5.24 ugboro erughị na Elasticsearch.