Бтатистика Π½Π° сайта ΠΈ Π²Π°ΡˆΠ΅Ρ‚ΠΎ собствСно ΠΌΠ°Π»ΠΊΠΎ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅

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, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚ΡŠΡ€ΡŠΡ‚ Π΅ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΡŠΡ‚ ΠΎΡ‚ заявката
'SELECT COALESCE(MAX(EVENT_DT), '3600') AS LAST_EVENT_EPOCH FROM FCT_ACCESS_USER_AGENT_DD'

УсловиСто Ρ‰Π΅ Π·Π°Ρ€Π΅Π΄ΠΈ само цСлия Π΄Π΅Π½: CAST(STG.EVENT_DT AS INTEGER) < strftime('%s', date('now', 'start of day'))

Π‘Ρ€ΠΎΠ΅Π½Π΅Ρ‚ΠΎ Π½Π° страници ΠΈΠ»ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ сС ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° ΠΏΠΎ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π΅Π½ Π½Π°Ρ‡ΠΈΠ½, Ρ‡Ρ€Π΅Π· Ρ‚ΡŠΡ€ΡΠ΅Π½Π΅ Π½Π° Ρ‚ΠΎΡ‡ΠΊΠ°.

ΠžΡ‚Ρ‡Π΅Ρ‚ΠΈ

Π’ слоТни систСми Π·Π° визуализация Π΅ възмоТно Π΄Π° сС създадС ΠΌΠ΅Ρ‚Π°-ΠΌΠΎΠ΄Π΅Π», Π±Π°Π·ΠΈΡ€Π°Π½ Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈ Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, Π΄ΠΈΠ½Π°ΠΌΠΈΡ‡Π½ΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Ρ„ΠΈΠ»Ρ‚Ρ€ΠΈ ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π° Π·Π° Π°Π³Ρ€Π΅Π³ΠΈΡ€Π°Π½Π΅. Π’ ΠΊΡ€Π°ΠΉΠ½Π° смСтка всички ΠΏΡ€ΠΈΠ»ΠΈΡ‡Π½ΠΈ инструмСнти Π³Π΅Π½Π΅Ρ€ΠΈΡ€Π°Ρ‚ 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

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€