InfluxDB 介绍
InfluxDB 是一个高性能的时间序列数据库,专为处理大规模时间序列数据而设计。它能够高效地存储、检索和分析大量的时间序列数据,广泛应用于监控、物联网、实时分析和数据科学等领域。由于其优化的数据存储结构,InfluxDB 可以快速处理高频率的数据写入和查询,适合用于实时监控系统、传感器数据收集、金融市场分析等场景。并提供了一种灵活的查询语言(InfluxQL),使用户能够轻松地对时间序列数据执行复杂的分析。此外,它还支持丰富的可视化工具与外部集成,方便用户将数据以图表形式展示。
通过其强大的功能和灵活性,InfluxDB 已成为企业和开发者在构建实时数据驱动应用时的重要工具。为确保时序数据库能够健康稳定的运行,我们有必要对其自观测,或者说 InfluxDB 的可观测方案进行探索和实践。
使用可观测工具对 InfluxDB 进行监控,可以优化监控资源消耗,减少数据冗余,简化配置管理。并通过多维度数据关联分析,提升运维团队对监控对象的分析能力。
在确保 InfluxDB 性能和稳定性方面,监控关键指标至关重要。这些指标不仅可以帮助您及时发现和解决问题,还能优化数据库的整体运行效率。
观测云
观测云是一款专为 IT 工程师打造的全链路可观测产品,它集成了基础设施监控、应用程序性能监控和日志管理,为整个技术栈提供实时可观察性。这款产品能够帮助工程师全面了解端到端的用户体验追踪,了解应用内函数的每一次调用,以及全面监控云时代的基础设施。此外,观测云还具备快速发现系统安全风险的能力,为数字化时代提供安全保障。
部署 DataKit
DataKit 是一个开源的、跨平台的数据收集和监控工具,由观测云开发并维护。它旨在帮助用户收集、处理和分析各种数据源,如日志、指标和事件,以便进行有效的监控和故障排查。DataKit 支持多种数据输入和输出格式,可以轻松集成到现有的监控系统中。
登录观测云控制台,在「集成」 - 「DataKit」选择对应安装方式,当前采用 Linux 主机部署 DataKit。
开启采集器
InfluxDB 1.x 和 2.x 之间的主要区别在于架构、查询语言、API、用户界面和数据管理。1.x 使用单一数据库引擎,采用 InfluxQL 查询语言,提供基本的 HTTP API,用户界面相对简单。2.x 则集成了存储、处理和可视化功能,采用 Flux 查询语言,提供更丰富的 API 和改进的用户界面,支持更灵活的数据保留策略,安装和部署也更简化。因此,对于新项目中通常推荐使用 InfluxDB 2.x。
对于两个版本的自观测指标采集,也随着上述功能的变化而有所差异。InfluxDB 2.x 增强了内置监控指标,支持复杂查询和更全面的指标收集,用户可以直接获取和管理监控数据。它还提供了更强大的可视化工具,允许用户创建实时仪表板,并改进了告警和通知机制,使得用户能够更有效地监控和管理数据库性能。
本实践是 InfluxDB 2.x 版本为基础进行数据采集分析。 InfluxDB 2.x 提供了 Prometheus 格式的指标输出接口,可以直接使用 DataKit prom 采集器进行采集。
进入 DataKit 安装目录 /usr/local/datakit/conf.d
,复制 prom
目录下的配置文件并命名为 influxdb2.conf
。 示例如下:
cp prom.conf.sample influxdb2.conf
调整内容如下:
[[inputs.prom]]
## Exporter HTTP URL.
url = "http://127.0.0.1:8086/metrics"
metric_types = ["counter", "gauge", "histogram"]
interval = "10s"
## TLS configuration.
tls_open = false
# tls_ca = "/tmp/ca.crt"
# tls_cert = "/tmp/peer.crt"
# tls_key = "/tmp/peer.key"
[[inputs.prom.measurements]]
prefix = "boltdb_"
name = "influxdb_v2_boltdb"
[[inputs.prom.measurements]]
prefix = "go_"
name = "influxdb_v2_go"
# Histogram type.
[[inputs.prom.measurements]]
prefix = "http_api_request_"
name = "influxdb_v2_http_request"
[[inputs.prom.measurements]]
prefix = "influxdb_"
name = "influxdb_v2"
[[inputs.prom.measurements]]
prefix = "service_"
name = "influxdb_v2_service"
[[inputs.prom.measurements]]
prefix = "task_"
name = "influxdb_v2_task"
## Customize tags.
[inputs.prom.tags]
# some_tag = "some_value"
# more_tag = "some_other_value"
关键指标
influxdb_runtime
运行时测量统计信息包括 Go 内存分配器的 MemStats 记录的一个子集。运行时统计信息对于确定不良的内存分配策略及相关性能问题非常有用。
Go 运行时包含与 Go 的运行时系统交互的操作,包括用于控制 goroutine 的函数。它还包括 Go 反射包使用的低级类型信息。
指标详解
指标 | 含义 | 适用场景 |
---|---|---|
Alloc | 当前分配的堆对象字节数。 | 监控应用程序当前的内存使用情况,帮助识别内存消耗是否在正常范围内。 |
Frees | 已释放(存活)堆对象的累计数量。 | 了解内存管理情况,监控对象释放的效率,帮助识别内存泄漏或不必要的内存使用。 |
HeapAlloc | 所有堆对象的总大小(以字节为单位)。 | 监控堆内存的实际使用情况,帮助评估内存分配策略的有效性。 |
HeapIdle | 空闲堆对象的字节数。 | 分析未使用的内存资源,帮助优化内存使用,减少浪费。 |
HeapInUse | 正在使用的内存字节数。 | 监控活跃的内存使用量,帮助判断应用程序的内存需求。 |
HeapObjects | 已分配的堆对象数量。 | 了解应用程序的内存分配情况,帮助识别高内存使用的来源。 |
HeapReleased | 返回给操作系统的物理内存字节数。 | 监控内存释放的有效性,帮助评估内存管理的效率。 |
HeapSys | 从操作系统获取的堆内存字节数。衡量为堆保留的虚拟地址空间的大小。 | 了解应用程序对操作系统内存的使用情况,帮助优化内存分配。 |
Lookups | 运行时执行的指针查找次数。 | 主要用于调试运行时内部,帮助开发人员分析性能问题。 |
Mallocs | 已分配的堆对象的总数量。存活对象的总数量与 Frees 相关。 | 监控内存分配的总量,帮助分析内存使用趋势。 |
NumGC | 已完成的垃圾回收(GC)周期数量。 | 监控垃圾回收的频率,帮助识别内存管理的效率。 |
Influxdb_httpd
用于描述 InfluxDB HTTP server 运行状态的相关指标。
指标详解
指标 | 含义 | 适用场景 |
---|---|---|
authFail | 由于需要认证但未提供或认证错误而中止的 HTTP 请求数量。 | 监控认证失败的请求,帮助识别用户认证问题或配置错误。 |
clientError | 由于客户端错误(HTTP 状态码 4XX)导致的 HTTP 响应数量。 | 分析用户请求的常见错误(如 404 未找到),帮助改进 API 设计或用户体验。 |
fluxQueryReq | 服务的 Flux 查询请求数量。 | 监控 Flux 查询的使用情况,帮助优化查询性能和资源分配。 |
pingReq | 服务 /ping HTTP 端点的次数。 | 用于健康检查和监控服务可用性,确保 InfluxDB 实例正常运行。 |
pointsWrittenDropped | 存储引擎丢弃的点的数量。 | 监控数据丢失情况,识别可能的存储问题或负载过高。 |
pointsWrittenFail | 通过 HTTP /write 端点接受的点,但无法持久化的数量。 | 监控写入失败的情况,可能需要调查后端存储问题。 |
queryReq | 查询请求的数量。 | 分析查询的总量,帮助了解系统的查询负载。 |
场景视图
登录观测云控制台,点击「场景」 -「新建仪表板」,输入 “InfluxDB”, 选择 “InfluxDB_V2监控视图”,点击 “确定” 即可添加视图。
监控器
进程数量异常
简要描述:通过检测指定维度下的 Influxd 进程数量,跟踪当前 Influx 服务状态,及时发现进程异常。
访问请求任务失败次数
简要描述:通过对一段时间内的任务失败数量的突变检测,及时发现实例访问异常告警,并结合关联仪表板数据对故障进行分析。
GC回收异常告警
简要描述:如果 GC 指标突然升高,通常表明 InfluxDB 的内存使用出现问题,可能是由于工作负载增加、配置不当或数据模型设计不合理。需要结合其他监控指标和系统状态进行排查,并通过优化内存使用和调整配置来缓解问题。
总结
使用观测云对 InfluxDB 进行监控,可以优化监控资源消耗,减少数据冗余,简化配置管理。并通过多维度数据关联分析,提升运维团队对监控对象的分析能力。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。