网站开发 工作量公司网站开发步骤

news/2025/10/8 17:23:18/文章来源:
网站开发 工作量,公司网站开发步骤,镇江网站网站建设,品牌宣传型企业网站前面博主写了一篇文章去介绍opentsdb的http接口的使用方法,但是某一些接口的使用还是比较复杂#xff0c;这篇文章会通过example来详细讲述opentsdb的一些特性。 本文的举的例子有这些#xff1a; 基本的写入和查询数据的注释和说明子查询查询中的filters使用查询数据的rat…前面博主写了一篇文章去介绍opentsdb的http接口的使用方法,但是某一些接口的使用还是比较复杂这篇文章会通过example来详细讲述opentsdb的一些特性。 本文的举的例子有这些 基本的写入和查询数据的注释和说明子查询查询中的filters使用查询数据的rate增长率直方图中百分位数(percentiles)的查询Downsampling(下采样)query/exp 的使用查询中使用表达式trees详解 一、基本的写入和查询 这个功能是最基本也是最常用的。写数据写入数据post接口为 /api/put?detailsdetails表示会将写入的详细结果返回回来 #请求体 [{metric: sys.cpu.nice,timestamp: 1346846402,value: 18,tags: {host: web01,dc: lga}} ] #写入成功返回的内容 {success: 1,failed: 0,errors: [] }查数据写入成功之后当然可以去查询。查询post接口为 /api/query #请求体 {start: 1346846402,end: 1346846403,#返回数据对应的tsUIDshowTSUIDs:true, queries: [{aggregator: avg,metric: sys.cpu.nice,tags: {host: web01,dc: lga}}] } #返回数据 [{metric: sys.cpu.nice,tags: {host: web01,dc: lga},aggregateTags: [],tsuids: [000001000001000001000002000002 #数据对应的tsUID],dps: {1346846402: 18}} ]这里需要对tsUID进行说明一下opentsdb是由metrictags来区分数据的当metric和tags相同时其tsUID就会相同代表着同一系列的数据。那么假如我们想对这一系列数据进行标注和说明呢见下一个example。 二、数据的注释和说明 数据的注释和说明是用到了 /api/annotation 接口post方式是写入annotation数据get是查询annotation数据。 #post接口的请求body {startTime:1346846402,#和返回前面一个example返回tsUID相同这样时间序列数据就和annotation数据关联了起来可作为时间序列数据的注释和说明tsuid:000001000001000001000002000002,description: Testing Annotations,notes: These would be details about the event, the description is just a summary,custom: {owner: jdoe,dept: ops} }当写入成功时间再次运行查询example1中的 /api/query 请求即可得到 [{metric: sys.cpu.nice,tags: {host: web01,dc: lga},aggregateTags: [],tsuids: [000001000001000001000002000002],annotations: [{tsuid: 000001000001000001000002000002,description: Testing Annotations,notes: These would be details about the event, the description is just a summary,custom: {owner: jdoe,dept: ops},startTime: 1346846402,endTime: 0}],dps: {1346846402: 18}} ]可见此次在返回数据的清楚上把相关联的注释annotation数据也一起返回回来注释一般可以用来解释和说明数据。 三、子查询 在 /api/query 接口中body中有一个参数是queries它表示可以含有多个子查询所谓子查询就是只要数据满足其中的一个子查询数据就会返回回来。注意每次查询至少需要一个子查询。 在example1中写入一条数据的前提下这里再向tsdb中写入一条数据 [{metric: sys.cpu.nice,timestamp: 1346846402,value: 9,tags: {host: web02,dc: lga}} ] # 通过 /api/query 接口我们可以查得该条数据的tsUID为000001000001000003000002000002下面查询body就表示有两个子查询 //请求体 {start: 1346846401,end: 1346846403,showTSUIDs:true,queries: [{ //第一个子查询查询的是example1中写入的数据aggregator: avg,metric: sys.cpu.nice,tags: {host: web01,dc: lga}},{ //第二个子查询,查询的是刚刚写入的数据aggregator: avg,tsuids:[000001000001000003000002000002]}] }//返回结果 [{ //第一个子查询对应的数据metric: sys.cpu.nice,tags: {host: web01,dc: lga},aggregateTags: [],tsuids: [000001000001000001000002000002],annotations: [{tsuid: 000001000001000001000002000002,description: Testing Annotations,notes: These would be details about the event, the description is just a summary,custom: {owner: jdoe,dept: ops},startTime: 1346846402,endTime: 0}],dps: {1346846402: 18}},{ //第二个子查询对应的数据metric: sys.cpu.nice,tags: {host: web02,dc: lga},aggregateTags: [],tsuids: [000001000001000003000002000002],dps: {1346846402: 9}} ]在平常使用过程中我们可以使用单个或者多个子查询还有需要注意对于每个子查询而言主要有两种类型 metric查询方式子查询指定metric和tagsoptional进行查询本次查询中的第一个子查询就是采用这种方式。TSUID查询方式需要给出一个或者多个tsuid对应本次查询中的第二个子查询。 四、查询中的filters使用 从opentsdb2.2版本便支持filter它其实是用于过滤tags的可以作为tags查询的替代者并且比tags更加灵活。请求body如下 {start: 1346846401,end: 1346846403,showTSUIDs:true,queries: [ {aggregator: avg,metric: sys.cpu.nice,filters: [{ type:literal_or, tagk:host,filter:web01|web02,groupBy:true}]}] }参数意义type过滤器的类型可以访问 /api/config/filters 接口查看支持的所有类型这里 literal_or 表示value是一个枚举tagk指定过滤的keyfilter和相type对应这里表示对web01和web02都进行匹配groupBy是否对匹配到的数据进行分组 这里使用literal_orfilter里面的多个tagV以竖线相隔这个过滤器的意思是对tagK为host进行匹配并且value为web01和web02都数据都会匹配成功。 返回结果 [{metric: sys.cpu.nice,tags: {host: web01,dc: lga},aggregateTags: [],tsuids: [000001000001000001000002000002],annotations: [{tsuid: 000001000001000001000002000002,description: Testing Annotations,notes: These would be details about the event, the description is just a summary,custom: {owner: jdoe,dept: ops},startTime: 1346846402,endTime: 0}],dps: {1346846402: 18}},{metric: sys.cpu.nice,tags: {host: web02,dc: lga},aggregateTags: [],tsuids: [000001000001000003000002000002],dps: {1346846402: 9}} ]可见本次filter查询用一个子查询的结果和example3中用了两个子查询的效果是一样的。 五、查询数据的rate增长率 在某些情况下我们查询的可能并不是数据的本身而是它的增长率。恰巧opentsdb有帮我们提供这个功能子查询中的rate参数。 首先我们先写入3条数据,时间分别间隔两秒数据分别为0、64000和1000。 [{metric: sys.cpu.nice,timestamp: 1346846410,value: 0,tags: {host: web03,dc: lga}},{metric: sys.cpu.nice,timestamp: 1346846412,value: 64000,tags: {host: web03,dc: lga}},{metric: sys.cpu.nice,timestamp: 1346846414,value: 1000,tags: {host: web03,dc: lga}} ]查询增长率的请求body如下 {start: 1346846409,end: 1346846414,showTSUIDs:true,queries: [ {aggregator: avg,metric: sys.cpu.nice,rate:true, # 查询增长率rateOptions:{counter:false },tags: {host: web03,dc: lga}}] }# 响应结果 [{metric: sys.cpu.nice,tags: {host: web03,dc: lga},aggregateTags: [],tsuids: [000001000001000007000002000002],dps: {1346846412: 32000,1346846414: -31500}} ]3200(6400-0)/2-31500(1000-6400)/2可见增长率是以秒为单位。 六、直方图中百分位数(percentiles)的查询 opentsdb在2.4版本对直方图histogram进行了支持本个example中首先写入直方图数据然后根据数据对百分位数percentile进行查询。写入数据的body如下buckets是直方图数据意思为0到1.75区间的数值为12,1.75到3.5区间的数值为16. {metric: sys.cpu.nice,timestamp: 1356998400,overflow: 1,underflow: 0,buckets: { 0,1.75: 12,1.75,3.5: 16},tags: {host: web01,dc: lga} }关于百分位的定义可以自行查资料进行详细认识本次查询中percentiles列表里面就是需要查询的百分位需要注意的是列表里面的数字的取值区间是[0,100]并且可以不按照顺序排列。查询body如下 {start: 1356998400,end: 1356998401,showTSUIDs:true,queries: [ {aggregator: sum,percentiles: [100,99,43,42,1],metric: sys.cpu.nice,tags: {host: web01,dc: lga}}] }请求的结果如下 [{metric: sys.cpu.nice_pct_1.0,tags: {host: web01,dc: lga},aggregateTags: [],tsuids: [000001000001000001000002000002],dps: {1356998400: 0.875}},{metric: sys.cpu.nice_pct_42.0,···dps: {1356998400: 0.875}},{metric: sys.cpu.nice_pct_43.0,···dps: {1356998400: 2.625}},{metric: sys.cpu.nice_pct_99.0,···dps: {1356998400: 2.625}},{metric: sys.cpu.nice_pct_100.0,···dps: {1356998400: 2.625}} ]返回内容如上其中相同部分已经省略返回的metric由 原始metric_pct_number 组成下面讲述它们的计算方式 第一个区间的数值为12第二个区间的数值为1612/(1216)0.428。 我们看到1和42的百分位的取值都是0.8750.8751.75/2取的第一个区间的中点坐标可以得到在0.428之前的百分位的数值都为0.875。43、99、100百分位对应的数值都为2.6252.6251.75(3.5-1.75)/22.625的物理意义就是第二个区间中点的横坐标因此43到100之间的百分位取值都为2.525。 七、Downsampling(下采样) 下采样即让浓密数据变稀疏的过程首先写入10条数据数值分别为0到9相邻数据的时间间隔为1s [{timestamp: 1562068000,value: 0,metric: sys.cpu.nice,tags: {host: web01,dc: lga}},······{metric: sys.cpu.nice,timestamp: 1562068009,value: 9,tags: {host: web01,dc: lga}} ]下采样查询如下downsample字段是一个字符串该字段由 interval-aggregate-fill policy 组成分别表示时间间隔、聚合方法、缺少的值补齐的方法。本次查询下采样间隔为2s聚合方法是取聚合区间的最小值并且缺少的值用0补齐 {start: 1562068000,end: 1562068009,queries: [ {aggregator: avg,metric: sys.cpu.nice,downsample:2s-min-zero,tags: {host: web01,dc: lga}}] }返回结果如下可见原本每秒一个数据在结果中是每两秒返回一个数据并且在每个间隔中都是取的最小值。 [{metric: sys.cpu.nice,tags: {host: web01,dc: lga},aggregateTags: [],dps: {1562068000: 0,1562068002: 2,1562068004: 4,1562068006: 6,1562068008: 8}} ]八、query/exp 的使用查询中使用表达式 这个接口允许使用表达式进行查询可以对查询的多个结果进行操作。 在example7写入数据的基础上再写入如下数据相比example7的数据而言仅仅是metric发生了变化 [{timestamp: 1562068000,value: 0,metric: sys.cpu.nice1,tags: {host: web01,dc: lga}},······{metric: sys.cpu.nice1,timestamp: 1562068009,value: 9,tags: {host: web01,dc: lga}} ]紧接着使用表达式进行查询查询body如下 time 定义了查询的时间区间和聚合方式filters 定义了一个过滤器f1metric 中指定了对sys.cpu.nice和sys.cpu.nice1两个metric进行查询并且两个metric都使用同一个filterf1expressions 中是语法表达式e就等于结果a加上结果be2就等于e乘以2outputs 指定需要输出的表达式计算结果{time: {start: 1562068000,end:1562068009,aggregator:sum},filters: [{ tags: [{type: wildcard,tagk: host,filter: web*,groupBy: true}],id: f1}],metrics: [{id: a,metric: sys.cpu.nice,filter: f1,fillPolicy:{policy:nan}},{id: b, metric: sys.cpu.nice1,filter: f1,fillPolicy:{policy:nan}}],expressions: [{id: e,expr: a b},{id:e2,expr: e * 2}],outputs:[{id:e, alias:e},{id:e2, alias:e2}]}查询结果如下query是里面是关于查询请求body的信息为了节约空间这里省略。可以得知表达式计算是对同一个时间点进行计算的。 outputs中的e时间点1562068001000对应的值为2sys.cpu.nice和sys.cpu.nice1在1562068001000对应的数值都为1便可和表达式中 eab 对应起来。e2中时间点1562068001000对应的值为4便可和表达式中 e2ex2 对应起来。{outputs: [{id: e,alias: e,dps: [ [1562068000000,0],[1562068001000,2],[1562068002000,4],[ 1562068003000, 6],[1562068004000,8],[1562068005000,10],[1562068006000,12],[1562068007000,14],[1562068008000,16],[1562068009000,18] ],dpsMeta: { firstTimestamp: 1562068000000,lastTimestamp: 1562068009000, setCount: 10,series: 1},meta: [{index:0,metrics:[timestamp]},{index:1,metrics:[sys.cpu.nice,sys.cpu.nice1],commonTags:{host:web01,dc:lga},aggregatedTags:[]}]},{id: e2,alias: e2,dps: [[1562068000000,0],[1562068001000,4],[1562068002000,8],[1562068003000,12],[1562068004000,16],[1562068005000,20],[1562068006000,24],[1562068007000,28],[1562068008000,32],[1562068009000,36]],dpsMeta: { firstTimestamp: 1562068000000,lastTimestamp: 1562068009000,setCount: 10,series: 1},meta: [{index:0,metrics:[timestamp]},{index:1,metrics:[sys.cpu.nice,sys.cpu.nice1],commonTags:{host:web01,dc:lga},aggregatedTags:[]}]}],query: {······} } 九、trees详解 opentsdb2.0版本引入了tree的概念tree可以将一些时间序列组织起来使其具有层次结构和文件系统一样tree中的叶子类比于文件系统的文件tree中的branch类比于文件系统的文件夹还可以继续在里面创建新的文件夹。其相关定义可参考官网。 在tsdb中创建一棵树步骤如下 首先创建一棵树此时数的enable属性为false。为这棵树定义一些规则数的形状和数据是由这些规则确定。可以通过/api/tree/test接口对这棵树进行测试看其接口是否满足要求。将树的enable设为true。运行./tsdb uid treesync扫描TSMeta中的全部对象将符合条件的时间序列加入到树中。注意若需要每创建一个TSMeta对象时都试图将对象加入到enable tree中那么在启动tsdb时需要加上 tsd.core.tree.enable_processingtrue 配置。 现在按照上面的流程进行操作实际一遍首先对时间序列、数的规则进行说明。 现在我们有如下的时间序列数据 图1 这些时间序列需要满足如下规则ruleslevel表示数的第几层order表示同一level的不同rule有不同的优先级。level 0 有两个rule当满足order为0的rule时会跳过order为1的rule反之order为1的rule就会生效。 图2 基于上面的时间序列和tree的规则可以得到下面的tree 图3 下面按照步步骤对这棵树进行生成 写入图一中的输入请求body此处略。创建一棵树post接口为 /api/tree请求body如下{name:Network,description:,notes:,rules:null,created:1368964815,strictMatch:false,storeFailures:false,enabled:false} 创建成功后 可以用 get方式请求 /api/tree 接口查询tree的相关信息并可以获得新创建tree的idtreeId下面也会用到。 利用接口 /api/tree/rule接口依次创建图2中的4个rule请求body分别如下{type:tagk,field:dc,description:a tagk named data center,level:0,order:0,treeId:1}{type:tagk,field:host,description:a tagk named host,regex:.*\\.(.*)\\.mysite\\.com,level:0,order:1,treeId:1}{type:tagk,field:host,description:a tagk named host,separator:\\.,level:1,order:0,treeId:1}{type:metric,description:metric,separator:\\.,level:2,order:0,treeId:1} 利用/api/tree/test 接口测试我们新创建的treeget请求有两个参数 参数名意义treeId用于指定测试的treetsuids指定时间序列试图将这些时间序列放入这颗树中进行测试多个tsuid以 ,相隔 这里的tsuids当然是指图1中时间序列对应的tsuid可以用 /api/query接口进行查询。/api/tree/test会返回这些时间序列基于这棵树的层次关系若这个层次结构不满足需求则需要对rule进行修改若满则需求则可进行下一步。 在tsdb的build文件夹运行 ./tsdb uid treesync 命令它会扫描全部的 tsdb-uid将符合条件的序列加入到tree的结构中。 至此这棵树的定义就已经完成可以用 /api/tree/branch 接口对tree的分支进行查询查询的参数有两个 参数名意义treeidtree的idbranchbranch的id 两个参数只需要一个当传递treeid时就会返回root branch的信息。当只传递branch时就会返回对应branch的信息。当两个参数都传递时参数treeid就会被忽略。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/931756.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

外链提高网站权重沈阳男科私立医院

普源示波器是一种常用的电子测试设备,它可以测量电路中的电压和电流波形。其中,测量相位差是示波器的一个重要功能,它可以用于分析信号的时间延迟、相位差、频率响应等信息。本文将介绍普源示波器测量相位差的原理和方法,并通过实…

广州定制网站建设毕业设计做网站 答辩会问什么问题

1、添加记录(INSERT)使用SQL语句的INSERT命令可以向数据库中插入记录,INSERT命令的基本形式为:INSERT INTO 表名 [(字段名1,字段名2…)] VALUES (值1,值2,…)若在输入记录时,每个字段均有内容,可省略表名后的字段名。该SQL语句用于…

10/8

Java方法与递归学习实践总结 在Java方法章节的学习中,我最大的收获并非仅仅掌握了语法规则,而是体会到“结构化编程”背后的思维逻辑——用“方法”将复杂问题拆解、复用,用巧劲替代重复的蛮力,这与课件中“懒人造…

2025.10.8

file:///C:/Users/lenovo/Desktop/Java%20%E6%A0%B8%E5%BF%83%E5%9F%BA%E7%A1%80%E5%AE%9E%E9%AA%8C%E6%96%87%E6%A1%A310.8.docx

【QT】QString 与QString区别 - 教程

【QT】QString& 与QString区别 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "…

[Python/地图] 基于Python绘制地图

0 概述:基于Python绘制地图 1 基于 PyEcharts 绘制地图 PyEchart库pyecharts 是一个基于 百度开源的 Apache ECharts 的 Python 数据可视化库。ECharts 是一个使用 JavaScript 实现的开源可视化库,而 Pyecharts 则是…

常德网站开发哪家好如何制作自媒体短视频

全球领先的企业软件创新者VMware(NYSE:VMW) 今日在VMworld 2020大会上,宣布升级Tanzu对VMware Cloud on AWS、Azure VMware Solution 和Oracle Cloud VMware Solution的支持,同时与GitLab展开合作。在VMworld 2019美国…

【从前端到后端导入excel资料实现批量导入-笔记模仿芋道源码的《系统管理-用户管理-导入-批量导入》】

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

开发网站的基本原则网络购物平台有哪几个

在使用 Kotlin 和 Jetpack Compose 进行 Android 开发时,选择正确的单位来设置视图尺寸、间距和字体大小是非常重要的。这些单位确保应用在各种设备和屏幕尺寸上都能保持良好的布局和可读性。 三种常用的单位 1. Density-independent Pixels (dp) 用途&#xff1…

实验任务1——8

实验1 #include <stdio.h>int main(){ printf(" O\n"); printf("<H>\n"); printf("I I"); return 0;}#include <stdio.h>int main(){ printf(" O\t O\n");…

laya 武器旋转砍怪判断

laya 武器旋转砍怪判断typescript代码:export interface IMonster extends Laya.Node {id: number;isDie:boolean;getPoint(): Laya.Point;getHitRect():Laya.Rectangle; }export class Monster extends Laya.Sprite i…

完整教程:将音频数据累积到缓冲区,达到阈值时触发处理

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

实用指南:Android studio初体验

实用指南:Android studio初体验2025-10-08 17:01 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !import…

一款专门为 WPF 打造的开源 Office 风格用户界面控件库

前言 今天大姚给大家分享一款专门为 WPF 打造的开源(MIT license)、免费的 Office 风格用户界面控件库:Fluent.Ribbon。 项目介绍 Fluent.Ribbon 一个为 Windows Presentation Foundation(WPF)实现类 Office 开源…

一款专门为 WPF 打造的开源 Office 风格用户界面控件库

前言 今天大姚给大家分享一款专门为 WPF 打造的开源(MIT license)、免费的 Office 风格用户界面控件库:Fluent.Ribbon。 项目介绍 Fluent.Ribbon 一个为 Windows Presentation Foundation(WPF)实现类 Office 开源…

部门网站建设内容方案莆田市的网站建设公司

微信小程序页面传值为对象[Object Object]详解 1、先将传递的对象转化为JSON字符串拼接到url上2、在接受对象页面进行转译3、打印结果 1、先将传递的对象转化为JSON字符串拼接到url上 // info为对象 let stationInfo JSON.stringify(info) uni.navigateTo({url: /pages/statio…

网站建设后运维合同湖北省市政工程建设官方网站

文章目录 1. 启动kali ssh 服务2. kali 安装cpolar 内网穿透3. 配置kali ssh公网地址4. 远程连接5. 固定连接SSH公网地址6. SSH固定地址连接测试 简单几步通过cpolar 内网穿透软件实现ssh 远程连接kali! 1. 启动kali ssh 服务 默认新安装的kali系统会关闭ssh 连接服务,我们通…

给Ubuntu用户的SSH免密登入公钥文件和文件夹设置权限

给Ubuntu用户的SSH免密登入公钥文件和文件夹设置权限摘要 以root身份登入了Ubuntu,把其他用户的公钥加入其$home/.ssh/authorized_keys文件后,需要设置文件和文件夹的权限。 在配置 SSH 免密登录时,.ssh 目录和 aut…

dockercontainerd代理设置脚本

具体脚本 root@ubuntu-21:~# cat RQproxy.sh #!/bin/bash #用于docker或者containerd开启代理#####################修改成自己的代理的ip+port########################### httpipp=Environment="HTTP_PROXY=htt…