prometheus监控集群
一、监控集群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%)也是重要监控点。
记住,持续关注华为官方文档和更新,以确保监控策略与最新设备兼容。更多华为设备监控细节,如无线设备,将在后续专题中深入探讨。让我们共同提升网络监控的效率和准确性。
二、(4) -- Jaeger, Prometheus, Kiali, GRAFANA使用指引
官方文档:
Jaeger是一个开源的分布式跟踪系统。您可以使用jaeger来监控和排查基于微服务的分布式系统的故障。使用jaeger,您可以执行跟踪组成应用程序的各种微服务执行请求的路径。默认情况下,jaeger是作为 Service Mesh的一部分安装的。
1.1.1部署了bookinfo应用程序后,通过访问http://$gateway_url/productpage并刷新页面几次来生成一些访问痕迹。
1.1.2将jaeger的路径设置到环境变量
1.1.3从浏览器访问jaeger
1.1.4在Jaeger仪表板的左侧窗格中,从Service菜单中选择“productpage”,然后单击窗格底部的“Find Traces”按钮。将显示跟踪列表,如下图所示:
1.1.5单击列表中的某个跟踪以打开该跟踪的详细视图。如果单击顶部(最新)跟踪,你将看到与`/productpage相对应的详细信息。
上一图中的跟踪由几个嵌套的span组成,每个span对应于一个bookinfo服务调用,所有这些都是响应/productpage请求而执行的。总体处理时间为2.62s, details service花费3.56ms, reviews service花费2.6s, ratings service花费5.32ms,对远程服务的每一个调用都由客户端和服务端的span表示。例如,详细信息客户端范围标记为productpage details.myproject.svc.cluster.local:9080。嵌套在它下面的span,标记为details details.myproject.svc.cluster.local:9080,对应于请求的服务器处理。跟踪还显示对istio策略的调用,该策略反映了istio所做的授权检查。
Prometheus是一个开源的服务监控工具。Prometheus以指定的时间间隔从配置的目标收集metrics,评估规则表达式,显示结果,并在观察到某些条件为真时触发警报。Grafana或其他API Consumer被用于可视化展示收集到的数据。
2.1.1验证prometheus服务是否正在集群中运行。
2.1.2通过访问bookinfo应用程序生成网络流量:
2.1.3将Prometheus访问路径写入环境变量
2.1.4打开浏览器访问 http://${ PROMETHEUS_URL}
2.1.5在Expression字段中,输入istio_request_duration_seconds_count,然后单击Execute按钮。将看到类似下图:
2.1.6你可以使用选择器缩小查询范围。例如,istio_request_duration_seconds_count_destination_workload=“reviews-v2”仅显示具有匹配destination_workload标签的计数器。有关使用查询的更多信息,请参阅 Prometheus文档。
2.1.7要列出所有可用的Prometheus Metrics,请运行以下命令
Kiali运行于Isito之上,用于可视化服务网格拓扑,以提供对断路器、请求速率等功能的可见性。Kiali提供了从Application到Service和Workload的不同层次的Service Mesh组件的可见性。Kiali实时提供了namespace的交互式图形化界面。Kiali可以在多个层次(Application、versions、workloads)上显示所选图形节点或边缘的上下文和图表信息。
3.1.1访问Kiali控制台的路径已经存在。运行以下命令获取路由和Kiali Url
3.1.2可以看到这样的结果:
3.1.3在浏览器访问Kiali https://${ KIALI_URL}
登录后,会看到OVERVIEW PAGE,该页面提供了系统中各个namespace的运行状况的快照。
3.3.1单击左侧导航中的“Graph”。Graph page显示一个包含所有微服务的图形,这些微服务由通过它们之间的请求连接。在这个页面上,您可以看到服务是如何交互的。
3.3.2从namespace菜单中,选择BookInfo。现在,图表只显示BookInfo应用程序中的服务。
3.3.3单击左下角的“Legend”。Kiali显示一个包含图形图例的窗口。
3.3.4将鼠标悬停在ProductPage节点上,将高亮显示该节点的传入和传出流量。
3.3.5单击ProductPage节点,页面右侧显示ProductPage的详细信息。
3.4.1单击左侧导航中的“Services”链接。在Services Page上,您可以查看集群中运行的所有Service的列表以及有关这些Service的其他信息,例如运行状况和请求错误率。
3.4.2将鼠标hover在任何服务的运行状况图标上,以查看有关该服务的运行状况信息。当服务处于联机状态并且响应请求时没有错误,则认为它是健康的。
3.4.3单击“Reviews”服务查看其详细信息。请注意,此服务有三个不同的版本。
3.4.4单击其中一个服务的名称以查看有关该服务的其他详细信息。
3.5.1单击左侧导航中的istio config链接。在此页面上,您可以看到当前运行的所有配置,如Circuit Breakers, Destination Rules, Fault Injection, Gateways, Routes, Route Rules, and Virtual Services.
3.5.2单击其中一个配置以查看其他附加信息。
单击左侧导航中的Distributed Tracing链接。在这个页面上,您可以看到Jaeger提供的跟踪数据。
Grafana是一个开源工具,用于创建监控、metrics分析、并提供可视化的dashboard。您可以使用grafana查询metrics、可视化metrics、告警,无论它们存储在graphite、elasticsearch、opentsdb、prometheus或infloxdb。Istio通过Prometheus和Grafana进行监控。
本节演示如何设置和使用Istio仪表板来监视Service Mesh的流量。你需要安装grafana istio插件,并使用基于Web的界面查看Service Mesh流量数据。
4.1.1查询并设置Granfa的route到环境变量
4.1.2打开浏览器访问Grafana, http://${ GRAFANA_URL}
4.1.3在左上角的菜单中,选择istio mesh dashboard以查看istio mesh metrics。
4.1.4通过访问bookinfo应用程序生成一些流量:
dashboard反映通过Service Mesh的流量,类似于下图:
4.1.5要查看Service的详细指标,请单击“Services”列中的服务名称。dashboard类似于下图:
4.1.6要切换到workloads dashboard,请单击左上角菜单上的Isito Workload Dashboard。看到类似下图:
三、使用Kubernetes常犯的一些错误
参考文章:
主要参考了网上的一些文章和自己日常使用的一些小结,以下是一些我们经常看到的错误:
这个绝对是最值得注意以及最先拿出来讲解的。
使用建议:
常见的错误场景及可能导致的结果
关于CPU的有:
关于Memory的有:
关于具体值的设置可以通过prometheus这类监控工具查看集群状态和pod的指标来判断。 GCP的 VerticalPodAutoScaler也可以帮助自动化这个过程。
使用建议:
常见错误场景:
Liveness和Readiness probe的关系容易混淆。他们都在pod的全生命周期执行
如果一个配置了readiness的节点在请求量过大的时候,readiness可能失效,于是该节点暂时不再处理更多的请求;但是当节点负载慢慢降低, readiness恢复时候,节点又能够正常的处理请求。
但是如果该节点配置了相同的liveness探针并且也失效了,那么该节点就会重启。为什么你需要重启一个健康的、并且正在处理很多请求的节点呢?
使用建议:
如果需要对外暴露接口的时候,最好使用ingress;或者使用"type: NodePort"类型的service。
不要把每个Service设置成"type: LoadBalancer"类型,该类型会调用云提供商的接口创建额外的资源,通常包括IP以及一些额外的计算资源;如果所有Service都是用该类型通常会有很多额外的花费
使用建议:
使用auto scaler的时候,使用官方或社区推荐的auto scaler
当在集群里面添加/删除node的时候,你不应该只考虑CPU/Memory的限制这些指标,还要考虑 k8s中一些调度的约束,比如:pod& node affinities,taints& tolerations, resource request, QoS等。Scaling-in也就是移除节点的过程会更加的复杂,例如stateful的pod与pv有绑定,而pv通常又属于某个特定的zone的时候。
在使用auto-scaler时候,auto scaler也需要理解这些配置,否则会导致pod调度失败。目前社区通常使用 cluster-autoscaler来做集群的自动扩容缩容。
使用建议:
明确的声明反亲和性,确保pod会调度到不同的node上:
常见错误场景:
如果一个deployment为了高可用声明了三个pod,但是这三个pod被调度到一个node上了,那么当这个node挂掉的时候,这个deployment所有的服务都不可用了。
使用建议:
对于有HA需求的pod,设置 PodDisruptionBudget。
PodDisruptionBudget控制器来保证在主动销毁应用POD的时候,不会一次性销毁太多的应用pod,从而保证业务不中断或业务SLA不降级。
Cluster Managers或者host provider应当使用能识别 PodDisruptionBudget的 eviction API而不是直接删除 pod,例如 kubectl drain命令。当要drain一个node的时候, kubectl drain会尝试不停的evict对应机器上所有的pods,请求也许会被temporarily的失败,但是会不停的重试直到所有的pod都Terminated,或者达到了配置的timeout时间。
更多的细节介绍。
1、下面的例子使用了minAvailable参数:
2、下面的例子使用了maxUnavailable参数:
当zk-pdb对象副本数是3的时候,上面这两个例子所表达的意思是一样的。
使用建议:
k8s的namespace并不提供很强的隔离性,因此尽量不要使用namespace来做多环境多租户的隔离,例如不要把dev,qa,staging,sandbox这些环境和prod部署到一个集群里面。
尽管有一些资源公平性的配置,如: resource requests/limits, quotas, priorityClasses;以及一些隔离性的配置,如: affinities,tolerations, taints;但是为了达到隔离,通常需要极为复杂的配置。
因此大部分时候,使用多个集群会更加的易于维护。
使用建议:
不要在deployment中的镜像使用:latest标签,而是使用固定的版本。
否则可能会导致部署时候,k8s node使用本地的旧版本的image,导致线上环境出现版本问题。
参考资料:DeepFlow