GO语言云原生标准监控方案Prometheus三件套(cadvisor,Node Exporter,Prometheus)

https://yunlzheng.gitbook.io/prometheus-book/part-ii-prometheus-jin-jie/exporter/what-is-prometheus-exporter


cAdvisor


深度分析容器运行状态可视化工具 cAdvisor 工作原理

地址: https://github.com/google/cadvisor


node_exporter


Prometheus官方提供的

地址: https://github.com/prometheus/node_exporter

node_exporter是什么?和cadvisor有何关系和区别?

node_exporter和cadvisor都是监控和收集容器化环境中的性能指标的工具,但它们的实现方式和监控的对象略有不同。

Node Exporter是Prometheus生态系统中的一个组件,用于收集和暴露主机节点上的各种系统指标。它是一个独立运行的服务,可以在主机上运行并定期向Prometheus提供指标数据。Node Exporter可以监控CPU使用率、内存使用率、磁盘空间、网络流量等主机级别的指标,这些指标对于监控主机的整体性能非常有用。

而cadvisor(Container Advisor)是一个由Google开发的容器监控工具,用于监控和收集容器级别的性能指标。它可以与容器运行时(如Docker)集成,并提供关于容器的详细信息,包括CPU使用率、内存使用率、磁盘IO、网络统计等。cadvisor是一个轻量级的代理程序,直接运行在每个宿主机上,监控容器的资源使用情况,并将指标数据暴露给Prometheus或其他监控系统。

因此,区别可以总结如下:

  • Node Exporter用于监控主机节点上的系统指标,而cadvisor用于监控容器级别的指标。
  • Node Exporter是一个独立的服务,运行在主机上,而cadvisor是作为容器运行时的一个组件。
  • Node Exporter收集的指标是主机级别的,包括CPU、内存、磁盘等,而cadvisor收集的指标是容器级别的,关注容器的资源使用情况。

在实际使用中,可以同时使用Node Exporter和cadvisor来监控容器化环境中的整体性能,利用它们提供的指标数据进行分析和调优。




安装


Node Exporter是一个用于监控Linux系统的Prometheus exporter,可以提供有关主机的各种指标数据。以下是一种常见的安装Node Exporter的方式:

  1. 首先,登录到目标Linux服务器上,确保已具备管理员权限。

  2. 在服务器上创建一个新的目录,用于存储Node Exporter二进制文件。例如,可以使用以下命令创建一个名为node_exporter的目录:

    1
    2
    mkdir node_exporter
    cd node_exporter
  3. 下载Node Exporter的二进制文件。可以从Prometheus的官方GitHub存储库下载最新版本。使用以下命令下载Node Exporter v1.2.0的二进制文件:

    1
    wget https://github.com/prometheus/node_exporter/releases/download/v1.2.0/node_exporter-1.2.0.linux-amd64.tar.gz
  4. 解压缩下载的二进制文件:

    1
    tar xvfz node_exporter-1.2.0.linux-amd64.tar.gz
  5. 进入解压缩后的目录:

    1
    cd node_exporter-1.2.0.linux-amd64
  6. 可以使用./node_exporter命令启动Node Exporter。然而,为了在后台运行它并使其在系统启动时自动启动,可以创建一个Systemd服务单元。

    创建一个名为node_exporter.service的新文件,并使用文本编辑器打开它:

    1
    sudo nano /etc/systemd/system/node_exporter.service

    将以下内容复制粘贴到文件中:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    [Unit]
    Description=Node Exporter
    After=network.target

    [Service]
    ExecStart=/path/to/node_exporter/node_exporter

    [Install]
    WantedBy=default.target

    /path/to/node_exporter/node_exporter替换为实际的Node Exporter二进制文件路径。

  7. 保存并关闭文件。

  8. 启用和启动Node Exporter服务:

    1
    2
    3
    sudo systemctl daemon-reload
    sudo systemctl enable node_exporter
    sudo systemctl start node_exporter

    现在,Node Exporter将在服务器上作为服务运行,并将指标暴露在默认端口9100上。

你可以通过访问服务器的IP地址或域名,后跟端口号9100,来验证Node Exporter是否正在运行并提供指标数据。例如,可以使用浏览器访问http://<服务器IP地址>:9100/metrics来查看指标数据。


如何判断一台机器有没有安装 Node Exporter


要判断一台机器是否安装了Node Exporter,可以使用以下方法之一:

  1. 手动检查进程:登录到目标机器上,运行以下命令来检查Node Exporter的进程是否正在运行:

    1
    ps aux | grep node_exporter

    如果命令输出中显示了Node Exporter的进程信息,表示Node Exporter已经安装并正在运行。

  2. 网络连接检查:使用浏览器或命令行工具,尝试访问目标机器的IP地址或域名,后跟Node Exporter的默认端口号9100。例如:

    1
    http://<机器IP地址>:9100/metrics

    如果成功连接并能够获取到指标数据,说明Node Exporter已经安装并正在运行。

  3. 使用系统管理工具:如果目标机器上使用了系统管理工具(如Ansible、Puppet、Chef等),可以使用相应的工具来查询目标机器的状态并检查是否已安装Node Exporter。

  4. 通过端口扫描工具:使用端口扫描工具(如Nmap)扫描目标机器的端口,检查是否有一个监听在9100端口的服务。如果9100端口处于监听状态,那么很可能是Node Exporter在运行。

这些方法中的任何一种都可以帮助你确定目标机器是否安装了Node Exporter。

番外: ps aux和ps -ef有何区别

ps auxps -ef 命令都是用于显示当前系统上运行的进程信息,但它们在命令行参数和输出格式上存在一些区别。

  1. 命令行参数区别:

    • ps aux:在这个命令中,a 表示显示所有用户的进程,u 表示以完整格式显示进程信息,x 表示显示没有控制终端的进程。
    • ps -ef:在这个命令中,e 表示显示所有进程,f 表示以完整格式显示进程信息。
  2. 输出格式区别:

    • ps aux:在该命令的输出中,每一行都代表一个进程,并且包含一些列,如USER(进程所有者)、PID(进程ID)、%CPU(CPU使用率)、%MEM(内存使用率)、VSZ(虚拟内存大小)、RSS(常驻内存大小)、TTY(控制终端)、STAT(进程状态)、START(启动时间)和COMMAND(命令名称)等。
    • ps -ef:在该命令的输出中,每一行也代表一个进程,并且包含一些列,如UID(用户ID)、PID(进程ID)、PPID(父进程ID)、C(CPU占用率)、STIME(启动时间)、TTY(控制终端)和CMD(命令名称)等。

需要注意的是,ps aux 命令的输出格式在不同的操作系统中可能会有所不同,而 ps -ef 命令的输出格式通常是一致的。所以,在使用这些命令时,最好查阅相关的操作系统文档或命令手册以了解确切的输出格式和可用的选项。

如何让 Node Exporter在后台运行

要让Node Exporter在后台运行,可以使用以下方法之一:

  1. 使用nohup命令:登录到目标机器上,运行以下命令启动Node Exporter,并使用nohup命令将其放在后台运行:

    1
    nohup /path/to/node_exporter/node_exporter > /dev/null 2>&1 &

    /path/to/node_exporter/node_exporter替换为实际的Node Exporter二进制文件路径。该命令将启动Node Exporter,并将其输出重定向到/dev/null,以避免在终端中显示输出信息。Node Exporter将在后台运行,并将其日志和错误信息保存在当前目录的nohup.out文件中。

  2. 使用tmux或screen:tmux和screen是终端复用工具,可以创建多个终端会话,并在会话中运行Node Exporter。这样,即使断开SSH连接,Node Exporter仍将在后台持续运行。

    • 使用tmux:首先安装tmux,然后运行以下命令:

      1
      tmux new-session -d -s node_exporter '/path/to/node_exporter/node_exporter'

      /path/to/node_exporter/node_exporter替换为实际的Node Exporter二进制文件路径。此命令将创建一个名为”node_exporter”的tmux会话,并在会话中运行Node Exporter。要断开SSH连接后保持Node Exporter运行,请使用tmux attach-session -t node_exporter命令重新连接到tmux会话。

    • 使用screen:首先安装screen,然后运行以下命令:

      1
      screen -S node_exporter -dm /path/to/node_exporter/node_exporter

      /path/to/node_exporter/node_exporter替换为实际的Node Exporter二进制文件路径。此命令将创建一个名为”node_exporter”的screen会话,并在会话中运行Node Exporter。要断开SSH连接后保持Node Exporter运行,请使用screen -r node_exporter命令重新连接到screen会话。

这些方法中的任何一种都可以将Node Exporter放在后台运行,并在SSH连接断开后继续保持运行。


采集器详解


这些是针对Prometheus的Node Exporter的收集器配置选项。Node Exporter是用于监控Linux/Unix系统的开源软件,通过收集系统的各种指标数据,如CPU使用率、内存使用量、磁盘IO等,并提供给Prometheus进行数据采集和监控。下面是对每个收集器配置选项的详细解释:

  • arp(Address Resolution Protocol):

    • Scope:device(设备)
    • Include Flag:–collector.arp.device-include
    • Exclude Flag:–collector.arp.device-exclude
    • 解释:用于收集设备的ARP相关信息。通过包含标志(include flag)可以指定要包含的设备,通过排除标志(exclude flag)可以指定要排除的设备。
  • cpu(中央处理器):

    • Scope:bugs(错误)
    • Include Flag:–collector.cpu.info.bugs-include
    • Exclude Flag:N/A
    • 解释:用于收集CPU错误信息。通过包含标志可以指定要包含的错误类型,而没有排除标志。
  • cpu(中央处理器):

    • Scope:flags(标志)
    • Include Flag:–collector.cpu.info.flags-include
    • Exclude Flag:N/A
    • 解释:用于收集CPU标志信息。通过包含标志可以指定要包含的标志类型,而没有排除标志。
  • diskstats(磁盘统计):

    • Scope:device(设备)
    • Include Flag:–collector.diskstats.device-include
    • Exclude Flag:–collector.diskstats.device-exclude
    • 解释:用于收集特定设备的磁盘统计信息。通过包含标志可以指定要包含的设备,通过排除标志可以指定要排除的设备。
  • ethtool(以太网工具):

    • Scope:device(设备)
    • Include Flag:N/A
    • Exclude Flag:–collector.ethtool.device-exclude
    • 解释:用于收集设备的以太网工具信息。没有包含标志,但可以通过排除标志指定要排除的设备。
  • ethtool(以太网工具):

    • Scope:metrics(指标)
    • Include Flag:–collector.ethtool.metrics-include
    • Exclude Flag:N/A
    • 解释:用于收集以太网工具的特定指标信息。通过包含标志可以指定要包含的指标,而没有排除标志。
  • filesystem(文件系统):

    • Scope:fs-types(文件系统类型)
    • Include Flag:N/A
    • Exclude Flag:–collector.filesystem.fs-types-exclude
    • 解释:用于收集特定文件系统类型的信息。没有包含标志,但可以通过排除标志指定要排除的文件系统类型。
  • filesystem(文件系统):

    • Scope:mount-points(挂载点)
    • Include Flag:N/A
    • Exclude Flag:–collector.filesystem.mount-points-exclude
    • 解释:用于收集特定挂载点的文件系统信息。