Inā ua hoʻohana mua ʻoe i nā loulou pūnaewele e nānā i nā lāʻau, a laila ua ʻike paha ʻoe pehea, ma ke ʻano he kānāwai, paʻakikī kēia mau pilina a (pinepine) ʻaʻole kūpono a pane. Hiki iā ʻoe ke hoʻomaʻamaʻa i kekahi, weliweli loa kekahi, akā i koʻu manaʻo ʻo ke kumu o nā pilikia āpau ke hoʻokokoke nei mākou i ka hana o ka nānā ʻana i nā lāʻau me ka hewa ʻole: hoʻāʻo mākou e hana i kahi kikowaena pūnaewele kahi o ka CLI (ka laina kauoha). hana maikaʻi. ʻO wau iho ʻoluʻolu loa i ka hana ʻana me ka huelo, grep, awk a me nā mea ʻē aʻe, a no laila noʻu ʻo ke kikowaena kūpono no ka hana ʻana me nā lāʻau e like me ka huelo a me ka grep, akā hiki ke hoʻohana ʻia e heluhelu i nā lāʻau i hele mai mai nā kikowaena he nui. ʻO ia, ʻoiaʻiʻo, heluhelu iā lākou mai ClickHouse!
*e like me ka manaʻo pilikino o ka mea hoʻohana habra
Hui logscli
ʻAʻole wau i hele mai me kahi inoa no kaʻu interface, a, ʻoiaʻiʻo, aia ia ma ke ʻano o kahi prototype, akā inā makemake ʻoe e ʻike koke i ke kumu kumu, a laila ʻoluʻolu ʻoe:
Nā Kūlana
ʻO kaʻu pahuhopu, ʻo ia ka hana ʻana i kahi interface i ʻike ʻia e ka poʻe i maʻa i ka huelo/grep, ʻo ia hoʻi, ke kākoʻo i kēia mau mea:
- Nānā i nā lāʻau a pau, me ka kānana ʻole.
- E waiho i nā laina i loaʻa kahi substring paʻa (flag
-F
уgrep
). - E waiho i nā laina e pili ana i ka ʻōlelo maʻamau (flag
-E
уgrep
). - ʻO ka mea paʻamau, ʻo ka nānā ʻana ma ke ʻano o ka manawa hoʻololi, no ka mea, ʻo nā moʻolelo hou loa ka mea makemake mua.
- Hōʻike i ka pōʻaiapili ma hope o kēlā me kēia laina (koho
-A
,-B
и-C
уgrep
, paʻi ʻana i nā laina N ma mua, ma hope, a puni kēlā me kēia laina pili, kēlā me kēia). - E nānā i nā lāʻau e hiki mai ana i ka manawa maoli, me ka kānana ʻole a i ʻole
tail -f | grep
). - Pono e kūpono ka interface me
less
,head
,tail
a me nā mea ʻē aʻe - ma ke ʻano maʻamau, pono e hoʻihoʻi ʻia nā hopena me ka ʻole o ka palena o kā lākou helu; paʻi ʻia nā laina ma ke ʻano he kahawai inā makemake ka mea hoʻohana e loaʻa iā lākou; hōʻailonaSIGPIPE
pono e hoʻopau mālie i ka hoʻoheheʻe log, e like me kā lākou hanatail
,grep
a me nā pono UNIX ʻē aʻe.
Ka hoʻokō
Manaʻo wau ua ʻike mua ʻoe i ka hāʻawi ʻana i nā lāʻau i ClickHouse. Inā ʻaʻole, paipai wau e hoʻāʻo
Pono mua ʻoe e hoʻoholo i ka papahana kumu. No ka mea makemake mau ʻoe e loaʻa nā lāʻau i hoʻokaʻawale ʻia e ka manawa, manaʻo pono ke mālama iā lākou i kēlā ala. Inā he nui nā ʻano lāʻau a he ʻano like lākou a pau, a laila hiki iā ʻoe ke hana i kahi ʻano lāʻau e like me ke kolamu mua o ke kī nui - e ʻae kēia iā ʻoe e loaʻa i hoʻokahi papaʻaina ma mua o nā mea he nui, a he mea nui ia i ka wā e hoʻokomo i loko o ClickHouse (ma nā kikowaena me nā paʻakikī paʻakikī, ua ʻōlelo ʻia e hoʻokomo i ka ʻikepili ma mua o ~1 manawa i kēlā me kēia kekona. no ke kikowaena holoʻokoʻa).
ʻO ia hoʻi, pono mākou e pili ana i ka papahana papaʻaina:
CREATE TABLE logs(
category LowCardinality(String), -- категория логов (опционально)
time DateTime, -- время события
millis UInt16, -- миллисекунды (могут быть и микросекунды, и т.д.): рекомендуется хранить, если событий много, чтобы было легче различать события между собой
..., -- ваши собственные поля, например имя сервера, уровень логирования, и так далее
message String -- текст сообщения
) ENGINE=MergeTree()
ORDER BY (category, time, millis)
ʻO ka mea pōʻino, ʻaʻole hiki iaʻu ke loaʻa koke i nā kumu wehe me nā lāʻau maoli i hiki iaʻu ke hopu a hoʻoiho, no laila ua lawe au i kēia ma ke ʻano he laʻana.
nā kuhikuhi no ka hoʻouka ʻana i nā loiloi Amazon i ClickHouse
E hana kākou i papaʻaina:
CREATE TABLE amazon(
review_date Date,
time DateTime DEFAULT toDateTime(toUInt32(review_date) * 86400 + rand() % 86400),
millis UInt16 DEFAULT rand() % 1000,
marketplace LowCardinality(String),
customer_id Int64,
review_id String,
product_id LowCardinality(String),
product_parent Int64,
product_title String,
product_category LowCardinality(String),
star_rating UInt8,
helpful_votes UInt32,
total_votes UInt32,
vine FixedString(1),
verified_purchase FixedString(1),
review_headline String,
review_body String
)
ENGINE=MergeTree()
ORDER BY (time, millis)
SETTINGS index_granularity=8192
Ma ka papa helu Amazon he lā wale nō no ka loiloi, akā ʻaʻohe manawa kūpono, no laila e hoʻopiha i kēia ʻikepili me kahi randon.
ʻAʻole pono ʻoe e hoʻoiho i nā faila tsv āpau a kaupalena iā ʻoe iho i ka mua ~ 10-20 i mea e loaʻa ai kahi pūʻulu nui o ka ʻikepili i kūpono ʻole i ka 16 GB o RAM. No ka hoʻouka ʻana i nā faila TSV ua hoʻohana au i kēia kauoha:
for i in *.tsv; do
echo $i;
tail -n +2 $i | pv |
clickhouse-client --input_format_allow_errors_ratio 0.5 --query='INSERT INTO amazon(marketplace,customer_id,review_id,product_id,product_parent,product_title,product_category,star_rating,helpful_votes,total_votes,vine,verified_purchase,review_headline,review_body,review_date) FORMAT TabSeparated'
done
Ma kahi Disk Persistent maʻamau (ʻo ia ka HDD) ma Google Cloud me ka nui o 1000 GB (Ua lawe au i kēia nui i mea ʻoi aku ka kiʻekiʻe o ka wikiwiki, ʻoiai ʻoi aku ka liʻiliʻi o ka SSD o ka nui i makemake ʻia) ka hoʻouka ʻana. ʻO ka wikiwiki ma kahi o ~ 75 MB/sec ma 4 cores.
- Pono wau e hoʻopaʻa i kaʻu hana ma Google, akā ua hoʻohana au i kahi moʻokāki pilikino a ʻaʻohe pili kēia ʻatikala me kaʻu hana ma ka hui.
E hana wau i nā kiʻi a pau me kēia ʻikepili kikoʻī, ʻoiai ʻo ia wale nō kaʻu i ka lima.
Hōʻike i ka holomua ʻimi ʻikepili
No ka mea ma ClickHouse e hoʻohana mākou i kahi scan piha ma ka papa me nā lāʻau, a hiki i kēia hana ke lawe i kahi manawa nui a ʻaʻole hiki ke hoʻopuka i nā hopena no ka manawa lōʻihi inā loaʻa nā pāʻani liʻiliʻi, pono e hiki ke hōʻike i ka ka holomua o ka nīnau a hiki i ka loaʻa ʻana o nā lālani mua me ka hopena. No ka hana ʻana i kēia, aia kahi ʻāpana i ka interface HTTP e hiki ai iā ʻoe ke hoʻouna i ka holomua ma nā poʻomanaʻo HTTP: send_progress_in_http_headers=1
. ʻO ka mea pōʻino, ʻaʻole hiki i ka waihona Go maʻamau ke heluhelu i nā poʻomanaʻo e like me ka loaʻa ʻana iā lākou, akā ʻo ka HTTP 1.0 interface (ʻaʻole e huikau me 1.1!) Ua kākoʻo ʻia e ClickHouse, no laila hiki iā ʻoe ke wehe i kahi pilina TCP maka i ClickHouse a hoʻouna iā ia ma laila GET /?query=... HTTP/1.0nn
a loaʻa nā pane pane a me ke kino me ka ʻole o ka pakele a i ʻole hoʻopunipuni, no laila ʻaʻole pono mākou e hoʻohana i ka waihona maʻamau.
Ke hoʻoheheʻe nei i nā moʻolelo mai ClickHouse
Ua loaʻa iā ClickHouse ka loiloi no nā nīnau me ORDER BY no kahi manawa lōʻihi (mai 2019?), no laila he nīnau e like me
SELECT time, millis, message
FROM logs
WHERE message LIKE '%something%'
ORDER BY time DESC, millis DESC
E hoʻomaka koke ia e hoʻihoʻi i nā laina i loaʻa ka substring "mea" i kā lākou leka, me ke kali ʻole i ka pau ʻana o ka scan.
Eia kekahi, ʻoi aku ka maʻalahi inā hoʻopau ʻo ClickHouse i ka noi i ka wā i pani ʻia ai ka pili ʻana iā ia, akā ʻaʻole kēia ka hana paʻamau. Hiki ke hoʻopau ʻia ka hoʻopau ʻana i ka noi me ka hoʻohana ʻana i ke koho cancel_http_readonly_queries_on_client_close=1
.
Ka lawelawe pono ʻana o SIGPIPE ma Go
Ke hoʻokō ʻoe, e ʻōlelo, ke kauoha some_cmd | head -n 10
, pehea ke kauoha some_cmd
hooki i ka hooko ana i ka wa head
unuhi i 10 laina? He maʻalahi ka pane: i ka manawa head
hoʻopau, pani ka paipu, a hoʻomaka ka stdout o ke kauoha some_cmd e kuhikuhi, kūlana, "i kahi ʻole". I ka manawa some_cmd
ho'āʻo e kākau i kahi paipu paʻa,
Ma Go e hana ʻia kēia ma ke ʻano maʻamau, akā paʻi pū ka mea lawe hōʻailona SIGPIPE i ka "hōʻailona: SIGPIPE" a i ʻole kahi leka like ma ka hopena, a no ka hoʻomaʻemaʻe ʻana i kēia memo pono mākou e mālama iā SIGPIPE iā mākou iho e like me kā mākou makemake, ʻo ia hoʻi, me ka leo leo. puka:
ch := make(chan os.Signal)
signal.Notify(ch, syscall.SIGPIPE)
go func() {
<-ch
os.Exit(0)
}()
Hōʻike i ka pōʻaiapili memo
Makemake pinepine ʻoe e ʻike i ka pōʻaiapili i loaʻa ai kekahi hewa (no ka laʻana, ʻo ke noi i hoʻomaka ai ka hopohopo, a i ʻole nā pilikia pili i ʻike ʻia ma mua o ka hāʻule ʻana), a ma grep
Hana ʻia kēia me ka hoʻohana ʻana i nā koho -A, -B, a me -C, e hōʻike ana i ka helu o nā laina i ʻōlelo ʻia ma hope, ma mua, a puni ka memo.
ʻO ka mea pōʻino, ʻaʻole i loaʻa iaʻu kahi ala maʻalahi e hana like i ka ClickHouse, no laila e hōʻike i ka pōʻaiapili, hoʻouna ʻia kahi noi hou e like me kēia i kēlā me kēia laina o ka hopena (ʻo nā kikoʻī e pili ana i ka hoʻokaʻawale ʻana a inā hōʻike ʻia ka pōʻaiapili ma mua. a ma hope paha):
SELECT time,millis,review_body FROM amazon
WHERE (time = 'ВРЕМЯ_СОБЫТИЯ' AND millis < МИЛЛИСЕКУНДЫ_СОБЫТИЯ) OR (time < 'ВРЕМЯ_СОБЫТИЯ')
ORDER BY time DESC, millis DESC
LIMIT КОЛИЧЕСТВО_СТРОК_КОНТЕКСТА
SETTINGS max_threads=1
Ma muli o ka hoʻouna koke ʻia ʻana o ka noi ma hope o ka hoʻihoʻi ʻana o ClickHouse i ka laina e pili ana, hoʻopau ia i loko o ka cache a ma ke ʻano holoʻokoʻa e hoʻokō koke ʻia ka noi a hoʻopau i kahi CPU liʻiliʻi (maʻa mau ke noi ma kahi o ~6 ms ma kaʻu mīkini virtual).
Hōʻike i nā memo hou i ka manawa maoli
I mea e hōʻike ai i nā memo e hiki mai ana i ka manawa maoli (kokoke), hoʻokō wale mākou i ka noi i kēlā me kēia mau kekona, me ka hoʻomanaʻo ʻana i ka manawa hope a mākou i hālāwai ai ma mua.
Nā laʻana kauoha
He aha ke ʻano o nā kauoha logscli maʻamau i ka hana?
Inā ʻoe i hoʻoiho i ka ʻikepili Amazon aʻu i ʻōlelo ai ma ka hoʻomaka ʻana o ka ʻatikala, hiki iā ʻoe ke holo i kēia mau kauoha:
# Показать строки, где встречается слово walmart
$ logscli -F 'walmart' | less
# Показать самые свежие 10 строк, где встречается "terrible"
$ logscli -F terrible -limit 10
# То же самое без -limit:
$ logscli -F terrible | head -n 10
# Показать все строки, подходящие под /times [0-9]/, написанные для vine и у которых высокий рейтинг
$ logscli -E 'times [0-9]' -where="vine='Y' AND star_rating>4" | less
# Показать все строки со словом "panic" и 3 строки контекста вокруг
$ logscli -F 'panic' -C 3 | less
# Непрерывно показывать новые строки со словом "5-star"
$ logscli -F '5-star' -tailf
kūmole
Loaʻa ka code utility (me ka ʻole o nā palapala) ma github ma
Source: www.habr.com