
لاگ ڈیٹا، میٹرکس اور ایونٹس کو جمع کرنے، تبدیل کرنے اور بھیجنے کے لیے ڈیزائن کیا گیا ہے۔
→
زنگ زبان میں لکھے جانے کی وجہ سے، اس کی خصوصیت اس کے ینالاگوں کے مقابلے میں اعلی کارکردگی اور کم 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 سرور ایمولیٹر + یوٹیلیٹیز انسٹال کرتے ہیں۔
بطور HTTP سرور ایمولیٹر ہم استعمال کریں گے۔ سے
Nodejs-stub-server میں rpm نہیں ہے۔ اس کے لیے rpm بنائیں۔ rpm کا استعمال کرتے ہوئے مرتب کیا جائے گا۔
antonpatsev/nodejs-stub-server repository شامل کریں۔
yum -y install yum-plugin-copr epel-release
yes | yum copr enable antonpatsev/nodejs-stub-serverتمام سرورز پر nodejs-stub-server، Apache بینچ مارک اور اسکرین ٹرمینل ملٹی پلیکسر انسٹال کریں
yum -y install stub_http_server screen mc httpd-tools screenمیں نے /var/lib/stub_http_server/stub_http_server.js فائل میں stub_http_server رسپانس ٹائم کو درست کیا تاکہ مزید لاگز ہوں۔
var max_sleep = 10;آئیے شروع کریں stub_http_server۔
systemctl start stub_http_server
systemctl enable stub_http_serverسرور 3 پر
ClickHouse SSE 4.2 انسٹرکشن سیٹ کا استعمال کرتا ہے، لہذا جب تک کہ دوسری صورت میں اس کی وضاحت نہ کی جائے، استعمال شدہ پروسیسر میں اس کے لیے سپورٹ سسٹم کی اضافی ضرورت بن جاتی ہے۔ یہ چیک کرنے کے لیے کمانڈ ہے کہ آیا موجودہ پروسیسر SSE 4.2 کو سپورٹ کرتا ہے:
grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"سب سے پہلے آپ کو سرکاری ذخیرہ سے منسلک کرنے کی ضرورت ہے:
sudo yum install -y yum-utils
sudo rpm --import https://repo.clickhouse.tech/CLICKHOUSE-KEY.GPG
sudo yum-config-manager --add-repo https://repo.clickhouse.tech/rpm/stable/x86_64پیکجوں کو انسٹال کرنے کے لیے آپ کو درج ذیل کمانڈز چلانے کی ضرورت ہے۔
sudo yum install -y clickhouse-server clickhouse-clientکلک ہاؤس سرور کو فائل میں نیٹ ورک کارڈ سننے کی اجازت دیں /etc/clickhouse-server/config.xml
<listen_host>0.0.0.0</listen_host>لاگنگ لیول کو ٹریس سے ڈیبگ تک تبدیل کرنا
ڈیبگ
معیاری کمپریشن کی ترتیبات:
min_compress_block_size 65536
max_compress_block_size 1048576Zstd کمپریشن کو چالو کرنے کے لئے، یہ مشورہ دیا گیا تھا کہ کنفگ کو ہاتھ نہ لگائیں، بلکہ DDL استعمال کریں۔

مجھے گوگل میں ڈی ڈی ایل کے ذریعے zstd کمپریشن کا استعمال کرنے کا طریقہ نہیں مل سکا۔ تو میں نے اسے ویسا ہی چھوڑ دیا۔
وہ ساتھی جو Clickhouse میں zstd کمپریشن استعمال کرتے ہیں، براہ کرم ہدایات کا اشتراک کریں۔
سرور کو ڈیمون کے طور پر شروع کرنے کے لیے، چلائیں:
service clickhouse-server startاب کلک ہاؤس کو ترتیب دینے کی طرف بڑھتے ہیں۔
کلک ہاؤس پر جائیں۔
clickhouse-client -h 172.26.10.109 -m172.26.10.109 — سرور کا IP جہاں کلک ہاؤس انسٹال ہے۔
آئیے ایک ویکٹر ڈیٹا بیس بناتے ہیں۔
CREATE DATABASE vector;آئیے چیک کریں کہ ڈیٹا بیس موجود ہے۔
show databases;ایک vector.logs ٹیبل بنائیں۔
/* Это таблица где хранятся логи как есть */
CREATE TABLE vector.logs
(
`node_name` String,
`timestamp` DateTime,
`server_name` String,
`user_id` String,
`request_full` String,
`request_user_agent` String,
`request_http_host` String,
`request_uri` String,
`request_scheme` String,
`request_method` String,
`request_length` UInt64,
`request_time` Float32,
`request_referrer` String,
`response_status` UInt16,
`response_body_bytes_sent` UInt64,
`response_content_type` String,
`remote_addr` IPv4,
`remote_port` UInt32,
`remote_user` String,
`upstream_addr` IPv4,
`upstream_port` UInt32,
`upstream_bytes_received` UInt64,
`upstream_bytes_sent` UInt64,
`upstream_cache_status` String,
`upstream_connect_time` Float32,
`upstream_header_time` Float32,
`upstream_response_length` UInt64,
`upstream_response_time` Float32,
`upstream_status` UInt16,
`upstream_content_type` String,
INDEX idx_http_host request_http_host TYPE set(0) GRANULARITY 1
)
ENGINE = MergeTree()
PARTITION BY toYYYYMMDD(timestamp)
ORDER BY timestamp
TTL timestamp + toIntervalMonth(1)
SETTINGS index_granularity = 8192;ہم چیک کرتے ہیں کہ میزیں بنائی گئی ہیں۔ چلو لانچ کرتے ہیں۔ clickhouse-client اور ایک درخواست کریں.
آئیے ویکٹر ڈیٹا بیس پر جائیں۔
use vector;
Ok.
0 rows in set. Elapsed: 0.001 sec.آئیے میزوں کو دیکھتے ہیں۔
show tables;
┌─name────────────────┐
│ logs │
└─────────────────────┘کلک ہاؤس سے موازنہ کرنے کے لیے وہی ڈیٹا Elasticsearch کو بھیجنے کے لیے 4th سرور پر elasticsearch کو انسٹال کرنا
ایک عوامی rpm کلید شامل کریں۔
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearchآئیے 2 ریپو بنائیں:
/etc/yum.repos.d/elasticsearch.repo
[elasticsearch]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md/etc/yum.repos.d/kibana.repo
[kibana-7.x]
name=Kibana repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-mdelasticsearch اور kibana انسٹال کریں۔
yum install -y kibana elasticsearchچونکہ یہ 1 کاپی میں ہوگا، آپ کو مندرجہ ذیل کو /etc/elasticsearch/elasticsearch.yml فائل میں شامل کرنے کی ضرورت ہے:
discovery.type: single-nodeتاکہ ویکٹر کسی دوسرے سرور سے elasticsearch پر ڈیٹا بھیج سکے، آئیے network.host کو تبدیل کریں۔
network.host: 0.0.0.0کبانہ سے جڑنے کے لیے، فائل میں server.host پیرامیٹر تبدیل کریں /etc/kibana/kibana.yml
server.host: "0.0.0.0"پرانا اور آٹو اسٹارٹ میں لچکدار تلاش شامل کریں۔
systemctl enable elasticsearch
systemctl start elasticsearchاور کبانہ
systemctl enable kibana
systemctl start kibanaسنگل نوڈ موڈ 1 شارڈ، 0 نقل کے لیے Elasticsearch کو ترتیب دینا۔ زیادہ تر امکان ہے کہ آپ کے پاس سرورز کی ایک بڑی تعداد کا کلسٹر ہوگا اور آپ کو ایسا کرنے کی ضرورت نہیں ہے۔
مستقبل کے اشاریہ جات کے لیے، ڈیفالٹ ٹیمپلیٹ کو اپ ڈیٹ کریں:
curl -X PUT http://localhost:9200/_template/default -H 'Content-Type: application/json' -d '{"index_patterns": ["*"],"order": -1,"settings": {"number_of_shards": "1","number_of_replicas": "0"}}' تنصیب سرور 2 پر Logstash کے متبادل کے طور پر
yum install -y https://packages.timber.io/vector/0.9.X/vector-x86_64.rpm mc httpd-tools screenآئیے Logstash کے متبادل کے طور پر ویکٹر کو ترتیب دیں۔ فائل میں ترمیم کرنا /etc/vector/vector.toml
# /etc/vector/vector.toml
data_dir = "/var/lib/vector"
[sources.nginx_input_vector]
# General
type = "vector"
address = "0.0.0.0:9876"
shutdown_timeout_secs = 30
[transforms.nginx_parse_json]
inputs = [ "nginx_input_vector" ]
type = "json_parser"
[transforms.nginx_parse_add_defaults]
inputs = [ "nginx_parse_json" ]
type = "lua"
version = "2"
hooks.process = """
function (event, emit)
function split_first(s, delimiter)
result = {};
for match in (s..delimiter):gmatch("(.-)"..delimiter) do
table.insert(result, match);
end
return result[1];
end
function split_last(s, delimiter)
result = {};
for match in (s..delimiter):gmatch("(.-)"..delimiter) do
table.insert(result, match);
end
return result[#result];
end
event.log.upstream_addr = split_first(split_last(event.log.upstream_addr, ', '), ':')
event.log.upstream_bytes_received = split_last(event.log.upstream_bytes_received, ', ')
event.log.upstream_bytes_sent = split_last(event.log.upstream_bytes_sent, ', ')
event.log.upstream_connect_time = split_last(event.log.upstream_connect_time, ', ')
event.log.upstream_header_time = split_last(event.log.upstream_header_time, ', ')
event.log.upstream_response_length = split_last(event.log.upstream_response_length, ', ')
event.log.upstream_response_time = split_last(event.log.upstream_response_time, ', ')
event.log.upstream_status = split_last(event.log.upstream_status, ', ')
if event.log.upstream_addr == "" then
event.log.upstream_addr = "127.0.0.1"
end
if (event.log.upstream_bytes_received == "-" or event.log.upstream_bytes_received == "") then
event.log.upstream_bytes_received = "0"
end
if (event.log.upstream_bytes_sent == "-" or event.log.upstream_bytes_sent == "") then
event.log.upstream_bytes_sent = "0"
end
if event.log.upstream_cache_status == "" then
event.log.upstream_cache_status = "DISABLED"
end
if (event.log.upstream_connect_time == "-" or event.log.upstream_connect_time == "") then
event.log.upstream_connect_time = "0"
end
if (event.log.upstream_header_time == "-" or event.log.upstream_header_time == "") then
event.log.upstream_header_time = "0"
end
if (event.log.upstream_response_length == "-" or event.log.upstream_response_length == "") then
event.log.upstream_response_length = "0"
end
if (event.log.upstream_response_time == "-" or event.log.upstream_response_time == "") then
event.log.upstream_response_time = "0"
end
if (event.log.upstream_status == "-" or event.log.upstream_status == "") then
event.log.upstream_status = "0"
end
emit(event)
end
"""
[transforms.nginx_parse_remove_fields]
inputs = [ "nginx_parse_add_defaults" ]
type = "remove_fields"
fields = ["data", "file", "host", "source_type"]
[transforms.nginx_parse_coercer]
type = "coercer"
inputs = ["nginx_parse_remove_fields"]
types.request_length = "int"
types.request_time = "float"
types.response_status = "int"
types.response_body_bytes_sent = "int"
types.remote_port = "int"
types.upstream_bytes_received = "int"
types.upstream_bytes_send = "int"
types.upstream_connect_time = "float"
types.upstream_header_time = "float"
types.upstream_response_length = "int"
types.upstream_response_time = "float"
types.upstream_status = "int"
types.timestamp = "timestamp"
[sinks.nginx_output_clickhouse]
inputs = ["nginx_parse_coercer"]
type = "clickhouse"
database = "vector"
healthcheck = true
host = "http://172.26.10.109:8123" # Адрес Clickhouse
table = "logs"
encoding.timestamp_format = "unix"
buffer.type = "disk"
buffer.max_size = 104900000
buffer.when_full = "block"
request.in_flight_limit = 20
[sinks.elasticsearch]
type = "elasticsearch"
inputs = ["nginx_parse_coercer"]
compression = "none"
healthcheck = true
# 172.26.10.116 - сервер где установен elasticsearch
host = "http://172.26.10.116:9200"
index = "vector-%Y-%m-%d"آپ transforms.nginx_parse_add_defaults سیکشن کو ایڈجسٹ کر سکتے ہیں۔
جیسا کہ ان کنفیگرز کو ایک چھوٹے سی ڈی این کے لیے استعمال کرتا ہے اور upstream_* میں کئی قدریں ہو سکتی ہیں
مثال کے طور پر:
"upstream_addr": "128.66.0.10:443, 128.66.0.11:443, 128.66.0.12:443"
"upstream_bytes_received": "-, -, 123"
"upstream_status": "502, 502, 200"اگر یہ آپ کی صورت حال نہیں ہے، تو اس حصے کو آسان بنایا جا سکتا ہے
آئیے systemd /etc/systemd/system/vector.service کے لیے سروس سیٹنگز بنائیں
# /etc/systemd/system/vector.service
[Unit]
Description=Vector
After=network-online.target
Requires=network-online.target
[Service]
User=vector
Group=vector
ExecStart=/usr/bin/vector
ExecReload=/bin/kill -HUP $MAINPID
Restart=no
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=vector
[Install]
WantedBy=multi-user.targetٹیبل بنانے کے بعد، آپ ویکٹر چلا سکتے ہیں۔
systemctl enable vector
systemctl start vectorویکٹر لاگز کو اس طرح دیکھا جا سکتا ہے:
journalctl -f -u vectorنوشتہ جات میں اس طرح کے اندراجات ہونے چاہئیں
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)شاید قارئین، ipv6 سپورٹ شامل کریں۔
فائل بنائیں /etc/sysctl.d/98-disable-ipv6.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1ترتیبات کو لاگو کرنا
sysctl --systemآئیے nginx انسٹال کریں۔
nginx ریپوزٹری فائل شامل کی گئی /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=truenginx پیکیج انسٹال کریں۔
yum install -y nginxسب سے پہلے، ہمیں فائل /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
server {
listen 80;
server_name vhost1;
location / {
proxy_pass http://172.26.10.106:8080;
}
}ورچوئل ہوسٹ شامل کریں /etc/nginx/conf.d/vhost2.conf
server {
listen 80;
server_name vhost2;
location / {
proxy_pass http://172.26.10.108:8080;
}
}ورچوئل ہوسٹ شامل کریں /etc/nginx/conf.d/vhost3.conf
server {
listen 80;
server_name vhost3;
location / {
proxy_pass http://172.26.10.109:8080;
}
}ورچوئل ہوسٹ شامل کریں /etc/nginx/conf.d/vhost4.conf
server {
listen 80;
server_name vhost4;
location / {
proxy_pass http://172.26.10.116:8080;
}
}ورچوئل ہوسٹس (سرور کا 172.26.10.106 ip جہاں nginx انسٹال ہے) تمام سرورز کو /etc/hosts فائل میں شامل کریں:
172.26.10.106 vhost1
172.26.10.106 vhost2
172.26.10.106 vhost3
172.26.10.106 vhost4اور اگر سب کچھ تیار ہے تو
nginx -t
systemctl restart nginxاب ہم اسے خود انسٹال کرتے ہیں۔
yum install -y https://packages.timber.io/vector/0.9.X/vector-x86_64.rpmآئیے systemd /etc/systemd/system/vector.service کے لیے ایک سیٹنگ فائل بنائیں
[Unit]
Description=Vector
After=network-online.target
Requires=network-online.target
[Service]
User=vector
Group=vector
ExecStart=/usr/bin/vector
ExecReload=/bin/kill -HUP $MAINPID
Restart=no
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=vector
[Install]
WantedBy=multi-user.targetاور فائل بیٹ کی تبدیلی کو /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 in centos ایڈم گروپ کے حقوق کے ساتھ لاگ بناتا ہے۔
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; done2st سرور سے
while true; do ab -H "User-Agent: 2server" -c 100 -n 10 -t 10 http://vhost2/; sleep 1; done3st سرور سے
while true; do ab -H "User-Agent: 3server" -c 100 -n 10 -t 10 http://vhost3/; sleep 1; done4st سرور سے
while true; do ab -H "User-Agent: 4server" -c 100 -n 10 -t 10 http://vhost4/; sleep 1; doneآئیے کلک ہاؤس میں ڈیٹا چیک کریں۔
کلک ہاؤس پر جائیں۔
clickhouse-client -h 172.26.10.109 -mSQL استفسار کرنا
SELECT * FROM vector.logs;
┌─node_name────┬───────────timestamp─┬─server_name─┬─user_id─┬─request_full───┬─request_user_agent─┬─request_http_host─┬─request_uri─┬─request_scheme─┬─request_method─┬─request_length─┬─request_time─┬─request_referrer─┬─response_status─┬─response_body_bytes_sent─┬─response_content_type─┬───remote_addr─┬─remote_port─┬─remote_user─┬─upstream_addr─┬─upstream_port─┬─upstream_bytes_received─┬─upstream_bytes_sent─┬─upstream_cache_status─┬─upstream_connect_time─┬─upstream_header_time─┬─upstream_response_length─┬─upstream_response_time─┬─upstream_status─┬─upstream_content_type─┐
│ nginx-vector │ 2020-08-07 04:32:42 │ vhost1 │ │ GET / HTTP/1.0 │ 1server │ vhost1 │ / │ http │ GET │ 66 │ 0.028 │ │ 404 │ 27 │ │ 172.26.10.106 │ 45886 │ │ 172.26.10.106 │ 0 │ 109 │ 97 │ DISABLED │ 0 │ 0.025 │ 27 │ 0.029 │ 404 │ │
└──────────────┴─────────────────────┴─────────────┴─────────┴────────────────┴────────────────────┴───────────────────┴─────────────┴────────────────┴────────────────┴────────────────┴──────────────┴──────────────────┴─────────────────┴──────────────────────────┴───────────────────────┴───────────────┴─────────────┴─────────────┴───────────────┴───────────────┴─────────────────────────┴─────────────────────┴───────────────────────┴───────────────────────┴──────────────────────┴──────────────────────────┴────────────────────────┴─────────────────┴───────────────────────کلک ہاؤس میں میزوں کا سائز معلوم کریں۔
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 گنا کم لیتا ہے۔
ویکٹر میں، کمپریشن فیلڈ بطور ڈیفالٹ استعمال ہوتا ہے۔
ٹیلیگرام چیٹ بذریعہ
ٹیلیگرام چیٹ بذریعہ
ٹیلیگرام چیٹ بذریعہ ""
ماخذ: www.habr.com
