Nginx json журналдарын Vector көмегімен Clickhouse және Elasticsearch қызметтеріне жіберу

Nginx json журналдарын Vector көмегімен Clickhouse және Elasticsearch қызметтеріне жіберу

Вектор, журнал деректерін, көрсеткіштерді және оқиғаларды жинауға, түрлендіруге және жіберуге арналған.

→ GitHub

Rust тілінде жазылғандықтан, аналогтарымен салыстырғанда жоғары өнімділікпен және жедел жадты аз тұтынумен ерекшеленеді. Сонымен қатар, дұрыстықпен байланысты функцияларға көп көңіл бөлінеді, атап айтқанда, жіберілмеген оқиғаларды дискідегі буферге сақтау және файлдарды айналдыру мүмкіндігі.

Архитектуралық тұрғыдан Вектор - бір немесе бірнеше хабарламаларды қабылдайтын оқиға маршрутизаторы ақпарат көздері, таңдау бойынша осы хабарларға қолданылады түрлендірулер, және оларды біреуіне немесе бірнешеуіне жіберу дренаждар.

Вектор - бұл файлдық жүйені және логсташты ауыстыру, ол екі рөлде де әрекет ете алады (журналдарды қабылдау және жіберу), олар туралы толығырақ сайт.

Егер 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 (Access logs) → Vector (Client | Filebeat) → Vector (Сервер | Logstash) → комбинациясын Clickhouse ішінде бөлек және Elasticsearch ішінде бөлек конфигурациялаймыз. Біз 4 серверді орнатамыз. Сіз оны 3 сервермен айналып өтуге болады.

Nginx json журналдарын Vector көмегімен Clickhouse және Elasticsearch қызметтеріне жіберу

Схема осындай нәрсе.

Барлық серверлеріңізде Selinux өшіріңіз

sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
reboot

Біз барлық серверлерде HTTP сервер эмуляторын + утилиталарын орнатамыз

HTTP сервер эмуляторы ретінде біз қолданамыз nodejs-stub-сервері от Максим Игнатенко

Nodejs-stub-серверінде айналым жылдамдығы жоқ. Бұл ол үшін айн / мин жасаңыз. rpm көмегімен құрастырылады Fedora Copr

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

Clickhouse орнату серверде 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

Clickhouse-серверіне /etc/clickhouse-server/config.xml файлындағы желі картасын тыңдауға рұқсат ету

<listen_host>0.0.0.0</listen_host>

Тіркеу деңгейін бақылаудан жөндеуге өзгерту

Жөндеу

Стандартты қысу параметрлері:

min_compress_block_size  65536
max_compress_block_size  1048576

Zstd қысуын белсендіру үшін конфигурацияға қол тигізбеу, керісінше DDL пайдалану ұсынылды.

Nginx json журналдарын Vector көмегімен Clickhouse және Elasticsearch қызметтеріне жіберу

Мен Google-да DDL арқылы zstd қысуды қалай пайдалану керектігін таба алмадым. Сондықтан мен оны сол күйінде қалдырдым.

Clickhouse бағдарламасында zstd қысуын қолданатын әріптестер нұсқауларды бөлісіңіз.

Серверді демон ретінде іске қосу үшін келесіні іске қосыңыз:

service clickhouse-server start

Енді Clickhouse орнатуға көшейік

Clickhouse сайтына өтіңіз

clickhouse-client -h 172.26.10.109 -m

172.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-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

Бұл вектор деректерді басқа серверден elasticsearch қызметіне жібере алатындай, network.host файлын өзгертейік.

network.host: 0.0.0.0

Kibana-ға қосылу үшін /etc/kibana/kibana.yml файлындағы server.host параметрін өзгертіңіз.

server.host: "0.0.0.0"

Ескі және автоматты іске қосуға elasticsearch қосыңыз

systemctl enable elasticsearch
systemctl start elasticsearch

және кибана

systemctl enable kibana
systemctl start kibana

Бір түйінді режим үшін Elasticsearch теңшеу 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"}}' 

параметр Вектор 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 бөлімін реттеуге болады.

содан бері Вячеслав Рахинский бұл конфигурацияларды шағын 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

Кестелерді жасағаннан кейін Vector бағдарламасын іске қосуға болады

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 --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

Алдымен, /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"

Вектор пайдаланушысын журнал файлдарын оқи алатындай етіп қажетті топқа қосуды ұмытпаңыз. Мысалы, centos ішіндегі nginx adm тобы құқықтарымен журналдарды жасайды.

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; done

2-ші серверден

while true; do ab -H "User-Agent: 2server" -c 100 -n 10 -t 10 http://vhost2/; sleep 1; done

3-ші серверден

while true; do ab -H "User-Agent: 3server" -c 100 -n 10 -t 10 http://vhost3/; sleep 1; done

4-ші серверден

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 -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 │                       │
└──────────────┴─────────────────────┴─────────────┴─────────┴────────────────┴────────────────────┴───────────────────┴─────────────┴────────────────┴────────────────┴────────────────┴──────────────┴──────────────────┴─────────────────┴──────────────────────────┴───────────────────────┴───────────────┴─────────────┴─────────────┴───────────────┴───────────────┴─────────────────────────┴─────────────────────┴───────────────────────┴───────────────────────┴──────────────────────┴──────────────────────────┴────────────────────────┴─────────────────┴───────────────────────

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-да қанша журнал жинағанын білейік.

Nginx json журналдарын Vector көмегімен Clickhouse және Elasticsearch қызметтеріне жіберу

Журналдар кестесінің өлшемі 857.19 Мбайт.

Nginx json журналдарын Vector көмегімен Clickhouse және Elasticsearch қызметтеріне жіберу

Elasticsearch индексіндегі бірдей деректердің өлшемі 4,5 ГБ құрайды.

Параметрлердегі векторда деректерді көрсетпесеңіз, Clickhouse Elasticsearch жүйесіне қарағанда 4500/857.19 = 5.24 есе аз алады.

Векторда қысу өрісі әдепкі бойынша пайдаланылады.

Telegram чаты арқылы кликхаус
Telegram чаты арқылы Elasticearch
Telegram чаты "Жүйені жинау және талдау хабарламалар"

Ақпарат көзі: www.habr.com

пікір қалдыру