向BlueFlood发送Graphite度量

blueflood-carbon-forwarder的Python项目详细描述


#说明 < BR>
石墨"后端"。基于twisted的服务器接受graphite源度量并将它们转发给[blueflood][blueflood git]。 < BR>
服务器只接受pickle协议度量(因为它是graphite"碳中继"使用的唯一协议)。 < BR>
它执行非常原始的"缓存":聚合所有度量并定期刷新它们。 < BR>
依赖关系 < BR>
*扭曲 *嘲讽
*pytest测试
*txkeystone公司 < BR>
安装 < BR>

Git克隆https://github.com/rackerlabs/blueflood-carbon-forwarder.git
CD Blueflood碳转运商
python setup.py安装
< BR>
正在运行 < BR>

向前扭转的蓝色洪水

开关说明默认值|
-|
-e侦听pickle协议度量的端点tcp:2004|
-i度量发送间隔,秒30.0|
-b blueflood地址http://localhost:19000|
-t租户id租户|
|
——TTL度量的TimeToLive值,秒86400|
-u keystone用户||
-k密钥||
——认证URL密钥令牌URL|| 从配置文件中设置选项||
——覆盖集合时间戳将度量集合时间戳替换为摄取时间戳false|
——协议监听协议类。MetricPickleReceiver用于从Graphite接收度量,或MetricLineReceiver用作Graphite替换。| Metricpickle接收器| < BR>
如果不需要身份验证,请将`-u`/`--user`命令行参数保留为空(默认值)。
建议不要从命令行设置"key"选项,因为这可能会损害api密钥。相反,在配置文件中设置密钥,并将"--config"选项设置为文件名。 < BR>< BR>
发送度量 < BR>
要将测试度量发送到上面启动的twistd服务器,可以运行以下命令:

python测试/脚本/sendpickle.py

根据本地测试修改脚本 < BR>
配置 < BR>
配置在运行时使用传递给twistd守护进程的命令行参数完成:

twistd-n-l-blueflood forward--帮助 < BR>
< BR>
记录 < BR>
可以使用随附的logobserver控制日志记录,也可以使用自己的logobserver < BR>

扭曲——记录器碳转发日志。转发日志观察员。获取日志观察员BlueFlood转发
< BR>
[blueflood git]:https://github.com/rackerlabs/blueflood"blueflood" < BR>
运行单元测试

pip安装-r requirements.txt Pr/Py.试验
< BR>
安全考虑
该工具利用python的[`pickle`](https://docs.python.org/2/library/pickle.html)模块从graphite接收数据。
"pickle"模块不是为了防止恶意构建的数据。
特别是,精心编制的有效负载可用于在接收端[执行任意shell命令](https://blog.nelhage.com/2011/03/exploating-pickle/)。
因此,转发器使用"safeunpickler"来限制哪些类可以反序列化,但会降低速度。
通常情况下,这不应该是一个问题。但是,如果应用程序需要以更快的速度反序列化对象,并且已知输入是安全的,则可以使用"get_unpickler"返回默认的不安全pickler。 < BR>
故障注意事项 < BR>
操作中的错误自然会分为输入和输出两个领域。
入站端的错误将与来自carbon的pickled数据相关。
出站端的错误将是来自发送度量的BlueFlood实例的意外(或丢失或错误)HTTP响应。< BR>
接受pickle格式的度量: < BR>
如果在传输过程中截断格式正确的pickle消息,则不会记录度量,也不会记录错误或异常。 < BR>
如果pickle消息的格式不正确(例如,如果在设置"handle"之前"sendpickle.py"中的"payload"被截断),则unpickler将引发"eoferor",并将异常写入日志。 < BR>
通过http转发度量: < BR>
转发器通过http post请求将度量发送到`/v2.0/${tenant}/insert`路径。
在大多数情况下,将忽略来自该请求的响应。但是,已检查响应代码。
如果响应代码为"200"、"201"、"202"、"204"或"207",则转发器假定请求成功,并且度量已成功接收。
但是,如果响应代码是其他代码,则行为会更复杂一些(请参见下面的[技术详细信息](技术详细信息))。
需要注意的是,如果响应代码不是上述代码之一(`200`、`201`、`202`、`204`或`207`),则不会记录错误或异常。
但是,从服务器收到的响应代码会被记录。
如果您想知道是否有任何错误,则必须检查日志。 < BR>
代码本身没有任何重要的错误处理逻辑,但我们可以根据响应代码建议一些操作过程: < BR>
-207:有问题。这是一个多状态响应。响应体将包含聚合到单个文档中的多个操作的结果响应。它在2xx范围内,但这并不意味着所有(甚至任何)组合操作都成功。` bluefloodendpoint始终将207视为成功,因此如果某些度量因某种原因被拒绝,它将不会尝试重新发送它们,它们将永远丢失。除非我们能用别的东西代替它,否则这个问题可能应该在货代公司解决。
-401或403:身份验证失败。请仔细检查"tenant"、"key"和"auth-url"配置设置,然后重试。
-429:此响应表示超出了速率限制。通常,每秒钟或每分钟的限制将在转发器重试时重置。如果问题仍然存在,将"interval"选项设置为更大的秒数可能会有帮助。
-5xx:这是blueflood的服务器端错误。转发器上没有任何可以解决此问题的设置。 < BR>
技术细节: < BR>
有两个级别的"批处理":
-`metriccollection.\u度量`
-`bluefloodendpoint.\u json_缓冲区` < BR>
当"interval"结束时,度量数据将从"metrics"移动到"json"缓冲区。
然后,"blueflood端点"将尝试通过http将它们发送到blueflood。
如果http请求成功,则会清空"json"缓冲区。
如果请求未成功,则度量将保留在"json"缓冲区中,并包含在下一个http请求中。
由于http请求只在"metrics"中有数据等待发送时才发出,这一过程更加复杂。
如果"json"缓冲区中有数据,但"metrics"中没有数据,则不会尝试发送这些数据,而这些数据只会放在"json"缓冲区中。 < BR>
更改日志: < BR>
-添加overwrite_collection_timestamp config(默认设置为false)以使转发器在发送到rackspace指标进行接收时使用系统时间进行收集时间。 < BR>
0.4.2
-添加protocol的配置以指定要使用的侦听协议类;默认为以前版本的metricpickleceiver。

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

推荐PyPI第三方库


热门话题
java如何在tomcat上配置安全假端口?   从Clojure调用java函数   java场景转换问题,标签丢失文本   java中的无头异常   java无法使嵌套片段正常工作,无法解析getChildFragmentManager   java用Apache commons电子邮件中的名称替换发件人电子邮件地址   java嵌套泛型类型参数   Java BigDecimal精度问题   在JAVA中,从socket的输入流读取数据而不必等待   JavaFX多线程和Progressbar   java如何在SeleniumWeb驱动程序中从同一页面上的多个按钮中单击一个按钮?   使用java上传https文件?   java获取编码,在安卓中使用这种编码读写?   比较Java中检查大于和小于的最有效方法是什么?   使用嵌入式Jetty部署java Web应用程序   在JavaJFrame中打开另一个Jframe,但Jframe不显示任何内容   java无法使用netflix eureka创建多个实例   java没有写入int值。请更正程序   java我可以在安卓中使用通知侦听器服务为Instagram开发自动响应应用程序吗   如果静态意味着它不需要任何对象,那么java如何遵循OOP?