Prometheus k8s下面的Node Exporter详解
Node Exporter DaemonSetDaemonSet使用toleration(容忍)确保pod在所有节点上运行,可能也包含主节点。它非常适合监控或日志代理等项目。让我们看一下DaemonSet的元素。可以在GitHub上找到Node Exporter的完整配置。Node Exporter DaemonSet toleration:首先,可以看到我们给DaemonSet指定了一个名称no
部署 Node Exporter
[root@master prometheus]# cat node-export.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-exporter
namespace: monitor
labels:
name: node-exporter
spec:
selector:
matchLabels:
name: node-exporter
template:
metadata:
labels:
name: node-exporter
spec:
tolerations:
- effect: NoSchedule
operator: Exists
hostPID: true
hostIPC: true
hostNetwork: true
containers:
- name: node-exporter
image: prom/node-exporter:v0.16.0
ports:
- containerPort: 9100
securityContext:
privileged: true
args:
- --path.procfs
- /host/proc
- --path.sysfs
- /host/sys
- --collector.filesystem.ignored-mount-points
- --collector.systemd
- --collector.systemd.unit-whitelist=(docker|sshd|kubelet).service
- '"^/(sys|proc|dev|host|etc)($|/)"'
volumeMounts:
- name: dev
mountPath: /host/dev
- name: proc
mountPath: /host/proc
- name: sys
mountPath: /host/sys
- name: rootfs
mountPath: /rootfs
volumes:
- name: proc
hostPath:
path: /proc
- name: dev
hostPath:
path: /dev
- name: sys
hostPath:
path: /sys
- name: rootfs
hostPath:
path: /
[root@master prometheus]# kubectl get pod -n ops
NAME READY STATUS RESTARTS AGE
node-exporter-d4jbc 1/1 Running 0 13m
node-exporter-n4rh8 1/1 Running 0 13m
node-exporter-z29mg 1/1 Running 0 13m
Node Exporter DaemonSet
DaemonSet使用toleration(容忍)确保pod在所有节点上运行,可能也包含主节点。它非常适合监控或日志代理等项目。让我们看一下DaemonSet的元素。
Node Exporter DaemonSet容器
这里,我们使用DockerHub中的Node Exporter镜像prom/node_exporter,并获取最新版本。我们还为实例上的目录/run/systemd/private挂载了一个卷,这允许Node Exporter访问systemd并在实例上收集systemd管理服务的服务状态。
Node Exporter服务
我们还需要创建一个服务来暴露Node Exporter,以便进行指标抓取。
部署Node Exporter
让我们使用kubectl命令在Kubernetes集群上创建DaemonSet和服务。我们将在monitoring命名空间内创建它们。
检查Node Exporter窗格
Node Exporter pod日志
可以看到我们的Node Exporter守护进程正在运行,也可以确认服务已经就绪。
检查Node Exporter服务
Node Exporter作业
在Prometheus配置中,我们现在想添加一个作业来抓取Node Exporter端点。通过定义一项抓取Kubernetes暴露的所有服务端点的作业,这将会一举多得。 我们还会控制Prometheus仅抓取具有特定注解prometheus.io/scrape(设置为'true')的端点。然后,我们使用内置的Kubernetes服务发现来查找端点,并将它们作为Prometheus的潜在目标返回。
- job_name: kubernetes-service-endpoints
kubernetes_sd_configs:
- role: endpoints # 从Service列表中的Endpoint发现Pod为目标
relabel_configs:
# Service没配置注解prometheus.io/scrape的不采集
- action: keep
regex: true
source_labels:
- __meta_kubernetes_service_annotation_prometheus_io_scrape
# 重命名采集目标协议
- action: replace
regex: (https?)
source_labels:
- __meta_kubernetes_service_annotation_prometheus_io_scheme
target_label: __scheme__
# 重命名采集目标指标URL路径
- action: replace
regex: (.+)
source_labels:
- __meta_kubernetes_service_annotation_prometheus_io_path
target_label: __metrics_path__
# 重命名采集目标地址
- action: replace
regex: ([^:]+)(?::\d+)?;(\d+)
replacement: $1:$2
source_labels:
- __address__
- __meta_kubernetes_service_annotation_prometheus_io_port
target_label: __address__
# 将K8s标签(.*)作为新标签名,原有值不变
- action: labelmap
regex: __meta_kubernetes_service_label_(.+)
# 生成命名空间标签
- action: replace
source_labels:
- __meta_kubernetes_namespace
target_label: kubernetes_namespace
# 生成Service名称标签
- action: replace
source_labels:
- __meta_kubernetes_service_name
target_label: kubernetes_name
Kubernetes服务端点作业
我们称这个作业为kubernetes-service-endpoints,指定服务发现使用kubernetes_sd_discovery机制——这是内置的服务发现机制,专门用于监控Kubernetes。它向Kubernetes API查询符合特定搜索条件的目标。
这个作业非常有价值,因为我们只需要定义一次,未来所有Kubernetes服务端点都将被自动发现和监控。在作业加载后,我们还会看到node_时间序列开始出现在表达式浏览器中。
更多推荐
所有评论(0)