Prometheus busca busca ser una nueva generación dentro de las herramientas de código abierto de monitorización. Una aproximación diferente y sin herencias del pasado.

В течение многих лет многие системы мониторинга были связаны с Nagios своей архитектурой и философией или непосредственно вилкой (CheckMk, Centreon, OpsView, Icinga, Naemon, Shinken, Vigilo NMS, NetXMS, OP5 и другие).

Программное обеспечение Prometheus, sin embargo, es fiel al espíritu “Open”: si quieres utilizarla, tendrás que juntar varias partes diferentes.

De alguna manera, como Nagios, podemos decir que es una especie de Ikea de la monitorización: podrás hacer con ella muchísimas cosas, pero necesitarás juntar tú mismo las piezas y dedicarle mucho tiempo.

Архитектура мониторинга Прометея

Prometheus, написанный на языке программирования go, имеет архитектуру, основанную на интеграции технологий, свободных от третьих лиц:

Мониторинг Prometheus kubernetes

В отличие от других более известных систем, которые также имеют много плагинов и элементов для представления карт, Prometheus нуждается в третьих частях для, например, визуализации данных (Grafana) или выполнения уведомлений (Pagerduty).

Все эти элементы высокого уровня могут быть заменены другими изделиями, но Prometheus – это часть экосистемы, а не уникальный инструмент. Поэтому у него есть экспортеры и ключевые элементы, которые в конечном итоге являются другими проектами Opensource:

  • HAProxy
  • StatsD
  • Графит
  • Grafana
  • Pagerduty
  • OpsGenie
  • и долгое время и т.д.

Прометей и серия данных

Si te suena RRD estás pensando en lo correcto.

Prometheus представляет собой структуру для повторного сбора данных о неопределенной структуре (clave valor), а также механизм мониторинга. Это позволяет определить синтаксис для оценки и хранить его только в случае наступления события, связанного с изменением.

Prometheus не хранит данные в базе данных SQL.

Как и Graphite, которая реализует нечто подобное, как и другие системы других поколений, которые хранят числовые серии в файлах RRD, Prometheus хранит каждую серию данных в отдельном файле.

Если вам нужна какая-то программа для сбора информации в базе данных временных рядов (на инглише “база данных временных рядов”), то вы должны посмотреть OpenTSBD, InfluxDB или Graphite.

Как использовать “Прометей

А лучше сказать, почему нельзя использовать “Прометей”.

Ellos mismos lo dicen en su web: si vas a utilizar esta herramienta para recoger logs, NO LO HAGAS, te proponen ELK en su lugar.

Если вы хотите использовать Prometheus для мониторинга приложений, сервисов и удаленного оборудования с помощью SNMP, вы можете сделать это и создать прекрасные графики с помощью Grafana, но прежде…

Конфигурация в Prometheus

Тода ла конфигурация программного обеспечения Prometheus реализуется в файлах текста YAML, с уна синтаксис bastante compleja. Кроме того, каждый экспортер, используемый на предприятии, имеет свой собственный файл независимой конфигурации.

Перед внесением изменений в конфигурацию необходимо повторно обратиться в сервисную службу, чтобы убедиться в том, что все изменения учтены.

Информации на Прометее

Por defecto, Prometheus monitoring не имеет ни одного вида информации.

Вы должны запрограммировать их сами, используя свой API для извлечения данных.

Так и есть, существуют несколько независимых проектов для достижения этой цели.

Приборная панель и визуальные экраны

Чтобы создать приборную панель в Prometheus, необходимо интегрировать ее с Grafana.

Существует документация о том, как это сделать, поскольку Grafana и Prometheus сосуществуют дружно.

Escalabilidad en Prometheus

Если в Prometheus необходимо обрабатывать больше источников данных, всегда можно добавить больше серверов.

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

В этом случае необходимо “разделить” сервисы по функциональным областям, чтобы можно было их различать, например: “сервис A, сервис B”. Для того, чтобы каждая служба была независимой.

Не похоже, чтобы это был способ “эскалации”, поскольку не существует ни способа синхронизации, ни восстановления данных, не существует ни альта-диспонибилидад, ни единой структуры доступа к информации в различных независимых сервисах.

Pero tal y como advertimos al principio, esto no es una solución “cerrada” sino un framework para diseñar tu propia solución final.

Это так, что нет никаких сомнений в том, что Prometheus способен поглощать много информации, в другом масштабе, чем другие более известные программы.

Мониторинг систем с помощью Prometheus: экспортеры и сборщики

De alguna forma, cada “manera” diferente de obtener información con esta herramienta, necesita una pieza de software que ellos denominan “exporter”.

Нет дежа де быть бинарио с собственным архивом конфигурации YAML, который должен быть жестикулирован независимым образом (с собственным демоном, файлом конфигурации и т.д.).

Sería el equivalente de un “plugin” en Nagios.

Так, например, Prometheus имеет экспортеры для SNMP(snmp_exporter), мониторинга журналов (grok_exporter) и т.д.

Пример конфигурации экспортера snmp как сервиса:

Экспортер SNMP для мониторинга Prometheus
Экспортер SNMP для мониторинга Prometheus

Чтобы получить информацию о хосте, мы можем установить “node_exporter”, который работает как обычный агент, похожий на Nagios.

Эти “node_exporter” собирают метрики различных типов, которые называются “colectores”.

Por defecto, Prometheus trae activados decenas de estos colectores. Puedes consultarlos todos navegando hasta el anexo 1: colectores activos.

Кроме того, существует множество “экспортеров” или плагинов для получения информации о различных аппаратных и программных системах.

Если количество экспортеров является релевантным (около 200), оно не соответствует количеству плагинов, доступных для Nagios (более 2000).

Aquí te hemos incluido un ejemplo de exporter de Oracle.

Заключение

Технология Prometheus для современного мониторинга гораздо более гибкая, чем у других более древних программ. Благодаря своей философии, мы можем интегрировать его в гибридные системы с большей легкостью.

При этом не хватает информации, информационных панелей и централизованной системы управления конфигурациями.

Es decir, una interfaz que permita observar y monitorizar información agrupada en servicios / hosts.

Поскольку Prometheus – это экосистема обработки данных, а не система мониторинга использования ИТ.

Его потенциал в обработке данных очень высок, но использование этих данных в повседневной работе требует очень сложного управления, так как для этого требуется много файлов конфигурации, много внешних команд, распространяемых вручную.

Anexo 1: Colectores activos en Prometheus

Это те коллекционеры, которым Prometheus передает активистов сериала:

Estos “node_exporter” собирает метрики различных типов, в том числе “colectores”, это те коллекторы серии, которые активированы:

arp Раскрывает статистику ARP из /proc/net/arp.
bcache Открывает статистику bcache из /sys/fs/bcache/.
склеивание Отображает количество настроенных и активных ведомых интерфейсов Linux bonding.
btrfs Раскрывает статистику btrfs
boottime Показывает время загрузки системы, полученное от kern.boottime sysctl.
conntrack Показывает статистику conntrack (ничего не делает, если отсутствует /proc/sys/net/netfilter/).
процессор Раскрывает статистику процессора
cpufreq Раскрывает статистику частоты процессора
diskstats Раскрывает статистику дискового ввода-вывода.
dmi Раскрытие информации об интерфейсе управления рабочим столом (DMI) из /sys/class/dmi/id/
edac Выдает статистику обнаружения и исправления ошибок.
энтропия Выявляет доступную энтропию.
exec Раскрывает статистику выполнения.
волоконно-оптический канал Выдает информацию и статистику о волоконном канале из /sys/class/fc_host/.
filefd Раскрывает статистику дескрипторов файлов из /proc/sys/fs/file-nr.
файловая система Раскрывает статистику файловой системы, например, используемое дисковое пространство.
hwmon Открыть данные мониторинга оборудования и датчиков из /sys/class/hwmon/.
infiniband Предоставляет сетевую статистику, специфичную для конфигураций InfiniBand и Intel OmniPath.
ipvs Раскрывает статус IPVS из /proc/net/ip_vs и статистику из /proc/net/ip_vs_stats.
loadavg Выявляет среднюю нагрузку.
mdadm Выводит статистику об устройствах в /proc/mdstat (ничего не делает, если нет /proc/mdstat).
meminfo Раскрывает статистику памяти.
netclass Раскрывает информацию о сетевом интерфейсе из /sys/class/net/
netdev Раскрывает статистику сетевого интерфейса, например, переданные байты.
netstat Открывает сетевую статистику из /proc/net/netstat. Это та же информация, что и netstat -s.
nfs Раскрывает статистику клиентов NFS из /proc/net/rpc/nfs. Это та же информация, что и nfsstat -c.
nfsd Раскрывает статистику сервера ядра NFS из /proc/net/rpc/nfsd. Это та же информация, что и nfsstat -s.
nvme Раскрытие информации о NVMe из /sys/class/nvme/
os Выявление информации о выпуске ОС из /etc/os-release или /usr/lib/os-release
powerupplyclass Раскрытие статистики по источникам питания из /sys/class/power_supply
давление Выдает статистику по срыву давления из /proc/pressure/.
rapl Открывает различные статистические данные из /sys/class/powercap.
schedstat Открывает статистику планировщика задач из /proc/schedstat.
sockstat Выдает различные статистические данные из /proc/net/sockstat.
софтнет Выдает статистику из /proc/net/softnet_stat.
статистика Открывает различные статистические данные из /proc/stat. Это включает время загрузки, форки и прерывания.
тапестаты Раскрывает статистику из /sys/class/scsi_tape.
текстовый файл Раскрывает статистику, считанную с локального диска. Флаг –collector.textfile.directory должен быть установлен.
тепловой Выдает тепловую статистику, как pmset -g therm.
тепловая_зона Открывает статистику тепловых зон и охлаждающих устройств из /sys/class/thermal.
время Отображает текущее системное время.
timex Раскрывает выбранные статистики системных вызовов adjtimex(2).
udp_queues Раскрывает UDP суммарную длину rx_queue и tx_queue из /proc/net/udp и /proc/net/udp6.
uname Раскрывает системную информацию, предоставляемую системным вызовом uname.
vmstat Выдает статистику из /proc/vmstat.
xfs Предоставляет статистику времени выполнения XFS.
zfs Раскрывает статистику производительности ZFS.
Colectores activos por defecto en Prometheus

Anexo 2: Ejemplo de exporter de Oracle

Это один из примеров типа информации, которую предоставляет экспортер Oracle, который работает через конфигурацию одного файла и ряд переменных, определяющих кредитные карты и SID:

  • oracledb_exporter_last_scrape_duration_seconds
  • oracledb_exporter_last_scrape_error
  • oracledb_exporter_scrapes_total
  • oracledb_up
  • oracledb_activity_execute_count
  • oracledb_activity_parse_count_total
  • oracledb_activity_user_commits
  • oracledb_activity_user_rollbacks
  • oracledb_sessions_activity
  • oracledb_wait_time_application
  • oracledb_wait_time_commit
  • oracledb_wait_time_concurrency
  • oracledb_wait_time_configuration
  • oracledb_wait_time_network
  • oracledb_wait_time_other
  • oracledb_wait_time_scheduler
  • oracledb_wait_time_system_io
  • oracledb_wait_time_user_io
  • oracledb_tablespace_bytes
  • oracledb_tablespace_max_bytes
  • oracledb_tablespace_free
  • oracledb_tablespace_used_percent
  • oracledb_process_count
  • oracledb_resource_current_utilization
  • oracledb_resource_limit_value

Для того чтобы дать представление о том, как можно настроить экспортер, приведем пример с одним файлом конфигурации экспортера JMX:

---
startDelaySeconds: 0
hostPort: 127.0.0.1:1234
username: 
password: 
jmxUrl: service:jmx:rmi:///jndi/rmi://127.0.0.1:1234/jmxrmi
ssl: false
lowercaseOutputName: false
lowercaseOutputLabelNames: false
whitelistObjectNames: ["org.apache.cassandra.metrics:*"]
blacklistObjectNames: ["org.apache.cassandra.metrics:type=ColumnFamily,*"]
rules:
  - pattern: 'org.apache.cassandra.metrics<type=(\w+), name=(\w+)><>Value: (\d+)'
    name: cassandra_$1_$2
    value: $3
    valueFactor: 0.001
    labels: {}
    help: "Cassandra metric $1 $2"
    cache: false
    type: GAUGE
    attrNameSnakeCase: false
Shares