Skip to content

Commit

Permalink
Update step2.md
Browse files Browse the repository at this point in the history
  • Loading branch information
webngt authored Jun 17, 2021
1 parent 2c5ef26 commit 17326af
Showing 1 changed file with 1 addition and 72 deletions.
73 changes: 1 addition & 72 deletions prometheus-client/step2.md
Original file line number Diff line number Diff line change
@@ -1,73 +1,3 @@
<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/UsxIDNNIwa0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

Напишем и запустим сервис, который будет эмулировать работу реального приложения. А в следующем шаге инструментируем, чтобы он отдавал метрики для Prometheus.

Сервис напишем на Python. По пути /probe этот сервис будет отвечать с некоторой задержкой, эмулирующей работу. Длительность задержки будет определяться с помощью некоторого распределения вероятностей, и также с некоторой вероятностью приложения иногда будет отдавать 500ый статус код HTTP.

Откройте закладку файла app.py в редакторе и введите в него код на Python ниже, либо нажмите кнопку "Copy to Editor". Это основной файл нашего приложения.

<pre class="file" data-filename="./app/app.py" data-target="replace">
import os
import json
import random
import time

from flask import Flask, abort

app = Flask(__name__)

FAIL_RATE=float(os.environ.get('FAIL_RATE', '0.05'))
SLOW_RATE=float(os.environ.get('SLOW_RATE', '0.00'))

def do_staff():
time.sleep(random.gammavariate(alpha=1.5, beta=.1))

def do_slow():
time.sleep(random.gammavariate(alpha=30, beta=0.3))

@app.route('/probe')
def probe():
if random.random() < FAIL_RATE:
abort(500)
if random.random() < SLOW_RATE:
do_slow()
else:
do_staff()
return "OK"

if __name__ == '__main__':
app.run(host='0.0.0.0', port='8000', debug=True)
</pre>

Теперь давайте запустим этот сервис с помощью Docker. Для этого нам понадобится файл с описанием зависимостей для Python и Dockerfile.


Откройте вкладку файла ./app/Dockefile в редакторе и введите в него код ниже, либо нажмите кнопку "Copy to Editor".

<pre class="file" data-filename="./app/Dockerfile" data-target="replace">
FROM python:3.7-slim
COPY requirements.txt /requirements.txt
COPY pip.conf /etc/pip.conf
RUN pip install --no-cache-dir -r requirements.txt
COPY . /app
CMD ["python", "/app/app.py"]
</pre>

Откройте вкладку файла ./app/requirements.txt в редакторе и введите в него код ниже, либо нажмите кнопку "Copy to Editor". Это файл с описанием зависимостей для сервиса

<pre class="file" data-filename="./app/requirements.txt" data-target="replace">
Flask==1.1.2
prometheus-client==0.7.1
</pre>

Откройте вкладку файла ./app/pip.conf в редакторе и введите в него код ниже, либо нажмите кнопку "Copy to Editor". Это файл с описанием откуда брать зависимости

<pre class="file" data-filename="./app/pip.conf" data-target="replace">
[global]
index-url = http://nexus:8081/repository/pypi/simple
trusted-host = nexus
</pre>

С помощью команды docker build собираем локальный образ с меткой app:v1. Докер образ будет хранится локально.

```
Expand All @@ -87,6 +17,5 @@ docker run -d --net=host --name=app-v1 app:v1
curl localhost:8000/probe
```{{execute}}
Наш сервис должен ответить текстом "ОК" в консоли.
Наш сервис должен вывести счет матча в консоли
Пока наш сервис не предоставляет никаких метрик в Prometheus, но в шаге 3 мы исправим это.

0 comments on commit 17326af

Please sign in to comment.