В настоящее время средство мониторинга Prometheus — мой фаворит. С его помощью можно легко собирать метрики из приложений и/или баз данных, чтобы увидеть их реальную производительность. При наличии таких средств, как Zabbix или Nagios, необходимо написать несколько скриптов, чтобы собрать все метрики и посмотреть, как много данных вы можете хранить в базе без потери производительности средства мониторинга.
Consul — интересное приложение для мониторинга. При поиске в Google появляется множество страниц, где сказано, что Consul может быть использован как средство мониторинга, но мало кто знает, что Consul можно контролировать самостоятельно. В этой статье я расскажу о предпринятых мною шагах по настройке мониторинга Consul. Пожалуйста, имейте в виду, что это — только начало. Если у вас есть предложения по улучшению, сообщите мне о них.
В этой статье мы выполним следующее:
Настроим Consul.
Настроим statsd-экспортер.
Создадим несколько графиков.
Настройка Consul
В Consul есть способ сбора метрик, называемый Telemetry. С его помощью вы можете настроить отправку показателей производительности внешним инструментам / приложениям для мониторинга производительности Consul.
Дополнительную информацию о настройке Consul для Telemetry можно найти на этой странице: https://www.consul.io/docs/agent/options.html#telemetry.
В этой статье мы будем использовать параметр «statsd_address». Для этого добавьте в конфигурацию серверов Consul следующие строки:
"telemetry": {
"statsd_address": "192.168.1.202:9125"
},
IP-адрес принадлежит самому хосту, и в этом случае мы должны отправить его на порт 9125.
После того как мы настроили отправку данных на всех серверах Consul, нужно перезапустить их один за другим, чтобы сохранить маршрут Consul-кластера.
Настройка statsd-экспортера
При работе с Prometheus и выставлении его метрик вы будете использовать экспортеры для своих приложений или баз данных. Prometheus будет очищать эти показатели каждые 15 секунд (вы можете указать другое время) и хранить их в базе данных. Consul не имеет конечной точки, доступной для сбора показателей, поэтому мы должны использовать statsd-exportorter. Мы уже настроили серверы Consul для отправки метрик на сервер statsd, поэтому нужно только убедиться, что мы запустим его на каждом хосте, на котором запущен Consul Server.
Прежде чем мы начнем с statsd-exportorter, нужно выполнить некоторые настройки. Мы должны убедиться в наличии файла statd mapper. С его помощью мы сопоставляем поля statsd с полями для Prometheus и можем добавлять метки в метрику. На этой странице я настроил почти все элементы сопоставления: https://gist.github.com/dj-wasabi/d9b31c4b74e561c72512f4edbdfe6927
Давайте посмотрим, как выглядит запись:
consul.*.runtime.*
name="consul_runtime"
type="$2"
host="{{ inventory_hostname }}"
Первая строка отображения в этой конструкции — имя поля statsd. Вы увидите звездочки: это универсальные символы, их можно использовать в качестве значения, назначив фильтр. Первый знак подстановки “*” может быть использован как $1, второй — $2 и т. д. «name» — это имя поля метрик в Prometeus, в нашем случае имя consul_runtime. Prometeus не принимает точки в именах, поэтому мы должны использовать подчеркивания.
Затем мы создаем метку с именем «type» и присваиваем ей значение $2. Исходное поле statsd, которое Consul отправил в statsd-exporter, выглядит так:
consul.b139924a6f44.runtime.num_goroutines
Эта конструкция позволяет нам параметру $1 присвоить значение b139924a6f44 и параметру $2 значение num_goroutines. Последний ярлык «host» я добавляю с помощью Ansible. Я использую Ansible для установки файла statsd mapper (и всех остальных компонентов, связанных с мониторингом конфигурации) во всех своих Consul-серверах, после чего могу фильтровать в Prometheus или другом графическом инструменте (таком как Grafana), какие метрики какому хосту принадлежат.
Используя контейнер Docker для statsd-exportorter, я помещаю файл mapstatsd в файл /data/statsd-exporter.conf и запускаю следующую команду:
docker run --name statsd-exporter \
-v /data/statsd-exporter.conf:/tmp/statsd-exporter.conf:ro \
-p 9102:9102 -p 9125:9125/udp prom/statsd-exporter \
-statsd.mapping-config=/tmp/statsd-exporter.conf \
-statsd.add-suffix=false
Я монтирую файл statsd mapper как RO (только для чтения), открываю 2 порта и настраиваю инструмент statsd-exporter для использования файла mapper. В этом случае открыты 2 порта. Порт (9125) используется statsd для извлечения показателей производительности, а (9102) порт используется Prometheus для очистки этих показателей.
Prometheus
Чтобы Prometheus собрать метрики statsd-exporter, я добавил в настройки Prometheus следующее:
scrape_configs:
- job_name: 'consul'
static_configs:
- targets: ['192.168.1.202:9102']
labels: {'host': 'vserver-202'}
- targets: ['192.168.1.203:9102']
labels: {'host': 'vserver-203'}
- targets: ['192.168.1.204:9102']
labels: {'host': 'vserver-204'}
Это работает потому, что я использую Ansible для создания конфигурации Prometheus. В ближайшем будущем я, вероятно, буду использовать consul_sd_config, поэтому мне не придется добавлять все виды статической конфигурации.
Как только мы перезапустили Prometheus и запустили контейнеры statsd-exportorter, в Prometheus появляются следующие показатели:
consul_runtime{host="vserver-204",type="free_count"} 2.3117552e+08
consul_runtime{host="vserver-204",type="heap_objects"} 22853
consul_runtime{host="vserver-204",type="num_goroutines”} 82
(И многие другие. 3 строки, приведенные выше, являются результатом наших настроек в параграфе “Настройка statsd-экспортера”.)
Создание графиков
У нас есть метрики в Prometheus, и теперь нужно создать несколько графиков. Grafana может быть использована для создания графиков, отображающих производительность Consul. Я создал приборную панель и загрузил ее на grafana.com: https://grafana.com/dashboards/2351
Панель Grafana для Consul
На панели инструментов можно найти следующую информацию:
кто является лидером Consul;
сколько серверов Consul работает;
утилизация ЦПУ во время простоя и информация о нагрузке (для этого понадобится узел-экспортер);
выполнение написания информации о лидере Consul на диске или других узлах.
Это далеко не полный перечень. Панель еще не закончена и представляет собой смешанную комбинацию данных Consul Leader и Consul Server specific. Поэтому на некоторых графиках отображается информация, относящаяся к выбранному серверу Consul (раскрывающаяся вверху страницы), а на некоторых графиках показаны конкретные данные для Consul Leader.
Если у вас есть предложения по улучшению текущей ситуации либо варианты лучшей statsd mapper-конфигурации или панели инструментов, сообщите мне. Надеюсь, мы все можем извлечь выгоду из обмена информацией, чтобы улучшить доступность и эффективность Consul.