提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
下面就以 Ubuntu 系统为例子,部署 node-exporter 并进行监控。
一、部署 node-exporter
若要二进制本地部署运行,请参考 Prometheus node-exporter 文档
这里已 docker 部署为例子,在监控设备上部署 node-exporter ,命令如下:
# 拉取
docker pull prom/node-exporter:v1.8.2
# 运行
docker run -d \
-p 9100:9100 \
prom/node-exporter:v1.8.2
二、测试
在浏览器访问 http://<node-exporter_IP>:9100/metrics
若有一大串信息返回,则成功部署 node-exporter
三、加入监控
修改普罗米修斯的 /etc/prometheus/prometheus.rules 文件,追加如下内容并重启服务。
scrape_configs:
- job_name: 'node-exporter'
static_configs:
- targets: ['<node-exporter_IP>:9100']
在浏览器访问 Prometheus ,点击 “Status” → “Targets” 中若能发现 “node-exporter” 栏,且设备数量对得上,State 为 UP,则代表已接入普罗米修斯监控了。
四、监控进阶
将 K8s 所有 node节点(含新加 k8s 的节点)都自动部署 node-exporter 并进行 Prometheus 监控。
1、Daemonset
写个 Kubernetes 的 daemonset.yaml,并且应用,内容如下
apiVersion: apps/v1
kind: DaemonSet
metadata:
labels:
app.kubernetes.io/component: exporter
app.kubernetes.io/name: node-exporter
name: node-exporter
namespace: monitoring
spec:
selector:
matchLabels:
app.kubernetes.io/component: exporter
app.kubernetes.io/name: node-exporter
template:
metadata:
labels:
app.kubernetes.io/component: exporter
app.kubernetes.io/name: node-exporter
spec:
tolerations:
- key: node-role.kubernetes.io/master
operator: Exists
effect: NoSchedule
- key: "dedicated"
operator: "Equal"
value: "ceph"
effect: "NoSchedule"
- key: "group"
operator: "Equal"
value: "gpu"
effect: "NoSchedule"
hostPID: true
hostIPC: true
hostNetwork: true
containers:
- args:
- --path.sysfs=/host/sys
- --path.rootfs=/host/root
- --no-collector.wifi
- --no-collector.hwmon
- --collector.filesystem.ignored-mount-points=^/(dev|proc|sys|var/lib/docker/.+|var/lib/kubelet/pods/.+)($|/)
- --collector.netclass.ignored-devices=^(veth.*)$
name: node-exporter
image: prom/node-exporter:v1.8.2
ports:
- containerPort: 9100
protocol: TCP
resources:
limits:
cpu: 250m
memory: 180Mi
requests:
cpu: 102m
memory: 180Mi
volumeMounts:
- mountPath: /host/sys
mountPropagation: HostToContainer
name: sys
readOnly: true
- mountPath: /host/root
mountPropagation: HostToContainer
name: root
readOnly: true
volumes:
- hostPath:
path: /sys
name: sys
- hostPath:
path: /
name: root
这个 DaemonSet 是用来在 Kubernetes 集群中每个节点上部署 node-exporter 的,它负责收集每个节点的系统指标并通过 Prometheus 进行监控。它使用 hostNetwork 和挂载主机的文件系统,以便访问节点的相关信息,容器暴露 9100 端口用于指标的导出。
spec.tolerations 部分:
tolerations 的主要作用是允许 node-exporter 在有特定污点(taints)的节点上部署,而这些污点通常会阻止普通的 Pods 被调度到这些节点。
node-role.kubernetes.io/master:
这是用于主节点的污点,通常普通工作负载不会调度到 master 节点上。这条 toleration 允许 node-exporter 在 master 节点上调度和运行,尽管这些节点带有 NoSchedule 污点。
dedicated=ceph:
这条 toleration 允许 node-exporter 被调度到标记为 ceph 的专用节点上,通常这些节点可能是用于 Ceph 分布式存储系统的节点,而其他 Pods 不能调度到这些节点上。
group=gpu:
这条 toleration 是为 GPU 节点准备的,可能是节点配备了 GPU 资源。带有 gpu 污点的节点通常用于机器学习或其他需要 GPU 加速的应用程序。这条规则允许 node-exporter 被调度到这些节点上,收集 GPU 相关的指标。
PS:配置了 K8s 污点默认是不会再在该节点上部署 node-exporter 的,配置 spec.tolerations 是为了能让其自动部署。不需要的可以删掉
2、Prometheus.rules
普罗米修斯的 /etc/prometheus/prometheus.rules 文件如下:
- job_name: 'node-exporter'
kubernetes_sd_configs:
- role: endpoints
relabel_configs:
- source_labels: [__meta_kubernetes_endpoints_name]
regex: 'node-exporter'
action: keep
- kubernetes_sd_configs
kubernetes_sd_configs 是 Prometheus 内置的 Kubernetes 服务发现配置。通过此配置,Prometheus 可以自动从 Kubernetes 集群中获取被监控的目标。
role: endpoints 表示 Prometheus 将会从 Kubernetes 中找到被暴露出来的 Endpoints。Endpoints 是 Kubernetes 中服务的 IP 和端口,表示哪些 Pods 通过某个服务暴露出来。
这种配置不需要手动指定目标 IP 地址,因为 Prometheus 会自动从 Kubernetes API 中发现所有符合条件的 Pods/服务的地址。- relabel_configs:
elabel_configs 用来对发现的目标进行过滤和转换。在这里,它的作用是过滤出名字为 node-exporter 的 Endpoints。
source_labels: [__meta_kubernetes_endpoints_name] 通过 Kubernetes 服务发现的 __meta_kubernetes_endpoints_name 标签提取 Endpoints 的名称。
regex: ‘node-exporter’ 用于匹配 Endpoints 名字为 node-exporter 的那些服务,只有匹配成功的目标会被 Prometheus 继续监控。
action: keep 表示保留这些匹配到的目标,丢弃其他不匹配的目标。
3、测试
和上面一样,若能在浏览器访问 Prometheus ,点击 “Status” → “Targets” 中若能发现 “node-exporter” 栏,且设备数量对得上,State 为 UP,则代表已接入普罗米修斯监控了。
其他
报警规则、看板制作、消息推送,由后面的更新的Prometheus+Grafana的部署篇章中会详细说明。
目前,已更新的所有普罗米修斯及其相关篇章:
Prometheus(普罗米修斯)监控系统 - 1、基本原理
Prometheus(普罗米修斯)监控系统 - 2、网络等硬件设备监控(snmp-exporter)
Prometheus(普罗米修斯)监控系统 - 3、操作系统信息监控(node-exporter)
标签:node,exporter,name,kubernetes,Prometheus,监控,节点 From: https://blog.csdn.net/weixin_41004518/article/details/142104643