ΠΠ΅ΠΊΠΎΠ»ΠΈΠΊΠΎ Π»ΠΈΠ½ΠΈΡΠ° ΠΊΠΎΠ΄Π° ΠΈ Π²Π°ΡΠ° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Π³Π΅Π½Π΅ΡΠΈΡΠ΅ ΠΌΠ΅ΡΡΠΈΠΊΡ, Π²Π°Ρ!
ΠΠ° Π±ΠΈΡΠΌΠΎ ΡΠ°Π·ΡΠΌΠ΅Π»ΠΈ ΠΊΠ°ΠΊΠΎ ΠΏΡΠΎΠΌΠ΅ΡΠ΅Ρ_ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ΅ΡΠ»Π°ΡΠΊ_ΠΈΠ·Π²ΠΎΠ·Π½ΠΈΠΊ Π΄ΠΎΠ²ΠΎΡΠ°Π½ ΡΠ΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈ ΠΏΡΠΈΠΌΠ΅Ρ:
from flask import Flask
from prometheus_flask_exporter import PrometheusMetrics
app = Flask(__name__)
metrics = PrometheusMetrics(app)
@app.route('/')
def main():
return 'OK'
Π’ΠΎ ΡΠ΅ ΡΠ²Π΅ ΡΡΠΎ Π²Π°ΠΌ ΡΡΠ΅Π±Π° Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π΅ΡΠ΅! ΠΠΎΠ΄Π°Π²Π°ΡΠ΅ΠΌ ΡΠ²ΠΎΠ·Π° ΠΈ Π»ΠΈΠ½ΠΈΡΠ΅ Π·Π° ΠΈΠ½ΠΈΡΠΈΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡΡ ΠΡΠΎΠΌΠ΅ΡΡ
Π΅ΡΡΠΠ΅ΡΡΠΈΡΡ, Π΄ΠΎΠ±ΠΈΡΠ΅ΡΠ΅ ΠΌΠ΅ΡΡΠΈΠΊΡ ΡΡΠ°ΡΠ°ΡΠ΅ Π·Π°Ρ
ΡΠ΅Π²Π° ΠΈ Π±ΡΠΎΡΠ°ΡΠΈ Π·Π°Ρ
ΡΠ΅Π²Π°, ΠΏΡΠΈΠΊΠ°Π·Π°Π½ Π½Π° ΠΊΡΠ°ΡΡΠΎΡ ΡΠ°ΡΠΊΠΈ /ΠΌΠ΅ΡΡΠΈΡΡ Π€Π»Π°ΡΠΊ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡ Π·Π° ΠΊΠΎΡΡ ΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ²Π°Π½, ΠΊΠ°ΠΎ ΠΈ ΡΠ²Π΅ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π½Π΅ ΠΌΠ΅ΡΡΠΈΠΊΠ΅ ΠΊΠΎΡΠ΅ Π΄ΠΎΠ±ΠΈΡΠ°ΡΠ΅ ΠΈΠ· Π±Π°Π·Π΅
ΠΌΠΎΠΆΠ΅ΡΠ΅ Π½Π°ΡΠΈ
Π’Π°ΠΊΠΎΡΠ΅ ΡΠ΅ΡΠ΅ ΠΏΡΠΎΠ½Π°ΡΠΈ Π»ΠΈΡΡΡ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠ° Ρ
ΠΏΠΎΠ΄Π΅ΡΠ°Π²Π°ΡΠ΅
Π£ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠΈ ΠΏΠΎΡΡΠΎΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠΏΡΠΈΡΠ° Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡ, ΠΏΠΎΠ³Π»Π΅Π΄Π°ΡΡΠ΅
ΠΡΠ½ΠΎΠ²Π½Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° ΡΠ΅ ΠΏΡΠΈΠΊΠ°Π·Π°Π½Π° ΠΈΠ·Π½Π°Π΄. Π‘Π°ΠΌΠΎ ΠΊΡΠ΅ΠΈΡΠ°ΡΡΠ΅ ΠΈΠ½ΡΡΠ°Π½ΡΡ ΠΡΠΎΠΌΠ΅ΡΡ Π΅ΡΡΠΠ΅ΡΡΠΈΡΡ, Π½Π°Π·ΠΎΠ²ΠΈΠΌΠΎ ΡΠΎ ΠΌΠ΅ΡΡΠΈΠΊΠ΅, Π° Π·Π°ΡΠΈΠΌ Π³Π° ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ Π΄Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ΅ΡΠ΅ Π΄ΠΎΠ΄Π°ΡΠ½Π΅ ΠΌΠ΅ΡΡΠΈΠΊΠ΅ ΠΊΠΎΡΠ΅ ΠΆΠ΅Π»ΠΈΡΠ΅ Π΄Π° ΠΏΡΠΈΠΊΡΠΏΠΈΡΠ΅ ΡΠΊΡΠ°ΡΠ°Π²Π°ΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡΠ°:
-
@metrics.counter(..)
-
@metrics.gauge(..)
-
@metrics.summary(..)
-
@metrics.histogram(..)
ΠΡΠΎΡΠ°ΡΠΈ Π±ΡΠΎΡΠ΅ ΠΏΠΎΠ·ΠΈΠ²Π΅, Π° Π΄ΡΡΠ³ΠΈ ΠΏΡΠΈΠΊΡΠΏΡΠ°ΡΡ ΠΌΠ΅ΡΡΠΈΠΊΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Ρ ΡΡΠ°ΡΠ°ΡΠ° ΡΠΈΡ ΠΏΠΎΠ·ΠΈΠ²Π°. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°ΡΠΈ ΠΎΠ·Π½Π°ΠΊΠ΅ Π·Π° ΡΠ²Π°ΠΊΡ ΠΎΠ΄ ΡΠΈΡ , ΠΏΠΎΡΠ΅Π½ΡΠΈΡΠ°Π»Π½ΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠΈ ΡΠ²ΠΎΡΡΡΠ²Π° Π·Π°Ρ ΡΠ΅Π²Π° ΠΈΠ»ΠΈ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠ°. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ:
from flask import Flask, request
from prometheus_flask_exporter import PrometheusMetrics
app = Flask(__name__)
# group by endpoint rather than path
metrics = PrometheusMetrics(app, group_by='endpoint')
@app.route('/collection/:collection_id/item/:item_id')
@metrics.counter(
'cnt_collection', 'Number of invocations per collection', labels={
'collection': lambda: request.view_args['collection_id'],
'status': lambda resp: resp.status_code
})
def get_item_from_collection(collection_id, item_id):
pass
Π£ Π³ΠΎΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΡ, ΠΊΠ»ΠΈΠΊΠΎΠΌ Π½Π° ΠΊΡΠ°ΡΡΡ ΡΠ°ΡΠΊΡ /ΡΠΎΠ»Π»Π΅ΡΡΠΈΠΎΠ½/10002/ΠΈΡΠ΅ΠΌ/76 ΡΠ΅ ΡΠ·ΡΠΎΠΊΠΎΠ²Π°ΡΠΈ ΠΏΠΎΠ²Π΅ΡΠ°ΡΠ΅ Π±ΡΠΎΡΠ°ΡΠ°, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ½Ρ_ΡΠΎΠ»Π»Π΅ΡΡΠΈΠΎΠ½{ΡΠΎΠ»Π»Π΅ΡΡΠΈΠΎΠ½ = "10002", ΡΡΠ°ΡΡΡ = "200"}, ΠΏΠ»ΡΡ Π΄ΠΎΠ±ΠΈΡΠ΅ΡΠ΅ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π½Ρ ΠΌΠ΅ΡΡΠΈΠΊΡ (Π·Π° ΡΠ²Π°ΠΊΡ ΠΊΡΠ°ΡΡΡ ΡΠ°ΡΠΊΡ Ρ ΠΎΠ²ΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΡ) ΠΈΠ· ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π½Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅:
-
flask_http_request_duration_seconds
β Π’ΡΠ°ΡΠ°ΡΠ΅ Π₯Π’Π’Π Π·Π°Ρ ΡΠ΅Π²Π° Ρ ΡΠ΅ΠΊΡΠ½Π΄Π°ΠΌΠ° Π·Π° ΡΠ²Π΅ Π€Π»Π°ΡΠΊ Π·Π°Ρ ΡΠ΅Π²Π΅ ΠΏΡΠ΅ΠΌΠ° ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΏΡΡΠ°ΡΠΈ ΠΈ ΡΡΠ°ΡΡΡΡ -
flask_http_request_total
β Π£ΠΊΡΠΏΠ°Π½ Π±ΡΠΎΡ Π₯Π’Π’Π Π·Π°Ρ ΡΠ΅Π²Π° ΠΏΠΎ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠ° ΠΈ ΡΡΠ°ΡΡΡΠΈΠΌΠ°
ΠΠΎΡΡΠΎΡΠ΅ ΠΎΠΏΡΠΈΡΠ΅ Π΄Π° ΠΏΡΠ΅ΡΠΊΠΎΡΠΈΡΠ΅ ΠΏΡΠ°ΡΠ΅ΡΠ΅ ΠΎΠ΄ΡΠ΅ΡΠ΅Π½ΠΈΡ
ΠΊΡΠ°ΡΡΠΈΡ
ΡΠ°ΡΠ°ΠΊΠ°, Π΅Π²ΠΈΠ΄Π΅Π½ΡΠΈΡΠ°ΡΠ΅ Π΄ΠΎΠ΄Π°ΡΠ½Π΅ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π½Π΅ ΠΌΠ΅ΡΡΠΈΠΊΠ΅ ΠΈΠ»ΠΈ ΠΏΡΠ΅ΡΠΊΠΎΡΠΈΡΠ΅ ΠΎΠ½Π΅ Π³ΠΎΡΠ΅ Π½Π°Π²Π΅Π΄Π΅Π½Π΅ ΠΈΠ»ΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅ ΠΈΡΡΡ ΠΏΡΠΈΠ»Π°Π³ΠΎΡΠ΅Π½Ρ ΠΌΠ΅ΡΡΠΈΠΊΡ Π½Π° Π²ΠΈΡΠ΅ ΠΊΡΠ°ΡΡΠΈΡ
ΡΠ°ΡΠ°ΠΊΠ°. ΠΡΠΎΠ²Π΅ΡΠΈ
app = Flask(__name__)
metrics = PrometheusMetrics(app)
@app.route('/')
def main():
pass # requests tracked by default
@app.route('/skip')
@metrics.do_not_track()
def skip():
pass # default metrics are not collected
# custom metric to be applied to multiple endpoints
common_counter = metrics.counter(
'by_endpoint_counter', 'Request count by endpoints',
labels={'endpoint': lambda: request.endpoint}
)
@app.route('/common/one')
@common_counter
def endpoint_one():
pass # tracked by the custom and the default metrics
@app.route('/common/two')
@common_counter
def endpoint_two():
pass # also tracked by the custom and the default metrics
# register additional default metrics
metrics.register_default(
metrics.counter(
'by_path_counter', 'Request count by request paths',
labels={'path': lambda: request.path}
)
)
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΈΠΌΠ° ΠΏΠΎΠ³ΠΎΠ΄Π½Π° ΠΏΡΠΎΡΠΈΡΠ΅ΡΠ° Π·Π° ΠΏΠΎΠΏΡΠ»Π°ΡΠ½Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ Π·Π° Π²ΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠ° ΠΊΠ°ΠΎ ΡΡΠΎ ΡΡ ΡΠΠ‘ΠΠ ΠΈ ΠΡΠ½ΠΈΡΠΎΡΠ½. Π’Π°ΠΊΠΎΡΠ΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΠ½Π°ΡΠΈ ΠΌΠ°Π»Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠΈΡΠ°Π½ΠΈΡ ΡΠ»ΡΡΠ°ΡΠ΅Π²Π° ΡΠΏΠΎΡΡΠ΅Π±Π΅, ΡΠΊΡΡΡΡΡΡΡΠΈ Π²ΠΈΡΠ΅ΠΏΡΠΎΡΠ΅ΡΠ½Ρ ΠΎΠ±ΡΠ°Π΄Ρ.
ΠΠΎΠ»Π΅ΠΊΡΠΈΡΠ° ΠΌΠ΅ΡΡΠΈΠΊΠ°
ΠΠ°ΠΎ ΡΡΠΎ ΡΠ΅ Π³ΠΎΡΠ΅ ΠΏΠΎΠΌΠ΅Π½ΡΡΠΎ, Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π½ΠΎ ΠΎΠ±Π΅Π·Π±Π΅ΡΡΡΠ΅ ΠΊΡΠ°ΡΡΡ ΡΠ°ΡΠΊΡ /ΠΌΠ΅ΡΡΠΈΡΡ Ρ Π€Π»Π°ΡΠΊ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠΈ, ΠΊΠΎΡΠ° ΠΌΠΎΠΆΠ΅ ΠΏΠΎΡΠ»ΡΠΆΠΈΡΠΈ ΠΊΠ°ΠΎ ΠΌΠ΅ΡΠ° Π·Π°
Π£ Π³ΠΎΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π½Π΅ ΡΠ°Π±Π»Π΅, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΈΡΠ°ΡΠΈ ΡΠ²ΠΎΡ ΠΡΠΎΠΌΠ΅ΡΡ Π΅ΡΡ Π½Π° Π€Π»Π°ΡΠΊ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡ ΡΠ° ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Π½ΠΈΠΌ ΠΏΠΎΠ΄Π΅ΡΠ°Π²Π°ΡΠΈΠΌΠ° ΡΠ° ΠΎΠ²ΠΎΠΌ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠΎΠΌ:
scrape_configs:
- job_name: 'example'
dns_sd_configs:
- names: ['app']
port: 5000
type: A
refresh_interval: 5s
ΠΠΎΠ³Π»Π΅Π΄Π°ΡΡΠ΅ ΡΠ΅ΠΎ ΠΏΡΠΈΠΌΠ΅Ρ Π½Π°
ΠΠΊΠΎ Π²Π°ΠΌ ΠΈΠ·Π»Π°Π³Π°ΡΠ΅ ΠΊΡΠ°ΡΡΠ΅ ΡΠ°ΡΠΊΠ΅ ΠΌΠ΅ΡΡΠΈΠΊΠ΅ Π½Π° ΠΎΠ²Π°Ρ Π½Π°ΡΠΈΠ½ Π½Π΅ ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ°, ΠΌΠΎΠΆΠ΄Π° Π·Π°ΡΠΎ ΡΡΠΎ Π½Π΅ ΠΆΠ΅Π»ΠΈΡΠ΅ Π΄Π° ΡΠΎΡ Π΄ΠΎΠ·Π²ΠΎΠ»ΠΈΡΠ΅ ΡΠΏΠΎΡΠ½ΠΈ ΠΏΡΠΈΡΡΡΠΏ, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ΅ Π»Π°ΠΊΠΎ ΠΎΠ½Π΅ΠΌΠΎΠ³ΡΡΠΈΡΠΈ ΡΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ΡΠ΅ ΠΏΡΠ΅Π½Π΅ΡΠΈ ΠΏΠ°ΡΡ =ΠΠΈΡΡΠ° ΠΏΡΠΈΠ»ΠΈΠΊΠΎΠΌ ΠΊΡΠ΅ΠΈΡΠ°ΡΠ° ΠΈΠ½ΡΡΠ°Π½ΡΠ΅ ΠΡΠΎΠΌΠ΅ΡΡ Π΅ΡΡΠΠ΅ΡΡΠΈΡΡ.
from flask import Flask, request
from prometheus_flask_exporter import PrometheusMetrics
app = Flask(__name__)
metrics = PrometheusMetrics(app, path=None)
...
metrics.start_http_server(5099)
ΠΠ½Π΄Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ ΡΡΠ°ΡΡ_Ρ ΡΡΠΏ_ΡΠ΅ΡΠ²Π΅Ρ(ΠΏΠΎΡΡ)Π΄Π° ΠΎΡΠ²ΠΎΡΠΈΡΠ΅ ΠΎΠ²Ρ ΠΊΡΠ°ΡΡΡ ΡΠ°ΡΠΊΡ Π½Π° Π΄ΡΡΠ³ΠΎΠΌ Π₯Π’Π’Π ΠΏΠΎΡΡΡ, 5099 Ρ Π³ΠΎΡΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΡ. ΠΠ»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΠΎ, Π°ΠΊΠΎ ΡΡΠ΅ Π·Π°Π΄ΠΎΠ²ΠΎΡΠ½ΠΈ ΡΡΠΎ ΡΠ΅ ΠΊΡΠ°ΡΡΠ° ΡΠ°ΡΠΊΠ° Ρ ΠΈΡΡΠΎΡ Π€Π»Π°ΡΠΊ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠΈ, Π°Π»ΠΈ ΠΌΠΎΡΠ°ΡΠ΅ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠ΅Π½Ρ ΠΏΡΡΠ°ΡΡ ΡΠ° /ΠΌΠ΅ΡΡΠΈΡΡ, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΠ»Π΅Π΄ΠΈΡΠΈ Π΄ΡΡΠ³ΠΈ Π£Π Π ΠΊΠ°ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΠ°Ρ ΠΏΡΡΠ°ΡΠ΅ ΠΈΠ»ΠΈ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ ΡΠ΅Π³ΠΈΡΡΠ΅Ρ_Π΅Π½Π΄ΠΏΠΎΠΈΠ½Ρ(..)Π΄Π° Π±ΠΈΡΡΠ΅ Π³Π° ΠΊΠ°ΡΠ½ΠΈΡΠ΅ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π»ΠΈ.
ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠ΅
-
ΡΠΈΡΡΡ86/ΠΏΡΠΎΠΌΠ΅ΡΡ Π΅ΡΡ_ΡΠ»Π°ΡΠΊ_Π΅ΠΊΠΏΠΎΡΡΠ΅Ρ β ΠΠ²Π°Ρ ΠΈΠ·Π²ΠΎΠ·Π½ΠΈΠΊ Π±ΠΎΡΠ° Π·Π° ΠΡΠΎΠΌΠ΅ΡΠ΅Ρ -
ΠΏΡΠΎΠΌΠ΅ΡΡ Π΅ΡΡ-ΡΠ»Π°ΡΠΊ-Π΅ΠΊΠΏΠΎΡΡΠ΅Ρ Π ΠΠΠΠΠ β Π£ΠΏΠΎΡΡΠ΅Π±Π°, ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΠΈ ΠΎΠΏΡΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ΅ -
ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΠΏΡΠΎΠΌΠ΅ΡΠ΅Ρ-ΡΠ»Π°ΡΠΊ-Π΅ΠΊΠΏΠΎΡΡΠ΅Ρ β ΠΡΠΈΠΌΠ΅ΡΠΈ ΠΏΠΎΠ΄Π΅ΡΠ°Π²Π°ΡΠ° ΠΏΡΠ°ΡΠ΅ΡΠ° Π€Π»Π°ΡΠΊ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Π½Π° ΡΠ°Π·Π»ΠΈΡΠΈΡΠ΅ Π½Π°ΡΠΈΠ½Π΅ -
ΠΏΡΠΎΠΌΠ΅ΡΡ Π΅ΡΡ-ΡΠ»Π°ΡΠΊ-Π΅ΠΊΠΏΠΎΡΡΠ΅Ρ Π½Π° ΠΠΈΠΠ β ΠΠ²Π°Ρ ΠΏΡΠΎΡΠ΅ΠΊΠ°Ρ ΡΠ΅ Π½Π° ΠΠΈΠΠ -
ΠΏΡΠΎΠΌΠ΅ΡΡ Π΅ΡΡ/ΡΠ»ΠΈΠ΅Π½Ρ_ΠΏΠΈΡΡ ΠΎΠ½ β ΠΠ²Π°Π½ΠΈΡΠ½Π° ΠΡΠΎΠΌΠ΅ΡΡ Π΅ΡΡ ΠΊΠ»ΠΈΡΠ΅Π½ΡΡΠΊΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π·Π° ΠΠΈΡΡ ΠΎΠ½
ΠΠΊΠΎ ΠΎΠ΄Π»ΡΡΠΈΡΠ΅ Π΄Π° ΠΏΡΠΎΠ±Π°ΡΠ΅, ΡΠ»ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΠΎΡΠ²ΠΎΡΠΈΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π½Π° ΠΠΈΡΠ₯ΡΠ±-Ρ ΠΈΠ»ΠΈ ΠΎΡΡΠ°Π²ΠΈΡΠ΅ ΡΠ²ΠΎΡΠ΅ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠ΅, ΠΏΠΎΠ²ΡΠ°ΡΠ½Π΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΠ΅ ΠΈ ΡΡΠ³Π΅ΡΡΠΈΡΠ΅!
Π₯Π²Π°Π»Π°!
ΠΠ·Π²ΠΎΡ: Π²Π²Π².Ρ Π°Π±Ρ.ΡΠΎΠΌ