插件窝 干货文章 Linux Shell怎么用ssh命令统计分布式集群信息

Linux Shell怎么用ssh命令统计分布式集群信息

hostname echo node 集群 162    来源:    2025-04-27

使用SSH命令统计分布式集群信息

在Linux Shell中,可以通过SSH命令结合其他工具来统计分布式集群的信息。以下是几种常用的方法:

1. 基本SSH命令统计

单节点信息获取

# 获取CPU信息
ssh username@hostname "cat /proc/cpuinfo | grep 'model name' | uniq"

# 获取内存信息
ssh username@hostname "free -h"

# 获取磁盘信息
ssh username@hostname "df -h"

# 获取系统负载
ssh username@hostname "uptime"

批量执行命令

# 对多个节点执行相同命令
for node in node1 node2 node3; do
    echo "=== $node ==="
    ssh username@$node "hostname; uptime"
done

2. 使用并行工具提高效率

使用pdsh或pssh

# 使用pdsh(需要安装)
pdsh -w username@node[1-10] "hostname; uptime"

# 使用pssh(需要安装)
pssh -h hosts.txt -i "hostname; uptime"

使用GNU parallel

# 并行执行命令
parallel -j 10 ssh username@{} "hostname; uptime" ::: node1 node2 node3 node4 node5

3. 集群信息汇总统计

收集CPU核心数

# 收集所有节点的CPU核心数并汇总
for node in node1 node2 node3; do
    cores=$(ssh username@$node "nproc")
    echo "$node: $cores cores"
    total=$((total + cores))
done
echo "Total cores in cluster: $total"

收集内存信息

# 收集内存信息并汇总
for node in node1 node2 node3; do
    mem=$(ssh username@$node "free -g | awk '/Mem:/ {print \$2}'")
    echo "$node: $mem GB"
    total=$((total + mem))
done
echo "Total memory in cluster: ${total}GB"

4. 使用脚本自动化收集

可以创建一个脚本来自动收集集群信息:

#!/bin/bash

nodes="node1 node2 node3"
output_file="cluster_report_$(date +%Y%m%d).txt"

echo "Cluster Report - $(date)" > $output_file
echo "=========================" >> $output_file

for node in $nodes; do
    echo "=== $node ===" >> $output_file
    ssh username@$node <<'EOF' >> $output_file
    echo "Hostname: $(hostname)"
    echo "Uptime: $(uptime)"
    echo "CPU: $(cat /proc/cpuinfo | grep 'model name' | uniq)"
    echo "CPU Cores: $(nproc)"
    echo "Memory: $(free -h | grep Mem)"
    echo "Disk: $(df -h /)"
    echo "OS: $(cat /etc/os-release | grep PRETTY_NAME)"
    echo ""
EOF
done

echo "Report generated: $output_file"

5. 使用Ansible(更高级的解决方案)

如果集群已经配置了Ansible,可以使用playbook来收集信息:

---
- hosts: all
  tasks:
    - name: Gather cluster info
      block:
        - name: Get hostname
          command: hostname
          register: hostname

        - name: Get uptime
          command: uptime
          register: uptime

        - name: Get CPU info
          command: cat /proc/cpuinfo | grep 'model name' | uniq
          register: cpuinfo

        - name: Get memory info
          command: free -h
          register: meminfo

        - name: Get disk info
          command: df -h
          register: diskinfo

      delegate_to: "{{ inventory_hostname }}"
      run_once: true

    - name: Display info
      debug:
        msg: |
          Host: {{ hostname.stdout }}
          Uptime: {{ uptime.stdout }}
          CPU: {{ cpuinfo.stdout }}
          Memory: {{ meminfo.stdout }}
          Disk: {{ diskinfo.stdout }}

注意事项

  1. 配置SSH免密登录可以简化操作
  2. 对于大规模集群,考虑使用专门的监控工具如Prometheus、Ganglia等
  3. 敏感信息收集要注意安全性
  4. 频繁执行SSH命令可能会对集群造成额外负载

以上方法可以根据实际需求组合使用,构建适合自己集群的信息收集系统。