แแฃ แแฅแแแ แแแแกแแ แแแแแแแงแแแแแแแ แแแ แแแขแแ แคแแแกแแแ แแฃแ แแแแแแแก แกแแแแฎแแแแ, แแแจแแ แแแแแ แจแแแแฉแแแแ, แ แแแแ , แ แแแแ แช แฌแแกแ, แแก แแแขแแ แคแแแกแแแ แ แแฃแแ แแ (แฎแจแแ แแ) แแ แช แแฃ แแกแ แแแกแแฎแแ แฎแแแแแ แแ แกแแแแกแฃแฎแแ. แแแแก แจแแแแซแแแแ แจแแแแฃแแ, แแแแก แแแกแแแฃแขแฃแ แแ แกแแจแแแแแ, แแแแ แแ แแแฉแแแแแแ, แ แแ แงแแแแ แแ แแแแแแแก แแแแแแ แแ แแก แแก, แ แแ แฉแแแ แแ แแกแฌแแ แแ แแแแฃแแแแแแ แแฃแ แแแแแแแก แแแฎแแแก แแแแชแแแแก: แแชแแแแแแ แจแแแฅแแแแ แแแ แแแขแแ แคแแแกแ, แกแแแแช CLI (แแ แซแแแแแแก แฎแแแแก แแแขแแ แคแแแกแ) แแฃแจแแแแก แฃแแแแแกแแ. แแ แแแ แแแแ แซแแแแแ แแแแคแแ แขแฃแแแ แแแฃแจแแแ tail-แแแ, grep-แแแ, awk-แแแ แแ แกแฎแแแแแแ แแ, แจแแกแแแแแแกแแ, แฉแแแแแแก แแแแแแฃแ แ แแแขแแ แคแแแกแ แแแแแแแแ แแฃแจแแแแแกแแแแก แแฅแแแแ tail-แแกแ แแ grep-แแก แแกแแแแกแ, แแแแ แแ แ แแแแแแช แแกแแแ แจแแแซแแแแ แแแแแงแแแแแฃแ แแฅแแแก แแ แแแแแ แกแแ แแแ แแแแ แแแกแฃแ แแฃแ แแแแแแแก แฌแแกแแแแแฎแแ. แแก, แ แ แแฅแแ แฃแแแ, แฌแแแแแแฎแแ ClickHouse-แแแ!
*แฐแแแ แ แแแแฎแแแ แแแแแก แแแ แแแ แแแ แแก แแแฎแแแแแ
แแแแชแแแแ logscli
แแ แแ แแแแแคแแฅแ แ แกแแฎแแแ แฉแแแ แแแขแแ แคแแแกแแกแแแแก แแ, แแแ แแแแ แแแแฎแ แแ, แแก แฃแคแ แ แแ แแขแแขแแแแก แกแแฎแแ แแ แกแแแแแก, แแแแ แแ แแฃ แแกแฃแ แ แแแฃแงแแแแแแแแ แแแฎแแ แกแแฌแงแแกแ แแแแ, แแแจแแ แแแแแกแแแแแแแ:
แจแแกแแซแแแแแแแแแ
แฉแแแ แแแแแแ แแงแ แจแแแแฅแแแ แแแขแแ แคแแแกแ, แ แแแแแแช แแแชแแแแ แฉแแแแ แแแแแแแก, แแแแช แแแฉแแแฃแแแ แแฃแแก/แแ แแแก, แแแฃ แแฎแแ แก แแฃแญแแ แแ แจแแแแแ แกแแแแแฎแแแก:
- แแฎแแแแ แงแแแแ แแฃแ แแแแ, แคแแแขแ แแชแแแก แแแ แแจแ.
- แแแขแแแ แฎแแแแแ, แ แแแแแแแช แจแแแชแแแก แคแแฅแกแแ แแแฃแ แฅแแแกแขแ แแแแก (แแ แแจแ
-F
ัgrep
). - แแแขแแแแ แฎแแแแแ, แ แแแแแแแช แจแแแกแแแแแแแ แ แแแฃแแแ แฃแ แแแแแแแแฅแแแแก (แแ แแจแ
-E
ัgrep
). - แแแแฃแแแกแฎแแแแแ, แแแฎแแ แฎแแแแ แกแแแแ แแกแแแ แ แฅแ แแแแแแแแฃแ แ แแแแแแแแแแ แแแแ, แ แแแแแ แฃแแฎแแแกแ แแฃแ แแแแแแ, แ แแแแ แช แฌแแกแ, แแแ แแแ แ แแแจแ แกแแแแขแแ แแกแแ.
- แแแแขแแฅแกแขแแก แฉแแแแแแ แแแแแแฃแแ แฎแแแแก แแแแ แแแ (แแแ แแแแขแ แแแ
-A
,-B
ะธ-C
ัgrep
, N แกแขแ แแฅแแแแก แแแแแญแแแ แแแแแแฃแแ แจแแกแแขแงแแแกแ แฎแแแแก แฌแแ, แจแแแแแ แแ แแแ แจแแแ, แจแแกแแแแแแกแแ). - แแฎแแแแ แจแแแแแแแแแ แแฃแ แแแแแแ แ แแแแฃแ แแ แแจแ, แแแคแแแขแแ แแ แแ แแแก แแแ แแจแ (แแ แกแแแแแแ
tail -f | grep
). - แแแขแแ แคแแแกแ แฃแแแ แแงแแก แแแแกแแแแแ
less
,head
,tail
แแ แกแฎแแแแ - แแแแฃแแแกแฎแแแแแ, แจแแแแแแแ แฃแแแ แแแแ แฃแแแแก แแแแ แ แแแแแแแแแก แจแแแฆแฃแแแแก แแแ แแจแ; แฎแแแแแ แแแแญแแแแ แแแแแแแ แแแแแ, แกแแแแ แแแแฎแแแ แแแแแ แแแแแขแแ แแกแแแฃแแแ แแแแ แแแฆแแแแ; แกแแแแแแSIGPIPE
แฃแแแ แฉแฃแแแ แจแแฌแงแแแขแแก แแฃแ แแแแแก แแแแแแ, แแกแแแ แ แแแแ แช แแแแก แแแแแแแแtail
,grep
แแ UNIX-แแก แกแฎแแ แกแแจแฃแแแแแแแ.
ะ ะตะฐะปะธะทะฐัะธั
แแ แแแแแ แแฃแแแ, แ แแ แแฅแแแ แฃแแแ แแชแแ แ แแแแ แแแแฌแแแแ แแฃแ แแแแแแ ClickHouse-แจแ. แแฃ แแ แ, แแแ แฉแแแ แกแชแแแแ
แฏแแ แฃแแแ แแแแแฌแงแแแขแแ แกแแแแแแกแ แกแฅแแแ. แแแแก แแแแ, แ แแ แแฅแแแ แฉแแแฃแแแแ แแ แแกแฃแ แ แแแแฆแแ แแฃแ แแแแแแ แแแแแแแแฃแแ แแ แแแก แแแฎแแแแแ, แแแแแแฃแ แแ แแแแ แจแแแแฎแแ แแ แแแแ. แแฃ แแฃแ แแแแแก แแ แแแแแ แแแขแแแแ แแแ แแ แแกแแแ แงแแแแ แแ แแแแแ แ แขแแแแกแแ, แแแจแแ แจแแแแซแแแแ แจแแฅแแแแ แแฃแ แแแแแก แแแขแแแแ แแ, แ แแแแ แช แแแ แแแแแแ แแแกแแฆแแแแก แแแ แแแแ แกแแแขแ - แแก แกแแจแฃแแแแแแก แแแแชแแแ แแฅแแแแแ แแ แแ แชแฎแ แแแ แ แแแแแแแแแก แแแชแแแแ, แ แแช แแแแ แแแฃแกแ แแฅแแแแ, แ แแแแกแแช ClickHouse-แจแ แฉแแกแแ (แแงแแ แแแกแแแ แกแแ แแแ แแแแ แ แแแแแแแแแแฃแแแ แแแแแชแแแแแแก แฉแแกแแ แแ แ แฃแแแขแแก ~ 1 แฏแแ แฌแแแจแ แแแแแ แกแแ แแแ แแกแแแแก).
แแแฃ, แฉแแแ แแแญแแ แแแแ แแแแฎแแแแแแ แจแแแแแแ แชแฎแ แแแแก แกแฅแแแ:
CREATE TABLE logs(
category LowCardinality(String), -- ะบะฐัะตะณะพัะธั ะปะพะณะพะฒ (ะพะฟัะธะพะฝะฐะปัะฝะพ)
time DateTime, -- ะฒัะตะผั ัะพะฑััะธั
millis UInt16, -- ะผะธะปะปะธัะตะบัะฝะดั (ะผะพะณัั ะฑััั ะธ ะผะธะบัะพัะตะบัะฝะดั, ะธ ั.ะด.): ัะตะบะพะผะตะฝะดัะตััั ั
ัะฐะฝะธัั, ะตัะปะธ ัะพะฑััะธะน ะผะฝะพะณะพ, ััะพะฑั ะฑัะปะพ ะปะตะณัะต ัะฐะทะปะธัะฐัั ัะพะฑััะธั ะผะตะถะดั ัะพะฑะพะน
..., -- ะฒะฐัะธ ัะพะฑััะฒะตะฝะฝัะต ะฟะพะปั, ะฝะฐะฟัะธะผะตั ะธะผั ัะตัะฒะตัะฐ, ััะพะฒะตะฝั ะปะพะณะธัะพะฒะฐะฝะธั, ะธ ัะฐะบ ะดะฐะปะตะต
message String -- ัะตะบัั ัะพะพะฑัะตะฝะธั
) ENGINE=MergeTree()
ORDER BY (category, time, millis)
แกแแแฌแฃแฎแแ แแ, แแ แแแจแแแแ แแแ แแแแแแ แฆแแ แฌแงแแ แแแแ แ แแแแแกแขแฃแ แ แแฃแ แแแแแแแ, แ แแแแแแแช แจแแแแซแแ แแแฆแ แแ แแแแแแแฌแแ แ, แแแแขแแ แแแแก แแแชแแแแ แแแแฆแ แแก แแแแแแแแ
แแแกแขแ แฃแฅแชแแแแ แแแแแแแแก แแแแแฎแแแแแแแก แแขแแแ แแแแกแแแแก ClickHouse-แแ
แจแแแฅแแแแ แชแฎแ แแแ:
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
แแแแแแแแก แแแแแชแแแแ แแแแแจแ แแ แแก แแฎแแแแ แแแแฎแแแแแก แแแ แแฆแ, แแแแ แแ แแฃแกแขแ แแ แ แแ แแ แแก, แแกแ แ แแ, แแแแแ แจแแแแกแแ แแก แแแแแชแแแแแ แ แแแแแแแ.
แแฅแแแ แแ แแญแแ แแแแแ แฉแแแแขแแแ แแแ แงแแแแ tsv แคแแแแ แแ แจแแแแแคแแ แแแแ แแแ แแแแ ~ 10-20-แแ, แ แแแ แแแแฆแแ แกแแแแแแ แแแแ แแแแแชแแแแแ, แ แแแแแแช แแ แฏแแแแ 16 GB แแแแ แแขแแฃแแ แแแฎแกแแแ แแแแจแ. TSV แคแแแแแแแก แแกแแขแแแ แแแ แแแแแแแงแแแ แจแแแแแแ แแ แซแแแแแ:
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
แกแขแแแแแ แขแฃแ แแแแ แแ แแแกแแแ (แ แแแแแแช แแ แแก HDD) Google Cloud-แจแ 1000 แแ แแแแแ (แแก แแแแ แซแแ แแแแแแ แแแแขแแ แแแแฆแ, แ แแ แกแแฉแฅแแ แ แแแแแ แแแฆแแแ แงแแคแแแแงแ, แแฃแแชแ แจแแกแแซแแแ แกแแญแแ แ แแแแแก SSD แฃแคแ แ แแแคแ แฆแแ แแ) แแขแแแ แแแ แกแแฉแฅแแ แ แแงแ แแแแฎแแแแแแ ~ 75 แแ/แฌแ 4 แแแ แแแแ.
- แฃแแแ แแแแแแแแ แแแฏแแแจแแ, แ แแ แแแฃแจแแแ Google-แจแ, แแแแ แแ แแแแแแแงแแแ แแแ แแแ แแแแแ แแจแ แแ แแ แกแขแแขแแแก แแ แแคแแ แ แแฅแแก แกแแแ แแ แแแแแแแแแจแ แฉแแแก แแฃแจแแแแแกแแแ.
แแ แจแแแฅแแแ แงแแแแ แแแฃแกแขแ แแชแแแก แแ แแแแแ แแขแฃแแ แแแแแชแแแแ แแแแ แแแแ, แ แแแแแ แแก แงแแแแแคแแ แ แแฅแแแแ แฎแแแ.
แแแแแชแแแแ แกแแแแแ แแแแก แแ แแแ แแกแแก แฉแแแแแแ
แแแแแแแแ ClickHouse-แจแ แฉแแแ แแแแแแแงแแแแแ แกแ แฃแ แกแแแแแ แแแแก แแแแแแแแ แแฃแ แแแแแแแ, แแ แแ แแแแ แแชแแแก แจแแแซแแแแ แแแกแญแแ แแแก แแแแจแแแแแแแแแ แแ แ แแ แจแแแซแแแแ แแ แแแแแแฆแแก แจแแแแแ แแแแ แฎแแแก แแแแแแแแแแแจแ, แแฃ แ แแแแแแแแ แจแแกแแขแงแแแกแ แแฅแแแแ แแแแแแแ, แแแแแแจแแฌแแแแแแ แแฉแแแแแ แแแแฎแแแแแก แแ แแแ แแกแ แจแแแแแแก แแแ แแแแ แกแขแ แแฅแแแแแแก แแแฆแแแแแแ. แแแแกแแแแแก, HTTP แแแขแแ แคแแแกแจแ แแ แแก แแแ แแแแขแ แ, แ แแแแแแช แกแแจแฃแแแแแแก แแแซแแแแ แแแแแแแแแ แแ แแแ แแกแ HTTP แกแแแแฃแ แแแจแ: send_progress_in_http_headers=1
. แกแแแฌแฃแฎแแ แแ, แกแขแแแแแ แขแฃแแ Go แแแแแแแแแแ แแแ แฌแแแแแแฎแแแก แกแแแแฃแ แแแก, แ แแแแ แช แแกแแแ แแแแฆแแแ, แแแแ แแ HTTP 1.0 แแแขแแ แคแแแกแ (แแ แฃแแแ แแแแแ แแแก 1.1-แจแ!) แแฎแแ แแแญแแ แแแแ ClickHouse-แแก แแแแ , แแกแ แ แแ แแฅแแแ แจแแแแซแแแแ แแแฎแกแแแ แแแฃแแฃแจแแแแแแแ TCP แแแแจแแ แ ClickHouse-แแแ แแ แแแแแแแแแ แแฅ. GET /?query=... HTTP/1.0nn
แแ แแแแฆแแ แแแกแฃแฎแแก แกแแแแฃแ แแแ แแ แขแแฅแกแขแ แงแแแแแแแแ แ แแแฅแชแแแแก แแ แแแจแแคแแ แแก แแแ แแจแ, แแกแ แ แแ, แแ แจแแแแฎแแแแแจแ แฉแแแ แแ แช แแ แแแญแแ แแแแ แกแขแแแแแ แขแฃแแ แแแแแแแแแแแก แแแแแงแแแแแ.
แแฃแ แแแแแแแก แกแขแ แแแแแแ ClickHouse-แแแ
ClickHouse-แก แแฅแแก แแแขแแแแแแชแแ แจแแแแแฎแแแแแกแแแแก ORDER BY-แแ แจแแแแ แแแแ แแแแ แฎแแแก แแแแแแแแแแแจแ (2019 แฌแแแแแ?), แแกแ แ แแ, แจแแแแแฎแแ, แ แแแแ แแชแแ
SELECT time, millis, message
FROM logs
WHERE message LIKE '%something%'
ORDER BY time DESC, millis DESC
แแก แแแฃแงแแแแแแแแ แแแแฌแงแแแก แฎแแแแแแก แแแแ แฃแแแแแก, แ แแแแแแกแแช แแฅแแ แฅแแแกแขแ แแฅแแแ "แ แแฆแแช" แแแ แจแแขแงแแแแแแแแจแ, แกแแแแแ แแแแก แแแกแ แฃแแแแแแแ แแแแแแแแแก แแแ แแจแ.
แแกแแแ, แซแแแแแ แแแกแแฎแแ แฎแแแแแ แแฅแแแแ, แแฃ แแแแแ ClickHouse-แแ แแแแฃแฅแแ แแแแฎแแแแ, แ แแแแกแแช แแแกแแแ แแแแจแแ แ แแแแฎแฃแ แ, แแแแ แแ แแก แแ แแ แแก แแแแฃแแแกแฎแแแแ แฅแชแแแ. แแแแฎแแแแแก แแแขแแแแขแฃแ แ แแแฃแฅแแแแ แจแแแซแแแแ แฉแแ แแแ แแคแชแแแก แแแแแงแแแแแแ cancel_http_readonly_queries_on_client_close=1
.
SIGPIPE-แแก แกแฌแแ แ แแแ แแแ Go-แจแ
แ แแแแกแแช แแฅแแแ แจแแแกแ แฃแแแแ, แแฅแแแ, แแ แซแแแแแ some_cmd | head -n 10
, แแฃแกแขแแ แ แแแแ แแ แซแแแแแ some_cmd
แแฉแแ แแแก แจแแกแ แฃแแแแแก, แ แแแแกแแช head
แแแแแแแแ 10 แกแขแ แแฅแแแ? แแแกแฃแฎแ แแแ แขแแแแ: แ แแแแก head
แแแแแ แแแแ, แแแแ แแฎแฃแ แแแ แแ some_cmd แแ แซแแแแแแก stdout แแฌแงแแแก แแแแแแแแแก, แแแ แแแแแแ, "แแ แกแแ". แฒ แแแแกแแช some_cmd
แชแแแแแแก แฉแแฌแแ แแก แแแฎแฃแ แฃแ แแแแแ,
Go-แจแ แแก แแกแแแ แฎแแแแ แแแแฃแแแกแฎแแแแแ, แแแแ แแ SIGPIPE แกแแแแแแแก แแแแแฃแจแแแแแแแ แแกแแแ แแแญแแแแก "แกแแแแแแก: SIGPIPE" แแ แแกแแแแก แจแแขแงแแแแแแแแก แแแแแก แแ แแ แจแแขแงแแแแแแแแก แแแกแแกแฃแคแแแแแแแแ แฉแแแ แฃแแ แแแแ แฃแแแ แแแแแฅแชแแ SIGPIPE แแกแ แ แแแแ แช แฉแแแ แแแแแแ, แแแฃ แฃแแ แแแแ แฉแฃแแแ. แแแกแแกแแแแแ:
ch := make(chan os.Signal)
signal.Notify(ch, syscall.SIGPIPE)
go func() {
<-ch
os.Exit(0)
}()
แจแแขแงแแแแแแแแก แแแแขแแฅแกแขแแก แฉแแแแแแ
แฎแจแแ แแ แแกแฃแ แ แแฎแแแแ แแแแขแแฅแกแขแ, แ แแแแแจแแช แแแฎแแ แแแ แแแแฃแแ แจแแชแแแแ (แแแแแแแแแ, แ แแแแแแ แแแแฎแแแแแ แแแแแแฌแแแ แแแแแแ, แแ แ แ แแแแแแจแแ แแแฃแแ แแ แแแแแแแแ แแงแ แฎแแแฃแแ แแแแ แแแแแ) แแ grep
แแก แแแแแแแ -A, -B แแ -C แแคแชแแแแแก แแแแแงแแแแแแ, แ แแแแแแแช แแฉแแแแแแแ แฎแแแแแแก แแแแแแแแฃแ แ แแแแแแแแแก แจแแขแงแแแแแแแแก แจแแแแแ, แฌแแ แแ แแแ แจแแแ, แจแแกแแแแแแกแแ.
แกแแแฌแฃแฎแแ แแ, แแ แแแ แแแแแแ แแแ แขแแแ แแแ, แ แแ แแแแแแแแ แแแแแ ClickHouse-แจแ, แแแแขแแ แแแแขแแฅแกแขแแก แกแแฉแแแแแแแแ, แแกแแแ แแแแแขแแแแแ แแแแฎแแแแ แแแแแแแแแ แจแแแแแแก แแแแแแฃแ แกแขแ แแฅแแแแ (แแแขแแแแแ แแแแแแแแแแฃแแแ แแแฎแแ แแกแฎแแแแแ แแ แแแแขแแฅแกแขแแก แฉแแแแแแแแ แแแ แ. แแ แจแแแแแ):
SELECT time,millis,review_body FROM amazon
WHERE (time = 'ะะ ะะะฏ_ะกะะะซะขะะฏ' AND millis < ะะะะะะกะะะฃะะะซ_ะกะะะซะขะะฏ) OR (time < 'ะะ ะะะฏ_ะกะะะซะขะะฏ')
ORDER BY time DESC, millis DESC
LIMIT ะะะะะงะะกะขะะ_ะกะขะ ะะ_ะะะะขะะะกะขะ
SETTINGS max_threads=1
แแแแแแแแ แแแแฎแแแแ แแแแแแแแแ แแแแฅแแแก แแแจแแแแ แแแก แจแแแแแ, แ แแช ClickHouse แแแแแ แฃแแแแก แจแแกแแแแแแก แฎแแแก, แแก แแแแแ แแแแ แฅแแจแจแ แแ แแแแแแแ แแแแฎแแแแ แกแแแแแแ แกแฌแ แแคแแ แกแ แฃแแแแแ แแ แแแแฎแแแ แก แแชแแ แ แแ แแชแแกแแ แก (แ แแแแ แช แฌแแกแ, แแแแฎแแแแแก แแแแฎแแแแแแ ~ 6 ms แกแญแแ แแแแ แฉแแแก แแแ แขแฃแแแฃแ แแแแฅแแแแแ).
แแฉแแแแแ แแฎแแแ แจแแขแงแแแแแแแแแ แ แแแแฃแ แแ แแจแ
แจแแแแแแแแแ แจแแขแงแแแแแแแแแแก แฉแแแแแแแก แแแแแแ (แแแแฅแแแก) แ แแแแฃแ แแ แแจแ, แฉแแแ แฃแแ แแแแ แแแกแ แฃแแแแ แแแแฎแแแแแก แงแแแแ แ แแแแแแแแ แฌแแแจแ แแ แแฎแแ, แแแแฎแกแแแก แแแแ แแ แแแก แจแขแแแแ, แ แแแแแแช แแแ แ แจแแแแฎแแแ.
แแ แซแแแแแแก แแแแแแแแแแ
แ แแแแ แแแแแแงแฃแ แแแ แขแแแแฃแ แ logscli แแ แซแแแแแแแ แแ แแฅแขแแแแจแ?
แแฃ แฉแแแแขแแแ แแแ แแแแแแแแก แแแแแชแแแแ แแแแ แแแ, แ แแแแแแช แกแขแแขแแแก แแแกแแฌแงแแกแจแ แแฆแแแแจแแ, แจแแแแซแแแแ แจแแแแแแ แแ แซแแแแแแแแก แแแจแแแแ:
# ะะพะบะฐะทะฐัั ัััะพะบะธ, ะณะดะต ะฒัััะตัะฐะตััั ัะปะพะฒะพ 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
แแแขแแ แแขแฃแ แ
แแแแฃแแแแฃแ แ แแแแ (แแแแฃแแแแขแแชแแแก แแแ แแจแ) แฎแแแแแกแแฌแแแแแแ github-แแ
แฌแงแแ แ: www.habr.com