prometheus监控流程 prometheus监控方案
一、监控监控Prometheus
Prometheus是流程一个开源系统监控和报警工具包,具有活跃的监控监控生态系统。是流程一个多维数据模型,其中的监控监控时间序列数据由指标名称和键/值对识别。它不依赖分布式存储,流程单个服务器节点是监控监控自治的。通过一个中间网关支持推送时间序列,流程可以通过服务发现或静态配置来发现目标,监控监控支持多种模式的流程图表和仪表盘制作。
Prometheus具体架构图如下:
Prometheus直接或通过中介推送网关从检测的监控监控作业中抓取指标,用于短期作业。流程它将所有抓取的监控监控样本存储在本地,并对这些数据运行规则,流程以从现有数据聚合和记录新的监控监控时间序列或生成警报。 Grafana或其他 API使用者可用于可视化收集的数据。
--config.file="prometheus.yml" Prometheus配置文件路径。
--web.listen-address="0.0.0.0:9090"用于监听UI、API和遥测的地址。
--web.config.file="" [EXPERIMENTAL]可以启用TLS或认证的配置文件的路径。
--web.read-timeout=5m超时读取请求和关闭空闲连接之前的最大持续时间。
--web.max-connections=512最大同时连接数。
--web.external-url=<URL>外部可访问Prometheus所在的URL(例如,如果Prometheus通过反向代理提供服务)。用于生成返回到Prometheus本身的相对和绝对链接。如果URL有路径部分,它将用于为Prometheus服务的所有HTTP端点添加前缀。如果省略,将自动派生相关的URL组件。
--web.route-prefix=<path> Web端点的内部路线的前缀。默认为-web.external-url的路径。
--web.user-assets=<path>静态资源目录的路径,位于/user。
--web.enable-lifecycle通过HTTP请求启用关闭和重新加载。
--web.enable-admin-api启用管理控制行动的API端点。
--web.console.templates="consoles"控制台模板目录的路径,位于/consoles。
--web.console.libraries="console_libraries"控制台库目录的路径。
--storage.tsdb.path="data/"指标存储的基本路径。仅用于server模式。
--storage.tsdb.retention.time=样本在储存中保留多长时间。设置此标志后,它会覆盖“storage.tsdb.retention”。如果此标志、“storage.tsdb.retention”或“storage.tsdb.retention.size”均未设置,则保留时间默认为15d。支持的单位:y、w、d、h、m、s、ms。仅用于server模式。
--storage.tsdb.retention.size=块存储的最大字节数。需要一个单位,支持的单位:B、KB、MB、GB、TB、PB、EB。例如:“512MB”。仅用于server模式。
--storage.tsdb.no-lockfile不在数据目录中创建锁文件。仅用于server模式。
--storage.tsdb.allow-overlapping-blocks允许重叠块,从而启用垂直压缩和垂直查询合并。仅用于服务器模式。
--storage.agent.path="data-agent/"指标存储的基本路径。仅用于agent模式。
--storage.agent.wal-compression压缩代理WAL。仅用于agent模式。
--storage.agent.retention.min-time=当WAL被截断时,样本在被强行删除之前的最小年龄,仅用于agent模式。
--storage.agent.retention.max-time=当WAL被截断时,样本在被强行删除之前的最大年龄,仅用于agent模式。
--storage.agent.no-lockfile不在数据目录中创建锁文件。仅用于agent模式。
--storage.remote.flush-deadline=<duration>在关闭或重新加载配置时等待刷新样本的时间。
--storage.remote.read-sample-limit=5e7在单个查询中通过远程读取接口返回的最大样本总数。 0表示没有限制。对于流式响应类型,将忽略此限制。仅用于server模式。
--storage.remote.read-concurrent-limit=10并发远程读取调用的最大数量。 0表示没有限制。仅用于server模式。
--rules.alert.for-outage-tolerance=1h为恢复“for”警报状态而容忍Prometheus中断的最长时间。仅用于server模式。
--rules.alert.for-grace-period=10m警报和恢复“for”状态之间的最短持续时间。这仅适用于配置的“for”时间大于宽限期的警报。仅用于server模式。
--rules.alert.resend-delay=1m在向 Alertmanager重新发送警报之前等待的最短时间。仅用于server模式。
--alertmanager.notification-queue-capacity=10000等待Alertmanager通知的队列容量。仅用于server模式。
--query.lookback-delta=5m在表达式评估和联合期间,检索指标的最长回溯持续时间。仅用于server模式。
--query.timeout=2m查询在中止之前可能需要的最长时间。仅用于server模式。
--query.max-concurrency=20并发执行的最大查询数。仅用于server模式。
--query.max-samples=50000000单个查询可以加载到内存中的最大样本数。请注意,如果查询尝试将比这更多的样本加载到内存中,查询将失败,因此这也限制了查询可以返回的样本数量。仅用于server模式。
--enable-feature=逗号分隔的要启用的功能名称。有效选项:agent、exemplar-storage、expand-external-labels、memory-snapshot-on-shutdown、promql-at-modifier、promql-negative-offset、remote-write-receiver。extra-scrape-metrics、new-service-discovery-manager。
--log.level=info只记录给定严重程度或以上的信息。其中之一:[debug, info, warn, error]。
--log.format=logfmt日志信息的输出格式。其中之一:[logfmt, json]。
通用占位符定义如下:
全局配置区域:
scrape_config部分指定了一组描述如何抓取它们的目标和参数,目标可以通过static_configs参数静态配置或使用支持的服务发现机制之一动态发现。
Prometheus自身支持basic验证和TLS(将来可能会改变),也可以通过nginx开启basic验证。
Exporter将监控数据采集的端点通过HTTP服务的形式暴露给Prometheus Server,Prometheus Server通过访问该Exporter提供的Endpoint端点,即可获取到需要采集的监控数据。
一般来说可以将Exporter分为2类:
Prometheus UI提供了快速验证PromQL以及临时可视化支持的能力,而在大多数场景下引入监控系统通常还需要构建可以长期使用的监控数据可视化面板(Dashboard)。这时用户可以考虑使用第三方的可视化工具如Grafana,Grafana是一个开源的可视化平台,并且提供了对Prometheus的完整支持。
在Prometheus Server中支持基于PromQL创建告警规则,如果满足PromQL定义的规则,则会产生一条告警,而告警的后续处理流程则由AlertManager进行管理。在AlertManager中我们可以与邮件,Slack等等内置的通知方式进行集成,也可以通过Webhook自定义告警处理方式。AlertManager即Prometheus体系中的告警处理中心。
Alertmanager处理客户端应用程序(例如 Prometheus服务器)发送的警报。它负责对它们进行重复数据删除、分组和路由到正确的接收器集成,例如Email、PagerDuty或 OpsGenie。它还负责警报的静音和抑制。
报警全家桶
二、Prometheus监控华为交换机
华为交换机的监控管理是网络运维的重要环节,Prometheus提供了强大的监控能力。让我们深入了解如何通过SNMP协议,结合MIB文件,对华为交换机进行精准监控。首先,确保你拥有与设备固件匹配的MIB文件,可以从华为官网下载,高版本MIB兼容低版本,但需确保版本对应性。
核心监控指标包括:电源状态(1.3.6.1.4.1.2011.6.157.1.6)、当前功率(hwCurrentPower)和平均功率(hwAveragePower),这些是设备运行的基础信息。对于华为交换机的CPU和内存,你可以通过OIDs hwEntityCpuUsage和 hwEntityMemUsage(1.3.6.1.4.1.2011.5.25.31.1.1.1.1.5, 1.3.6.1.4.1.2011.5.25.31.1.1.1.1.7)实时监控性能。
内存占用情况可以通过 hwStorageSpace、hwStorageSpaceFree和 hwStorageName(1.3.6.1.4.1.2011.6.9.1.4.2.1.3-5)来跟踪。对于CPU使用率,关注 hwCpuDevDuty、hwCpuDuty1min和 hwCpuDuty5min。存储设备的详细信息,如名称、空间和空闲状态,可以通过 hwStorageName(1.3.6.1.4.1.2011.6.9.1.4.2.1.4)来查看。
针对华为交换机的特定模块,如CloudEngine S12700E-4,关注模块 huawei_core,这里还包含了接口信息,如 ifIndex、ifDescr、ifName等,以及丢包和错误统计(ifOutDiscards, ifInErrors)。此外,还需要关注CRC错误统计(hwIfMonitorCrcErrorStatistics)、输入和输出带宽(hwIfMonitorInputRate, hwIfMonitorOutputRate),以及光模块状态(entPhysicalIndex、功率等)和预警阈值。
在华为汇聚和接入交换机中,监控指标细化到更具体的层面上,比如接口流量、错误统计、带宽占用率(1.3.6.1.4.1.2011.5.25.41.1.7.1.1.8和 1.3.6.1.4.1.2011.5.25.41.1.7.1.1.10),光模块信息(entPhysicalIndex,功率),以及堆叠状态和CSS集群信息。
配置SNMP Exporter时,确保使用适当的MIB文件,针对不同网络架构和设备类型定制配置文件。例如,为huawei_common模块定义通用指标,对huawei_core、huawei_agg和huawei_acc等子模块设置个性化指标。在生成配置文件时,要考虑到接口和光模块信息的差异,灵活运用lookups和overrides来适应多设备任务。
在Prometheus中,使用file_sd_configs服务发现来管理华为交换机的IP列表,并创建相应的配置文件以支持多设备监控。通过API实时加载配置,执行健康检查,确保数据的实时性和准确性。Grafana面板提供了可视化界面,帮助你快速理解交换机的运行状态。
告警规则设置尤为重要,例如,当交换机风扇速度异常(expr: hwEntityFanSpeed== 0)或CPU使用率过高(expr: hwEntityCpuUsage>60),应立即触发严重告警。此外,内存使用率超过85%(expr: hwEntityMemUsage>85%)也是重要监控点。
记住,持续关注华为官方文档和更新,以确保监控策略与最新设备兼容。更多华为设备监控细节,如无线设备,将在后续专题中深入探讨。让我们共同提升网络监控的效率和准确性。
三、如何做好运维监控
统一监控平台,说到底本质上也是一个监控系统,监控的基本能力是必不可少的,回归到监控的本质,先梳理下整个监控体系:
①监控系统的本质是通过发现故障、解决故障、预防故障来为了保障业务的稳定。
②监控体系一般来说包括数据采集、数据检测、告警管理、故障管理、视图管理和监控管理6大模块。而数据采集、数据检测和告警处理是监控的最小闭环,但如果想要真正把监控系统做好,那故障管理闭环、视图管理、监控管理的模块也缺一不可。
一、数据采集
1、采集方式
数据采集方式一般分为Agent模式和非Agent模式;
Agent模式包括插件采集、脚本采集、日志采集、进程采集、APM探针等
非Agent模式包括通用协议采集、Web拨测、API接口等
2、数据类型
监控的数据类型有指标、日志、跟踪数据三种类型。
指标数据是数值型的监控项,主要是通过维度来做标识。
日志数据是字符型的数据,主要是从中找一些关键字信息来做监控。
跟踪型数据反馈的是跟踪链路一个数据流转的过程,观察过程中的耗时性能是否正常。
3、采集频率
采集频率分秒级、分钟级、随机三种类型。常用的采集频率为分钟级。
4、采集传输
采集传输可按传输发起分类,也可按传输链路分类。
按传输发起分类有主动采集Pull(拉)、被动接收Push(推)
按传输链路分类有直连模式、Proxy传输。
其中Proxy传输不仅能解决监控数据跨网传输的问题,还可以缓解监控节点数量过多导致出现的数据传输的瓶颈,用Proxy实现数据分流。
5、数据存储
对于监控系统来说,主要有以下三种存储供选择
①关系型数据库
例如MySQL、MSSQL、DB2;典型监控系统代表:Zabbix、SCOM、Tivoli;
由于数据库本身的限制,很难搞定海量监控的场景,有性能瓶颈,只在传统监控系统常用
②时序数据库
为监控这种场景设计的数据库,擅长于指标数据存储和计算;例如InfluxDB、OpenTSDB(基于Hbase)、Prometheus等;典型监控系统代表:TICK监控框架、 Open-falcon、Prometheus
③全文检索数据库
这类型数据库主要用于日志型存储,对数据检索非常友好,例如Elasticsearch。
二、数据检测
1.数据加工
①数据清洗
数据清洗比如日志数据的清洗,因为日志数据是非结构化的数据,信息密度较低,因此需要从中提取有用的数据。
②数据计算
很多原始性能数据不能直接用来判断数据是否产生异常。比如采集的数据是磁盘总量和磁盘使用量,如果要检测磁盘使用率,就需要对现有指标进行一个简单的四则运算,才能得到磁盘使用率。
③数据丰富
数据丰富就是给数据打上一些tags标签,比如打上主机、机房的标签,方便进行聚合计算。
④指标派生
指标派生指的是通过已有的指标,通过计算得出新的指标。
2.检测算法
有固定规则和机器学习算法。固定算法是较为常见的算法,静态阈值、同比环比、自定义规则,而机器学习主要有动态基线、毛刺检测、指标预测、多指标关联检测等算法。
无论是固定规则还是机器学习,都会有相应的判断规则,即常见的<>>=和and/or的组合判断等。
三、告警管理
1.告警丰富
告警丰富是为了后续告警事件分析做准备,需要辅助信息去判断该怎么处理、分析和通知。
告警丰富一般是通过规则,联动CMDB、知识库、作业历史记录等数据源,实现告警字段、关联信息的丰富;通过人工打Tags也是一种丰富方式,不过实际场景下由于人工成本高导致难以落地。
2.告警收敛
告警收敛有三种思路:抑制、屏蔽和聚合
①抑制
即抑制同样的问题,避免重复告警。常见的抑制方案有防抖抑制、依赖抑制、时间抑制、组合条件抑制、高可用抑制等。
②屏蔽
屏蔽可预知的情况,比如变更维护期、固定的周期任务这些已经知道会发生的事件,心里已经有预期。
③聚合
聚合是把类似或相同的告警进行合并,因为可能反馈的是同一个现象。比如业务访问量升高,那承载业务的主机的CPU、内存、磁盘IO、网络IO等各项性能都会飙升,这样把这些性能指标都聚合到一块,更加便于告警的分析处理。
3.告警通知
①通知到人
通过一些常规的通知渠道,能够触达到人。
这样在没有人盯屏的时候,可以通过微信、短信、邮件触发到工作人员。
②通知到系统
一般通过API推送给第三方系统,便于进行后续的事件处理
另外还需要支持自定义渠道扩展(比如企业里有自己的IM系统,可以自行接入)
四、故障管理
告警事件必须要处理有闭环,否则监控是没有意义的。
最常见还是人工处理:值班、工单、故障升级等。
经验积累可以把人工处理的故障积累到知识库里面,用于后续故障处理的参考。
自动处理,通过提取一些特定告警的固化的处理流程,实现特定场景的故障自愈;比如磁盘空间告警时把一些无用日志清掉。
智能分析主要是通过故障的关联分析、定位、预测等AI算法,进一步提升故障定位和处理的效率;
1.视图管理
视图管理也属于增值性功能,主要是满足人的心理述求,做到心中有底,面向的角色很多(领导、管理员、值班员等)。
大屏:面向领导,提供全局概览
拓扑:面向运维人员,提供告警关联关系和影响面视图
仪表盘:面向运维人员,提供自定义的关注指标的视图
报表:面向运维人员、领导,提供一些统计汇总报表信息,例如周报、日报等
检索:面向运维人员,用于故障分析场景下的各类数据检索
2.监控管理
监控管理是企业监控落地过程中的最大挑战。前5个模块都是监控系统对外提供的服务功能,而监控管理才是面向监控系统自身的管理和控制,关注真正落地的过程的功能呈现。主要有以下几个方面:
配置:简单、批量、自动
覆盖率:监控水平的衡量指标
指标库:监控指标的规范
移动端:随时随地处理问题
权限:使用控制
审计:管理合规
API:运维数据最大的来源,用于数据消费
自监控:自身稳定的保障
为了实现上述监控六大基础能力模块,我们可以按如下架构设计我们的统一监控平台。
主要分三层,接入层,能力层,功能层。
接入层主要考虑各种数据的接入,除了本身Agent和插件的采集接入,还需要支持第三方监控源的数据接入,才能算一个完整的统一监控平台。
能力层主要考虑监控的基础通用能力,包含数据采集模块、数据存储模块、数据加工模块、数据检测模块、AI分析模块。
功能层需要贴近用户使用场景,主要有管理、展示两类功能,在建设的过程中可以不断丰富功能场景。
另外,考虑到数据的关联关系,为未来的数据分析打下基础,监控和CMDB也需要紧密联动,所有的监控对象都应该用CMDB进行管理,另外,还可以配置驱动监控为指导理念,实现监控的自动上下线,告警通知自动识别负责人等场景,简化监控的维护管理。
为了统一监控平台能够在企业更好的落地,我们需要配备对应的管理体系,其中最重要的是指标管理体系。
指标管理体系的核心理念:
监控的指标体系是以CMDB为骨架,以监控指标为经脉,将整个统一监控平台的数据有机整合起来。
贯穿指标的生命周期管理,辅以指标的管理规范,保障监控平台长久有序的运行。
从企业业务应用的视角出发,一般将企业监控的对象分为6层,也可以根据企业自己的情况进行调整:
基础设施层
硬件设备层
操作系统层
组件服务层
应用性能层
业务运营层
参考资料:全景性能监控