使用Mackerel来显示NewRelic的图表
我一直在使用NewRelic来监视应用程序的性能,但为了更高效地监视服务器,我也引入了Mackerel。
由于分别查看这两个工具很不方便,所以我将NewRelic的图表制作成了Mackerel的一部分。
创建平均响应速度的图表
你可以通过NewRelic按照以下方式获取到这样的数据。
参考资料:在NewRelic的API中获取指标
https://docs.newrelic.com/docs/apis/rest-api-v2/application-examples-v2/obtain-web-transaction-time-data-v2
curl -X GET 'https://api.newrelic.com/v2/applications/${APPID}/metrics/data.json' \
-H 'X-Api-Key:${APIKEY}' -i \
-d 'names[]=WebTransactionTotalTime&values[]=average_response_time'
{
"metric_data": {
"from": "2017-09-26T05:42:53+00:00",
"to": "2017-09-26T06:12:53+00:00",
"metrics_not_found": [],
"metrics_found": [
"WebTransactionTotalTime"
],
"metrics": [
{
"name": "WebTransactionTotalTime",
"timeslices": [
{
"from": "2017-09-26T05:41:00+00:00",
"to": "2017-09-26T05:42:00+00:00",
"values": {
"average_response_time": 198
}
},
{
"from": "2017-09-26T05:42:00+00:00",
"to": "2017-09-26T05:43:00+00:00",
"values": {
"average_response_time": 201
}
},
以下略
所以,将此Json格式化为Mackerel使用的格式,并将其发布到MackerelAPI,即可创建图形。
您需要将NewRelic的日期时间转换为Epoch秒。
参考:通过API将指标发布到Mackerel
[
{
"hostId": "マカレルのホストのID",
"name": "custom.newrelic_restime.BookLive",
"time": 1506404760,
"value": 210
},
{
"hostId": "マカレルのホストのID",
"name": "custom.newrelic_restime.BookLive",
"time": 1506404820,
"value": 216
},
以下略

但是我想要的图表不是这个…
我希望能够在Mackerel上看到像NewRelic那样,可以看到每个数据库和外部通信的图表堆叠起来的情况。

看起来要仔细查看这里的底部,并努力获取并计算才行…
curl -X GET 'https://api.newrelic.com/v2/applications/${APPID}/metrics/data.json' \
-H 'X-Api-Key:${APIKEY}' -i \
-d 'names[]=Datastore/${DBTYPE}/allWeb
&names[]=Datastore/${DBTYPE}/allWeb
&names[]=Datastore/${DBTYPE}/allWeb
&names[]=External/allWeb
&names[]=WebTransactionTotalTime
&names[]=HttpDispatcher
&values[]=average_response_time
&values[]=call_count'
获取数据后,进行计算并将结果转换为秒数等格式,然后将其发布到Mackerel。
Application total time = WebTransactionTotalTime - Datastore time - Database time - (Ruby) Database - Web external - Memcache
Datastore time = ( Datastore/${DBTYPE}/allWeb:average_response_time * Datastore/${DBTYPE}/allWeb:call_count ) / HttpDispatcher:call_count
Web external = ( External/allWeb:average_response_time * External/allWeb:call_count ) / HttpDispatcher:call_count
出来了。

只要不需要查看详细信息,似乎不需要看NewRelic了。