زنگ زبان میں لکھے جانے کی وجہ سے، اس کی خصوصیت اس کے ینالاگوں کے مقابلے میں اعلی کارکردگی اور کم RAM کی کھپت ہے۔ اس کے علاوہ، درستگی سے متعلق افعال پر بہت زیادہ توجہ دی جاتی ہے، خاص طور پر، غیر بھیجے ہوئے واقعات کو ڈسک پر موجود بفر میں محفوظ کرنے اور فائلوں کو گھمانے کی صلاحیت۔
آرکیٹیکچرل طور پر، ویکٹر ایک ایونٹ روٹر ہے جو ایک یا زیادہ سے پیغامات وصول کرتا ہے۔ ذرائعاختیاری طور پر ان پیغامات پر لاگو کرنا تبدیلیاں، اور انہیں ایک یا زیادہ کو بھیجنا نالوں.
ویکٹر فائل بیٹ اور لاگ اسٹیش کا نعم البدل ہے، یہ دونوں کرداروں میں کام کرسکتا ہے (لاگز وصول کرنا اور بھیجنا)، ان پر مزید تفصیلات ڈاؤن لوڈ، اتارنا.
اگر Logstash میں سلسلہ ان پٹ → فلٹر → آؤٹ پٹ کے طور پر بنایا گیا ہے تو ویکٹر میں یہ ہے ذرائع → تبادلوں → ڈوبتا ہے۔
دستاویزات میں مثالیں مل سکتی ہیں۔
یہ ہدایت کی طرف سے نظر ثانی شدہ ہدایت ہے۔ ویاچسلاو راخنسکی. اصل ہدایات geoip پروسیسنگ پر مشتمل ہیں۔ اندرونی نیٹ ورک سے geoip کی جانچ کرتے وقت، ویکٹر نے ایک غلطی دی۔
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
اگر کسی کو geoip پر کارروائی کرنے کی ضرورت ہے، تو اصل ہدایات سے رجوع کریں۔ ویاچسلاو راخنسکی.
ہم Nginx (Access logs) → Vector (Client | Filebeat) → Vector (Server | Logstash) → الگ الگ کلک ہاؤس میں اور الگ الگ Elasticsearch میں ترتیب دیں گے۔ ہم 4 سرورز انسٹال کریں گے۔ اگرچہ آپ اسے 3 سرورز کے ساتھ بائی پاس کر سکتے ہیں۔
اسکیم کچھ اس طرح ہے۔
اپنے تمام سرورز پر Selinux کو غیر فعال کریں۔
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
reboot
ہم تمام سرورز پر ایک HTTP سرور ایمولیٹر + یوٹیلیٹیز انسٹال کرتے ہیں۔
ClickHouse SSE 4.2 انسٹرکشن سیٹ کا استعمال کرتا ہے، لہذا جب تک کہ دوسری صورت میں اس کی وضاحت نہ کی جائے، استعمال شدہ پروسیسر میں اس کے لیے سپورٹ سسٹم کی اضافی ضرورت بن جاتی ہے۔ یہ چیک کرنے کے لیے کمانڈ ہے کہ آیا موجودہ پروسیسر SSE 4.2 کو سپورٹ کرتا ہے:
سنگل نوڈ موڈ 1 شارڈ، 0 نقل کے لیے Elasticsearch کو ترتیب دینا۔ زیادہ تر امکان ہے کہ آپ کے پاس سرورز کی ایک بڑی تعداد کا کلسٹر ہوگا اور آپ کو ایسا کرنے کی ضرورت نہیں ہے۔
مستقبل کے اشاریہ جات کے لیے، ڈیفالٹ ٹیمپلیٹ کو اپ ڈیٹ کریں:
INFO vector::topology::builder: Healthcheck: Passed.
INFO vector::topology::builder: Healthcheck: Passed.
کلائنٹ پر (ویب سرور) - پہلا سرور
nginx کے ساتھ سرور پر، آپ کو ipv6 کو غیر فعال کرنے کی ضرورت ہے، کیونکہ کلک ہاؤس میں لاگز ٹیبل فیلڈ کو استعمال کرتا ہے upstream_addr IPv4، چونکہ میں نیٹ ورک کے اندر ipv6 استعمال نہیں کرتا ہوں۔ اگر ipv6 کو بند نہیں کیا گیا تو، غلطیاں ہوں گی:
DB::Exception: Invalid IPv4 value.: (while read the value of key upstream_addr)
سب سے پہلے، ہمیں فائل /etc/nginx/nginx.conf میں Nginx میں لاگ فارمیٹ کو ترتیب دینے کی ضرورت ہے
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;
}
آپ کی موجودہ کنفیگریشن کو نہ ٹوٹنے کے لیے، Nginx آپ کو کئی رسائی_لاگ ڈائریکٹیو حاصل کرنے کی اجازت دیتا ہے۔
access_log /var/log/nginx/access.log main; # Стандартный лог
access_log /var/log/nginx/access.json.log vector; # Новый лог в формате json
نئے لاگز کے لیے لاگروٹیٹ کے لیے ایک اصول شامل کرنا نہ بھولیں (اگر لاگ فائل .log کے ساتھ ختم نہیں ہوتی ہے)
/etc/nginx/conf.d/ سے default.conf کو ہٹا دیں
rm -f /etc/nginx/conf.d/default.conf
ورچوئل ہوسٹ شامل کریں /etc/nginx/conf.d/vhost1.conf
اور فائل بیٹ کی تبدیلی کو /etc/vector/vector.toml ترتیب میں ترتیب دیں۔ IP ایڈریس 172.26.10.108 لاگ سرور کا IP پتہ ہے (ویکٹر-سرور)
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"
ویکٹر صارف کو مطلوبہ گروپ میں شامل کرنا نہ بھولیں تاکہ وہ لاگ فائلوں کو پڑھ سکے۔ مثال کے طور پر، سینٹوس میں nginx ایڈم گروپ کے حقوق کے ساتھ لاگز بناتا ہے۔
usermod -a -G adm vector
آئیے ویکٹر سروس شروع کریں۔
systemctl enable vector
systemctl start vector
ویکٹر لاگز کو اس طرح دیکھا جا سکتا ہے:
journalctl -f -u vector
نوشتہ جات میں اس طرح کا اندراج ہونا چاہیے۔
INFO vector::topology::builder: Healthcheck: Passed.
تناؤ کی جانچ
ہم اپاچی بینچ مارک کا استعمال کرتے ہوئے جانچ کرتے ہیں۔
httpd-tools پیکیج تمام سرورز پر انسٹال کیا گیا تھا۔
ہم اسکرین میں 4 مختلف سرورز سے اپاچی بینچ مارک کا استعمال کرتے ہوئے جانچ شروع کرتے ہیں۔ سب سے پہلے، ہم اسکرین ٹرمینل ملٹی پلیکسر لانچ کرتے ہیں، اور پھر ہم اپاچی بینچ مارک کا استعمال کرتے ہوئے جانچ شروع کرتے ہیں۔ اسکرین کے ساتھ کام کرنے کا طریقہ جس میں آپ تلاش کرسکتے ہیں۔ آرٹیکل.
1st سرور سے
while true; do ab -H "User-Agent: 1server" -c 100 -n 10 -t 10 http://vhost1/; sleep 1; done
2st سرور سے
while true; do ab -H "User-Agent: 2server" -c 100 -n 10 -t 10 http://vhost2/; sleep 1; done
3st سرور سے
while true; do ab -H "User-Agent: 3server" -c 100 -n 10 -t 10 http://vhost3/; sleep 1; done
4st سرور سے
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;
آئیے معلوم کریں کہ کلک ہاؤس میں کتنے لاگز ہوئے۔
لاگز ٹیبل کا سائز 857.19 MB ہے۔
Elasticsearch میں انڈیکس میں اسی ڈیٹا کا سائز 4,5GB ہے۔
اگر آپ پیرامیٹرز میں ویکٹر میں ڈیٹا کی وضاحت نہیں کرتے ہیں، تو Clickhouse Elasticsearch کے مقابلے میں 4500/857.19 = 5.24 گنا کم لیتا ہے۔
ویکٹر میں، کمپریشن فیلڈ بطور ڈیفالٹ استعمال ہوتا ہے۔