当前位置: 首页 > 科技观察

了解监控指标并使用Python对其进行监控

时间:2023-03-18 13:00:20 科技观察

通过学习这些关键术语和概念来了解Python应用程序监控。当我第一次看到术语“计数器”和“仪表”以及使用颜色和标记“平均”和“大于90%”的数字图表时,我的一个反应是逃跑。尽管我看到了它们,但我并不感兴趣,因为我不了解它们的用途或如何使用它们。因为我的工作不需要我关注他们,所以他们完全被我忽略了。这都是两年前的事了。随着我职业生涯的发展,我想更多地了解我们的Web应用程序,那是我开始学习指标的时候。我了解监控的学习之旅分为三个阶段(到目前为止),它们是:第1阶段:什么?(王谷左右)第二阶段:没有指标,我们真的很浮躁。第三阶段:指标不合理怎么办?我现在处于第2阶段,我将分享到目前为止我学到的东西。我正在前往第3阶段,我在本文末尾提供了一些我正在使用的学习资源。让我们开始吧!所需的软件和本文讨论的演示可以在我的GitHub存储库中找到。您需要安装docker和docker-compose才能使用它们。为什么要监控?监控的主要原因是:了解容量规划的正常和异常系统和服务特征,自动缩放有助于故障排除度量标准是在给定时间点对某些数量的度量。博客文章的总点击次数、参与讨论的总人数、在缓存系统中未找到数据的次数、您网站上的登录用户数量——这些都是指标示例。它们通常可以分为三类:计数器以您的个人博客为例。发布一篇文章后,过一段时间后,您想知道您获得了多少点击率,而这个数字只会增加。这是一个计数器指标。它的值从0开始,并在您的博客文章的生命周期内递增。从图形上看,计数器应如下所示:计数器指标始终在增加。如果您想每天或每周跟踪您的博客点击量而不是基于时间的总点击量,请计量。该指标称为仪表,其值可以上升或下降。从图形上看,仪表应如下所示:仪表指示器可以增加或减少。一个gauge的值通常在某个时间窗口内有最大值上限和#calculateandreportlatencywork_latency=time.time()-start_time...使用上面的模式请记住,我们经常利用修改器、内容管理器和中间件(用于网络应用程序)来计算和报告指标。在Demo1和Demo2中,我们在Flask应用程序中使用了修饰符。指标报告的拉取和推送模型从广义上讲,Python应用程序中有两种报告指标的模型。在拉模型中,监控系统在预定义的HTTP端点“抓取”应用程序。在推送模型中,应用程序将数据发送到监控系统。拉和推模型在拉模型中工作的监控系统的一个例子是普罗米修斯。StatsD是推模型的一个例子。集成StatsD要将StatsD集成到Python应用程序中,我们将使用StatsDPython客户端,然后更新我们的指标报告代码以调用适当的库将数据推送到StatsD。首先,我们需要创建一个客户端实例:statsd=statsd.StatsClient(host='statsd',port=8125,prefix='webapp1')prefix关键字参数将添加一个指定的前缀。一旦有了客户端,我们就可以使用以下代码报告计时器的值:statsd.timing(key,resp_time)增加计数器:statsd.incr(key)为了将指标与元数据相关联,键定义为:metadata1.metadata2.metric,其中每个metadataX是一个可以聚合和分组的字段。演示应用程序StatsD是将statsd与PythonFlask应用程序集成的完整示例。集成Prometheus要使用Prometheus监控系统,我们使用PrometheusPython客户端。我们将首先创建相关指标类对象:REQUEST_LATENCY=Histogram('request_latency_seconds','Requestlatency',['app_name','endpoint'])上述语句中的第三个参数与该指标标识符相关。这些标识符由与各个度量值关联的元数据定义。记录特定的观察指标:REQUEST_LATENCY.labels('webapp',request.path).observe(resp_time)下一步是在我们的应用程序中定义一个HTTP端点,Prometheus可以抓取该端点。这通常是一个名为/metrics的端点:@app.route('/metrics')defmetrics():returnResponse(prometheus_client.generate_latest(),mimetype=CONTENT_TYPE_LATEST)这个演示应用程序Prometheus是prometheuswithPythonFlask的一个完整示例应用集成。哪个更好:StatsD还是Prometheus?本能地想到的下一个问题是:我应该使用StatsD还是Prometheus?我写了几篇关于这个主题的文章,您可能会觉得它们有用:使用Prometheus监控多处理Python应用程序使用Prometheus监控您的同步Python应用程序使用Prometheus监控您的异步Python应用程序如何使用指标稍微了解一下为什么我们应该在我们的应用程序上配置监控,让我们更深入地了解它的两个用途:警报和自动缩放。使用指标发出警报指标的一个关键用途是创建警报。例如,如果您的HTTP500数量在过去五分钟内持续增加,您可能希望向适当的人发送电子邮件或页面警报。如何处理配置的警报取决于我们的监控设置。对于Prometheus,我们可以使用Alertmanager,对于StatsD,我们可以使用Nagios。使用指标进行自动扩展在云基础设施中,如果我们当前的基础设施供应过剩或供应不足,指标不仅可以让我们知道,还可以帮助我们实施自动扩展策略。例如,如果我们服务器上的工作进程利用率在过去五分钟内达到90%,我们就可以水平扩展。我们如何扩展取决于云基础设施。默认情况下,AWS自动扩展会根据系统CPU使用率、网络流量和其他因素来扩展策略。但是,为了获得基础设施扩展的应用程序指标,我们必须发布自定义CloudWatch指标。多服务架构中的应用程序监控当我们超越单一应用程序架构时,例如当客户端的请求可以在响应发送回之前触发对多个服务的调用时,我们需要从我们的指标中获取更多信息。我们需要一个统一的延迟视图指标,以便我们可以知道每个服务响应此请求所花费的时间。这可以通过分布式跟踪来实现。您可以在我的博客文章《在你的 Python 应用程序中通过 Zipkin 引入分布式跟踪》中看到一个使用Python进行分布式跟踪的示例。总之,您需要牢记以下几点:了解监控系统中指标类型的含义了解监控系统监控应用程序最关键组件所需的数据测量单位它最关键的阶段以上几点的行为是假设您不管理您的监控系统。如果管理您的监控系统是您工作的一部分,那么它还有更多!其他资源以下是我在监控学习过程中发现的一些非常有用的资源:ComprehensiveMonitoringDistributedSystemsObservationandMonitoringBestPracticesWhoWantstoUseSeconds?StatsD/GraphiteStatsD指标类型PrometheusPrometheus指标类型Prometheus指标如何工作?为什么使用Prometheus的累积柱形图?在PythonPrometheus中监控批处理作业:监控SoundCloud避免错误(即第3阶段学习)当我们学习监控的基础知识时,始终注意不要犯错误很重要。以下是我偶然发现的一些有见地的资源:如何不测量延迟Prometheus柱状图:一个悲伤的故事为什么平均值令人讨厌,而百分位数是对延迟的巨大误解谁移动了99%的延迟?日志、指标和图表HdrHistogram:捕捉延迟的更好方法