使用 Grafana、InfluxDB 和 Telegraf 监控 Windows 服务

导航至

这篇文章由 InfluxAce Antoine Solnichkin 撰写。

如果您是 Windows Server 管理员或 Windows 实例上的高级用户,您可能经历过服务无缘无故关闭带来的巨大挫败感。

Windows services monitoring devops

最糟糕的是,当您碰巧发现它太晚时,会导致您的团队产生明显的无用成本。

本教程的目标是帮助您结束这种令人恼火但最终可以避免的资源浪费。 除此之外,我们还将展示如何构建一个完整的堆栈,供 DevOps 工程师监控 Windows 服务——并在其中一个服务失败时收到警报。

您将学到什么

在直接进入技术实施之前,以下是如果您一直按照本教程学习到最后,您将学到的所有内容列表

  • 掌握“经典”监控架构以及工具如何协同工作
  • 安装最先进的 DevOps 工具,如 Grafana v6.1.4(2019 年发布)、InfluxDB v1.7.3 和 Telegraf 1.10.3
  • 了解什么是性能计数器以及如何与性能监视器交互
  • 使用 Grafana 的最新功能(如仪表盘面板)构建完整的仪表板
  • 了解警报如何在 Grafana 中工作

现在您已经了解了您将要获得的技能,让我们首先快速介绍一下 Windows 机器上的性能计数器。

什么是性能计数器?

Windows 机器上的性能计数器是本机组件,用于记录和监视机器上各种工具的数据,例如:您的 CPU、磁盘、进程、数据库(如果您正在运行某些数据库,如 MySQL)甚至 ASP.NET 应用程序。

Windows 公开了一个 API,任何工具都可以查询该 API 以从性能计数器检索统计信息。 还提供了可视化工具,供您实时查看指标。

可视化工具的一个示例是性能监视器,它直接随每台 Windows 机器一起提供。

Performance Counters Window monitoring

通过开始菜单访问性能监视器

如果您打开性能监视器,您可以导航到左侧菜单中的“监控工具”>“性能监视器”。

在那里,通过单击绿色的“添加”按钮,您可以访问计算机上可用的一组高级指标。

进程、PhysicalDisk、LogicalDisk 和数据库是可以添加到定期刷新的图形中的指标。

Preformance monitor visual tool

低成本 Grafana!

使用性能监视器已经是一个了解可以监视什么的好方法。 在直接进入 Telegraf 之前,您可能需要使用性能监视器进行一些实验。

现在您已经对性能计数器有了更多了解,让我们看一下我们将如何构建我们的监控架构。

构建经典的监控架构

在构建个人使用的监控架构时,大多数情况下,您都希望重新组合三个组件

  • 监控代理:它可以是 Telegraf、CollectD、StatsD、Datadog 或任何能够收集指标的工具
  • 时间序列数据库:在本例中为 InfluxDB,但也存在许多其他数据库
  • 可视化工具:Grafana 或 Chronograf

classic monitoring architecture telegraf

在本例中,Telegraf 将定期查询 Windows 性能计数器 API 并将结果发送到 InfluxDB。 这些结果将在 Grafana 中可访问和可浏览。

windows 95 did you know

安装不同的工具

现在我们确切地知道我们将要构建什么,让我们安装我们需要的不同工具。

a - 安装 InfluxDB

在配置任何监控代理之前,首先拥有时间序列数据库非常重要。

在没有 InfluxDB 的情况下启动 Telegraf 会导致许多错误消息,这些错误消息不会非常相关。

安装 InfluxDB 非常简单,请访问 https://portal.influxdata.com/downloads/ 并将生成的 .zip 文件保存到您计算机上的某个位置。

保存后,将内容解压缩到您想要的任何位置,启动命令行并导航到您存储二进制文件的文件夹(在我的情况下,直接在 Program Files 中)。 到达那里后,您将看到几个文件

  • influx.exe:一个 CLI 可执行文件,用于轻松导航您的数据库和指标;
  • influxd.exe:用于在您的计算机上启动 InfluxDB 实例;
  • influx_stress.exe:一个可执行文件,用于在您的计算机上运行压力测试;
  • influx_inspect:用于检查 InfluxDB 磁盘和分片(在我们的案例中不相关)。
  • 在我们的案例中,您要运行 influxd 可执行文件。 立即之后,您应该看到您的 InfluxDB 实例正在运行。

Launching InfluxDB on Windows

InfluxDB 尚未作为服务发布,即使将其配置为 Windows 上的用户定义服务是完全可行的。

b - 安装 Telegraf

在 Windows 上安装 Telegraf 可能有点棘手。

要下载 Telegraf,请访问 InfluxDB 下载页面 并单击可用的最新版本的 Telegraf。

Telegraf 安装应在 Program Files 文件夹中完成,文件夹名为 Telegraf。

以管理员身份启动 Powershell 实例。 访问 Program Files 文件夹并运行

mkdir Telegraf

将下载的可执行文件放在此处,然后运行

telegraf.exe --service install

因此,Telegraf 应作为服务安装并在 Windows 服务中可用。 Telegraf 配置文件应配置为从您的 CPU 和磁盘检索指标。 要测试它,请运行

net start telegraf

如果一切运行正常,您应该开始看到指标在 InfluxDB 中聚合。

要检查它,请访问 InfluxDB 文件夹(您在其中放置了可执行文件)并运行 influx.exe。

您应该看到一个 CLI,您将在其中键入您的第一个 IFQL 查询。

> show databases;
# You should see a list of your databases, including telegraf

> use telegraf;
# Navigating in your telegraf database

> show measurements;
# Getting the list of your measurements

> SELECT * FROM win_cpu
# Seeing your CPU metrics

如果您不熟悉 InfluxDB 的基础知识以及 IFQL 是什么,请查看我的 InfluxDB 初学者终极指南。 它包含关于您需要了解的一切的良好解释:https://devconnected.com/the-definitive-guide-to-influxdb-in-2019/

c - 安装 Grafana

在本教程中,我们将使用全新的 Grafana v6。

访问 Grafana 下载页面,下载 zip 文件并将其解压缩到您想要的任何位置。 与您对 InfluxDB 所做的类似,访问您存储可执行文件的文件夹并运行 Grafana 服务器(bin 文件夹中的 grafana-server.exe)。

默认情况下,Grafana 将在端口 3000 上运行。 默认凭据为 admin/admin(系统会提示您在启动时直接修改它们)。

完成后,系统会要求您配置数据源。 默认情况下,InfluxDB 实例在端口 8086 上运行。 以下配置应该可以解决问题

Windows Services monitoring - InfluxDB

现在所有工具都已配置,是时候开始监控 Windows 服务了。

配置 Telegraf

在我们创建令人敬畏的仪表板之前,我们需要配置 Telegraf,以便它查询我们在第一章中描述的性能计数器 API。

这将通过使用 Telegraf 的 win_perf_counters 插件来完成。 该插件需要在您的配置文件的 inputs 部分中声明。 它看起来像这样

[[inputs.win_perf_counters]] [[inputs.win_perf_counters.object]] 
  # Processor usage, alternative to native, reports on a per core. 
  ObjectName = "Processor" 
  Instances = ["*"] 
  Counters = ["% Idle Time", "% Interrupt Time", "% Privileged Time", "% User Time"] 
  Measurement = "win_cpu"

ObjectName 属性需要与您在性能监视器中找到的完全相同的名称。 当您不确定可以在 Windows 上查询什么时,您可以

Windows services monitoring - InfluxDB

在我们的案例中,我们要监视 Process 对象名称,以及我们感兴趣的服务的 ElapsedTime 计数器:postgres(在本例中)。

我们还可以添加“% Processor Time”指标,以停止消耗 CPU 资源的资源。 生成的 Telegraf 配置将是

[[inputs.win_perf_counters]] 
  [[inputs.win_perf_counters.object]] 
    # Processor usage, alternative to native, reports on a per core. 
   ObjectName = "Process" 
   Instances = ["*"] 
   Counters = ["Elapsed Time", "% Processor Time"] 
   Measurement = "win_services"

现在一切都已配置,让我们转到 Grafana 并构建我们的仪表板。

构建一个令人敬畏的仪表板

乐趣从这里开始。

我们将在 Grafana v6.0 中构建我们的仪表板。

提醒一下,这是我们今天将要构建的仪表板。

Grafana dahboard

在 Grafana 中,通过单击左侧菜单上的加号图标来创建一个新的仪表板。

我们选择“Elapsed Time”指标是为了衡量服务是启动还是关闭。

但是,我们必须对我们的数据执行转换,因为 Elapsed Time 函数理论上是一个永无止境的增长函数。

正如我在我关于 systemd 服务 的文章中所做的那样,我将为您提供小部件和查询,供您重现此仪表板。

a - 构建性能仪表盘

Building the performance gauge

如果您想要与仪表盘完全相同的输出,请访问“可视化面板”:在“值面板”中,显示“Last”值并选择“percent”单位。

b - 构建“可用性”图表

Grafana query

这里的关键是差分运算符。

它使图形具有“心跳”外观,避免了图形不断增长和永久重新缩放。

如果您想要获得完全相同的输出,请访问“可视化”面板并单击“Staircase”选项。

此仪表板的其他框只是带有某些 CSS 颜色的纯文本面板,这里没有什么特别之处。

您当然可以调整示例以监控您感兴趣的服务,和/或修改查询以采用您认为更适合您需求的运算符。

现在我们的可视化已准备就绪,是时候在每次服务失败时警告我们的 DevOps 团队了。

在服务失败时向 DevOps 团队发出警报

可视化服务失败很棒,但您不想每秒都盯着 Grafana 并等待服务失败。

理想情况下,您希望通过 Slack 等方式收到通知,以便立即对故障采取措施。

这正是我们将在 Grafana 上配置的内容:Slack 警报。 让我们开始吧。

在 Grafana 中,您只能为图形面板创建一些警报。 两个步骤,我们就完成了。

a - 创建通知渠道

在创建实际警报之前,我们必须创建一个通知渠道。 在左侧菜单中,访问小铃铛图标,然后单击“通知渠道”。

到达那里后,您将看到几个必须填写的字段。 例如,我将为您提供我自己的配置。

Notification Channel Definition - alerting

b - 创建警报

现在我们的通知渠道已创建,是时候在图形面板上构建我们的最终警报了。

访问您的仪表板,编辑其中一个图形面板,然后单击与左侧菜单上的铃铛类似的小铃铛。

同样,我将提供一个全面的屏幕截图,说明我是如何构建我的警报的。

此警报声明它将评估您之前为最后一分钟定义的查询提供的最后一个值。

如果它没有值,则将引发警报。 警报评估每 10 秒执行一次。

您也可以将“For”参数减少到 10 秒,以使您的警报更具响应性。

c - 模拟服务关闭

让我们假设一秒钟,您的 Telegraf 服务无缘无故关闭(当然,这在现实生活中永远不会发生。)

net stop telegraf

这是 Grafana 中的图形结果,以及 Slack 中引发的警报!

Grafana output

完成! 我们终于得到了这项辛勤工作的回报。 恭喜!

结论

通过本教程,我们学到了很多东西:首先,Windows 有一个完整的内置 API,我们可以根据我们的需要加以利用。

我们看到了如何使用 Telegraf、InfluxDB 和 Grafana 等现代工具来设置一种快速有效的方式来监控应用程序。

在本教程中,我们以 Windows 服务为例,但它可以应用于 Windows 向其用户公开的几乎所有性能计数器。

IIS 监控、ASP.NET 应用程序、Web 服务,一切都可以通过性能计数器进行监控,因此可以在 Telegraf 中实现。

了解您现在可以做的一切,您将在您的系统上监控哪些指标? 您认为它可以为您的公司带来什么价值?

在此博客文章上发表评论,并分享您对该项目的看法。

如果您想阅读更多关于该主题的内容,请务必阅读 InfluxData 博客 此处 撰写的优秀文章。

它们都包含对 DevOps 行业有价值的信息。

在那之前,像往常一样玩得开心。