→
زنگ جي ٻولي ۾ لکيو وڃي ٿو، اهو اعلي ڪارڪردگي ۽ ان جي اينالاگ جي مقابلي ۾ گهٽ ريم واپرائڻ جي خاصيت آهي. ان کان علاوه، صحيحيت سان لاڳاپيل ڪمن تي تمام گهڻو ڌيان ڏنو ويو آهي، خاص طور تي، ڊسڪ تي بفر تي اڻڄاتل واقعن کي محفوظ ڪرڻ ۽ فائلن کي گھمڻ جي صلاحيت.
تعميراتي طور تي، ویکٹر هڪ ايونٽ روٽر آهي جيڪو هڪ يا وڌيڪ کان پيغام وصول ڪري ٿو ذريعااختياري طور تي انهن پيغامن تي لاڳو ڪرڻ تبديليون، ۽ انهن کي هڪ يا وڌيڪ ڏانهن موڪلڻ نالين.
ویکٹر فائل بيٽ ۽ لاگ اسٽاش جو متبادل آهي، اهو ٻنهي ڪردارن ۾ ڪم ڪري سگهي ٿو (لاگ وصول ڪرڻ ۽ موڪلڻ)، انهن بابت وڌيڪ تفصيل
جيڪڏهن Logstash ۾ زنجير ان پٽ → فلٽر → آئوٽ پٽ طور ٺهيل آهي ته پوءِ ویکٹر ۾ اهو آهي
مثال دستاويز ۾ ملي سگهن ٿا.
هي هدايتون هڪ نظر ثاني ٿيل هدايتن مان آهي
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
جيڪڏهن ڪنهن کي جيوپ کي پروسيس ڪرڻ جي ضرورت آهي، ته پوء اصل هدايتون ڏانهن رجوع ڪريو
اسان نگنڪس (Access logs) → Vector (Client | Filebeat) → Vector (Server | Logstash) → Clickhouse ۾ الڳ الڳ ۽ Elasticsearch ۾ الڳ الڳ ترتيب ڏينداسين. اسان 4 سرورز کي انسٽال ڪنداسين. جيتوڻيڪ توھان ان کي 3 سرورز سان بائي پاس ڪري سگھو ٿا.
اسڪيم ڪجهه هن طرح آهي.
توهان جي سڀني سرورن تي Selinux کي بند ڪريو
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
reboot
اسان سڀني سرورن تي هڪ HTTP سرور ايموليٽر + يوٽيلٽيون انسٽال ڪريون ٿا
هڪ HTTP سرور ايموليٽر جي طور تي اسان استعمال ڪنداسين
Nodejs-stub-server وٽ rpm ڪونهي.
repository antonpatsev/nodejs-stub-server شامل ڪريو
yum -y install yum-plugin-copr epel-release
yes | yum copr enable antonpatsev/nodejs-stub-server
انسٽال ڪريو nodejs-stub-server، Apache benchmark ۽ اسڪرين ٽرمينل ملٽي پلڪسر سڀني سرورن تي
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>
لاگنگ جي سطح کي ٽريڪ کان ڊيبگ تائين تبديل ڪرڻ
debug
معياري ڪمپريشن سيٽنگون:
min_compress_block_size 65536
max_compress_block_size 1048576
Zstd کمپريشن کي چالو ڪرڻ لاء، اهو مشورو ڏنو ويو ته ترتيب کي ڇڪڻ نه، بلڪه ڊي ڊي ايل استعمال ڪرڻ لاء.
مان نه ڳولي سگهيس ته گوگل ۾ ڊي ڊي ايل ذريعي zstd ڪمپريشن ڪيئن استعمال ڪجي. تنهنڪري مون ان کي ڇڏي ڏنو.
ساٿي جيڪي ڪلڪ هائوس ۾ zstd کمپريشن استعمال ڪندا آهن، مهرباني ڪري هدايتون حصيداري ڪريو.
سرور کي ڊيمن جي طور تي شروع ڪرڻ لاء، هلائڻ:
service clickhouse-server start
ھاڻي اچو ته ڪلڪ ھاؤس قائم ڪرڻ ڏانھن وڃو
ڪلڪ هائوس ڏانھن وڃو
clickhouse-client -h 172.26.10.109 -m
172.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 │
└─────────────────────┘
4th سرور تي elasticsearch کي انسٽال ڪرڻ لاءِ ساڳئي ڊيٽا کي Elasticsearch ڏانهن Clickhouse سان مقابلي لاءِ موڪلڻ لاءِ
عوامي 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-md
elasticsearch ۽ kibana انسٽال ڪريو
yum install -y kibana elasticsearch
جيئن ته اهو 1 ڪاپي ۾ هوندو، توهان کي هيٺ ڏنل شامل ڪرڻ جي ضرورت آهي /etc/elasticsearch/elasticsearch.yml فائل:
discovery.type: single-node
تنهن ڪري اهو ویکٹر ٻئي سرور کان لچڪدار ڳولا ڏانهن ڊيٽا موڪلي سگهي ٿو، اچو ته تبديل ڪريون network.host.
network.host: 0.0.0.0
kibana سان ڳنڍڻ لاء، فائل ۾ server.host پيٽرول تبديل ڪريو /etc/kibana/kibana.yml
server.host: "0.0.0.0"
پراڻي ۽ شامل ڪريو elasticsearch autostart ۾
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"}}'
تنصيب Vector سرور 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_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=true
nginx پيڪيج انسٽال ڪريو
yum install -y nginx
پهرين، اسان کي فائل ۾ Nginx ۾ لاگ فارميٽ ترتيب ڏيڻ جي ضرورت آهي /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;
}
توھان جي موجوده تشڪيل کي ٽوڙڻ لاءِ، نينگڪس توھان کي اجازت ڏئي ٿو ڪيترن ئي access_log ھدايتون
access_log /var/log/nginx/access.log main; # Стандартный лог
access_log /var/log/nginx/access.json.log vector; # Новый лог в формате json
نون لاگز لاءِ لاگروٽ ڪرڻ لاءِ قاعدو شامل ڪرڻ نه وساريو (جيستائين لاگ فائل .log سان ختم نه ٿئي)
default.conf تان هٽايو /etc/nginx/conf.d/
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 config ۾ فائل بيٽ جي متبادل کي ترتيب ڏيو. 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"
ویکٹر استعمال ڪندڙ کي گهربل گروپ ۾ شامل ڪرڻ نه وساريو ته جيئن هو لاگ فائلون پڙهي سگهي. مثال طور، centos ۾ 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 مختلف سرورز مان اپاپي بينچ مارڪ استعمال ڪندي جاچ شروع ڪندا آهيون. پهريون، اسان لانچ ڪيو اسڪرين ٽرمينل ملٽي پلڪسر، ۽ پوءِ اسان اپاچي بينچ مارڪ استعمال ڪندي جاچ شروع ڪريون ٿا. اسڪرين سان ڪيئن ڪم ڪجي جنهن ۾ توهان ڳولي سگهو ٿا
پهرين سرور کان
while true; do ab -H "User-Agent: 1server" -c 100 -n 10 -t 10 http://vhost1/; sleep 1; done
پهرين سرور کان
while true; do ab -H "User-Agent: 2server" -c 100 -n 10 -t 10 http://vhost2/; sleep 1; done
پهرين سرور کان
while true; do ab -H "User-Agent: 3server" -c 100 -n 10 -t 10 http://vhost3/; sleep 1; done
پهرين سرور کان
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 -m
هڪ SQL سوال ٺاهڻ
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 آهي.
جيڪڏهن توهان ویکٹر ۾ ڊيٽا جي وضاحت نه ڪندا آهيو پيٽرولن ۾، ڪلڪ هائوس 4500/857.19 = 5.24 ڀيرا گھٽ وٺندو آهي Elasticsearch جي ڀيٽ ۾.
ویکٹر ۾، ڪمپريشن فيلڊ ڊفالٽ طور استعمال ڪيو ويندو آهي.
ٽيليگرام چيٽ ذريعي
ٽيليگرام چيٽ ذريعي
ٽيليگرام چيٽ پاران "
جو ذريعو: www.habr.com