Быстрый старт
После того, как вы запустили TSD (последовав руководству по установке), вы можете следовать шагам ниже, чтобы получить некоторые данные в OpenTSDB. После того, как вы сохраните некоторые данные, откройте графический интерфейс и попробуйте сгенерировать некоторые графики.
Создайте свои первые метрики
Метрики необходимо зарегистрировать, прежде чем вы сможете начать сохранять точки данных для них. Это помогает избежать поглощения нежелательных данных и обнаруживать опечатки. Вы можете включить автоматическое создание метрик через конфигурацию. Для регистрации одной или нескольких метрик вызовите mkmetric командную строку:
./tsdb mkmetric mysql.bytes_received mysql.bytes_sent
Это создаст 2 метрики: mysql.bytes_received и mysql.bytes_sent
Новые метки, с другой стороны, автоматически регистрируются всякий раз, когда они используются впервые. В настоящее время OpenTSDB позволяет иметь не более 2^24 = 16 777 216 различных метрик, 16 777 216 различных имен меток и 16 777 216 различных значений меток. Это потому, что каждому из них присваивается UID с 3 байтами. Имена метрик, имена меток и значения меток имеют свои собственные пространства UID, поэтому вы можете иметь 16 777 216 каждого вида. Размер каждого пространства можно настроить, но в настоящее время нет параметра, который бы раскрывал этот параметр конфигурации. Поэтому имейте в виду, что использование идентификатора пользователя или идентификатора события в качестве значения метки не будет работать, если у вас большой сайт.
Начните сбор данных
Итак, теперь, когда у нас есть 2 метрики, мы можем начать отправлять данные в TSD. Давайте напишем небольшую оболочку для сбора данных из MySQL и отправки их в TSD:
cat >mysql-collector.sh <<\EOF
#!/bin/bash
set -e
while true; do
mysql -u USER -pPASS --batch -N --execute "SHOW STATUS LIKE 'bytes%'" \
| awk -F"\t" -v now=`date +%s` -v host=`hostname` \
'{ print "put mysql." tolower($1) " " now " " $2 " host=" host }'
sleep 15
done | nc -w 30 host.name.of.tsd PORT
EOF
chmod +x mysql-collector.sh
nohup ./mysql-collector.sh &
Каждые 15 секунд скрипт будет собирать 2 точки данных из MySQL и отправлять их в TSD. Вы можете использовать меньший интервал времени ожидания для большей детализации.
Что делает скрипт? Если вы не большой поклонник сценариев оболочки и awk, вам может не быть очевидно, как это работает. Но это просто. Команда set -e просто указывает bash завершить работу с ошибкой, если любая из команд завершится ошибкой. Это упрощает обработку ошибок. Затем сценарий входит в бесконечный цикл. В этом цикле мы запрашиваем MySQL, чтобы получить 2 его статусные переменные:
$ mysql -u USER -pPASS --execute "SHOW STATUS LIKE 'bytes%'" +----------------+-------+ | Variable_name | Value | +----------------+-------+ | Bytes_received | 133 | | Bytes_sent | 190 | +----------------+-------+
Флаги --batch -N просят команду mysql удалить удобочитаемые данные, чтобы нам не приходилось отфильтровывать их самим. Затем вывод перенаправляется в awk, которому сказано разделять поля по табуляции -F"\t" потому что с флагом --batch именно это mysql будет использовать. Мы также создаем несколько переменных, одна называется now` and initialize it to the current timestamp, the other named ``host` and set to the hostname of the local machine. Then, for every line, we print put ``mysql., за которой следует нижний регистр первого слова, затем пробел, затем текущая метка времени, затем второе слово (значение), еще один пробел и, наконец, host= и текущее имя хоста. Повторяйте каждые 15 секунд. Параметр -w 30, заданный nc, просто устанавливает тайм-аут соединения с TSD. Имейте в виду, что это просто пример, на практике вы можете использовать коллектор MySQL из tcollector.
Если у вас нет сервера MySQL для мониторинга, вы можете попробовать это вместо этого, чтобы собрать основные метрики нагрузки с ваших серверов Linux:
cat >loadavg-collector.sh <<\EOF
#!/bin/bash
set -e
while true; do
awk -v now=`date +%s` -v host=`hostname` \
'{ print "put proc.loadavg.1m " now " " $1 " host=" host;
print "put proc.loadavg.5m " now " " $2 " host=" host }' /proc/loadavg
sleep 15
done | nc -w 30 host.name.of.tsd PORT
EOF
chmod +x loadavg-collector.sh
nohup ./loadavg-collector.sh &
Это позволит сохранить показания 1-минутной и 5-минутной средней загрузки вашего сервера в OpenTSDB, отправив простые «команды в стиле telnet» в TSD:
put proc.loadavg.1m 1288946927 0.36 host=foo put proc.loadavg.5m 1288946927 0.62 host=foo put proc.loadavg.1m 1288946942 0.43 host=foo put proc.loadavg.5m 1288946942 0.62 host=foo
Импорт пакетных данных
Предположим, у вас есть задача cron, которая обрабатывает гигабайты журналов приложения каждый день или каждый час, чтобы извлечь данные профилирования. Например, вы можете регистрировать время обработки запроса, а ваша задача cron будет вычислять среднее значение для каждого 30-секундного интервала. Может быть, вас особенно интересуют 2 типа запросов, обрабатываемых вашим приложением, поэтому вы будете вычислять отдельные средние значения для этих запросов и еще одно среднее значение для каждого другого типа запроса. Таким образом, ваша задача cron может генерировать выходной файл, который выглядит так:
1288900000 42 foo 1288900000 51 bar 1288900000 69 other 1288900030 40 foo 1288900030 59 bar 1288900030 80 other
Первый столбец — метка времени, второй — средняя задержка для этого 30-секундного интервала, а третий — тип запроса, о котором идет речь. Если вы запустите задачу cron на суточные журналы, у вас будет 8640 таких строк. Чтобы импортировать их в OpenTSDB, вам нужно немного изменить задачу cron, чтобы она генерировала выходной результат в следующем формате:
myservice.latency.avg 1288900000 42 reqtype=foo myservice.latency.avg 1288900000 51 reqtype=bar myservice.latency.avg 1288900000 69 reqtype=other myservice.latency.avg 1288900030 40 reqtype=foo myservice.latency.avg 1288900030 59 reqtype=bar myservice.latency.avg 1288900030 80 reqtype=other
Обратите внимание, что мы просто связываем каждую точку данных с именем метрики (myservice.latency.avg) и даем имя метке, которая представляет тип запроса. Если у каждого сервера есть свои журналы, и вы обрабатываете их отдельно, вы можете добавить еще одну метку в каждую строку, например, метку host=foo , которую мы видели в предыдущем разделе. Таким образом, вы сможете отобразить задержку каждого сервера индивидуально, помимо средней задержки в целом и/или по типу запроса. Чтобы импортировать файл данных в формате выше (метка, метка времени, значение, метки), просто выполните следующую команду:
./tsdb import your-file
Если ваш файл данных большой, сначала распакуйте его с помощью gzip. Это может быть так же просто, как перенаправить вывод вашей задачи cron в gzip -9 >output.gz вместо записи непосредственно в файл. Команда импорта может читать файлы, сжатые gzip, и это значительно улучшает производительность при импорте больших данных.
Самомониторинг
Каждый TSD экспортирует некоторые статистические данные о себе через простую команду stats. Вы можете собирать эти статистические данные и отправлять их обратно в TSD каждые несколько секунд. Сначала создайте необходимые метрики:
echo stats | nc -w 1 localhost 4242 \
| awk '{ print $1 }' | sort -u \
| xargs ./tsdb mkmetric
Это запрос статистики из TSD (предполагая, что он работает на локальном хосте и прослушивает порт 4242), извлекает имена метрик из статистики и присваивает им UIDs. Затем вы можете использовать этот простой скрипт для сбора статистики и сохранения ее в OpenTSDB:
#!/bin/bash INTERVAL=15 while :; do echo stats || exit sleep $INTERVAL done | nc -w 30 localhost $1 \ | sed 's/^/put /' \ | nc -w 30 localhost $1
Таким образом, вы будете собирать и сохранять статистику из TSD каждые 15 секунд.
Создание графика
После того, как вы записали некоторые данные с помощью любого из методов выше, вы можете попробовать создать график с использованием этих данных. Откройте графический интерфейс в вашем любимом браузере. Если вы запускаете свой TSD на localhost, просто посетите http://127.0.0.1:4242.
Сначала выберите одну из метрик и поместите ее в поле Metric. Например, proc.loadavg.1m. По мере ввода вы должны увидеть всплывающие строки автозаполнения, и вы можете щелкнуть по любой из них.
Затем щелкните по полю From в верхней части страницы, и должно появиться всплывающее окно выбора даты. Выберите любое время вчерашнего дня и щелкните по другому полю. В этот момент вы ненадолго увидите «Загрузка графика...», за которым последует фактический график. Если график пустой, возможно, он не нашел последних точек данных, поэтому щелкните по ссылке (now) и страница должна обновиться.
Этот начальный график будет агрегировать все временные ряды для выбранной метрики. Попробуйте ограничить свой запрос определенным хостом, добавив host как значение в левом поле рядом с меткой Tags (если это не так), и добавьте конкретное имя хоста (например, foo) в правом поле. После щелчка в другое поле график должен перерисоваться с другой информацией.
© 2010–2016 The OpenTSDB Authors
Licensed under the GNU LGPLv2.1+ and GPLv3+ licenses.
http://opentsdb.net/docs/build/html/user_guide/quickstart.html