使用Prometheus组件node_exporter采集linux系统的指标数据(包括cpu/内存/磁盘/网络)

一、背景

Linux系统的基本指标包括cpu、内存、磁盘、网络等,其中网络可以细分为带宽进出口流量、连接数和tcp监控等。

本文使用Prometheus组件node_exporter采集,存储在promethues,展示在grafana面板。

二、安装node_exporter

1、下载至本地

wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz

在这里插入图片描述

2、运行node-exporter

默认运行的端口号是9100

tar xvfz node_exporter-1.3.1.linux-amd64.tar.gz

mv node_exporter-1.3.1.linux-amd64 node-exporter

cd node-exporter

nohup ./node_exporter >/dev/null 2>&1 &

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
至此,node_exporter进程启动完成,其进程号是15479。见上图。

  • 指定端口号为9102

如果端口9100已被占用,可以另外指定运行端口。

nohup ./node_exporter --web.listen-address=":9102" >/dev/null 2>&1 &
  • 查看进程

进程号是15479,与启动进程时输出的一致。

在这里插入图片描述

  • 查看端口号

我们没有在运行的时候指定端口号,所以它默认运行的端口号是9100。从下图也可以看到,它的进程号是154709

在这里插入图片描述

三、prometheus配置

prometheus采集指标,是采用pull拉取的方式,必须知晓被抓取指标的地址。

对于node_exporter,它的指标地址是http://{ip}:9100/metrics (如果你是默认端口启动)
在这里插入图片描述

在prometheus.yml配置

scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'file_sd'
    metrics_path: '/metrics'
    file_sd_configs:
      - files:
        - linux-targets.json

修改配置文件linux-targets.json

在这里插入图片描述

在这里插入图片描述

实时生效,无需重启

配置实时生效,因为我们在启动prometheus进程的时候,是采用热加载的方式。

# 保存10天的数据
./prometheus --web.enable-lifecycle --web.enable-admin-api --storage.tsdb.retention=10d

四、grafana展示

使用grafana官方面板,https://grafana.com/dashboards/8919

Node Exporter Dashboard
在这里插入图片描述
在这里插入图片描述

可以看到,这台机器的磁盘空间已使用86.9%了,标红提醒我们注意磁盘清理或扩容。

在这里插入图片描述

最后,我们看一看这台机器的网络情况。

在这里插入图片描述
TCP_tw, 是指TCP连接处于TIME_WAIT状态的数量,说明了有多少是主动关闭的连接。

附: 网络socket连接指标之TIME_WAIT

TIME_WAIT 是「主动关闭方」断开连接时的最后一个状态,该状态会持续 2MSL(Maximum Segment Lifetime) 时长,之后进入CLOSED 状态。

1、TCP_TW状态的设计初衷

TCP_TW状态的主要原因是防止由于网络原因,FIN包或者ACK包没有到达对方。如果没有进入TCP_TW状态,那么就会立即回收socket和相关资源,这个时候FIN包到了接收方,接收方返回一个ACK包,但是由于sender已经释放了相关资源,这个时候ACK就无处可去,接收方无法获取到这个ACK,这就不只是一个连接的问题了,可能会导致链接资源耗尽等问题。

2、TCP_TW是如何回收的

TCP_TW状态的回收是通过定时器来完成的。每当一个socket进入TCP_TW状态时,系统就会开启一个定时器,并等待固定时间,比如2分钟。在这个时间内,如果接收到对方的ACK包,那么这个定时器就会被立即销毁,并进入CLOSE状态。

然而,在TCP_TW状态下,如果由于ACK漏接或者其他原因,这个时间到了之后还没有收到对方的ACK包,那么这个socket就需要被回收。如果这个socket处于端口共享状态,那么socket实际上不会被立即回收,而是进入假CLOSE状态。这个时候,TCP协议会重新分配一个随机数seq,同时重置计时器,如果在一段时间之内,没有收到对方发来的重复的ACK包,那么socket就会被彻底关闭。

3、关注TCP_tw指标

  • 系统中同时存在大量TCP_TW状态的socket就会导致系统资源的压力,可能会引导奔溃。为了避免这种情况,可以通过修改内核参数来限制TCP_TW状态的数量。一般来说,建议将内核参数设置为6000左右。

  • 防止SYN等IP攻击。攻击者可以通过大量的SYN包来伪造TCP协议中的一个socket,从而放置于TCP_TW状态。如果这种攻击成功,系统的队列资源将被占满,无法被其他请求使用,系统就会崩溃。为了防止这个问题,可以在系统中添加过滤规则,阻止来自可疑IP地址的请求。

  • 在协议栈中,应用程序和内核之间的性能问题。每进入一个TCP_TW状态,都意味着会在内核中创建一个资源对象,这个资源对象的使用可能会带来一些性能问题。如果TCP_TW状态对象过多,就有可能导致内存使用过高,而且更加影响网络系统的性能。

  • 17
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值