用于管理信号图表、仪表盘和探测器的类似对流层的库。

signal-analog的Python项目详细描述


构建状态

模拟信号

a对流层-灵感库 对于SignalFX图表的编程、声明性定义和管理, 仪表板和探测器。

此库假定您基本熟悉SignalFX中的资源。对于一个 关于signalfx api的详细概述,请参阅上游文档。

TOC

功能

  • 为信号流DSL提供绑定
  • 提供以下内容的摘要:
    • 图表
    • 仪表板,仪表板组
    • 探测器
  • 用于包装资源定义的cli生成器(对自动化很有用)

安装

将模拟信号添加到项目的需求文件中:

# requirements.txt
# ... your other dependencies
signal_analog

然后运行以下命令更新您的环境:

pip install -r requirements.txt

用法

信号模拟提供两种抽象,一种用于构建资源 在signalfx api和另一个用于通过 信号流DSL

以下各节介绍如何在 与信号流dsl结合使用。

构建图表

信号模拟 信号模拟图模块。

有关更多信息,请参阅上游文档。

让我们举一个例子想建立一个图表来监视 单个应用程序在单个环境中的内存利用率。

假设服务将应用程序名称的度量报告为app并且 environment asenv通过 内存利用率度量名称。

在时间序列图中,屏幕上显示的所有数据都来自至少一个 信号流语言中的数据定义。让我们从定义 时间序列:

fromsignal_analog.flowimportDatats=Data('memory.utilization')

用信号流的说法,时间序列只在图表上显示 "出版"。SignalFlow中的所有流函数都有一个publish方法 可以在所有TimeSeries转换的结尾处调用。

ts=Data('memory.utilization').publish()

为了方便起见,流函数上的所有转换都返回被调用方, 因此,在上面的示例中,ts仍然绑定到数据的实例

现在,这个时间序列本身不是很有用;如果我们附加这个程序 在图表中,我们可以看到alltimeseries forallretposte应用程序 向SignalFX报告!

我们可以通过在应用程序名称上添加筛选器来限制对数据的查看:

fromsignal_analog.flowimportData,Filterapp_filter=Filter('app','foo')ts=Data('memory.utilization',filter=app_filter).publish()

现在,如果我们用这个程序创建一个图表,我们将只查看度量 与foo应用程序相关的。好多了,但我们还是 查看foo的实例 住在里面。

我们要做的是将我们的应用程序过滤器与 环境。模拟信号组合器模块提供了一些有用的 实现此目标的结构:

fromsignal_analog.combinatorsimportAndenv_filter=Filter('env','prod')all_filters=And(app_filter,env_filter)ts=Data('memory.utilization',filter=all_filters).publish()

太好了!我们现在可以创建图表了。

首先,让我们为图表命名:

fromsignal_analog.chartsimportTimeSeriesChartmemory_chart=TimeSeriesChart().with_name('Memory Used %')

就像它的对应,图表遵循 构造与SignalFXAPI交互的对象。

有了我们的名字,让我们继续添加我们的程序:

memory_chart=TimeSeriesChart().with_name('Memory Used %').with_program(ts)

每个图表都知道如何适当地序列化我们的信号流程序, 因此,只需在这里传递我们的参考就足够了。

最后,让我们更改图表上的绘图类型,以便看到实体区域 而不是脆弱的线条:

fromsignal_analog.chartsimportPlotTypememory_chart=TimeSeriesChart()\
                 .with_name('Memory Used %')\
                 .with_program(ts).with_default_plot_type(PlotType.area_chart)

太棒了;在我们有一个完整的图表之前,只有更多的细节。

在下面的部分中,我们将了解如何从 图表集合。

建筑仪表板

信号模拟 信号模拟仪表板模块。

有关 仪表板API。

在上一节描述的示例的基础上,我们现在希望 建立一个包含内存图表的仪表板。

我们从简陋的仪表板开始

# requirements.txt
# ... your other dependencies
signal_analog
0

仪表板上也提供了许多相同的图表方法,因此 让我们给仪表板一个难忘的名称,并配置它的api令牌:

# requirements.txt
# ... your other dependencies
signal_analog
1

我们的最终任务是将图表添加到仪表板并在api中创建它!

# requirements.txt
# ... your other dependencies
signal_analog
2

此时将发生以下两种情况之一:

  • 我们从signalfx api接收到一些错误和异常 被抛出
  • 我们成功地创建了仪表板,在这种情况下,json响应是 作为字典返回。

另外,如果您有一个现有的仪表板组,并且希望此新仪表板成为该仪表板组的一部分,则 可以在创建仪表板时传递仪表板组的组ID。像这样:

# requirements.txt
# ... your other dependencies
signal_analog
3

现在,在源代码中存储api密钥并不理想,所以如果您想了解可以在运行时传入您的api密钥,请查看下面的文档以了解如何 您可以为您的资源动态构建一个cli

更新仪表板

创建仪表板后,可以更新名称和 说明:

# requirements.txt
# ... your other dependencies
signal_analog
4

仪表板更新也将更新其拥有的任何配置。

# requirements.txt
# ... your other dependencies
signal_analog
5

提供仪表板过滤器

可以将仪表板配置为提供影响所有已配置图表行为的各种筛选器(在图表级别重写任何冲突的筛选器)。您可能希望这样做,以便在给定的一组图表中快速更改正在观察的环境。

# requirements.txt
# ... your other dependencies
signal_analog
6

所以,在这里我们创建了一些过滤器"app=foo"和"env=prod", 源滤波器"aws_region=us-west-2"和 时间过滤器"-1小时到现在" 现在我们可以将此配置传递给仪表板对象:

# requirements.txt
# ... your other dependencies
signal_analog
7

如果要更新现有仪表板:

# requirements.txt
# ... your other dependencies
signal_analog
8

仪表板事件覆盖和选定的事件覆盖

要在仪表板中查看覆盖在图表上的事件,需要查看一个事件,一个带有ShowEventLines的图表 已启用,并且仪表板具有正确的EventOverlays设置(默认情况下,选择EventOverlays可显示事件)。

假设您希望看到的事件存在;您将制作一个图表,其中显示的事件行如下:

# requirements.txt
# ... your other dependencies
signal_analog
9

定义了图表后,我们就可以为仪表板准备事件覆盖图和选定的事件覆盖图了。 首先,我们定义要匹配的事件信号。在本例中,我们将查找名为"test"的事件(包括 前导和/或尾随星号作为通配符(如果需要部分匹配)。 接下来,我们使用这些事件信号创建事件覆盖图,确保包含事件符号的颜色索引, 并将事件行设置为true。 我们还将事件信号传递给selectedEventOverlays,它将告诉仪表板显示匹配的 默认情况下为事件。

pip install -r requirements.txt
0

接下来,我们将图表、事件覆盖和所选事件覆盖合并为仪表板对象:

pip install -r requirements.txt
1

最后,我们使用cli builder在signalfx中构建资源:

pip install -r requirements.txt
2

创建检测器

模拟信号提供了一种管理探测器生命周期的方法 模拟信号探测器模块。从v0.21.0开始 支持完整的检测器API。

有关更多信息,请参阅上游文档 探测器。

探测器由几个关键元素组成:

  • 一个名字
  • 信号流程序
  • 一组警告规则

我们首先构建一个检测器对象并给它命名:

pip install -r requirements.txt
3

我们现在需要给它一个提醒程序:

pip install -r requirements.txt
4

有了我们的名字和程序,是时候建立一个警报规则了 可用于通知我们的队友:

pip install -r requirements.txt
5

要添加多个警报规则,我们需要使用不同的detect 带有DISTINCT标签的语句

组合数据流的检测器

更复杂的探测器,像是其他两个数据的函数 流,需要更复杂的设置,包括数据流分配。 如果我们想制造一个探测器,它能监视高于某一特定值的平均值 阈值,我们可以使用数据和 给定时间段内数据点的count()。

pip install -r requirements.txt
6

上述代码生成以下程序:

pip install -r requirements.txt
7

根据现有图表构建探测器

我们还可以从现有的图表中构建检测器,从而允许我们重用 我们的信号流程序,确保我们所监控的 我们是什么警报开启。

假设我们已经定义了一个图表供我们使用:

pip install -r requirements.txt
8

为了提醒此图表,我们将使用 探测器:

pip install -r requirements.txt
9

在添加规则之前,上面的示例实际上不会发出任何警报 您可以在上一节中找到的示例。

在公式中使用流函数和组合函数

信号模拟也提供组合信号流语句的功能 变成更复杂的信号流公式。这些公式很有用 当创建更复杂的检测器和图表时。例如,如果你愿意 要将一个数据流乘以另一个数据流并接收该公式的和, 它可以像这样使用op和mul来完成:

fromsignal_analog.flowimportDatats=Data('memory.utilization')
0

上面示例中的print(c)将产生以下输出:

fromsignal_analog.flowimportDatats=Data('memory.utilization')
1

构建仪表板组

信号模拟为在 信号模拟仪表板模块。

有关更多信息,请参阅上游文档 仪表板组API。

在上一节描述的示例的基础上,我们现在希望 建立包含仪表板的仪表板组。

首先,让我们构建两个仪表板对象,类似于我们在 建筑仪表板示例:

fromsignal_analog.flowimportDatats=Data('memory.utilization')
2

注意:我们不自己创建仪表板对象,仪表板组对象 负责创建所有子资源。

仪表板组上提供了许多与 好吧,让我们给仪表板组起一个难忘的名字,并配置它 API令牌:

fromsignal_analog.flowimportDatats=Data('memory.utilization')
3

我们的最终任务是将仪表板添加到仪表板组并创建它 在API中!

fromsignal_analog.flowimportDatats=Data('memory.utilization')
4

现在,在源代码中存储api密钥并不理想,所以如果您想了解 可以在运行时传入您的api密钥,请查看下面的文档以了解如何 您可以为您的资源动态构建一个cli

更新仪表板组

创建仪表板组后,可以更新名称等属性 以及仪表板组的说明或在组中添加/删除仪表板。

示例1:

fromsignal_analog.flowimportDatats=Data('memory.utilization')
5

例2:

fromsignal_analog.flowimportDatats=Data('memory.utilization')
6

直接与信号流api交谈

如果您需要在api的范围之外处理signalfx数据,则可能是 直接调用信号流api很有用。注意,你可能需要时间 根据数据源提取数据时的惩罚 (如AWS/CloudWatch)。

信号流结构包含在flow模块中。以下是 监视api服务的signalflow程序示例(例如retposte测试环境中foo应用程序的rps度量。

fromsignal_analog.flowimportDatats=Data('memory.utilization')
7

现在有了signalflow程序的对象表示。接受它 您可以像这样使用官方的SignalFX客户端进行试驾:

fromsignal_analog.flowimportDatats=Data('memory.utilization')
8

一般资源指南

图表始终属于仪表板

通常假设图表属于现有仪表板。这使得 图书馆更容易管理世界的现状。

每个帐户的资源名称都是唯一的

在模拟信号世界中,假设所有资源名称都是唯一的。 也就是说,如果我们有两个"foo dashboard",当我们试图更新 通过模拟信号仪表板,我们预计会看到错误。

为了简化状态管理,假定资源名是唯一的 图书馆自己。实际上我们还没有发现这是一个专业 不便之处。

配置是源真实的

当配置中的资源状态与 signalfx认为状态应该是什么,这个库总是倾向于 本地配置。

只有"ccrud"方法与signalfx api交互

资源对象包含许多用于启用"fluent"api的生成器方法 在SignalFX中描述项目的仪表板时。假设这些 方法不会在SignalFX API中执行影响状态的操作。

只有"ccrud"(create、clone、read、update和delete)方法会影响 SignalFX中资源的状态。

为资源创建cli

模拟信号为功能齐全的命令行客户机提供构建程序 可以管理资源集的生命周期。

简单的cli集成

与cli集成就像导入构建器和传递 它是你的资源。让我们考虑一个例子,其中我们想要更新两个 现有仪表板:

fromsignal_analog.flowimportDatats=Data('memory.utilization')
9

假设我们将其称为dashboards.py我们可以用以下两种方法之一运行它:

  • 授予脚本执行权限并直接运行它 (通常chmod+x dashboards.py
    • /dashboards.py—API键MyKey更新
  • 将脚本传递给python执行器
    • python dashboards.py—API键MyKey更新

如果你想知道你可以对新的 cli您始终可以使用--help命令。

ts=Data('memory.utilization').publish()
0

这将为您提供以下功能:

  • 一致的资源管理
    • 传递给cli生成器的所有资源都可以用一个 update调用,而不是在每个 资源独立
  • 所有资源的api密钥处理
    • 而不是为每个资源复制api密钥,您可以 使用api键调用cli
    • 这也提供了一种为不想使用的用户提供密钥的方法 把它们存储在源代码管理中(就是你!不要把钥匙放在 源代码管理)

文档

示例代码

  • 请参阅本项目中包含的示例。

贡献

有关投稿的详细信息,请阅读我们的文档。

2.7.2(2019-05-14)

已修复

已更新

2.7.0(2019-04-03)

已更新

已修复

2.6.0(2019-03-21)

2.5.0(2019-03-20)
  • 添加了plot类,这是一个帮助类,提供了一个与signalfx用户界面类似的界面。
  • 添加了rolluptypeenum,用于指定图表中使用的汇总。
  • 添加了指向自述文件的其他文档链接。
  • 修正:文本图表不起作用
  • 修复:日志配置中的yaml load deprecation警告
  • 2.4.0

    • 为仪表板组中的仪表板添加编号,以便更好地组织 仪表板数量

    2.3.2(2018-11-12)

    • signal\u analog.flow.data对象上的percentile函数 已修复为使用正确的构造函数

    2.3.1(2018-11-06)

    • 信号模拟现在首选simplejson如果在路径上可用, 否则返回到json模块。

    2.3.0(2018-10-30)

    • 仪表板组已学习如何接受SignalFX团队ID,以便他们能够 通过with_teamsbuilder方法与现有团队关联。

    2.2.2(2018-10-03)

    已修复

    • 在setup.py中添加不推荐值

    2.2.1(2018-10-02)

    更改

    • 添加了带有"二级可视化"功能的,以便在 单值图表。这将用隐藏的"迷你图"函数替换现在已失效的"代码"。这不会是 "中断更改"在3.0.0版之前,如果隐藏了"迷你图"的"代码",则会从"模拟信号"中删除"代码"。

    • 向该项目添加了不推荐使用的python库,以说明何时应删除隐藏有"迷你图"的。在 版本匹配3.0.0或更高版本该函数的测试将开始失败,无法通知发布该函数的人 版本删除已失效的隐藏有火花线的功能和测试。

    2.2.0(2018-09-27)

    更改

    • Dashboard create方法接受现有仪表板组的组ID,在这种情况下,新仪表板将 提供仪表板组的一部分

    示例:

    ts=Data('memory.utilization').publish()
    1
    • 仪表板组创建方法,将新创建的仪表板组的组ID传递给仪表板创建 方法,以便我们可以避免一些重复的调用,如克隆和删除仪表板

    2.1.0(2018-08-21)

    添加

    • ListCharts学习了如何通过 带有"图例"选项生成器
    • 可以筛选图例选项的未来图表类型现在可以利用 在signal_analog.charts.legenotionsmixin类中
    • fieldoption类已学会接受 提供UI中显示的字段选项与中使用的字段选项之间的映射。 美国石油学会
      • 例如,ui中的绘图名称,api中的sf_origingMetric
    • 一个新的textchart对象被添加到信号模拟图表 允许将文本描述添加到仪表板。
    • publishlabeloptions已经学会接受前缀、后缀和单位 在图表上标记数据时的参数。

    更改

    • publishlabeloptions已学会将所有参数都接受为可选参数 除了标签参数之外。

    已修复

    • 已经为python 2用户添加了一个修复程序,它阻止了成功 仪表板更新。

    2.0.0(2018-07-24)

    有关从1.x迁移到2.x的帮助,请咨询 迁移指南

    添加

    • 添加对维度的支持填充集成kpss变化率方法

    删除

      <代码>AP已删除方法支持
      • 一开始工作不正常,需要一些技巧。 根据我们构建信号流语句的方法,正确地进行操作

    修复

    • topbottom方法签名已固定为使用countby, 以及百分比参数
    • 以下函数已更新,如果同时出现以下两种情况,则会引发错误 byover在同一方法调用中定义:
      • 计数最大值平均值平均值加上标准差中值最小值百分位数随机大小标准差总和差异
    • delta已更新为不再接受任何方法参数
    • EWMA已更新为支持over

    1.6.0(2018-07-18)

    • 添加小于或等于(lte)且大于或等于(gte)的组合符

    1.5.1(2018-06-21)

    • 修复检测器更新逻辑以包括所有字段,而不只是名称/说明

    1.5.0(2018-05-16)

    • 添加了include\u zero方法以设置includezero选项。

    1.4.0(2018-05-08)

    • 实现将事件覆盖和选定(默认)事件覆盖添加到仪表板的功能 在仪表板创建或更新时。包括使用星号(*)符号进行通配符匹配。

    1.3.0(2018-04-17)

    • 实现其余仪表板筛选器:sourcetime

    1.2.0(2018-04-11)

    • 添加了一个赋值函数,该函数将启用通过组合多个数据流而构造的更复杂的检测器
    • 添加了一个ref flow运算符,该运算符将以一种方式启用引用分配,这种方式可以在以后的步骤中通过检查引用字符串与被分配者之间匹配的assign对象来验证

    1.1.0(2018-04-04)

    • 引入仪表板筛选器(目前仅限变量),这些筛选器可以配置为提供各种筛选器,这些筛选器影响所有已配置图表的行为(在图表级别重写任何冲突的筛选器)。您可能希望这样做,以便在给定的一组图表中快速更改您正在观察的环境。

    1.0.0(2018-04-02)

    • 模拟信号符号释放。未来版本的颠簸应该符合 到semver策略概述这里

    0.25.1(2018-03-22)

    • Timeshift方法的参数已更改。现在接受一个偏移量参数。

    0.24.0(2018-03-09)

    • 修复字符串分析以不排除布尔值false,这是某些函数(如.publish())所必需的

    0.23.0(2018-03-06)

    • 在flow.py中添加了op类以允许对数据流进行乘法和除法 创建信号流函数

    0.22.0(2018-03-01)

    • 添加了用于对流进行乘法和除法的mul和div组合符
    • 添加了用于发布流的"启用"选项。设置enable=false 将在图表/检测器中隐藏该特定流。

    0.21.0(2018-02-28)

    • 已添加仪表板组支持,为您提供 仪表板以方便的结构组合在一起
    • 增加了探测器支持,使您能够创建探测器 从头开始或重新使用现有图表的信号流程序
    • 仪表板和图表现在通过其id而不是按名称更新 在创建mu时减少名称冲突t具有相同名称的多个资源
    • 现在,所有资源和 为给定的 资源

    0.20.0(2018-01-31)

    • 仪表板已学习如何更新其子资源(例如 在配置中添加图表,下次运行时将反映更改 根据signalfx进行配置)
    • cli生成器已经学习了如何将干运行选项传递给其配置的资源
    • signal_analog.flow模块的小错误修复

    0.19.1(2018-01-26)

    • 添加了click to setup.py

    0.19.0(2018-01-19)

    • 添加了cli builder以创建和更新仪表板资源

    0.18.0(2018-01-11)

    • 仪表板资源已经学会了在用户需要时以交互方式提示用户 如果存在预先存在的匹配项,则创建新仪表板(此行为被禁用 默认情况下)。
    • 添加了"更新仪表板"功能,用户可以在其中更新仪表板的属性(目前仅限名称和说明)

    0.17.0(2018-01-11)

    • 添加热图图表样式
      • 由Jeremy Hicks添加

    0.16.0(2018-01-10)

    • 添加了按值升序/降序对列表图表排序的功能
      • 由Jeremy Hicks添加

    0.15.0(2018-01-08)

    • 在ColorBy类中添加了"scale",用于对单值图表中的阈值进行着色
      • 由Jeremy Hicks添加

    0.14.0(2018-01-04)

    • 添加列表图表样式
      • 由Jeremy Hicks添加

    0.13.0(2018-01-04)

    • 仪表板资源已经学习了如何在 signalfx api,而不考虑预先存在的匹配(此行为被禁用 默认情况下)。

    0.12.0(2017-12-21)

    • 仪表板资源已经学习了如何在 signalfx api,如果发现完全匹配,则不再创建它们自己

    0.3.0(2017-09-25)

    • 添加对基本资源对象的支持。将用于图表/仪表板 未来版本的摘要。
    • 添加对基本图表和TimeSeriesCart对象的支持。注意一些 TimeSeriesCart生成器选项尚未实现(并已标记 显然没有实现错误)

    0.2.0(2017-09-18)

    • 增加了对函数组合器的支持,如,以及

    0.1.1(2017-09-14)

    • 添加自述文档

    0.1.0(2017-09-14)

    • 初始版本

    欢迎加入QQ群-->: 979659372 Python中文网_新手群

    推荐PyPI第三方库


    热门话题
    java Github操作在生成期间未识别机密值   java根据给定的索引号选择适当的字符。开关语句   java如何在我的项目中使用SCA mvn插件在Fortify SCA扫描中仅包含一个文件夹?   java SwingWorker无法完成   使用KeyBindings Java在按住键时摆动停止暂停   java如何从sqlite数据库获取数据   java如何使用windows批处理文件逐个启动spring引导jar文件?   在Java中,字典是在构造函数中初始化映射的更好方法   用于在Java中创建2D形状的swing高级API   JavaSwing:制作一个可滚动的JPanel列表   引用泛型类中枚举成员的c#语法   java Doc4j:由于元素类型不同,比较两个文档失败   java如何优化绘制这些标记?