在Linux Shell中,可以通过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
# 使用pdsh(需要安装)
pdsh -w username@node[1-10] "hostname; uptime"
# 使用pssh(需要安装)
pssh -h hosts.txt -i "hostname; uptime"
# 并行执行命令
parallel -j 10 ssh username@{} "hostname; uptime" ::: node1 node2 node3 node4 node5
# 收集所有节点的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"
可以创建一个脚本来自动收集集群信息:
#!/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"
如果集群已经配置了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 }}
以上方法可以根据实际需求组合使用,构建适合自己集群的信息收集系统。