目录
1.7 prometheus如何收集k8s/服务的–三种方式收集
【云原生】kubeadm快速搭建K8s集群Kubernetes1.19.0-CSDN博客
一、概述
1.1 prometheus简介
Prometheus是一个开源的系统监控和报警系统,现在已经加入到CNCF基金会,成为继k8s之后第二个在CNCF托管的项目,在kubernetes容器管理系统中,通常会搭配prometheus进行监控,同时也支持多种exporter采集数据,还支持pushgateway进行数据上报,Prometheus性能足够支撑上万台规模的集群。
文档地址:
prometheus官网文档地址:Overview | Prometheus
prometheus中文文档地址:第1节:Prometheus 简介 - Prometheus 中文文档
1.2 prometheus架构图
从上图可发现,Prometheus整个生态圈组成主要包括prometheus server,Exporter,pushgateway,alertmanager,grafana,Web ui界面,Prometheus server由三个部分组成,Retrieval,Storage,PromQL。
1.3 Exporter介绍
Exporter是Prometheus的指标数据收集组件。它负责从目标Jobs收集数据,并把收集到的数据转换为Prometheus支持的时序数据格式。 和传统的指标数据收集组件不同的是,他只负责收集,并不向Server端发送数据,而是等待Prometheus Server 主动抓取,node-exporter 默认的抓取url地址:http://ip:9100/metrics 。
因为环境原因,网络不可达的场景,Prometheus可以使用Pushgateway这个组件推送node-exporter的指标数据到远端Prometheus,node-exporter用于采集node的运行指标,包括node的cpu、load、filesystem、meminfo、network等基础监控指标,类似于zabbix监控系统的的zabbix-agent。node-exporter由Prometheus官方提供、维护,属于监控指标收集类UNIX内核操作系统的必备的exporter。
GitHub地址:GitHub - prometheus/node_exporter: Exporter for machine metrics。
1.4 监控指标
- CPU
- 内存
- 硬盘
- 网络流量
- 文件描述符
- 系统负载
- 系统服务
1.5 参数定义
黑名单: 关闭某一项默认开启的采集项,使用--no-collector参数可指定不需要的模块,如果不指定,将使用默认配置。
白名单:关闭默认采集项而只开启某些采集,使用--collector.disable-defaults参数关闭默认采集项,使用--collector.<name>指定开启的采集项。
使用--collectors.enabled参数打开node_exporter默认的采集项。
部分参数默认关闭的原因是:
- 太重
- 太慢,超过Prometheus scrape_interval或scrape_timeout的长时间运行时间
- 太多资源开销,主机资源需求过大
1.6 默认启用的参数
Name |
Description |
OS |
arp |
从/proc/net/ARP中显示ARP统计信息 |
Linux |
bcache |
显示/sys/fs/bcache/中的bcache统计信息。 |
Linux |
bonding |
显示Linux绑定接口的已配置和活动从属设备的数量。 |
LInux |
boottime |
显示从kern.boottime sysctl派生的系统启动时间 |
Darwin, Dragonfly, FreeBSD, NetBSD, OpenBSD, Solaris |
conntrack |
显示连接统计信息(如果没有/proc/sys/net/netfilter/present,则不执行任何操作)。 |
Linux |
cpu |
显示CPU统计信息 |
Darwin, Dragonfly, FreeBSD, Linux, Solaris |
cpufreq |
显示CPU频率统计信息 |
Linux, Solaris |
diskstats |
显示磁盘I/O统计信息。 |
Darwin, Linux, OpenBSD |
edac |
显示错误检测和更正统计信息。 |
Linux |
entropy |
显示可用熵。 |
Linux |
exec |
显示执行统计信息。 |
Dragonfly, FreeBSD |
filefd |
显示/proc/sys/fs/file-nr中的文件描述符统计信息。 |
Linux |
filesystem |
显示文件系统统计信息,如使用的磁盘空间。 |
Darwin, Dragonfly, FreeBSD, Linux, OpenBSD |
hwmon |
暴露/sys/class/hwmon/中的硬件监控和传感器数据。 |
Linux |
infiniband |
显示特定于InfiniBand和Intel OmniPath配置的网络统计信息。 |
Linux |
ipvs |
显示/proc/net/ip_vs中的IPVS状态和/proc/net/ip_vs_stats中的统计信息。 |
Linux |
loadavg |
显示平均负载。 |
Darwin, Dragonfly, FreeBSD, Linux, NetBSD, OpenBSD, Solaris |
mdadm |
在/proc/mdstat中显示有关设备的统计信息(如果不存在/proc/mdtat,则不执行任何操作)。 |
Linux |
meminfo |
显示内存统计信息。 |
Darwin, Dragonfly, FreeBSD, Linux, OpenBSD |
netclass |
显示/sys/class/net中的网络接口信息/ |
Linux |
netdev |
显示网络接口统计信息,如传输的字节数。 |
Darwin, Dragonfly, FreeBSD, Linux, OpenBSD |
netstat |
从/proc/net/netstat中显示网络统计信息。这是与netstat-s相同的信息。 |
Linux |
nfs |
从/proc/net/rpc/NFS中显示NFS客户端统计信息。这是与nfsstat-c相同的信息。 |
Linux |
nfsd |
从/proc/net/rpc/nfsd中显示NFS内核服务器统计信息。这与nfsstat-s的信息相同。 |
Linux |
pressure |
显示/proc/pressure/中的压力失速统计信息。 |
Linux (kernel 4.20+ and/or CONFIG_PSI) |
rapl |
显示/sys/class/powercap中的各种统计信息。 |
Linux |
schedstat |
显示/proc/schedstat中的任务调度程序统计信息。 |
Linux |
sockstat |
显示/proc/net/sockstat中的各种统计信息。 |
Linux |
softnet |
显示/proc/net/softnet_stat中的统计信息 |
Linux |
stat |
显示/proc/stat中的各种统计信息。这包括启动时间、分叉和中断。 |
Linux |
textfile |
显示从本地磁盘读取的统计信息。必须设置--collector.textfile.directory标志。 |
any |
thermal_zone |
显示/sys/class/thermal中的热区和冷却设备统计信息。 |
Linux |
time |
显示当前系统时间。 |
any |
timex |
显示选定的adjtimex(2)系统调用统计信息 |
Linux |
udp_queues |
显示/proc/net/UDP和/proc/net/udp6中rx_queue和tx_queue的UDP总长度。 |
Linux |
uname |
显示uname系统调用提供的系统信息。 |
Linux |
vmstat |
显示/proc/vmstat中的统计信息。 |
Linux |
xfs |
显示XFS运行时统计信息。 |
Linux (kernel 4.4+) |
zfs |
显示ZFS性能统计信息。 |
Linux, Solaris |
1.7 prometheus如何收集k8s/服务的–三种方式收集
- Exporters(指标暴露器):收集节点的信息、将数据格式化或转化为 promtheus 可识别的http这种转化方式/镜像拉取方式
- Instrumentation (应用内置的指标暴露器): 收集有内置指标暴露器的信息
- Pushgateway : 收集短周期的数据
二、安装node-exporter组件
机器规划:
IP |
主机名 |
192.168.40.130 |
k8s-master1 |
192.168.40.131 |
k8s-node1 |
192.168.40.132 |
k8s-node2 |
安装node-exporter组件,node-export.yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: node-exporter
namespace: monitor-sa
labels:
name: node-exporter
spec:
selector:
matchLabels:
name: node-exporter
template:
metadata:
labels:
name: node-exporter
spec:
hostPID: true # 使用主机的PID
hostIPC: true # 使用主机的IPC
hostNetwork: true # 使用主机的网络
containers:
- name: node-exporter
image: prom/node-exporter:v0.16.0
ports:
- containerPort: 9100
resources:
requests:
cpu: 0.15
securityContext:
privileged: true
args:
- --path.procfs
- /host/proc
- --path.sysfs
- /host/sys
- --collector.filesystem.ignored-mount-points
- '"^/(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
tolerations:
- key: "node-role.kubernetes.io/master"
operator: "Exists"
effect: "NoSchedule"
volumes:
- name: proc
hostPath:
path: /proc
- name: dev
hostPath:
path: /dev
- name: sys
hostPath:
path: /sys
- name: rootfs
hostPath:
path: /
在k8s集群的master1节点操作
kubectl create ns monitor-sa
kubectl apply -f node-export.yaml
kubectl get pods -n monitor-sa
查看创建的node-exporter
浏览器访问:
命令行查看服务器负载指标采集
参考文章: