Sentinel控制台规则配置

1.启动控制台

下载链接:https://github.com/alibaba/Sentinel/releases

启动控制台

java -jar sentinel-dashboard-1.8.0.jar

2.Sentinel控制台

实时监控

监控接口通过的QPS和拒绝的QPS

在这里插入图片描述

注:

​ QPS(Query Per Second),QPS 其实是衡量吞吐量(Throughput)的一个常用指标,就是说服务器在一秒的时间内处理了多少个请求
TPS(Transaction Per Second) 每秒钟系统能够处理的事务的数量。

​ QPS(TPS):每秒钟 request/事务 的数量 (此处 / 表示 或的意思)

​ 并发数: 系统同时处理的request/事务数 (此处 / 表示 或的意思)

​ 响应时间: 一般取平均响应时间

​ QPS(TPS)= 并发数/平均响应时间

簇点链路

用来显示微服务的所监控的API ,可以对一系列的规则进行设置。

在这里插入图片描述

流控规则

流量控制(flow control),其原理是监控应用流量的 QPS 或并发线程数等指标,当达到指定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。 ==== FlowRule RT(响应时间) 1/0.2s =5

在这里插入图片描述

在这里插入图片描述

1.Provider 端控制脉冲流量:

​ 通常我们会在服务提供端进行服务流控,因为服务端始终是被别人调用的,那么就需要在被调用端进行流控,流量都会集中在被调用端的服务上面来控制脉冲流量。

2.针对不同来源来进行流控:

​ 比如,小程序,App端,H5端分别调用一个服务。如果小程序进来的流量别较少,那么我们就可以针对App进来的流量进行流控。

流控设置如下:

在这里插入图片描述

当1秒访问量超过了3次时:

在这里插入图片描述

自定义异常的输出:

@RequestMapping("/flow")
@SentinelResource(value = "flow",blockHandler = "flowBlockHandler")
public String flow() throws InterruptedException {
    return "正常访问";
}

public String flowBlockHandler(BlockException e){
    return "流控";
}

这时QPS>2时:

在这里插入图片描述

注意:一旦我们的服务重启之后,我们在控制台配置的信息都会丢失,因为它是存储在内存之中的。这时就需要我们再重启一遍,但是在生产环境中这样的操作是不可行的,这时我们就需要对其持久化。

3.针对并发线程数进行流控

主要是为了防止服务中的线程池出现耗尽的情况,当服务去调用一些慢SQL或者点用第三方服务,出现网络的抖动不稳定迟迟得不到响应的时候,所有的线程都会堆积在服务中从而撑爆我们的线程池拖垮服务。

为了应对这种情况,我们就可以对线程数进行流控,一般我们会对接口做压测,然后再去设置阈值。

   public String flowBlockHandler(BlockException e){
        return "流控";
    }

    @RequestMapping("/flowThread")
    @SentinelResource(value = "flowThread",blockHandler = "flowBlockHandler")
    public String flowThread() throws InterruptedException {
        TimeUnit.SECONDS.sleep(15);
        System.out.println("正常访问");
        return "正常访问";
    }

设置阈值为1:

在这里插入图片描述

4.BlockExceptionHandler统一异常处理

SpringWeb MVC 接口资源限流入口在 HandlerInterceptor的实现类AbstractSentinelInterceptor的preHandle方法中,对异常的处理是BlockExceptionHandler的实现类 。

返回的结果比较公共比较统一,就可以使用统一异常处理。如果要针对不同的接口做不同的业务逻辑处理就使用针对性的异常处理。

sentinel 1.7.1 引入了sentinel-spring-webmvc-adapter.jar

public class Result<T> {
    private Integer code;
    private String msg;
    private T data;

    public Result(Integer code, String msg, T data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

    public Result(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    public static Result error(Integer code, String msg){
        return new Result(code,msg);
    }
}
@Component
public class MyBlockExceptionHandler implements BlockExceptionHandler {

    Logger log= LoggerFactory.getLogger(this.getClass());

    @Override
    public void handle(HttpServletRequest httpServletRequest, HttpServletResponse response, BlockException e) throws Exception {
        // getRule() 资源  规则的详细信息
        log.info("BlockExceptionHandler BlockException================"+e.getRule());

        Result r = null;

        if (e instanceof FlowException) {
            r = Result.error(100,"接口限流了");

        } else if (e instanceof DegradeException) {
            r = Result.error(101,"服务降级了");

        } else if (e instanceof ParamFlowException) {
            r = Result.error(102,"热点参数限流了");

        } else if (e instanceof SystemBlockException) {
            r = Result.error(103,"触发系统保护规则了");

        } else if (e instanceof AuthorityException) {
            r = Result.error(104,"授权规则不通过");
        }

        //返回json数据
        response.setStatus(500);
        response.setCharacterEncoding("utf-8");
        response.setContentType(MediaType.APPLICATION_JSON_VALUE);
        new ObjectMapper().writeValue(response.getWriter(), r);
    }
}
@RestController
@RequestMapping("/order")
public class OrderSentinelController {


    @RequestMapping("/flow")
//    @SentinelResource(value = "flow",blockHandler = "flowBlockHandler")
    public String flow() throws InterruptedException {
        return "正常访问";
    }

    public String flowBlockHandler(BlockException e){
        return "流控";
    }

    @RequestMapping("/flowThread")
//    @SentinelResource(value = "flowThread",blockHandler = "flowBlockHandler")
    public String flowThread() throws InterruptedException {
        TimeUnit.SECONDS.sleep(15);
        System.out.println("正常访问");
        return "正常访问";
    }

    @RequestMapping("/add")
    public String add(){
        System.out.println("下单成功!");
        return "Hello World";
    }
}

测试:

在这里插入图片描述

流控模式

基于调用关系的流量控制。调用关系包括调用方、被调用方;一个方法可能会调用其它方法,形成一个调用链路的层次关系。

直接

资源达到设定的阈值之后,直接被流控抛出异常。

关联

当两个资源之间具有资源争抢或者依赖关系的时候,这两个资源便具有了关联。比如对数据库同一个字段的读操作和写操作存在争抢,读的速度过高会影响写得速度,写的速度过高会影响读的速度。如果放任读写操作争抢资源,则争抢本身带来的开销会降低整体的吞吐量。可使用关联限流来避免具有关联关系的资源之间过度的争抢,举例来说, read_db 和write_db 这两个资源分别代表数据库读写,我们可以给 read_db 设置限流规则来达到写优先的目的:设置 strategy 为RuleConstant.STRATEGY_RELATE 同时设置 refResource 为 write_db 。这样当写库操作过于频繁时,读数据的请求会被限流。

使用场景:秒杀下单,秒杀的情境下我们需要保证下单(也就是插入的操作),如果查询订单的访问量也比较大的时候。这时候插入和查询就会对数据库同时进行读写的争抢资源从而影响系统的存储量,这时候可以为插入限制流控然后影响查询,这样就能保证正常下单不受影响。查询订单被流控,从而保证整个下单的正常使用。

在这里插入图片描述

目标:生成订单量比较大打的话就让查询订单来限流。

生成订单来触发查询订单的限流。

如上设置表示为:一秒中内访问查过了两次的生成订单订单的接口那么查询订单就会限流

使用JMeter让其不断发起http请求(/add),会发现此时被限流了。JMeter停止后,请求查询订单(/add)正常。

在这里插入图片描述

链路

根据调用链路入口限流。

下面 中记录了资源之间的调用链路,这些资源通过调用关系,相互之间构成一棵调用树。这棵树的根节点是一个名字为getUser 的虚拟节点,调用链的入口都是这个虚节点的子节点。

public interface IOrderService {

    String getUser();
}


@Service
public class OrderSericeImpl implements IOrderService {

    @Override
    @SentinelResource(value="getUser",blockHandler = "blockHandlerGetUser")//把它定义成了sentinel的资源
    public String getUser() {
        return "查询用户";
    }

    public String blockHandlerGetUser(BlockException e) {
        return "流控用户";
    }
}


@RestController
@RequestMapping("/order")
public class OrderSentinelController {
        @Autowired
    IOrderService orderService;

    @RequestMapping("test1")
    public String test1(){
        return orderService.getUser();
    }

    @RequestMapping("test2")
    public String  test2(){
        return orderService.getUser();
    }

}

一棵树如下:

			     getUser
       /order	        	/add
  /test1   /test2       /test3   /test4 
    

上图中来自入口 /order/test1 和 /order/test2 的请求都调用到了资源 getUser ,Sentinel 允许只根据某个入口的统计信息对资源限流。

在这里插入图片描述

在这里插入图片描述

此时测试会发现链路规则不生效。

注意,高版本此功能直接使用不生效,如何解决?

从1.6.3 版本开始,Sentinel Web filter默认收敛所有URL的入口context,因此链路限流不生效。
1.7.0 版本开始(对应SCA的2.1.1.RELEASE),官方在CommonFilter 引入了
WEB_CONTEXT_UNIFY 参数,用于控制是否收敛context。将其配置为 false 即可根据不同的URL 进行链路限流。
SCA 2.1.1.RELEASE之后的版本,可以通过配置spring.cloud.sentinel.web-context-unify=false即可关闭收敛

spring.cloud.sentinel.web‐context‐unify: false

测试,此场景拦截不到BlockException,对应@SentinelResource指定的资源必须在@SentinelResource注解中指定blockHandler处理BlockException

在这里插入图片描述

注:

@SentinelResource用于定义资源,并提供可选的异常处理和fallback配置项。其主要参数如下:

在这里插入图片描述

流控效果

快速失败

( RuleConstant.CONTROL_BEHAVIOR_DEFAULT )方式是默认的流量控制方式,当QPS超过任意规则的阈值后,新的请求就会被立即拒绝,拒绝方式为抛出 FlowException 。这种方式适用于对系统处理能力确切已知的情况下,比如通过压测确定了系统的准确水位时。

Warm Up(激增流量)

Warm Up( RuleConstant.CONTROL_BEHAVIOR_WARM_UP )方式,即预热/冷启动方式。当系统长期处于低水位的情况下,当流量突然增加时,直接把系统拉升到高水位可能瞬间把系统压垮。通过"冷启动",让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,给冷系统一个预热的时间,避免冷系统被压垮

冷加载因子: codeFactor 默认是3,即请求 QPS 从 threshold / 3 开始,经预热时长逐渐升至设定的 QPS 阈值。

在这里插入图片描述

匀速排队(脉冲流量)

匀速排队(RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER)方式会严格控制请求通过的间隔时间,也即是让请求以均匀的速度通过,对应的是漏桶算法。

在这里插入图片描述

表示的意思:在一个巨峰流量之下,设有20个,因为设置的阈值是10,这时候就会接收10个,另外10个不会直接让他失败,让它排队等待接收的10个处理完。如果处理完接收的10个就去处理拒绝的那10个。

在这里插入图片描述

这种方式主要用于处理间隔性突发的流量,例如消息队列。想象一下这样的场景,在某一秒有大量的请求到来,而接下来的几秒则处于空闲状态,我们希望系统能够在接下来的空闲期间逐渐处理这些请求,而不是在第一秒直接拒绝多余的请求。

熔断降级

慢调用比例
	慢调用比例 ( SLOW_REQUEST_RATIO ):选择以慢调用比例作为阈值,需要设置允许的慢调用 RT(即最大的响应时间),请求的响应时间大于该值则统计为慢调用。**当单位统计时长( statIntervalMs )内请求数目大于设置的最小请求数目,并且慢调用的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。**经过熔断时长后熔断器会进入探测恢复状态(HALF­OPEN 状态),若接下来的一个请求响应时间小于设置的慢调用 RT 则结束熔断,若大于设置的慢调用 RT 则会再次被熔断。

示例:

在这里插入图片描述

异常比例

异常比例 ( ERROR_RATIO ):当单位统计时长( statIntervalMs )内请求数目大于设置的最小请求数目,并且异常的比例大于阈值,则接下来的熔断时长内请求会自动被熔断。经过熔断时长后熔断器会进入探测恢复状态(HALF­OPEN 状态),若接下来的一个请求成功完成(没有错误)则结束熔断,否则会再次被熔断。异常比率的阈值范围是 [0.0, 1.0] ,代表 0% ­ 100%。

整合openfeign进行降级

热点参数限流 热点识别流控

热点识别流控何为热点?热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的数据,并对其访问进行限制。

热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制,仅对包含热点参数的资源调用生效。

在这里插入图片描述

测试代码:

/**
 * 热点规则,必须使用@SentinelResource
 * @param id
 * @return
 * @throws InterruptedException
 */
@RequestMapping("/get/{id}")
@SentinelResource(value = "getById",blockHandler = "HotBlockHandler") 
public String getById(@PathVariable("id") Integer id) throws InterruptedException {

    System.out.println("正常访问");
    return "正常访问";
}

public String HotBlockHandler(@PathVariable("id") Integer id,BlockException e) throws InterruptedException {

    return "热点异常处理";
}

单机阈值: 针对所有参数的值进行设置的一个公共的阈值

  1. 假设当前 参数 大部分的值都是热点流量, 单机阈值就是针对热点流量进行设置, 额外针对普通流量进行参数值流控
  2. 假设当前 参数 大部分的值都是普通流量, 单机阈值就是针对普通流量进行设置, 额外针对热点流量进行参数值流控

在这里插入图片描述

当1秒之内的QPS是10,就限流。并且当针对于参数是1的时候QPS是2就进行限流。

测试:当访问参数是1时,且一秒内访问三次时

在这里插入图片描述

系统保护规则

在这里插入图片描述

Sentinel 系统自适应限流从整体维度对应用入口流量进行控制,结合应用的 Load、CPU 使用率、总体平均 RT、入口QPS 和并发线程数等几个维度的监控指标,通过自适应的流控策略,让系统的入口流量和系统的负载达到一个平衡,让
系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。

Load 自适应(仅对 Linux/Unix­like 机器生效):系统的 load1 作为启发指标,进行自适应系统保护。当系统load1 超过设定的启发值,且系统当前的并发线程数超过估算的系统容量时才会触发系统保护(BBR 阶段)。系统容量由系统的 maxQps * minRt 估算得出。设定参考值一般是 CPU cores * 2.5 。
https://www.cnblogs.com/gentlemanhai/p/8484839.html

CPU usage(1.5.0+ 版本):当系统 CPU 使用率超过阈值即触发系统保护(取值范围 0.0­1.0),比较灵敏。

平均 RT:当单台机器上所有入口流量的平均 RT 达到阈值即触发系统保护,单位是毫秒。

并发线程数:当单台机器上所有入口流量的并发线程数达到阈值即触发系统保护。

入口 QPS:当单台机器上所有入口流量的 QPS 达到阈值即触发系统保护。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第一章 入门 1 启动 ARCSIGHT 控制台 1 快速启动工具和标准内容 1 用例 2 第二章 在控制台中工作 3 导航 3 "导航器" 面板资源树 4 批量编辑 6 批量编辑案例或连接器 6 锁定案例组 7 SmartConnector提醒 7 重新连接到管理器 7 更改控制台显示 7 更改用户首选项 9 更改你的密码 9 更改其它用户的密码 9 设置默认编辑器和查看器 9 更改全局选项 10 设置对话框选项 12 为查看器面板设置网格选项 13 自定义活动列表的默认选择 15 设置日期和时间格式 16 设置纬度和经度选项 16 配置事件图 17 设置通知弹出窗口 19 管理热键 19 为常用资源添加快捷方式 20 修改自定义快捷方式 22 删除自定义快捷方式 24 激活新的快捷方式架构 25 共享自定义快捷方式架构 26 查看 26 查看面板 26 控制台外观 28 检查和编辑 28 检查/编辑功能和实用程序概述 28 在事件检查器、资源编辑器或 CCE 中搜索字段 30 获得更多帮助 31 控制控制台 31 使用网络工具 33 运行一个工具命令 34 添加或编辑工具 35 保持知情 37 确认通知 37 使用笔记 38 许可证追踪 39 许可证跟踪通知 39 许可证状态跟踪的标准报表 39 使用文件菜单 40 使用编辑菜单 40 使用 "视图" 菜单 41 使用窗口菜单 42 使用 "工具" 菜单 43 使用 "系统" 菜单 44 使用 "帮助" 菜单 44 使用右键单击上下文菜单 45 编辑资源时使用高级选择器 48 键盘快捷键 (热键) 48 为资源创建快捷方式 50 显示最近查看的资源 50 向收藏夹列表中添加资源 51 从控制台打印 51 打印资源的导航树视图 52 打印资源定义 52 打印网格视图 53 打印条件树摘要 53 使用列翻转限制格式化网格视图打印输出 54 保存和发送设置 55 错误和警告消息 56 第三章 管理用户和组 57 管理用户组 57 用户 59 创建或编辑用户 60 重置用户密码 62 移动或链接用户 62 停用和重新激活用户 63 删除用户 64 第四章 管理权限 64 编辑访问控制列表 (ACL) 64 授予或删除资源权限 65 授予或删除操作权限 66 授予或删除用户组权限 67 添加或删除强制筛选 69 对排序字段集的权限 72 共享资源 72 控制具有部署数据监视器权限的人员 73 升级如何影响数据监视器部署权限 74 导入的数据监视器的部署权限 75 第五章 建模网络 75 网络模型 76 资产 76 自动创建资产 77 资产老化与模型信心 79 资产范围 80 区域 80 动态和静态区域 81 网络 81 资产模型 82 位置 82 漏洞 82 资产类别 82 分配给资产、资产范围和资产组的资产类别 83 指定给区域的资产类别 83 使用资产填充网络模型 83 基于 ArcSight 控制台的方法 84 手动使用网络建模资源 84 在使用网络建模向导的批处理中 85 基于SmartConnector的方法 85 使用资产模型导入 FlexConnector 85 自动从漏洞扫描器报表 86 ArcSight辅助方法 86 作为来自现有配置数据库的存档文件 87 使用向导填充网络模型 87 指定 CSV 列类型 88 使用页眉指定列类型 88 在一个类别列中指定多个类别 89 在向导中分配列类型 89 区域 CSV 文件格式 90 区域 CSV 文件的示例 92 资产 CSV 文件格式 92 资产 CSV 文件的一个示例 94 动态区域中的静态寻址 94 资产范围 CSV 文件格式 94 资产范围 CSV 文件的示例 96 增加显示的行数 96 要导入的数据摘要 96 导入到 ArcSight 管理器中的网络数据 96 使用资产、位置、区域、网络、漏洞和类别 97 管理资产 98 资产自动创建 100 使用 IP 地址或主机名创建资产 108 保留先前的资产 110 在通用条件编辑器中选择资产 112 自动分区资产 113 自动分区导入资产 114 管理资产组 114 管理漏洞 116 在公共条件编辑器中选择漏洞 117 处理易受攻击的资产 118 管理漏洞组 119 显示受影响的资产 120 报表漏洞扫描程序的输出 120 报表资产漏洞 121 管理区域 121 管理网络 122 管理资产类别 123 管理位置 124 管理客户 125 第六章 管理 SMARTCONNECTORS 126 选择和设置 SMARTCONNECTOR 参数 126 配置SmartConnector 126 连接器编辑器选项卡 127 连接器选项卡配置字段 128 默认内容选项卡配置字段 129 SmartConnector处理类别 142 SmartConnector 时间间隔选项 143 管理 SMARTCONNECTOR 筛选条件 144 添加 SmartConnector 筛选条件 144 删除 SmartConnector 筛选条件 145 从事件代理程序中消耗事件 145 设置特殊严重性级别 146 将模型映射发送到 SMARTCONNECTORS 149 将控制命令发送到 SMARTCONNECTORS 149 获取连接器状态 149 发送标准流控制命令 150 技术支持命令 152 映射命令 153 管理SMARTCONNECTOR组 157 导入和导出 SMARTCONNECTOR 配置 158 导入 SmartConnector 配置 158 导出 SmartConnector 配置 159 SmartConnector筛选 159 使用附加数据字段 160 升级SMARTCONNECTOR 160 升级过程概述 160 SmartConnector升级过程 162 回滚到以前的版本 162 故障排除 163 在安装的 SmartConnectors 上获取状态和版本 163 第七章 管理通知 164 管理收到的通知 164 管理通知组 165 管理通知目的地 167 更改通知和确认设置 168 测试通知组和目标 169 管理升级级别 170 第八章 监视事件 170 监视活动频道 170 创建或编辑活动频道 171 查看活动频道 173 监视活动频道中的事件 174 使用视图 174 调查视图 175 查看被利用的漏洞 176 查看目标资产 176 筛选活动频道 176 使用内联筛选筛选活动频道 177 将字段集应用于活动频道 179 使用活动的频道标题 179 在活动频道中排序事件 181 添加、替换或移除列 182 调整、显示或隐藏列元素 183 使用活动频道菜单命令 183 将事件导出到文件 186 定义网格字段选项 187 保存活动频道和筛选的副本 188 优化频道性能的最佳做法 188 活动频道查询时间范围 189 活动频道筛选 189 筛选索引字段 189 在联接字段上进行筛选 189 持续更新时间参数 189 结束时间或管理器接收时间 189 在活动频道中排序 190 使用标准内容中的“实时”频道 190 i/o 子系统性能 190 诊断: 从基本频道特性开始 191 自定义列 191 创建自定义列 191 显示自定义列 192 高级示例: 使用速度模板创建自定义列 192 使用控制面板 193 监视控制面板 193 管理控制面板 196 创建或编辑控制面板 196 将数据监视器添加到控制面板 198 将查询查看器添加到控制面板 200 控制面板显示格式 201 管理控制面板组 202 使用自定义视图控制面板 203 显示自定义视图控制面板 204 还原到常规控制面板视图 205 使用自定义视图控制面板 205 排列自定义视图控制面板 205 加载背景图像 206 选择以前上载的背景图像 206 验证背景图像 207 删除背景图像 207 自定义视图控制面板上下文菜单选项 207 使用数据监视器 208 创建数据监视器 208 编辑数据监视器 211 删除数据监视器 212 从数据监视器管理深化 212 添加深化 212 Editing a Drilldown 217 Changing the Default Drilldown 217 Sorting or Changing the Order of Drilldowns 218 Removing a Drilldown 219 移动或复制数据监视器 219 启用或禁用数据监视器 220 重写数据监视器的最后一个状态 221 管理数据监视器组 221 优化数据监视器事件筛选的评估 223 需求 223 自动优化过滤条件 224 追踪优化 224 禁用优化功能 225 使用图表 226 绘制活动频道的内容 226 绘制数据监视器的内容 227 探索图表背后的事件 229 使用查询查看器 229 攻击绘图 229 创建静态事件图 229 创建实时事件图 230 事件图注释 231 第九章 在活动频道中选择和调查事件 232 在活动频道中选择事件 232 显示事件详细信息和规则链 232 运行 ARCSIGHT 调查搜索 234 调查会话事件 234 协作进行事件 (事件注释) 235 注释事件 236 标记类似事件字段 237 注释保留 238 查看事件的批注 238 创建或编辑阶段 238 使用事件有效负载 240 将数据字段导出到 CSV 文件中 241 获取知识库文章 242 第十章 过滤事件 243 创建或编辑筛选 243 创建和编辑内联筛选 244 应用筛选 245 移动或复制筛选 246 删除筛选 247 调试筛选以匹配事件 247 导入和导出筛选 249 管理筛选组 249 调查视图 251 使用事件属性显示新的筛选视图 251 使用事件属性优化筛选 252 筛选出 ArcSight 事件 252 将事件属性添加到过滤条件 253 修改视图 254 第十一章 查询 254 查询如何工作 255 一起使用查询和趋势报表 255 在查询查看器中使用查询 255 构建查询 256 查询设置 256 常规查询属性 257 查询字段 260 SELECT查询字段 261 查询结构(SELECT) 262 应用函数选择列 263 按查询字段分组 264 查询结构(GROUP BY) 265 将基于时间的函数应用于GROUP BY列 266 按查询字段排序 267 查询结构(ORDER BY) 268 将列函数应用于排序 269 排序 269 查询条件 269 在字段上创建条件 270 创建组条件 271 关于创建条件的提示 271 查询变量 271 编辑查询 272 示例: 为列表上的查询创建与资产相关的条件 273 第十二章 查询查看器 274 预构建和自定义查询查看器 275 标准内容 275 自定义查询查看器 275 根据需要自定义查询查看器 275 查询的 inActiveList 条件 276 管理查询查看器 276 查询查看器设置 277 查询查看器属性 278 查询查看器字段 280 排序选项 282 基线 282 查询查看器变量 283 删除查询查看器 283 定义和使用基线 283 为什么基线有用 284 规划基线比较 285 添加基线 286 将显示的结果与基线进行比较 287 显示或隐藏基线列 288 排序基线数据 288 过滤基线数据 289 删除基线 289 从查询查看器管理明细 290 添加明细 290 编辑明细 293 更改默认明细 294 排序或更改明细的顺序 294 删除明细 295 查看查询查看器结果 295 筛选查询查看器结果 298 直接从查询查看器查看事件或资源 299 使用查询查看器结果 300 结果表格格式 300 表格中的 "分析频道" 选项 301 列排序、显示和编辑选项 303 图表格式的结果 305 查询查看器疑难解答 306 将查询

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值