TGViewer
DevOps | Вопросы собесов DevOps | Вопросы собесов @easy_devops · 5.57K subscribers
Post #2646 905
🤔 Как сделать так чтобы клиенты отдавали метрики в Prometheus?

В Prometheus данные собираются по pull-модели – сервер сам запрашивает метрики у клиентов. Чтобы клиенты отдавали метрики, нужно:

1. Настроить приложение на экспонирование метрик в формате Prometheus.
2. Добавить Prometheus job для сбора этих метрик.
3. Опционально – использовать Pushgateway, если pull-модель не подходит.

🚩Экспонирование метрик в формате Prometheus

Если приложение написано на Go, Python, Java или Node.js. Prometheus предлагает официальные клиентские библиотеки:
Go: [prometheus/client_golang](https://github.com/prometheus/client_golang)
Python: [prometheus_client](https://github.com/prometheus/client_python)
Java: [simpleclient](https://github.com/prometheus/client_java)
Node.js: [prom-client](https://github.com/siimon/prom-client)
Пример для Python

1⃣Установим библиотеку
pip install prometheus_client


2⃣Добавим в код экспонирование метрик
from prometheus_client import start_http_server, Counter
import time

# Создаем счетчик запросов
REQUEST_COUNT = Counter('app_requests_total', 'Total requests')

def process_request():
REQUEST_COUNT.inc() # Увеличиваем счетчик
time.sleep(1) # Имитация обработки запроса

if __name__ == '__main__':
start_http_server(8000) # Открываем метрики на 8000 порту
while True:
process_request()


🚩Пример для Node.js

1⃣Установим библиотеку:
npm install prom-client express


2⃣Код сервера:
const express = require('express');
const client = require('prom-client');

const app = express();
const collectDefaultMetrics = client.collectDefaultMetrics;
collectDefaultMetrics();

const requestCounter = new client.Counter({
name: 'http_requests_total',
help: 'Total HTTP requests',
});

app.get('/', (req, res) => {
requestCounter.inc();
res.send('Hello, World!');
});

app.get('/metrics', (req, res) => {
res.set('Content-Type', client.register.contentType);
res.end(client.register.metrics());
});

app.listen(3000, () => {
console.log('Server running on port 3000');
});


🚩Настроить Prometheus для сбора метрик

Добавляем job в prometheus.yml
scrape_configs:
- job_name: 'my_app'
static_configs:
- targets: ['app_host:8000']


🚩Push-модель через Pushgateway (если нужно)

Если клиент не может сам отдавать метрики (например, это краткоживущий job), можно использовать Pushgateway.

Запускаем Pushgateway:
docker run -d -p 9091:9091 prom/pushgateway


Отправляем метрики через curl
echo "job_execution_time 5.3" | curl --data-binary @- http://localhost:9091/metrics/job/my_batch_job


Настраиваем Prometheus на сбор данных из Pushgateway
scrape_configs:
- job_name: 'pushgateway'
static_configs:
- targets: ['localhost:9091']


Ставь 👍 и забирай 📚 Базу знаний
More from @easy_devops
  1. Oct 11, 2026🤔 Зачем нужен стейт в Terraform? Файл terraform.tfstate хранит текущее состояние инфрастр…
  2. Oct 10, 2026🤔 Если удалить terraform.tfstate, а потом сделать terraform init — что будет? - terraform…
  3. Oct 10, 2026🤔 Что касается безопасности где хранить переменные секреты? Хранение секретных переменных…
  4. Oct 9, 2026🤔 Можно ли на лету изменить настройки DNS в контейнере через CLI? Да, можно: docker exec…
  5. Oct 9, 2026🤔 Из чего состоит ELK стек? ELK (Elasticsearch, Logstash, Kibana) – это стек для сбора, о…
  6. Oct 8, 2026🤔 На CentOS Linux ceilings — он везде отключён или активен? Скорее всего, имеется в виду…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →