我正在使用statsd和datadog以及statsd-instrument ruby库。我的最终目标是跟踪登录用户的数量。
所以我选择度量标准类型,在我的rails应用程序中,我在登录时递增了指标,在注销时递减,如customer.session.count:+1|g
。
但是为了匹配已经存在的登录用户,我写了一个小的curl命令,它使用datadog api
将量表的值设置为指定的值。
问题是,当有人登录或退出时,该值会降至-1
或+1
。
我无法理解。
我的理论是, 当在下一个刷新间隔内未更新时,仪表发送是最新值。但是当我们单独使用curl命令时它会更新,但是当ruby启动时,当data-dog代理发送计量值时,无法知道先前更新的值,因为数据狗代理在登台箱不知道价值。因此,为了使其工作,要么必须使用相当于curl脚本的Ruby代码,要么部署代码,然后在分段中手动执行curl操作,最后在生产框中执行。这个理论有意义吗?
这是卷曲请求:
currenttime=$(date +%s)
curl -X POST -H "Content-Type: application/json" \
-d "{ \"series\":
[{\"metric\": \"customer.session.count\",
\"points\": [[$currenttime, 11042739]],
\"type\": \"gauge\",
\"host\":\"s-customer-owner-01\"
}]
}" \
'https://app.datadoghq.com/api/v1/series?api_key=some_key'
Ruby代码:
#login#create
def create
user = User.find_by(id: params[:user_id])
if user
StatsD.gauge('customer.session.count', '+1')
json: user.to_json, status: 200
else
json: {}, status: 401
end
end
用于注销
# tokens#revoke
def revoke
token = Token.find_by(user_id: get_id_from_token)
status = 400
if token
StatsD.gauge('customer.session.count', -1)
status = 200
end
json: {}, status: status
end