DevOps | Вопросы собесов
5.33K subscribers
30 photos
974 links
Download Telegram
🤔 Как сделать так чтобы клиенты отдавали метрики в 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 @- https://localhost:9091/metrics/job/my_batch_job


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


Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Где Elasticsearch хранит логи?

Elasticsearch хранит данные в индексах (индекс — это аналог таблицы в реляционной БД), на диске в формате, совместимом с Lucene. По умолчанию данные находятся в директории /var/lib/elasticsearch.


Ставь 👍 если знал ответ, 🔥 если нет
Забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM
💊3
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔 Что такое data source в графане?

Это источник данных, с которым Grafana может взаимодействовать для построения графиков, панелей мониторинга (dashboards) и выполнения запросов. Data Source определяет, как Grafana подключается к внешним системам мониторинга, базам данных или API для получения метрик, логов или другой информации.

🚩Основные аспекты

🟠Типы Data Source
Grafana поддерживает множество типов источников данных, включая:
Системы мониторинга:
Prometheus
Zabbix
InfluxDB
Graphite
Лог-агрегаторы:
Loki
Elasticsearch
Splunk
Облачные сервисы:
AWS CloudWatch
Google Cloud Monitoring
Azure Monitor
Реляционные базы данных:
MySQL
PostgreSQL
API или внешние плагины:
JSON API
OpenTelemetry

🟠Функции Data Source
Подключение: Определяет параметры для соединения с внешним хранилищем данных, такие как URL, токены аутентификации, логин/пароль. Выполнение запросов: Обеспечивает интерфейс для написания запросов к данным через встроенный редактор запросов Grafana. Форматирование данных: Конвертирует данные из формата, предоставляемого источником, в формат, понятный Grafana.

🟠Добавление Data Source
Добавление источника данных выполняется через веб-интерфейс Grafana:
Зайдите в Settings → Data Sources.
Нажмите кнопку Add data source.
Выберите нужный тип источника (например, Prometheus).
Настройте параметры подключения (например, URL, токен, порт).
Нажмите Save & Test, чтобы проверить соединение.

🟠Примеры запросов
Для Prometheus:
rate(http_requests_total[5m])


Для MySQL
SELECT time, value FROM metrics WHERE time > NOW() - INTERVAL 1 HOUR;


🚩Особенности Data Source

🟠Кастомизация
Вы можете устанавливать плагины для подключения к нестандартным источникам данных. Grafana Marketplace предлагает плагины для расширения функциональности.

🟠Мульти-сорсинг
Один дашборд может использовать несколько источников данных, что позволяет объединять данные из разных систем.

🟠Глобальные переменные
Источники данных могут использовать глобальные параметры, такие как время ($__timeFilter), для унификации запросов.

🟠Безопасность
Поддержка различных методов аутентификации: токены, ключи API, OAuth.

Ставь 👍 и забирай 📚 Базу знаний
Please open Telegram to view this post
VIEW IN TELEGRAM