- 921. Minimum Add to Make Parentheses Valid 使括号有效的最少添加
- 915. Partition Array into Disjoint Intervals 分割数组
- 932. Beautiful Array 漂亮数组
- 940. Distinct Subsequences II 不同的子序列 II
Sentinel 提供对所有资源的实时监控,我们可以通过控制台查看。
可以很清楚的看到当前QPS流量趋势。
获取簇点列表 API: GET /clusterNode
当应用启动之后,可以运行下列命令,获得当前所有簇点(ClusterNode)的列表(JSON 格式):
# 客户端IP+与控制台通信端口
http://localhost:8719/clusterNode
返回数组Json
结果字段说明:
[
{
"averageRt":0.0, //平均响应时间
"blockRequest":0, //每分钟拦截的请求个数
"blockedQps":0.0, //每秒拦截个数
"curThreadNum":0, //并发个数
"passQps":1.0, // 每秒成功通过请求
"passReqQps":1.0, //每秒到来的请求
"resourceName":"/registry/machine", 资源名称
"timeStamp":1529905824134, //时间戳
"totalQps":1.0, // 每分钟请求数
"totalRequest":193},
....
]
/clusterNode是由FetchSimpleClusterNodeCommandHandler来处理的。
@CommandMapping(
name = "clusterNode",
desc = "get all clusterNode VO, use type=notZero to ignore those nodes with totalRequest <=0"
)
public class FetchSimpleClusterNodeCommandHandler implements CommandHandler<String> {
public FetchSimpleClusterNodeCommandHandler() {
}
public CommandResponse<String> handle(CommandRequest request) {
String type = request.getParam("type");
List<NodeVo> list = new ArrayList();
Map<ResourceWrapper, ClusterNode> map = ClusterBuilderSlot.getClusterNodeMap();
if (map == null) {
return CommandResponse.ofSuccess(JSONArray.toJSONString(list));
} else {
Iterator var5 = map.entrySet().iterator();
while(var5.hasNext()) {
Entry<ResourceWrapper, ClusterNode> entry = (Entry)var5.next();
if ("notZero".equalsIgnoreCase(type)) {
if (((ClusterNode)entry.getValue()).totalRequest() > 0L) {
list.add(NodeVo.fromClusterNode((ResourceWrapper)entry.getKey(), (ClusterNode)entry.getValue()));
}
} else {
list.add(NodeVo.fromClusterNode((ResourceWrapper)entry.getKey(), (ClusterNode)entry.getValue()));
}
}
return CommandResponse.ofSuccess(JSONArray.toJSONString(list));
}
}
}
可以用下面命令模糊查询该簇点的具体信息,其中 id 对应 resource name,支持模糊查询:
http://localhost:8719/cnode?id=xxxx
结果示例:
idx id thread pass blocked success total aRt 1m-pass 1m-block 1m-all exeption
6 /app/aliswitch2/machines.json 0 0 0 0 0 0 0 0 0 0
7 /app/sentinel-admin/machines.json 0 1 0 1 1 6 0 0 0 0
8 /identity/machine.json 0 0 0 0 0 0 0 0 0 0
9 /registry/machine 0 2 0 2 2 1 192 0 192 0
10 /app/views/machine.html 0 1 0 1 1 2 0 0 0 0
可以用下列命令查询该簇点的调用者统计信息:
http://localhost:8719/origin?id=xxxx
结果示例:
id: nodeA
idx origin threadNum passedQps blockedQps totalQps aRt 1m-passed 1m-blocked 1m-total
1 caller1 0 0 0 0 0 0 0 0
2 caller2 0 0 0 0 0 0 0 0
其中的origin 由 ContextUtil.enter(resourceName,origin) 方法中的 origin 指定。
我们可以通过以下api来查询链路入口的链路树形结构:
http://localhost:8719/tree
EntranceNode: machine-root(t:0 pq:1 bq:0 tq:1 rt:0 prq:1 1mp:0 1mb:0 1mt:0)
-EntranceNode1: Entrance1(t:0 pq:1 bq:0 tq:1 rt:0 prq:1 1mp:0 1mb:0 1mt:0)
--nodeA(t:0 pq:1 bq:0 tq:1 rt:0 prq:1 1mp:0 1mb:0 1mt:0)
-EntranceNode2: Entrance1(t:0 pq:1 bq:0 tq:1 rt:0 prq:1 1mp:0 1mb:0 1mt:0)
--nodeA(t:0 pq:1 bq:0 tq:1 rt:0 prq:1 1mp:0 1mb:0 1mt:0)
t:threadNum pq:passQps bq:blockedQps tq:totalQps rt:averageRt prq: passRequestQps 1mp:1m-passed 1mb:1m-blocked 1mt:1m-total
所有资源的秒级监控日志(metric 日志)在 h o m e / l o g s / c s p / {home}/logs/csp/ home/logs/csp/{appName}-metrics.log.${date}.xx。
例如,该日志的名字可能为 my-service-metrics.log.2018-06-22.1。日志示例:
1529573107000|2018-06-21 17:25:07|sayHello(java.lang.String,long)|10|3601|10|0|2|0|0|1
格式说明:
index 例子 说明
1 1529573107000 时间戳
2 2018-06-21 17:25:07 日期
3 sayHello(java.lang.String,long) 资源名称
4 10 每秒通过的资源请求个数 (pass QPS)
5 3601 每秒资源被拦截的个数 (block QPS)
6 10 每秒完成调用的资源个数 (complete QPS),包括正常结束和异常结束的情况
7 0 每秒资源的异常个数 (error QPS)
8 2 资源平均响应时间(ms)
9 0 该秒占用未来请求的数目(since 1.5.0)
10 0 预留用
11 1 资源分类(since 1.7.0)
同样的,每秒的拦截日志(block 日志)也会出现在 <用户目录>/logs/csp/sentinel-block.log 文件下。如果没有发生拦截,则该日志不会出现。
2014-06-20 16:35:10|1|sayHello(java.lang.String,long),FlowException,default,origin|61,0
2014-06-20 16:35:11|1|sayHello(java.lang.String,long),FlowException,default,origin|1,0
index 例子 说明
1 2014-06-20 16:35:10 时间戳
2 1 该秒发生的第一个资源
3 sayHello(java.lang.String,long) 资源名称
4 XXXException 拦截的原因, 通常 FlowException 代表是被限流规则拦截,DegradeException 则表示被降级,SystemBlockException 则表示被系统保护拦截
5 default 生效规则的调用来源(参数限流中代表生效的参数)
6 origin 被拦截资源的调用者,可以为空
7 61,0 61 被拦截的数量,0 无意义可忽略
相关API: GET /metric
http://localhost:8719/metric?identity=XXX&startTime=XXXX&endTime=XXXX&maxLines=XXXX
需指定以下 URL 参数:
identity:资源名称
startTime:开始时间(时间戳)
endTime:结束时间
maxLines:监控数据最大行数
返回和metric 日志 格式一样的内容。例如:
1529998904000|2018-06-26 15:41:44|abc|100|0|0|0|0
1529998905000|2018-06-26 15:41:45|abc|4|5579|104|0|728
1529998906000|2018-06-26 15:41:46|abc|0|15698|0|0|0
1529998907000|2018-06-26 15:41:47|abc|0|19262|0|0|0
1529998908000|2018-06-26 15:41:48|abc|0|19502|0|0|0
1529998909000|2018-06-26 15:41:49|abc|0|18386|0|0|0
1529998910000|2018-06-26 15:41:50|abc|0|19189|0|0|0
1529998911000|2018-06-26 15:41:51|abc|0|16543|0|0|0
1529998912000|2018-06-26 15:41:52|abc|0|18471|0|0|0
1529998913000|2018-06-26 15:41:53|abc|0|19405|0|0|0
Closed. This question is opinion-based。它当前不接受答案。 想改善这个问题吗?更新问题,以便editing this post用事实和引用来回答。 2年前关闭。
我想显示我的网站上所有用户都在线(实时;就像任何聊天模块一样)。我正在使用下面提到的脚本来执行此操作。 HTML: Javascript: var doClose = false; documen
有什么方法可以知道 Algolia 何时成功处理了排队作业,或者与上次重新索引相比,Algolia 是否索引了新文档? 我们希望建立一个系统,每当新文档被索引时,浏览网站的用户都会收到实时更新警告,并
构建将在“桌面”而不是浏览器中运行的 Java 应用程序的推荐策略是什么。该应用程序的特点是: 1. Multiple application instances would be running o
这是场景: 我正在编写一个医疗相关程序,可以在没有连接的情况下使用。当采取某些措施时,程序会将时间写入CoreData记录。 这就是问题所在,如果他们的设备将时间设置为比实际时间早的时间。那将是一个大
我有: $(document).ready(function () { $(".div1, .div2, .div3, .div4, .div5").draggable();
我有以下 jquery 代码: $("a[id*='Add_']").live('click', function() { //Get parentID to add to. var
我有一个 jsp 文件,其中包含一个表单。提交表单会调用处理发送的数据的 servlet。我希望当我点击提交按钮时,一个文本区域被跨越并且应该实时显示我的应用程序的日志。我正在使用 Tomcat 7。
我编辑了我的问题,我在 Default.aspx 页面中有一个提交按钮和文本框。我打开两个窗口Default.aspx。我想在这个窗口中向文本框输入文本并按提交,其他窗口将实时更新文本框。 请帮助我!
我用 php 创建了一个小型 CMS,如果其他用户在线或离线,我想显示已登录的用户。 目前,我只创建一个查询请求,但这不会一直更新。我希望用户在发生某些事情时立即看到更改。我正在寻找一个类似于 fac
我有以下问题需要解决。我必须构建一个图形查看器来查看海量数据集。 我们有一些特定格式的文件,其中包含数百万条代表实验结果的记录。每条记录代表大图上的一个样本点。我见过的最大的文件有 4370 万条记录
我最近完成了申请,但遇到了一个大问题。我一次只需要允许 1 个用户访问它。每个用户每次都可以访问一个索引页面和“开始”按钮。当用户点击开始时,应用程序锁定,其他人需要等到用户完成。当用户关闭选项卡/浏
我是 Android 开发新手。我正在寻找任何将音高变换应用到输出声音(实时)的方法。但我找不到任何起点。 我找到了这个 topic但我仍然不知道如何应用它。 有什么建议吗? 最佳答案 一般来说,该算
背景 用户计算机上的桌面应用程序从调制解调器获取电话号码,并在接到电话后将其发送到 PHP 脚本。目前,我可以通过 PHP 在指定端口上接收数据/数据包。然后我有一个连接到 411 数据库并返回指定电
很抱歉提出抽象问题,但我正在寻找一些关于在循环中执行一些等效操作的应用程序类型的示例/建议/文章,并且循环的每次迭代都应该在特定时间部分公开其结果(例如, 10 秒)。 我的应用程序在外部 WCF 服
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: What specifically are wall-clock-time, user-cpu-time,
我最近遇到了一个叫做 LiveChart 的工具,决定试用一下。 不幸的是,我在弄清楚如何实时更新图表值时遇到了一些问题。我很确定有一种干净正确的方法可以做到这一点,但我找不到它。 我希望能够通过 p
我正在实现实时 flutter 库 https://pub.dartlang.org/packages/true_time 遇到错误 W/DiskCacheClient(26153): Cannot
我一直在使用 instagram 的实时推送 api ( http://instagram.com/developer/realtime/ ) 来获取特定位置的更新。我使用“半径”的最大可能值,即 5
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
我是一名优秀的程序员,十分优秀!