
, jurnal məlumatlarını, ölçüləri və hadisələri toplamaq, çevirmək və göndərmək üçün nəzərdə tutulmuşdur.
→
Rust dilində yazıldığı üçün analoqları ilə müqayisədə yüksək performans və aşağı RAM sərfiyyatı ilə seçilir. Bundan əlavə, düzgünlüklə əlaqəli funksiyalara, xüsusən də göndərilməmiş hadisələri diskdə buferə saxlamaq və faylları döndərmək imkanına çox diqqət yetirilir.
Memarlıq olaraq, Vector bir və ya daha çox mesaj qəbul edən bir hadisə yönləndiricisidir mənbələr, isteğe bağlı olaraq bu mesajlar üzərində tətbiq edilir çevrilmələr, və onları birinə və ya bir neçəsinə göndərir drenajlar.
Vector filebeat və logstash üçün əvəzdir, o, hər iki rolda çıxış edə bilər (logları qəbul etmək və göndərmək), onlar haqqında ətraflı məlumat .
Logstash-da zəncir giriş → filter → çıxış kimi qurulubsa, Vektorda belədir → →
Nümunələr sənədlərdə tapıla bilər.
Bu təlimat yenidən işlənmiş təlimatdır . Orijinal təlimatlarda geoip emal var. Daxili şəbəkədən geoip-i sınaqdan keçirərkən vektor xəta verdi.
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=30Kiməsə geoip-i emal etmək lazımdırsa, orijinal təlimatlara baxın .
Nginx (Access logs) → Vector (Client | Filebeat) → Vector (Server | Logstash) → ayrı-ayrılıqda Clickhouse-da və Elasticsearch-də ayrı-ayrılıqda konfiqurasiya edəcəyik. 4 server quraşdıracağıq. Baxmayaraq ki, onu 3 serverlə keçə bilərsiniz.

Sxem belə bir şeydir.
Bütün serverlərinizdə Selinux-u deaktiv edin
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
rebootBiz bütün serverlərdə HTTP server emulyatoru + utilitlər quraşdırırıq
HTTP server emulyatoru olaraq istifadə edəcəyik etibarən
Nodejs-stub-serverdə rpm yoxdur. bunun üçün rpm yaradın. rpm istifadə edərək qurulacaq
Antonpatsev/nodejs-stub-server repozitorunu əlavə edin
yum -y install yum-plugin-copr epel-release
yes | yum copr enable antonpatsev/nodejs-stub-serverBütün serverlərdə nodejs-stub-server, Apache benchmark və ekran terminal multipleksorunu quraşdırın
yum -y install stub_http_server screen mc httpd-tools screen/var/lib/stub_http_server/stub_http_server.js faylında stub_http_server cavab vaxtını düzəltdim ki, daha çox qeyd olsun.
var max_sleep = 10;stub_http_server-i işə salaq.
systemctl start stub_http_server
systemctl enable stub_http_serverserverdə 3
ClickHouse SSE 4.2 təlimat dəstindən istifadə edir, ona görə də başqa cür göstərilməyibsə, istifadə olunan prosessorda onun dəstəyi əlavə sistem tələbinə çevrilir. Mövcud prosessorun SSE 4.2-ni dəstəklədiyini yoxlamaq üçün əmr budur:
grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"Əvvəlcə rəsmi depoya qoşulmalısınız:
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_64Paketləri quraşdırmaq üçün aşağıdakı əmrləri yerinə yetirməlisiniz:
sudo yum install -y clickhouse-server clickhouse-clientClickhouse-serverə /etc/clickhouse-server/config.xml faylında şəbəkə kartını dinləməyə icazə verin
<listen_host>0.0.0.0</listen_host>Giriş səviyyəsinin izdən sazlamaya dəyişdirilməsi
debug
Standart sıxılma parametrləri:
min_compress_block_size 65536
max_compress_block_size 1048576Zstd sıxılmasını aktivləşdirmək üçün konfiqurasiyaya toxunmamaq, əksinə DDL-dən istifadə etmək tövsiyə edildi.

Google-da DDL vasitəsilə zstd sıxılmasını necə istifadə edəcəyimi tapa bilmədim. Ona görə də olduğu kimi buraxdım.
Clickhouse-da zstd sıxılma istifadə edən həmkarlar, lütfən, təlimatları paylaşın.
Serveri bir demon kimi işə salmaq üçün aşağıdakıları işlədin:
service clickhouse-server startİndi Clickhouse-un qurulmasına keçək
Clickhouse-a keçin
clickhouse-client -h 172.26.10.109 -m172.26.10.109 — Clickhouse-un quraşdırıldığı serverin IP-si.
Gəlin vektor verilənlər bazası yaradaq
CREATE DATABASE vector;Verilənlər bazasının mövcudluğunu yoxlayaq.
show databases;vector.logs cədvəli yaradın.
/* Это таблица где хранятся логи как есть */
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;Cədvəllərin yaradıldığını yoxlayırıq. başlayaq clickhouse-client və müraciət edin.
Gəlin vektor verilənlər bazasına keçək.
use vector;
Ok.
0 rows in set. Elapsed: 0.001 sec.Gəlin cədvəllərə baxaq.
show tables;
┌─name────────────────┐
│ logs │
└─────────────────────┘Clickhouse ilə müqayisə üçün eyni məlumatları Elasticsearch-ə göndərmək üçün 4-cü serverdə elasticsearch quraşdırılması
Ümumi rpm açarı əlavə edin
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearchGəlin 2 repo yaradaq:
/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 və kibana quraşdırın
yum install -y kibana elasticsearch1 nüsxədə olacağı üçün /etc/elasticsearch/elasticsearch.yml faylına aşağıdakıları əlavə etməlisiniz:
discovery.type: single-nodeHəmin vektor başqa serverdən elasticsearch-a məlumat göndərə bilsin, gəlin network.host-u dəyişək.
network.host: 0.0.0.0Kibana qoşulmaq üçün /etc/kibana/kibana.yml faylında server.host parametrini dəyişdirin.
server.host: "0.0.0.0"Köhnə və autostart-a elasticsearch daxil edin
systemctl enable elasticsearch
systemctl start elasticsearchvə kibana
systemctl enable kibana
systemctl start kibanaTək düyünlü rejim üçün Elasticsearch konfiqurasiya edilir 1 parça, 0 replika. Çox güman ki, çox sayda serverdən ibarət bir çoxluq olacaq və bunu etmək lazım deyil.
Gələcək indekslər üçün standart şablonu yeniləyin:
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"}}' Quraşdırma server 2-də Logstash üçün əvəz kimi
yum install -y https://packages.timber.io/vector/0.9.X/vector-x86_64.rpm mc httpd-tools screenGəlin Logstash-ın əvəzi kimi Vector-u quraşdıraq. /etc/vector/vector.toml faylının redaktə edilməsi
# /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"Siz transforms.nginx_parse_add_defaults bölməsini tənzimləyə bilərsiniz.
Kimi bu konfiqurasiyaları kiçik bir CDN üçün istifadə edir və yuxarı axınında bir neçə dəyər ola bilər_*
Misal üçün:
"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"Bu sizin vəziyyətiniz deyilsə, bu bölmə sadələşdirilə bilər
systemd /etc/systemd/system/vector.service üçün xidmət parametrlərini yaradaq
# /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.targetCədvəllər yaratdıqdan sonra Vector-i işə sala bilərsiniz
systemctl enable vector
systemctl start vectorVektor qeydlərinə aşağıdakı kimi baxmaq olar:
journalctl -f -u vectorQeydlərdə belə qeydlər olmalıdır
INFO vector::topology::builder: Healthcheck: Passed.
INFO vector::topology::builder: Healthcheck: Passed.Müştəridə (Veb server) - 1-ci server
Nginx ilə serverdə ipv6-nı deaktiv etməlisiniz, çünki clickhouse-dakı logs cədvəli sahədən istifadə edir. upstream_addr IPv4, çünki mən şəbəkə daxilində ipv6 istifadə etmirəm. Əgər ipv6 söndürülməyibsə, xətalar olacaq:
DB::Exception: Invalid IPv4 value.: (while read the value of key upstream_addr)Bəlkə oxucular, ipv6 dəstəyi əlavə edin.
/etc/sysctl.d/98-disable-ipv6.conf faylını yaradın
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1Parametrlərin tətbiqi
sysctl --systemNginx quraşdıraq.
Əlavə edilmiş nginx depo faylı /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 paketini quraşdırın
yum install -y nginxƏvvəlcə /etc/nginx/nginx.conf faylında Nginx-də log formatını konfiqurasiya etməliyik.
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;
}Cari konfiqurasiyanızı pozmamaq üçün Nginx sizə bir neçə access_log direktivinə malik olmağa imkan verir
access_log /var/log/nginx/access.log main; # Стандартный лог
access_log /var/log/nginx/access.json.log vector; # Новый лог в формате jsonYeni qeydlər üçün logrotasiya qaydası əlavə etməyi unutmayın (əgər log faylı .log ilə bitmirsə)
default.conf faylını /etc/nginx/conf.d/ ünvanından silin
rm -f /etc/nginx/conf.d/default.confVirtual host /etc/nginx/conf.d/vhost1.conf əlavə edin
server {
listen 80;
server_name vhost1;
location / {
proxy_pass http://172.26.10.106:8080;
}
}Virtual host /etc/nginx/conf.d/vhost2.conf əlavə edin
server {
listen 80;
server_name vhost2;
location / {
proxy_pass http://172.26.10.108:8080;
}
}Virtual host /etc/nginx/conf.d/vhost3.conf əlavə edin
server {
listen 80;
server_name vhost3;
location / {
proxy_pass http://172.26.10.109:8080;
}
}Virtual host /etc/nginx/conf.d/vhost4.conf əlavə edin
server {
listen 80;
server_name vhost4;
location / {
proxy_pass http://172.26.10.116:8080;
}
}/etc/hosts faylına bütün serverlərə virtual hostları (nginx-in quraşdırıldığı serverin 172.26.10.106 ip) əlavə edin:
172.26.10.106 vhost1
172.26.10.106 vhost2
172.26.10.106 vhost3
172.26.10.106 vhost4Və hər şey hazırdırsa
nginx -t
systemctl restart nginxİndi onu özümüz quraşdıraq
yum install -y https://packages.timber.io/vector/0.9.X/vector-x86_64.rpmSystemd /etc/systemd/system/vector.service üçün parametrlər faylı yaradaq
[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.targetVə /etc/vector/vector.toml konfiqurasiyasında Filebeat əvəzini konfiqurasiya edin. IP ünvanı 172.26.10.108 log serverinin IP ünvanıdır (Vektor-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"İstifadəçi vektorunu müvafiq qrupa əlavə etməyi unutmayın ki, o, jurnal fayllarını oxuya bilsin. Məsələn, nginx in centos adm qrupu hüquqları ilə qeydlər yaradır.
usermod -a -G adm vectorGəlin vektor xidmətinə başlayaq
systemctl enable vector
systemctl start vectorVektor qeydlərinə aşağıdakı kimi baxmaq olar:
journalctl -f -u vectorGünlüklərdə belə bir giriş olmalıdır
INFO vector::topology::builder: Healthcheck: Passed.Stress Testi
Test Apache benchmark istifadə edərək həyata keçirilir.
httpd-tools paketi bütün serverlərdə quraşdırılıb
Ekranda 4 fərqli serverdən Apache etalonundan istifadə edərək test etməyə başlayırıq. Əvvəlcə ekran terminalı multipleksorunu işə salırıq və sonra Apache etalonundan istifadə edərək test etməyə başlayırıq. Ekranla necə işləmək olar, burada tapa bilərsiniz .
1-ci serverdən
while true; do ab -H "User-Agent: 1server" -c 100 -n 10 -t 10 http://vhost1/; sleep 1; done2-ci serverdən
while true; do ab -H "User-Agent: 2server" -c 100 -n 10 -t 10 http://vhost2/; sleep 1; done3-ci serverdən
while true; do ab -H "User-Agent: 3server" -c 100 -n 10 -t 10 http://vhost3/; sleep 1; done4-ci serverdən
while true; do ab -H "User-Agent: 4server" -c 100 -n 10 -t 10 http://vhost4/; sleep 1; doneGəlin Clickhouse-da məlumatları yoxlayaq
Clickhouse-a keçin
clickhouse-client -h 172.26.10.109 -mSQL sorğusunun hazırlanması
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 │ │
└──────────────┴─────────────────────┴─────────────┴─────────┴────────────────┴────────────────────┴───────────────────┴─────────────┴────────────────┴────────────────┴────────────────┴──────────────┴──────────────────┴─────────────────┴──────────────────────────┴───────────────────────┴───────────────┴─────────────┴─────────────┴───────────────┴───────────────┴─────────────────────────┴─────────────────────┴───────────────────────┴───────────────────────┴──────────────────────┴──────────────────────────┴────────────────────────┴─────────────────┴───────────────────────Clickhouse-da cədvəllərin ölçüsünü öyrənin
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;Gəlin, Clickhouse-da nə qədər log tutduğunu öyrənək.

Qeydlər cədvəlinin ölçüsü 857.19 MB-dır.

Elasticsearch-də indeksdəki eyni məlumatın ölçüsü 4,5 GB-dır.
Parametrlərdə vektorda məlumatları göstərməsəniz, Clickhouse Elasticsearch-dən 4500/857.19 = 5.24 dəfə az alır.
Vektorda sıxılma sahəsi standart olaraq istifadə olunur.
Telegram çatı
Telegram çatı
"Telegram çatı""
Mənbə: www.habr.com
