เบชเบฐเบ–เบดเบ•เบดเป€เบงเบฑเบšเป„เบŠ เปเบฅเบฐเบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบ‚เบฐเปœเบฒเบ”เบ™เป‰เบญเบเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเป€เบญเบ‡

Webalizer เปเบฅเบฐ Google Analytics เป„เบ”เป‰เบŠเปˆเบงเบเปƒเบซเป‰เบ‚เป‰เบญเบเบกเบตเบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆเบเปˆเบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบทเป‰เบ™เบขเบนเปˆเปƒเบ™เป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ•เปˆเบฒเบ‡เป†เป€เบ›เบฑเบ™เป€เบงเบฅเบฒเบซเบฅเบฒเบเบ›เบต. เบ•เบญเบ™เบ™เบตเป‰เบ‚เป‰เบญเบเป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเปƒเบซเป‰เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบซเบ™เป‰เบญเบเบซเบผเบฒเบ. เบกเบตเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป„เบŸเบฅเปŒ access.log เบ‚เบญเบ‡เบ—เปˆเบฒเบ™, เบกเบฑเบ™เบ‡เปˆเบฒเบเบซเบผเบฒเบเบ—เบตเปˆเบˆเบฐเป€เบ‚เบปเป‰เบฒเปƒเบˆเบชเบฐเบ–เบดเบ•เบดเปเบฅเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบžเบทเป‰เบ™เบ–เบฒเบ™เบ—เบตเปˆเบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡, เป€เบŠเบฑเปˆเบ™: sqlite, html, เบžเบฒเบชเบฒ sql เปเบฅเบฐเบžเบฒเบชเบฒเบเบฒเบ™เบ‚เบฝเบ™เป‚เบ›เบผเปเบเบผเบกเปƒเบ”เป†.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบชเปเบฒเบฅเบฑเบš Webalizer เปเบกเปˆเบ™เป„เบŸเบฅเปŒ access.log เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ. เบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเปเบ–เบšเปเบฅเบฐเบ•เบปเบงเป€เบฅเบเบ‚เบญเบ‡เบกเบฑเบ™เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒ, เป€เบŠเบดเปˆเบ‡เบกเบตเบžเบฝเบ‡เปเบ•เปˆเบ›เบฐเบฅเบดเบกเบฒเบ™เบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™:

เบชเบฐเบ–เบดเบ•เบดเป€เบงเบฑเบšเป„เบŠ เปเบฅเบฐเบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบ‚เบฐเปœเบฒเบ”เบ™เป‰เบญเบเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเป€เบญเบ‡
เบชเบฐเบ–เบดเบ•เบดเป€เบงเบฑเบšเป„เบŠ เปเบฅเบฐเบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบ‚เบฐเปœเบฒเบ”เบ™เป‰เบญเบเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเป€เบญเบ‡
เป€เบ„เบทเปˆเบญเบ‡เบกเบทเป€เบŠเบฑเปˆเบ™ Google Analytics เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบเบซเบ™เป‰เบฒเบ—เบตเปˆเป‚เบซเบฅเบ”เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡. เบžเบงเบเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบ„เบนเปˆเบ‚เบญเบ‡เปเบœเบ™เบงเบฒเบ”เปเบฅเบฐเป€เบชเบฑเป‰เบ™, เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบ—เบตเปˆเบกเบฑเบ™เบกเบฑเบเบˆเบฐเป€เบ›เบฑเบ™เบเบฒเบ™เบเบฒเบเบ—เบตเปˆเบˆเบฐเปเบ•เป‰เบกเบšเบปเบ”เบชเบฐเบซเบผเบธเบšเบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡. เบšเบฒเบ‡เบ—เบตเบ„เบงเบ™เบกเบตเบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเบซเบผเบฒเบเบเบงเปˆเบฒเบ™เบตเป‰เบšเป? เบšเปเปˆเบฎเบนเป‰.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ‚เป‰เบญเบเบขเบฒเบเป€เบซเบฑเบ™เบซเบเบฑเบ‡เปƒเบ™เบชเบฐเบ–เบดเบ•เบดเบœเบนเป‰เป€เบ‚เบปเป‰เบฒเบŠเบปเบกเป€เบงเบฑเบšเป„เบŠเบ—เปŒ?

เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบŠเบปเบกเบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰เปเบฅเบฐ bot

เป€เบฅเบทเป‰เบญเบเป†เบเบฒเบ™เบˆเบฒเบฅเบฐเบˆเบญเบ™เบ‚เบญเบ‡เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเปเบกเปˆเบ™เบˆเปเบฒเบเบฑเบ”เปเบฅเบฐเบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™เบ—เบตเปˆเบกเบตเบ›เบฐเป‚เบซเบเบ”เบซเบผเบฒเบเบ›เบฒเบ™เปƒเบ”เปเบกเปˆเบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰. เบ•เบปเบงเบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

เบชเบฐเบ–เบดเบ•เบดเป€เบงเบฑเบšเป„เบŠ เปเบฅเบฐเบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบ‚เบฐเปœเบฒเบ”เบ™เป‰เบญเบเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเป€เบญเบ‡

เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบฅเบฒเบเบ‡เบฒเบ™ 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

เป€เบชเบฑเป‰เบ™เบชเบฐเปเบ”เบ‡เบชเบฐเปเบ”เบ‡เบเบดเบ”เบˆเบฐเบเปเบฒเบ„เบปเบ‡เบ—เบตเปˆเบ‚เบญเบ‡ bots. เบกเบฑเบ™เบˆเบฐเป€เบ›เบฑเบ™เบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบ—เบตเปˆเบˆเบฐเบชเบถเบเบชเบฒเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบเปˆเบฝเบงเบเบฑเบšเบœเบนเป‰เบ•เบฒเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆเบกเบตเบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เป„เบซเบงเบซเบผเบฒเบเบ—เบตเปˆเบชเบธเบ”.

bots เบ—เบตเปˆเบซเบ™เป‰เบฒเบฅเปเบฒเบ„เบฒเบ™

เบžเบงเบเป€เบฎเบปเบฒเบˆเบฑเบ”เบ›เบฐเป€เบžเบ” bots เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบ‚เปเป‰เบกเบนเบ™เบ•เบปเบงเปเบ—เบ™เบœเบนเป‰เปƒเบŠเป‰. เบชเบฐเบ–เบดเบ•เบดเป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™เบ›เบฐเบˆเปเบฒเบงเบฑเบ™, เบˆเปเบฒเบ™เบงเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ—เบตเปˆเบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”เปเบฅเบฐเบšเปเปˆเบ›เบฐเบชเบปเบšเบœเบปเบ™เบชเปเบฒเป€เบฅเบฑเบ”เปƒเบซเป‰เบ„เบงเบฒเบกเบ„เบดเบ”เบ—เบตเปˆเบ”เบตเบ‚เบญเบ‡เบเบดเบ”เบˆเบฐเบเปเบฒ bot.

เบชเบฐเบ–เบดเบ•เบดเป€เบงเบฑเบšเป„เบŠ เปเบฅเบฐเบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบ‚เบฐเปœเบฒเบ”เบ™เป‰เบญเบเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเป€เบญเบ‡

เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบฅเบฒเบเบ‡เบฒเบ™ 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

เบชเบญเบ‡ bots เบ—เปเบฒเบญเบดเบ”เบซเบฒเบเป„เบ›เบˆเบฒเบเบ•เบฒเบ•เบฐเบฅเบฒเบ‡, เปเบฅเบฐเบซเบธเปˆเบ™เบเบปเบ™ MS เป„เบ”เป‰เบเป‰เบฒเบเบฅเบปเบ‡เบˆเบฒเบเปเบ–เบงเบ—เปเบฒเบญเบดเบ”.

เบกเบทเป‰เปเบฅเบฐเป€เบงเบฅเบฒเบ‚เบญเบ‡เบเบดเบ”เบˆเบฐเบเปเบฒเบ—เบตเปˆเบเบดเปˆเบ‡เปƒเบซเบเปˆเบ—เบตเปˆเบชเบธเบ”

Upswings เปเบกเปˆเบ™เป€เบซเบฑเบ™เป„เบ”เป‰เปƒเบ™เบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™. เป€เบžเบทเปˆเบญเบชเบถเบเบชเบฒเบžเบงเบเบกเบฑเบ™เบขเปˆเบฒเบ‡เบฅเบฐเบญเบฝเบ”, เบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบ™เบฑเป‰เบ™เป€เบ–เบดเบ‡เป€เบงเบฅเบฒเบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบเบปเบ”เบ•เบปเบงเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ, เปเบฅเบฐเบกเบฑเบ™เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบชเบฐเปเบ”เบ‡เป€เบงเบฅเบฒเบ—เบฑเบ‡เบซเบกเบปเบ”เปเบฅเบฐเบกเบทเป‰เบ‚เบญเบ‡เบเบฒเบ™เบงเบฑเบ”เปเบ—เบเป€เบงเบฅเบฒ. เบ™เบตเป‰เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบกเบฑเบ™เบ‡เปˆเบฒเบเบ•เปเปˆเบเบฒเบ™เบŠเบญเบเบซเบฒเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบชเปˆเบงเบ™เบšเบธเบเบ„เบปเบ™เปƒเบ™เป„เบŸเบฅเปŒเบšเบฑเบ™เบ—เบถเบเบ–เป‰เบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบฅเบฒเบเบฅเบฐเบญเบฝเบ”.

เบชเบฐเบ–เบดเบ•เบดเป€เบงเบฑเบšเป„เบŠ เปเบฅเบฐเบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบ‚เบฐเปœเบฒเบ”เบ™เป‰เบญเบเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเป€เบญเบ‡

เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบฅเบฒเบเบ‡เบฒเบ™ 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 bots เป„เบ”เป‰เป€เบ„เบทเปˆเบญเบ™เป„เบซเบง.

เบเบฒเบ™เป€เบ„เบทเปˆเบญเบ™เป„เบซเบงเบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰เบ›เบฐเบˆเปเบฒเบงเบฑเบ™เป‚เบ”เบเบชเบฐเป€เบฅเปˆเบเบ•เปเปˆเบญเบฒเบ—เบดเบ”

เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบˆเบฑเบ”เบฎเบฝเบ‡เบชเบดเปˆเบ‡เบ•เปˆเบฒเบ‡เป†เบญเบญเบเป€เบฅเบฑเบเบ™เป‰เบญเบเบเบฑเบšเบเบดเบ”เบˆเบฐเบเปเบฒเปเบฅเบฐเบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™. เบ„เปเบฒเบ–เบฒเบกเบ•เปเปˆเป„เบ›เปเบกเปˆเบ™เบเบดเบ”เบˆเบฐเบเปเบฒเบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰เป€เบญเบ‡. เบชเปเบฒเบฅเบฑเบšเบชเบฐเบ–เบดเบ•เบดเบ”เบฑเปˆเบ‡เบเปˆเบฒเบง, เป„เบฅเบเบฐเป€เบงเบฅเบฒเบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเบเบฒเบง, เป€เบŠเบฑเปˆเบ™เบซเบ™เบถเปˆเบ‡เบญเบฒเบ—เบดเบ”, เปเบกเปˆเบ™เบ„เบงเบฒเบกเบ›เบฒเบ–เบฐเบซเบ™เบฒ.

เบชเบฐเบ–เบดเบ•เบดเป€เบงเบฑเบšเป„เบŠ เปเบฅเบฐเบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบ‚เบฐเปœเบฒเบ”เบ™เป‰เบญเบเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเป€เบญเบ‡

เบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบฅเบฒเบเบ‡เบฒเบ™ 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

เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™เบชเบฐเปเบ”เบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เป, เบšเปเปˆเปเบกเปˆเบ™เบเบฒเบ™เบ„เบฅเบดเบ ( hits), เบšเปเปˆเป€เบซเบกเบทเบญเบ™เบเบฑเบš LINE_CNT, metric REQUEST_CNT เบ–เบทเบเบ„เบดเบ”เป„เบฅเปˆเป€เบ›เบฑเบ™ COUNT(DISTINCT STG.REQUEST_NK). เป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเปเบกเปˆเบ™เบเบฒเบ™เบชเบฐเปเบ”เบ‡เป€เบซเบ”เบเบฒเบ™เบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš, เบ•เบปเบงเบขเปˆเบฒเบ‡, MS bots เบเบฒเบ™เบชเปเบฒเบซเบผเบงเบ”เป„เบŸเบฅเปŒ 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. เบชเบญเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบฅเบงเบก. เปƒเบซเป‰เบชเป‰เบฒเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ›เบฐเบˆเปเบฒเบงเบฑเบ™เบ—เบตเปˆเบกเบตเบชเบฐเบ–เบดเบ•เบดเบเปˆเบฝเบงเบเบฑเบšเบ•เบปเบงเปเบ—เบ™เบœเบนเป‰เปƒเบŠเป‰เปเบฅเบฐเบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป. เบ—เบธเบเป†เบŠเบปเปˆเบงเป‚เบกเบ‡เบ”เป‰เบงเบเบชเบฐเบ–เบดเบ•เบดเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป, เบเบธเปˆเบกเบชเบฐเบ–เบฒเบ™เบฐเบžเบฒเบšเปเบฅเบฐเบ•เบปเบงเปเบ—เบ™. เบชเบตเปˆเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบงเบฑเบ”เปเบ—เบเบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡.

เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเปเบกเปˆเบ™เบฎเบนเบšเปเบšเบšเบเบฒเบ™เบžเบปเบงเบžเบฑเบ™เบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

เบฎเบนเบšเปเบšเบšเบ‚เปเป‰เบกเบนเบ™เบชเบฐเบ–เบดเบ•เบดเป€เบงเบฑเบšเป„เบŠ เปเบฅเบฐเบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบ‚เบฐเปœเบฒเบ”เบ™เป‰เบญเบเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเป€เบญเบ‡

Script เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบงเบฑเบ”เบ–เบธเปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ 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, เบกเบฑเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบญเปˆเบฒเบ™, parse เปเบฅเบฐเบ‚เบฝเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™. เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เป„เบ”เป‰เป‚เบ”เบเบเบปเบ‡เป‚เบ”เบเปƒเบŠเป‰เบžเบฒเบชเบฒ scripting เบซเบผเบทเปƒเบŠเป‰เป€เบ„เบทเปˆเบญเบ‡เบกเบท 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 key propagation query

/* 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

เบเบฒเบ™เบ‚เบฐเบซเบเบฒเบเบžเบฑเบ™เปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ•เบปเบงเปเบ—เบ™เบœเบนเป‰เปƒเบŠเป‰เบญเบฒเบ”เบกเบต bot logic, เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡ sql snippet:


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 query เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป‚เบซเบผเบ”เบฅเบงเบก

/* 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, เป€เบŠเบดเปˆเบ‡เบžเบฒเบฃเบฒเบกเบดเป€เบ•เบตเป€เบ›เบฑเบ™เบœเบปเบ™เบกเบฒเบˆเบฒเบเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป.
'เป€เบฅเบทเบญเบ COALESCE(MAX(EVENT_DT), '3600') AS LAST_EVENT_EPOCH เบˆเบฒเบ FCT_ACCESS_USER_AGENT_DD'

เป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบˆเบฐเป‚เบซเบผเบ”เป€เบ•เบฑเบกเบกเบทเป‰เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™: CAST(STG.EVENT_DT AS INTEGER) < strftime('%s', date('now', 'start of day'))

เบเบฒเบ™เบ™เบฑเบšเบซเบ™เป‰เบฒเบซเบผเบทเป„เบŸเบฅเปŒเปเบกเปˆเบ™เบ”เปเบฒเป€เบ™เบตเบ™เปƒเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™, เป‚เบ”เบเบเบฒเบ™เบŠเบญเบเบซเบฒเบˆเบธเบ”เปƒเบ”เบซเบ™เบถเปˆเบ‡.

เบšเบปเบ”เบฅเบฒเบเบ‡เบฒเบ™

เปƒเบ™เบฅเบฐเบšเบปเบšเบเบฒเบ™เป€เบšเบดเปˆเบ‡เป€เบซเบฑเบ™เบ—เบตเปˆเบชเบฑเบšเบชเบปเบ™, เบกเบฑเบ™เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡เบฎเบนเบšเปเบšเบš meta เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบงเบฑเบ”เบ–เบธเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™, เบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบ•เบปเบงเบเบญเบ‡เปเบšเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบงเปเบฅเบฐเบเบปเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เบฅเบงเบšเบฅเบงเบก. เปƒเบ™เบ—เบตเปˆเบชเบธเบ”, เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบตเปˆเป€เบซเบกเบฒเบฐเบชเบปเบกเบ—เบฑเบ‡เบซเบกเบปเบ”เบชเป‰เบฒเบ‡เบ„เปเบฒเบ–เบฒเบก 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'
);

เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบžเบฝเบ‡เปเบ•เปˆเป€เบšเบดเปˆเบ‡เป€เบซเบฑเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš.

เบชเบฐเบซเบฅเบธเบš

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเป€เบงเบฑเบšเป€เบ›เบฑเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡, เบšเบปเบ”เบ„เบงเบฒเบกเบญเบฐเบ—เบดเบšเบฒเบเบเบปเบ™เป„เบเบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบ„เบฑเบ‡เบ‚เปเป‰เบกเบนเบ™. เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป€เบซเบฑเบ™เป„เบ”เป‰เบˆเบฒเบเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš, เป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบ—เบตเปˆเบชเบธเบ”เปเบกเปˆเบ™เบžเบฝเบ‡เบžเปเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเป€เบฅเบดเบเปเบฅเบฐเบเบฒเบ™เป€เบšเบดเปˆเบ‡เป€เบซเบฑเบ™เบ‚เปเป‰เบกเบนเบ™.

เปƒเบ™เบญเบฐเบ™เบฒเบ„เบปเบ”, เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰ repository เบ™เบตเป‰เป€เบ›เบฑเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบžเบฐเบเบฒเบเบฒเบกเบ›เบฐเบ•เบดเบšเบฑเบ”เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเป€เบ›เบฑเบ™เบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบŠเป‰เบฒเป†เบ‚เบฐเบซเบ™เบฒเบ”, metadata, เบฅเบฐเบ”เบฑเบšเบเบฒเบ™เบฅเบงเบšเบฅเบงเบกเปเบฅเบฐเบเบฒเบ™เบฅเบงเบกเป€เบญเบปเบฒเบ‚เปเป‰เบกเบนเบ™เบˆเบฒเบเปเบซเบผเปˆเบ‡เบ•เปˆเบฒเบ‡เป†.

เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบ—เบตเปˆเปƒเบเป‰เบŠเบดเบ”เบเปˆเบฝเบงเบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เบกเบทเบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบเบ—เบตเปˆเบชเบธเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™ ETL เป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ”เบฝเบง.

เปƒเบซเป‰เบเบฑเบšเบ„เบทเบ™เป„เบ›เบซเบฒเบซเบปเบงเบ‚เปเป‰เบ‚เบญเบ‡เบเบฒเบ™เบงเบฑเบ”เปเบ—เบเบ„เบธเบ™เบ™เบฐเบžเบฒเบšเบ‚เปเป‰เบกเบนเบ™เปเบฅเบฐเบญเบฑเบ”เบ•เบฐเป‚เบ™เบกเบฑเบ”เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เบ™เบตเป‰.

เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบชเบถเบเบชเบฒเบšเบฑเบ™เบซเบฒเบ‚เบญเบ‡เบชเบฐเบžเบฒเบšเปเบงเบ”เบฅเป‰เบญเบกเบ”เป‰เบฒเบ™เบงเบดเบŠเบฒเบเบฒเบ™เปเบฅเบฐเบเบฒเบ™เบฎเบฑเบเบชเบฒเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ—เบตเปˆเบกเบตเบŠเบฑเบšเบžเบฐเบเบฒเบเบญเบ™เบซเบ™เป‰เบญเบ, เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡, เบญเบตเบ‡เปƒเบชเปˆ Raspberry Pi.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™