Kei te whakawhanake matou i te atanga tino watea o te ao * mo te tiro i nga raarangi

Kei te whakawhanake matou i te atanga tino watea o te ao * mo te tiro i nga raarangi 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 to TOKA

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: https://github.com/YuriyNasretdinov/logscli (350 rarangi o te waehere Haere kua tohua).

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:

  1. Tirohia nga raarangi katoa, kaore he tātari.
  2. Waiho nga raina kei roto he aho iti (haki -F у grep).
  3. Waiho nga rarangi e rite ana ki te whakahuatanga noa (kara -E у grep).
  4. 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.
  5. 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).
  6. Tirohia nga rangitaki taumai i roto i te waa tuuturu, me te tātari kore ranei (te tikanga tail -f | grep).
  7. 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; tohu SIGPIPE kia haukoti wahanguhia te roma pororaka, pera me ta ratou mahi tail, 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 LSD и whare punuaA tenei tuhinga mo te tuku rangitaki.

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. arotake o nga hua mai i Amazon tae noa ki te tau 2015. Ko te tikanga, kaore i te rite tonu o raatau hanganga ki nga raarangi tuhinga, engari mo nga kaupapa whakaahua ehara tenei i te mea nui.

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, ka whiwhi tohu SIGPIPE, ka whakamutua te hotaka ma te taunoa.

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 https://github.com/YuriyNasretdinov/logscli. Ka koa ahau ki te rongo i o whakaaro mo taku whakaaro mo te atanga papatohu mo te tiro i nga raarangi i runga i te ClickHouse.

Source: will.com

Tāpiri i te kōrero