基础设施监控入门
作者:Charles Mahler / 用例,开发者
2023年10月11日
导航到
本文最初发表在The New Stack上,在此处转载并经许可。
通过利用监控数据,公司可以确保其基础设施性能最优化的同时降低成本。
虽然构建新功能和推出新产品很有趣,但如果你的软件不可靠,这些都无关紧要。确保你的应用程序运行顺畅的关键部分是建立强大的基础设施监控。在本文中,你将了解以下内容
- 基础设施监控的不同组件。
- 用于基础设施监控的常用工具。
- 如何设置应用程序的监控。
如果你更喜欢视频,你还可以查看这个演示,它涵盖了本文中讨论的一些主题。
基础设施监控的组件
基础设施监控包括一系列不同的架构组件,这些组件是服务于现代应用程序所必需的。为了确保软件的可靠性,所有这些组件都需要得到适当的监控。
- 网络监控 — 网络监控关注像路由器和交换机这样的硬件,涉及跟踪带宽使用、正常运行时间和设备状态等。它用于识别瓶颈、停机时间和可能低效的网络路由。
- 服务器监控 — 服务器监控关注监控物理和虚拟服务器实例的性能和健康。常见的指标包括CPU、RAM和磁盘利用率。服务器监控对于容量规划很重要。
- 应用性能监控(APM) — APM关注软件,用于跟踪应用程序在从UI到数据存储的每一层的性能。常见的指标包括错误率和响应时间。
- 云基础设施监控 —— 如其名所示,云监控涉及对云基础设施(如数据库、不同类型的存储和虚拟机)进行监控。目标是跟踪可用性、性能以及资源利用率,以防止云硬件的过度或不足配置。
这些监控类型中的每一种都为团队提供了一个不同的视角来查看和管理他们的基础设施。通过充分利用这些数据,公司可以确保其基础设施以最佳性能运行,同时降低成本。
基础设施监控工具
在选择合适的工具以创建基础设施监控系统时,至关重要。有众多开源和商业选项可供选择。您还可以选择全面的服务解决方案,或者通过组合专业工具创建自己的定制解决方案。无论如何,有三个主要问题需要考虑:您将如何收集数据、如何存储数据以及您将如何处理数据?让我们看看用于完成每项任务的可用工具。
数据收集工具
基础设施监控最大的挑战之一是收集可能来自许多不同来源的数据,通常没有标准化的协议或API。这里的关键目标应该是选择一个工具,它可以帮助您避免重新发明轮子,不会让您受限,并且可以扩展,以便您可以根据应用程序的变化进行数据收集的扩展或修改。
Telegraf
Telegraf是一个开源服务器代理,非常适合用于基础设施监控数据收集。Telegraf解决了上述提到的大部分问题。它有超过300种不同的输入和输出插件,这意味着您可以轻松地从新的数据源收集数据,并将数据输出到最适合您用例的存储解决方案。
结果是,Telegraf通过无需编写收集数据的自定义代码来节省大量工程资源,并且可以通过轻松更改存储输出来防止供应商锁定。Telegraf还具有数据处理和转换插件,因此在某些用例中,它可以简化您的架构,通过替换流处理工具。
OpenTelemetry
OpenTelemetry是一套开源的SDK和工具,可以轻松地从应用程序中收集指标、日志和跟踪。OpenTelemetry的主要优势是它具有供应商无关性,因此您不必担心陷入成本高昂且切换成本高的APM工具。OpenTelemetry还通过提供简化应用程序数据收集的仪表化工具来节省开发者的时间。
数据存储工具
在开始从您的基础设施收集数据后,您需要有一个地方来存储这些数据。虽然通用数据库可以用于这些数据,但在许多情况下,您将需要寻找更专业的数据库,该数据库专为处理用于基础设施监控的时间序列数据而设计。以下是一些可用选项
InfluxDB
InfluxDB是一个开源的时间序列数据库,旨在存储和分析大量时间序列数据。它提供了高效的存储和检索功能、可伸缩性和支持实时分析。使用InfluxDB,您可以轻松地捕获和存储来自各种来源的指标,使其适合监控和分析您的基础设施的性能和健康状况。
Prometheus
Prometheus是一个开源的监控和警报工具包,用于收集和存储指标数据。它专门设计用于监控动态和云原生环境。Prometheus提供灵活的数据模型和强大的查询语言,非常适合存储基础设施监控数据。凭借其内置的警报和可视化功能,Prometheus可以帮助您深入了解您基础设施的性能和可用性。
Graphite
Graphite是一个时间序列数据库和可视化工具,专注于存储和渲染监控数据的图表。它广泛应用于监控和图表各种指标,是存储基础设施监控数据的合适选择。Graphite擅长可视化时间序列数据,允许您创建交互式和可定制的仪表板来监控您基础设施的性能和趋势。其可扩展的架构和广泛的插件生态系统使其成为监控和分析基础设施指标的热门选择。
数据分析工具
一旦您将数据存储起来,就到了有趣的环节,真正用它来创造价值。以下是一些您可以使用的数据分析工具。
Grafana
Grafana是一个功能强大的开源数据可视化和分析工具,允许用户创建、探索和共享交互式仪表板。它通常用于通过连接到数据库、API和监控系统等数据源来分析基础设施监控数据。使用Grafana,用户可以创建可视化、设置警报并深入了解其基础设施指标、日志和跟踪。
Apache Superset
Apache Superset是一个现代的企业级业务智能Web应用程序,使用户能够探索、可视化和分析数据。它提供了一个用户友好的界面来创建交互式仪表板、图表和报告。当涉及到分析基础设施监控数据时,Apache Superset可用于连接到监控系统、数据库或其他数据源,以探索和可视化关键指标、生成报告,并深入了解基础设施的性能和健康状况。
Jaeger
Jaeger是一个开源的端到端分布式跟踪系统,帮助用户监控和排查复杂的微服务架构。它可以通过提供对基础设施不同组件之间交互和依赖关系的详细洞察来用于分析基础设施监控数据。Jaeger捕获并可视化跟踪,表示请求在系统中的路径,使用户能够识别基础设施中的瓶颈、延迟问题和性能优化。
基础设施监控教程
现在让我们看看如何实现应用程序监控系统的示例。本教程将重点介绍称为TIG堆栈的开源工具组合:Telegraf、InfluxDB和Grafana。TIG堆栈允许开发人员轻松构建长期可扩展和可扩展的基础设施监控解决方案。
架构概述
本教程的示例应用程序是一个由AI模型驱动的聊天应用,该模型根据用户输入返回响应。该应用具有混合架构,后端托管在AWS上,而AI模型则在云外专用的GPU上运行。主要挑战是在快速用户增长的情况下确保服务可靠性并扩展基础设施。为此,需要收集大量数据以实时跟踪资源利用率,以便进行监控和未来基于用户增长的容量规划。
基础设施监控设置
现在让我们来看看如何设置和配置此应用的监控。第一步将是配置Telegraf,以从基础设施的每个部分收集我们想要的数据。我们将利用以下Telegraf插件
- SNMP输入 — SNMP插件用于收集网络监控所需的指标。
- CPU、磁盘、Nvidia SMI、磁盘IO、内存、交换、系统输入 — 这些插件用于收集服务器监控指标。
- OpenTelemetry输入 — OpenTelemetry用于收集应用程序性能指标,如日志、指标和跟踪。
- AWS Cloudwatch输入 — AWS CloudWatch插件可以轻松收集我们从AWS需要的所有云基础设施指标。
- InfluxDB V2输出 — InfluxDB输出插件将所有这些收集到的指标发送到指定的InfluxDB实例。
以下是一个Telegraf配置TOML文件的示例,用于此设置
[global_tags]
# dc = "us-east-1" # will tag all metrics with dc=us-east-1
# rack = "1a"
# user = "$USER"
[agent]
interval = "10s"
round_interval = true
metric_batch_size = 1000
metric_buffer_limit = 10000
collection_jitter = "0s"
flush_interval = "10s"
flush_jitter = "0s"
precision = ""
# debug = false
# quiet = false
# logtarget = "file"
# logfile = ""
# logfile_rotation_interval = "0d"
# logfile_rotation_max_size = "0MB"
# logfile_rotation_max_archives = 5
hostname = ""
omit_hostname = false
[[inputs.snmp]]
agents = ["udp://127.0.0.1:161"].
timeout = "15s"
version = 2
community = "SNMP"
retries = 1
[[inputs.snmp.field]]
oid = "SNMPv2-MIB::sysUpTime.0"
name = "uptime"
conversion = "float(2)"
[[inputs.snmp.field]]
oid = "SNMPv2-MIB::sysName.0"
name = "source"
is_tag = true
[[inputs.cpu]]
percpu = true
totalcpu = true
collect_cpu_time = false
report_active = false
[[inputs.disk]]
ignore_fs = ["tmpfs", "devtmpfs", "devfs", "iso9660", "overlay", "aufs", "squashfs"]
[[inputs.diskio]]
[[inputs.mem]]
[[inputs.processes]]
[[inputs.swap]]
[[inputs.system]]
[[nvidia-smi]]
[[inputs.opentelemetry]]
service_address = "0.0.0.0:4317"
timeout = "5s"
metrics_schema = "prometheus-v2"
tls_cert = "/etc/telegraf/cert.pem"
tls_key = "/etc/telegraf/key.pem"
[[inputs.cloudwatch_metric_streams]]
service_address = ":443"
[[inputs.cloudwatch]]
region = "us-east-1"
[[outputs.influxdb_v2]]
urls = ["http://127.0.0.1:8086"]
## Token for authentication.
token = ""
## Organization is the name of the organization you wish to write to.
organization = ""
## Destination bucket to write into.
bucket = ""
## The value of this tag will be used to determine the bucket. If this
## tag is not set the 'bucket' option is used as the default.
# bucket_tag = ""
## If true, the bucket tag will not be added to the metric.
# exclude_bucket_tag = false
## Timeout for HTTP messages.
# timeout = "5s"
## Additional HTTP headers
# http_headers = {"X-Special-Header" = "Special-Value"}
## HTTP Proxy override, if unset values the standard proxy environment
## variables are consulted to determine which proxy, if any, should be used.
# http_proxy = "http://corporate.proxy:3128"
此Telegraf配置通过收集所有指定数据并将其发送到InfluxDB进行存储,处理数据收集和数据存储步骤。让我们来看看您可以如何使用这些数据。
数据可视化
对于许多公司来说,创建用于基础设施监控系统的仪表板和数据可视化是第一步。这些仪表板可以用于从高级报告到工程师实时监控的详细分析。以下是使用此教程收集的数据构建的Grafana仪表板的示例
警报
虽然仪表板很好,但在规模上手动跟踪基础设施发生的一切是不可能的。为了解决这个问题,设置自动化警报是基础设施监控系统的常见功能。以下是Grafana如何设置指标值阈值并创建当这些阈值被违反时自动警报的示例
Grafana与第三方工具如PagerDuty和Slack集成,以便工程师在出现问题时代码收到通知。在某些情况下,此类警报可以用于完全自动化某些操作,例如当硬件利用率达到一定水平时自动扩展云容量。
预测分析和预测
预测分析和预测可能是许多工程团队的理想终点。虽然警报是一种反应性方法,只能在出现问题后才起作用,但预测分析和预测允许您在问题发生之前采取行动。创建准确的预测显然说起来容易做起来难,但做对了就有巨大的好处。
下一步
希望这篇文章帮助您更好地了解基础设施监控以及可用于构建您自己系统的工具。如果您想用一些真实的数据进行尝试,您可以查看以下资源