如果提供telemetry选项,ContainerPilot将公开可用于刮擦性能telemetry的Prometheus HTTP客户端界面。 telemetry接口被公告为consul服务。 telemetry服务的每个metricPrometheus客户端库配置收集器。 然后,Prometheus服务器可以向telemetry终端发出HTTP请求。

配置细节如下,但这篇博客文章提供了一个用法示例和叙述

顶级telemetry配置定义了telemetryHTTP端点。 正如一个典型的ContainerPilot service块一样,这个端点将被通告给Consul(或其他发现服务)。 该服务将被称为containerpilot ,并将在路径/metrics 。 telemetry服务将定期向发现服务发送心跳信号,以确定其仍在运行。 telemetry服务端点没有用户定义的运行状况检查,您不需要配置poll / TTL; 它每5秒钟会发出15秒的心跳。

ContainerPilot的最小配置包括telemetry可能如下所示:

{
consul: "consul:8500",
telemetry: {
port: 9090,
interfaces: ["eth0"],
tags: ["tag1"],
metrics: [
{
namespace: "my_namespace",
subsystem: "my_subsystem",
name: "my_events_count",
help: "help text",
type: "counter"
}
]
},
jobs: [
{
name: "sensor",
exec: "/bin/sensor.sh",
timeout: "5s",
when: {
interval: "5s"
}
}
]
}
字段如下:
  • port是telemetry服务将向发现服务通告的端口。 (默认值为9090.)
  • interfaces是可选的单个或数组接口规范。 如果给出,服务的IP将从匹配的第一个接口规范获得。 (默认值为["eth0:inet"]
  • tags是可选的标签数组。 如果发现服务支持(Consul),服务将注册自己的这些标签。
  • metrics是可选的收集器配置数组(见下文)。 如果没有提供传感器,那么telemetry端点仍将被暴露,并且将只显示关于ContainerPilot内部的telemetry。

Collector configuration

metrics字段是telemetry服务将用于配置Prometheus收集器的用户定义指标的列表。
  • namespacesubsystemname是Prometheus客户端库将用于构建telemetry名称的名称。 这三个名称与下划线_连接成为Prometheus记录的最终名字。 在上面的示例中,记录的度量将被命名为my_namespace_my_subsystem_my_event_count 。 你可以离开namespacesubsystem值,如果需要,将所有内容放在name字段中; 提供这些其他字段的选项只是为了方便那些以编程方式生成ContainerPilot配置的用户。 请参阅有关如何命名telemetry的最佳做法命名Prometheus文件
  • help是与Prometheus记录的指标相关联的帮助文本。 这通过给出更详细的描述对于调试非常有用。
  • type是Prometheus将使用的收集器的类型( countergaugehistogramsummary )。 详见下文

Sensor configuration

收集器可以记录通过HTTP控制套接字发送的指标。 如果您的应用程序不能containerpilot -putmetric使用此端点,则可以使用周期性作业记录度量值并调用containerpilot-putmetric 。 一个很好的工作脚本的例子可能是:

#!/bin/bash
# check free memory
val=$(free | awk -F' +' '/Mem/{print $3}')
./containerpilot -putmetric "free_memory=$val"

Collector types

ContainerPilot支持Prometheus API中可用的四种度量标准 。 简单来说,这些是:

Counter

累积度量,表示只有一个数字值才能上升。 Counter的典型用例是某些事件数量的计数。 传感器返回的值将被添加到该度量的Counter中。

Gauge

表示可以任意上下移动的单个数值的度量。 仪表的典型用例可能是当前内存使用情况的Gauge。 传感器脚本返回的值将被设置为Gauge仪度量值的新值。

Histogram

“count”中的观察次数以及所有观察值的总和。 典型的用例可能是请求持续时间或响应大小。 当Prometheus服务器刮掉这个telemetry终端时,它会收到count和列表。 例如:

namespace_subsystem_response_bucket{le="1"} 0
namespace_subsystem_response_bucket{le="2.5"} 0
namespace_subsystem_response_bucket{le="5"} 1
namespace_subsystem_response_bucket{le="10"} 2
namespace_subsystem_response_bucket{le="+Inf"} 2
这表明收藏家总共看到了2个事件。 一个事件的值小于5( le="5" ),而第二个小于10。
summary

总结类似于Histogram,但是它也提供了观察总数和所有观察值的总和,它在滑动时间窗口上计算分位数。 例如:

namespace_subsystem_response_seconds_summary{quantile="0.5"} 0.3
namespace_subsystem_response_seconds_summary{quantile="0.9"} 0.5
namespace_subsystem_response_seconds_summary{quantile="0.99"} 2
这表示第50百分位数响应时间为0.3秒,第90百分位数为0.5秒,第99百分位数为2秒。

有关何时应选择Histogram与摘要的最佳做法,请参阅关于Histogram的Prometheus文档。

 ======================================================================================================================
{
"consul": "{{ .CONSUL }}:8500",
"logging": {
"level": "INFO",
"format": "default",
"output": "stdout"
},
"jobs": [
{
"name": '{{ .SERVICE_NAME|default "app"}}',
"exec": "/root/test/containerpilot/app.sh",
"when":{
"source":"prestart",
"once":"exitSuccess",
"timeout":"60s"
},
"restarts": "unlimited",
"port": 80,
"health": {
"exec": "/root/test/containerpilot/manage.sh health",
"interval": 5,
"ttl": 10,
"timeout": "5s"
},
"tags": [
"app",
"prod"
],
"interfaces":["enp3s0:inet"]
},
{
"name": "prestart",
"exec": "/root/test/containerpilot/manage.sh prestart",
"restarts": "never"
},
{
"name": "backup_task",
"exec": "/root/test/containerpilot/manage.sh backup",
"timeout": "1m",
"when": {
"interval": "1500ms"
}
},
{
"name": "mysql_connections",
"exec": "/root/test/containerpilot/sensor.sh measureStuff",
"timeout": "5s",
"when": {
"interval": "5s"
}
}
],
"telemetry": {
"port": 9090,
"interfaces":["enp3s0:inet"],
"metrics": [
{
"namespace": "dbaas",
"subsystem": "mysql",
"name": "connections",
"help": "mysql connections",
"type": "gauge"
},
{
"namespace": "dbaas",
"subsystem": "mysql",
"name": "disk",
"help": "mysql disk",
"type": "gauge"
}
]
}
} ======================================
#!/bin/bash

trap 'exit 2' SIGTERM

usage() {
cat <<EOF
usage: $0 [COMMAND] Does nothing. EOF
} doStuff() {
echo "Running doStuff with args: $@"
} measureStuff() {
containerpilot -putmetric "dbaas_mysql_connections=42" -putmetric "dbaas_mysql_disk=1024"
} cmd="${1:-usage}"
shift
$cmd "$@"
 

Containerpilot 配置文件 之 Telemetry的更多相关文章

  1. Containerpilot 配置文件 之 consul

    Consul ContainerPilot使用Hashicorp的consul在作为服务的容器中注册工作. Watches查询consul找出其他服务的状态. Client configuration ...

  2. Containerpilot 配置文件reload

    containerpilot -reload -config ./containerpilot.json 进程号不变,重新加载配置文件

  3. Containerpilot 配置文件示例

    { consul: "localhost:8500", logging: { level: "INFO", format: "default" ...

  4. Containerpilot 配置文件模板

    { "consul": "{{ .CONSUL }}:8500", "logging": { "level": &quo ...

  5. Containerpilot 配置文件 之 Watches

    watch是在consul进行监视的服务配置. watch轮询服务的状态,并在服务变得健康,变得不健康或者实例数量发生变化时发出事件. 请注意,watch不包括行为; watch只发出事件,以便job ...

  6. Containerpilot 配置文件 之 Jobs

    ContainerPilot job是用户定义的进程和规则,用于何时执行它,如何进行健康检查,以及如何向Consul做广告. 这些规则旨在允许灵活性覆盖几乎可能要运行的任何类型的进程. 一些可能的jo ...

  7. 【Consul】Consul实践指导-配置文件

    Agent有各种各样的配置选项,这些配置选项可以通过命令行参数的方式设定,也可用通过配置文件的方式设定--所有的配置选项都是可选的,当然也是有默认值的. 当加载配置选项时,consul是按照词典顺序从 ...

  8. OpenStack Ocata Telemetry 数据收集服务

    1 安装配置计算服务 在所有计算节点上: 1.1 安装配置组件 安装包: # yum install -y openstack-ceilometer-compute 编辑配置文件/etc/ceilom ...

  9. OpenStack Ocata Telemetry 警告服务部署

    下列操作在控制节点上进行: 1 准备条件 在配置OpenStack Telemetry服务之前,你必须创建数据库.服务凭证和API端点. 1.1 数据库 以root用户连接数据库服务器,创建glanc ...

随机推荐

  1. php语言介绍分析

    1,胡说八道 php设计专门用于web开发的编程语言,易学易用得到广泛应用的同时也饱受诟病,简单易学使得初学者用最短的时间很容易实现自己的WEB站点,且开源项目丰富,是中小型公司热衷的选择.但是,随着 ...

  2. 多线程执行顺序诡异现象谈,你不知道的pthread_create

    引文:学而时习之,不亦说乎.总是忙于具体项目,业务功能的实现:关于编程本身的技能都要有些生疏了,于是就选择了几个专题做了一次温习,重点放在了多线程和多进程上,跑了一个实例,居然有新的发现: (1)多个 ...

  3. bzoj 4961: 除除除

    Description 我们定义一种操作是将一个正整数n(n>1)用某个整数d替换,这个数必须是n的约数(1≤d≤n).给你一个正整数n, 你需要确定操作进行的期望次数,如果我们希望不断地使用这 ...

  4. Oracle学习操作(6)函数与存储过程

    一.oracle自定义函数 1.不带参数的函数: 返回t_book表的总条数: SQL> create function getBookCount return number as begin ...

  5. 对于入门Demo的看法

    对于一些以前没有接触过的技术,网上一搜,了解一些介绍信息,原理以及一些代码API的大致了解,接下来应该开始一个小Demo例子. 网上现在好多的教材,多数不知是怎么写的,基本大致一个样,对于初学者没什么 ...

  6. 小朋友学C++(2)

    多态 (一) 先编写函数: #include <iostream> using namespace std; class Shape { protected: int width, hei ...

  7. 详解 Facebook 田渊栋 NIPS2017 论文:深度强化学习研究的 ELF 平台

    这周,机器学习顶级会议 NIPS 2017 的论文评审结果已经通知到各位论文作者了,许多作者都马上发 Facebook/Twitter/Blog/ 朋友圈分享了论文被收录的喜讯.大家的熟人 Faceb ...

  8. 小朋友学Python(4)

    Mac下安装Python 3 Mac系统会自带Python 2.7.x.安装Python 3时,不要卸载Python 2.7.x,因为有Mac系统有一些库会依赖于Python 2.7.x. 安装步骤: ...

  9. 学习MongoDB 三: MongoDB无法启动的解决方法

    一简介 我们之前介绍了MongoDB入门(安装与配置),我们今天在打开MongDB时,我们先运行cmd.exe进入dos命令界面,然后进入cd  D:\mongodb\bin目录下,启动服务或者mon ...

  10. js、C#获取当前url的参数值

    之前很想做一些封装关于获取URL参数值方法,今天简单整理了一下js和后台代码获取url参数值的方法,有什么不好地方,还请大家包涵,代码如下: 1.JS处理URL参数值 <script langu ...