Бтатистика Π½Π° страницата ΠΈ сопствСн ΠΌΠ°Π» простор Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅

Webalizer ΠΈ Google Analytics ΠΌΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π°Π° Π΄Π° добијам ΡƒΠ²ΠΈΠ΄ Π²ΠΎ ΠΎΠ½Π° ΡˆΡ‚ΠΎ сС случува Π½Π° Π²Π΅Π±-Π»ΠΎΠΊΠ°Ρ†ΠΈΠΈΡ‚Π΅ ΠΌΠ½ΠΎΠ³Ρƒ Π³ΠΎΠ΄ΠΈΠ½ΠΈ. Π‘Π΅Π³Π° Ρ€Π°Π·Π±ΠΈΡ€Π°ΠΌ Π΄Π΅ΠΊΠ° Ρ‚ΠΈΠ΅ Π΄Π°Π²Π°Π°Ρ‚ ΠΌΠ½ΠΎΠ³Ρƒ ΠΌΠ°Π»ΠΊΡƒ корисни ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. Имајќи пристап Π΄ΠΎ Π²Π°ΡˆΠ°Ρ‚Π° Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ° access.log, ΠΌΠ½ΠΎΠ³Ρƒ Π΅ лСсно Π΄Π° сС Ρ€Π°Π·Π±Π΅Ρ€Π°Ρ‚ статистикитС ΠΈ Π΄Π° сС ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°Π°Ρ‚ сосСма основни Π°Π»Π°Ρ‚ΠΊΠΈ, ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ сС sqlite, html, Ρ˜Π°Π·ΠΈΠΊΠΎΡ‚ sql ΠΈ кој Π±ΠΈΠ»ΠΎ програмски јазик Π·Π° ΡΠΊΡ€ΠΈΠΏΡ‚ΠΈΡ€Π°ΡšΠ΅.

Π˜Π·Π²ΠΎΡ€ΠΎΡ‚ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ Π·Π° Webalizer Π΅ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠ°Ρ‚Π° access.log Π½Π° сСрвСрот. Π’Π°ΠΊΠ° ΠΈΠ·Π³Π»Π΅Π΄Π°Π°Ρ‚ Π½Π΅Π³ΠΎΠ²ΠΈΡ‚Π΅ шипки ΠΈ Π±Ρ€ΠΎΡ˜ΠΊΠΈ ΠΎΠ΄ ΠΊΠΎΠΈ Π΅ јасСн само Π²ΠΊΡƒΠΏΠ½ΠΈΠΎΡ‚ ΠΎΠ±Π΅ΠΌ Π½Π° ΡΠΎΠΎΠ±Ρ€Π°ΡœΠ°Ρ˜:

Бтатистика Π½Π° страницата ΠΈ сопствСн ΠΌΠ°Π» простор Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅
Бтатистика Π½Π° страницата ΠΈ сопствСн ΠΌΠ°Π» простор Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅
АлаткитС ΠΊΠ°ΠΊΠΎ Google Analytics самитС собираат ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ ΠΎΠ΄ Π²Ρ‡ΠΈΡ‚Π°Π½Π°Ρ‚Π° страница. Π’ΠΈΠ΅ Π½ΠΈ ΠΏΠΎΠΊΠ°ΠΆΡƒΠ²Π°Π°Ρ‚ Π½Π΅ΠΊΠΎΠ»ΠΊΡƒ Π΄ΠΈΡ˜Π°Π³Ρ€Π°ΠΌΠΈ ΠΈ Π»ΠΈΠ½ΠΈΠΈ, Π²Ρ€Π· основа Π½Π° ΠΊΠΎΠΈ чСсто Π΅ Ρ‚Π΅ΡˆΠΊΠΎ Π΄Π° сС ΠΈΠ·Π²Π»Π΅Ρ‡Π°Ρ‚ Ρ‚ΠΎΡ‡Π½ΠΈ Π·Π°ΠΊΠ»ΡƒΡ‡ΠΎΡ†ΠΈ. МоТСби Ρ‚Ρ€Π΅Π±Π°ΡˆΠ΅ Π΄Π° сС Π²Π»ΠΎΠΆΠ°Ρ‚ повСќС Π½Π°ΠΏΠΎΡ€ΠΈ? НС Π·Π½Π°ΠΌ.

Π—Π½Π°Ρ‡ΠΈ, ΡˆΡ‚ΠΎ сакав Π΄Π° Π²ΠΈΠ΄Π°ΠΌ Π²ΠΎ статистиката Π½Π° посСтитСлитС Π½Π° Π²Π΅Π±-страницата?

ΠšΠΎΡ€ΠΈΡΠ½ΠΈΡ‡ΠΊΠΈ ΠΈ Π±ΠΎΡ‚ ΡΠΎΠΎΠ±Ρ€Π°ΡœΠ°Ρ˜

ЧСстопати ΡΠΎΠΎΠ±Ρ€Π°ΡœΠ°Ρ˜ΠΎΡ‚ Π½Π° страницата Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±Π½ΠΎ Π΅ Π΄Π° сС Π²ΠΈΠ΄ΠΈ ΠΊΠΎΠ»ΠΊΡƒ корисСн ΡΠΎΠΎΠ±Ρ€Π°ΡœΠ°Ρ˜ сС користи. На ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Π°ΠΊΠ°:

Бтатистика Π½Π° страницата ΠΈ сопствСн ΠΌΠ°Π» простор Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅

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 страници Π΄Π½Π΅Π²Π½ΠΎ. Π‘Ρ€ΠΎΡ˜ΠΎΡ‚ Π½Π° Π±Π°Ρ€Π°Π½ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠΎ корисник Π²ΠΎ овој ΡΠ»ΡƒΡ‡Π°Ρ˜ зависи ΠΎΠ΄ Π΄ΠΎΠ΄Π°Π²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° Π½ΠΎΠ²ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ Π½Π° страницата.

Π‘ΠΈΡ‚Π΅ Π±Π°Ρ€Π°ΡšΠ° ΠΈ Π½ΠΈΠ²Π½ΠΈΡ‚Π΅ статуси

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, ΠΊΠ°Π΄Π΅ ΡˆΡ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Π°Ρ€ΠΎΡ‚ Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Π±Π°Ρ€Π°ΡšΠ΅Ρ‚ΠΎ
β€žΠ˜Π—Π‘Π•Π Π•Π’Π• Π‘ΠžΠˆΠ£Π’ΠΠŠΠ• (MAX(EVENT_DT), β€ž3600β€œ) КАКО ΠŸΠžΠ‘Π›Π•Π”Π•Π_EVENT_EPOCH ΠžΠ” FCT_ACCESS_USER_AGENT_DDβ€œ

Условот ќС сС Π²Ρ‡ΠΈΡ‚Π° само Ρ†Π΅Π» Π΄Π΅Π½: CAST(STG.EVENT_DT КАКО ΠšΠžΠ›ΠšΠ£ ΠšΠžΠ›ΠšΠ£) < strftime('%s', Π΄Π°Ρ‚ΡƒΠΌ ('сСга', 'ΠΏΠΎΡ‡Π΅Ρ‚ΠΎΠΊ Π½Π° Π΄Π΅Π½ΠΎΡ‚'))

Π‘Ρ€ΠΎΠ΅ΡšΠ΅Ρ‚ΠΎ страници ΠΈΠ»ΠΈ Π΄Π°Ρ‚ΠΎΡ‚Π΅ΠΊΠΈ сС Π²Ρ€ΡˆΠΈ Π½Π° ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π΅Π½ Π½Π°Ρ‡ΠΈΠ½, со ΠΏΡ€Π΅Π±Π°Ρ€ΡƒΠ²Π°ΡšΠ΅ Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ°.

Π˜Π·Π²Π΅ΡˆΡ‚Π°ΠΈ

Π’ΠΎ слоТСнитС систСми Π·Π° Π²ΠΈΠ·ΡƒΠ΅Π»ΠΈΠ·Π°Ρ†ΠΈΡ˜Π°, ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° сС создадС ΠΌΠ΅Ρ‚Π°-ΠΌΠΎΠ΄Π΅Π» Π±Π°Π·ΠΈΡ€Π°Π½ Π½Π° ΠΎΠ±Ρ˜Π΅ΠΊΡ‚ΠΈ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡ΠΊΠΈ Π΄Π° сС ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π° со Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈ ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π·Π° ΡΠΎΠ±ΠΈΡ€Π°ΡšΠ΅. На ΠΊΡ€Π°Ρ˜ΠΎΡ‚ Π½Π° ΠΊΡ€Π°ΠΈΡˆΡ‚Π°Ρ‚Π°, ситС ΠΏΡ€ΠΈΡΡ‚ΠΎΡ˜Π½ΠΈ Π°Π»Π°Ρ‚ΠΊΠΈ Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Π°Ρ‚ SQL Π±Π°Ρ€Π°ΡšΠ΅.

Π’ΠΎ овој ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ќС создадСмС Π³ΠΎΡ‚ΠΎΠ²ΠΈ SQL Π±Π°Ρ€Π°ΡšΠ° ΠΈ ќС Π³ΠΈ Π·Π°Ρ‡ΡƒΠ²Π°ΠΌΠ΅ ΠΊΠ°ΠΊΠΎ ΠΏΡ€Π΅Π³Π»Π΅Π΄ΠΈ Π²ΠΎ Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ - Ρ‚ΠΎΠ° сС ΠΈΠ·Π²Π΅ΡˆΡ‚Π°ΠΈ.

Π’ΠΈΠ·ΡƒΠ΅Π»ΠΈΠ·Π°Ρ†ΠΈΡ˜Π°

Π‘Π»Π΅Ρ„: ΠŸΡ€Π΅ΠΊΡ€Π°ΡΠ½ΠΈ Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ½ΠΈ Π²ΠΎ 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'
);

Алатката Сдноставно Π²ΠΈΠ·ΡƒΠ΅Π»ΠΈΠ·ΠΈΡ€Π° Ρ‚Π°Π±Π΅Π»ΠΈ со Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈ.

ИзлСз

ΠšΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ ја Π²Π΅Π±-Π°Π½Π°Π»ΠΈΠ·Π°Ρ‚Π° ΠΊΠ°ΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, написот Π³ΠΈ ΠΎΠΏΠΈΡˆΡƒΠ²Π° ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΈΡ‚Π΅ Π½Π΅ΠΎΠΏΡ…ΠΎΠ΄Π½ΠΈ Π·Π° ΠΈΠ·Π³Ρ€Π°Π΄Π±Π° Π½Π° ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π° Π·Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ. Како ΡˆΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π²ΠΈΠ΄ΠΈ ΠΎΠ΄ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅, Π½Π°Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½ΠΈΡ‚Π΅ Π°Π»Π°Ρ‚ΠΊΠΈ сС Π΄ΠΎΠ²ΠΎΠ»Π½ΠΈ Π·Π° Π΄Π»Π°Π±ΠΎΠΊΠ° Π°Π½Π°Π»ΠΈΠ·Π° ΠΈ Π²ΠΈΠ·ΡƒΠ΅Π»ΠΈΠ·Π°Ρ†ΠΈΡ˜Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅.

Π’ΠΎ ΠΈΠ΄Π½ΠΈΠ½Π°, ΠΊΠΎΡ€ΠΈΡΡ‚Π΅Ρ˜ΡœΠΈ Π³ΠΎ ΠΎΠ²Π° ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π΅ ΠΊΠ°ΠΊΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ќС сС ΠΎΠ±ΠΈΠ΄Π΅ΠΌΠ΅ Π΄Π° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°ΠΌΠ΅ Ρ‚Π°ΠΊΠ²ΠΈ структури ΠΊΠ°ΠΊΠΎ ΡˆΡ‚ΠΎ сС ΠΏΠΎΠ»Π΅ΠΊΠ° ΠΌΠ΅Π½ΡƒΠ²Π°ΡšΠ΅ Π½Π° Π΄ΠΈΠΌΠ΅Π½Π·ΠΈΠΈΡ‚Π΅, ΠΌΠ΅Ρ‚Π°ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅, Π½ΠΈΠ²ΠΎΠ°Ρ‚Π° Π½Π° Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΡ˜Π° ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ˜Π°Ρ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ ΠΎΠ΄ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ ΠΈΠ·Π²ΠΎΡ€ΠΈ.

Π˜ΡΡ‚ΠΎ Ρ‚Π°ΠΊΠ°, ајдС Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»Π½ΠΎ Π΄Π° ја Ρ€Π°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π½Π°Ρ˜Π΅Π΄Π½ΠΎΡΡ‚Π°Π²Π½Π°Ρ‚Π° Π°Π»Π°Ρ‚ΠΊΠ° Π·Π° ΡƒΠΏΡ€Π°Π²ΡƒΠ²Π°ΡšΠ΅ со процСситС Π½Π° ETL Π²Ρ€Π· основа Π½Π° Π΅Π΄Π½Π° Ρ‚Π°Π±Π΅Π»Π°.

Π”Π° сС ​​вратимС Π½Π° Ρ‚Π΅ΠΌΠ°Ρ‚Π° Π·Π° ΠΌΠ΅Ρ€Π΅ΡšΠ΅ Π½Π° ΠΊΠ²Π°Π»ΠΈΡ‚Π΅Ρ‚ΠΎΡ‚ Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈΡ‚Π΅ ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°ΡšΠ΅ Π½Π° овој процСс.

ЌС Π³ΠΈ ΠΏΡ€ΠΎΡƒΡ‡ΡƒΠ²Π°ΠΌΠ΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅ Π½Π° Ρ‚Π΅Ρ…Π½ΠΈΡ‡ΠΊΠ°Ρ‚Π° срСдина ΠΈ ΠΎΠ΄Ρ€ΠΆΡƒΠ²Π°ΡšΠ΅Ρ‚ΠΎ Π½Π° ΡΠΊΠ»Π°Π΄ΠΈΡˆΡ‚Π° Π½Π° ΠΏΠΎΠ΄Π°Ρ‚ΠΎΡ†ΠΈ, Π·Π° ΡˆΡ‚ΠΎ ќС ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚ΠΈΡ€Π°ΠΌΠ΅ сСрвСр Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡ€Π°ΡšΠ΅ со ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈ рСсурси, Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π±Π°Π·ΠΈΡ€Π°Π½ Π½Π° Raspberry Pi.

Π˜Π·Π²ΠΎΡ€: www.habr.com

Π”ΠΎΠ΄Π°Π΄Π΅Ρ‚Π΅ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€