เชธเชพเช‡เชŸเชจเชพ เช†เช‚เช•เชกเชพ เช…เชจเซ‡ เชคเชฎเชพเชฐเซเช‚ เชชเซ‹เชคเชพเชจเซเช‚ เชจเชพเชจเซเช‚ เชธเซเชŸเซ‹เชฐเซ‡เชœ

เชตเซ‡เชฌเชฒเชพเชˆเชเชฐ เช…เชจเซ‡ เช—เซ‚เช—เชฒ เชเชจเชฒเชฟเชŸเชฟเช•เซเชธเซ‡ เชฎเชจเซ‡ เช˜เชฃเชพ เชตเชฐเซเชทเซ‹เชฅเซ€ เชตเซ‡เชฌเชธเชพเช‡เชŸเซเชธ เชชเชฐ เชถเซเช‚ เชฅเชˆ เชฐเชนเซเชฏเซเช‚ เช›เซ‡ เชคเซ‡เชจเซ€ เชธเชฎเชœ เชฎเซ‡เชณเชตเชตเชพเชฎเชพเช‚ เชฎเชฆเชฆ เช•เชฐเซ€ เช›เซ‡. เชนเชตเซ‡ เชนเซเช‚ เชธเชฎเชœเซเช‚ เช›เซเช‚ เช•เซ‡ เชคเซ‡เช“ เชฌเชนเซ เช“เช›เซ€ เช‰เชชเชฏเซ‹เช—เซ€ เชฎเชพเชนเชฟเชคเซ€ เชชเซเชฐเชฆเชพเชจ เช•เชฐเซ‡ เช›เซ‡. เชคเชฎเชพเชฐเซ€ access.log เชซเชพเช‡เชฒเชจเซ€ เชเช•เซเชธเซ‡เชธ เชนเซ‹เชตเชพเชฅเซ€, เช†เช‚เช•เชกเชพเช“เชจเซ‡ เชธเชฎเชœเชตเชพ เช…เชจเซ‡ เชคเชฆเซเชฆเชจ เชฎเซ‚เชณเชญเซ‚เชค เชธเชพเชงเชจเซ‹, เชœเซ‡เชฎ เช•เซ‡ sqlite, html, sql เชญเชพเชทเชพ เช…เชจเซ‡ เช•เซ‹เชˆเชชเชฃ เชธเซเช•เซเชฐเชฟเชชเซเชŸเซ€เช‚เช— เชชเซเชฐเซ‹เช—เซเชฐเชพเชฎเชฟเช‚เช— เชญเชพเชทเชพเชจเซ‡ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เชตเชพเชจเซเช‚ เช–เซ‚เชฌ เชœ เชธเชฐเชณ เช›เซ‡.

เชตเซ‡เชฌเชฒเชพเชˆเชเชฐ เชฎเชพเชŸเซ‡เชจเซ‹ เชกเซ‡เชŸเชพ เชธเซเชคเซเชฐเซ‹เชค เชธเชฐเซเชตเชฐเชจเซ€ access.log เชซเชพเชˆเชฒ เช›เซ‡. เชคเซ‡เชจเชพ เชฌเชพเชฐ เช…เชจเซ‡ เชจเช‚เชฌเชฐเซ‹ เช†เชจเชพ เชœเซ‡เชตเชพ เชฆเซ‡เช–เชพเชฏ เช›เซ‡, เชœเซ‡เชฎเชพเช‚เชฅเซ€ เชฎเชพเชคเซเชฐ เชŸเซเชฐเชพเชซเชฟเช•เชจเซเช‚ เช•เซเชฒ เชตเซ‹เชฒเซเชฏเซเชฎ เชธเซเชชเชทเซเชŸ เช›เซ‡:

เชธเชพเช‡เชŸเชจเชพ เช†เช‚เช•เชกเชพ เช…เชจเซ‡ เชคเชฎเชพเชฐเซเช‚ เชชเซ‹เชคเชพเชจเซเช‚ เชจเชพเชจเซเช‚ เชธเซเชŸเซ‹เชฐเซ‡เชœ
เชธเชพเช‡เชŸเชจเชพ เช†เช‚เช•เชกเชพ เช…เชจเซ‡ เชคเชฎเชพเชฐเซเช‚ เชชเซ‹เชคเชพเชจเซเช‚ เชจเชพเชจเซเช‚ เชธเซเชŸเซ‹เชฐเซ‡เชœ
เช—เซ‚เช—เชฒ เชเชจเชฒเชฟเชŸเชฟเช•เซเชธ เชœเซ‡เชตเชพ เชŸเซ‚เชฒเซเชธ เชฒเซ‹เชก เช•เชฐเซ‡เชฒเชพ เชชเซ‡เชœเชฎเชพเช‚เชฅเซ€ เชœ เชกเซ‡เชŸเชพ เชเช•เชคเซเชฐเชฟเชค เช•เชฐเซ‡ เช›เซ‡. เชคเซ‡เช“ เช…เชฎเชจเซ‡ เช•เซ‡เชŸเชฒเชพเช• เช†เช•เซƒเชคเชฟเช“ เช…เชจเซ‡ เชฐเซ‡เช–เชพเช“ เชฌเชคเชพเชตเซ‡ เช›เซ‡, เชœเซ‡เชจเชพ เช†เชงเชพเชฐเซ‡ เชธเชพเชšเชพ เชคเชพเชฐเชฃเซ‹ เช•เชพเชขเชตเชพเชจเซเช‚ เช˜เชฃเซ€เชตเชพเชฐ เชฎเซเชถเซเช•เซ‡เชฒ เชนเซ‹เชฏ เช›เซ‡. เช•เชฆเชพเชš เชตเชงเซ เชชเซเชฐเชฏเชคเซเชจเซ‹ เช•เชฐเชตเชพ เชœเซ‹เชˆเช? เช–เชฌเชฐ เชจเชฅเซ€.

เชคเซ‡เชฅเซ€, เชนเซเช‚ เชตเซ‡เชฌเชธเชพเช‡เชŸ เชฎเซเชฒเชพเช•เชพเชคเซ€เช“เชจเชพ เช†เช‚เช•เชกเชพเชฎเชพเช‚ เชถเซเช‚ เชœเซ‹เชตเชพ เชฎเชพเช‚เช—เซ เช›เซเช‚?

เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เช…เชจเซ‡ เชฌเซ‹เชŸ เชŸเซเชฐเชพเชซเชฟเช•

เช˜เชฃเซ€ เชตเช–เชค เชธเชพเชˆเชŸ เชŸเซเชฐเชพเชซเชฟเช• เชฎเชฐเซเชฏเชพเชฆเชฟเชค เชนเซ‹เชฏ เช›เซ‡ เช…เชจเซ‡ เช•เซ‡เชŸเชฒเชพ เช‰เชชเชฏเซ‹เช—เซ€ เชŸเซเชฐเชพเชซเชฟเช•เชจเซ‹ เช‰เชชเชฏเซ‹เช— เชฅเชˆ เชฐเชนเซเชฏเซ‹ เช›เซ‡ เชคเซ‡ เชœเซ‹เชตเซเช‚ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เช†เชจเซ€ เชœเซ‡เชฎ:

เชธเชพเช‡เชŸเชจเชพ เช†เช‚เช•เชกเชพ เช…เชจเซ‡ เชคเชฎเชพเชฐเซเช‚ เชชเซ‹เชคเชพเชจเซเช‚ เชจเชพเชจเซเช‚ เชธเซเชŸเซ‹เชฐเซ‡เชœ

SQL เชฐเชฟเชชเซ‹เชฐเซเชŸ เช•เซเชตเซ‡เชฐเซ€

SELECT
1 as 'StackedArea: Traffic generated by Users and Bots',
strftime('%d.%m', datetime(FCT.EVENT_DT, 'unixepoch')) AS 'Day',
SUM(CASE WHEN USG.AGENT_BOT!='n.a.' THEN FCT.BYTES ELSE 0 END)/1000 AS 'Bots, KB',
SUM(CASE WHEN USG.AGENT_BOT='n.a.' THEN FCT.BYTES ELSE 0 END)/1000 AS 'Users, KB'
FROM
  FCT_ACCESS_USER_AGENT_DD FCT,
  DIM_USER_AGENT USG
WHERE FCT.DIM_USER_AGENT_ID=USG.DIM_USER_AGENT_ID
  AND datetime(FCT.EVENT_DT, 'unixepoch') >= date('now', '-14 day')
GROUP BY strftime('%d.%m', datetime(FCT.EVENT_DT, 'unixepoch'))
ORDER BY FCT.EVENT_DT

เช†เชฒเซ‡เช– เชฌเซ‰เชŸเซ‹เชจเซ€ เชธเชคเชค เชชเซเชฐเชตเซƒเชคเซเชคเชฟ เชฌเชคเชพเชตเซ‡ เช›เซ‡. เชธเซŒเชฅเซ€ เชธเช•เซเชฐเชฟเชฏ เชชเซเชฐเชคเชฟเชจเชฟเชงเชฟเช“เชจเซ‹ เชตเชฟเช—เชคเชตเชพเชฐ เช…เชญเซเชฏเชพเชธ เช•เชฐเชตเซ‹ เชฐเชธเชชเซเชฐเชฆ เชฐเชนเซ‡เชถเซ‡.

เชนเซ‡เชฐเชพเชจ เช•เชฐเชจเชพเชฐ เชฌเซ‰เชŸเซ‹

เช…เชฎเซ‡ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชเชœเชจเซเชŸเชจเซ€ เชฎเชพเชนเชฟเชคเซ€เชจเชพ เช†เชงเชพเชฐเซ‡ เชฌเซ‰เชŸเซ‹เชจเซเช‚ เชตเชฐเซเช—เซ€เช•เชฐเชฃ เช•เชฐเซ€เช เช›เซ€เช. เชฆเซˆเชจเชฟเช• เชŸเซเชฐเชพเชซเชฟเช• เชชเชฐเชจเชพ เชตเชงเชพเชฐเชพเชจเชพ เช†เช‚เช•เชกเชพ, เชธเชซเชณ เช…เชจเซ‡ เช…เชธเชซเชณ เชตเชฟเชจเช‚เชคเซ€เช“เชจเซ€ เชธเช‚เช–เซเชฏเชพ เชฌเซ‹เชŸ เชชเซเชฐเชตเซƒเชคเซเชคเชฟเชจเซ‹ เชธเชพเชฐเซ‹ เช–เซเชฏเชพเชฒ เช†เชชเซ‡ เช›เซ‡.

เชธเชพเช‡เชŸเชจเชพ เช†เช‚เช•เชกเชพ เช…เชจเซ‡ เชคเชฎเชพเชฐเซเช‚ เชชเซ‹เชคเชพเชจเซเช‚ เชจเชพเชจเซเช‚ เชธเซเชŸเซ‹เชฐเซ‡เชœ

SQL เชฐเชฟเชชเซ‹เชฐเซเชŸ เช•เซเชตเซ‡เชฐเซ€

SELECT 
1 AS 'Table: Annoying Bots',
MAX(USG.AGENT_BOT) AS 'Bot',
ROUND(SUM(FCT.BYTES)/1000 / 14.0, 1) AS 'KB per Day',
ROUND(SUM(FCT.IP_CNT) / 14.0, 1) AS 'IPs per Day',
ROUND(SUM(CASE WHEN STS.STATUS_GROUP IN ('Client Error', 'Server Error') THEN FCT.REQUEST_CNT / 14.0 ELSE 0 END), 1) AS 'Error Requests per Day',
ROUND(SUM(CASE WHEN STS.STATUS_GROUP IN ('Successful', 'Redirection') THEN FCT.REQUEST_CNT / 14.0 ELSE 0 END), 1) AS 'Success Requests per Day',
USG.USER_AGENT_NK AS 'Agent'
FROM FCT_ACCESS_USER_AGENT_DD FCT,
     DIM_USER_AGENT USG,
     DIM_HTTP_STATUS STS
WHERE FCT.DIM_USER_AGENT_ID = USG.DIM_USER_AGENT_ID
  AND FCT.DIM_HTTP_STATUS_ID = STS.DIM_HTTP_STATUS_ID
  AND USG.AGENT_BOT != 'n.a.'
  AND datetime(FCT.EVENT_DT, 'unixepoch') >= date('now', '-14 day')
GROUP BY USG.USER_AGENT_NK
ORDER BY 3 DESC
LIMIT 10

เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชตเชฟเชถเซเชฒเซ‡เชทเชฃเชจเซเช‚ เชชเชฐเชฟเชฃเชพเชฎ เช เชธเชพเช‡เชŸเชจเซ€ เชเช•เซเชธเซ‡เชธเชจเซ‡ robots.txt เชซเชพเช‡เชฒเชฎเชพเช‚ เช‰เชฎเซ‡เชฐเซ€เชจเซ‡ เชชเซเชฐเชคเชฟเชฌเช‚เชงเชฟเชค เช•เชฐเชตเชพเชจเซ‹ เชจเชฟเชฐเซเชฃเชฏ เชนเชคเซ‹.

User-agent: AhrefsBot
Disallow: /
User-agent: dotbot
Disallow: /
User-agent: bingbot
Crawl-delay: 5

เชชเซเชฐเชฅเชฎ เชฌเซ‡ เชฌเซ‹เชŸเซเชธ เชŸเซ‡เชฌเชฒเชฎเชพเช‚เชฅเซ€ เช…เชฆเซƒเชถเซเชฏ เชฅเชˆ เช—เชฏเชพ, เช…เชจเซ‡ MS เชฐเซ‹เชฌเซ‹เชŸเซเชธ เชชเซเชฐเชฅเชฎ เชฒเซ€เชŸเซ€เช“เชฅเซ€ เชจเซ€เชšเซ‡ เช–เชธเซ€ เช—เชฏเชพ.

เชฎเชนเชพเชจ เชชเซเชฐเชตเซƒเชคเซเชคเชฟเชจเซ‹ เชฆเชฟเชตเชธ เช…เชจเซ‡ เชธเชฎเชฏ

เชŸเซเชฐเชพเชซเชฟเช•เชฎเชพเช‚ เช‰เช›เชพเชณเซ‹ เชœเซ‹เชตเชพ เชฎเชณเซ€ เชฐเชนเซเชฏเซ‹ เช›เซ‡. เชคเซ‡เชฎเชจเซ‹ เชตเชฟเช—เชคเชตเชพเชฐ เช…เชญเซเชฏเชพเชธ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเซ‡เชฎเชจเซ€ เช˜เชŸเชจเชพเชจเชพ เชธเชฎเชฏเชจเซ‡ เชชเซเชฐเช•เชพเชถเชฟเชค เช•เชฐเชตเซ‹ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡, เช…เชจเซ‡ เชธเชฎเชฏ เชฎเชพเชชเชจเชจเชพ เชคเชฎเชพเชฎ เช•เชฒเชพเช•เซ‹ เช…เชจเซ‡ เชฆเชฟเชตเชธเซ‹ เชฆเชฐเซเชถเชพเชตเชตเชพ เชœเชฐเซ‚เชฐเซ€ เชจเชฅเซ€. เชœเซ‹ เชตเชฟเช—เชคเชตเชพเชฐ เชตเชฟเชถเซเชฒเซ‡เชทเชฃเชจเซ€ เชœเชฐเซ‚เชฐ เชนเซ‹เชฏ เชคเซ‹ เช† เชฒเซ‹เช— เชซเชพเช‡เชฒเชฎเชพเช‚ เชตเซเชฏเช•เซเชคเชฟเช—เชค เชตเชฟเชจเช‚เชคเซ€เช“ เชถเซ‹เชงเชตเชพเชจเซเช‚ เชธเชฐเชณ เชฌเชจเชพเชตเชถเซ‡.

เชธเชพเช‡เชŸเชจเชพ เช†เช‚เช•เชกเชพ เช…เชจเซ‡ เชคเชฎเชพเชฐเซเช‚ เชชเซ‹เชคเชพเชจเซเช‚ เชจเชพเชจเซเช‚ เชธเซเชŸเซ‹เชฐเซ‡เชœ

SQL เชฐเชฟเชชเซ‹เชฐเซเชŸ เช•เซเชตเซ‡เชฐเซ€

SELECT
1 AS 'Line: Day and Hour of Hits from Users and Bots',
strftime('%d.%m-%H', datetime(EVENT_DT, 'unixepoch')) AS 'Date Time',
HIB AS 'Bots, Hits',
HIU AS 'Users, Hits'
FROM (
	SELECT
	EVENT_DT,
	SUM(CASE WHEN AGENT_BOT!='n.a.' THEN LINE_CNT ELSE 0 END) AS HIB,
	SUM(CASE WHEN AGENT_BOT='n.a.' THEN LINE_CNT ELSE 0 END) AS HIU
	FROM FCT_ACCESS_REQUEST_REF_HH
	WHERE datetime(EVENT_DT, 'unixepoch') >= date('now', '-14 day')
	GROUP BY EVENT_DT
	ORDER BY SUM(LINE_CNT) DESC
	LIMIT 10
) ORDER BY EVENT_DT

เช…เชฎเซ‡ เชšเชพเชฐเซเชŸ เชชเชฐ เชชเซเชฐเชฅเชฎ เชฆเชฟเชตเชธเชจเชพ เชธเซŒเชฅเซ€ เชตเชงเซ เชธเช•เซเชฐเชฟเชฏ เช•เชฒเชพเช•เซ‹ 11, 14 เช…เชจเซ‡ 20 เช…เชตเชฒเซ‹เช•เชจ เช•เชฐเซ€เช เช›เซ€เช. เชชเชฐเช‚เชคเซ เชฌเซ€เชœเชพ เชฆเชฟเชตเชธเซ‡ 13:XNUMX เชตเชพเช—เซเชฏเซ‡ เชฌเซ‰เชŸเซ‹ เชธเช•เซเชฐเชฟเชฏ เชนเชคเชพ.

เชธเชชเซเชคเชพเชน เชฆเซเชตเชพเชฐเชพ เชธเชฐเซ‡เชฐเชพเชถ เชฆเซˆเชจเชฟเช• เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชชเซเชฐเชตเซƒเชคเซเชคเชฟ

เช…เชฎเซ‡ เชชเซเชฐเชตเซƒเชคเซเชคเชฟ เช…เชจเซ‡ เชŸเซเชฐเชพเชซเชฟเช• เชธเชพเชฅเซ‡ เชฅเซ‹เชกเซ€ เชตเชธเซเชคเซเช“ เช—เซ‹เช เชตเซ€. เช†เช—เชณเชจเซ‹ เชชเซเชฐเชถเซเชจ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพเช“เชจเซ€ เชชเซ‹เชคเชพเชจเซ€ เชชเซเชฐเชตเซƒเชคเซเชคเชฟเชจเซ‹ เชนเชคเซ‹. เช†เชตเชพ เช†เช‚เช•เชกเชพเช“ เชฎเชพเชŸเซ‡, เชฒเชพเช‚เชฌเชพ เชเช•เชคเซเชฐเซ€เช•เชฐเชฃ เชธเชฎเชฏเช—เชพเชณเชพ, เชœเซ‡เชฎ เช•เซ‡ เชเช• เช…เช เชตเชพเชกเชฟเชฏเชพ, เช‡เชšเซเช›เชจเซ€เชฏ เช›เซ‡.

เชธเชพเช‡เชŸเชจเชพ เช†เช‚เช•เชกเชพ เช…เชจเซ‡ เชคเชฎเชพเชฐเซเช‚ เชชเซ‹เชคเชพเชจเซเช‚ เชจเชพเชจเซเช‚ เชธเซเชŸเซ‹เชฐเซ‡เชœ

SQL เชฐเชฟเชชเซ‹เชฐเซเชŸ เช•เซเชตเซ‡เชฐเซ€

SELECT
1 as 'Line: Average Daily User Activity by Week',
strftime('%W week', datetime(FCT.EVENT_DT, 'unixepoch')) AS 'Week',
ROUND(1.0*SUM(FCT.PAGE_CNT)/SUM(FCT.IP_CNT),1) AS 'Pages per IP per Day',
ROUND(1.0*SUM(FCT.FILE_CNT)/SUM(FCT.IP_CNT),1) AS 'Files per IP per Day'
FROM
  FCT_ACCESS_USER_AGENT_DD FCT,
  DIM_USER_AGENT USG,
  DIM_HTTP_STATUS HST
WHERE FCT.DIM_USER_AGENT_ID=USG.DIM_USER_AGENT_ID
  AND FCT.DIM_HTTP_STATUS_ID = HST.DIM_HTTP_STATUS_ID
  AND USG.AGENT_BOT='n.a.' /* users only */
  AND HST.STATUS_GROUP IN ('Successful') /* good pages */
  AND datetime(FCT.EVENT_DT, 'unixepoch') > date('now', '-3 month')
GROUP BY strftime('%W week', datetime(FCT.EVENT_DT, 'unixepoch'))
ORDER BY FCT.EVENT_DT

เชธเชพเชชเซเชคเชพเชนเชฟเช• เช†เช‚เช•เชกเชพ เชฆเชฐเซเชถเชพเชตเซ‡ เช›เซ‡ เช•เซ‡ เชธเชฐเซ‡เชฐเชพเชถ เชเช• เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชฆเชฐเชฐเซ‹เชœ 1,6 เชชเซƒเชทเซเช เซ‹ เช–เซ‹เชฒเซ‡ เช›เซ‡. เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚ เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชฆเซ€เช  เชตเชฟเชจเช‚เชคเซ€ เช•เชฐเซ‡เชฒเซ€ เชซเชพเช‡เชฒเซ‹เชจเซ€ เชธเช‚เช–เซเชฏเชพ เชธเชพเช‡เชŸ เชชเชฐ เชจเชตเซ€ เชซเชพเช‡เชฒเซ‹เชจเชพ เช‰เชฎเซ‡เชฐเชพ เชชเชฐ เช†เชงเชพเชฐเชฟเชค เช›เซ‡.

เชฌเชงเซ€ เชตเชฟเชจเช‚เชคเซ€เช“ เช…เชจเซ‡ เชคเซ‡เชฎเชจเซ€ เชธเซเชฅเชฟเชคเชฟ

เชตเซ‡เชฌเชฒเชพเชˆเชเชฐ เชนเช‚เชฎเซ‡เชถเชพ เชšเซ‹เช•เซเช•เชธ เชชเซ‡เชœ เช•เซ‹เชกเซเชธ เชฆเชฐเซเชถเชพเชตเซ‡ เช›เซ‡ เช…เชจเซ‡ เชนเซเช‚ เชนเช‚เชฎเซ‡เชถเชพ เชฎเชพเชคเซเชฐ เชธเชซเชณ เชตเชฟเชจเช‚เชคเซ€เช“ เช…เชจเซ‡ เชญเซ‚เชฒเซ‹เชจเซ€ เชธเช‚เช–เซเชฏเชพ เชœเซ‹เชตเชพ เชฎเชพเช‚เช—เชคเซ‹ เชนเชคเซ‹.

เชธเชพเช‡เชŸเชจเชพ เช†เช‚เช•เชกเชพ เช…เชจเซ‡ เชคเชฎเชพเชฐเซเช‚ เชชเซ‹เชคเชพเชจเซเช‚ เชจเชพเชจเซเช‚ เชธเซเชŸเซ‹เชฐเซ‡เชœ

SQL เชฐเชฟเชชเซ‹เชฐเซเชŸ เช•เซเชตเซ‡เชฐเซ€

SELECT
1 as 'Line: All Requests by Status',
strftime('%d.%m', datetime(FCT.EVENT_DT, 'unixepoch')) AS 'Day',
SUM(CASE WHEN STS.STATUS_GROUP='Successful' THEN FCT.REQUEST_CNT ELSE 0 END) AS 'Success',
SUM(CASE WHEN STS.STATUS_GROUP='Redirection' THEN FCT.REQUEST_CNT ELSE 0 END) AS 'Redirect',
SUM(CASE WHEN STS.STATUS_GROUP='Client Error' THEN FCT.REQUEST_CNT ELSE 0 END) AS 'Customer Error',
SUM(CASE WHEN STS.STATUS_GROUP='Server Error' THEN FCT.REQUEST_CNT ELSE 0 END) AS 'Server Error'
FROM
  FCT_ACCESS_USER_AGENT_DD FCT,
  DIM_HTTP_STATUS STS
WHERE FCT.DIM_HTTP_STATUS_ID=STS.DIM_HTTP_STATUS_ID
  AND datetime(FCT.EVENT_DT, 'unixepoch') >= date('now', '-14 day')
GROUP BY strftime('%d.%m', datetime(FCT.EVENT_DT, 'unixepoch'))
ORDER BY FCT.EVENT_DT

เชฐเชฟเชชเซ‹เชฐเซเชŸ เชตเชฟเชจเช‚เชคเซ€เช“ เชฆเชฐเซเชถเชพเชตเซ‡ เช›เซ‡, เช•เซเชฒเชฟเช•เซเชธ (เชนเชฟเชŸ) เชจเชนเซ€เช‚, LINE_CNTเชฅเซ€ เชตเชฟเชชเชฐเซ€เชค, REQUEST_CNT เชฎเซ‡เชŸเซเชฐเชฟเช•เชจเซ€ เช—เชฃเชคเชฐเซ€ COUNT(DISTINCT STG.REQUEST_NK) เชคเชฐเซ€เช•เซ‡ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชงเซเชฏเซ‡เชฏ เช…เชธเชฐเช•เชพเชฐเช• เช‡เชตเซ‡เชจเซเชŸเซเชธ เชฌเชคเชพเชตเชตเชพเชจเซ‹ เช›เซ‡, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, MS เชฌเซ‹เชŸเซเชธ เชฆเชฟเชตเชธเชฎเชพเช‚ เชธเซ‡เช‚เช•เชกเซ‹ เชตเช–เชค robots.txt เชซเชพเช‡เชฒเชจเซเช‚ เชฎเชคเชฆเชพเชจ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เช† เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เช†เชตเชพ เชฎเชคเชฆเชพเชจเชจเซ€ เช—เชฃเชคเชฐเซ€ เชเช•เชตเชพเชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเชถเซ‡. เช† เชคเชฎเชจเซ‡ เช—เซเชฐเชพเชซเชฎเชพเช‚ เช•เซ‚เชฆเช•เชพเชจเซ‡ เชธเชฐเชณ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชชเชฐเชตเชพเชจเช—เซ€ เช†เชชเซ‡ เช›เซ‡.

เช—เซเชฐเชพเชซเชฎเชพเช‚เชฅเซ€ เชคเชฎเซ‡ เช˜เชฃเซ€ เชญเซ‚เชฒเซ‹ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹ - เช† เช…เชธเซเชคเชฟเชคเซเชตเชฎเชพเช‚ เชจเชฅเซ€ เชคเซ‡เชตเชพ เชชเซƒเชทเซเช เซ‹ เช›เซ‡. เชตเชฟเชถเซเชฒเซ‡เชทเชฃเชจเซเช‚ เชชเชฐเชฟเชฃเชพเชฎ เชฆเซ‚เชฐเชธเซเชฅ เชชเซƒเชทเซเช เซ‹เชฎเชพเช‚เชฅเซ€ เชฐเซ€เชกเชพเชฏเชฐเซ‡เช•เซเชŸเชจเซ‹ เช‰เชฎเซ‡เชฐเซ‹ เชนเชคเซ‹.

เช–เชฐเชพเชฌ เชตเชฟเชจเช‚เชคเซ€เช“

เชตเชฟเชจเช‚เชคเซ€เช“เชจเซ€ เชตเชฟเช—เชคเชตเชพเชฐ เชคเชชเชพเชธ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเซ‡ เชตเชฟเช—เชคเชตเชพเชฐ เช†เช‚เช•เชกเชพ เชชเซเชฐเชฆเชฐเซเชถเชฟเชค เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹.

เชธเชพเช‡เชŸเชจเชพ เช†เช‚เช•เชกเชพ เช…เชจเซ‡ เชคเชฎเชพเชฐเซเช‚ เชชเซ‹เชคเชพเชจเซเช‚ เชจเชพเชจเซเช‚ เชธเซเชŸเซ‹เชฐเซ‡เชœ

SQL เชฐเชฟเชชเซ‹เชฐเซเชŸ เช•เซเชตเซ‡เชฐเซ€

SELECT
  1 AS 'Table: Top Error Requests',
  REQ.REQUEST_NK AS 'Request',
  'Error' AS 'Request Status',
  ROUND(SUM(FCT.LINE_CNT) / 14.0, 1) AS 'Hits per Day',
  ROUND(SUM(FCT.IP_CNT) / 14.0, 1) AS 'IPs per Day',
  ROUND(SUM(FCT.BYTES)/1000 / 14.0, 1) AS 'KB per Day'
FROM
  FCT_ACCESS_REQUEST_REF_HH FCT,
  DIM_REQUEST_V_ACT REQ
WHERE FCT.DIM_REQUEST_ID = REQ.DIM_REQUEST_ID
  AND FCT.STATUS_GROUP IN ('Client Error', 'Server Error')
  AND datetime(FCT.EVENT_DT, 'unixepoch') >= date('now', '-14 day')
GROUP BY REQ.REQUEST_NK
ORDER BY 4 DESC
LIMIT 20

เช† เชธเซ‚เชšเชฟเชฎเชพเช‚ เชคเชฎเชพเชฎ เช•เซ‰เชฒเซเชธ เชชเชฃ เชนเชถเซ‡, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, /wp-login.php เชจเซ‡ เชตเชฟเชจเช‚เชคเซ€ เชธเชฐเซเชตเชฐ เชฆเซเชตเชพเชฐเชพ เชซเชฐเซ€เชฅเซ€ เชฒเช–เชตเชพเชจเซ€ เชตเชฟเชจเช‚เชคเซ€เช“ เชฎเชพเชŸเซ‡เชจเชพ เชจเชฟเชฏเชฎเซ‹เชจเซ‡ เชธเชฎเชพเชฏเซ‹เชœเชฟเชค เช•เชฐเซ€เชจเซ‡, เชคเชฎเซ‡ เช†เชตเซ€ เชตเชฟเชจเช‚เชคเซ€เช“ เชชเชฐ เชธเชฐเซเชตเชฐเชจเซ€ เชชเซเชฐเชคเชฟเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เชธเชฎเชพเชฏเซ‹เชœเชฟเชค เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ เช…เชจเซ‡ เชคเซ‡เชฎเชจเซ‡ เชชเซเชฐเชพเชฐเช‚เชญ เชชเซƒเชทเซเช  เชชเชฐ เชฎเซ‹เช•เชฒเซ€ เชถเช•เซ‹ เช›เซ‹.

เชคเซ‡เชฅเซ€, เชธเชฐเซเชตเชฐ เชฒเซ‹เช— เชซเชพเช‡เชฒ เชชเชฐ เช†เชงเชพเชฐเชฟเชค เชฅเซ‹เชกเชพ เชธเชฐเชณ เช…เชนเซ‡เชตเชพเชฒเซ‹ เชธเชพเช‡เชŸ เชชเชฐ เชถเซเช‚ เชฅเชˆ เชฐเชนเซเชฏเซเช‚ เช›เซ‡ เชคเซ‡เชจเซเช‚ เชเช•เชฆเชฎ เชธเช‚เชชเซ‚เชฐเซเชฃ เชšเชฟเชคเซเชฐ เช†เชชเซ‡ เช›เซ‡.

เชฎเชพเชนเชฟเชคเซ€ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฎเซ‡เชณเชตเชตเซ€?

เชเช• sqlite เชกเซ‡เชŸเชพเชฌเซ‡เช เชชเชฐเซเชฏเชพเชชเซเชค เช›เซ‡. เชšเชพเชฒเซ‹ เช•เซ‹เชทเซเชŸเช•เซ‹ เชฌเชจเชพเชตเซ€เช: ETL เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“เชจเซ‡ เชฒเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชธเชนเชพเชฏเช•.

เชธเชพเช‡เชŸเชจเชพ เช†เช‚เช•เชกเชพ เช…เชจเซ‡ เชคเชฎเชพเชฐเซเช‚ เชชเซ‹เชคเชพเชจเซเช‚ เชจเชพเชจเซเช‚ เชธเซเชŸเซ‹เชฐเซ‡เชœ

เชŸเซ‡เชฌเชฒ เชธเซเชŸเซ‡เชœ เชœเซเชฏเชพเช‚ เช†เชชเชฃเซ‡ PHP เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชฒเซ‹เช— เชซเชพเช‡เชฒเซ‹ เชฒเช–เซ€เชถเซเช‚. เชฌเซ‡ เชเช•เช‚เชฆเชฐ เช•เซ‹เชทเซเชŸเช•เซ‹. เชšเชพเชฒเซ‹ เชฏเซเชเชฐ เชเชœเชจเซเชŸเซเชธ เช…เชจเซ‡ เชฐเชฟเช•เซเชตเซ‡เชธเซเชŸ เชธเซเชŸเซ‡เชŸเชธ เชชเชฐเชจเชพ เช†เช‚เช•เชกเชพเช“ เชธเชพเชฅเซ‡ เชฆเซˆเชจเชฟเช• เช•เซ‹เชทเซเชŸเช• เชฌเชจเชพเชตเซ€เช. เชตเชฟเชจเช‚เชคเซ€เช“, เชธเซเชฅเชฟเชคเชฟ เชœเซ‚เชฅเซ‹ เช…เชจเซ‡ เชเชœเชจเซเชŸเซ‹ เชชเชฐเชจเชพ เช†เช‚เช•เชกเชพ เชธเชพเชฅเซ‡ เช•เชฒเชพเช•เชฆเซ€เช . เชธเช‚เชฌเช‚เชงเชฟเชค เชฎเชพเชชเชจเชพ เชšเชพเชฐ เช•เซ‹เชทเซเชŸเช•เซ‹.

เชชเชฐเชฟเชฃเชพเชฎ เชจเซ€เชšเซ‡เชจเซเช‚ เชฐเชฟเชฒเซ‡เชถเชจเชฒ เชฎเซ‹เชกเชฒ เช›เซ‡:

เชกเซ‡เชŸเชพ เชฎเซ‹เชกเซ‡เชฒเชธเชพเช‡เชŸเชจเชพ เช†เช‚เช•เชกเชพ เช…เชจเซ‡ เชคเชฎเชพเชฐเซเช‚ เชชเซ‹เชคเชพเชจเซเช‚ เชจเชพเชจเซเช‚ เชธเซเชŸเซ‹เชฐเซ‡เชœ

sqlite เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เช‘เชฌเซเชœเซ‡เช•เซเชŸ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชธเซเช•เซเชฐเชฟเชชเซเชŸ:

DDL เช‘เชฌเซเชœเซ‡เช•เซเชŸ เชฌเชจเชพเชตเชŸ

DROP TABLE IF EXISTS DIM_USER_AGENT;
CREATE TABLE DIM_USER_AGENT (
  DIM_USER_AGENT_ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
  USER_AGENT_NK     TEXT NOT NULL DEFAULT 'n.a.',
  AGENT_OS          TEXT NOT NULL DEFAULT 'n.a.',
  AGENT_ENGINE      TEXT NOT NULL DEFAULT 'n.a.',
  AGENT_DEVICE      TEXT NOT NULL DEFAULT 'n.a.',
  AGENT_BOT         TEXT NOT NULL DEFAULT 'n.a.',
  UPDATE_DT         INTEGER NOT NULL DEFAULT 0,
  UNIQUE (USER_AGENT_NK)
);
INSERT INTO DIM_USER_AGENT (DIM_USER_AGENT_ID) VALUES (-1);

เชธเซเชŸเซ‡เชœ

access.log เชซเชพเช‡เชฒเชจเชพ เช•เชฟเชธเซเชธเชพเชฎเชพเช‚, เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชฌเชงเซ€ เชตเชฟเชจเช‚เชคเซ€เช“ เชตเชพเช‚เชšเชตเซ€, เชชเชพเชฐเซเชธ เช•เชฐเชตเซ€ เช…เชจเซ‡ เชฒเช–เชตเซ€ เชœเชฐเซ‚เชฐเซ€ เช›เซ‡. เช† เช•เชพเช‚ เชคเซ‹ เชธเซ€เชงเซ€ เชธเซเช•เซเชฐเชฟเชชเซเชŸเซ€เช‚เช— เชญเชพเชทเชพเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช…เชฅเชตเชพ sqlite เชŸเซ‚เชฒเซเชธเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡.

เชฒเซ‹เช— เชซเชพเช‡เชฒ เชซเซ‹เชฐเซเชฎเซ‡เชŸ:

//67.221.59.195 - - [28/Dec/2012:01:47:47 +0100] "GET /files/default.css HTTP/1.1" 200 1512 "https://project.edu/" "Mozilla/4.0"
//host ident auth time method request_nk protocol status bytes ref browser
$log_pattern = '/^([^ ]+) ([^ ]+) ([^ ]+) ([[^]]+]) "(.*) (.*) (.*)" ([0-9-]+) ([0-9-]+) "(.*)" "(.*)"$/';

เช•เซ€ เชชเซเชฐเชšเชพเชฐ

เชœเซเชฏเชพเชฐเซ‡ เช•เชพเชšเซ‹ เชกเซ‡เชŸเชพ เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชนเซ‹เชฏ, เชคเซเชฏเชพเชฐเซ‡ เชคเชฎเชพเชฐเซ‡ เชฎเชพเชชเชจ เช•เซ‹เชทเซเชŸเช•เซ‹เชฎเชพเช‚ เชจ เชนเซ‹เชฏ เชคเซ‡เชตเซ€ เช•เซ€ เชฒเช–เชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เชชเช›เซ€ เชฎเชพเชชเชจเซ‹ เชธเช‚เชฆเชฐเซเชญ เชฌเชจเชพเชตเชตเชพเชจเซเช‚ เชถเช•เซเชฏ เชฌเชจเชถเซ‡. เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, DIM_REFERRER เช•เซ‹เชทเซเชŸเช•เชฎเชพเช‚, เช•เซ€ เช เชคเซเชฐเชฃ เช•เซเชทเซ‡เชคเซเชฐเซ‹เชจเซเช‚ เชธเช‚เชฏเซ‹เชœเชจ เช›เซ‡.

SQL เช•เซ€ เชชเซเชฐเชšเชพเชฐ เช•เซเชตเซ‡เชฐเซ€

/* Propagate the referrer from access log */
INSERT INTO DIM_REFERRER (HOST_NK, PATH_NK, QUERY_NK, UPDATE_DT)
SELECT
	CLS.HOST_NK,
	CLS.PATH_NK,
	CLS.QUERY_NK,
	STRFTIME('%s','now') AS UPDATE_DT
FROM (
	SELECT DISTINCT
	REFERRER_HOST AS HOST_NK,
	REFERRER_PATH AS PATH_NK,
	CASE WHEN INSTR(REFERRER_QUERY,'&sid')>0 THEN SUBSTR(REFERRER_QUERY, 1, INSTR(REFERRER_QUERY,'&sid')-1) /* ะพั‚ั€ะตะทะฐะตะผ sid - ัะฟะตั†ะธั„ะธะบะฐ ั†ะผั */
	ELSE REFERRER_QUERY END AS QUERY_NK
	FROM STG_ACCESS_LOG
) CLS
LEFT OUTER JOIN DIM_REFERRER TRG
ON (CLS.HOST_NK = TRG.HOST_NK AND CLS.PATH_NK = TRG.PATH_NK AND CLS.QUERY_NK = TRG.QUERY_NK)
WHERE TRG.DIM_REFERRER_ID IS NULL

เชตเชชเชฐเชพเชถเช•เชฐเซเชคเชพ เชเชœเชจเซเชŸ เช•เซ‹เชทเซเชŸเช•เชฎเชพเช‚ เชชเซเชฐเชšเชพเชฐเชฎเชพเช‚ เชฌเซ‹เชŸ เชคเชฐเซเช• เชถเชพเชฎเซ‡เชฒ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡ sql เชธเซเชจเชฟเชชเซ‡เชŸ:


CASE
WHEN INSTR(LOWER(CLS.BROWSER),'yandex.com')>0
	THEN 'yandex'
WHEN INSTR(LOWER(CLS.BROWSER),'googlebot')>0
	THEN 'google'
WHEN INSTR(LOWER(CLS.BROWSER),'bingbot')>0
	THEN 'microsoft'
WHEN INSTR(LOWER(CLS.BROWSER),'ahrefsbot')>0
	THEN 'ahrefs'
WHEN INSTR(LOWER(CLS.BROWSER),'mj12bot')>0
	THEN 'majestic-12'
WHEN INSTR(LOWER(CLS.BROWSER),'compatible')>0 OR INSTR(LOWER(CLS.BROWSER),'http')>0
	OR INSTR(LOWER(CLS.BROWSER),'libwww')>0 OR INSTR(LOWER(CLS.BROWSER),'spider')>0
	OR INSTR(LOWER(CLS.BROWSER),'java')>0 OR INSTR(LOWER(CLS.BROWSER),'python')>0
	OR INSTR(LOWER(CLS.BROWSER),'robot')>0 OR INSTR(LOWER(CLS.BROWSER),'curl')>0
	OR INSTR(LOWER(CLS.BROWSER),'wget')>0
	THEN 'other'
ELSE 'n.a.' END AS AGENT_BOT

เชเช•เช‚เชฆเชฐ เช•เซ‹เชทเซเชŸเช•เซ‹

เช›เซ‡เชฒเซเชฒเซ‡, เช…เชฎเซ‡ เชเช•เช‚เชฆเชฐ เช•เซ‹เชทเซเชŸเช•เซ‹ เชฒเซ‹เชก เช•เชฐเซ€เชถเซเช‚; เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชฆเซˆเชจเชฟเช• เช•เซ‹เชทเซเชŸเช• เชจเซ€เชšเซ‡ เชชเซเชฐเชฎเชพเชฃเซ‡ เชฒเซ‹เชก เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡:

เชเช•เช‚เชฆเชฐ เชฒเซ‹เชก เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ SQL เช•เซเชตเซ‡เชฐเซ€

/* Load fact from access log */
INSERT INTO FCT_ACCESS_USER_AGENT_DD (EVENT_DT, DIM_USER_AGENT_ID, DIM_HTTP_STATUS_ID, PAGE_CNT, FILE_CNT, REQUEST_CNT, LINE_CNT, IP_CNT, BYTES)
WITH STG AS (
SELECT
	STRFTIME( '%s', SUBSTR(TIME_NK,9,4) || '-' ||
	CASE SUBSTR(TIME_NK,5,3)
	WHEN 'Jan' THEN '01' WHEN 'Feb' THEN '02' WHEN 'Mar' THEN '03' WHEN 'Apr' THEN '04' WHEN 'May' THEN '05' WHEN 'Jun' THEN '06'
	WHEN 'Jul' THEN '07' WHEN 'Aug' THEN '08' WHEN 'Sep' THEN '09' WHEN 'Oct' THEN '10' WHEN 'Nov' THEN '11'
	ELSE '12' END || '-' || SUBSTR(TIME_NK,2,2) || ' 00:00:00' ) AS EVENT_DT,
	BROWSER AS USER_AGENT_NK,
	REQUEST_NK,
	IP_NR,
	STATUS,
	LINE_NK,
	BYTES
FROM STG_ACCESS_LOG
)
SELECT
	CAST(STG.EVENT_DT AS INTEGER) AS EVENT_DT,
	USG.DIM_USER_AGENT_ID,
	HST.DIM_HTTP_STATUS_ID,
	COUNT(DISTINCT (CASE WHEN INSTR(STG.REQUEST_NK,'.')=0 THEN STG.REQUEST_NK END) ) AS PAGE_CNT,
	COUNT(DISTINCT (CASE WHEN INSTR(STG.REQUEST_NK,'.')>0 THEN STG.REQUEST_NK END) ) AS FILE_CNT,
	COUNT(DISTINCT STG.REQUEST_NK) AS REQUEST_CNT,
	COUNT(DISTINCT STG.LINE_NK) AS LINE_CNT,
	COUNT(DISTINCT STG.IP_NR) AS IP_CNT,
	SUM(BYTES) AS BYTES
FROM STG,
	DIM_HTTP_STATUS HST,
	DIM_USER_AGENT USG
WHERE STG.STATUS = HST.STATUS_NK
  AND STG.USER_AGENT_NK = USG.USER_AGENT_NK
  AND CAST(STG.EVENT_DT AS INTEGER) > $param_epoch_from /* load epoch date */
  AND CAST(STG.EVENT_DT AS INTEGER) < strftime('%s', date('now', 'start of day'))
GROUP BY STG.EVENT_DT, HST.DIM_HTTP_STATUS_ID, USG.DIM_USER_AGENT_ID

sqlite เชกเซ‡เชŸเชพเชฌเซ‡เช เชคเชฎเชจเซ‡ เชœเชŸเชฟเชฒ เชชเซเชฐเชถเซเชจเซ‹ เชฒเช–เชตเชพ เชฎเชพเชŸเซ‡ เชชเชฐเชตเชพเชจเช—เซ€ เช†เชชเซ‡ เช›เซ‡. WITH เชฎเชพเช‚ เชกเซ‡เชŸเชพ เช…เชจเซ‡ เช•เซ€เชจเซ€ เชคเซˆเชฏเชพเชฐเซ€เชจเซ‹ เชธเชฎเชพเชตเซ‡เชถ เชฅเชพเชฏ เช›เซ‡. เชฎเซเช–เซเชฏ เช•เซเชตเซ‡เชฐเซ€ เชชเชฐเชฟเชฎเชพเชฃเซ‹เชจเชพ เชคเชฎเชพเชฎ เชธเช‚เชฆเชฐเซเชญเซ‹ เชเช•เชคเซเชฐเชฟเชค เช•เชฐเซ‡ เช›เซ‡.

เชถเชฐเชค เช‡เชคเชฟเชนเชพเชธเชจเซ‡ เชซเชฐเซ€เชฅเซ€ เชฒเซ‹เชก เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเชถเซ‡ เชจเชนเซ€เช‚: CAST(STG.EVENT_DT AS INTEGEER) > $param_epoch_from, เชœเซเชฏเชพเช‚ เชชเซ‡เชฐเชพเชฎเซ€เชŸเชฐ เชตเชฟเชจเช‚เชคเซ€เชจเซเช‚ เชชเชฐเชฟเชฃเชพเชฎ เช›เซ‡
FCT_ACCESS_USER_AGENT_DDเชฎเชพเช‚เชฅเซ€ 'LAST_EVENT_EPOCH เชคเชฐเซ€เช•เซ‡ COALESCE(MAX(EVENT_DT), '3600') เชชเชธเช‚เชฆ เช•เชฐเซ‹'

เชถเชฐเชค เชซเช•เซเชค เช†เช–เซ‹ เชฆเชฟเชตเชธ เชฒเซ‹เชก เชฅเชถเซ‡: CAST(STG.EVENT_DT เชชเซ‚เชฐเซเชฃเชพเช‚เช• เชคเชฐเซ€เช•เซ‡) < strftime('%s', เชคเชพเชฐเซ€เช–('เชนเชตเซ‡', 'เชฆเชฟเชตเชธเชจเซ€ เชถเชฐเซ‚เช†เชค'))

เชชเซƒเชทเซเช เซ‹ เช…เชฅเชตเชพ เชซเชพเช‡เชฒเซ‹เชจเซ€ เช—เชฃเชคเชฐเซ€ เช†เชฆเชฟเชฎ เชฐเซ€เชคเซ‡ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เชฌเชฟเช‚เชฆเซเชจเซ€ เชถเซ‹เชง เช•เชฐเซ€เชจเซ‡.

เช…เชนเซ‡เชตเชพเชฒเซ‹

เชœเชŸเชฟเชฒ เชตเชฟเชเซเชฏเซเชฒเชพเช‡เชเซ‡เชถเชจ เชธเชฟเชธเซเชŸเชฎเซเชธเชฎเชพเช‚, เชกเซ‡เชŸเชพเชฌเซ‡เช เช‘เชฌเซเชœเซ‡เช•เซเชŸเซเชธ เชชเชฐ เช†เชงเชพเชฐเชฟเชค เชฎเซ‡เชŸเชพ-เชฎเซ‹เชกเชฒ เชฌเชจเชพเชตเชตเซเช‚, เชซเชฟเชฒเซเชŸเชฐเซเชธ เช…เชจเซ‡ เชเช•เชคเซเชฐเซ€เช•เชฐเชฃ เชจเชฟเชฏเชฎเซ‹เชจเซ‡ เช—เชคเชฟเชถเซ€เชฒ เชฐเซ€เชคเซ‡ เชธเช‚เชšเชพเชฒเชฟเชค เช•เชฐเชตเซเช‚ เชถเช•เซเชฏ เช›เซ‡. เช†เช–เชฐเซ‡, เชฌเชงเชพ เชฏเซ‹เช—เซเชฏ เชธเชพเชงเชจเซ‹ SQL เช•เซเชตเซ‡เชฐเซ€ เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ‡ เช›เซ‡.

เช† เช‰เชฆเชพเชนเชฐเชฃเชฎเชพเช‚, เช…เชฎเซ‡ เชคเซˆเชฏเชพเชฐ เชเชธเช•เซเชฏเซเชเชฒ เช•เซเชตเซ‡เชฐเซ€ เชฌเชจเชพเชตเซ€เชถเซเช‚ เช…เชจเซ‡ เชคเซ‡เชฎเชจเซ‡ เชกเซ‡เชŸเชพเชฌเซ‡เชเชฎเชพเช‚ เชตเซเชฏเซ เชคเชฐเซ€เช•เซ‡ เชธเชพเชšเชตเซ€เชถเซเช‚ - เช† เชฐเชฟเชชเซ‹เชฐเซเชŸเซเชธ เช›เซ‡.

เชตเชฟเชเซเชฏเซเชฒเชพเช‡เชเซ‡เชถเชจ

เชฌเซเชฒเชซ: เชœเชพเชตเชพเชธเซเช•เซเชฐเชฟเชชเซเชŸเชฎเชพเช‚ เชธเซเช‚เชฆเชฐ เช—เซเชฐเชพเชซเชจเซ‹ เช‰เชชเชฏเซ‹เช— เชตเชฟเชเซเชฏเซเชฒเชพเช‡เชเซ‡เชถเชจ เชŸเซ‚เชฒ เชคเชฐเซ€เช•เซ‡ เชฅเชคเซ‹ เชนเชคเซ‹

เช† เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, PHP เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชคเชฎเชพเชฎ เชฐเชฟเชชเซ‹เชฐเซเชŸเซเชธเชฎเชพเช‚เชฅเซ€ เชชเชธเชพเชฐ เชฅเชตเซเช‚ เช…เชจเซ‡ เช•เซ‹เชทเซเชŸเช•เซ‹ เชธเชพเชฅเซ‡ html เชซเชพเช‡เชฒ เชœเชจเชฐเซ‡เชŸ เช•เชฐเชตเซ€ เชœเชฐเซ‚เชฐเซ€ เชนเชคเซ€.

$sqls = array(
'SELECT * FROM RPT_ACCESS_USER_VS_BOT',
'SELECT * FROM RPT_ACCESS_ANNOYING_BOT',
'SELECT * FROM RPT_ACCESS_TOP_HOUR_HIT',
'SELECT * FROM RPT_ACCESS_USER_ACTIVE',
'SELECT * FROM RPT_ACCESS_REQUEST_STATUS',
'SELECT * FROM RPT_ACCESS_TOP_REQUEST_PAGE',
'SELECT * FROM RPT_ACCESS_TOP_REQUEST_REFERRER',
'SELECT * FROM RPT_ACCESS_NEW_REQUEST',
'SELECT * FROM RPT_ACCESS_TOP_REQUEST_SUCCESS',
'SELECT * FROM RPT_ACCESS_TOP_REQUEST_ERROR'
);

เชธเชพเชงเชจ เชซเช•เซเชค เชชเชฐเชฟเชฃเชพเชฎเซ‹เชจเชพ เช•เซ‹เชทเซเชŸเช•เซ‹เชจเซ€ เช•เชฒเซเชชเชจเชพ เช•เชฐเซ‡ เช›เซ‡.

เชจเชฟเชทเซเช•เชฐเซเชท

เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡ เชตเซ‡เชฌ เชตเชฟเชถเซเชฒเซ‡เชทเชฃเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡, เชฒเซ‡เช– เชกเซ‡เชŸเชพ เชตเซ‡เชฐเชนเชพเช‰เชธ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชœเชฐเซ‚เชฐเซ€ เชฎเชฟเช•เซ‡เชจเชฟเชเชฎเซเชธเชจเซเช‚ เชตเชฐเซเชฃเชจ เช•เชฐเซ‡ เช›เซ‡. เชชเชฐเชฟเชฃเชพเชฎเซ‹ เชชเชฐเชฅเซ€ เชœเซ‹เชˆ เชถเช•เชพเชฏ เช›เซ‡ เชคเซ‡เชฎ, เชกเซ‡เชŸเชพเชจเชพ เชŠเช‚เชกเชพ เชตเชฟเชถเซเชฒเซ‡เชทเชฃ เช…เชจเซ‡ เชตเชฟเชเซเชฏเซเชฒเชพเช‡เชเซ‡เชถเชจ เชฎเชพเชŸเซ‡ เชธเซŒเชฅเซ€ เชธเชฐเชณ เชธเชพเชงเชจเซ‹ เชชเชฐเซเชฏเชพเชชเซเชค เช›เซ‡.

เชญเชตเชฟเชทเซเชฏเชฎเชพเช‚, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡ เช† เชญเช‚เชกเชพเชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡, เช…เชฎเซ‡ เชงเซ€เชฎเซ‡ เชงเซ€เชฎเซ‡ เชฌเชฆเชฒเชพเชคเชพ เชชเชฐเชฟเชฎเชพเชฃเซ‹, เชฎเซ‡เชŸเชพเชกเซ‡เชŸเชพ, เชเช•เชคเซเชฐเซ€เช•เชฐเชฃ เชธเซเชคเชฐเซ‹ เช…เชจเซ‡ เชตเชฟเชตเชฟเชง เชธเซเชฐเซ‹เชคเซ‹เชฎเชพเช‚เชฅเซ€ เชกเซ‡เชŸเชพเชจเชพ เชเช•เซ€เช•เชฐเชฃ เชœเซ‡เชตเชพ เชฎเชพเชณเช–เชพเชจเซ‡ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€เชถเซเช‚.

เช‰เชชเชฐเชพเช‚เชค, เชšเชพเชฒเซ‹ เชเช• เชŸเซ‡เชฌเชฒ เชชเชฐ เช†เชงเชพเชฐเชฟเชค ETL เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเช“เชจเซเช‚ เชธเช‚เชšเชพเชฒเชจ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡เชจเชพ เชธเซŒเชฅเซ€ เชธเชฐเชณ เชธเชพเชงเชจ เชชเชฐ เชจเชœเซ€เช•เชฅเซ€ เชจเชœเชฐ เช•เชฐเซ€เช.

เชšเชพเชฒเซ‹ เชกเซ‡เชŸเชพเชจเซ€ เช—เซเชฃเชตเชคเซเชคเชพเชจเซ‡ เชฎเชพเชชเชตเชพ เช…เชจเซ‡ เช† เชชเซเชฐเช•เซเชฐเชฟเชฏเชพเชจเซ‡ เชธเซเชตเชšเชพเชฒเชฟเชค เช•เชฐเชตเชพเชจเชพ เชตเชฟเชทเชฏ เชชเชฐ เชชเชพเช›เชพ เชซเชฐเซ€เช.

เช…เชฎเซ‡ เชคเช•เชจเซ€เช•เซ€ เชตเชพเชคเชพเชตเชฐเชฃ เช…เชจเซ‡ เชกเซ‡เชŸเชพ เชธเซเชŸเซ‹เชฐเซ‡เชœเชจเซ€ เชœเชพเชณเชตเชฃเซ€เชจเซ€ เชธเชฎเชธเซเชฏเชพเช“เชจเซ‹ เช…เชญเซเชฏเชพเชธ เช•เชฐเซ€เชถเซเช‚, เชœเซ‡เชจเชพ เชฎเชพเชŸเซ‡ เช…เชฎเซ‡ เชจเซเชฏเซ‚เชจเชคเชฎ เชธเช‚เชธเชพเชงเชจเซ‹ เชธเชพเชฅเซ‡ เชธเซเชŸเซ‹เชฐเซ‡เชœ เชธเชฐเซเชตเชฐเชจเซ‡ เช…เชฎเชฒเชฎเชพเช‚ เชฎเซ‚เช•เซ€เชถเซเช‚, เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชฐเชพเชธเซเชชเชฌเซ‡เชฐเซ€ เชชเซ€ เชชเชฐ เช†เชงเชพเชฐเชฟเชค.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹