Все о NetFlow и sFlow от Web Control
Меню сайта


Категории раздела
Cisco [6]
Flexible NetFlow [2]
IPFIX [5]
NetFlow [73]
sFlow [4]
StealthWatch [16]
Другие производители [23]
Мониторинг трафика [15]
Отчетность NetFlow [1]
Сетевая безопасность [37]


Партнеры



Вход


Поиск


Архив новостей


Приветствую Вас, Гость · RSS 09.07.2025, 07:01
Главная » 2012 » Август » 17 » sFlow. Мониторинг на языке скриптов
10:58
sFlow. Мониторинг на языке скриптов

Внедрение мониторинга sFlow в широко используемые приложения до сих пор не стоило усилий, несмотря на, казалось, возможность получения масштабируемого, легко внедряемого решения с минимальным влиянием на производительность. Проблема в мониторинге приложений, разработанных на языках скриптов, таких как PHP, Python, Ruby или Perl.

Но вот теперь появился простой JSON API, добавленный в hsflowd, который позволяет легко интегрировать мониторинг производительности на языке скриптов. API является реализацией драфта sFlow Application Structure, который определяет основной набор метрик производительности на уровне приложений.

В настоящее время API реализован только для Linux. Для того, чтобы его попробовать, вам необходимо проверить транк и создать hsflowd из исходного кода:

svn co https://host-sflow.svn.sourceforge.net/svnroot/host-sflow/trunk host-sflow
cd host-sflow
make
make install
make schedule

JSON API будет включен в ожидаемый релиз Host sFlow 1.21.

Следующая строка в файле /etc/hsflowd.conf откроет UDP-порт для получения закодированных метрик JSON:

jsonPort = 36343

Примечание: Рекомендуется использовать порт по умолчанию, 36343, поскольку любые изменения номера порта требуют соответствующих изменений во всех скриптах, которые посылают сообщения JSON. Значение jsonPort вписано в файле /etc/hsflowd.auto , поэтому оно доступно всем скриптам клиента, также как и остальные установки sFlow. Демон hsflowd использует только сообщения, которые сгенерированы на этом же хосте, поэтому это может быть проблемой, поскольку hsflowd должен быть инсталлирован на каждом хосте для того, чтобы предоставлять метрики производительности.

Ниже приведен пример сообщения JSON, которое скрипт может отсылать для описания результата транзакции:

{"flow_sample:{
"app_name":"myapp",
"app_operation":{
"operation":"user.friend",
"attributes":"id=123&handle=sith",
"status_descr":"OK",
"status":0,
"req_bytes":43,
"resp_bytes":234,
"uS":2000},
"app_initiator":{"actor":"123"},
"app_target":{"actor":"231"},
"extended_socket_ipv4":{
"protocol":6,
"local_ip":"10.0.0.1",
"remote_ip":"10.0.0.23",
"local_port":123,
"remote_port":43032}
}}

Примечание: Имена структур и атрибутов сообщения JSON соответствуют структуре, определенной в sFlow Application Structures.

Большая часть структур атрибутов - опциональна и сообщение может быть короче:

{"flow_sample:{
"app_name":"myapp",
"app_operation":{
"operation":"user.friend",
"attributes":"",
"status_descr":"",
"status":0,
"req_bytes":0,
"resp_bytes":0,
"uS":0}
}

Создание и посылка сообщений JSON как датаграммы UDP в hsflowd - простая задача. Например, следующая функция PHP app_operation форматиhetn и отсылает JSON-сообщение.

function app_operation($app_name,
$op_name,
$attributes="",
$status=0,
$status_desr="",
$req_bytes=0,
$resp_bytes=0,
$uS=0,
$sampling_rate=1) {
if($sampling_rate > 1) {
if(mt_rand(1,$sampling_rate) != 1) { return; }
}

try {
$sock = fsockopen("udp://localhost",36343,$errno,$errstr);
if(! $sock) { return; }
fwrite($sock, '{"flow_sample":{
"app_name":"'.$app_name.'",
"sampling_rate":'.$sampling_rate.',
"app_operation":{
"operation":"'.$op_name.'",
"attributes":"'.$attributes.'",
"status_descr":"'.$status_descr.'",
"status":'.$status.',
"req_bytes":'.$req_bytes.',
"resp_bytes":'.$resp_bytes.',
"uS":'.$uS.'}}}');
fclose($sock);
} catch(Exception $e) {}
}

Примечание. Эта функция поддерживает транзакционную выборку, т.е. если вы установите частоту выборки 10, то у вас будет 1 шанс из 10, что операция сгенерирует измерение. Выборка позволяет вам уменьшить перегрузку измерений в среде с высоким уровнем транзакций и при этом получать полезные измерения. Вам следует установить частоту выборки, чтобы уменьшить влияние мониторинга на ваше приложение до приемлемого уровня, хотя, возможно, вам этого и вовсе не нужно делать, если у вас не происходит сотен операций в секунду.

Включение функции app_operation в вашу библиотеку php, облегчает ее использование в приложении, просто добавляя одну строку в код в страницы:



Когда hsflowd получает сообщение JSON, он увеличивает счетчики производительности приложения (в масштабе с учетом частоты выборки). Данные счетчиков периодически экспортируются вместе с другими метриками sFlow (процессор, память, диск, сетевые I/O).
Ниже приведены данные из sflowtool, которые показывают содержимое датаграммы sFlow, содержащую счетчики приложения:

startDatagram =================================
datagramSourceIP 127.0.0.1
datagramSize 112
unixSecondsUTC 1336846918
datagramVersion 5
agentSubId 100000
agent 10.0.0.150
packetSequenceNo 2670
sysUpTime 77514000
samplesInPacket 1
startSample ----------------------
sampleType_tag 0:2
sampleType COUNTERSSAMPLE
sampleSequenceNo 4
sourceId 3:150002
counterBlock_tag 0:2202
application myapp
status_OK 23
errors_OTHER 0
errors_TIMEOUT 0
errors_INTERNAL_ERROR 0
errors_BAD_REQUEST 0
errors_FORBIDDEN 0
errors_TOO_LARGE 0
errors_NOT_IMPLEMENTED 0
errors_NOT_FOUND 0
errors_UNAVAILABLE 0
errors_UNAUTHORIZED 0
endSample ----------------------
endDatagram =================================

Счетчики приложений могут быть посланы в инструменты типа Ganglia или Graphite, чтобы отслеживать производительность отдельных примеров приложения, или полного кластера приложений.
Транзакции также выбираются с помощью hsflowd с учетом установок в hsflowd.conf или DNS-SD. Можно устанавливать частоту выборки и отдельно, указывая имя приложения. Например, чтобы заменить уровень выборки по умолчанию в 400 выборкой 100 (1 раз из 100) для приложения myapp, используйте следующую установку:

sampling.app.myapp=100

Примечание. Если выборка осуществляется до пересылки в hsflowd, то там уже осуществляется подвыборка, чтобы получить нужное число. Например, если скрипт использует выборку 1 из 10, то hsflowd сделает дополнительную выборку 1 из 10, чтобы получить желаемую степень выборки 1 из 100.

Ниже приведены данные из sflowtool, которые показывают содержимое датаграммы sFlow, содержащую выборку транзакций приложения:

startDatagram =================================
datagramSourceIP 127.0.0.1
datagramSize 136
unixSecondsUTC 1336846925
datagramVersion 5
agentSubId 100000
agent 10.0.0.150
packetSequenceNo 2671
sysUpTime 77521000
samplesInPacket 1
startSample ----------------------
sampleType_tag 0:1
sampleType FLOWSAMPLE
sampleSequenceNo 1
sourceId 3:150002
meanSkipCount 10
samplePool 10
dropEvents 0
inputPort 0
outputPort 1073741823
flowBlock_tag 0:2202
flowSampleType applicationOperation
application myapp
operation user.friend
request_bytes 0
response_bytes 0
status SUCCESS
duration_uS 0
endSample ----------------------
endDatagram =================================

Любой, кто знаком с инструментом Etsy's StatsD, увидит похожесть принципов мониторинга. Основное различие в том, что измерения на основе sFlow содержат дополнительную структуру, позволяющую им быть частью полномасштабной системы мониторинга, объединяющей сетевые устройства, хосты и приложения.

Примечание. Дополнение стандарта sFlow метриками приложений и внедрение их в hsflowd сейчас находятся еще на ранней стадии.
Категория: sFlow | Просмотров: 1178 | Добавил: SMG | Теги: hsflowd, sflow | Рейтинг: 0.0/0