Node Exporter 可观测性最佳实践

Node Exporter 介绍

Node Exporter 是一个开源的 Prometheus 指标收集器,它提供了大量关于宿主机系统的关键指标,如 CPU、内存、磁盘和网络使用情况。在 Kubernetes 环境中,Node Exporter 对于监控集群节点的健康状况至关重要。本文将介绍如何在 Kubernetes 环境中部署 Node Exporter,并通过 DataKit 采集器将指标通过观测云进行监控和展示。

主要功能:

  • 系统监控:Node Exporter 能够采集主机包括 CPU 使用情况、内存使用量、磁盘 I/O 统计、网络流量等关键系统指标。
  • 低依赖性:Node Exporter 用 Go 语言编写,无需第三方依赖,易于部署和运行。
  • 配置灵活性:提供多种启动参数,允许用户自定义监听端口、数据路径、日志级别等设置。
  • 数据格式兼容:输出的数据格式遵循 Prometheus 标准,确保与 Prometheus 服务器的兼容性。
  • 多种部署方式:支持二进制直接部署和 Docker 容器部署,适应不同的生产环境。

观测云

观测云是一款功能强大的统一可观测平台,它提供了对多云环境、云原生应用、中间件以及各类应用程序的实时监控和分析能力。

部署在 Kubernetes 集群中的 Node Exporter 会暴露一个 metrics 端点,DataKit 通过这个端点拉取指标数据。DataKit 通过 ConfigMap挂载额外的配置文件,或者通过环境变量直接在 Kubernetes 的 DaemonSet 配置中设置。这样,DataKit 就可以根据用户的配置,定期从 Node Exporter 收集指标数据,并将其发送到观测云平台。下面介绍在主机部署 Node Exporter 组件,采集主机指标并通过 DataKit 进行收集、存储,最后通过观测云用于数据的可视化展示。

操作步骤

安装 Node Exporter

在 k8s 环境中创建 DaemonSet 配置文件 node-exporter.yaml

apiVersion: apps/v1
kind: DaemonSet
metadata:name: node-exporternamespace: monitor-salabels:name: node-exporter
spec:selector:matchLabels:name: node-exportertemplate:metadata:labels:name: node-exporterspec:hostPID: true        # 使用主机的PIDhostIPC: true        # 使用主机的IPChostNetwork: true    # 使用主机的网络containers:- name: node-exporterimage: quay.io/prometheus/node-exporter:v0.18.1ports:- containerPort: 9100resources:requests:cpu: 0.15securityContext:privileged: trueargs:- --path.procfs- /host/proc- --path.sysfs- /host/sys- --collector.filesystem.ignored-mount-points- '"^/(sys|proc|dev|host|etc)($|/)"'volumeMounts:- name: devmountPath: /host/dev- name: procmountPath: /host/proc- name: sysmountPath: /host/sys- name: rootfsmountPath: /rootfstolerations:- key: "node-role.kubernetes.io/master"operator: "Exists"effect: "NoSchedule"volumes:- name: prochostPath:path: /proc- name: devhostPath:path: /dev- name: syshostPath:path: /sys- name: rootfshostPath:path: /---apiVersion: v1
kind: Service
metadata:name: node-exporternamespace: monitor-sa
spec:type: ClusterIPports:- name: httpport: 9100protocol: TCPtargetPort: 31672selector:name: node-exporter

然后执行以下命令:

kubectl create ns monitor-sa
kubectl apply -f node-exporter.yaml

执行完毕后,可通过 http://主机ip:31672/metrics 查看当前主机获取到的所有监控数据。

部署 DataKit

登录观测云控制台,点击「集成」 -「DataKit」 - 「Kubernetes」,下载 datakit.yaml ,拷贝第 3 步中的 token 。

编辑 datakit.yaml ,把 token 粘贴到 ENV_DATAWAY 环境变量值中“token=”后面,设置环境变量 ENV_CLUSTER_NAME_K8S 的值并增加环境变量 ENV_NAMESPACE ,这两个环境变量的值一般和集群名称对应,一个工作空间集群名称要唯一。

        - name: ENV_NAMESPACEvalue: xxxx

把 datakit.yaml 上传到可以连接到 Kubernetes 集群的主机上,执行如下命令:

kubectl apply -f datakit.yaml
kubectl get pod -n datakit

在 datakit.yaml 中配置 ConfigMap 资源来收集 Node Exporter 的指标数据。

apiVersion: v1
kind: ConfigMap
metadata:name: datakit-confnamespace: datakit
data:kubernetesprometheus.conf: |-[inputs.kubernetesprometheus]node_local = true  # 是否开启 NodeLocal 模式,将采集分散到各个节点[[inputs.kubernetesprometheus.instances]]role       = "service"     # 必填 可以配置为 service、pod、endpoints、nodenamespaces = ["monitor-sa"]    # 非必填,支持配置多个,以逗号隔开,为空会匹配所有selector   = ""       # 非必填,被采集资源的labels,用来匹配选择需要采集的对象 ,为空会匹配所有scrape     = "true"            # 非必需 采集开关,默认true,scheme     = "http" port       = "__kubernetes_service_port_%s_port " path       = "/metrics"        # 非必填 大部分prometheus采集路径都为/metrics,具体以被采集服务实际指标地址为准params     = ""                # 非必填 http 访问参数,是一个字符串,例如 name=nginx&package=middleware,非必需interval   = "30s"             # 非必填 采集频率,默认30s[inputs.kubernetesprometheus.instances.custom]measurement        = "kube_NodeExporter"       #非必填 观测云指标名,默认使用指标下划线第一个字母job_as_measurement = false             #非必填 是否使用数据中的 job 标签值当做指标集名[inputs.kubernetesprometheus.instances.custom.tags]instance         = "__kubernetes_mate_instance"    #可选 指标taghost             = "__kubernetes_mate_host"        #可选 指标tagpod_name         = "__kubernetes_pod_name"         #可选 指标tagpod_namespace    = "__kubernetes_pod_namespace"    #可选 指标tag,可以继续新增,这里不继承全局tag和选举tag

然后在 datakit.yaml 中的 volumeMounts 下挂载 kubernetesprometheus.conf 。

- mountPath: /usr/local/datakit/conf.d/kubernetesprometheus/kubernetesprometheus.confname: datakit-confsubPath: kubernetesprometheus.confreadOnly: true

最后,执行以下命令重启 datakit 。

kubectl delete -f datakit.yaml
kubectl apply -f datakit.yaml

关键指标

登录观测云控制台,点击「指标」 -「指标管理」,输入“NodeExporter”,就能查询采集到的指标。

监控 Node Exporter 采集的主机指标时,主要需要从以下维度进行,通过综合监控这些维度,可以确保主机的高效运行和稳定性:

  • 系统运行情况:包括 CPU、内存、磁盘以及网络相关信息。
  • 系统资源使用:监控系统资源的使用情况,以优化资源分配并避免瓶颈。
  • 硬件状态:监控硬件健康状态,预防硬件故障
  • 服务健康度:监控系统服务的状态,确保服务的连续可用性。

以下是 Node Exporter 采集主机指标的关键指标目录:

指标描述单位
node_network_receive_bytes_total网络接收的总字节数Bytes
node_network_transmit_bytes_total网络传输的总字节数Bytes
node_network_receive_errs_total网络接收时发生的错误总数count
node_network_transmit_errs_total网络传输时发生的错误总数count
node_network_transmit_drop_total网络传输时丢弃的包总数count
node_memory_Active_bytes活跃内存的使用量,包括主动使用和缓存的内存Bytes
node_memory_Inactive_bytes非活跃内存的使用量,包括非活跃使用的内存Bytes
node_memory_Buffers_bytes用于缓存磁盘数据的内存量Bytes
node_memory_Cached_bytes用于缓存文件系统的内存量Bytes
node_memory_SwapTotal_bytes总的交换空间大小Bytes
node_disk_io_now当前正在进行的I/O操作数量count
node_disk_io_time_seconds_total磁盘I/O操作的总耗时Seconds
node_disk_read_bytes_total从磁盘读取的总字节数Bytes
node_disk_written_bytes_total写入磁盘的总字节数Bytes
node_cpu_seconds_totalCPU使用的总时间Seconds
node_context_switches_total上下文切换的总次数count
node_filesystem_size_bytes文件系统的总大小Bytes
node_filesystem_free_bytes文件系统的可用大小Bytes
node_filesystem_avail_bytes文件系统对于非超级用户可用的大小Bytes

重点指标说明

  • node_network_receive_bytes_total 和 node_network_transmit_bytes_total :这两个指标反映了主机的网络流量情况,对于监控网络性能和排查网络问题至关重要。
  • node_memory_Active_bytes 和 node_memory_Inactive_bytes :这两个指标帮助监控内存的使用情况,区分活跃和非活跃内存,对于内存优化和故障排查很有帮助。
  • node_disk_io_now 和 node_disk_io_time_seconds_total :这两个指标反映了磁盘 I/O 的负载和性能,高 I/O 负载可能影响系统性能。
  • node_cpu_seconds_total :这个指标反映了 CPU 的使用情况,对于监控 CPU 性能和负载非常重要。
  • node_filesystem_size_bytesnode_filesystem_free_bytes 和 node_filesystem_avail_bytes :这些指标反映了文件系统的使用情况,对于容量规划和性能优化至关重要。

通过监控这些关键指标,可以确保主机系统的稳定运行,及时发现并解决潜在的性能问题。

监控视图

登录观测云控制台,点击「场景」 -「新建仪表板」,输入 “Node Exporter ”, 选择 “Node Exporter 监控视图”,点击 “确定” 即可添加内置视图:

监控器(告警)

  • 主机内存使用率过高

  • 主机磁盘使用率过高

  • 主机 CPU 使用率过高

总结

通过监控 Node Exporter 采集的主机关键指标,比如 CPU 使用率、内存和磁盘的 I/O 性能、网络流量和错误率、以及系统服务状态等,我们能够深入理解服务器的运行状况。这些指标覆盖了系统资源的使用情况、硬件健康状态、服务可用性以及网络效率,为我们提供了全面的系统性能视图。通过综合监控这些关键指标,可以及时发现并解决潜在的性能问题和故障,从而确保主机的高效运行和稳定性。这种持续的监控和分析对于维护服务器的最优性能和进行有效的容量规划至关重要。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/19286.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Boot汽车资讯:科技与速度的交响

3系统分析 3.1可行性分析 通过对本汽车资讯网站实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本汽车资讯网站采用SSM框架,JAVA作为开发语言&#…

外卖跑腿小程序源码如何满足多样需求?

外卖跑腿平台已经成了当代年轻人的便捷之选,校园中也不例外,那么外卖、跑腿小程序就需要满足用户多样化的需求,而这背后的源码扮演者最重要的角色。 用户类型的多样性 1.对上班族而言,他们希望外卖小程序能够快速下单、准确配送…

GeeRPC第一天 服务端与消息编码(1)

RPC 1. 系统架构图解释(Graph) 架构层次 RPC框架核心功能:这是系统的最上层,涵盖了框架的主要功能模块,直接与底层服务和用户交互。 服务层:主要负责服务的注册、发现和治理。 服务注册:将服务…

如何在谷歌浏览器中开启离线模式

在数字化时代,互联网已经成为我们生活中不可或缺的一部分。然而,有时候我们可能会遇到没有网络连接的情况,这时谷歌浏览器的离线模式就显得尤为重要。本教程将详细介绍如何在谷歌浏览器中轻松开启离线模式,并附带一些相关教程指南…

【进阶系列】正则表达式 #匹配

正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。re模块使 Python 语言拥有全部的正则表达式功能。 一个正则表达式的匹配工具:regex101: build, test, and debug regex s "C:\\a\\b\\c" pri…

C++使用Alglib数学库进行非线性最小二乘拟合

目录 一、前言 二、主要函数分析 2.1 lsfitcreatef 2.2 lsfitsetcond 2.3 lsfitfit 2.4 lsfitresults 三、基础代码实现 3.1 定义待拟合函数 3.2 数据拟合 四、可视化代码实现 4.1 拟合h文件 4.2 拟合cpp文件 4.2 代码实验 一、前言 本文记录基于Alglib进行非线性…

Spring Boot汽车世界:资讯与技术的交汇

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

算法--“找零方案”问题

def main():d [0.01, 0.02, 0.05, 0.1, 0.2, 0.5, 1.0] # 存储各种硬币的面值d_num [] # 存储每种硬币的数量total_money 0 # 收银员拥有的总金额# 输入每种硬币的数量temp input(请输入每种零钱的数量(以空格分隔):)d_num0 temp.split() # 以空…

【UGUI】Unity 背包系统实现02:道具信息提示与显示

在游戏开发中,背包系统是一个常见的功能模块,用于管理玩家拾取的物品。本文将详细介绍如何在 Unity 中实现一个简单的背包系统,包括道具信息的提示和显示功能。我们将通过代码和场景搭建来逐步实现这一功能。 1. 功能需求清单 在实现背包系…

java基础概念31:常见API-Runtime

一、Runtime类常用方法 Runtime:表示当前虚拟机JVM的运行环境,只能有一个。 【注意】: 获取Runtime对象,只能通过getRuntime静态方法。 好处:不管在哪个类中调用Runtime方法,获取的都是同一个对象。即&…

SpringBoot 之整合gRPC

父工程中引入基本的依赖&#xff1a; <modules><module>api</module><module>client</module><module>service</module></modules><parent><artifactId>spring-boot-starter-parent</artifactId><group…

高性能linux服务器运维实战 运维深入实践

用户权限管理 用户与用户组 用户与角色分类 用户是根据角色定义的。可分三类用户角色&#xff0c;root用户&#xff0c;普通用户&#xff0c;虚拟用户 虚拟用户实际不存在&#xff0c;只是为了方便管理&#xff0c;满足进程或文件的属主需求 用户和组配置文件 /etc/passw…

景联文科技:以全面数据处理服务推动AI创新与产业智能化转型

数据标注公司在人工智能领域扮演着重要角色&#xff0c;通过提供高质量的数据标注服务&#xff0c;帮助企业和组织训练和优化机器学习模型。从需求分析到数据交付&#xff0c;每一个步骤都需要严格把控&#xff0c;确保数据的质量和安全性。 景联文科技是一家专业的数据采集与标…

上市公司企业研发操纵数据集(2008-2023年)

一、数据介绍&#xff1a;参考《财会月刊》苑泽明&#xff08;2020&#xff09;老师的做法&#xff0c;具体模型如下所示&#xff0c;TA 为总资产&#xff1b;RD 为研发支出&#xff1b;MV 为企业市值取对数&#xff1b;TBQ 为企业托宾 Q值&#xff1b;INT 为营业利润&#xff…

Maven的下载安装及配置

一、下载Maven 1、访问Maven官网&#xff1a; 打开浏览器&#xff0c;访问Maven的官方网站&#xff1a;Download Apache Maven – Maven 2、选择Maven版本&#xff1a; 在下载页面上&#xff0c;选择适合您操作系统的Maven版本。通常&#xff0c;Maven提供二进制zip归档和tar…

ISCTF 2024 web

ISCTF 2024 web 小蓝鲨的冒险 源码&#xff1a; <?php error_reporting(0); highlight_file(__FILE__); $a "isctf2024"; $b $_GET["b"]; parse_str($b); echo "小蓝鲨开始闯关&#xff0c;你能帮助他拿到flag吗?<br>"; if ($a…

Loopy为何成为IP联名新顶流,如何赋能品牌营销新高度?

在当今竞争激烈的市场环境中&#xff0c;跨界合作已成为品牌营销的重要策略之一。一个成功的跨界合作案例&#xff0c;便是Loopy IP与多个品牌的深度合作。这只来自韩国动画片《小企鹅Pororo》中的配角&#xff0c;凭借一套打工人表情包在中国社交网络迅速走红&#xff0c;并逐…

Mendix 创客访谈录|Mendix 助力西门子原生数字化工厂精益高效

本期创客 向宇轩 西门子数控&#xff08;南京&#xff09;有限公司 数字化工程师 大家好&#xff0c;我是向宇轩。专业背景是计算机科学与技术&#xff0c;毕业后加入西门子数控&#xff08;南京&#xff09;有限公司&#xff08;SNC&#xff09;担任数字化工程师的职务&#x…

C++ —— string类(上)

目录 string的介绍 string类功能的使用介绍 constructor —— 构造 介绍使用&#xff08;1&#xff09;&#xff08;2&#xff09;&#xff08;4&#xff09; &#xff1a;构造、拷贝构造、带参构造 介绍&#xff08;3&#xff09;&#xff1a;拷贝string类对象的一部分字符…

关于Qt C++中connect的几种写法

目录 1. 传统的槽函数写法 2. 使用函数指针的connect写法&#xff08;5.0&#xff09; 3. Lambda表达式作为槽函数&#xff08;C11&#xff09; 4.使用QOverload选择重载信号的写法 这connect函数就像是编程世界里的“茴”字&#xff0c;千变万化&#xff0c;各有千秋。咱们…