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

导航到

本文由InfluxAce Antoine Solnichkin撰写。

如果您是Windows服务器管理员或在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,任何工具都可以查询以从性能计数器中检索统计数据。还提供了可视化工具,让您可以实时查看指标。

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

Performance Counters Window monitoring

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

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

在那里,通过点击绿色的添加按钮,您将看到计算机上可用的各种高级指标。

进程、物理磁盘、逻辑磁盘和数据库是可添加到定期刷新的图表中的指标之一。

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

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

要下载 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

在我们的例子中,我们想监控进程对象名称,我们感兴趣的服务的 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 中,通过点击左侧菜单中的加号图标创建一个新的仪表板。

我们选择了“已用时间”指标来衡量服务是否正常运行或已停止。

然而,我们必须对我们的数据进行转换,因为“已用时间”函数在理论上是无限增长函数。

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

a - 构建性能计

Building the performance gauge

如果您希望计的输出完全相同,请转到“可视化面板”:在“值面板”中显示“最后”值,并选择“百分比”单位。

b - 构建“可用性”图表

Grafana query

关键在于差分运算符。

它给图表一个“心跳”外观,避免了永久缩放的不断增长图表。

如果您希望得到完全相同的输出,请转到“可视化”面板并点击“阶梯”选项。

此仪表板的其余部分只是带有一些CSS颜色的纯文本面板,没有什么特别之处。

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

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

在服务失败时提醒DevOps团队

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

理想情况下,您可能希望通过Slack等工具收到通知,以便立即对失败采取行动。

这正是我们将在Grafana上配置的内容:Slack警报。让我们去那里。

在Grafana中,您将能够为图表面板创建一些警报。两步,我们就完成了。

a - 创建通知频道

在创建实际警报之前,我们必须创建一个通知频道。在左侧菜单中,转到小铃铛图标,并点击“通知频道”。

到了那里,您将看到一些您必须填写的字段。作为一个例子,我将提供我自己的配置。

Notification Channel Definition - alerting

b - 创建警报

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

转到您的仪表板,编辑一个图表面板,并点击左菜单上类似的小铃铛。

再次,我将提供一张全面的截图,说明我是如何构建我的警报的。

此警报指出,它将评估您之前定义的查询提供的最后分钟的最后值。

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

您还可以将“持续”参数减少到10秒,使您的警报更加灵敏。

c - 模拟服务关闭

让我们假设一下,您的Telegraf服务没有原因地关闭(当然,在现实生活中这种情况从未发生过。)

net stop telegraf

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

Grafana output

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

结论

通过本教程,我们学到了很多:首先,Windows有一个完整的内置API,我们可以利用它来满足我们的需求。

我们看到了如何使用Telegraf、InfluxDB和Grafana等现代工具,以便快速高效地监控应用程序。

在本教程中,我们以Windows服务为例,但实际上它几乎可以应用于Windows向用户公开的每一个性能计数器。

IIS监控、ASP.NET应用程序、Web服务等,都可以使用性能计数器进行监控,并作为结果在Telegraf中实现。

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

在本文博客上发表评论,并分享您对这个项目的看法。

如果您想了解更多关于这个主题的信息,请务必阅读InfluxData博客上优秀文章这里

它们都包含DevOps行业宝贵的信息。

在此期间,祝您玩得开心,就像往常一样。