ΠΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
ΠΡΠ±ΠΎΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π²Π΅ΡΡΠΈ ΠΆΡΡΠ½Π°Π» ΡΠΎΠ±ΡΡΠΈΠΉ Π΄Π»Ρ ΠΈΡ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΠΈ.
Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π»ΠΎΠ³ΠΈ Π΄ΠΎΡΡΡΠΏΠ° Nginx Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ IP-Π°Π΄ΡΠ΅ΡΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ², URL-Π°Π΄ΡΠ΅ΡΠ° ΠΈ ΠΊΠΎΠ΄Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ HTTP Π΄Π»Ρ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΊ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅ΡΡ.
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ ΠΌΡ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Python-ΡΠΊΡΠΈΠΏΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Ρ ΠΆΡΡΠ½Π°Π»Π° Π΄ΠΎΡΡΡΠΏΠ° nginx Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠΈ.
πΒ Nginx ΠΈΠ»ΠΈ Apache: Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π΄Π²ΡΡ Π²Π΅Π΄ΡΡΠΈΡ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅ΡΠΎΠ²
Π‘ΠΊΡΠΈΠΏΡ:
import random import time import argparse # create an ArgumentParser object and set the description and default values for the optional arguments parser = argparse.ArgumentParser(description='Generate a sample access log.') parser.add_argument('--filename', type=str, help='Name of the log file', default='access.log') parser.add_argument('--lines', type=int, help='Number of log lines to generate', default=2000) # create a list of IP addresses to use in the log lines ip_list = ['192.168.1.1', '192.168.1.2', '192.168.1.3', '192.168.1.4', '192.168.1.5', '192.168.1.6', '192.168.1.7', '192.168.1.8', '192.168.1.9', '192.168.1.10', '192.168.1.11', '192.168.1.12', '192.168.1.13', '192.168.1.14', '192.168.1.15', '192.168.1.16', '192.168.1.17', '192.168.1.18', '192.168.1.19', '192.168.1.20', '192.168.1.21', '192.168.1.22', '192.168.1.23', '192.168.1.24', '192.168.1.25', '192.168.1.26', '192.168.1.27', '192.168.1.28', '192.168.1.29', '192.168.1.30', '192.168.1.31', '192.168.1.32', '192.168.1.33', '192.168.1.34', '192.168.1.35', '192.168.1.36', '192.168.1.37', '192.168.1.38', '192.168.1.39', '192.168.1.40', '192.168.1.41', '192.168.1.42', '192.168.1.43', '192.168.1.44', '192.168.1.45', '192.168.1.46', '192.168.1.47', '192.168.1.48', '192.168.1.49', '192.168.1.50', '2001:db8:0:1:0:0:0:1', '2001:db8:0:1:0:0:0:2', '2001:db8:0:1:0:0:0:3', '2001:db8:0:1:0:0:0:4', '2001:db8:0:1:0:0:0:5', '2001:db8:0:1:0:0:0:6', '2001:db8:0:1:0:0:0:7', '2001:db8:0:1:0:0:0:8', '2001:db8:0:1:0:0:0:9', '2001:db8:0:1:0:0:0:a', '2001:db8:0:1:0:0:0:b', '2001:db8:0:1:0:0:0:c', '2001:db8:0:1:0:0:0:d', '2001:db8:0:1:0:0:0:e'] # create a list of user agent strings to use in the log lines user_agents = ['Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:54.0) Gecko/20100101 Firefox/54.0', 'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; AS; rv:11.0) like Gecko', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 OPR/45.0.2552.898', 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'] args = parser.parse_args() # open the log file in write mode and create log lines using the specified number of lines with open(args.filename, 'w') as f: for i in range(args.lines): ip = random.choice(ip_list) timestamp = time.strftime('%d/%b/%Y:%H:%M:%S %z', time.localtime()) method = random.choice(['GET', 'POST', 'PUT', 'DELETE']) url = '/' + ''.join(random.choices('abcdefghijklmnopqrstuvwxyz', k=random.randint(1, 10))) refurl = random.choice(['https://www.example.com/','https://www.google.com/','https://www.ibm.com/','https://www.msn.com/']) protocol = 'HTTP/1.1' status_code = random.choice([200, 201, 204, 301, 302, 400, 401, 403, 404, 500]) size = random.randint(100, 10000) user_agent = random.choice(user_agents) # create the log line with the chosen values and write it to the file line = f"{ip} - - [{timestamp}] \"{method} {url} {protocol}\" {status_code} {size} \"{refurl}\" \"{user_agent}\"\n" f.write(line)
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅
ΠΠ°ΠΏΡΡΡΠΈΡΡ ΡΡΠΎΡ ΡΠΊΡΠΈΠΏΡ ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
python generate_logs.py --filename mylog.log --lines 5000
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½ΠΎ 5000 ΡΡΡΠΎΠΊ ΠΆΡΡΠ½Π°Π»Π° Π² ΡΠ°ΠΉΠ»Π΅ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ mylog.log.
ΠΡΠ»ΠΈ ΠΎΠΏΡΡΡΠΈΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ –filename ΠΈ –lines, ΡΠΎ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ access.log ΠΈ 2000 ΡΡΡΠΎΠΊ.
ΠΡΠΈΠ½ΡΠΈΠΏ ΡΠ°Π±ΠΎΡΡ
Π‘ΠΊΡΠΈΠΏΡ Π½Π° ΡΠ·ΡΠΊΠ΅ Python ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ random ΠΈ time Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΡ Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ Π»ΠΎΠ³Π°.
Π’Π°ΠΊΠΆΠ΅ ΠΎΠ½ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΠΌΠΎΠ΄ΡΠ»Ρ argparse Π΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π°ΠΌ ΡΠΊΠ°Π·Π°ΡΡ ΠΈΠΌΡ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ Π»ΠΎΠ³-ΡΠ°ΠΉΠ»Π° ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌΡΡ Π»ΠΎΠ³-ΡΡΡΠΎΠΊ.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ΠΎ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΠ°ΡΡΠ΅ΠΉ ΡΠΊΡΠΈΠΏΡΠ°:
- Π Π°Π·Π±ΠΎΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ: ΠΠΎΠ΄ΡΠ»Ρ argparse ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠ°Π·Π±ΠΎΡΠ° Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² –filename ΠΈ –lines, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°Π΄Π°ΡΡ ΠΈΠΌΡ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌΠΎΠ³ΠΎ Π»ΠΎΠ³-ΡΠ°ΠΉΠ»Π° ΠΈ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌΡΡ Π»ΠΎΠ³-ΡΡΡΠΎΠΊ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ.
- ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ ΡΡΡΠΎΠΊ : Π¦ΠΈΠΊΠ» for Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΡΡΠΎΠΊΠΈ ΠΆΡΡΠ½Π°Π»Π° ΠΏΡΡΠ΅ΠΌ ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ args.lines.
- ΠΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ ΠΈΠ· ΡΠΏΠΈΡΠΊΠ° IP-Π°Π΄ΡΠ΅ΡΠΎΠ² Π²ΡΠ±ΠΈΡΠ°Π΅ΡΡΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΉ IP-Π°Π΄ΡΠ΅Ρ, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠ΄ΡΠ»Ρ time Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ ΡΠ΅ΠΊΡΡΠ°Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΠΌΠ΅ΡΠΊΠ° Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ ΡΠΎΡΠΌΠ°ΡΠ΅, Π²ΡΠ±ΠΈΡΠ°Π΅ΡΡΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΉ HTTP-ΠΌΠ΅ΡΠΎΠ΄, Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΉ URL-ΠΏΡΡΡ ΠΈΠ· 1-10 ΡΡΡΠΎΡΠ½ΡΡ Π±ΡΠΊΠ², Π²ΡΠ±ΠΈΡΠ°Π΅ΡΡΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΉ URL-Π°Π΄ΡΠ΅Ρ ΡΠ΅ΡΠ΅ΡΠ΅ΡΠ°, ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» HTTP/1.1, Π²ΡΠ±ΠΈΡΠ°Π΅ΡΡΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΉ ΠΊΠΎΠ΄ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ HTTP, Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΡΡΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΠΎΡΠ²Π΅ΡΠ° ΠΎΡ 100 Π΄ΠΎ 10000 Π±Π°ΠΉΡ, Π²ΡΠ±ΠΈΡΠ°Π΅ΡΡΡ ΡΠ»ΡΡΠ°ΠΉΠ½Π°Ρ ΡΡΡΠΎΠΊΠ° Π°Π³Π΅Π½ΡΠ° ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. ΠΡΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π»Ρ ΠΏΠΎΡΡΡΠΎΠ΅Π½ΠΈΡ ΡΡΡΠΎΠΊΠΈ ΠΆΡΡΠ½Π°Π»Π°, ΠΊΠΎΡΠΎΡΠ°Ρ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ Π² ΡΠ°ΠΉΠ» Π»ΠΎΠ³Π°.
- ΠΠ°ΠΏΠΈΡΡ ΡΡΡΠΎΠΊ ΠΆΡΡΠ½Π°Π»Π° Π² ΡΠ°ΠΉΠ»: ΠΠΏΠ΅ΡΠ°ΡΠΎΡ with ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΡΠΊΡΡΡΠΈΡ ΡΠ°ΠΉΠ»Π° ΠΆΡΡΠ½Π°Π»Π° Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ Π·Π°ΠΏΠΈΡΠΈ ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΡΡΠΎΠΊ ΠΆΡΡΠ½Π°Π»Π° Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎΠΌ ΡΡΡΠΎΠΊ. ΠΠ΅ΡΠΎΠ΄ write() ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π·Π°ΠΏΠΈΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΆΡΡΠ½Π°Π»Π° Π² ΡΠ°ΠΉΠ».
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΡ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»ΠΈ Python-ΡΠΊΡΠΈΠΏΡ, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠΈΠΉ Π»Π΅Π³ΠΊΠΎ ΠΈ Π±ΡΡΡΡΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ ΠΏΡΠΈΠΌΠ΅ΡΡ Π»ΠΎΠ³ΠΎΠ² Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Nginx Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΠΎΡΠ»Π°Π΄ΠΊΠΈ.
ΠΠ»Ρ ΡΠ°Π·Π±ΠΎΡΠ° Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΡΠΊΡΠΈΠΏΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ random ΠΈ time, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠ΄ΡΠ»Ρ argparse.
Π‘ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ Π»ΠΎΠ³-ΡΠ°ΠΉΠ» ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π·Π°ΠΏΡΠΎΡΠ΅ ΠΊ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅ΡΡ, ΡΠ°ΠΊΡΡ ΠΊΠ°ΠΊ IP-Π°Π΄ΡΠ΅Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΠΌΡΠΉ URL ΠΈ ΠΊΠΎΠ΄ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ HTTP, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠΉ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ.
ΡΠΌ. ΡΠ°ΠΊΠΆΠ΅:
- πΒ ΠΠ°ΠΊ Π½Π°ΡΡΡΠΎΠΈΡΡ ΡΠΎΡΠ°ΡΠΈΡ Π»ΠΎΠ³ΠΎΠ² NGINX
- πΒ ΠΠ°ΠΊ ΡΠ΄Π°Π»ΠΈΡΡ NGINX ΠΈΠ· Ubuntu
- πΒ Π‘ΠΎΠΏΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ URL Ρ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΡΡΠ΅ΠΌ Π² Nginx
- πΒ ΠΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΡΡ ΡΡΡΠ°Π½ΠΈΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ 404 Π² NGINX
- βΈοΈΒ ΠΠ°ΠΊ ΡΠ°Π·Π²Π΅ΡΠ½ΡΡΡ Nginx Π² ΠΊΠ»Π°ΡΡΠ΅ΡΠ΅ Kubernetes
- πΒ ΠΠ°ΠΊ ΡΠ°Π·ΠΌΠ΅ΡΡΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΉΡΠΎΠ² Π½Π° Nginx Ρ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ ΡΠ΅ΠΌ ΠΆΠ΅ Π΄ΠΎΠΌΠ΅Π½ΠΎΠΌ (FQDN)