
, журнал маалыматтарын, көрсөткүчтөрдү жана окуяларды чогултуу, өзгөртүү жана жөнөтүү үчүн иштелип чыккан.
→
Rust тилинде жазылгандыктан, анын аналогдоруна салыштырмалуу жогорку өндүрүмдүүлүгү жана аз RAM керектөөсү менен мүнөздөлөт. Мындан тышкары, тууралыкка байланыштуу функцияларга, атап айтканда, дисктеги буферге жөнөтүлбөгөн окуяларды сактоо жана файлдарды айлантуу мүмкүнчүлүгүнө көп көңүл бурулат.
Архитектуралык жактан Вектор бир же бир нече билдирүүлөрдү кабыл алган окуя роутер булактар, ыктыярдуу түрдө бул билдирүүлөрдүн үстүнөн колдонуу трансформациялар, жана аларды бир же бир нечеге жөнөтүү дренаждар.
Vector - бул filebeat жана logstash үчүн алмаштыруу, ал эки ролдо тең иштей алат (журналдарды кабыл алуу жана жөнөтүү), алар боюнча кененирээк маалымат .
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Эгер кимдир бирөө geoipти иштетүү керек болсо, анда баштапкы нускамаларды караңыз .
Биз Nginx (Кирүү журналдары) → Вектор (Клиент | Filebeat) → Вектор (Сервер | Logstash) → Clickhouse'да өзүнчө жана Elasticsearch'те өзүнчө конфигурациялайбыз. Биз 4 серверди орнотобуз. Сиз аны 3 сервер менен айланып өтсөңүз болот.

Схема ушуга окшош.
Бардык серверлериңизде Selinuxту өчүрүңүз
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
rebootБиз бардык серверлерге HTTP сервер эмуляторун + утилиталарын орнотобуз
HTTP сервер эмулятору катары биз колдонобуз от
Nodejs-stub-серверинде rpm жок. ал үчүн rpm түзүү. rpm колдонуу менен түзүлөт
antonpatsev/nodejs-stub-server репозиторийсин кошуңуз
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-clientClickhouse-серверге /etc/clickhouse-server/config.xml файлындагы тармак картасын угууга уруксат бериңиз
<listen_host>0.0.0.0</listen_host>Каттоо деңгээлин издөөдөн мүчүлүштүктөрдү оңдоого өзгөртүү
жөндөөчү
Стандарттык кысуу орнотуулары:
min_compress_block_size 65536
max_compress_block_size 1048576Zstd кысуусун активдештирүү үчүн конфигурацияга тийбей, тескерисинче DDLди колдонуу сунушталды.

Мен Google'да DDL аркылуу zstd кысуу кантип колдонууну таба алган жокмун. Ошентип, мен аны ошол бойдон калтырдым.
Clickhouse'да zstd компрессиясын колдонгон кесиптештер, нускамаларды бөлүшүңүз.
Серверди демон катары баштоо үчүн:
service clickhouse-server startЭми Clickhouse орнотууга өтөлү
Clickhouse'га өтүңүз
clickhouse-client -h 172.26.10.109 -m172.26.10.109 — Clickhouse орнотулган сервердин 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 │
└─────────────────────┘Clickhouse менен салыштыруу үчүн ошол эле маалыматтарды Elasticsearchке жөнөтүү үчүн 4-серверге elasticsearch орнотуу
Жалпыга ачык rpm ачкычын кошуңуз
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch2 репо түзөлү:
/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.0Kibana'га туташуу үчүн /etc/kibana/kibana.yml файлындагы server.host параметрин өзгөртүңүз
server.host: "0.0.0.0"Эски жана autostartга elasticsearch кошуу
systemctl enable elasticsearch
systemctl start elasticsearchжана кибана
systemctl enable kibana
systemctl start kibanaElasticsearch бир түйүн режими үчүн конфигурацияланууда 1 сынык, 0 реплика. Кыязы, сизде көп сандагы серверлердин кластери болот жана муну жасоонун кереги жок.
Келечектеги индекстер үчүн демейки шаблонду жаңыртыңыз:
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"}}' жөндөө Server 2деги Logstash үчүн алмаштыруу катары
yum install -y https://packages.timber.io/vector/0.9.X/vector-x86_64.rpm mc httpd-tools screenLogstashтын ордуна Векторду орнотуп алалы. /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 бөлүмүн тууралай аласыз.
бери кичинекей CDN үчүн бул конфигурацияларды колдонот жана 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.Кардар боюнча (Веб сервер) - 1-сервер
Nginx менен серверде, сиз IPv6 өчүрүшүңүз керек, анткени Clickhouse'дагы журналдар таблицасы талааны колдонот. 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 --systemnginx орнотобуз.
Кошулган 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 директивасына ээ болууга мүмкүнчүлүк берет
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;
}
}/etc/hosts файлына бардык серверлерге виртуалдык хостторду (nginx орнотулган сервердин 172.26.10.106 ip) кошуңуз:
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 конфигурациясында Filebeat алмаштырууну конфигурациялаңыз. 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 adm group укуктары менен журналдарды түзөт.
usermod -a -G adm vectorВектордук кызматты баштайлы
systemctl enable vector
systemctl start vectorВектордук журналдарды төмөнкүдөй көрүүгө болот:
journalctl -f -u vectorЖурналдарда ушундай жазуу болушу керек
INFO vector::topology::builder: Healthcheck: Passed.Стресс тестирлөө
Биз Apache эталонунун жардамы менен тестирлөө жүргүзөбүз.
httpd-tools пакети бардык серверлерде орнотулган
Экрандагы 4 башка серверден Apache эталондорун колдонуп сынап баштайбыз. Биринчиден, биз экран терминалынын мультиплексорун ишке киргизебиз, андан кийин Apache эталондорун колдонуу менен тестирлөөнү баштайбыз. Экран менен кантип иштөөнү таба аласыз .
1-серверден
while true; do ab -H "User-Agent: 1server" -c 100 -n 10 -t 10 http://vhost1/; sleep 1; done2-серверден
while true; do ab -H "User-Agent: 2server" -c 100 -n 10 -t 10 http://vhost2/; sleep 1; done3-серверден
while true; do ab -H "User-Agent: 3server" -c 100 -n 10 -t 10 http://vhost3/; sleep 1; done4-серверден
while true; do ab -H "User-Agent: 4server" -c 100 -n 10 -t 10 http://vhost4/; sleep 1; doneКелгиле, Clickhouse ичиндеги маалыматтарды текшерип көрөлү
Clickhouse'га өтүңүз
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 │ │
└──────────────┴─────────────────────┴─────────────┴─────────┴────────────────┴────────────────────┴───────────────────┴─────────────┴────────────────┴────────────────┴────────────────┴──────────────┴──────────────────┴─────────────────┴──────────────────────────┴───────────────────────┴───────────────┴─────────────┴─────────────┴───────────────┴───────────────┴─────────────────────────┴─────────────────────┴───────────────────────┴───────────────────────┴──────────────────────┴──────────────────────────┴────────────────────────┴─────────────────┴───────────────────────Clickhouseдеги таблицалардын өлчөмүн табыңыз
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;Келгиле, Clickhouse'да канча журналдарды ээлегенин билели.

журналдар үстөл өлчөмү 857.19 MB болуп саналат.

Elasticsearch индексиндеги ошол эле маалыматтардын көлөмү 4,5 ГБ.
Эгер параметрлерде вектордо маалыматтарды көрсөтпөсөңүз, Clickhouse Elasticsearchге караганда 4500/857.19 = 5.24 эсе аз алат.
Вектордо кысуу талаасы демейки боюнча колдонулат.
Telegram чат аркылуу
Telegram чат аркылуу
Telegram чаты ""
Source: www.habr.com
