рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ rdtool рдХреЗ рд╕рд╛рде рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдХреА рдирд┐рдЧрд░рд╛рдиреА



рдкрд░рд┐рдЪрдп


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

рдХрд╛рд░реНрдп


рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдПрдХ рдкрд┐рдЫрд▓реА рдкреЛрд╕реНрдЯ рдореЗрдВ рд▓рд┐рдЦрд╛ рдерд╛, рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд╛рд░рдЧрдорди рд╡реАрдУрдЖрдИрдкреА рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╕рд┐рд╕реНрдХреЛ рдПрдПрд╕ 5400 рдПрдХреНрд╕реЗрд╕ рд╕рд░реНрд╡рд░ рдкрд░ рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ, рдФрд░ рдЖрдИрдкреА рдЯреНрд░реИрдлрд╝рд┐рдХ, рд╕рдХреНрд░рд┐рдп рдХреЙрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЗрд╕рдХреЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рд▓реЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдореИрдВ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред
рдбреЗрдЯрд╛, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, SNMP рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рджреЛ рдХрд╛рдЙрдВрдЯрд░реЛрдВ рдкрд░ рдбреЗрдЯрд╛ рд▓реЗрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ - FastEiber рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд IN / OUT рдСрдХреНрдЯреЗрдЯреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛, рдФрд░ рджреЛ (SNMP рдФрд░ rrdtool рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ) GAUGE рдорд╛рди - рдкреНрд░реЛрд╕реЗрд╕рд░ рд▓реЛрдб рдкрд░ рдФрд░ рд╕рдХреНрд░рд┐рдп рдХреЙрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛, рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдзрд╛рд░рд╛рдУрдВ рдкрд░ рд╡реНрдпрд╕реНрдд рд╕рдордп рд╕реНрд▓реЙрдЯ рдХреА рд╕рдВрдЦреНрдпрд╛ред рдИ 1ред
рд╕рдХреНрд░рд┐рдп рдХреЙрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ OID рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
.1.3.6.1.4.1.9.10.19.1.1.4.0
рдЗрд╕ OID рдХреЛ рдкрдврд╝рдХрд░ CPU рдЙрдкрдпреЛрдЧ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
.1.3.6.1.4.1.9.2.1.58.0
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╕реЗ рдЧреБрдЬрд░рдиреЗ рд╡рд╛рд▓реЗ рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ рдСрдХреНрдЯреЗрдЯ рдХрд╛ рдХрд╛рдЙрдВрдЯрд░ рдУрдЖрдИрдбреА рджреНрд╡рд╛рд░рд╛ рдЙрдкрд▓рдмреНрдз рд╣реИ
.1.3.6.1.2.1.2.2.1.16.1 рдпрджрд┐ рдЗрдВрдбреЗрдХреНрд╕ 1 рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдлреЗрд╕ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЧрдИ рд╣реИред
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкрд░ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдСрдХреНрдЯреЗрдЯреНрд╕ рдХрд╛ рдХрд╛рдЙрдВрдЯрд░ рдУрдЖрдИрдбреА рджреНрд╡рд╛рд░рд╛ рдЙрдкрд▓рдмреНрдз рд╣реИ
.1.3.6.1.2.1.2.2.1.10.1 рдпрджрд┐ рдЗрдВрдбреЗрдХреНрд╕ 1 рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░рдлреЗрд╕ рдХреА рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИред

рдирд┐рд░реНрдгрдп


рд╕рдорд╛рдзрд╛рди рдХреЛ рдХрдИ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, rrdtool рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдмрдирддрд╛ рд╣реИ, рдлрд┐рд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдорд╛рдиреЛрдВ рд╕реЗ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдЦреА рдЬрд╛рддреА рд╣реИ, рдлрд┐рд░ рдЪрд╛рд░реНрдЯ рдкрд░ рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯред

рдХрдареЛрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдирд╛

рд╣рдо rrd рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдЧрдарди рдХреЗ рд▓рд┐рдП рджреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ
counter.sh
#!/usr/local/bin/bash rrdtool create --step 300 $1.rrd \ DS:val:COUNTER:600:0:U \ RRA:AVERAGE:0.5:1:8064 \ RRA:HWPREDICT:8064:0.1:0.0035:288 \ RRA:FAILURES:8064:2:3:4 


gauge.sh
 #!/usr/local/bin/bash rrdtool create --step 300 $1.rrd \ DS:val:GAUGE:600:0:U \ RRA:AVERAGE:0.5:1:8064 \ RRA:HWPREDICT:8064:0.1:0.0035:288 \ RRA:FAILURES:8064:2:3:4 


рдЕрдВрддрд░ рдХреЗрд╡рд▓ рд╡реИрд▓ рдХреЗ рдкреНрд░рдХрд╛рд░ рдореЗрдВ рд╣реИред
рд╣рдо рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдПрдВрдЧреЗ рдХрд┐ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╢реБрд░реВ рд╣реЛрдиреЗ рдкрд░ рдХреНрдпрд╛ рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
1) RRA: AVERAGE: 0.5: 1: 8064 - рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдЬрд┐рд╕рдореЗрдВ рд╣рд░ 5 рдорд┐рдирдЯ рдореЗрдВ рдПрдХ рдмрд╛рд░ рдорд╛рдк рдХреА рдЖрд╡реГрддреНрддрд┐ рдкрд░ 8064 рдорд╛рдк рдорд╛рди рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗред рдкреНрд░рддреНрдпреЗрдХ 5 рдорд┐рдирдЯ рдореЗрдВ рдПрдХ рдмрд╛рд░ рдорд╛рдкрдиреЗ рдХреА рдЖрд╡реГрддреНрддрд┐ рдкрд░, 288 рдорд╛рдк рдкреНрд░рддрд┐ рджрд┐рди рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреЗ рд╣реИрдВ, рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдЬрд╛рдирдХрд╛рд░реА рдХреЛ 8064/288 = 28 рджрд┐рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
2) RRA: HWPREDICT: 8064: 0.1: 0.0035: 288 - рдбреЗрдЯрд╛рдмреЗрд╕ 8064 рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рдиреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдЧрд╛, рдЕрд░реНрдерд╛рдд, рдЬрд┐рддрдиреЗ рдорд╛рдкрд┐рдд рдорд╛рди рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдП рдЧрдП рд╣реИрдВред рдЧреБрдгрд╛рдВрдХ рдЕрд▓реНрдлрд╛ = 0.1, рдмреАрдЯрд╛ = 0.0035 рджрд┐рдП рдЧрдП рд╣реИрдВред рдпреЗ рдРрд╕реЗ рдЧреБрдгрд╛рдВрдХ рд╣реИрдВ рдЬреЛ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдХреА рд╕рдЯреАрдХрддрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рддрд░рд╣ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдЗрд╖реНрдЯрддрдо рд╣реИрдВ рдпрджрд┐ рдЖрдк рд╣рд░ рджрд┐рди рдЧреНрд░рд╛рдл рдкрд░ рд▓рдЧрднрдЧ рдПрдХ рд╣реА рддрд╕реНрд╡реАрд░ рджреЗрдЦрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдРрд╕реЗ рдЕрдиреБрдкрд╛рддреЛрдВ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ rrdtool рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдХреА рдЬрд╛рддреА рд╣реИред рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзрд╛рдУрдВ рдХреЛ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИред 288 - рдкреНрд░рддрд┐ рдореМрд╕рдо рдорд╛рдк рдХреА рд╕рдВрдЦреНрдпрд╛, рдЗрд╕рд▓рд┐рдП рдореМрд╕рдо рджрд┐рдиреЛрдВ рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред
3) рдЖрд░рдЖрд░рдП: рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ: 8064: 2: 3: 4ред - рдбреЗрдЯрд╛рдмреЗрд╕ 28 рджрд┐рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЧрдгрдирд╛ рдХреА рдЧрдИ рд╡рд┐рдкрдерди рдкрд░ рдЬрд╛рдирдХрд╛рд░реА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░реЗрдЧрд╛ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдкрд┐рдЫрд▓реЗ рд╕реАрдЬрд╝рди рдХреЗ рд▓рд┐рдП рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдПрдХ рджрд┐рди)ред рдПрдмрд░реНрд░реЗрд╢рдиреНрд╕ рдХреА рдЧрдгрдирд╛ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рд╡рд┐рдВрдбреЛ рдХреА рд▓рдВрдмрд╛рдИ 3 рдХреЗ рдмрд░рд╛рдмрд░ рдФрд░ рд╡рд┐рдВрдбреЛ рдореЗрдВ 2 рдХреЗ рдмрд░рд╛рдмрд░ рдорд┐рд╕рд╛рдЗрд▓реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдХреА рдЬрд╛рдПрдЧреАред рдЕрдВрддрд┐рдо рдкреИрд░рд╛рдореАрдЯрд░ - 4 DEVSEASONAL рдЗрдВрдбреЗрдХреНрд╕ рд╣реИ, рдЗрд╕ рдЗрдВрдбреЗрдХреНрд╕ рдХреЛ rrdtool рдЬрд╛рдирдХрд╛рд░реА рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрджрд┐ рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХреЗ рдХреЛрдИ рдкреНрд░рд╢реНрди рд╣реИрдВ, рддреЛ рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ
рдЕрдм рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдПрдВ
./counter.sh in_traf
./counter.sh out_traf
./gauge.sh рд╕реАрдкреАрдпреВ
./gauge.sh рдХреЙрд▓

рдореВрд▓реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдЖрдмрд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ

рджрд░рдЕрд╕рд▓, рдкрдЯрдХрдерд╛ рд╕рд░рд▓ рд╣реИ
rrdupdater.sh
 #!/usr/local/bin/bash rrdtool="/usr/local/bin/rrdtool update " # snmpget -OQEav option will make value to be "clean" no quotes, oid name, etcтАж snmpget="/usr/local/bin/snmpget -OQEav -v2c -c SuperSecret " rrdpath="/usr/rrdmonit/rrd/" ${rrdtool} ${rrdpath}in_traf.rrd N:`${snmpget} 192.168.50.31 .1.3.6.1.2.1.2.2.1.10.1` ${rrdtool} ${rrdpath}out_traf.rrd N:`${snmpget} 192.168.50.31 .1.3.6.1.2.1.2.2.1.16.1` ${rrdtool} ${rrdpath}cpu.rrd N:`${snmpget} 192.168.50.31 .1.3.6.1.4.1.9.2.1.58.0` ${rrdtool} ${rrdpath}calls.rrd N:`${snmpget} 192.168.50.31 .1.3.6.1.4.1.9.10.19.1.1.4.0` 

рдФрд░ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЙрд╕реЗ crontab рдореЗрдВ
* * 5 * * * * /us/rrdmonit/rrdupdater.sh

рдЧреНрд░рд╛рдл рдкреНрд░рджрд░реНрд╢рди

rrdtool рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЪрд╛рд░реНрдЯрд┐рдВрдЧ рдЯреВрд▓ рд╣реИред рдЪрд╛рд░реНрдЯ рдХреЛ рдмрд╣реБрдд рдЬрд╛рдирдХрд╛рд░реАрдкреВрд░реНрдг рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдореМрдЬреВрдж рд╡реАрдУрдЖрдИрдкреА рдЯреНрд░реИрдлрд╝рд┐рдХ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдпреЗ рд╣реИрдВ:

рдиреАрд▓реА рд░реЗрдЦрд╛ 15 рдорд┐рдирдЯ рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд▓рд┐рдП рд╕рд╛рдереА рдХреЛ рджрд┐рдП рдЧрдП рдорд┐рдирдЯреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рдорд╛рдк рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореВрд▓реНрдп рд╣реИред рдЧреНрд░реЗ рдХреНрд╖реЗрддреНрд░ - рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореВрд▓реНрдп рдЬреЛ рдПрдХ рджрд┐рди рдкрд╣рд▓реЗ рдереЗред рдЧреБрд▓рд╛рдмреА рд░реЗрдЦрд╛ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рд╣реИред рд▓рд╛рд▓ рдФрд░ рд╣рд░реЗ рд░рдВрдЧ рдХреА рд░реЗрдЦрд╛рдПрдВ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдореВрд▓реНрдпреЛрдВ рдХреЗ рдЧрд▓рд┐рдпрд╛рд░реЗ рдХреА рдКрдкрд░реА рдФрд░ рдирд┐рдЪрд▓реА рд╕реАрдорд╛ рдХреЛ рджрд░реНрд╢рд╛рддреА рд╣реИрдВред рдирдХрд╛рд░рд╛рддреНрдордХ рдореВрд▓реНрдпреЛрдВ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХрд╛рд▓реА рд░реЗрдЦрд╛ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рдирд┐рдд рдореВрд▓реНрдпреЛрдВ (рд╡рд┐рдЪрд▓рди) рд╕реЗ рдЕрдиреБрдореЗрдп рд╡рд┐рдЪрд▓рди рдХрд╛ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рд╣реИред рд╕реЛрдиреЗ рдХрд╛ рд░рдВрдЧ рд╡рд┐рдкрдерди рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдЬрдм рд╡рд┐рдкрдерди рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛, рддреЛ рд╕рд┐рд╕реНрдЯрдо рдиреЗ рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрд▓рд░реНрдЯ (рдИ-рдореЗрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ) рдЬрд╛рд░реА рдХрд┐рдпрд╛ред рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЯреНрд░реИрдлрд┐рдХ рдкреНрд░рджрд╛рддрд╛ рдХреА рд╡рд┐рдлрд▓рддрд╛ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдмрд╣реБрдд рдХрдо рд╣реИред
рдорд╛рдкрд╛ рдореВрд▓реНрдп рдХреЗ рд▓рд┐рдП рдХреБрд▓ рдореВрд▓реНрдп рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рдпрд╣, 1-2 рдкреНрд░рддрд┐рд╢рдд рдХреА рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде, рдЗрд╕ рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд▓рд┐рдП рдмрд┐рд▓рд┐рдВрдЧ рд╕реЗ рд▓рд┐рдП рдЧрдП рдореВрд▓реНрдп рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдПрдХ рдирд┐рдЧрд░рд╛рдиреА рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рдЙрдЪреНрдЪ рд╕рдЯреАрдХрддрд╛ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдорд╛рдкрд╛ рдореВрд▓реНрдпреЛрдВ рдХреА рд╕рд╛рдЬрд┐рд╢ рд░рдЪрддреЗ рд╕рдордп рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИрдВред рдкрд╣рд▓рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреНрд▓рд╛рд╕рд┐рдХ MRTG рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рд░реЗрдЦрд╛рдВрдХрди (рдЖрдВрдХрдбрд╝реЗ) рдирдП рдорд╛рди рдХреЗ рд╕рд╛рде rrdtool рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рднрд░рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдмрдирд╛рдП рдЧрдП рд╣реИрдВред рджреВрд╕рд░рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреИрдХреНрдЯрд┐ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ - рдЧреНрд░рд╛рдл рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрд░реЛрдз рдкрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдорд╛рд░реА рд╡реАрдУрдЖрдИрдкреА рдирд┐рдЧрд░рд╛рдиреА рдкреНрд░рдгрд╛рд▓реА рджреВрд╕рд░реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрд╡рдзрд╛рд░рдгрд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдкрд╣рд▓реЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдбреЗрдЯрд╛рдмреЗрд╕ рднрд░рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдЪрд┐рддреНрд░ рдЙрддреНрдкрдиреНрди рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ:
 #!/usr/bin/env python import os import time import rrdtool # Define params rrdpath = '/usr/rrdmonit/rrd/' pngpath = '/usr/local/share/cacti/rrdmonit/' width = '500' height = '200' # Generate charts for last 48 hours enddate = int(time.mktime(time.localtime())) begdate = enddate - 172800 def gen_image(rrdpath, pngpath, fname, width, height, begdate, enddate): """ Generates png file from rrd database: rrdpath - the path where rrd is located pngpath - the path png file should be created in fname - rrd file name, png file will have the same name .png extention width - chart area width height - chart area height begdate - unixtime enddate - unixtime """ # 24 hours before current time, will show on chart using SHIFT option ldaybeg = str(begdate - 86400) ldayend = str(enddate - 86400) # Will show some additional info on chart endd_str = time.strftime("%d/%m/%Y %H:%M:%S",(time.localtime(int(enddate)))).replace(':','\:') begd_str = time.strftime("%d/%m/%Y %H:%M:%S",(time.localtime(int(begdate)))).replace(':','\:') title = 'Chart for: '+fname.split('.')[0] # Files names pngfname = pngpath+fname.split('.')[0]+'.png' rrdfname = rrdpath+fname # Get iformation from rrd file info = rrdtool.info(rrdfname) rrdtype = info['ds[val].type'] # Will use multip variable for calculation of totals, # should be usefull for internet traffic accounting, # or call/minutes count from CDR's. # Do not need logic for DERIVE and ABSOLUTE if rrdtype == 'COUNTER': multip = str(int(enddate) - int(begdate)) else: # if value type is GAUGE should divide time to step value rrdstep = info['step'] multip = str(round((int(enddate) - int(begdate))/int(rrdstep))) # Make png image rrdtool.graph(pngfname, '--width',width,'--height',height, '--start',str(begdate),'--end',str(enddate),'--title='+title, '--lower-limit','0', '--slope-mode', 'COMMENT:From\:'+begd_str+' To\:'+endd_str+'\\c', 'DEF:value='+rrdfname+':val:AVERAGE', 'DEF:pred='+rrdfname+':val:HWPREDICT', 'DEF:dev='+rrdfname+':val:DEVPREDICT', 'DEF:fail='+rrdfname+':val:FAILURES', 'DEF:yvalue='+rrdfname+':val:AVERAGE:start='+ldaybeg+':end='+ldayend, 'SHIFT:yvalue:86400', 'CDEF:upper=pred,dev,2,*,+', 'CDEF:lower=pred,dev,2,*,-', 'CDEF:ndev=dev,-1,*', 'CDEF:tot=value,'+multip+',*', 'CDEF:ytot=yvalue,'+multip+',*', 'TICK:fail#FDD017:1.0:"Failures"\\n', 'AREA:yvalue#C0C0C0:"Yesterday\:"', 'GPRINT:ytot:AVERAGE:"Total\:%8.0lf"', 'GPRINT:yvalue:MAX:"Max\:%8.0lf"', 'GPRINT:yvalue:AVERAGE:"Average\:%8.0lf" \\n', 'LINE3:value#0000ff:"Value \:"', 'GPRINT:tot:AVERAGE:"Total\:%8.0lf"', 'GPRINT:value:MAX:"Max\:%8.0lf"', 'GPRINT:value:AVERAGE:"Average\:%8.0lf" \\n', 'LINE1:upper#ff0000:"Upper Bound "', 'LINE1:pred#ff00FF:"Forecast "', 'LINE1:ndev#000000:"Deviation "', 'LINE1:lower#00FF00:"Lower Bound "') # List files and generate charts for fname in os.listdir(rrdpath): gen_image(rrdpath, pngpath, fname, width, height, begdate, enddate) 


Rrdtool рдореЗрдВ рдорд╛рдиреЛрдВ рдХреЛ рднрд░рдиреЗ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдирд┐рд╖реНрдкрд╛рджрди рд╢реБрд░реВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рдЗрд╕реЗ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрди рдХреЛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП /usr/rrdmonit/rrdupdater.shред
рдПрдХрдорд╛рддреНрд░ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЙрддреНрдкрдиреНрди рдЪрд┐рддреНрд░ рдХрд╣реАрдВ рд╡реЗрдм рдкрд░ рдкреЛрд╕реНрдЯ рдХрд░рдирд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, PHP рдореЗрдВ рдРрд╕реА рд╕реНрдХреНрд░рд┐рдкреНрдЯред
 <?php $dir = './rrdmonit/'; $dirHandle = opendir($dir); while ($file = readdir($dirHandle)) { if(!is_dir($file) && strpos($file, '.png')>0) { print "<img src='.$dir".$file."' />\n"; } } closedir($dirHandle); ?> 

рдореБрдЭреЗ рдпрд╛рдж рд╣реИ рдХрд┐ рдЬрдм рдореИрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдЗрд╕ рддрд░рд╣ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреА, рддреЛ рдореИрдВрдиреЗ рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рдмрд┐рддрд╛рдпрд╛ рдХрд┐ рдореИрдВ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдореИрдВ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдХреИрд╕реЗ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реВрдВ, рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рдореИрдВрдиреЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рдЧреНрд░рд╛рдл рдбреНрд░рд╛рдЗрдВрдЧ рдмрдирд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рд░реЗрдЦрд╛ рд▓рдЧрд╛рддрд╛рд░ рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рджреАред рдХрдИ рдШрдВрдЯреЛрдВ рдХреЗ рд▓рд┐рдП рдзреВрдореНрд░рдкрд╛рди рдирд┐рдпрдорд╛рд╡рд▓реА рдХреЛ рдорд╛рд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЕрдЧрд▓реЗ рджрд┐рди рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдереВрдХ рджрд┐рдпрд╛ред рдЕрдЧрд▓реЗ рджрд┐рди - рд▓реЛ рдФрд░ рдирд┐рд╣рд╛рд░рдирд╛, рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдЕрдкрдиреЗ рдЖрдк рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред рд╕рдм рдХреБрдЫ рддреБрдЪреНрдЫ рд╣реЛ рдЧрдпрд╛, рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдирд╣реАрдВ рд▓рдЧрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдкрд╣рд▓реЗ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рдХрд╛ рдореМрд╕рдо рдкрд╛рд╕ рдирд╣реАрдВ рд╣реБрдЖ рдерд╛ (рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рднрд░рдиреЗ рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рдПрдХ рджрд┐рди рдмрд╛рдж)ред
рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд▓рд┐рдЦрд╛ рдерд╛, рдорд╛рдкрд╛ рдореВрд▓реНрдп рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреЗ рд╕рд╛рде, рд╕рдВрднрд╛рд╡рд┐рдд рдореВрд▓реНрдпреЛрдВ рдХреЗ рдкреНрд░рд╕рд╛рд░ рдХреЗ рдПрдХ рдЧрд▓рд┐рдпрд╛рд░реЗ рдХрд╛ рднреА рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ - рд╡рд┐рднрд╛рдЬрдиред рдбрд┐рд╡рд┐рдПрд╢рди рдХреА рднрд╡рд┐рд╖реНрдпрд╡рд╛рдгреА рддрднреА рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ рдЬрдм рдЖрдкрдХреЗ рдкрд╛рд╕ рджреЛ рд╕реАрдЬрд╝рди рдХреЗ рд▓рд┐рдП рдорд╛рди рд╣реЛрдВред
рдЗрд╕рд▓рд┐рдП, рдЖрдк рдХреЗрд╡рд▓ рддреАрд╕рд░реЗ рджрд┐рди рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкрд░рд┐рдгрд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗред

рдЧреНрд░рд╛рдл рдкрд░ - рдорд╛рдк рдХреА рд╢реБрд░реБрдЖрдд рд╕реЗ рдкрд╣рд▓реЗ рддреАрди рджрд┐рдиред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдкреВрд░реНрд╡рд╛рдиреБрдорд╛рди рд╡рдХреНрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рджреЗрдЦрд┐рдП рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ред

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


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


рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рд╢рд╛рд╕рдХ рдЪрд┐рддреНрд░ рдХреЛ рдШреВрд░рддрд╛ рд╣реИ, рдпрд╣ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ (рдХрдо рд╕реЗ рдХрдо рдореЗрд▓ рджреНрд╡рд╛рд░рд╛) рдЬрдм рдПрдХ рд╡рд┐рдкрдерди рдХрд╛ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ - рдЕрдЧрд▓реА рдкреЛрд╕реНрдЯ рдореЗрдВред

Source: https://habr.com/ru/post/In134599/


All Articles