Мониторинг SphinxSearch с помощью MRTG

()

Sphinx это система полнотекстового поиска c поддержкой таких баз данных как MySQL и PostgreSQL. Он обычно используется на проектах с большой нагрузкой, поскольку обладает высокой скоростью поиска и масштабируемостью.

Для наблюдения за Sphinx можно использовать MRTG. Наиболее интересными параметрами для наблюдения являются количество обрабатываемых tcp-соединений и количество выполняемых запросов. Далее будет показано как можно организовать такой мониторинг.

Забирать данные о состоянии Sphinx мы будем вот таким скриптом:

#!/usr/local/bin/php
<?php

// Инклуд с официальным API
// Берётся из официального архива с исходниками Sphinx
// Должен лежать в одной директории с жтим скриптом!!!
include dirname(__FILE__) . DIRECTORY_SEPARATOR . 'sphinxapi.php';

// Получаем имя хоста
$host = isset($argv[1]) ? $argv[1] : '127.0.0.1';

// Создаём объект
$sph = new SphinxClient;

// Указываем сервер
$sph->SetServer($host, 9312);

// Получаем статус во временный массив
$data_tmp = $sph->Status();

// Препарируем временный массив
$data = array();
foreach ($data_tmp as $item) {
    $data[$item[0]] = $item[1];
}

// Отображаем результат
print "{$data['connections']}\n";
print "{$data['queries']}\n";
print "{$data['uptime']}\n";
print "$host\n";

Далее добавляем в файл конфигурации MRTG вот такие строки:

Target[sphinxsearch]: `/usr/local/scripts/mrtg_sphinxsearch.php sphinx.example.com`
MaxBytes[sphinxsearch]: 1
Title[sphinxsearch]: sphinxsearch statistics
PageTop[sphinxsearch]: <h1>sphinxsearch statistics</h1>
AbsMax[sphinxsearch]: 1250000
Options[sphinxsearch]: integer,nopercent,nobanner,growright,dorelpercent,perhour
YLegend[sphinxsearch]: per second
ShortLegend[sphinxsearch]: per second
Legend1[sphinxsearch]: Connections per second
Legend2[sphinxsearch]: Queries per second

Полученный график будет выглядеть примерно так:

Здесь синяя линия это число запросов, обрабатываемых ежесекундно а зелёная - число tcp-соединений. Жёлтая линия показывает соотношение этих двух показателей и является косвенным показателем эффективности использования соединений со sphinx: запросы, выполняемые в рамках одного tcp-соединения выполняются немного быстрее, потому чем ниже эта линия - тем эффективнее используется каждое tcp-соединение.

Ещё одной интересной особенностью Sphinx является реализация в нём протокола MySQL, позволяющая обращаться к Sphinx любому MySQL-клиенту и получать результаты используя SQL-подобный язык запросов (SphinxQL). Чтобы использовать эту возможность в файле конфигурации сервиса в секции "searchd" должна присутствовать строка:

listen = 0.0.0.0:9306:mysql41

Если вы используете Sphinx именно таким образом, то скрипт получения данных для MRTG будет выглядеть так:

#!/usr/bin/php
<?php

// Получаем имя хоста
$host = isset($argv[1]) ? $argv[1] : '127.0.0.1';

// Соединяемся с сервером
mysql_connect("$host:9306");

// Запрос, который надо выполнить
$query = "SHOW STATUS";

// Пытаемся выполнить запрос
$result = mysql_query($query);

// Здесь будут данные
$data = array();

// Если запрос выполнен удачно
if ($result) {
    // Перебираем данные
    while ($row = mysql_fetch_assoc($result)) {
        // Складываем их в массив
        $data[$row['Variable_name']] = $row['Value'];
    }
    // Освобождаем ресурсы
    mysql_free_result($result);
}

// Отображаем нужные данные
print "{$data['connections']}\n";
print "{$data['queries']}\n";
print "{$data['uptime']}\n";
print "$host\n";

На этом всё. Приятной работы!

Ключевые слова: sphinx, sphinxsearch, mrtg, мониторинг.

Комментарии:

Новый комментарий



© 2006-2016 Вадим Калинников aka MooSE