рд╕рд╛рдЗрдЯ рддрдереНрдпрд╛рдЩреНрдХ рд░ рдЖрдлреНрдиреЛ рд╕рд╛рдиреЛ рднрдгреНрдбрд╛рд░рдг

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

Webalizer рдХреЛ рд▓рд╛рдЧрд┐ рдбрд╛рдЯрд╛ рд╕реНрд░реЛрдд рд╕рд░реНрднрд░рдХреЛ access.log рдлрд╛рдЗрд▓ рд╣реЛред рдпреЛ рдпрд╕рдХреЛ рдмрд╛рд░ рд░ рдирдореНрдмрд░рд╣рд░реВ рдЬрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ, рдЬрд╕рдмрд╛рдЯ рдЯреНрд░рд╛рдлрд┐рдХрдХреЛ рдХреБрд▓ рдорд╛рддреНрд░рд╛ рдорд╛рддреНрд░ рд╕реНрдкрд╖реНрдЯ рдЫ:

рд╕рд╛рдЗрдЯ рддрдереНрдпрд╛рдЩреНрдХ рд░ рдЖрдлреНрдиреЛ рд╕рд╛рдиреЛ рднрдгреНрдбрд╛рд░рдг
рд╕рд╛рдЗрдЯ рддрдереНрдпрд╛рдЩреНрдХ рд░ рдЖрдлреНрдиреЛ рд╕рд╛рдиреЛ рднрдгреНрдбрд╛рд░рдг
рдЧреБрдЧрд▓ рдПрдирд╛рд▓рд┐рдЯрд┐рдХреНрд╕ рдЬрд╕реНрддрд╛ рдЙрдкрдХрд░рдгрд╣рд░реВрд▓реЗ рд▓реЛрдб рдЧрд░рд┐рдПрдХреЛ рдкреГрд╖реНрдардмрд╛рдЯреИ рдбрд╛рдЯрд╛ рд╕рдЩреНрдХрд▓рди рдЧрд░реНрджрдЫред рддрд┐рдиреАрд╣рд░реВрд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдХреЗрд╣реА рд░реЗрдЦрд╛рдЪрд┐рддреНрд░ рд░ рд░реЗрдЦрд╛рд╣рд░реВ рджреЗрдЦрд╛рдЙрдБрдЫрдиреН, рдЬрд╕рдХреЛ рдЖрдзрд╛рд░рдорд╛ рд╕рд╣реА рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓реНрди рдЧрд╛рд╣реНрд░реЛ рд╣реБрдиреНрдЫред рд╕рд╛рдпрдж рдердк рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдиреБрдкрд░реНрдереНрдпреЛ? рдерд╛рд╣рд╛ рдЫреИрдиред

рддреНрдпрд╕реЛрднрдП, рдо рд╡реЗрдмрд╕рд╛рдЗрдЯ рдЖрдЧрдиреНрддреБрдХ рддрдереНрдпрд╛рдЩреНрдХрдорд╛ рдХреЗ рд╣реЗрд░реНрди рдЪрд╛рд╣рдиреНрдЫреБ?

рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рд░ рдмреЛрдЯ рдЯреНрд░рд╛рдлрд┐рдХ

рдЕрдХреНрд╕рд░ рд╕рд╛рдЗрдЯ рдЯреНрд░рд╛рдлрд┐рдХ рд╕реАрдорд┐рдд рдЫ рд░ рдпреЛ рдХрддрд┐ рдЙрдкрдпреЛрдЧреА рдЯреНрд░рд╛рдлрд┐рдХ рдкреНрд░рдпреЛрдЧ рднрдЗрд░рд╣реЗрдХреЛ рдЫ рд╣реЗрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓рд╛рдЧреА, рдпреЛ рдЬрд╕реНрддреИ:

рд╕рд╛рдЗрдЯ рддрдереНрдпрд╛рдЩреНрдХ рд░ рдЖрдлреНрдиреЛ рд╕рд╛рдиреЛ рднрдгреНрдбрд╛рд░рдг

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 рдкреГрд╖реНрдард╣рд░реВ рдЦреЛрд▓реНрдЫрдиреНред рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛ рдкреНрд░рддрд┐ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрд░реЛрдз рдЧрд░рд┐рдПрдХрд╛ рдлрд╛рдЗрд▓рд╣рд░реВрдХреЛ рд╕рдВрдЦреНрдпрд╛ рд╕рд╛рдЗрдЯрдорд╛ рдирдпрд╛рдБ рдлрд╛рдЗрд▓рд╣рд░реВрдХреЛ рдердкрдорд╛ рдирд┐рд░реНрднрд░ рдЧрд░реНрджрдЫред

рд╕рдмреИ рдЕрдиреБрд░реЛрдз рд░ рддрд┐рдиреАрд╣рд░реВрдХреЛ рд╕реНрдерд┐рддрд┐

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 INTEGEER) > $param_epoch_from, рдЬрд╣рд╛рдБ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдЕрдиреБрд░реЛрдзрдХреЛ рдкрд░рд┐рдгрд╛рдо рд╣реЛ
FCT_ACCESS_USER_AGENT_DD рдмрд╛рдЯ LAST_EVENT_EPOCH рдХреЛ рд░реВрдкрдорд╛ COALESCE(MAX(EVENT_DT), '3600' рдЪрдпрди рдЧрд░реНрдиреБрд╣реЛрд╕реН'

рд╕рд░реНрдд рдкреВрд░рд╛ рджрд┐рди рдорд╛рддреНрд░ рд▓реЛрдб рд╣реБрдиреЗрдЫ: CAST(STG.EVENT_DT AS INTEGEER) < strftime('%s', рдорд┐рддрд┐ ('рдЕрдм', 'рджрд┐рдирдХреЛ рд╕реБрд░реБрд╡рд╛рдд'))

рдкреГрд╖реНрдард╣рд░реВ рд╡рд╛ рдлрд╛рдЗрд▓рд╣рд░реВ рдЧрдгрдирд╛ рдЧрд░реНрдиреЗ рдХрд╛рд░реНрдп рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рддрд░рд┐рдХрд╛рдорд╛ рдЧрд░рд┐рдиреНрдЫ, рдмрд┐рдиреНрджреБ рдЦреЛрдЬреА рдЧрд░реЗрд░ред

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

рдЬрдЯрд┐рд▓ рднрд┐рдЬреБрдЕрд▓рд╛рдЗрдЬреЗрд╢рди рдкреНрд░рдгрд╛рд▓реАрд╣рд░реВрдорд╛, рдбрд╛рдЯрд╛рдмреЗрд╕ рд╡рд╕реНрддреБрд╣рд░реВрдорд╛ рдЖрдзрд╛рд░рд┐рдд рдореЗрдЯрд╛-рдореЛрдбреЗрд▓ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рдореНрднрд╡ рдЫ, рдЧрддрд┐рд╢реАрд▓ рд░реВрдкрдорд╛ рдлрд┐рд▓реНрдЯрд░рд╣рд░реВ рд░ рдПрдХрддреНрд░реАрдХрд░рдг рдирд┐рдпрдорд╣рд░реВ рдкреНрд░рдмрдиреНрдз рдЧрд░реНрдиреБрд╣реЛрд╕реНред рдЕрдиреНрддрддрдГ, рд╕рдмреИ рд╕рднреНрдп рдЙрдкрдХрд░рдгрд╣рд░реВрд▓реЗ 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'
);

рдЙрдкрдХрд░рдгрд▓реЗ рдкрд░рд┐рдгрд╛рдорд╣рд░реВрдХреЛ рддрд╛рд▓рд┐рдХрд╛рд╣рд░реВ рдорд╛рддреНрд░ рдХрд▓реНрдкрдирд╛ рдЧрд░реНрджрдЫред

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

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

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

рд╕рд╛рдереИ, рдПрдХрд▓ рддрд╛рд▓рд┐рдХрд╛рдорд╛ рдЖрдзрд╛рд░рд┐рдд ETL рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ рдкреНрд░рдмрдиреНрдз рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рд╕рд░рд▓ рдЙрдкрдХрд░рдгрд▓рд╛рдИ рдирдЬрд┐рдХрдмрд╛рдЯ рд╣реЗрд░реМрдВред

рдбреЗрдЯрд╛ рдЧреБрдгрд╕реНрддрд░ рдорд╛рдкрди рд░ рдпрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд▓рд╛рдИ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдЧрд░реНрдиреЗ рд╡рд┐рд╖рдпрдорд╛ рдлрд░реНрдХреМрдВред

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

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди