使用过阿里sentinel-dashboard的童鞋们都知道控制台里默认的实时流量监控数据只保留5分钟(在内存中)。阿里sentinel官网地址(https://github.com/alibaba/Sentinel),如图
所以想查历史流量情况就不行,需要将监控数据持久化。
参考https://www.cnblogs.com/cdfive2018/p/9914838.html博客,他里面有段代码
private MetricEntity convertToMetricEntity(MetricPO metricPO) {
MetricEntity metricEntity = new MetricEntity();
metricEntity.setId(metricPO.getId());
metricEntity.setGmtCreate(new Date(metricPO.getGmtCreate()));
metricEntity.setGmtModified(new Date(metricPO.getGmtModified()));
metricEntity.setApp(metricPO.getApp());
metricEntity.setTimestamp(Date.from(metricPO.getTime().minusMillis(TimeUnit.HOURS.toMillis(UTC_8))));// 查询数据减8小时
metricEntity.setResource(metricPO.getResource());
metricEntity.setPassQps(metricPO.getPassQps());
metricEntity.setSuccessQps(metricPO.getSuccessQps());
metricEntity.setBlockQps(metricPO.getBlockQps());
metricEntity.setExceptionQps(metricPO.getExceptionQps());
metricEntity.setRt(metricPO.getRt());
metricEntity.setCount(metricPO.getCount());
return metricEntity;
}
存在influxdb中时加了八个小时,导致展示时有问题。所以建议这句
metricEntity.setTimestamp(Date.from(metricPO.getTime().minusMillis(TimeUnit.HOURS.toMillis(0)))); 不要加8小时。
将持久化的数据以图表的方式展示出来
使用grafana开源的工具,天然支持influxdb。读者自行并配置安装。
下面我们将持久化的数据展示出来。
1.进入页面添加数据源
2.选择influxdb,并配置
其他按默认值填写
database填之前创建的数据库sentinel_db,用户名和密码没有就不用填。
3.创建监控面板
选这个折现图
例如配置请求流量
例如配置请求响应时间
遇到的坑:
在没有去掉持久化加8小时的时候,grafana监控的X轴的时间老是差8小时,然后就修改grafana里的时区,但是修改了时区,显示的数据又不对,折腾了很长时间,后来知道是它源码里加8小时了。
解决办法:就是持久化时源码里不要加8小时,grafana里的时区就按默认就好,完美解决。