๐ ๐ file_fdw๊ฐ ์๋ ๐ ๋ก๊ทธ ํ์ผ์์ * ์ ํ
8053 ๋จ์ด yugabytedbfdwlogfiletroubleshooting
yb_debug_log_docdb_requests
๋ฅผ ์ฌ์ฉํ์ฌ DocDB์ ๋ํ ํธ์ถ์ ์ถ์ ํ์ต๋๋ค. ๋ก๊ทธ๋ PostgreSQL ๋ก๊ทธ ํ์ผ๋ก ์ด๋ํ์ง๋ง PostgreSQL ๊ธฐ๋ฅ์ ํตํด์๋ ์ด๋ํ์ง ์์ต๋๋ค. ์ด๋ client_min_messages
๋ฅผ ์ค์ ํ ๋ ํด๋ผ์ด์ธํธ๋ก ๊ฐ์ ธ์ฌ ์ ์์์ ์๋ฏธํฉ๋๋ค. ์ด๋์ ์ ์ํ๋ ์๋ฒ์์ ์ ์ํด์ pg_current_logfile()
๋ผ๋ ํ์ผ๋ช
์ ๋ฐ๊ณ OS๋ก ๊ฐ๋๋ค. ๊ทธ๋ฌ๋ PostgreSQL ์ธ์
์์ OS์ ์ก์ธ์คํ ์ ์์ผ๋ฉฐ ๋ค์์ file_fdw
์ ์์
๋๋ค.๋๋ FDW ์ธ๋ถ ํ ์ด๋ธ์ ํตํด ํ์ผ์ ์ก์ธ์คํ๊ธฐ ์ํด
file_fdw
์๋ฒ์ ํจ๊ป YugabyteDB์ ์ฐ๊ฒฐ๋์ด ์์ต๋๋ค. ํ์์คํฌํ(awk
)๋ฅผ ํด๋
ํ๊ณ ๋ผ์ธ ๋ฒํธ(ts
)๋ฅผ ์ถ๊ฐํ์ฌ ์ฃผ๋ฌธํ๋ nr
์คํฌ๋ฆฝํธ๋ฅผ ์ดํด๋ด
๋๋ค. ๋ํ ์ ๋ณด๋ฅผ csv
ํ์์ผ๋ก ๋ณํํฉ๋๋ค. ์ฟผ๋ฆฌํ ๋ ๋ง์ง๋ง ํ์์คํฌํ๊ฐ string_add
์ธ ํ๋์ ํ์ ์ป๊ธฐ ์ํด ๋ชจ๋ ์ค์ ํ๋์ ๊ฐ( with as last_ts
)์ผ๋ก ๋ฐํํฉ๋๋ค. ๋ค์ ํธ์ถ์์ ์ ์คgset
๋ง ํ์๋๋๋ก ์ถ์ ํ๊ธฐ ์ํด >:'last_ts'
๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์ด ์์
์ ์ํํฉ๋๋ค.์ด๊ฒ์ด ๋ด๊ฐ ๋ชจ๋ ๊ฒ์ ์์ฑํ๊ณ ์ฟผ๋ฆฌ๋ฅผ ์ค๋นํ๊ธฐ ์ํด ์คํํ๋ ๊ฒ์ ๋๋ค.
# create privileges, extension, and FDW server
do $do$ begin execute $sql$ grant yb_extension,yb_fdw to $sql$ || user; end; $do$;
create extension if not exists file_fdw;
create server if not exists file_fdw foreign data wrapper file_fdw;
# create FDW table on current logfile
drop foreign table current_logfile ;
create foreign table current_logfile (ts timestamptz, nr int, log text) server file_fdw options ( program $bash$ awk '
/^[0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}[.][0-9]*/ { t=$1" "$2}
/^.[0-9]{4} [0-9]{2}:[0-9]{2}:[0-9]{2}[.][0-9]*/ { t=d" "$2}
{gsub(/"/,q q);print q t q "," q NR q "," q $0 q}
' q='"' d=$(date +%Y-%m-%d) '/home/opc/10.0.0.61/var/data/yb-data/tserver/logs/postgresql-2022-07-20_000000.log'
$bash$, format 'csv');
#
select now() as last_ts
\gset
deallocate logfile;
prepare logfile(timestamp) as
select
max(ts) as last_ts,e'\n'||string_agg(log,e'\n' order by ts,nr) log
from current_logfile where log like 'I%' and ts>$1
;
\pset format unaligned
log like 'I%'
๋ฅผ ์ฌ์ฉํ์ฌ YugabyteDB ์ ๋ณด ๋ฉ์์ง๋ง ๊ฐ์ ธ์ค๋๋ก ํํฐ๋งํฉ๋๋ค. ์ด๊ฒ์ ์ ๊ฑฐํ์ฌ PostgreSQL ๋ฉ์์ง๋ฅผ ํฌํจํ ๋ชจ๋ ์ค์ ํ์ํ ์ ์์ต๋๋ค.์ด์ ๋ค์์ ์ฌ์ฉํ์ฌ ๋ง์ง๋ง ํธ์ถ ์ดํ ์ ์ค์ ํ์ํ ์ ์์ต๋๋ค.
execute logfile(:'last_ts');\gset
์์
-- set start timestamp and enable log docdb requests
select now() as last_ts;\gset
set yb_debug_log_docdb_requests=true;
-- run query
select count(*) from demo;
-- show log since start timestamp and reset to last time
\pset format unaligned
execute logfile(:'last_ts');
\gset
\pset format aligned
์ด๊ฒ์ DocDB์ ๋ํ ์ฝ๊ธฐ ์์ฒญ์ ๋ณด์ฌ์ค๋๋ค.
YSQL ์ฟผ๋ฆฌ ๋ ์ด์ด์์ DocDB ๋ถ์ฐ ์คํ ๋ฆฌ์ง ๋ฐ ํธ๋์ญ์ ์ ๋ํ ํธ์ถ์ ๋ ์ ์ดํดํ๊ธฐ ์ํด ์คํ์ค์์ ์ด๊ฒ์ ์ฌ์ฉํฉ๋๋ค.
Reference
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐ ๐ file_fdw๊ฐ ์๋ ๐ ๋ก๊ทธ ํ์ผ์์ * ์ ํ), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://dev.to/franckpachot/select-from-logfile-with-filefdw-13ebํ ์คํธ๋ฅผ ์์ ๋กญ๊ฒ ๊ณต์ ํ๊ฑฐ๋ ๋ณต์ฌํ ์ ์์ต๋๋ค.ํ์ง๋ง ์ด ๋ฌธ์์ URL์ ์ฐธ์กฐ URL๋ก ๋จ๊ฒจ ๋์ญ์์ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค