เจธเจพเจˆเจŸ เจฆเฉ‡ เจ…เฉฐเจ•เฉœเฉ‡ เจ…เจคเฉ‡ เจคเฉเจนเจพเจกเฉ€ เจ†เจชเจฃเฉ€ เจ›เฉ‹เจŸเฉ€ เจธเจŸเฉ‹เจฐเฉ‡เจœ

เจตเฉˆเจฌเจฒเจพเจˆเจœเจผเจฐ เจ…เจคเฉ‡ เจ—เฉ‚เจ—เจฒ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจจเฉ‡ เจ•เจˆ เจธเจพเจฒเจพเจ‚ เจคเฉ‹เจ‚ เจตเฉˆเจฌเจธเจพเจˆเจŸเจพเจ‚ 'เจคเฉ‡ เจ•เฉ€ เจนเฉ‹ เจฐเจฟเจนเจพ เจนเฉˆ เจ‡เจธ เจฌเจพเจฐเฉ‡ เจธเจฎเจ เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจตเจฟเฉฑเจš เจฎเฉ‡เจฐเฉ€ เจฎเจฆเจฆ เจ•เฉ€เจคเฉ€ เจนเฉˆเฅค เจนเฉเจฃ เจฎเฉˆเจ‚ เจธเจฎเจเจฆเจพ เจนเจพเจ‚ เจ•เจฟ เจ‰เจน เจฌเจนเฉเจค เจ˜เฉฑเจŸ เจ‰เจชเจฏเฉ‹เจ—เฉ€ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจฆเฉ‡ เจนเจจ. เจคเฉเจนเจพเจกเฉ€ access.log เจซเจพเจˆเจฒ เจคเฉฑเจ• เจชเจนเฉเฉฐเจš เจนเฉ‹เจฃ เจจเจพเจฒ, เจ…เฉฐเจ•เฉœเจฟเจ†เจ‚ เจจเฉ‚เฉฐ เจธเจฎเจเจฃเจพ เจ…เจคเฉ‡ เจ•เจพเจซเจผเฉ€ เจฌเฉเจจเจฟเจ†เจฆเฉ€ เจŸเฉ‚เจฒ, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ sqlite, html, sql เจญเจพเจธเจผเจพ เจ…เจคเฉ‡ เจ•เจฟเจธเฉ‡ เจตเฉ€ เจธเจ•เฉเจฐเจฟเจชเจŸเจฟเฉฐเจ— เจชเฉเจฐเฉ‹เจ—เจฐเจพเจฎเจฟเฉฐเจ— เจญเจพเจธเจผเจพ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจเจพ เจฌเจนเฉเจค เจ†เจธเจพเจจ เจนเฉˆเฅค

Webalizer เจฒเจˆ เจกเจพเจŸเจพ เจธเจฐเฉ‹เจค เจธเจฐเจตเจฐ เจฆเฉ€ 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

เจชเจนเจฟเจฒเฉ‡ เจฆเฉ‹ เจฌเฉ‹เจŸ เจŸเฉ‡เจฌเจฒ เจคเฉ‹เจ‚ เจ—เจพเจ‡เจฌ เจนเฉ‹ เจ—เจ, เจ…เจคเฉ‡ เจเจฎเจเจธ เจฐเฉ‹เจฌเฉ‹เจŸ เจชเจนเจฟเจฒเฉ€ เจฒเจพเจˆเจจเจพเจ‚ เจคเฉ‹เจ‚ เจนเฉ‡เจ เจพเจ‚ เจšเจฒเฉ‡ เจ—เจเฅค

เจธเจญ เจคเฉ‹เจ‚ เจตเฉฑเจกเฉ€ เจ—เจคเฉ€เจตเจฟเจงเฉ€ เจฆเจพ เจฆเจฟเจจ เจ…เจคเฉ‡ เจธเจฎเจพเจ‚

เจŸเฉเจฐเฉˆเจซเจฟเจ• เจตเจฟเฉฑเจš เจ‰เจคเจฐเจพเจ…-เจšเฉœเฉเจนเจพเจ… เจฆเจฟเจ–เจพเจˆ เจฆเฉ‡ เจฐเจนเฉ‡ เจนเจจเฅค เจ‰เจนเจจเจพเจ‚ เจฆเจพ เจตเจฟเจธเจฅเจพเจฐ เจตเจฟเฉฑเจš เจ…เจงเจฟเจเจจ เจ•เจฐเจจ เจฒเจˆ, เจ‰เจนเจจเจพเจ‚ เจฆเฉ‡ เจตเจพเจชเจฐเจจ เจฆเฉ‡ เจธเจฎเฉ‡เจ‚ เจจเฉ‚เฉฐ เจ‰เจœเจพเจ—เจฐ เจ•เจฐเจจเจพ เจœเจผเจฐเฉ‚เจฐเฉ€ เจนเฉˆ, เจ…เจคเฉ‡ เจธเจฎเฉ‡เจ‚ เจฆเฉ‡ เจฎเจพเจช เจฆเฉ‡ เจธเจพเจฐเฉ‡ เจ˜เฉฐเจŸเจฟเจ†เจ‚ เจ…เจคเฉ‡ เจฆเจฟเจจเจพเจ‚ เจจเฉ‚เฉฐ เจชเฉเจฐเจฆเจฐเจธเจผเจฟเจค เจ•เจฐเจจเจพ เจœเจผเจฐเฉ‚เจฐเฉ€ เจจเจนเฉ€เจ‚ เจนเฉˆเฅค เจ‡เจน เจฒเฉŒเจ— เจซเจพเจˆเจฒ เจตเจฟเฉฑเจš เจตเจฟเจ…เจ•เจคเฉ€เจ—เจค เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจจเฉ‚เฉฐ เจฒเฉฑเจญเจฃเจพ เจ†เจธเจพเจจ เจฌเจฃเจพ เจฆเฉ‡เจตเฉ‡เจ—เจพ เจœเฉ‡เจ•เจฐ เจตเจฟเจธเจคเฉเจฐเจฟเจค เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจฆเฉ€ เจฒเฉ‹เฉœ เจนเฉˆเฅค

เจธเจพเจˆเจŸ เจฆเฉ‡ เจ…เฉฐเจ•เฉœเฉ‡ เจ…เจคเฉ‡ เจคเฉเจนเจพเจกเฉ€ เจ†เจชเจฃเฉ€ เจ›เฉ‹เจŸเฉ€ เจธเจŸเฉ‹เจฐเฉ‡เจœ

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 เจชเฉฐเจจเฉ‡ เจ–เฉ‹เจฒเฉเจนเจฆเจพ เจนเฉˆเฅค เจ‡เจธ เจ•เฉ‡เจธ เจตเจฟเฉฑเจš เจชเฉเจฐเจคเฉ€ เจ‰เจชเจญเฉ‹เจ—เจคเจพ เจฌเฉ‡เจจเจคเฉ€ เจ•เฉ€เจคเฉ€เจ†เจ‚ เจซเจพเจˆเจฒเจพเจ‚ เจฆเฉ€ เจ—เจฟเจฃเจคเฉ€ เจธเจพเจˆเจŸ เจตเจฟเฉฑเจš เจจเจตเฉ€เจ†เจ‚ เจซเจพเจˆเจฒเจพเจ‚ เจฆเฉ‡ เจœเฉ‹เฉœ 'เจคเฉ‡ เจจเจฟเจฐเจญเจฐ เจ•เจฐเจฆเฉ€ เจนเฉˆเฅค

เจธเจพเจฐเฉ€เจ†เจ‚ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจฆเฉ€เจ†เจ‚ เจธเจฅเจฟเจคเฉ€เจ†เจ‚

Webalizer เจนเจฎเฉ‡เจธเจผเจพ เจ–เจพเจธ เจชเฉ‡เจœ เจ•เฉ‹เจก เจฆเจฟเจ–เจพเจ‰เจ‚เจฆเฉ‡ เจนเจจ เจ…เจคเฉ‡ เจฎเฉˆเจ‚ เจนเจฎเฉ‡เจธเจผเจพ เจธเจซเจฒ เจฌเฉ‡เจจเจคเฉ€เจ†เจ‚ เจ…เจคเฉ‡ เจ—เจฒเจคเฉ€เจ†เจ‚ เจฆเฉ€ เจ—เจฟเจฃเจคเฉ€ เจฆเฉ‡เจ–เจฃเจพ เจšเจพเจนเฉเฉฐเจฆเจพ เจธเฉ€เฅค

เจธเจพเจˆเจŸ เจฆเฉ‡ เจ…เฉฐเจ•เฉœเฉ‡ เจ…เจคเฉ‡ เจคเฉเจนเจพเจกเฉ€ เจ†เจชเจฃเฉ€ เจ›เฉ‹เจŸเฉ€ เจธเจŸเฉ‹เจฐเฉ‡เจœ

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 INTEGER) > $param_epoch_from, เจœเจฟเฉฑเจฅเฉ‡ เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐ เจฌเฉ‡เจจเจคเฉ€ เจฆเจพ เจจเจคเฉ€เจœเจพ เจนเฉˆ
'FCT_ACCESS_USER_AGENT_DD เจคเฉ‹เจ‚ COALESCE(MAX(EVENT_DT), '3600') LAST_EVENT_EPOCH เจšเฉเจฃเฉ‹'

เจธเจผเจฐเจค เจธเจฟเจฐเจซเจผ เจชเฉ‚เจฐเฉ‡ เจฆเจฟเจจ เจฒเจˆ เจฒเฉ‹เจก เจนเฉ‹เจตเฉ‡เจ—เฉ€: CAST(STG.EVENT_DT AS INTEGEER) < strftime('%s', เจฎเจฟเจคเฉ€ ('เจนเฉเจฃ', 'เจฆเจฟเจจ เจฆเฉ€ เจธเจผเฉเจฐเฉ‚เจ†เจค'))

เจชเฉฐเจจเจฟเจ†เจ‚ เจœเจพเจ‚ เจซเจพเจˆเจฒเจพเจ‚ เจฆเฉ€ เจ—เจฟเจฃเจคเฉ€ เจ‡เฉฑเจ• เจฌเจฟเฉฐเจฆเฉ‚ เจฆเฉ€ เจ–เฉ‹เจœ เจ•เจฐเจ•เฉ‡, เจ‡เฉฑเจ• เจฎเฉเฉฑเจขเจฒเฉ‡ เจคเจฐเฉ€เจ•เฉ‡ เจจเจพเจฒ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆเฅค

เจฐเจฟเจชเฉ‹เจฐเจŸ

เจ—เฉเฉฐเจเจฒเจฆเจพเจฐ เจตเจฟเจœเจผเฉ‚เจ…เจฒเจพเจˆเจœเจผเฉ‡เจธเจผเจจ เจชเฉเจฐเจฃเจพเจฒเฉ€เจ†เจ‚ เจตเจฟเฉฑเจš, เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจตเจธเจคเฉ‚เจ†เจ‚ เจฆเฉ‡ เจ…เจงเจพเจฐ เจคเฉ‡ เจ‡เฉฑเจ• เจฎเฉˆเจŸเจพ-เจฎเจพเจกเจฒ เจฌเจฃเจพเจ‰เจฃเจพ, เจซเจฟเจฒเจŸเจฐเจพเจ‚ เจ…เจคเฉ‡ เจเจ•เฉ€เจ•เจฐเจฃ เจจเจฟเจฏเจฎเจพเจ‚ เจจเฉ‚เฉฐ เจ—เจคเฉ€เจธเจผเฉ€เจฒ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจชเฉเจฐเจฌเฉฐเจงเจฟเจค เจ•เจฐเจจเจพ เจธเฉฐเจญเจต เจนเฉˆเฅค เจ†เจ–เจฐเจ•เจพเจฐ, เจธเจพเจฐเฉ‡ เจตเจงเฉ€เจ† เจŸเฉ‚เจฒ เจ‡เฉฑเจ• SQL เจชเฉเฉฑเจ›เจ—เจฟเฉฑเจ› เจคเจฟเจ†เจฐ เจ•เจฐเจฆเฉ‡ เจนเจจ.

เจ‡เจธ เจ‰เจฆเจพเจนเจฐเจจ เจตเจฟเฉฑเจš, เจ…เจธเฉ€เจ‚ เจคเจฟเจ†เจฐ เจ•เฉ€เจคเฉ‡ SQL เจธเจตเจพเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจฌเจฃเจพเจตเจพเจ‚เจ—เฉ‡ เจ…เจคเฉ‡ เจ‰เจนเจจเจพเจ‚ เจจเฉ‚เฉฐ เจกเฉ‡เจŸเจพเจฌเฉ‡เจธ เจตเจฟเฉฑเจš เจตเจฟเจฏเฉ‚เจœเจผ เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจธเฉเจฐเฉฑเจ–เจฟเจ…เจค เจ•เจฐเจพเจ‚เจ—เฉ‡ - เจ‡เจน เจฐเจฟเจชเฉ‹เจฐเจŸเจพเจ‚ เจนเจจเฅค

เจตเจฟเจœเจผเฉ‚เจ…เจฒเจพเจˆเจœเจผเฉ‡เจธเจผเจจ

Bluff: JavaScript เจตเจฟเฉฑเจš เจธเฉเฉฐเจฆเจฐ เจ—เฉเจฐเจพเจซเจพเจ‚ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจตเจฟเจœเจผเฉ‚เจ…เจฒเจพเจˆเจœเจผเฉ‡เจธเจผเจจ เจŸเฉ‚เจฒ เจตเจœเฉ‹เจ‚ เจตเจฐเจคเจฟเจ† เจ—เจฟเจ† เจธเฉ€

เจ…เจœเจฟเจนเจพ เจ•เจฐเจจ เจฒเจˆ, 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'
);

เจŸเฉ‚เจฒ เจธเจฟเจฐเจซเจผ เจจเจคเฉ€เจœเจฟเจ†เจ‚ เจฆเฉ€เจ†เจ‚ เจธเจพเจฐเจฃเฉ€เจ†เจ‚ เจฆเฉ€ เจ•เจฒเจชเจจเจพ เจ•เจฐเจฆเจพ เจนเฉˆเฅค

เจธเจฟเฉฑเจŸเจพ

เจ‡เฉฑเจ• เจ‰เจฆเจพเจนเจฐเจฃ เจตเจœเฉ‹เจ‚ เจตเฉˆเจฌ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ, เจฒเฉ‡เจ– เจกเฉ‡เจŸเจพ เจตเฉ‡เจ…เจฐเจนเจพเจŠเจธ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจœเจผเจฐเฉ‚เจฐเฉ€ เจตเจฟเจงเฉ€เจ†เจ‚ เจฆเจพ เจตเจฐเจฃเจจ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจจเจคเฉ€เจœเจฟเจ†เจ‚ เจคเฉ‹เจ‚ เจฆเฉ‡เจ–เจฟเจ† เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ, เจกเฉ‡เจŸเจพ เจฆเฉ‡ เจกเฉ‚เฉฐเจ˜เฉ‡ เจตเจฟเจธเจผเจฒเฉ‡เจธเจผเจฃ เจ…เจคเฉ‡ เจตเจฟเจœเจผเฉ‚เจ…เจฒเจพเจˆเจœเจผเฉ‡เจธเจผเจจ เจฒเจˆ เจธเจฐเจฒ เจŸเฉ‚เจฒ เจ•เจพเจซเฉ€ เจนเจจเฅค

เจญเจตเจฟเฉฑเจ– เจตเจฟเฉฑเจš, เจ‡เฉฑเจ• เจ‰เจฆเจพเจนเจฐเจจ เจฆเฉ‡ เจคเฉŒเจฐ 'เจคเฉ‡ เจ‡เจธ เจญเฉฐเจกเจพเจฐ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจนเฉ‹เจ, เจ…เจธเฉ€เจ‚ เจนเฉŒเจฒเฉ€-เจนเฉŒเจฒเฉ€ เจฌเจฆเจฒ เจฐเจนเฉ‡ เจฎเจพเจช, เจฎเฉˆเจŸเจพเจกเฉ‡เจŸเจพ, เจเจ•เฉ€เจ•เจฐเจฃ เจชเฉฑเจงเจฐ เจ…เจคเฉ‡ เจตเฉฑเจ–-เจตเฉฑเจ– เจธเจฐเฉ‹เจคเจพเจ‚ เจคเฉ‹เจ‚ เจกเฉ‡เจŸเจพ เจฆเฉ‡ เจเจ•เฉ€เจ•เจฐเจฃ เจตเจฐเจ—เฉ€เจ†เจ‚ เจฌเจฃเจคเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจจ เจฆเฉ€ เจ•เฉ‹เจธเจผเจฟเจธเจผ เจ•เจฐเจพเจ‚เจ—เฉ‡เฅค

เจจเจพเจฒ เจนเฉ€, เจ†เจ“ เจ‡เฉฑเจ• เจธเจฟเฉฐเจ—เจฒ เจŸเฉ‡เจฌเจฒ เจฆเฉ‡ เจ…เจงเจพเจฐ เจคเฉ‡ เจˆเจŸเฉ€เจเจฒ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ†เจตเจพเจ‚ เจฆเฉ‡ เจชเฉเจฐเจฌเฉฐเจงเจจ เจฒเจˆ เจธเจฐเจฒ เจŸเฉ‚เจฒ 'เจคเฉ‡ เจ‡เฉฑเจ• เจกเฉ‚เฉฐเจ˜เจพเจˆ เจจเจพเจฒ เจตเจฟเจšเจพเจฐ เจ•เจฐเฉ€เจ.

เจ†เจ‰ เจกเจพเจŸเจพ เจ—เฉเจฃเจตเฉฑเจคเจพ เจจเฉ‚เฉฐ เจฎเจพเจชเจฃ เจ…เจคเฉ‡ เจ‡เจธ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจจเฉ‚เฉฐ เจ†เจŸเฉ‹เจฎเฉˆเจŸเจฟเจ• เจ•เจฐเจจ เจฆเฉ‡ เจตเจฟเจธเจผเฉ‡ 'เจคเฉ‡ เจตเจพเจชเจธ เจ†เจ‰เจ‚เจฆเฉ‡ เจนเจพเจ‚เฅค

เจ…เจธเฉ€เจ‚ เจคเจ•เจจเฉ€เจ•เฉ€ เจตเจพเจคเจพเจตเจฐเจฃ เจ…เจคเฉ‡ เจกเจพเจŸเจพ เจธเจŸเฉ‹เจฐเฉ‡เจœ เจฆเฉ‡ เจฐเฉฑเจ–-เจฐเจ–เจพเจ… เจฆเฉ€เจ†เจ‚ เจธเจฎเฉฑเจธเจฟเจ†เจตเจพเจ‚ เจฆเจพ เจ…เจงเจฟเจเจจ เจ•เจฐเจพเจ‚เจ—เฉ‡, เจœเจฟเจธ เจฒเจˆ เจ…เจธเฉ€เจ‚ เจ˜เฉฑเจŸเฉ‹-เจ˜เฉฑเจŸ เจธเจฐเฉ‹เจคเจพเจ‚ เจฆเฉ‡ เจจเจพเจฒ เจ‡เฉฑเจ• เจธเจŸเฉ‹เจฐเฉ‡เจœ เจธเจฐเจตเจฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจพเจ‚เจ—เฉ‡, เจ‰เจฆเจพเจนเจฐเจจ เจฒเจˆ, เจ‡เฉฑเจ• เจฐเจพเจธเจฌเฉ‡เจฐเฉ€ เจชเจพเจˆ 'เจคเฉ‡ เจ†เจงเจพเจฐเจฟเจคเฅค

เจธเจฐเฉ‹เจค: www.habr.com

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹