
, günlük verilerini, ölçümleri ve olayları toplamak, dönüştürmek ve göndermek için tasarlanmıştır.
→
Rust dilinde yazılmış olması nedeniyle benzerlerine kıyasla yüksek performans ve düşük RAM tüketimi ile öne çıkıyor. Ek olarak, doğrulukla ilgili işlevlere, özellikle de gönderilmemiş olayları diskteki bir arabelleğe kaydetme ve dosyaları döndürme becerisine çok dikkat edilir.
Mimari olarak Vector, bir veya daha fazla cihazdan mesaj alan bir olay yönlendiricisidir. kaynakların, isteğe bağlı olarak bu mesajların üzerine uygulanarak transformasyonve bunları bir veya daha fazla kişiye göndermek kanalizasyonlar.
Vector, filebeat ve logstash'ın yerine geçer; her iki rolü de üstlenebilir (günlükleri alma ve gönderme), bunlar hakkında daha fazla ayrıntı .
Logstash'ta zincir giriş → filtre → çıkış olarak oluşturulmuşsa, Vector'da şöyledir: → →
Örnekler belgelerde bulunabilir.
Bu talimat, revize edilmiş bir talimattır. . Orijinal talimatlar coğrafi ip işlemeyi içerir. Geoip'i dahili bir ağdan test ederken vektör bir hata 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=30Birisinin geoip'i işlemesi gerekiyorsa, orijinal talimatlara bakın. .
Nginx (Erişim logları) → Vector (Client | Filebeat) → Vector (Server | Logstash) → kombinasyonunu Clickhouse'da ayrı ayrı ve Elasticsearch'te ayrı ayrı yapılandıracağız. 4 adet sunucu kuracağız. Yine de 3 sunucuyla bunu atlayabilirsiniz.

Şema bunun gibi bir şey.
Tüm sunucularınızda Selinux'u devre dışı bırakın
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
rebootTüm sunuculara bir HTTP sunucusu emülatörü + yardımcı programlar yüklüyoruz
HTTP sunucusu emülatörü olarak kullanacağız itibaren
Nodejs-saplama-sunucusunun rpm'si yok. bunun için rpm oluşturun. rpm kullanılarak oluşturulacak
antonpatsev/nodejs-stub-server deposunu ekleyin
yum -y install yum-plugin-copr epel-release
yes | yum copr enable antonpatsev/nodejs-stub-serverTüm sunuculara nodejs-stub-server, Apache kıyaslama ve ekran terminal çoklayıcıyı yükleyin
yum -y install stub_http_server screen mc httpd-tools screenDaha fazla günlük olması için /var/lib/stub_http_server/stub_http_server.js dosyasındaki stub_http_server yanıt süresini düzelttim.
var max_sleep = 10;Stub_http_server'ı başlatalım.
systemctl start stub_http_server
systemctl enable stub_http_serversunucu 3'te
ClickHouse, SSE 4.2 talimat setini kullanır, dolayısıyla aksi belirtilmedikçe, kullanılan işlemcide bunun desteklenmesi ek bir sistem gereksinimi haline gelir. Mevcut işlemcinin SSE 4.2'yi destekleyip desteklemediğini kontrol etmek için komut:
grep -q sse4_2 /proc/cpuinfo && echo "SSE 4.2 supported" || echo "SSE 4.2 not supported"Öncelikle resmi depoyu bağlamanız gerekir:
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_64Paketleri yüklemek için aşağıdaki komutları çalıştırmanız gerekir:
sudo yum install -y clickhouse-server clickhouse-clientClickhouse-server'ın /etc/clickhouse-server/config.xml dosyasındaki ağ kartını dinlemesine izin ver
<listen_host>0.0.0.0</listen_host>Günlük düzeyini izlemeden hata ayıklamaya değiştirme
ayıklamak
Standart sıkıştırma ayarları:
min_compress_block_size 65536
max_compress_block_size 1048576Zstd sıkıştırmasını etkinleştirmek için yapılandırmaya dokunmamanız, bunun yerine DDL kullanmanız önerildi.

Google'da zstd sıkıştırmasının DDL aracılığıyla nasıl kullanılacağını bulamadım. Bu yüzden olduğu gibi bıraktım.
Clickhouse'da zstd sıkıştırmasını kullanan meslektaşlarımız lütfen talimatları paylaşın.
Sunucuyu bir daemon olarak başlatmak için şunu çalıştırın:
service clickhouse-server startŞimdi Clickhouse kurulumuna geçelim
Clickhouse'a git
clickhouse-client -h 172.26.10.109 -m172.26.10.109 — Clickhouse'un kurulu olduğu sunucunun IP'si.
Bir vektör veritabanı oluşturalım
CREATE DATABASE vector;Veritabanının var olup olmadığını kontrol edelim.
show databases;Bir Vector.logs tablosu oluşturun.
/* Это таблица где хранятся логи как есть */
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;Tabloların oluşturulduğunu kontrol ediyoruz. Hadi başlatalım clickhouse-client ve bir talepte bulunun.
Vektör veritabanına gidelim.
use vector;
Ok.
0 rows in set. Elapsed: 0.001 sec.Tablolara bakalım.
show tables;
┌─name────────────────┐
│ logs │
└─────────────────────┘Aynı verileri Clickhouse ile karşılaştırmak üzere Elasticsearch'e göndermek için 4. sunucuya elasticsearch'ü yükleme
Genel bir rpm anahtarı ekleyin
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch2 repo oluşturalım:
/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 ve kibana'yı yükleyin
yum install -y kibana elasticsearch1 kopya halinde olacağından /etc/elasticsearch/elasticsearch.yml dosyasına aşağıdakileri eklemeniz gerekmektedir:
discovery.type: single-nodeBu vektörün başka bir sunucudan elasticsearch’e veri gönderebilmesi için network.host’u değiştirelim.
network.host: 0.0.0.0Kibana'ya bağlanmak için /etc/kibana/kibana.yml dosyasındaki server.Host parametresini değiştirin.
server.host: "0.0.0.0"Eski ve otomatik başlatmaya elasticsearch'ü dahil et
systemctl enable elasticsearch
systemctl start elasticsearchve kibana
systemctl enable kibana
systemctl start kibanaElasticsearch'ü tek düğüm modu 1 parça, 0 kopya için yapılandırma. Büyük ihtimalle çok sayıda sunucudan oluşan bir kümeye sahip olacaksınız ve bunu yapmanıza gerek yok.
Gelecekteki dizinler için varsayılan şablonu güncelleyin:
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"}}' Montaj sunucu 2'deki Logstash'ın yerine
yum install -y https://packages.timber.io/vector/0.9.X/vector-x86_64.rpm mc httpd-tools screenLogstash'ın yerine Vector'u ayarlayalım. /etc/vector/vector.toml dosyasını düzenleme
# /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 bölümünü ayarlayabilirsiniz.
beri bu yapılandırmaları küçük bir CDN için kullanır ve upstream_*'da birkaç değer olabilir
Örneğin:
"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"Durumunuz bu değilse bu bölüm basitleştirilebilir
systemd /etc/systemd/system/vector.service için servis ayarlarını oluşturalım
# /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.targetTabloları oluşturduktan sonra Vector'u çalıştırabilirsiniz.
systemctl enable vector
systemctl start vectorVektör günlükleri şu şekilde görüntülenebilir:
journalctl -f -u vectorGünlüklerde buna benzer girişler olmalı
INFO vector::topology::builder: Healthcheck: Passed.
INFO vector::topology::builder: Healthcheck: Passed.İstemcide (Web sunucusu) - 1. sunucu
Nginx'li sunucuda ipv6'yı devre dışı bırakmanız gerekir çünkü clickhouse'daki günlükler tablosu bu alanı kullanır upstream_addr IPv4, ağ içinde ipv6 kullanmadığım için. İpv6 kapatılmazsa hatalar olacaktır:
DB::Exception: Invalid IPv4 value.: (while read the value of key upstream_addr)Belki okuyucular ipv6 desteğini ekleyin.
/etc/sysctl.d/98-disable-ipv6.conf dosyasını oluşturun
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1Ayarları uygulama
sysctl --systemNginx'i kuralım.
Nginx depo dosyası /etc/yum.repos.d/nginx.repo eklendi
[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 yükleyin
yum install -y nginxÖncelikle Nginx'teki günlük formatını /etc/nginx/nginx.conf dosyasında yapılandırmamız gerekiyor.
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;
}Mevcut yapılandırmanızı bozmamak için Nginx, çeşitli erişim_log yönergelerine sahip olmanıza izin verir.
access_log /var/log/nginx/access.log main; # Стандартный лог
access_log /var/log/nginx/access.json.log vector; # Новый лог в формате jsonYeni loglar için logrotate kuralı eklemeyi unutmayın (log dosyası .log ile bitmiyorsa)
/etc/nginx/conf.d/ dosyasından default.conf dosyasını kaldırın
rm -f /etc/nginx/conf.d/default.confSanal ana bilgisayar /etc/nginx/conf.d/vhost1.conf ekleyin
server {
listen 80;
server_name vhost1;
location / {
proxy_pass http://172.26.10.106:8080;
}
}Sanal ana bilgisayar /etc/nginx/conf.d/vhost2.conf ekleyin
server {
listen 80;
server_name vhost2;
location / {
proxy_pass http://172.26.10.108:8080;
}
}Sanal ana bilgisayar /etc/nginx/conf.d/vhost3.conf ekleyin
server {
listen 80;
server_name vhost3;
location / {
proxy_pass http://172.26.10.109:8080;
}
}Sanal ana bilgisayar /etc/nginx/conf.d/vhost4.conf ekleyin
server {
listen 80;
server_name vhost4;
location / {
proxy_pass http://172.26.10.116:8080;
}
}/etc/hosts dosyasına tüm sunuculara sanal ana bilgisayarlar (nginx'in kurulu olduğu sunucunun 172.26.10.106 ip'i) ekleyin:
172.26.10.106 vhost1
172.26.10.106 vhost2
172.26.10.106 vhost3
172.26.10.106 vhost4Ve eğer her şey hazırsa o zaman
nginx -t
systemctl restart nginxŞimdi kendimiz kuralım
yum install -y https://packages.timber.io/vector/0.9.X/vector-x86_64.rpmsystemd /etc/systemd/system/vector.service için bir ayar dosyası oluşturalım
[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.targetVe /etc/vector/vector.toml yapılandırmasında Filebeat değişimini yapılandırın. IP adresi 172.26.10.108, log sunucusunun (Vector-Server) IP adresidir.
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"Kullanıcı vektörünü, günlük dosyalarını okuyabilmesi için uygun gruba eklemeyi unutmayın. Örneğin, nginx için centos Yönetici grubu yetkileriyle günlükler oluşturur.
usermod -a -G adm vectorVektör hizmetini başlatalım
systemctl enable vector
systemctl start vectorVektör günlükleri şu şekilde görüntülenebilir:
journalctl -f -u vectorGünlüklerde böyle bir giriş olması gerekir
INFO vector::topology::builder: Healthcheck: Passed.Stres testi
Test Apache kıyaslaması kullanılarak gerçekleştirilir.
httpd-tools paketi tüm sunuculara kuruldu
Ekranda 4 farklı sunucudan Apache kıyaslamasını kullanarak teste başlıyoruz. Öncelikle ekran terminal çoklayıcıyı başlatıyoruz ve ardından Apache kıyaslamasını kullanarak test etmeye başlıyoruz. Ekranla nasıl çalışılacağını şurada bulabilirsiniz: .
1. sunucudan
while true; do ab -H "User-Agent: 1server" -c 100 -n 10 -t 10 http://vhost1/; sleep 1; done2. sunucudan
while true; do ab -H "User-Agent: 2server" -c 100 -n 10 -t 10 http://vhost2/; sleep 1; done3. sunucudan
while true; do ab -H "User-Agent: 3server" -c 100 -n 10 -t 10 http://vhost3/; sleep 1; done4. sunucudan
while true; do ab -H "User-Agent: 4server" -c 100 -n 10 -t 10 http://vhost4/; sleep 1; doneClickhouse'daki verileri kontrol edelim
Clickhouse'a git
clickhouse-client -h 172.26.10.109 -mSQL sorgusu yapma
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'daki tabloların boyutunu öğrenin
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'da ne kadar günlük tutulduğunu öğrenelim.

Günlük tablosu boyutu 857.19 MB'dir.

Elasticsearch'teki indekste aynı verinin boyutu 4,5 GB'dir.
Parametrelerde vektördeki verileri belirtmezseniz Clickhouse, Elasticsearch'e göre 4500/857.19 = 5.24 kat daha az alır.
Vektörde sıkıştırma alanı varsayılan olarak kullanılır.
Telegram sohbeti
Telegram sohbeti
Telegram sohbeti ""
Kaynak: habr.com
