Mena kua whakamahia e koe nga hononga tukutuku ki te tiro i nga raarangi, kua kite pea koe me pehea, hei tikanga, he uaua enei atanga me te (he maha) kaore i te watea me te aro. Ko etahi ka taea e koe te waia, ko etahi he tino whakamataku, engari ki taku whakaaro ko te take o nga raru katoa ko te whakatata atu ki te mahi o te tiro i nga raarangi i te he: ka ngana matou ki te hanga i tetahi atanga paetukutuku kei reira te CLI (atanga raina whakahau) pai ake te mahi. He tino pai ahau ki te mahi me te hiku, te grep, te awk me etahi atu, na reira ki ahau ko te atanga pai mo te mahi me nga rakau he mea rite ki te hiku me te grep, engari ka taea hoki te whakamahi ki te panui i nga raarangi i puta mai i nga kaitoro maha. Ko te tikanga, panui mai i a ClickHouse!
*e ai ki te whakaaro whaiaro o te kaiwhakamahi habra
Tutaki logscli
Kaore au i tae mai he ingoa mo taku atanga, a, kia pono, kei te ahua o te tauira, engari ki te hiahia koe ki te kite tonu i te waehere puna, nau mai:
Ngā āhuatanga
Ko taku whainga he hanga i tetahi atanga e ahua waia ana ki te hunga kua mohio ki te hiku/grep, ara, ki te tautoko i nga mea e whai ake nei:
- Tirohia nga raarangi katoa, kaore he tātari.
- Waiho nga raina kei roto he aho iti (haki
-F
уgrep
). - Waiho nga rarangi e rite ana ki te whakahuatanga noa (kara
-E
уgrep
). - Ma te taunoa, ko te tiro kei roto i te raupapa o te waa whakamuri, na te mea ko nga raarangi hou e aro nui ana ki te tuatahi.
- Whakaatuhia te horopaki ki te taha o ia rarangi (nga whiringa
-A
,-B
и-C
уgrep
, e ta ana i nga rarangi N i mua, i muri, me te huri noa i ia raina rite, ia). - Tirohia nga rangitaki taumai i roto i te waa tuuturu, me te tātari kore ranei (te tikanga
tail -f | grep
). - Me hototahi te atanga ki
less
,head
,tail
me etahi atu - ma te taunoa, me whakahoki nga hua kaore he here i runga i to raatau nama; ka taia nga raina hei roma i te mea e hiahia ana te kaiwhakamahi ki te whiwhi; tohuSIGPIPE
kia haukoti wahanguhia te roma pororaka, pera me ta ratou mahitail
,grep
me etahi atu taputapu UNIX.
Реализация
Ka whakaaro ahau kua mohio koe ki te tuku rakau ki ClickHouse. Mena kaore, ka tūtohu ahau ki te whakamatau
Tuatahi me whakatau koe mo te kaupapa turanga. I te mea kei te pirangi koe ki te tango i nga raarangi kua tohua ma te waa, he mea tika ki te penapena pera. Mēnā he maha ngā kāwai rākau, ā, he ōrite te momo katoa, kātahi ka taea e koe te hanga i tētahi kāwai rākau hei tīwae tuatahi o te kī matua - mā tēnei ka taea e koe te kotahi tepu hei utu mo te maha, ka nui te taapiri ina te whakauru ki ClickHouse (i runga i nga kaitoro me nga puku pakeke, ka tūtohu kia whakauruhia nga raraunga kia kaua e neke ake i te ~1 wa ia hekona mo te tūmau katoa).
Arā, me tata te kaupapa ripanga e whai ake nei:
CREATE TABLE logs(
category LowCardinality(String), -- категория логов (опционально)
time DateTime, -- время события
millis UInt16, -- миллисекунды (могут быть и микросекунды, и т.д.): рекомендуется хранить, если событий много, чтобы было легче различать события между собой
..., -- ваши собственные поля, например имя сервера, уровень логирования, и так далее
message String -- текст сообщения
) ENGINE=MergeTree()
ORDER BY (category, time, millis)
Heoi, karekau au i kite i nga puna tuwhera me nga raarangi tuuturu ka taea e au te hopu me te tango, no reira ka mau ahau hei tauira.
nga tohutohu mo te tuku i nga arotake a Amazon ki ClickHouse
Me hanga he ripanga:
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
I roto i te huingararaunga a Amazon he ra anake mo te arotake, engari kaore he wa tika, na kia whakakiia enei raraunga ki te randon.
Kaore koe e whai ki te tango i nga konae tsv katoa ka whakawhāiti i a koe ki te tuatahi ~ 10-20 kia whiwhi ai koe i te huinga raraunga tino nui e kore e uru ki te 16 GB o RAM. Hei tuku ake i nga konae TSV i whakamahia e ahau te whakahau e whai ake nei:
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
I runga i te Kopae Tonu (he HDD) i roto i te Google Cloud me te 1000 GB te rahi (I tangohia e ahau tenei rahi kia nui ake te tere, ahakoa he iti ake te iti o te SSD o te rahi e hiahiatia ana) te tukunga ake. Ko te tere i tata ki te ~ 75 MB/hekona i runga i te 4 matua.
- Me whakarite e au he rahui kei te mahi au i a Google, engari i whakamahia e au he putea whaiaro, a, kaore tenei tuhinga e pa ki aku mahi i te kamupene.
Ka whakaputahia e au nga whakaahua katoa me tenei huinga raraunga, na te mea ko tenei katoa kei a au.
Whakaatuhia te ahunga whakamua karapa raraunga
Mai i te ClickHouse ka whakamahia e matou he karapa katoa i runga i te teepu me nga raarangi, a he nui te waa o tenei mahi ka kore pea e puta he hua mo te wa roa mena he iti noa nga whakataetae ka kitea, he mea pai kia kaha ki te whakaatu i te te ahunga whakamua o te patai tae noa ki te whiwhinga o nga rarangi tuatahi me te hua. Hei mahi i tenei, he tawhā kei te atanga HTTP ka taea e koe te tuku i te ahunga whakamua i roto i nga pane HTTP: send_progress_in_http_headers=1
. Heoi ano, kaore e taea e te whare pukapuka a Go paerewa te panui i nga pane i te wa e whakawhiwhia ana, engari ko te atanga HTTP 1.0 (kaua e pohehe ki te 1.1!) ka tautokohia e ClickHouse, na reira ka taea e koe te whakatuwhera i tetahi hononga TCP raw ki ClickHouse ka tukuna ki reira. GET /?query=... HTTP/1.0nn
ka whiwhi i nga pane whakautu me te tinana kaore he mawhiti, he whakamunatanga ranei, na i tenei keehi kaore matou e hiahia ki te whakamahi i te whare pukapuka paerewa.
Rakau rere mai i ClickHouse
Ko te ClickHouse he arotautanga mo nga paatai me te ORDER BY mo te wa roa (mai i te 2019?), na he patai penei
SELECT time, millis, message
FROM logs
WHERE message LIKE '%something%'
ORDER BY time DESC, millis DESC
Ka timata tonu te whakahoki mai i nga raina kei roto i a raatau korero "tetahi mea" me te kore e tatari kia mutu te karapa.
Ano, he tino watea mena ka whakakorehia e ClickHouse te tono i te wa i kati te hononga ki a ia, engari ehara tenei i te whanonga taunoa. Ka taea te whakakore tono aunoa ma te whakamahi i te whiringa cancel_http_readonly_queries_on_client_close=1
.
Te whakahaere tika o SIGPIPE i roto i te Haere
Ka mahia e koe, me kii, ko te whakahau some_cmd | head -n 10
, me pehea te whakahau some_cmd
ka mutu te mahi ina head
i tangohia nga rarangi 10? He ngawari te whakautu: inahea head
Ka mutu, ka kati te putorino, ka timata te tohu o te whakahau some_cmd ki te tohu, "ki hea". Ina some_cmd
ka ngana ki te tuhi ki te paipa kati,
I roto i te Haere ka puta ano tenei ma te taunoa, engari ka taia ano e te kaihautu tohu SIGPIPE te "tohu: SIGPIPE" he karere rite ranei ki te mutunga, a hei whakakore i tenei karere me whakahaere noa i a tatou a SIGPIPE kia rite ki ta tatou e hiahia ai, ara, wahangu noa. puta:
ch := make(chan os.Signal)
signal.Notify(ch, syscall.SIGPIPE)
go func() {
<-ch
os.Exit(0)
}()
Whakaatuhia te horopaki karere
I te nuinga o nga wa ka hiahia koe ki te kite i te horopaki i puta mai ai etahi hapa (hei tauira, na te tono i pa mai te mataku, he aha nga raru i kitea i mua i te tukinga), me te grep
Ka mahia tenei ma te whakamahi i nga whiringa -A, -B, me -C, e whakaatu ana i te maha o nga raina i muri, i mua, me te huri noa i te karere.
Kia aroha mai, kare ano au i kitea he huarahi ngawari ki te mahi pera i ClickHouse, no reira hei whakaatu i te horopaki, ka tukuna he tono taapiri penei ki ia rarangi o te hua (ko nga korero kei runga i te tohatoha me te whakaatu i te horopaki i mua muri ranei):
SELECT time,millis,review_body FROM amazon
WHERE (time = 'ВРЕМЯ_СОБЫТИЯ' AND millis < МИЛЛИСЕКУНДЫ_СОБЫТИЯ) OR (time < 'ВРЕМЯ_СОБЫТИЯ')
ORDER BY time DESC, millis DESC
LIMIT КОЛИЧЕСТВО_СТРОК_КОНТЕКСТА
SETTINGS max_threads=1
I te mea ka tukuna te tono i muri tata tonu mai i te hokinga mai o ClickHouse i te raina e rite ana, ka mutu ki roto i te keteroki me te nuinga o te waa ka mahia te tono me te pau i te iti PTM (te nuinga o te waa ka roa te tono mo te ~6 ms i runga i taku miihini mariko).
Whakaatuhia nga karere hou i roto i te waa tuuturu
Hei whakaatu i nga karere taumai i roto i te waa (tata tonu), ka mahia e matou te tono kotahi ia hekona ruarua, me te maumahara ki te tohu waahi whakamutunga i tutaki ki a matou i mua.
Tauira whakahau
He aha te ahua o nga whakahau logscli i roto i nga mahi?
Mena i tangohia e koe te huinga raraunga Amazon i korerohia e ahau i te timatanga o te tuhinga, ka taea e koe te whakahaere i nga whakahau e whai ake nei:
# Показать строки, где встречается слово 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
tohutoro
Kei te waatea te waehere whaipainga (kaore he tuhinga) kei runga github i
Source: will.com