Тема: Правильные и удобные метрики (Graphite+Grafana+Collectd|Diamond)
Само собой это не единственное решение, но мне понравилось. Проблема только в том что нету нормального алертинга для всего этого дела. Есть проект seyren, но назвать его нормальным как-то язык не поворачивается.
Давайте поговорим о Graphite, Grafana, Collectd, Diamond, Carbon, Whisper, Apache. Вот пример как это все смотрится в реале. Это графики жизнедеятельности CEPH
Я тут покажу как просто и быстро можно создать нестандартные метрики на этой системе и если кому-то это будет интересно то опишу как это все настраивается.
Задача - показать рост OpenStack'a - это наш внутренний клауд.
Сам опенстак имеет достаточно удобный коммандлайновый интерфейс, api - полная опа! Вот она наша статистика, которую я хочу показать широкой общественности
$ nova hypervisor-stats
+----------------------+---------+
| Property | Value |
+----------------------+---------+
| count | 25 |
| current_workload | 7 |
| disk_available_least | 695206 |
| free_disk_gb | 1228026 |
| free_ram_mb | 1523170 |
| local_gb | 1247272 |
| local_gb_used | 19246 |
| memory_mb | 5649902 |
| memory_mb_used | 4126732 |
| running_vms | 357 |
| vcpus | 760 |
| vcpus_used | 1674 |
+----------------------+---------+
Отправлять в Carbon можно несколькими способами, на Debian мы используем Diamond, на Centos Collectd.
$ cat /etc/collectd/collectd.d/write_graphite.conf
LoadPlugin write_graphite
<Plugin write_graphite>
<Carbon>
Host "1.1.1.1"
Port "2003"
StoreRates true
AlwaysAppendDS false
EscapeCharacter "_"
</Carbon>
</Plugin>
А вот и "плугин" для отправки метрик, есть и другой способ, но этот быстрый, с условием что не надо отправлять часто метрики.
$ cat /etc/collectd/collectd.d/exec.conf
LoadPlugin exec
<Plugin exec>
Exec "nova" "/etc/collectd/sh/openstack.sh"
</Plugin>
Суть скрипта openstack.sh - выдать параметры в виде
PUTVAL server/openstack/key interval=XXX N:XXX
$ cat /etc/collectd/sh/openstack.sh
#!/bin/bash
HOSTNAME="${COLLECTD_HOSTNAME:-`hostname -f`}"
INTERVAL="${COLLECTD_INTERVAL:-60}"
export OS_USERNAME=xxx
export OS_PASSWORD=xxx
export OS_TENANT_NAME=xxx
export OS_AUTH_URL=http://2.2.2.2:35357/v2.0
while sleep "$INTERVAL"
do
TMP_K=""
TMP_V=""
declare -A arr
CMD=`/usr/bin/nova hypervisor-stats | grep -v '| Pro' | grep '|' | awk '{print ""$2"="$4}'`
while read line; do
TMP_K=`echo "$line" | cut -d "=" -sf 1`
TMP_V=`echo "$line" | cut -d "=" -sf 2-`
arr["$TMP_K"]=$TMP_V
done <<-EOL
$CMD
EOL
for key in ${!arr[@]}; do
echo "PUTVAL $HOSTNAME/openstack/${key} interval=$INTERVAL N:${arr[${key}]}"
done
unset arr
done
Все новые типы (ключи) должны быть описаны в Collectd.
$ diff /usr/share/collectd/types.db /usr/share/collectd/types.db_copy
192,204d191
<
< current_workload value:GAUGE:U:U
< memory_mb_used value:GAUGE:U:U
< free_ram_mb value:GAUGE:U:U
< running_vms value:GAUGE:U:U
< local_gb_used value:GAUGE:U:U
< count value:GAUGE:U:U
< vcpus value:GAUGE:U:U
< vcpus_used value:GAUGE:U:U
< free_disk_gb value:GAUGE:U:U
< local_gb value:GAUGE:U:U
< memory_mb value:GAUGE:U:U
< disk_available_least value:GAUGE:U:U
Метрики дошли до базы
Можно создавать графики, это делается очень просто, либо клик-клик-клик, либо просто пишем строку запроса
Все.