简介
node-export 主要用来做Linux服务器监控,比如服务器的进程数、消耗了多少 CPU、内存,磁盘空间,iops,tcp连接数等资源。
Node Exporter 是用于暴露 *NIX 主机指标的 Exporter,比如采集 CPU、内存、磁盘等信息。采用 Go 编写,不存在任何第三方依赖,所以只需要下载解压即可运行。
Exporter是Prometheus的一类数据采集组件的总称。它负责从目标处搜集数据,并将其转化为Prometheus支持的格式。与传统的数据采集组件不同的是,它并不向中央服务器发送数据,而是等待中央服务器主动前来抓取。
node-exporter用于采集服务器层面的运行指标,包括机器的loadavg、filesystem、meminfo等基础监控,类似于传统主机监控维度的zabbix-agent
安装 / 使用
下载并程序放在/usr/local/bin下且赋权
配置
默认启用的收集器及其对应flag:https://github.com/prometheus/node_exporter?tab=readme-ov-file#include--exclude-flags
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13
| ☸ ➜ ./node_exporter
|
配置启动脚本
vim /usr/lib/systemd/system/node_exporter.service
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| [Unit] Description=node_exporter After=network.target
[Service] ExecStart=/usr/local/bin/node_exporter\ --web.listen-address=:9100
Restart=always RestartSec=1
[Install] WantedBy=multi-user.target
|
启动 node_exporter
1 2 3
| systemctl daemon-reload systemctl start node_exporter systemctl enable node_exporter
|
验证监控数据
1
| curl http://localhost:9100/metrics
|
kube-prom operator监听
Service & Endpoints & ServiceMonitor
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
| apiVersion: v1 kind: Service metadata: name: external-node-exporter namespace: cattle-monitoring-system labels: app: external-node-exporter app.kubernetes.io/name: node-exporter spec: type: ClusterIP ports: - name: metrics port: 9100 protocol: TCP targetPort: 9100 --- apiVersion: v1 kind: Endpoints metadata: name: external-node-exporter namespace: cattle-monitoring-system labels: app: external-node-exporter app.kubernetes.io/name: node-exporter subsets: - addresses: - ip: xxx1 - ip: xxx2 ports: - name: metrics port: 9100 --- apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: external-node-exporter namespace: cattle-monitoring-system labels: app: external-node-exporter release: prometheus spec: selector: matchLabels: app: external-node-exporter namespaceSelector: matchNames: - cattle-monitoring-system endpoints: - port: metrics interval: 1m path: /metrics scheme: http
|
告警规则
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| groups: - name: 主机状态-监控告警 rules: - alert: 主机状态 expr: up == 0 for: 1m labels: status: 非常严重 annotations: summary: "{{$labels.instance}}:服务器宕机" description: "{{$labels.instance}}:服务器延时超过5分钟" - alert: CPU使用情况 expr: 100-(avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) by(instance)* 100) > 60 for: 1m labels: status: 一般告警 annotations: summary: "{{$labels.mountpoint}} CPU使用率过高!" description: "{{$labels.mountpoint }} CPU使用大于60%(目前使用:{{$value}}%)" - alert: 内存使用 expr: 100 -(node_memory_MemTotal_bytes -node_memory_MemFree_bytes+node_memory_Buffers_bytes+node_memory_Cached_bytes ) / node_memory_MemTotal_bytes * 100> 80 for: 1m labels: status: 严重告警 annotations: summary: "{{$labels.mountpoint}} 内存使用率过高!" description: "{{$labels.mountpoint }} 内存使用大于80%(目前使用:{{$value}}%)" - alert: IO性能 expr: 100-(avg(irate(node_disk_io_time_seconds_total[1m])) by(instance)* 100) < 60 for: 1m labels: status: 严重告警 annotations: summary: "{{$labels.mountpoint}} 流入磁盘IO使用率过高!" description: "{{$labels.mountpoint }} 流入磁盘IO大于60%(目前使用:{{$value}})" - alert: 网络 expr: ((sum(rate (node_network_receive_bytes_total{device!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}[5m])) by (instance)) / 100) > 102400 for: 1m labels: status: 严重告警 annotations: summary: "{{$labels.mountpoint}} 流入网络带宽过高!" description: "{{$labels.mountpoint }}流入网络带宽持续2分钟高于100M. RX带宽使用率{{$value}}" - alert: 网络 expr: ((sum(rate (node_network_transmit_bytes_total{device!~'tap.*|veth.*|br.*|docker.*|virbr*|lo*'}[5m])) by (instance)) / 100) > 102400 for: 1m labels: status: 严重告警 annotations: summary: "{{$labels.mountpoint}} 流出网络带宽过高!" description: "{{$labels.mountpoint }}流出网络带宽持续2分钟高于100M. RX带宽使用率{{$value}}" - alert: TCP会话 expr: node_netstat_Tcp_CurrEstab > 1000 for: 1m labels: status: 严重告警 annotations: summary: "{{$labels.mountpoint}} TCP_ESTABLISHED过高!" description: "{{$labels.mountpoint }} TCP_ESTABLISHED大于1000%(目前使用:{{$value}}%)" - alert: 磁盘容量 expr: 100-(node_filesystem_free_bytes{fstype=~"ext4|xfs"}/node_filesystem_size_bytes {fstype=~"ext4|xfs"}*100) > 80 for: 1m labels: status: 严重告警 annotations: summary: "{{$labels.mountpoint}} 磁盘分区使用率过高!" description: "{{$labels.mountpoint }} 磁盘分区使用大于80%(目前使用:{{$value}}%)"
|
写入自定义指标
参考使用:https://github.com/prometheus-community/node-exporter-textfile-collector-scripts
grafana dashboard id【1860】