statsd可进行数据的简单计算,作为数据中间层服务,支持原值gauge,时间值timing,计数值counter等数据类型,用于常用数据统计场景。
php语言推送udp数据到statsd服务代码示例如下:
/** 标准gauge统计,用于记录固定值
* metric: 指标名
* value: 固定值
* ags: 用户自定义tags,用于指标查询展示
*/
public static function Gauges($metric, $value, $tags = null)
{
self::sendMetric("g", $metric, $value, $tags);
}
/**
* 标准counter统计,用于常规打点计数(每次增加$value)
* metric: 指标名
* value: 计数值
* ags: 用户自定义tags, 用于指标查询展示
*/
public static function Counters($metric, $value, $tags = null)
{
self::sendMetric("c", $metric, $value, $tags);
}
/** 标准timings统计,用于记录时间值
* metric: 指标名
* value: 时间值(ms)
* ags: 用户自定义tags,用于指标查询展示
*/
public static function Timings($metric, $value, $tags = null)
{
self::sendMetric("ms", $metric, $value, $tags);
}
/**
* 发送统计指标到statsd
* type: 数据类型,c/ms/g/s
* metric:指标名
* value:指标值
* tags:用户自定义tags,用于指标查询展示
*/
public static function sendMetric($type, $metric, $value, $tags = null)
{
$lines = array();
$lines[] = $metric . ':' . $value;
$lines[] = $type;
$tags["_project_"] = 'www.xiaoxinxiaoxina.com'; //项目名(域名),用于指标查询展示
$tags["_instance_"] = $_SERVER['SERVER_ADDR']; //服务器地址,用于指标查询展示
$new_tags = array();
foreach ($tags as $k => $v) {
$new_tags[] = "{$k}:{$v}";
}
$lines[] = "#" . implode(",", $new_tags);
$message = implode("|", $lines);
$statsdServer = array("10.10.10.10", "8125");
$statsdSocket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
socket_sendto($statsdSocket, $message, strlen($message), 0, $statsdServer[0], $statsdServer[1]);
}