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";
На этом всё. Приятной работы!

