Prometheus的node_exporter监控项目及设置示例
首先
这是关于用于监视工具Prometheus的硬件和操作系统监视代理程序node_exporter的条目。
node_exporter是一种监控代理工具,用于收集与硬件和操作系统相关的各种信息,并通过HTTP进行公开,以供Prometheus使用。
然而,由于它支持的监控项目(在Prometheus术语中称为收集器)很多,所以需要根据使用案例来调整要监控的收集器。
本篇将概括整理node_exporter所支持的收集器和选项。
此外,对于在容器内启动node_exporter和在主机上直接启动的情况,提供了示例配置。
这是适用于Linux的摘要。我们删除了与node_exporter适用于其他操作系统(如FreeBSD等)有关的部分。此外,对于专业功能或明显不使用的功能,我们只是写了一些简单的笔记,请谅解。
使用软件和版本
node_exporter:v0.14.0
默认启用的收集器
arp 可以被解释为地址解析协议。
据说可以从/proc/net/arp中获取与ARP相关的统计信息,但在v0.14.0版本中尚未被收录。
在4/14之前的README上有提到,看起来在4/12时已经被合并到主分支上了,所以我认为在下一个版本或者当前版本之前构建的话应该可以使用。
通过启用这个功能,可以看到ARP表中当前的条目数。
连接跟踪
请从`/proc/sys/net/netfilter`获取与连接跟踪相关的统计信息。
连接跟踪是一种用于追踪网络连接的功能,在iptables等中使用。
通过启用,可以查看连接跟踪的当前条目数量和最大数量等信息。
磁盘状态
通过/proc/diskstats收集与磁盘I/O相关的统计数据。
启用后,可以查看每个磁盘上当前正在进行的I/O数量等信息。
相关选项 (Guanlian xuanxiang)
-收藏器.磁盘统计.忽略设备字符串
使用正则表达式指定要忽略的磁盘。
默认为”^(ram|loop|fd|(h|s|v|xv)d[a-z]|nvme\\d+n\\d+p)\\d+$”。
EDAC的原生中文翻譯:益達
根据名称来推断,这似乎是一个可以输出ECC错误周围统计数据的收集器。
它似乎可以从/sys/devices/system/edac/mc/mc[0-9]*中获取信息,但在我的环境中,edac路径不存在。
如果进行监视的话,可能可以预测到内存故障等问题,但我没有深入研究,所以详细情况不清楚。
熵
如果你监视着并获取熵的状态作为生成随机数的基础,可能能够预防熵不足而导致/dev/random被阻塞并导致系统崩溃的情况。
文件描述符
从/proc/sys/fs/file-nr获取文件描述符的统计信息。
如果是有效的,可以获取当前分配的数量以及可分配的最大值。
文件系统
如果启用,它可以提供与文件系统相关的统计信息,例如每个文件系统的使用情况和可用空间。
有关选项
收集器.文件系统.忽略-fs-类型 字符串
使用正则表达式指定要忽略的文件系统类型。
默认为”^(sys|proc|auto)fs$”。
– 收集.文件系统.忽略的挂载点 字符串
用正则表达式指定要忽略的文件系统挂载点。
默认值是”^/(sys|proc|dev)($|/)”。
硬件监控
从/sys/class/hwmon获取硬件的传感器数据。
如果启用,可以看到CPU的温度等。
个人觉得不是很必要。
无限带宽网络
请帮我收集大家都喜欢的InfiniBand的信息。
由于我没有使用InfiniBand,所以没有仔细查看过。
负载平均值 zhí)
大家都喜欢的负载平均值可以从/proc/loadavg获取。你可以看到常见的1m、5m和15m的数值。
mdadm -> Linux软件RAID管理工具
可以从/proc/mdstat中获取有关md(软件RAID)的信息。
您可以查看每个md设备中含有多少个磁盘以及当前有多少个活动状态的设备。
内存信息
如果启用,可以从/proc/meminfo获取与内存相关的信息。您可以查看内存和Swap的使用情况。
网路开发者
可以从/proc/net/dev获取有关网络接口的信息。
您可以查看每个接口的发送和接收数据的字节数、数据包数以及丢包和错误的数据包数。
相关选项
收集器.netdev.忽略设备 字符串
在正規表達式中指定要忽略的網路設備。默認為”^$”,即不忽略任何設備。
网络统计
从 /proc/net/netstat 中,可以获取 TCP/UDP/ICMP 等协议的统计信息。
似乎可以获取与 netstat -s 相同的信息。
可以查看 TCP 的重传次数和连接数等。
查看网络套接字状态
从/proc/net/sockstat获取套接字的统计信息。
可以获取TCP套接字各种状态的数量(分配/等待时间等)。
/proc/net/sockstat没有太多解释文本,对于其可靠性我们不得而知。
状态
可以通过/proc/stat获取主要的CPU统计信息,可以查看按核心区分的CPU使用率等数据。
文本文件
通过使用cron批处理等将数据存储在指定的目录中,可以获取任意的信息。
存储的数据必须按照以下格式进行输出:
https://prometheus.io/docs/instrumenting/exposition_formats/
相关选项
– 文本文件目录字符串
这是文件路径,用于在textfile收集器中加载数据。
时间
您可以查看服务器的Unix时间。
请告诉我您的用户名。
您可以获取有关uname的信息。
您可以通过标签查看操作系统、主机名、域名、内核版本等信息。
虚拟内存统计
可以通过/proc/vmstat获取有关虚拟内存的信息。虚拟内存与交换空间(Swap)容易混淆,但可以查看与分页相关的信息,如脏页和回写中的页。
无线网络
据说可以获取WiFi设备的信息。
由于想监视的服务器不使用WiFi,因此不考虑它。
ZFS
据说有人会帮忙收集大家喜爱的ZFS相关信息。
因为我不使用ZFS,所以就不考虑了。
默认禁用的收集器
由于越来越多的狂热话题出现,杂乱度也会增加。
联系
可以从/sys/class/net中查看当前bond接口的信息。可以查看有多少个从属者以及有多少个处于活动状态的从属者。
好友信息
听说可以从/proc/buddyinfo中查看物理内存的碎片化情况。
哦。
DRBD
听说有人给我们提供了关于大家喜爱的DRBD的信息。
因为我没有使用DRBD,所以我就不做详述了。
打断
听说可以从/proc/interrupts文件中看到每个IRQ的中断次数。
哦。
IPVS
从/proc/net/ip_vs等获取ipvs的信息。
可以看到根据源IP、目标IP分配的权重数量以及当前连接数等信息。
把以下内容进行汉语本地化改写,只需要一种选项:
ksmd
听说可以从/sys/kernel/mm/ksm获取Kernel Samepage Merging (KSM)的信息。
KSM是进程写时复制的相反版本,它在多个进程之间比较内存,并在相同的情况下进行合并以减小大小。
听说在使用KVM之类的情况下效果会很明显。
登录
听说可以从与systemd相关的logind功能中获取当前tty会话的数量。
嗯。
内存信息 NUMA
听说可以查看有关NUMA的内存信息。
虽然可能会有一些情况需要查看NUMA,但我目前对此几乎没有理解,而且几乎没有多个插槽的机器,所以我没有深入研究。
挂载状态
请从/proc/self/mountstats中获取与NFS客户端相关的信息。
您可以针对每个挂载点,按照不同操作(如写操作或读操作)分别查看发送了多少字节或花费了多少秒的详细信息。
需要中文将以下内容进行释义,仅需一种选择:
NFS
从/proc/net/rpc/nfs获取与nfs-client相关的信息。
据说可以获取类似于nfsstat -c的值。
与mountstats相比,这里获取到的信息是被汇总的。
跑起来
听说可以获取到runit的信息。
因为我没有使用runit,所以我会忽略这部分。
监督者
据说可以获取supervisord的信息。
我没有使用supervisord,所以不做讨论。
systemd 系统
请帮我获取systemd的信息。
您可以查看每个单元(Unit)的状态,例如是否活动(active),是否失败(failed),是否非活动(inactive)等。
相关选项
收藏家.系统D.私人
这个选项似乎是用来直接连接到systemd而不经过dbus的,但我不太理解如何使用。
默认值是false。
-collector.systemd.unit-blacklist 字符串
这是一个用于监视systemd单位名称的黑名单正则表达式。
默认情况下为空。
– 集合器。systemd单位白名单 字符串
這是用於監視systemd單元名的白名單正則表達式。
預設是“.+”,即匹配所有單元名。
被監視的單元必須同時符合白名單並且不符合黑名單的要求。
TCP状态
似乎可以从/proc/net/tcp等找到与TCP相关的信息。
据说存在性能问题,最好不使用。
只需要一个选项:
选项
我只需要一個選項,用中文將以下內容重述:這裡提取的選項與個別收集器無關,而是與整體的node_exporter相關,這些選項會影響node_exporter的提取。
收集器.procfs字符串
node_exporter访问proc信息的路径。
默认路径是/proc。
如果在容器内运行,可以指定挂载主机的/proc目录。
-collector.sysfs 的字符串
node_exporter用于获取sys信息的路径。默认路径为/sys。在容器中运行时,可用于指定挂载主机/sys的目标路径。
启用收集器的字符串
使用逗号分隔来指定要启用的收集器。 默认启用的收集器有conntrack、diskstats、entropy、edac、filefd、filesystem、hwmon、infiniband、loadavg、mdadm、meminfo、netdev、netstat、sockstat、stat、textfile、time、uname、vmstat、wifi、zfs。
node_exporter的启动示例
由于使用案例的不同,我认为每个人所需的东西自然也会有所不同,但在我的情况下,我考虑启用以下内容。
-
- conntrack
-
- diskstats
-
- entropy
-
- filefd
-
- filesystem
-
- loadavg
-
- mdadm
-
- meminfo
-
- netdev
-
- netstat
-
- sockstat
-
- stat
-
- textfile
-
- time
-
- uname
-
- vmstat
-
- bonding
-
- mountstats
- systemd
根据明确不可见项目不激活的政策,我们暂时激活上述项目,并考虑在观察的同时,如果最终确实存在不看的项目,就按需进行删除。
以下是激活上述收集器时的示例,考虑在Container Linux(CoreOS)上运行的情况。
如果要在容器中启动node_exporter
由于方便起见,将以Compose文件格式进行描述。
version: '2'
services:
prometheus:
image: quay.io/prometheus/node-exporter
ports:
- "9100:9100"
volumes:
- /proc:/host/proc
- /sys:/host/sys
- /:/rootfs
- text-collector:/text-collector
- /var/run/dbus/system_bus_socket:/var/run/dbus/system_bus_socket
network_mode: "host"
command:
- -collectors.enabled
- "conntrack,diskstats,entropy,filefd,filesystem,loadavg,mdadm,meminfo,netdev,netstat,sockstat,stat,textfile,time,uname,vmstat,bonding,mountstats,systemd"
- -collector.systemd.unit-whitelist
- "^(systemd-journald.service|etcd2.service)$$"
- -collector.procfs
- /host/proc
- -collector.sysfs
- /host/sys
- -collector.filesystem.ignored-mount-points
- "^/(sys|proc|dev|etc|host|var|text-collector|rootfs/(var/lib/docker|media|boot|proc|sys|dev|run|tmp)|$$)"
- -collector.netdev.ignored-devices
- "^(br|veth|docker)"
- -collector.textfile.directory
- /text-collector
volumes:
text-collector:
在Compose文件中,需要注意使用”$”用”$$”来进行转义。虽然显得有点混乱,但这是对其内容的解释。
关于音量调节问题
-
- ホストの/procや/sys配下の情報を取得する必要があるのでマウント
-
- filesystemの監視が必要なので、ホストのルートを/rootfsとしてマウント
-
- text-collectorの領域を名前付きボリュームとしてマウント
これだけだと意味ないので、なんらか欲しい情報を出力するコンテナを追加することを想定してます
systemdの情報を取得するのにsystemdのsocketをマウント
关于选项的事项
收集器.系统单位白名单
由于即使对整个单元进行监控也看不到,因此我们的方针是仅监控那些明确表示没有运作的单元。
由于我们还没有认真审查需要监视的单元,因此目前是随意选择放入的。
收集器.文件系统.忽略的挂载点
文件系统监视是为了查看物理磁盘剩余容量等而启用的。
在容器中运行node_exporter时,会获取容器侧文件系统等不必要的信息,因此我们将这些信息排除。
此外,由于主机的信息被挂载在/rootfs目录下,所以可以通过它来查看,但主机上包含了不必要的信息,例如tmp区域的挂载点,我们也将其排除。
collector.netdev.ignored-devices 收集器。网络设备。忽略的设备
为了监视主机的物理网络设备,netdev监视已经被启用。因此,排除了虚拟接口等。关于容器网络监视,可以使用cAdvisor等单独进行。(据说docker v1.13及以上版本已经有自己的prometheus监视端点)
如果使用systemd启动
如果使用systemd启动的话,基本的方针还是一致的。
不需要在容器中启动,会简洁一些。
[Unit]
Description=node_exporter service
After=network.target
[Service]
Type=simple
Environment=COLLECTORS=conntrack,diskstats,entropy,filefd,filesystem,loadavg,mdadm,meminfo,netdev,netstat,sockstat,stat,textfile,time,uname,vmstat,bonding,mountstats,systemd
Environment=SYSTEMD_WHITELIST=^(docker.service|systemd-journald.service|etcd2.service)$
Environment=FILESYSTEM_IGNORED=^/(run|boot|media|tmp|sys|dev|proc|var/lib/docker)
Environment=NETDEV_IGNORED=^(br|veth|docker)
Environment=TEXT_DIR=/run/node_exporter/text-collector
ExecStartPre=-/usr/bin/mkdir -p ${TEXT_DIR}
ExecStart=/opt/bin/node_exporter -collectors.enabled ${COLLECTORS} \
-collector.systemd.unit-whitelist ${SYSTEMD_WHITELIST} \
-collector.filesystem.ignored-mount-points ${FILESYSTEM_IGNORED} \
-collector.netdev.ignored-devices ${NETDEV_IGNORED} \
-collector.textfile.directory ${TEXT_DIR}
Restart=always
RestartSec=10s
或许更好将环境变量整理到另一个文件中。
由于没有在容器中启动,因此将Docker包含在systemd的监控范围内。
最后
在这篇文章中,我整理了node_exporter的各种选项,并提供了docker-compose和systemd的示例。虽然项目很多,一眼看上去可能不容易理解,但是一旦设置好了,只需复用,所以在熟悉后运营会变得轻松。
即使获取了很多数值,如果不进行正确的可视化,就没有意义,所以如果有兴趣的话,我也想整理一下在Grapana中进行可视化时的查询模式等。