เด•เตเดฒเดฟเด•เตเด•เตเดนเต—เดธเดฟเดฒเต‡เด•เตเด•เตเด‚ เด‡เดฒเดพเดธเตเดฑเตเดฑเดฟเด•เต เดธเต†เตผเดšเตเดšเดฟเดฒเต‡เด•เตเด•เตเด‚ เดตเต†เด•เตเดฑเตเดฑเตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต Nginx json เดฒเต‹เด—เตเด•เตพ เด…เดฏเดฏเตเด•เตเด•เตเดจเตเดจเต

เด•เตเดฒเดฟเด•เตเด•เตเดนเต—เดธเดฟเดฒเต‡เด•เตเด•เตเด‚ เด‡เดฒเดพเดธเตเดฑเตเดฑเดฟเด•เต เดธเต†เตผเดšเตเดšเดฟเดฒเต‡เด•เตเด•เตเด‚ เดตเต†เด•เตเดฑเตเดฑเตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต Nginx json เดฒเต‹เด—เตเด•เตพ เด…เดฏเดฏเตเด•เตเด•เตเดจเตเดจเต

เดตเต†เด•เตเดŸเตผ, เดฒเต‹เด—เต เดกเดพเดฑเตเดฑ, เดฎเต†เดŸเตเดฐเดฟเด•เตโ€Œเดธเต, เด‡เดตเดจเตเดฑเตเด•เตพ เดŽเดจเตเดจเดฟเดต เดถเต‡เด–เดฐเดฟเด•เตเด•เดพเดจเตเด‚ เดฐเต‚เดชเดพเดจเตเดคเดฐเดชเตเดชเต†เดŸเตเดคเตเดคเดพเดจเตเด‚ เด…เดฏเดฏเตเด•เตเด•เดพเดจเตเด‚ เดฐเต‚เดชเด•เตฝเดชเตเดชเดจ เดšเต†เดฏเตโ€Œเดคเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต.

โ†’ เดธเดพเดฎเต‚เดนเดฟเด•เด‚

เดฑเดธเตเดฑเตเดฑเต เดญเดพเดทเดฏเดฟเตฝ เดŽเดดเตเดคเดฟเดฏเดคเดฟเดจเดพเตฝ, เด…เดคเดฟเดจเตเดฑเต† เด…เดจเดฒเต‹เด—เตเด•เดณเต† เด…เดชเต‡เด•เตเดทเดฟเดšเตเดšเต เด‰เดฏเตผเดจเตเดจ เดชเตเดฐเด•เดŸเดจเดตเตเด‚ เด•เตเดฑเดžเตเดž เดฑเดพเด‚ เด‰เดชเดญเต‹เด—เดตเตเดฎเดพเดฃเต เด‡เดคเดฟเดจเตเดฑเต† เดธเดตเดฟเดถเต‡เดทเดค. เด•เต‚เดŸเดพเดคเต†, เด•เตƒเดคเตเดฏเดคเดฏเตเดฎเดพเดฏเดฟ เดฌเดจเตเดงเดชเตเดชเต†เดŸเตเดŸ เดซเด‚เด—เตโ€Œเดทเดจเตเด•เดณเดฟเตฝ เดตเดณเดฐเต†เดฏเดงเดฟเด•เด‚ เดถเตเดฐเดฆเตเดง เดšเต†เดฒเตเดคเตเดคเตเดจเตเดจเต, เดชเตเดฐเดคเตเดฏเต‡เด•เดฟเดšเตเดšเตเด‚, เด…เดฏเดฏเตโ€Œเด•เตเด•เดพเดคเตเดค เด‡เดตเดจเตเดฑเตเด•เตพ เดกเดฟเดธเตโ€Œเด•เดฟเดฒเต† เดฌเดซเดฑเดฟเดฒเต‡เด•เตเด•เต เดธเด‚เดฐเด•เตเดทเดฟเด•เตเด•เดพเดจเตเด‚ เดซเดฏเดฒเตเด•เตพ เดคเดฟเดฐเดฟเด•เตเด•เดพเดจเตเด‚ เด‰เดณเตเดณ เด•เดดเดฟเดตเต.

เดตเดพเดธเตเดคเตเดถเดพเดธเตเดคเตเดฐเดชเดฐเดฎเดพเดฏเดฟ, เด’เดจเตเดจเต‹ เด…เดคเดฟเดฒเดงเดฟเด•เดฎเต‹ เดธเดจเตเดฆเต‡เดถเด™เตเด™เตพ เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจ เด’เดฐเต เด‡เดตเดจเตเดฑเต เดฑเต‚เดŸเตเดŸเดฑเดพเดฃเต เดตเต†เด•เตเดฑเตเดฑเตผ เด‰เดฑเดตเดฟเดŸเด™เตเด™เตพ, เด“เดชเตเดทเดฃเดฒเดพเดฏเดฟ เดˆ เดธเดจเตเดฆเต‡เดถเด™เตเด™เดณเดฟเตฝ เดชเตเดฐเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต เดฐเต‚เดชเดพเดจเตเดคเดฐเด™เตเด™เตพ, เด•เต‚เดŸเดพเดคเต† เด’เดจเตเดจเต‹ เด…เดคเดฟเดฒเดงเดฟเด•เดฎเต‹ เดชเต‡เดฐเดฟเดฒเต‡เด•เตเด•เต เด…เดตเดฐเต† เด…เดฏเดฏเตเด•เตเด•เตเดจเตเดจเต เดšเต‹เตผเดšเตเดš.

เดซเดฏเตฝเดฌเต€เดฑเตเดฑเดฟเดจเตเด‚ เดฒเต‹เด—เตเดธเตเดฑเตเดฑเดพเดทเดฟเดจเตเด‚ เดชเด•เดฐเดฎเดพเดฃเต เดตเต†เด•เตเดฑเตเดฑเตผ, เด‡เดคเดฟเดจเต เดฐเดฃเตเดŸเต เดฑเต‹เดณเตเด•เดณเดฟเดฒเตเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚ (เดฒเต‹เด—เตเด•เตพ เดธเตเดตเต€เด•เดฐเดฟเด•เตเด•เตเด•เดฏเตเด‚ เด…เดฏเดฏเตเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเด•), เด…เดตเดฏเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเตเดณเตเดณ เด•เต‚เดŸเตเดคเตฝ เดตเดฟเดถเดฆเดพเด‚เดถเด™เตเด™เตพ เดธเตˆเดฑเตเดฑเต.

เดฒเต‹เด—เตเดธเตเดฑเตเดฑเดพเดทเดฟเตฝ เดšเต†เดฏเดฟเตป เด‡เตปเดชเตเดŸเตเดŸเต โ†’ เดซเดฟเตฝเดŸเตเดŸเตผ โ†’ เด”เดŸเตเดŸเตเดชเตเดŸเตเดŸเต เด†เดฏเดฟเดŸเตเดŸเดพเดฃเต เดจเดฟเตผเดฎเตเดฎเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต†เด™เตเด•เดฟเตฝ เดตเต†เด•เตโ€ŒเดŸเดฑเดฟเตฝ เด…เดคเต เด‰เดฑเดตเดฟเดŸเด™เตเด™เตพ โ†’ เดชเดฐเดฟเดตเตผเดคเตเดคเดจเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต โ†’ เดฎเตเด™เตเด™เตเดจเตเดจเต

เด‰เดฆเดพเดนเดฐเดฃเด™เตเด™เตพ เดกเต‹เด•เตเดฏเตเดฎเต†เดจเตเดฑเต‡เดทเดจเดฟเตฝ เด•เดพเดฃเดพเด‚.

เดˆ เดจเดฟเตผเดฆเตเดฆเต‡เดถเด‚ เดชเดฐเดฟเดทเตเด•เดฐเดฟเดšเตเดš เดจเดฟเตผเดฆเตเดฆเต‡เดถเดฎเดพเดฃเต เดตเตเดฏเดพเดธเต†เดธเตเดฒเดพเดตเต เดฐเดพเด–เดฟเตปเดธเตเด•เดฟ. เดฏเดฅเดพเตผเดคเตเดฅ เดจเดฟเตผเดฆเตเดฆเต‡เดถเด™เตเด™เดณเดฟเตฝ เดœเดฟเดฏเต‹เดชเตเดชเต เดชเตเดฐเต‹เดธเดธเตเดธเดฟเด‚เด—เต เด…เดŸเด™เตเด™เดฟเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเต. เด’เดฐเต เด†เดจเตเดคเดฐเดฟเด• เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เดฟเตฝ เดจเดฟเดจเตเดจเต เดœเดฟเดฏเต‹เดชเตเดชเต เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดตเต†เด•เตเดฑเตเดฑเตผ เด’เดฐเต เดชเดฟเดถเด•เต เดจเตฝเด•เดฟ.

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

เด†เตผเด•เตเด•เต†เด™เตเด•เดฟเดฒเตเด‚ เดœเดฟเดฏเต‹เดชเตเดชเต เดชเตเดฐเต‹เดธเดธเตเดธเต เดšเต†เดฏเตเดฏเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เด…เดคเดฟเตฝ เดจเดฟเดจเตเดจเตเดณเตเดณ เดฏเดฅเดพเตผเดคเตเดฅ เดจเดฟเตผเดฆเตเดฆเต‡เดถเด™เตเด™เตพ เดชเดฐเดฟเดถเต‹เดงเดฟเด•เตเด•เตเด• เดตเตเดฏเดพเดธเต†เดธเตเดฒเดพเดตเต เดฐเดพเด–เดฟเตปเดธเตเด•เดฟ.

เดžเด™เตเด™เตพ Nginx (เด†เด•เตเดธเดธเต เดฒเต‹เด—เตเด•เตพ) โ†’ เดตเต†เด•เตเดฑเตเดฑเตผ (เด•เตเดฒเดฏเดจเตเดฑเต | เดซเดฏเตฝเดฌเต€เดฑเตเดฑเต) โ†’ เดตเต†เด•เตเดฑเตเดฑเตผ (เดธเต†เตผเดตเตผ | เดฒเต‹เด—เตเดธเตเดฑเตเดฑเดพเดทเต) โ†’ เดŽเดจเตเดจเดฟเดตเดฏเตเดŸเต† เดธเด‚เดฏเต‹เดœเดจเด‚ เด•เตเดฒเดฟเด•เตเด•เตเดนเต—เดธเดฟเตฝ เดตเต†เดตเตเดตเต‡เดฑเต†เดฏเตเด‚ เด‡เดฒเดพเดธเตเดฑเตเดฑเดฟเด•เต เดธเต†เตผเดšเตเดšเดฟเดฒเตเด‚ เดตเต†เดตเตเดตเต‡เดฑเต† เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดฏเตเด‚. เดžเด™เตเด™เตพ 4 เดธเต†เตผเดตเดฑเตเด•เตพ เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเตเด‚. 3 เดธเต†เตผเดตเดฑเตเด•เตพ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเดฟเด™เตเด™เตพเด•เตเด•เต เด‡เดคเต เดฎเดฑเดฟเด•เดŸเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเดฎเต†เด™เตเด•เดฟเดฒเตเด‚.

เด•เตเดฒเดฟเด•เตเด•เตเดนเต—เดธเดฟเดฒเต‡เด•เตเด•เตเด‚ เด‡เดฒเดพเดธเตเดฑเตเดฑเดฟเด•เต เดธเต†เตผเดšเตเดšเดฟเดฒเต‡เด•เตเด•เตเด‚ เดตเต†เด•เตเดฑเตเดฑเตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต Nginx json เดฒเต‹เด—เตเด•เตพ เด…เดฏเดฏเตเด•เตเด•เตเดจเตเดจเต

เดธเตเด•เต€เด‚ เด‡เดคเตเดชเต‹เดฒเต†เดฏเดพเดฃเต.

เดจเดฟเด™เตเด™เดณเตเดŸเต† เดŽเดฒเตเดฒเดพ เดธเต†เตผเดตเดฑเตเด•เดณเดฟเดฒเตเด‚ Selinux เดชเตเดฐเดตเตผเดคเตเดคเดจเดฐเดนเดฟเดคเดฎเดพเด•เตเด•เตเด•

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

เดŽเดฒเตเดฒเดพ เดธเต†เตผเดตเดฑเตเด•เดณเดฟเดฒเตเด‚ เดžเด™เตเด™เตพ เด’เดฐเต HTTP เดธเต†เตผเดตเตผ เดŽเดฎเตเดฒเต‡เดฑเตเดฑเตผ + เดฏเต‚เดŸเตเดŸเดฟเดฒเดฟเดฑเตเดฑเดฟเด•เตพ เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเตเดจเตเดจเต

เด’เดฐเต HTTP เดธเต†เตผเดตเตผ เดŽเดฎเตเดฒเต‡เดฑเตเดฑเตผ เดŽเดจเตเดจ เดจเดฟเดฒเดฏเดฟเตฝ เดžเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเด‚ nodejs-stub-server ะพั‚ เดฎเดพเด•เตเดธเดฟเด‚ เด‡เด—เตเดจเดคเต†เด™เตเด•เต‹

Nodejs-stub-server-เดจเต เด’เดฐเต rpm เด‡เดฒเตเดฒ. เด‡เดคเต เด…เดคเดฟเดจเดพเดฏเดฟ rpm เด‰เดฃเตเดŸเดพเด•เตเด•เตเด•. rpm เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเด‚ เดซเต†เดกเต‹เดฑ เด•เต‹เดชเตเดชเตผ

antonpatsev/nodejs-stub-server repository เดšเต‡เตผเด•เตเด•เตเด•

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

/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 เดฒเต‹เด—เตเด•เตพ เด…เดฏเดฏเตเด•เตเด•เตเดจเตเดจเต

Google-เตฝ DDL เดตเดดเดฟ zstd เด•เด‚เดชเตเดฐเดทเตป เดŽเด™เตเด™เดจเต† เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เดพเดฎเต†เดจเตเดจเต เดŽเดจเดฟเด•เตเด•เต เด•เดฃเตเดŸเต†เดคเตเดคเดพเดจเดพเดฏเดฟเดฒเตเดฒ. เด…เดคเดฟเดจเดพเตฝ เดžเดพเตป เด…เดคเต เด…เดคเต‡เดชเดŸเดฟ เด‰เดชเต‡เด•เตเดทเดฟเดšเตเดšเต.

เด•เตเดฒเดฟเด•เตเด•เตเดนเต—เดธเดฟเตฝ zstd เด•เด‚เดชเตเดฐเดทเตป เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจ เดธเดนเดชเตเดฐเดตเตผเดคเตเดคเด•เตผ, เดจเดฟเตผเดฆเตเดฆเต‡เดถเด™เตเด™เตพ เดชเด™เตเด•เดฟเดŸเตเด•.

เดธเต†เตผเดตเตผ เด’เดฐเต เดกเต†เดฎเตบ เด†เดฏเดฟ เด†เดฐเด‚เดญเดฟเด•เตเด•เดพเตป, เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเด•:

service clickhouse-server start

เด‡เดจเดฟ เดจเดฎเตเด•เตเด•เต 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-เดฎเดพเดฏเดฟ เดคเดพเดฐเดคเดฎเตเดฏเดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ เด‡เดฒเดพเดธเตเดฑเตเดฑเดฟเด•เต เดคเดฟเดฐเดฏเดฒเดฟเดฒเต‡เด•เตเด•เต เด…เดคเต‡ เดกเดพเดฑเตเดฑ เด…เดฏเดฏเตโ€Œเด•เตเด•เดพเตป เดจเดพเดฒเดพเดฎเดคเตเดคเต† เดธเต†เตผเดตเดฑเดฟเตฝ เด‡เดฒเดพเดธเตเดฑเตเดฑเดฟเด•เต เดคเดฟเดฐเดฏเตฝ เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเตเดจเตเดจเต

เด’เดฐเต เดชเตŠเดคเต 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

เด‡เดฒเดพเดธเตเดฑเตเดฑเดฟเด•เต เดธเต†เตผเดšเตเดšเตเด‚ เด•เดฟเดฌเดพเดจเดฏเตเด‚ เด‡เตปเดธเตเดฑเตเดฑเดพเตพ เดšเต†เดฏเตเดฏเตเด•

yum install -y kibana elasticsearch

เด‡เดคเต 1 เดชเด•เตผเดชเตเดชเดฟเตฝ เด‰เดณเตเดณเดคเดฟเดจเดพเตฝ, เดจเดฟเด™เตเด™เตพ เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจเดต /etc/elasticsearch/elasticsearch.yml เดซเดฏเดฒเดฟเดฒเต‡เด•เตเด•เต เดšเต‡เตผเด•เตเด•เต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต:

discovery.type: single-node

เดตเต†เด•เตโ€ŒเดŸเดฑเดฟเดจเต เดฎเดฑเตเดฑเตŠเดฐเต เดธเต†เตผเดตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เด‡เดฒเดพเดธเตเดฑเตเดฑเดฟเด•เต เดคเดฟเดฐเดฏเดฒเดฟเดฒเต‡เด•เตเด•เต เดกเดพเดฑเตเดฑ เด…เดฏเดฏเตโ€Œเด•เตเด•เดพเตป เด•เดดเดฟเดฏเตเด‚, เดจเดฎเตเด•เตเด•เต network.host เดฎเดพเดฑเตเดฑเดพเด‚.

network.host: 0.0.0.0

เด•เดฟเดฌเดพเดจเดฏเดฟเดฒเต‡เด•เตเด•เต เด•เดฃเด•เตเดฑเตเดฑเตเดšเต†เดฏเตเดฏเดพเตป, /etc/kibana/kibana.yml เดซเดฏเดฒเดฟเดฒเต† server.host เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเตผ เดฎเดพเดฑเตเดฑเตเด•

server.host: "0.0.0.0"

เดชเดดเดฏเดคเตเด‚ เด“เดŸเตเดŸเต‹เดธเตเดฑเตเดฑเดพเตผเดŸเตเดŸเดฟเตฝ เด‡เดฒเดพเดธเตเดฑเตเดฑเดฟเด•เต เดคเดฟเดฐเดฏเตฝ เด‰เตพเดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจเดคเตเด‚

systemctl enable elasticsearch
systemctl start elasticsearch

เด•เดฟเดฌเดพเดจเดฏเตเด‚

systemctl enable kibana
systemctl start kibana

เดธเดฟเด‚เด—เดฟเตพ-เดจเต‹เดกเต เดฎเต‹เดกเต 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

เดฒเต‹เด—เตเดธเตเดฑเตเดฑเดพเดทเดฟเดจเต เดชเด•เดฐเดฎเดพเดฏเดฟ เดตเต†เด•เตเดฑเตเดฑเตผ เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เดพเด‚. /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_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

เด†เดฆเตเดฏเด‚, เดจเดฎเตเดฎเตพ /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-เตฝ เด…เดตเดธเดพเดจเดฟเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ)

/etc/nginx/conf.d/ เดŽเดจเตเดจเดคเดฟเตฝ เดจเดฟเดจเตเดจเต default.conf เดจเต€เด•เตเด•เด‚ เดšเต†เดฏเตเดฏเตเด•

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 เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเดจเดฟเตฝ เดซเดฏเตฝเดฌเต€เดฑเตเดฑเต เดฎเดพเดฑเตเดฑเดฟเดธเตเดฅเดพเดชเดฟเด•เตเด•เตฝ เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดฏเตเด•. 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, adm เด—เตเดฐเต‚เดชเตเดชเต เด…เดตเด•เดพเดถเด™เตเด™เดณเตเดณเตเดณ เดฒเต‹เด—เตเด•เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต.

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;

เด•เตเดฒเดฟเด•เตเด•เตเดนเต—เดธเดฟเตฝ เดŽเดคเตเดฐ เดฒเต‹เด—เตเด•เตพ เดŽเดŸเตเดคเตเดคเตเดตเต†เดจเตเดจเต เดจเดฎเตเด•เตเด•เต เด•เดฃเตเดŸเต†เดคเตเดคเดพเด‚.

เด•เตเดฒเดฟเด•เตเด•เตเดนเต—เดธเดฟเดฒเต‡เด•เตเด•เตเด‚ เด‡เดฒเดพเดธเตเดฑเตเดฑเดฟเด•เต เดธเต†เตผเดšเตเดšเดฟเดฒเต‡เด•เตเด•เตเด‚ เดตเต†เด•เตเดฑเตเดฑเตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต Nginx json เดฒเต‹เด—เตเด•เตพ เด…เดฏเดฏเตเด•เตเด•เตเดจเตเดจเต

เดฒเต‹เด—เตโ€Œเดธเต เดŸเต‡เดฌเดฟเดณเดฟเดจเตเดฑเต† เดตเดฒเตเดชเตเดชเด‚ 857.19 MB เด†เดฃเต.

เด•เตเดฒเดฟเด•เตเด•เตเดนเต—เดธเดฟเดฒเต‡เด•เตเด•เตเด‚ เด‡เดฒเดพเดธเตเดฑเตเดฑเดฟเด•เต เดธเต†เตผเดšเตเดšเดฟเดฒเต‡เด•เตเด•เตเด‚ เดตเต†เด•เตเดฑเตเดฑเตผ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต Nginx json เดฒเต‹เด—เตเด•เตพ เด…เดฏเดฏเตเด•เตเด•เตเดจเตเดจเต

เด‡เดฒเดพเดธเตเดฑเตเดฑเดฟเด•เต เดธเต†เตผเดšเตเดšเดฟเดฒเต† เดธเต‚เดšเดฟเด•เดฏเดฟเดฒเต† เด…เดคเต‡ เดกเดพเดฑเตเดฑเดฏเตเดŸเต† เดตเดฒเตเดชเตเดชเด‚ 4,5GB เด†เดฃเต.

เดจเดฟเด™เตเด™เตพ เดชเดพเดฐเดพเดฎเต€เดฑเตเดฑเดฑเตเด•เดณเดฟเตฝ เดตเต†เด•เตเดฑเตเดฑเดฑเดฟเตฝ เดกเดพเดฑเตเดฑ เดตเตเดฏเด•เตเดคเดฎเดพเด•เตเด•เตเดจเตเดจเดฟเดฒเตเดฒเต†เด™เตเด•เดฟเตฝ, เด‡เดฒเดพเดธเตเดฑเตเดฑเดฟเด•เต เดธเต†เตผเดšเตเดšเดฟเตฝ เด‰เดณเตเดณเดคเดฟเดจเต‡เด•เตเด•เดพเตพ 4500/857.19 = 5.24 เดฎเดŸเด™เตเด™เต เด•เตเดฑเดตเต เด•เตเดฒเดฟเด•เตเด•เตเดนเต—เดธเต เดŽเดŸเตเด•เตเด•เตเดจเตเดจเต.

เดตเต†เด•เตเดฑเตเดฑเดฑเดฟเตฝ, เด•เด‚เดชเตเดฐเดทเตป เดซเต€เตฝเดกเต เดธเตเดฅเดฟเดฐเดธเตเดฅเดฟเดคเดฟเดฏเดพเดฏเดฟ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต.

เดŸเต†เดฒเดฟเด—เตเดฐเดพเด‚ เดšเดพเดฑเตเดฑเต เดšเต†เดฏเตเดคเดคเต เด•เตเดฒเดฟเด•เตเด•เตเดนเต—เดธเต
เดŸเต†เดฒเดฟเด—เตเดฐเดพเด‚ เดšเดพเดฑเตเดฑเต เดšเต†เดฏเตเดคเดคเต เด‡เดฒเดพเดธเตเดฑเตเดฑเดฟเดธเต†เดฐเตเดšเตเดšเต
เดŸเต†เดฒเดฟเด—เตเดฐเดพเด‚ เดšเดพเดฑเตเดฑเต เดšเต†เดฏเตเดคเดคเต "เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเดจเตเดฑเต† เดถเต‡เด–เดฐเดฃเดตเตเด‚ เดตเดฟเดถเด•เดฒเดจเดตเตเด‚ เดธเดจเตเดฆเต‡เดถเด™เตเด™เตพ"

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•