เจเจฎ เจคเฉเจฐ 'เจคเฉ, เจตเจชเจพเจฐเจ เจเจคเจชเจพเจฆ เจเจพเจ เจคเจฟเจเจฐ เจเฉเจคเฉ เจเจชเจจ-เจธเฉเจฐเจธ เจตเจฟเจเจฒเจช, เจเจฟเจตเฉเจ เจเจฟ เจชเฉเจฐเฉเจฎเฉเจฅเฉเจ เจธ + เจเฉเจฐเจพเจซเจพเจจเจพ, เจฆเฉ เจตเจฐเจคเฉเจ Nginx เจฆเฉ เจธเฉฐเจเจพเจฒเจจ เจฆเฉ เจจเจฟเจเจฐเจพเจจเฉ เจ เจคเฉ เจตเจฟเจธเจผเจฒเฉเจธเจผเจฃ เจเจฐเจจ เจฒเจ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเฉเฅค เจเจน เจจเจฟเจเจฐเจพเจจเฉ เจเจพเจ เจฐเฉเจ เจฒ-เจเจพเจเจฎ เจตเจฟเจธเจผเจฒเฉเจธเจผเจฃ เจฒเจ เจเฉฑเจ เจตเจงเฉเจ เจตเจฟเจเจฒเจช เจนเฉ, เจชเจฐ เจเจคเจฟเจนเจพเจธเจ เจตเจฟเจธเจผเจฒเฉเจธเจผเจฃ เจฒเจ เจฌเจนเฉเจค เจธเฉเจตเจฟเจงเจพเจเจจเจ เจจเจนเฉเจ เจนเฉเฅค เจเจฟเจธเฉ เจตเฉ เจชเฉเจฐเจธเจฟเฉฑเจง เจธเจฐเฉเจค 'เจคเฉ, nginx เจฒเฉเจเจธ เจคเฉเจ เจกเฉเจเจพ เจฆเฉ เจฎเจพเจคเจฐเจพ เจคเฉเจเจผเฉ เจจเจพเจฒ เจตเจง เจฐเจนเฉ เจนเฉ, เจ เจคเฉ เจตเฉฑเจกเฉ เจฎเจพเจคเจฐเจพ เจตเจฟเฉฑเจ เจกเฉเจเจพ เจฆเจพ เจตเจฟเจธเจผเจฒเฉเจธเจผเจฃ เจเจฐเจจ เจฒเจ, เจเจฟเจธเฉ เจนเฉเจฐ เจตเจฟเจธเจผเฉเจธเจผ เจเฉเจเจผ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจเจพ เจคเจฐเจเจชเฉเจฐเจจ เจนเฉเฅค
เจเจธ เจฒเฉเจ เจตเจฟเจ เจฎเฉเจ เจคเฉเจนเจพเจจเฉเฉฐ เจฆเฉฑเจธเจพเจเจเจพ เจเจฟ เจคเฉเจธเฉเจ เจเจฟเจตเฉเจ เจตเจฐเจค เจธเจเจฆเฉ เจนเฉ
TL:DR;
เจเจพเจฃเจเจพเจฐเฉ เจเจเฉฑเจ เฉ เจเจฐเจจ เจฒเจ เจเฉ เจ
เจธเฉเจ เจตเจฐเจคเจฆเฉ เจนเจพเจ
Nginx เจฒเฉเจ เจเจเฉฑเจ เฉ เจเฉเจคเฉ เจเจพ เจฐเจนเฉ เจนเจจ
เจกเจฟเจซเฉเจฒเจ เจฐเฉเจช เจตเจฟเฉฑเจ, Nginx เจฒเฉเจ เจเฉเจ เจเจธ เจคเจฐเฉเจนเจพเจ เจฆเจฟเจเจพเจ เจฆเจฟเฉฐเจฆเฉ เจนเจจ:
4/9/2019 12:58:17 PM1.1.1.1 - - [09/Apr/2019:09:58:17 +0000] "GET /sign-up HTTP/2.0" 200 9168 "https://example.com/sign-in" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36" "-"
4/9/2019 12:58:17 PM1.1.1.1 - - [09/Apr/2019:09:58:17 +0000] "GET /sign-in HTTP/2.0" 200 9168 "https://example.com/sign-up" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36" "-"
เจเจนเจจเจพเจ เจจเฉเฉฐ เจชเจพเจฐเจธ เจเฉเจคเจพ เจเจพ เจธเจเจฆเจพ เจนเฉ, เจชเจฐ Nginx เจธเฉฐเจฐเจเจจเจพ เจจเฉเฉฐ เจ เฉเจ เจเจฐเจจเจพ เจฌเจนเฉเจค เจธเฉเจเจพ เจนเฉ เจคเจพเจ เจเฉ เจเจน JSON เจตเจฟเฉฑเจ เจฒเฉเจ เจชเฉเจฆเจพ เจเจฐเฉ:
log_format json_combined escape=json '{ "created_at": "$msec", '
'"remote_addr": "$remote_addr", '
'"remote_user": "$remote_user", '
'"request": "$request", '
'"status": $status, '
'"bytes_sent": $bytes_sent, '
'"request_length": $request_length, '
'"request_time": $request_time, '
'"http_referrer": "$http_referer", '
'"http_x_forwarded_for": "$http_x_forwarded_for", '
'"http_user_agent": "$http_user_agent" }';
access_log /var/log/nginx/access.log json_combined;
เจธเจเฉเจฐเฉเจ เจฒเจ S3
เจฒเฉเจ เจธเจเฉเจฐ เจเจฐเจจ เจฒเจ, เจ เจธเฉเจ S3 เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจพเจเจเฉเฅค เจเจน เจคเฉเจนเจพเจจเฉเฉฐ เจฒเฉเจเจธ เจจเฉเฉฐ เจเฉฑเจ เจฅเจพเจ 'เจคเฉ เจธเจเฉเจฐ เจเจฐเจจ เจ เจคเฉ เจตเจฟเจธเจผเจฒเฉเจธเจผเจฃ เจเจฐเจจ เจฆเฉ เจเจเจพเจเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉ, เจเจฟเจเจเจเจฟ เจเจฅเฉเจจเจพ เจธเจฟเฉฑเจงเฉ S3 เจตเจฟเฉฑเจ เจกเฉเจเจพ เจจเจพเจฒ เจเฉฐเจฎ เจเจฐ เจธเจเจฆเฉ เจนเฉเฅค เจฌเจพเจ เจฆ เจตเจฟเฉฑเจ เจฒเฉเจ เจตเจฟเฉฑเจ เจฎเฉเจ เจคเฉเจนเจพเจจเฉเฉฐ เจฆเฉฑเจธเจพเจเจเจพ เจเจฟ เจฒเฉเจเจธ เจจเฉเฉฐ เจธเจนเฉ เจขเฉฐเจ เจจเจพเจฒ เจเจฟเจตเฉเจ เจเฉเฉเจจเจพ เจ เจคเฉ เจชเฉเจฐเจเจฟเจฐเจฟเจ เจเจฐเจจเฉ เจนเฉ, เจชเจฐ เจชเจนเจฟเจฒเจพเจ เจธเจพเจจเฉเฉฐ S3 เจตเจฟเฉฑเจ เจเฉฑเจ เจธเจพเจซเจผ เจฌเจพเจฒเจเฉ เจฆเฉ เจฒเฉเฉ เจนเฉ, เจเจฟเจธ เจตเจฟเฉฑเจ เจนเฉเจฐ เจเฉเจ เจตเฉ เจธเจเฉเจฐ เจจเจนเฉเจ เจเฉเจคเจพ เจเจพเจตเฉเจเจพ. เจเจน เจชเจนเจฟเจฒเจพเจ เจคเฉเจ เจตเจฟเจเจพเจฐเจจ เจฏเฉเจ เจนเฉ เจเจฟ เจคเฉเจธเฉเจ เจเจฟเจธ เจเฉเจคเจฐ เจตเจฟเฉฑเจ เจเจชเจฃเฉ เจฌเจพเจฒเจเฉ เจฌเจฃเจพ เจฐเจนเฉ เจนเฉเจตเฉเจเฉ, เจเจฟเจเจเจเจฟ เจเจฅเฉเจจเจพ เจธเจพเจฐเฉ เจเฉเจคเจฐเจพเจ เจตเจฟเฉฑเจ เจเจชเจฒเจฌเจง เจจเจนเฉเจ เจนเฉเฅค
เจ เจฅเฉเจจเจพ เจเฉฐเจธเฉเจฒ เจตเจฟเฉฑเจ เจเฉฑเจ เจธเจฐเจเจ เจฌเจฃเจพเจเจฃเจพ
เจเจ เจฒเจพเจเจพเจ เจฒเจ เจเจฅเฉเจจเจพ เจตเจฟเฉฑเจ เจเฉฑเจ เจธเจพเจฐเจฃเฉ เจฌเจฃเจพเจเจเฅค เจเฉเจเจฐ เจคเฉเจธเฉเจ Kinesis Firehose เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจ เจฆเฉ เจฏเฉเจเจจเจพ เจฌเจฃเจพ เจฐเจนเฉ เจนเฉ เจคเจพเจ เจเจน เจฒเจฟเจเจฃ เจ เจคเฉ เจชเฉเฉเจนเจจ เจฆเฉเจตเจพเจ เจฒเจ เจเจผเจฐเฉเจฐเฉ เจนเฉเฅค เจเจฅเฉเจจเจพ เจเฉฐเจธเฉเจฒ เจเฉเจฒเฉเจนเฉ เจ เจคเฉ เจเฉฑเจ เจธเจพเจฐเจฃเฉ เจฌเจฃเจพเจ:
SQL เจเฉเจฌเจฒ เจฐเจเจจเจพ
CREATE EXTERNAL TABLE `kinesis_logs_nginx`(
`created_at` double,
`remote_addr` string,
`remote_user` string,
`request` string,
`status` int,
`bytes_sent` int,
`request_length` int,
`request_time` double,
`http_referrer` string,
`http_x_forwarded_for` string,
`http_user_agent` string)
ROW FORMAT SERDE
'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
LOCATION
's3://<YOUR-S3-BUCKET>'
TBLPROPERTIES ('has_encrypted_data'='false');
Kinesis Firehose เจธเจเฉเจฐเฉเจฎ เจฌเจฃเจพเจเจฃเจพ
Kinesis Firehose เจเฉเจฃเฉ เจเจ เจซเจพเจฐเจฎเฉเจ เจตเจฟเฉฑเจ Nginx เจคเฉเจ S3 เจคเฉฑเจ เจชเฉเจฐเจพเจชเจค เจเฉเจคเฉ เจกเฉเจเจพ เจจเฉเฉฐ เจฒเจฟเจเฉเจเจพ, เจเจธเจจเฉเฉฐ YYYY/MM/DD/HH เจซเจพเจฐเจฎเฉเจ เจตเจฟเฉฑเจ เจกเจพเจเจฐเฉเจเจเจฐเฉเจเจ เจตเจฟเฉฑเจ เจตเฉฐเจกเจฆเจพ เจนเฉเฅค เจกเจพเจเจพ เจชเฉเฉเจนเจฃ เจตเฉเจฒเฉ เจเจน เจเฉฐเจฎ เจเจตเฉเจเจพเฅค เจคเฉเจธเฉเจ, เจฌเฉเจธเจผเจ, fluentd เจคเฉเจ S3 เจจเฉเฉฐ เจธเจฟเฉฑเจงเจพ เจฒเจฟเจ เจธเจเจฆเฉ เจนเฉ, เจชเจฐ เจเจธ เจธเจฅเจฟเจคเฉ เจตเจฟเฉฑเจ เจคเฉเจนเจพเจจเฉเฉฐ JSON เจฒเจฟเจเจฃเจพ เจชเจเจเจพ, เจ เจคเฉ เจเจน เจซเจพเจเจฒเจพเจ เจฆเฉ เจตเฉฑเจกเฉ เจเจเจพเจฐ เจฆเฉ เจเจพเจฐเจจ เจ เจฏเฉเจ เจนเฉเฅค เจเจธ เจคเฉเจ เจเจฒเจพเจตเจพ, PrestoDB เจเจพเจ Athena เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจธเจฎเฉเจ, JSON เจธเจญ เจคเฉเจ เจนเฉเจฒเฉ เจกเจพเจเจพ เจซเจพเจฐเจฎเฉเจ เจนเฉเฅค เจเจธ เจฒเจ Kinesis Firehose เจเฉฐเจธเฉเจฒ เจเฉเจฒเฉเจนเฉ, "เจกเจฟเจฒเฉเจตเจฐเฉ เจธเจเฉเจฐเฉเจฎ เจฌเจฃเจพเจ" 'เจคเฉ เจเจฒเจฟเฉฑเจ เจเจฐเฉ, "เจกเจฟเจฒเฉเจตเจฐเฉ" เจเฉเจคเจฐ เจตเจฟเฉฑเจ "เจธเจฟเฉฑเจงเจพ เจชเฉเจ" เจเฉเจฃเฉ:
เจ
เจเจฒเฉ เจเฉเจฌ เจตเจฟเฉฑเจ, โเจฐเจฟเจเจพเจฐเจก เจซเจพเจฐเจฎเฉเจ เจชเจฐเจฟเจตเจฐเจคเจจโ - โเจฏเฉเจโ เจเฉเจฃเฉ เจ
เจคเฉ เจฐเจฟเจเจพเจฐเจกเจฟเฉฐเจ เจซเจพเจฐเจฎเฉเจ เจตเจเฉเจ โเจ
เจชเจพเจเฉ ORCโ เจเฉเจฃเฉเฅค เจเฉเจ เจเฉเจ เจฆเฉ เจ
เจจเฉเจธเจพเจฐ
เจ เจธเฉเจ เจธเจเฉเจฐเฉเจ เจ เจคเฉ เจเจธ เจฌเจพเจฒเจเฉ เจฒเจ S3 เจเฉเจฃเจฆเฉ เจนเจพเจ เจเฉ เจ เจธเฉเจ เจชเจนเจฟเจฒเจพเจ เจฌเจฃเจพเจ เจธเฉเฅค Aws เจเจฒเฉ เจเฉเจฐเจพเจฒเจฐ, เจเจฟเจธ เจฌเจพเจฐเฉ เจฎเฉเจ เจฅเฉเฉเฉเจนเฉ เจฆเฉเจฐ เจฌเจพเจ เจฆ เจเฉฑเจฒ เจเจฐเจพเจเจเจพ, เจเฉฑเจ S3 เจฌเจพเจฒเจเฉ เจตเจฟเฉฑเจ เจ เจเฉเจคเจฐเจพเจ เจจเจพเจฒ เจเฉฐเจฎ เจจเจนเฉเจ เจเจฐ เจธเจเจฆเจพ, เจเจธเจฒเจ เจเจธเจจเฉเฉฐ เจเจพเจฒเฉ เจเฉฑเจกเจฃเจพ เจฎเจนเฉฑเจคเจตเจชเฉเจฐเจจ เจนเฉเฅค
เจฌเจพเจเฉ เจตเจฟเจเจฒเจชเจพเจ เจจเฉเฉฐ เจคเฉเจนเจพเจกเฉ เจฒเฉเจก เจฆเฉ เจ เจงเจพเจฐ เจคเฉ เจฌเจฆเจฒเจฟเจ เจเจพ เจธเจเจฆเจพ เจนเฉ; เจฎเฉเจ เจเจฎ เจคเฉเจฐ 'เจคเฉ เจกเจฟเจซเฉเจฒเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเจพ เจนเจพเจเฅค เจจเฉเจ เจเจฐเฉ เจเจฟ S3 เจเฉฐเจชเจฐเฉเจธเจผเจจ เจเจชเจฒเจฌเจง เจจเจนเฉเจ เจนเฉ, เจชเจฐ ORC เจฎเฉเจฒ เจฐเฉเจช เจตเจฟเฉฑเจ เจจเฉเจเจฟเจต เจเฉฐเจชเจฐเฉเจธเจผเจจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเจพ เจนเฉเฅค
เจชเฉเจฐเจตเจพเจน
เจนเฉเจฃ เจเจฆเฉเจ เจ
เจธเฉเจ เจฒเฉเจเจธ เจจเฉเฉฐ เจธเจเฉเจฐ เจเจฐเจจ เจ
เจคเฉ เจชเฉเจฐเจพเจชเจค เจเจฐเจจ เจฆเฉ เจธเฉฐเจฐเจเจจเจพ เจเฉเจคเฉ เจนเฉ, เจธเจพเจจเฉเฉฐ เจญเฉเจเจฃ เจฆเฉ เจธเฉฐเจฐเจเจจเจพ เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจนเฉเฅค เจ
เจธเฉเจ เจตเจฐเจคเจพเจเจเฉ
เจชเจนเจฟเจฒเจพเจ, เจธเจพเจจเฉเฉฐ fluent.conf เจธเฉฐเจฐเจเจจเจพ เจซเจพเจเจฒ เจฆเฉ เจฒเฉเฉ เจนเฉเฅค เจเจธเจจเฉเฉฐ เจฌเจฃเจพเจ เจ เจคเฉ เจธเจฐเฉเจค เจเฉเฉเฉ:
เจชเฉเจฐเจ 24224
เจฌเฉฐเจจเฉเจน 0.0.0.0
เจนเฉเจฃ เจคเฉเจธเฉเจ Fluentd เจธเจฐเจตเจฐ เจธเจผเฉเจฐเฉ เจเจฐ เจธเจเจฆเฉ เจนเฉเฅค เจเฉเจเจฐ เจคเฉเจนเจพเจจเฉเฉฐ เจตเจงเฉเจฐเฉ เจเฉฑเจจเจค เจธเฉฐเจฐเจเจจเจพ เจฆเฉ เจฒเฉเฉ เจนเฉ, เจคเจพเจ เจเจธ 'เจคเฉ เจเจพเจ
$ docker run
-d
-p 24224:24224
-p 24224:24224/udp
-v /data:/fluentd/log
-v <PATH-TO-FLUENT-CONF>:/fluentd/etc fluentd
-c /fluentd/etc/fluent.conf
fluent/fluentd:stable
เจเจน เจธเฉฐเจฐเจเจจเจพ เจฎเจพเจฐเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเฉ /fluentd/log
เจญเฉเจเจฃ เจคเฉเจ เจชเจนเจฟเจฒเจพเจ เจฒเฉเจเจพเจ เจจเฉเฉฐ เจเฉเจธเจผ เจเจฐเจจ เจฒเจเฅค เจคเฉเจธเฉเจ เจเจธ เจคเฉเจ เจฌเจฟเจจเจพเจ เจเจฐ เจธเจเจฆเฉ เจนเฉ, เจชเจฐ เจซเจฟเจฐ เจเจฆเฉเจ เจคเฉเจธเฉเจ เจฎเฉเฉ เจเจพเจฒเฉ เจเจฐเจฆเฉ เจนเฉ, เจคเจพเจ เจคเฉเจธเฉเจ เจฌเฉเจ-เจฌเฉเจฐเฉเจเจฟเฉฐเจ เจฒเฉเจฌเจฐ เจจเจพเจฒ เจเฉเจธเจผ เจเฉเจคเฉ เจนเจฐ เจเฉเจเจผ เจจเฉเฉฐ เจเฉเจ เจธเจเจฆเฉ เจนเฉ. เจคเฉเจธเฉเจ เจเจฟเจธเฉ เจตเฉ เจชเฉเจฐเจ เจฆเฉ เจตเจฐเจคเฉเจ เจตเฉ เจเจฐ เจธเจเจฆเฉ เจนเฉ; 24224 เจกเจฟเจซเจพเจฒเจ Fluentd เจชเฉเจฐเจ เจนเฉ
เจนเฉเจฃ เจเจฆเฉเจ เจธเจพเจกเฉ เจเฉเจฒ Fluentd เจเฉฑเจฒ เจฐเจฟเจนเจพ เจนเฉ, เจ เจธเฉเจ เจเฉฑเจฅเฉ Nginx เจฒเฉเจ เจญเฉเจ เจธเจเจฆเฉ เจนเจพเจเฅค เจ เจธเฉเจ เจเจฎ เจคเฉเจฐ 'เจคเฉ เจเฉฑเจ เจกเฉเจเจฐ เจเฉฐเจเฉเจจเจฐ เจตเจฟเฉฑเจ Nginx เจเจฒเจพเจเจเจฆเฉ เจนเจพเจ, เจเจฟเจธ เจธเจฅเจฟเจคเฉ เจตเจฟเฉฑเจ เจกเฉเจเจฐ เจเฉเจฒ Fluentd เจฒเจ เจเฉฑเจ เจฎเฉเจฒ เจฒเฉเจเจฟเฉฐเจ เจกเจฐเจพเจเจตเจฐ เจนเฉ:
$ docker run
--log-driver=fluentd
--log-opt fluentd-address=<FLUENTD-SERVER-ADDRESS>
--log-opt tag="{{.Name}}"
-v /some/content:/usr/share/nginx/html:ro
-d
nginx
เจเฉเจเจฐ เจคเฉเจธเฉเจ Nginx เจจเฉเฉฐ เจตเฉฑเจเจฐเฉ เจขเฉฐเจ เจจเจพเจฒ เจเจฒเจพเจเจเจฆเฉ เจนเฉ, เจคเจพเจ เจคเฉเจธเฉเจ เจฒเฉเจ เจซเจพเจเจฒเจพเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐ เจธเจเจฆเฉ เจนเฉ, Fluentd เจเฉเจฒ เจนเฉ
เจเจฒเฉ เจซเจฒเฉเจเจเจ เจธเฉฐเจฐเจเจจเจพ เจตเจฟเฉฑเจ เจเฉฑเจชเจฐ เจธเฉฐเจฐเจเจฟเจค เจฒเฉเจ เจชเจพเจฐเจธเจฟเฉฐเจ เจจเฉเฉฐ เจเฉเฉเฉเจ:
<filter YOUR-NGINX-TAG.*>
@type parser
key_name log
emit_invalid_record_to_error false
<parse>
@type json
</parse>
</filter>
เจ
เจคเฉ เจตเจฐเจค เจเฉ Kinesis เจจเฉเฉฐ เจฒเจพเจ เจญเฉเจเจฃ
<match YOUR-NGINX-TAG.*>
@type kinesis_firehose
region region
delivery_stream_name <YOUR-KINESIS-STREAM-NAME>
aws_key_id <YOUR-AWS-KEY-ID>
aws_sec_key <YOUR_AWS-SEC_KEY>
</match>
เจ เจฅเฉเจจเจพ
เจเฉเจเจฐ เจคเฉเจธเฉเจ เจธเจญ เจเฉเจ เจธเจนเฉ เจขเฉฐเจ เจจเจพเจฒ เจเฉเจเจซเจฟเจเจฐ เจเฉเจคเจพ เจนเฉ, เจคเจพเจ เจเฉเจ เจธเจฎเฉเจ เจฌเจพเจ เจฆ (เจกเจฟเจซเฉเจฒเจ เจฐเฉเจช เจตเจฟเฉฑเจ, เจเจพเจเจจเฉเจธเจฟเจธ เจฐเจฟเจเจพเจฐเจก เจนเจฐ 10 เจฎเจฟเฉฐเจ เจตเจฟเฉฑเจ เจเฉฑเจ เจตเจพเจฐ เจกเฉเจเจพ เจชเฉเจฐเจพเจชเจค เจเจฐเจฆเจพ เจนเฉ) เจคเฉเจนเจพเจจเฉเฉฐ S3 เจตเจฟเฉฑเจ เจฒเฉเจ เจซเจพเจเจฒเจพเจ เจฆเฉเจเจฃเฉเจเจ เจเจพเจนเฉเจฆเฉเจเจ เจนเจจเฅค Kinesis Firehose เจฆเฉ "เจจเจฟเจเจฐเจพเจจเฉ" เจฎเฉเจจเฉ เจตเจฟเฉฑเจ เจคเฉเจธเฉเจ เจฆเฉเจ เจธเจเจฆเฉ เจนเฉ เจเจฟ S3 เจตเจฟเฉฑเจ เจเจฟเฉฐเจจเจพ เจกเจพเจเจพ เจฐเจฟเจเจพเจฐเจก เจเฉเจคเจพ เจเจฟเจ เจนเฉ, เจจเจพเจฒ เจนเฉ เจเจฒเจคเฉเจเจ เจตเฉเฅค Kinesis เจฐเฉเจฒ เจฒเจ S3 เจฌเจพเจฒเจเฉ เจจเฉเฉฐ เจฒเจฟเจเจฃ เจฆเฉ เจชเจนเฉเฉฐเจ เจฆเฉเจฃเจพ เจจเจพ เจญเฉเฉฑเจฒเฉเฅค เจเฉเจเจฐ Kinesis เจเจฟเจธเฉ เจเฉเจเจผ เจจเฉเฉฐ เจชเจพเจฐเจธ เจจเจนเฉเจ เจเจฐ เจธเจเจฆเจพ เจนเฉ, เจคเจพเจ เจเจน เจเจธเฉ เจฌเจพเจฒเจเฉ เจตเจฟเฉฑเจ เจคเจฐเฉเฉฑเจเฉเจเจ เจจเฉเฉฐ เจเฉเฉ เจฆเฉเจตเฉเจเจพเฅค
เจนเฉเจฃ เจคเฉเจธเฉเจ เจเจฅเฉเจจเจพ เจตเจฟเฉฑเจ เจกเฉเจเจพ เจฆเฉเจ เจธเจเจฆเฉ เจนเฉเฅค เจเจ เจเจนเจจเจพเจ เจจเจตเฉเจจเจคเจฎ เจฌเฉเจจเจคเฉเจเจ เจจเฉเฉฐ เจฒเฉฑเจญเฉเจ เจเจฟเจนเจจเจพเจ เจฒเจ เจ เจธเฉเจ เจเจฒเจคเฉเจเจ เจตเจพเจชเจธ เจเฉเจคเฉเจเจ เจนเจจ:
SELECT * FROM "db_name"."table_name" WHERE status > 499 ORDER BY created_at DESC limit 10;
เจนเจฐเฉเจ เจฌเฉเจจเจคเฉ เจฒเจ เจธเจพเจฐเฉ เจฐเจฟเจเจพเจฐเจกเจพเจ เจจเฉเฉฐ เจธเจเฉเจจ เจเฉเจคเจพ เจเจพ เจฐเจฟเจนเจพ เจนเฉ
เจนเฉเจฃ เจธเจพเจกเฉ เจฒเฉเจเจธ เจจเฉเฉฐ เจชเฉเจฐเฉเจธเฉเจธ เจเฉเจคเจพ เจเจฟเจ เจนเฉ เจ เจคเฉ ORC เจตเจฟเฉฑเจ S3 เจตเจฟเฉฑเจ เจธเจเฉเจฐ เจเฉเจคเจพ เจเจฟเจ เจนเฉ, เจธเฉฐเจเฉเจเจฟเจค เจ เจคเฉ เจตเจฟเจธเจผเจฒเฉเจธเจผเจฃ เจฒเจ เจคเจฟเจเจฐ เจนเฉเฅค Kinesis Firehose เจจเฉ เจเจนเจจเจพเจ เจจเฉเฉฐ เจนเจฐ เจเฉฐเจเฉ เจฒเจ เจกเจพเจเจฐเฉเจเจเจฐเฉเจเจ เจตเจฟเฉฑเจ เจธเฉฐเจเจ เจฟเจค เจเฉเจคเจพ. เจนเจพเจฒเจพเจเจเจฟ, เจเจฟเฉฐเจจเจพ เจเจฟเจฐ เจธเจพเจฐเจฃเฉ เจจเฉเฉฐ เจตเฉฐเจกเจฟเจ เจจเจนเฉเจ เจเจพเจเจฆเจพ, เจ เจฅเฉเจจเจพ เจนเจฐ เจฌเฉเจจเจคเฉ 'เจคเฉ, เจฆเฉเจฐเจฒเฉฑเจญ เจ เจชเจตเจพเจฆเจพเจ เจฆเฉ เจจเจพเจฒ เจเจฒ-เจเจพเจเจฎ เจกเฉเจเจพ เจฒเฉเจก เจเจฐเฉเจเฉเฅค เจเจน เจฆเฉ เจเจพเจฐเจจเจพเจ เจเจฐเจเฉ เจเฉฑเจ เจตเฉฑเจกเฉ เจธเจฎเฉฑเจธเจฟเจ เจนเฉ:
- เจกเฉเจเจพ เจฆเฉ เจฎเจพเจคเจฐเจพ เจฒเจเจพเจคเจพเจฐ เจตเจง เจฐเจนเฉ เจนเฉ, เจธเจตเจพเจฒเจพเจ เจจเฉเฉฐ เจนเฉเจฒเฉ เจเจฐ เจฐเจฟเจนเจพ เจนเฉ;
- เจเจฅเฉเจจเจพ เจจเฉเฉฐ เจธเจเฉเจจ เจเฉเจคเฉ เจกเฉเจเจพ เจฆเฉ เจฎเจพเจคเจฐเจพ เจฆเฉ เจเจงเจพเจฐ 'เจคเฉ เจฌเจฟเจฒ เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉ, เจชเฉเจฐเจคเฉ เจฌเฉเจจเจคเฉ เจเฉฑเจเฉ-เจเฉฑเจ 10 MB เจฆเฉ เจจเจพเจฒเฅค
เจเจธ เจจเฉเฉฐ เจ เฉเจ เจเจฐเจจ เจฒเจ, เจ เจธเฉเจ AWS เจเจฒเฉ เจเฉเจฐเจพเจฒเจฐ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเจพเจ, เจเฉ S3 เจตเจฟเฉฑเจ เจกเฉเจเจพ เจจเฉเฉฐ เจเฉเจฐเฉเจฒ เจเจฐเฉเจเจพ เจ เจคเฉ เจเจฒเฉ เจฎเฉเจเจพเจธเจเฉเจฐ เจตเจฟเฉฑเจ เจญเจพเจ เจเจพเจฃเจเจพเจฐเฉ เจฒเจฟเจ เจฆเฉเจตเฉเจเจพเฅค เจเจน เจธเจพเจจเฉเฉฐ เจเจฅเฉเจจเจพ เจคเฉเจ เจชเฉเฉฑเจเจเจฟเฉฑเจ เจเจฐเจจ เจตเฉเจฒเฉ เจญเจพเจเจพเจ เจจเฉเฉฐ เจซเจฟเจฒเจเจฐ เจตเจเฉเจ เจตเจฐเจคเจฃ เจฆเฉ เจเจเจพเจเจผเจค เจฆเฉเจตเฉเจเจพ, เจ เจคเฉ เจเจน เจธเจฟเจฐเจซเจผ เจชเฉเฉฑเจเจเจฟเฉฑเจ เจตเจฟเฉฑเจ เจฆเจฟเฉฑเจคเฉเจเจ เจกเจพเจเจฐเฉเจเจเจฐเฉเจเจ เจจเฉเฉฐ เจธเจเฉเจจ เจเจฐเฉเจเจพเฅค
เจเจฎเจพเจเจผเจพเจจ เจเจฒเฉ เจเฉเจฐเจพเจฒเจฐ เจธเฉเจ เจ เจช เจเฉเจคเจพ เจเจพ เจฐเจฟเจนเจพ เจนเฉ
Amazon Glue Crawler S3 เจฌเจพเจฒเจเฉ เจตเจฟเฉฑเจ เจธเจพเจฐเฉ เจกเฉเจเจพ เจจเฉเฉฐ เจธเจเฉเจจ เจเจฐเจฆเจพ เจนเฉ เจ เจคเฉ เจญเจพเจเจพเจ เจจเจพเจฒ เจเฉเจฌเจฒ เจฌเจฃเจพเจเจเจฆเจพ เจนเฉเฅค AWS เจเจฒเฉ เจเฉฐเจธเฉเจฒ เจคเฉเจ เจเฉฑเจ เจเจฒเฉ เจเฉเจฐเจพเจฒเจฐ เจฌเจฃเจพเจ เจ เจคเฉ เจเฉฑเจ เจฌเจพเจฒเจเฉ เจธเจผเจพเจฎเจฒ เจเจฐเฉ เจเจฟเฉฑเจฅเฉ เจคเฉเจธเฉเจ เจกเฉเจเจพ เจธเจเฉเจฐ เจเจฐเจฆเฉ เจนเฉเฅค เจคเฉเจธเฉเจ เจเจ เจฌเจพเจฒเจเฉเจเจ เจฒเจ เจเฉฑเจ เจเฉเจฐเจพเจฒเจฐ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐ เจธเจเจฆเฉ เจนเฉ, เจเจธ เจธเจฅเจฟเจคเฉ เจตเจฟเฉฑเจ เจเจน เจจเจฟเจธเจผเจเจฟเจค เจกเฉเจเจพเจฌเฉเจธ เจตเจฟเฉฑเจ เจเจนเจจเจพเจ เจจเจพเจตเจพเจ เจจเจพเจฒ เจเฉเจฌเจฒ เจฌเจฃเจพเจเจเจพ เจเฉ เจฌเจพเจฒเจเฉเจเจ เจฆเฉ เจจเจพเจฎ เจจเจพเจฒ เจฎเฉเจฒ เจเจพเจเจฆเฉ เจนเจจเฅค เจเฉเจเจฐ เจคเฉเจธเฉเจ เจจเจฟเจฏเจฎเจฟเจค เจคเฉเจฐ 'เจคเฉ เจเจธ เจกเฉเจเจพ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจ เจฆเฉ เจฏเฉเจเจจเจพ เจฌเจฃเจพเจเจเจฆเฉ เจนเฉ, เจคเจพเจ เจเจชเจฃเฉเจเจ เจเจผเจฐเฉเจฐเจคเจพเจ เจจเฉเฉฐ เจชเฉเจฐเจพ เจเจฐเจจ เจฒเจ เจเฉเจฐเจพเจฒเจฐ เจฆเฉ เจฒเจพเจเจ เจ เจจเฉเจธเฉเจเฉ เจจเฉเฉฐ เจเฉเจเจซเจฟเจเจฐ เจเจฐเจจเจพ เจฏเจเฉเจจเฉ เจฌเจฃเจพเจเฅค เจ เจธเฉเจ เจธเจพเจฐเฉเจเจ เจเฉเจฌเจฒเจพเจ เจฒเจ เจเฉฑเจ เจเฉเจฐเจพเจฒเจฐ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเจพเจ, เจเฉ เจนเจฐ เจเฉฐเจเฉ เจเฉฑเจฒเจฆเจพ เจนเฉเฅค
เจตเจฟเจญเจพเจเจฟเจค เจเฉเจฌเจฒ
เจเฉเจฐเจพเจฒเจฐ เจฆเฉ เจชเจนเจฟเจฒเฉ เจฒเจพเจเจ เจคเฉเจ เจฌเจพเจ เจฆ, เจนเจฐเฉเจ เจธเจเฉเจจ เจเฉเจคเฉ เจฌเจพเจฒเจเฉ เจฒเจ เจเฉเจฌเจฒ เจธเฉเจเจฟเฉฐเจเจพเจ เจตเจฟเฉฑเจ เจฆเจฐเจธเจพเจ เจกเฉเจเจพเจฌเฉเจธ เจตเจฟเฉฑเจ เจฆเจฟเจเจพเจ เจฆเฉเจฃเฉ เจเจพเจนเฉเจฆเฉ เจนเจจเฅค เจเจฅเฉเจจเจพ เจเฉฐเจธเฉเจฒ เจเฉเจฒเฉเจนเฉ เจ เจคเฉ Nginx เจฒเฉเจเจธ เจจเจพเจฒ เจเฉเจฌเจฒ เจฒเฉฑเจญเฉ. เจเจ เจเฉเจ เจชเฉเฉเจนเจจ เจฆเฉ เจเฉเจธเจผเจฟเจธเจผ เจเจฐเฉเจ:
SELECT * FROM "default"."part_demo_kinesis_bucket"
WHERE(
partition_0 = '2019' AND
partition_1 = '04' AND
partition_2 = '08' AND
partition_3 = '06'
);
เจเจน เจชเฉเฉฑเจเจเจฟเฉฑเจ 6 เจ เจชเฉเจฐเฉเจฒ, 7 เจจเฉเฉฐ เจธเจตเฉเจฐเฉ 8 เจตเจเฉ เจคเฉเจ เจธเจตเฉเจฐเฉ 2019 เจตเจเฉ เจฆเฉ เจตเจฟเจเจเจพเจฐ เจชเฉเจฐเจพเจชเจค เจนเฉเจ เจธเจพเจฐเฉ เจฐเจฟเจเจพเจฐเจกเจพเจ เจฆเฉ เจเฉเจฃ เจเจฐเฉเจเฉเฅค เจชเจฐ เจเจน เจเฉฑเจ เจเฉเจฐ-เจตเจฟเจญเจพเจเจจ เจธเจพเจฐเจฃเฉ เจคเฉเจ เจชเฉเฉเจนเจจ เจจเจพเจฒเฉเจ เจเจฟเฉฐเจจเจพ เจเฉ เจเฉเจธเจผเจฒ เจนเฉ? เจเจ เจเจนเฉ เจฐเจฟเจเจพเจฐเจก เจฒเฉฑเจญเฉเจ เจ เจคเฉ เจเฉเจฃเฉเจ, เจเจนเจจเจพเจ เจจเฉเฉฐ เจเจพเจเจฎเจธเจเฉเจเจช เจฆเฉเจเจฐเจพ เจซเจฟเจฒเจเจฐ เจเจฐเจฆเฉ เจนเฉเจ:
3.59 เจธเจเจฟเฉฐเจ เจ เจคเฉ 244.34 เจฎเฉเจเจพเจฌเจพเจเจ เจกเฉเจเจพเจธเฉเจ 'เจคเฉ เจธเจฟเจฐเจซเจผ เจเฉฑเจ เจนเจซเจผเจคเฉ เจฆเฉ เจฒเฉเจ เจฆเฉ เจจเจพเจฒเฅค เจเจ เจญเจพเจ เจฆเฉเจเจฐเจพ เจเฉฑเจ เจซเจฟเจฒเจเจฐ เจฆเฉ เจเฉเจธเจผเจฟเจธเจผ เจเจฐเฉเจ:
เจฅเฉเฉเจพ เจคเฉเจเจผ, เจชเจฐ เจธเจญ เจคเฉเจ เจฎเจนเฉฑเจคเจตเจชเฉเจฐเจจ - เจธเจฟเจฐเจซ 1.23 เจฎเฉเจเจพเจฌเจพเจเจ เจกเฉเจเจพ! เจเจน เจฌเจนเฉเจค เจธเจธเจคเจพ เจนเฉเจตเฉเจเจพ เจเฉเจเจฐ เจเฉเจฎเจค เจตเจฟเฉฑเจ เจเฉฑเจเฉ-เจเฉฑเจ 10 เจฎเฉเจเจพเจฌเจพเจเจ เจชเฉเจฐเจคเฉ เจฌเฉเจจเจคเฉ เจฒเจ เจจเจนเฉเจเฅค เจชเจฐ เจเจน เจ เจเฉ เจตเฉ เจฌเจนเฉเจค เจตเจงเฉเจ เจนเฉ, เจ เจคเฉ เจตเฉฑเจกเฉ เจกเฉเจเจพเจธเฉเจเจพเจ 'เจคเฉ เจ เฉฐเจคเจฐ เจฌเจนเฉเจค เจเจผเจฟเจเจฆเจพ เจชเฉเจฐเจญเจพเจตเจธเจผเจพเจฒเฉ เจนเฉเจตเฉเจเจพเฅค
Cube.js เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจกเฉเจธเจผเจฌเฉเจฐเจก เจฌเจฃเจพเจเจฃเจพ
เจกเฉเจธเจผเจฌเฉเจฐเจก เจจเฉเฉฐ เจ
เจธเฉเจเจฌเจฒ เจเจฐเจจ เจฒเจ, เจ
เจธเฉเจ Cube.js เจตเจฟเจธเจผเจฒเฉเจธเจผเจฃเจพเจคเจฎเจ เจซเจฐเฉเจฎเจตเจฐเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเจพเจเฅค เจเจธ เจตเจฟเฉฑเจ เจฌเจนเฉเจค เจธเจพเจฐเฉ เจซเฉฐเจเจธเจผเจจ เจนเจจ, เจชเจฐ เจ
เจธเฉเจ เจฆเฉ เจตเจฟเฉฑเจ เจฆเจฟเจฒเจเจธเจชเฉ เจฐเฉฑเจเจฆเฉ เจนเจพเจ: เจญเจพเจ เจซเจฟเจฒเจเจฐ เจ
เจคเฉ เจกเฉเจเจพ เจชเฉเจฐเฉ-เจเจเจฐเฉเจเฉเจธเจผเจจ เจจเฉเฉฐ เจเจเฉเจฎเฉเจเจฟเจเจฒเฉ เจตเจฐเจคเจฃ เจฆเฉ เจฏเฉเจเจคเจพเฅค เจเจน เจกเจพเจเจพ เจธเจเฉเจฎเจพ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเจพ เจนเฉ
เจเจฒเฉ เจเฉฑเจ เจจเจตเฉเจ Cube.js เจเจชเจฒเฉเจเฉเจธเจผเจจ เจฌเจฃเจพเจเจเฅค เจเจฟเจเจเจเจฟ เจ
เจธเฉเจ เจชเจนเจฟเจฒเจพเจ เจนเฉ AWS เจธเจเฉเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐ เจฐเจนเฉ เจนเจพเจ, เจเจธ เจฒเจ เจคเฉเจจเจพเจคเฉ เจฒเจ Lambda เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจเจพ เจฒเจพเจเจผเฉเจเจฒ เจนเฉเฅค เจเฉเจเจฐ เจคเฉเจธเฉเจ Heroku เจเจพเจ Docker เจตเจฟเฉฑเจ Cube.js เจฌเฉเจเจเจเจก เจฆเฉ เจฎเฉเจเจผเจฌเจพเจจเฉ เจเจฐเจจ เจฆเฉ เจฏเฉเจเจจเจพ เจฌเจฃเจพเจเจเจฆเฉ เจนเฉ เจคเจพเจ เจคเฉเจธเฉเจ เจชเฉเฉเฉเจนเฉ เจฒเจ เจเจเจธเจชเฉเจฐเฉเจธ เจเฉเจเจชเจฒเฉเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐ เจธเจเจฆเฉ เจนเฉเฅค เจฆเจธเจคเจพเจตเฉเจเจผ เจฆเฉเจเจฟเจเจ เจฆเจพ เจตเจฐเจฃเจจ เจเจฐเจฆเจพ เจนเฉ
$ npm install -g cubejs-cli
$ cubejs create nginx-log-analytics -t serverless -d athena
เจตเจพเจคเจพเจตเจฐเจฃ เจตเฉเจฐเฉเจเจฌเจฒเจพเจ เจฆเฉ เจตเจฐเจคเฉเจ cube.js เจตเจฟเฉฑเจ เจกเฉเจเจพเจฌเฉเจธ เจชเจนเฉเฉฐเจ เจจเฉเฉฐ เจเฉเจเจซเจฟเจเจฐ เจเจฐเจจ เจฒเจ เจเฉเจคเฉ เจเจพเจเจฆเฉ เจนเฉเฅค เจเจจเจฐเฉเจเจฐ เจเฉฑเจ .env เจซเจพเจเจฒ เจฌเจฃเจพเจเจเจพ เจเจฟเจธ เจตเจฟเฉฑเจ เจคเฉเจธเฉเจ เจเจชเจฃเฉเจเจ เจเฉเฉฐเจเฉเจเจ เจจเจฟเจฐเจงเจพเจฐเจค เจเจฐ เจธเจเจฆเฉ เจนเฉ
เจนเฉเจฃ เจธเจพเจจเฉเฉฐ เจฒเฉเฉ เจนเฉ
เจกเจพเจเจฐเฉเจเจเจฐเฉ เจตเจฟเฉฑเจ schema
, เจเฉฑเจ เจซเจพเจเจฒ เจฌเจฃเจพเจ Logs.js
. เจเฉฑเจฅเฉ nginx เจฒเจ เจเฉฑเจ เจเจฆเจพเจนเจฐเจจ เจกเฉเจเจพ เจฎเจพเจกเจฒ เจนเฉ:
เจฎเจพเจกเจฒ เจเฉเจก
const partitionFilter = (from, to) => `
date(from_iso8601_timestamp(${from})) <= date_parse(partition_0 || partition_1 || partition_2, '%Y%m%d') AND
date(from_iso8601_timestamp(${to})) >= date_parse(partition_0 || partition_1 || partition_2, '%Y%m%d')
`
cube(`Logs`, {
sql: `
select * from part_demo_kinesis_bucket
WHERE ${FILTER_PARAMS.Logs.createdAt.filter(partitionFilter)}
`,
measures: {
count: {
type: `count`,
},
errorCount: {
type: `count`,
filters: [
{ sql: `${CUBE.isError} = 'Yes'` }
]
},
errorRate: {
type: `number`,
sql: `100.0 * ${errorCount} / ${count}`,
format: `percent`
}
},
dimensions: {
status: {
sql: `status`,
type: `number`
},
isError: {
type: `string`,
case: {
when: [{
sql: `${CUBE}.status >= 400`, label: `Yes`
}],
else: { label: `No` }
}
},
createdAt: {
sql: `from_unixtime(created_at)`,
type: `time`
}
}
});
เจเฉฑเจฅเฉ เจ
เจธเฉเจ เจตเฉเจฐเฉเจเจฌเจฒ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐ เจฐเจนเฉ เจนเจพเจ
เจ เจธเฉเจ เจฎเฉเจเฉเจฐเจฟเจเจธ เจ เจคเฉ เจชเฉเจฐเจพเจฎเฉเจเจฐ เจตเฉ เจธเฉเจ เจเจฐเจฆเฉ เจนเจพเจ เจเฉ เจ เจธเฉเจ เจกเฉเจธเจผเจฌเฉเจฐเจก 'เจคเฉ เจชเฉเจฐเจฆเจฐเจธเจผเจฟเจค เจเจฐเจจเจพ เจเจพเจนเฉเฉฐเจฆเฉ เจนเจพเจ เจ เจคเฉ เจชเฉเจฐเฉ-เจเจเจฐเฉเจเฉเจธเจผเจจ เจจเฉเฉฐ เจจเจฟเจธเจผเจเจฟเจค เจเจฐเจฆเฉ เจนเจพเจเฅค Cube.js เจชเฉเจฐเจต-เจเจเจฐเฉเจเฉเจ เจเฉเจคเฉ เจกเฉเจเจพ เจฆเฉ เจจเจพเจฒ เจตเจพเจงเฉ เจเฉเจฌเจฒ เจฌเจฃเจพเจเจเจพ เจ เจคเฉ เจกเฉเจเจพ เจฆเฉ เจเจเจฃ เจคเฉ เจเจชเจฃเฉ เจเจช เจ เจชเจกเฉเจ เจเจฐเฉเจเจพเฅค เจเจน เจจเจพ เจธเจฟเจฐเจซเจผ เจชเฉเฉฑเจเจเจฟเฉฑเจเจพเจ เจจเฉเฉฐ เจคเฉเจเจผ เจเจฐเจฆเจพ เจนเฉ, เจธเจเฉเจ เจเจฅเฉเจจเจพ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจจ เจฆเฉ เจฒเจพเจเจค เจจเฉเฉฐ เจตเฉ เจเจเจพเจเจเจฆเจพ เจนเฉ.
เจเจ เจเจธ เจเจพเจฃเจเจพเจฐเฉ เจจเฉเฉฐ เจกเฉเจเจพ เจธเจเฉเจฎเจพ เจซเจพเจเจฒ เจตเจฟเฉฑเจ เจเฉเฉเฉเจ:
preAggregations: {
main: {
type: `rollup`,
measureReferences: [count, errorCount],
dimensionReferences: [isError, status],
timeDimensionReference: createdAt,
granularity: `day`,
partitionGranularity: `month`,
refreshKey: {
sql: FILTER_PARAMS.Logs.createdAt.filter((from, to) =>
`select
CASE WHEN from_iso8601_timestamp(${to}) + interval '3' day > now()
THEN date_trunc('hour', now()) END`
)
}
}
}
เจ
เจธเฉเจ เจเจธ เจฎเจพเจกเจฒ เจตเจฟเฉฑเจ เจจเจฟเจธเจผเจเจฟเจค เจเจฐเจฆเฉ เจนเจพเจ เจเจฟ เจตเจฐเจคเฉ เจเจ เจธเจพเจฐเฉ เจฎเฉเจเฉเจฐเจฟเจเจธ เจฒเจ เจกเฉเจเจพ เจจเฉเฉฐ เจชเฉเจฐเฉ-เจเจเจฐเฉเจเฉเจ เจเจฐเจจเจพ เจเจผเจฐเฉเจฐเฉ เจนเฉ, เจ
เจคเฉ เจฎเจนเฉเจจเฉ เจฆเฉเจเจฐเจพ เจตเจฟเจญเจพเจเจจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเฉเฅค
เจนเฉเจฃ เจ เจธเฉเจ เจกเฉเจธเจผเจฌเฉเจฐเจก เจจเฉเฉฐ เจเจเฉฑเจ เจพ เจเจฐ เจธเจเจฆเฉ เจนเจพเจ!
Cube.js เจฌเฉเจเจเจเจก เจชเฉเจฐเจฆเจพเจจ เจเจฐเจฆเจพ เจนเฉ
Cube.js เจธเจฐเจตเจฐ เจฌเฉเจจเจคเฉ เจจเฉเฉฐ เจธเจตเฉเจเจพเจฐ เจเจฐเจฆเจพ เจนเฉ
{
"measures": ["Logs.errorCount"],
"timeDimensions": [
{
"dimension": "Logs.createdAt",
"dateRange": ["2019-01-01", "2019-01-07"],
"granularity": "day"
}
]
}
เจเจฒเฉ NPM เจฆเฉเจเจฐเจพ Cube.js เจเจฒเจพเจเฉฐเจ เจ เจคเฉ เจฐเฉเจเจเจ เจเฉฐเจชเฉเจจเฉเจเจ เจฒเจพเจเจฌเฉเจฐเฉเจฐเฉ เจจเฉเฉฐ เจธเจฅเจพเจชเจฟเจค เจเจฐเฉเจ:
$ npm i --save @cubejs-client/core @cubejs-client/react
เจ
เจธเฉเจ เจนเจฟเฉฑเจธเฉ เจเจฏเจพเจค เจเจฐเจฆเฉ เจนเจพเจ cubejs
ะธ QueryRenderer
เจกเฉเจเจพ เจจเฉเฉฐ เจกเจพเจเจจเจฒเฉเจก เจเจฐเจจ เจ
เจคเฉ เจกเฉเจธเจผเจฌเฉเจฐเจก เจจเฉเฉฐ เจเจเฉฑเจ เจพ เจเจฐเจจ เจฒเจ:
เจกเฉเจธเจผเจฌเฉเจฐเจก เจเฉเจก
import React from 'react';
import { LineChart, Line, XAxis, YAxis } from 'recharts';
import cubejs from '@cubejs-client/core';
import { QueryRenderer } from '@cubejs-client/react';
const cubejsApi = cubejs(
'YOUR-CUBEJS-API-TOKEN',
{ apiUrl: 'http://localhost:4000/cubejs-api/v1' },
);
export default () => {
return (
<QueryRenderer
query={{
measures: ['Logs.errorCount'],
timeDimensions: [{
dimension: 'Logs.createdAt',
dateRange: ['2019-01-01', '2019-01-07'],
granularity: 'day'
}]
}}
cubejsApi={cubejsApi}
render={({ resultSet }) => {
if (!resultSet) {
return 'Loading...';
}
return (
<LineChart data={resultSet.rawData()}>
<XAxis dataKey="Logs.createdAt"/>
<YAxis/>
<Line type="monotone" dataKey="Logs.errorCount" stroke="#8884d8"/>
</LineChart>
);
}}
/>
)
}
เจกเฉเจธเจผเจฌเฉเจฐเจก เจธเจฐเฉเจค 'เจคเฉ เจเจชเจฒเจฌเจง เจนเจจ
เจธเจฐเฉเจค: www.habr.com