Spec-Zone.ru › OpenTSDB

Быстрый старт

После того, как вы запустили 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API