рд╕рд╛рдЗрдЯ рдЖрдХрдбреЗрд╡рд╛рд░реА рдЖрдгрд┐ рддреБрдордЪреЗ рд╕реНрд╡рддрдГрдЪреЗ рдЫреЛрдЯреЗ рд╕реНрдЯреЛрд░реЗрдЬ

рд╡реЗрдмрд▓рд╛рдпрдЭрд░ рдЖрдгрд┐ рдЧреБрдЧрд▓ рдЕреЕрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕рдиреЗ рдорд▓рд╛ рдЕрдиреЗрдХ рд╡рд░реНрд╖рд╛рдВрдкрд╛рд╕реВрди рд╡реЗрдмрд╕рд╛рдЗрдЯреНрд╕рд╡рд░ рдХрд╛рдп рдЪрд╛рд▓рд▓реЗ рдЖрд╣реЗ рдпрд╛рдмрджреНрджрд▓ рдЕрдВрддрд░реНрджреГрд╖реНрдЯреА рдорд┐рд│рд╡рд┐рдгреНрдпрд╛рдд рдорджрдд рдХреЗрд▓реА рдЖрд╣реЗ. рдЖрддрд╛ рдорд▓рд╛ рд╕рдордЬрд▓реЗ рдЖрд╣реЗ рдХреА рддреЗ рдлрд╛рд░ рдХрдореА рдЙрдкрдпреБрдХреНрдд рдорд╛рд╣рд┐рддреА рджреЗрддрд╛рдд. рддреБрдордЪреНтАНрдпрд╛ access.log рдлрд╛рдЗрд▓рдордзреНтАНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдЕрд╕рд▓реНтАНрдпрд╛рдиреЗ, рдЖрдХрдбреЗрд╡рд╛рд░реА рд╕рдордЬрдгреЗ рдЖрдгрд┐ рд╕реНтАНрдХреНтАНрд▓рд╛рдЗрдЯ, html, sql рднрд╛рд╖рд╛ рдЖрдгрд┐ рд╕реНрдХреНрд░рд┐рдкреНтАНрдЯрд┐рдВрдЧ рдкреНрд░реЛрдЧреНрд░реЕрдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдпрд╛рдВрд╕рд╛рд░рдЦреА рдореВрд▓рднреВрдд рд╕рд╛рдзрдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдгреЗ рдЦреВрдк рд╕реЛрдкреЗ рдЖрд╣реЗ.

рд╡реЗрдмрд▓рд╛рдпрдЭрд░рд╕рд╛рдареА рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рд╕рд░реНрд╡реНрд╣рд░рдЪреА 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

рдкрд╣рд┐рд▓реЗ рджреЛрди рдмреЙрдЯреНрд╕ рдЯреЗрдмрд▓рд╡рд░реВрди рдЧрд╛рдпрдм рдЭрд╛рд▓реЗ рдЖрдгрд┐ рдПрдордПрд╕ рд░реЛрдмреЛрдЯ рдкрд╣рд┐рд▓реНрдпрд╛ рдУрд│реАрдВрд╡рд░реВрди рдЦрд╛рд▓реА рд╕рд░рдХрд▓реЗ.

рд╕рд░реНрд╡рд╛рдд рдореЛрдареНрдпрд╛ рдХреНрд░рд┐рдпрд╛рдХрд▓рд╛рдкрд╛рдЪрд╛ рджрд┐рд╡рд╕ рдЖрдгрд┐ рд╡реЗрд│

рдЯреНрд░реЕрдлрд┐рдХрдордзреНрдпреЗ рдЪрдв-рдЙрддрд╛рд░ рджрд┐рд╕рдд рдЖрд╣реЗрдд. рддреНрдпрд╛рдВрдЪрд╛ рддрдкрд╢реАрд▓рд╡рд╛рд░ рдЕрднреНрдпрд╛рд╕ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдШрдЯрдиреЗрдЪреА рд╡реЗрд│ рд╣рд╛рдпрд▓рд╛рдЗрдЯ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЖрдгрд┐ рд╡реЗрд│ рдореЛрдЬрдгреНрдпрд╛рдЪреЗ рд╕рд░реНрд╡ рддрд╛рд╕ рдЖрдгрд┐ рджрд┐рд╡рд╕ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдирд╛рд╣реА. рддрдкрд╢реАрд▓рд╡рд╛рд░ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕рд▓реНрдпрд╛рд╕ рд▓реЙрдЧ рдлрд╛рдЗрд▓рдордзреНрдпреЗ рд╡реИрдпрдХреНрддрд┐рдХ рд╡рд┐рдирдВрддреНрдпрд╛ рд╢реЛрдзрдгреЗ рд╣реЗ рд╕реЛрдкреЗ рдХрд░реЗрд▓.

рд╕рд╛рдЗрдЯ рдЖрдХрдбреЗрд╡рд╛рд░реА рдЖрдгрд┐ рддреБрдордЪреЗ рд╕реНрд╡рддрдГрдЪреЗ рдЫреЛрдЯреЗ рд╕реНрдЯреЛрд░реЗрдЬ

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 рд▓рд╛ рд╡рд┐рдирдВрддреА рд╕рд░реНрд╡реНрд╣рд░рджреНрд╡рд╛рд░реЗ рдкреБрдирд░реНрд▓реЗрдЦрди рд╡рд┐рдирдВрддреНрдпрд╛рдВрдЪреЗ рдирд┐рдпрдо рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░реВрди, рддреБрдореНрд╣реА рдЕрд╢рд╛ рд╡рд┐рдирдВрддреНрдпрд╛рдВрдирд╛ рд╕рд░реНрд╡реНрд╣рд░рдЪреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░реВ рд╢рдХрддрд╛ рдЖрдгрд┐ рддреНрдпрд╛рдВрдирд╛ рдкреНрд░рд╛рд░рдВрдн рдкреГрд╖реНрдард╛рд╡рд░ рдкрд╛рдард╡реВ рд╢рдХрддрд╛.

рддрд░, рд╕рд░реНрд╡реНрд╣рд░ рд▓реЙрдЧ рдлрд╛рдЗрд▓рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдХрд╛рд╣реА рд╕реЛрдкреНрдпрд╛ рдЕрд╣рд╡рд╛рд▓ рд╕рд╛рдЗрдЯрд╡рд░ рдХрд╛рдп рдШрдбрдд рдЖрд╣реЗ рдпрд╛рдЪреЗ рдПрдХ рдкреВрд░реНрдг рдЪрд┐рддреНрд░ рджреЗрддрд╛рдд.

рдорд╛рд╣рд┐рддреА рдХрд╢реА рдорд┐рд│рд╡рд╛рдпрдЪреА?

sqlite рдбреЗрдЯрд╛рдмреЗрд╕ рдкреБрд░реЗрд╕рд╛ рдЖрд╣реЗ. рдЪрд▓рд╛ рдЯреЗрдмрд▓ рдмрдирд╡реВ: рд▓реЙрдЧрд┐рдВрдЧ рдИрдЯреАрдПрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдВрд╕рд╛рдареА рд╕рд╣рд╛рдпрдХ.

рд╕рд╛рдЗрдЯ рдЖрдХрдбреЗрд╡рд╛рд░реА рдЖрдгрд┐ рддреБрдордЪреЗ рд╕реНрд╡рддрдГрдЪреЗ рдЫреЛрдЯреЗ рд╕реНрдЯреЛрд░реЗрдЬ

рдЯреЗрдмрд▓ рд╕реНрдЯреЗрдЬ рдЬрд┐рдереЗ рдЖрдкрдг 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 INTEGEER) > $param_epoch_from, рдЬреЗрдереЗ рдкреЕрд░рд╛рдореАрдЯрд░ рд╡рд┐рдирдВрддреАрдЪрд╛ рдкрд░рд┐рдгрд╛рдо рдЖрд╣реЗ
'FCT_ACCESS_USER_AGENT_DD рдордзреВрди LAST_EVENT_EPOCH рдореНрд╣рдгреВрди COALESCE(MAX(EVENT_DT), '3600') рдирд┐рд╡рдбрд╛'

рдЕрдЯ рдлрдХреНрдд рдкреВрд░реНрдг рджрд┐рд╡рд╕ рд▓реЛрдб рд╣реЛрдИрд▓: 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'
);

╨Ш╨╜╤Б╤В╤А╤Г╨╝╨╡╨╜╤В ╨┐╤А╨╛╤Б╤В╨╛ ╨▓╨╕╨╖╤Г╨░╨╗╨╕╨╖╨╕╤А╤Г╨╡╤В ╤В╨░╨▒╨╗╨╕╤Ж╤Л ╤А╨╡╨╖╤Г╨╗╤М╤В╨░╤В╨╛╨▓.

рдирд┐рд╖реНрдХрд░реНрд╖

рдЙрджрд╛рд╣рд░рдг рдореНрд╣рдгреВрди рд╡реЗрдм рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди, рд▓реЗрдЦ рдбреЗрдЯрд╛ рд╡реЗрдЕрд░рд╣рд╛рдКрд╕ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдпрдВрддреНрд░рдгреЗрдЪреЗ рд╡рд░реНрдгрди рдХрд░рддреЛ. рдкрд░рд┐рдгрд╛рдорд╛рдВрд╡рд░реВрди рдкрд╛рд╣рд┐рд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ, рдбреЗрдЯрд╛рдЪреЗ рд╕рдЦреЛрд▓ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЖрдгрд┐ рд╡реНрд╣рд┐рдЬреНрдпреБрдЕрд▓рд╛рдпрдЭреЗрд╢рдирд╕рд╛рдареА рд╕рд░реНрд╡рд╛рдд рд╕реЛрдкреА рд╕рд╛рдзрдиреЗ рдкреБрд░реЗрд╕реЗ рдЖрд╣реЗрдд.

рднрд╡рд┐рд╖реНрдпрд╛рдд, рдЙрджрд╛рд╣рд░рдг рдореНрд╣рдгреВрди рдпрд╛ рднрд╛рдВрдбрд╛рд░рд╛рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди, рдЖрдореНрд╣реА рд╣рд│реВрд╣рд│реВ рдмрджрд▓рдгрд╛рд░реА рдкрд░рд┐рдорд╛рдгреЗ, рдореЗрдЯрд╛рдбреЗрдЯрд╛, рдПрдХрддреНрд░реАрдХрд░рдг рдкрд╛рддрд│реА рдЖрдгрд┐ рд╡рд┐рд╡рд┐рдз рд╕реНрддреНрд░реЛрддрд╛рдВрдХрдбреВрди рдбреЗрдЯрд╛рдЪреЗ рдПрдХрддреНрд░реАрдХрд░рдг рдпрд╛рд╕рд╛рд░рдЦреНрдпрд╛ рд╕рдВрд░рдЪрдирд╛ рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВ.

рддрд╕реЗрдЪ, рдПрдХрд╛рдЪ рдЯреЗрдмрд▓рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдИрдЯреАрдПрд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рд╕рд░реНрд╡рд╛рдд рд╕реЛрдкреНрдпрд╛ рд╕рд╛рдзрдирд╛рдХрдбреЗ рдЬрд╡рд│реВрди рдкрд╛рд╣реВ.

рдЪрд▓рд╛ рдбреЗрдЯрд╛ рдЧреБрдгрд╡рддреНрддрд╛ рдореЛрдЬрдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрд╡рдпрдВрдЪрд▓рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рд╡рд┐рд╖рдпрд╛рд╡рд░ рдкрд░рдд рдЬрд╛рдКрдпрд╛.

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

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛