Почему Carbon нуждается в мониторинге? Он является stateful-сервисом с интенсивным I/O. Проблемы с диском, нехватка памяти, перегрузка сети или ошибки в конфигурации могут привести к потере метрик, задержкам в их обработке или полному отказу сервиса. Мониторинг Carbon позволяет proactively обнаруживать аномалии, планировать масштабирование и расследовать инциденты.
Carbon по умолчанию предоставляет метрики через свой собственный протокол. Он записывает статистику о своей работе в виде… тех же временных рядов, которые вы можете отправить обратно в Graphite или любой другой приемник. Эти метрики имеют префикс `carbon.agents..`. Наиболее критичные из них можно разделить на несколько категорий.
**Основные метрики для сбора:**
- **Производительность и нагрузка:**
* `creates`: Количество созданных новых файлов `.wsp` (Whisper-файлы) на диске. Всплеск может быть связан с появлением новых хостов или сервисов.
- **Задержки (Latency):**
- **Очереди и кэш:**
- **Дисковый I/O и память:**
* **Системные метрики:** Свободное место на диске (`disk_free`) где лежат Whisper-файлы, IOPS, нагрузка на диск. Эти метрики собираются не Carbon, а агентом на уровне ОС.
**Open-source стек для мониторинга Carbon:**
- **Сбор метрик: Prometheus.** Хотя Carbon говорит на своем протоколе, мы можем использовать **экспортер**, который преобразует метрики Carbon в формат Prometheus. Отличный выбор — `graphite_exporter` или более специализированный `carbon-clickhouse-exporter` (если вы используете ClickHouse как бэкенд). Альтернатива — настроить Carbon на запись его внутренних метрик в ту же Graphite, а затем использовать `graphite_exporter` для их экспорта в Prometheus. Более прямой путь — парсить лог `carbon-cache` (формат `linelog`), если в конфиге включено `LOG_UPDATES = True`.
- **Визуализация: Grafana.** Бесплатный, мощный и стандартный де-факто инструмент для создания дашборд.
- **Хранение: Prometheus TSDB (или VictoriaMetrics).** Будет хранить метрики о Carbon. Для долгосрочного хранения исторических метрик о Carbon можно использовать тот же Graphite/Whisper, но для целей мониторинга работы Carbon лучше иметь независимый бэкенд.
**Шаг 1: Настройка Carbon для экспорта метрик.** Убедитесь, что в `carbon.conf` для вашего `[cache:]` секции включены внутренние метрики: `ENABLE_LOGROTATION = True` и `LOG_UPDATES = True` (опционально, для детального аудита). Carbon начнет писать свою статистику в виде метрик с префиксом `carbon.agents..`.
**Шаг 2: Развертывание graphite_exporter.** Скачайте и установите `graphite_exporter`. В его конфигурационном файле (`mapping.conf`) настройте маппинг метрик Carbon в Prometheus-формат. Пример правила:
```
mappings:
- match: carbon.agents.*.*
instance: "$1"
metric: "$2"
```
Запустите экспортер. Он будет слушать порт (по умолчанию 9108), принимать метрики в Graphite-формате и экспонировать их на `/metrics` для Prometheus.
**Шаг 3: Настройка Carbon на отправку метрик экспортеру.** В `carbon.conf` укажите `GRAPHITE_HOST` и `GRAPHITE_PORT` как адрес и порт вашего `graphite_exporter`. Carbon будет постоянно отправлять свои внутренние метрики туда.
**Шаг 4: Конфигурация Prometheus.** Добавьте в `prometheus.yml` новый job для scrape `graphite_exporter`:
```yaml
scrape_configs:
- job_name: 'carbon_exporter'
static_configs:
- targets: [':9108']
```
**Шаг 5: Создание дашборды в Grafana.** Импортируйте или создайте дашборд с ключевыми графиками:
* **График нагрузки:** `rate(carbon_agent_metricsReceived[5m])` по instance.
* **Задержки:** `carbon_agent_avgUpdateTime`, `carbon_agent_commitTime`.
* **Состояние кэша:** `carbon_agent_cache_size`, `carbon_agent_cache_queues`.
* **Системные метрики:** `node_filesystem_free_bytes` (для диска с данными), `node_memory_MemAvailable_bytes`.
* **Алерты:** Настройте алерты в Prometheus Alertmanager на критические условия: `avgUpdateTime > 0.5s`, `cache_size > 90% от MAX_CACHE_SIZE`, `disk_free < 10%`.
Такой open-source стек дает вам полную прозрачность над состоянием Carbon. Вы сможете видеть, как нагрузка распределяется во времени, оперативно реагировать на рост задержек и планировать емкость хранилища. Мониторинг Carbon перестает быть черным ящиком и становится управляемым компонентом вашей инфраструктуры наблюдения.
Комментарии (11)