рд╕рд╛рдЗрдЯ рдЖрдБрдХрдбрд╝реЗ рдФрд░ рдЖрдкрдХрд╛ рдЕрдкрдирд╛ рдЫреЛрдЯрд╛ рднрдВрдбрд╛рд░рдг

рд╡реЗрдмрд▓рд╛рдЗрдЬрд╝рд░ рдФрд░ рдЧреВрдЧрд▓ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдиреЗ рдореБрдЭреЗ рдХрдИ рд╡рд░реНрд╖реЛрдВ рд╕реЗ рд╡реЗрдмрд╕рд╛рдЗрдЯреЛрдВ рдкрд░ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╣рд╛рд╕рд┐рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХреА рд╣реИред рдЕрдм рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рд╡реЗ рдмрд╣реБрдд рдХрдо рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдЖрдкрдХреА рдПрдХреНрд╕реЗрд╕.рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛрдиреЗ рд╕реЗ, рдЖрдВрдХрдбрд╝реЛрдВ рдХреЛ рд╕рдордЭрдирд╛ рдФрд░ рдПрд╕рдХреНрд▓рд╛рдЗрдЯ, рдПрдЪрдЯреАрдПрдордПрд▓, рдПрд╕рдХреНрдпреВрдПрд▓ рднрд╛рд╖рд╛ рдФрд░ рдХрд┐рд╕реА рднреА рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдЬреИрд╕реЗ рдХрд╛рдлреА рдмреБрдирд┐рдпрд╛рджреА рдЯреВрд▓ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИред

рд╡реЗрдмрд▓рд╛рдЗрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рд╕рд░реНрд╡рд░ рдХреА рдПрдХреНрд╕реЗрд╕.рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рд░ рдФрд░ рдирдВрдмрд░ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рд╕реЗ рдХреЗрд╡рд▓ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреА рдХреБрд▓ рдорд╛рддреНрд░рд╛ рд╕реНрдкрд╖реНрдЯ рд╣реЛрддреА рд╣реИ:

рд╕рд╛рдЗрдЯ рдЖрдБрдХрдбрд╝реЗ рдФрд░ рдЖрдкрдХрд╛ рдЕрдкрдирд╛ рдЫреЛрдЯрд╛ рднрдВрдбрд╛рд░рдг
рд╕рд╛рдЗрдЯ рдЖрдБрдХрдбрд╝реЗ рдФрд░ рдЖрдкрдХрд╛ рдЕрдкрдирд╛ рдЫреЛрдЯрд╛ рднрдВрдбрд╛рд░рдг
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

рдкрд╣рд▓реЗ рджреЛ рдмреЙрдЯ рдЯреЗрдмрд▓ рд╕реЗ рдЧрд╛рдпрдм рд╣реЛ рдЧрдП, рдФрд░ рдПрдордПрд╕ рд░реЛрдмреЛрдЯ рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐рдпреЛрдВ рд╕реЗ рдиреАрдЪреЗ рдЪрд▓реЗ рдЧрдПред

рд╕рдмрд╕реЗ рдмрдбрд╝реА рдЧрддрд┐рд╡рд┐рдзрд┐ рдХрд╛ рджрд┐рди рдФрд░ рд╕рдордп

рдЯреНрд░реИрдлрд┐рдХ рдореЗрдВ рдЙрдЫрд╛рд▓ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ. рдЙрдирдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрдирдХреА рдШрдЯрдирд╛ рдХреЗ рд╕рдордп рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдФрд░ рд╕рдордп рдорд╛рдк рдХреЗ рд╕рднреА рдШрдВрдЯреЛрдВ рдФрд░ рджрд┐рдиреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рддреЛ рдЗрд╕рд╕реЗ рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдвреВрдВрдврдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред

рд╕рд╛рдЗрдЯ рдЖрдБрдХрдбрд╝реЗ рдФрд░ рдЖрдкрдХрд╛ рдЕрдкрдирд╛ рдЫреЛрдЯрд╛ рднрдВрдбрд╛рд░рдг

SQL рд░рд┐рдкреЛрд░реНрдЯ рдХреНрд╡реЗрд░реА

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

рд╣рдо рдЪрд╛рд░реНрдЯ рдкрд░ рдкрд╣рд▓реЗ рджрд┐рди рдХреЗ рд╕рдмрд╕реЗ рд╕рдХреНрд░рд┐рдп рдШрдВрдЯреЗ 11, 14 рдФрд░ 20 рджреЗрдЦрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЕрдЧрд▓реЗ рджрд┐рди 13:XNUMX рдмрдЬреЗ рдмреЙрдЯ рд╕рдХреНрд░рд┐рдп рдереЗред

рд╕рдкреНрддрд╛рд╣ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдФрд╕рдд рджреИрдирд┐рдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЧрддрд┐рд╡рд┐рдзрд┐

рд╣рдордиреЗ рдЧрддрд┐рд╡рд┐рдзрд┐ рдФрд░ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдЪреАрдЬрд╝реЛрдВ рдХреЛ рдереЛрдбрд╝рд╛ рд╕реБрд▓рдЭрд╛ рд▓рд┐рдпрд╛ рд╣реИред рдЕрдЧрд▓рд╛ рдкреНрд░рд╢реНрди рд╕реНрд╡рдпрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рдХрд╛ рдерд╛ред рдРрд╕реЗ рдЖрдБрдХрдбрд╝реЛрдВ рдХреЗ рд▓рд┐рдП, рд▓рдВрдмреА рдПрдХрддреНрд░реАрдХрд░рдг рдЕрд╡рдзрд┐, рдЬреИрд╕реЗ рдХрд┐ рдПрдХ рд╕рдкреНрддрд╛рд╣, рд╡рд╛рдВрдЫрдиреАрдп рд╣реИред

рд╕рд╛рдЗрдЯ рдЖрдБрдХрдбрд╝реЗ рдФрд░ рдЖрдкрдХрд╛ рдЕрдкрдирд╛ рдЫреЛрдЯрд╛ рднрдВрдбрд╛рд░рдг

SQL рд░рд┐рдкреЛрд░реНрдЯ рдХреНрд╡реЗрд░реА

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

рд╕рд╛рдкреНрддрд╛рд╣рд┐рдХ рдЖрдВрдХрдбрд╝реЗ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдФрд╕рддрди рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рддрд┐рджрд┐рди 1,6 рдкреЗрдЬ рдЦреЛрд▓рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкреНрд░рддрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрд░реЛрдзрд┐рдд рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕рд╛рдЗрдЯ рдкрд░ рдирдИ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред

рд╕рднреА рдЕрдиреБрд░реЛрдз рдФрд░ рдЙрдирдХреА рд╕реНрдерд┐рддрд┐рдпрд╛рдБ

рд╡реЗрдмрд▓рд╛рдЗрдЬрд╝рд░ рд╣рдореЗрд╢рд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкреЗрдЬ рдХреЛрдб рджрд┐рдЦрд╛рддрд╛ рдерд╛ рдФрд░ рдореИрдВ рд╣рдореЗрд╢рд╛ рд╕рдлрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред

рд╕рд╛рдЗрдЯ рдЖрдБрдХрдбрд╝реЗ рдФрд░ рдЖрдкрдХрд╛ рдЕрдкрдирд╛ рдЫреЛрдЯрд╛ рднрдВрдбрд╛рд░рдг

SQL рд░рд┐рдкреЛрд░реНрдЯ рдХреНрд╡реЗрд░реА

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

рд░рд┐рдкреЛрд░реНрдЯ рдЕрдиреБрд░реЛрдз рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреА рд╣реИ, рдХреНрд▓рд┐рдХ (рд╣рд┐рдЯ) рдирд╣реАрдВ, LINE_CNT рдХреЗ рд╡рд┐рдкрд░реАрдд, REQUEST_CNT рдореАрдЯреНрд░рд┐рдХ рдХреА рдЧрдгрдирд╛ COUNT(DISTINCT STG.REQUEST_NK) рдХреЗ рд░реВрдк рдореЗрдВ рдХреА рдЬрд╛рддреА рд╣реИред рд▓рдХреНрд╖реНрдп рдкреНрд░рднрд╛рд╡реА рдШрдЯрдирд╛рдУрдВ рдХреЛ рджрд┐рдЦрд╛рдирд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, MS рдмреЙрдЯ рджрд┐рди рдореЗрдВ рд╕реИрдХрдбрд╝реЛрдВ рдмрд╛рд░ robots.txt рдлрд╝рд╛рдЗрд▓ рдХреЛ рдкреЛрд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдРрд╕реЗ рдкреЛрд▓ рдХреЛ рдПрдХ рдмрд╛рд░ рдЧрд┐рдирд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдЖрдкрдХреЛ рдЧреНрд░рд╛рдлрд╝ рдореЗрдВ рдЙрдЫрд╛рд▓ рдХреЛ рд╕реБрдЪрд╛рд░реВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЧреНрд░рд╛рдлрд╝ рд╕реЗ рдЖрдк рдХрдИ рддреНрд░реБрдЯрд┐рдпрд╛рдБ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ - рдпреЗ рдЕрд╕реНрддрд┐рддреНрд╡рд╣реАрди рдкреГрд╖реНрда рд╣реИрдВред рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛ рдкрд░рд┐рдгрд╛рдо рджреВрд░рд╕реНрде рдкреГрд╖реНрдареЛрдВ рд╕реЗ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдерд╛ред

рдЦрд╝рд░рд╛рдм рдЕрдиреБрд░реЛрдз

рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рд╡рд┐рд╕реНрддреГрдд рдЖрдБрдХрдбрд╝реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рд╛рдЗрдЯ рдЖрдБрдХрдбрд╝реЗ рдФрд░ рдЖрдкрдХрд╛ рдЕрдкрдирд╛ рдЫреЛрдЯрд╛ рднрдВрдбрд╛рд░рдг

SQL рд░рд┐рдкреЛрд░реНрдЯ рдХреНрд╡реЗрд░реА

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

рдЗрд╕ рд╕реВрдЪреА рдореЗрдВ рд╕рднреА рдХреЙрд▓ рднреА рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреА, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, /wp-login.php рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз, рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рдирд┐рдпрдореЛрдВ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░рдХреЗ, рдЖрдк рдРрд╕реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдкрд░ рд╕рд░реНрд╡рд░ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рд░рдВрдн рдкреГрд╖реНрда рдкрд░ рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕рд▓рд┐рдП, рд╕рд░реНрд╡рд░ рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдХреБрдЫ рд╕рд░рд▓ рд░рд┐рдкреЛрд░реНрдЯреЗрдВ рд╕рд╛рдЗрдЯ рдкрд░ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рдХреА рдкреВрд░реА рддрд╕реНрд╡реАрд░ рджреЗрддреА рд╣реИрдВред

рдЬрд╛рдирдХрд╛рд░реА рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ?

рдПрдХ рдПрд╕рдХреНрд▓рд╛рдЗрдЯ рдбреЗрдЯрд╛рдмреЗрд╕ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ. рдЖрдЗрдП рдЯреЗрдмрд▓ рдмрдирд╛рдПрдВ: рдИрдЯреАрдПрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд▓реЙрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрдХред

рд╕рд╛рдЗрдЯ рдЖрдБрдХрдбрд╝реЗ рдФрд░ рдЖрдкрдХрд╛ рдЕрдкрдирд╛ рдЫреЛрдЯрд╛ рднрдВрдбрд╛рд░рдг

рддрд╛рд▓рд┐рдХрд╛ рдЪрд░рдг рдЬрд╣рд╛рдВ рд╣рдо PHP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓реЗрдВ рд▓рд┐рдЦреЗрдВрдЧреЗред рджреЛ рд╕рдордЧреНрд░ рддрд╛рд▓рд┐рдХрд╛рдПрдБ. рдЖрдЗрдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдЬреЗрдВрдЯреЛрдВ рдФрд░ рдЕрдиреБрд░реЛрдз рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдкрд░ рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рджреИрдирд┐рдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдПрдВред рдЕрдиреБрд░реЛрдзреЛрдВ, рд╕реНрдерд┐рддрд┐ рд╕рдореВрд╣реЛрдВ рдФрд░ рдПрдЬреЗрдВрдЯреЛрдВ рдкрд░ рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐ рдШрдВрдЯрд╛ред рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдорд╛рдк рдХреА рдЪрд╛рд░ рддрд╛рд▓рд┐рдХрд╛рдПрдБред

рдкрд░рд┐рдгрд╛рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрдмрдВрдзрдкрд░рдХ рдореЙрдбрд▓ рд╣реИ:

рдбреЗрдЯрд╛ рдореЙрдбрд▓рд╕рд╛рдЗрдЯ рдЖрдБрдХрдбрд╝реЗ рдФрд░ рдЖрдкрдХрд╛ рдЕрдкрдирд╛ рдЫреЛрдЯрд╛ рднрдВрдбрд╛рд░рдг

SQLite рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ:

рдбреАрдбреАрдПрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдирд┐рд░реНрдорд╛рдг

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);

рдЕрд╡рд╕реНрдерд╛

рдПрдХреНрд╕реЗрд╕.рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рднреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкрдврд╝рдирд╛, рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдФрд░ рд▓рд┐рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрд╣ рдпрд╛ рддреЛ рд╕реАрдзреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд┐рдВрдЧ рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╛ рдПрд╕рдХреНрд▓рд╛рдЗрдЯ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рд╕реНрд╡рд░реВрдк:

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

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдЬреЗрдВрдЯ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкреНрд░рд╕рд╛рд░ рдореЗрдВ рдмреЙрдЯ рддрд░реНрдХ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрд╕рдХреНрдпреВрдПрд▓ рд╕реНрдирд┐рдкреЗрдЯ:


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

рдПрд╕рдХреНрд▓рд╛рдЗрдЯ рдбреЗрдЯрд╛рдмреЗрд╕ рдЖрдкрдХреЛ рдЬрдЯрд┐рд▓ рдкреНрд░рд╢реНрди рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╕рд╛рде рдореЗрдВ рдбреЗрдЯрд╛ рдФрд░ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рддреИрдпрд╛рд░реА рд╢рд╛рдорд┐рд▓ рд╣реИред рдореБрдЦреНрдп рдХреНрд╡реЗрд░реА рдЖрдпрд╛рдореЛрдВ рдХреЗ рд╕рднреА рд╕рдВрджрд░реНрдн рдПрдХрддреНрд░ рдХрд░рддреА рд╣реИред

рд╢рд░реНрдд рдЗрддрд┐рд╣рд╛рд╕ рдХреЛ рджреЛрдмрд╛рд░рд╛ рд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧреА: CAST(STG.EVENT_DT AS INTEGER) > $param_epoch_from, рдЬрд╣рд╛рдВ рдкреИрд░рд╛рдореАрдЯрд░ рдЕрдиреБрд░реЛрдз рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ
'FCT_ACCESS_USER_AGENT_DD рд╕реЗ LAST_EVENT_EPOCH рдХреЗ рдЕрдиреБрд╕рд╛рд░ COALESCE(MAX(EVENT_DT), '3600') рдЪреБрдиреЗрдВ'

рд╢рд░реНрдд рдХреЗрд╡рд▓ рдкреВрд░реЗ рджрд┐рди рд▓реЛрдб рд╣реЛрдЧреА: CAST(STG.EVENT_DT AS INTEGER) < strftime('%s', date('now', 'start of theday'))

рдкреГрд╖реНрдареЛрдВ рдпрд╛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЧрд┐рдирддреА рдПрдХ рдмрд┐рдВрджреБ рдХреА рдЦреЛрдЬ рдХрд░рдХреЗ, рдЖрджрд┐рдо рддрд░реАрдХреЗ рд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИред

рд░рд┐рдкреЛрд░реНрдЯ

рдЬрдЯрд┐рд▓ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ, рдбреЗрдЯрд╛рдмреЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдореЗрдЯрд╛-рдореЙрдбрд▓ рдмрдирд╛рдирд╛, рдлрд╝рд┐рд▓реНрдЯрд░ рдФрд░ рдПрдХрддреНрд░реАрдХрд░рдг рдирд┐рдпрдореЛрдВ рдХреЛ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдЕрдВрддрддрдГ, рд╕рднреА рдЕрдЪреНрдЫреЗ рдЙрдкрдХрд░рдг рдПрдХ SQL рдХреНрд╡реЗрд░реА рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рддреИрдпрд╛рд░ SQL рдХреНрд╡реЗрд░реАрдЬрд╝ рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╡реНрдпреВ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВрдЧреЗ - рдпреЗ рд░рд┐рдкреЛрд░реНрдЯ рд╣реИрдВред

рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди

рдмреНрд▓рдлрд╝: рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕реБрдВрджрд░ рдЧреНрд░рд╛рдлрд╝ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдЯреВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, PHP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рднреА рд░рд┐рдкреЛрд░реНрдЯреЛрдВ рдХреЛ рдкрдврд╝рдирд╛ рдФрд░ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ html рдлрд╝рд╛рдЗрд▓ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред

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

рдЙрдкрдХрд░рдг рдХреЗрд╡рд▓ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░рддрд╛ рд╣реИред

рдЙрддреНрдкрд╛рджрди

рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рд╡реЗрдм рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд▓реЗрдЦ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рддрдВрддреНрд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдкрд░рд┐рдгрд╛рдореЛрдВ рд╕реЗ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдбреЗрдЯрд╛ рдХреЗ рдЧрд╣рди рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдФрд░ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЙрдкрдХрд░рдг рдкрд░реНрдпрд╛рдкреНрдд рд╣реИрдВред

рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдЗрд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдзреАрд░реЗ-рдзреАрд░реЗ рдмрджрд▓рддреЗ рдЖрдпрд╛рдо, рдореЗрдЯрд╛рдбреЗрдЯрд╛, рдПрдХрддреНрд░реАрдХрд░рдг рд╕реНрддрд░ рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд╕реНрд░реЛрддреЛрдВ рд╕реЗ рдбреЗрдЯрд╛ рдХреЗ рдПрдХреАрдХрд░рдг рдЬреИрд╕реА рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдЗрдП рдПрдХрд▓ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдИрдЯреАрдПрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рдЯреВрд▓ рдкрд░ рдХрд░реАрдм рд╕реЗ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред

рдЖрдЗрдП рдбреЗрдЯрд╛ рдЧреБрдгрд╡рддреНрддрд╛ рдорд╛рдкрдиреЗ рдФрд░ рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд╡рд┐рд╖рдп рдкрд░ рд╡рд╛рдкрд╕ рдЖрдПрдВред

рд╣рдо рддрдХрдиреАрдХреА рд╡рд╛рддрд╛рд╡рд░рдг рдФрд░ рдбреЗрдЯрд╛ рднрдВрдбрд╛рд░рдг рдХреЗ рд░рдЦрд░рдЦрд╛рд╡ рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдо рдиреНрдпреВрдирддрдо рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рднрдВрдбрд╛рд░рдг рд╕рд░реНрд╡рд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░рд╛рд╕реНрдкрдмреЗрд░реА рдкрд╛рдИ рдкрд░ рдЖрдзрд╛рд░рд┐рддред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ