理解监测指标,并使用 Python 去监测它们(3)

在上面的 Demo 1 中,我们注意到在我们报告指标时,这里生成了许多数据。当我们将它们用于指标时我们需要做统计,因为它们实在是太多了。我们需要的是整体行为,我们没法去处理单个值。我们预期展现出来的值的行为应该是代表我们观察的系统的行为。

Demo 2:在指标上增加特征

在我们上面的的 Demo 1 应用程序中,当我们计算和报告一个请求的延迟时,它指向了一个由一些特征 唯一标识的特定请求。下面是其中一些:

HTTP 端点

HTTP 方法

运行它的主机/节点的标识符

如果我们将这些特征附加到要观察的指标上,每个指标将有更多的内容。我们来解释一下 Demo 2 中添加到我们的指标上的特征。

在写入指标时,src/helpers/middleware.py 文件将在 CSV 文件中写入多个列:

node_ids =['10.0.1.1','10.1.3.4']

def start_timer():

    request.start_time =time.time()

def stop_timer(response):

    # convert this into milliseconds for statsd

    resp_time =(time.time()- request.start_time)*1000

    node_id = node_ids[random.choice(range(len(node_ids)))]

    with open('metrics.csv','a', newline='')as f:

        csvwriter = csv.writer(f)

        csvwriter.writerow([

            str(int(time.time())),'webapp1', node_id,

            request.endpoint, request.method, str(response.status_code),

            str(resp_time)

        ])

    return response

因为这只是一个演示,在报告指标时,我们将随意的报告一些随机 IP 作为节点的 ID。当我们在 demo2 目录下运行 docker-compose up 时,我们的结果将是一个有多个列的 CSV 文件。

用 pandas 分析指标

我们将使用 pandas 去分析这个 CSV 文件。运行 docker-compose up 将打印出一个 URL,我们将使用它来打开一个 Jupyter 会话。一旦我们上传 Analysis.ipynb notebook 到会话中,我们就可以将 CSV 文件读入到一个 pandas 数据帧DataFrame中:

import pandas as pd

metrics = pd.read_csv('/data/metrics.csv', index_col=0)

index_col 表明我们要指定时间戳作为索引。

因为每个特征我们都要在数据帧中添加一个列,因此我们可以基于这些列进行分组和聚合:

import numpy as np

metrics.groupby(['node_id','http_status']).latency.aggregate(np.percentile,99.999)

更多内容请参考 Jupyter notebook 在数据上的分析示例。

我应该监测什么?

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/e009b7a14cfe9fc931f83ac09b3ba384.html