本文目录导读:

我来介绍几种批量巡检云主机状态的方法,主要针对阿里云、腾讯云、AWS等主流云平台。
使用云厂商CLI工具(推荐)
阿里云 CLI 批量巡检
#!/bin/bash
# aliyun_health_check.sh
# 获取所有地域
REGIONS=$(aliyun ecs DescribeRegions --output json | jq -r '.Regions.Region[].RegionId')
for REGION in $REGIONS; do
echo "=== 巡检地域: $REGION ==="
# 获取该地域所有ECS实例
aliyun ecs DescribeInstances \
--RegionId $REGION \
--output json | jq -r '.Instances.Instance[] | [
.InstanceId,
.InstanceName,
.Status,
.PublicIpAddress.IpAddress[],
.InnerIpAddress.IpAddress[]
] | @tsv'
# 检查CPU使用率
aliyun cms DescribeMetricLast \
--Project acs_ecs_dashboard \
--Metric cpu_total \
--Period 300
done
腾讯云 CLI 批量巡检
#!/bin/bash
# tencentcloud_health_check.sh
# 获取所有实例状态
tccli cvm DescribeInstancesStatus \
--Offset 0 \
--Limit 100 | jq -r '.InstanceStatusSet[] | [
.InstanceId,
.InstanceState
] | @tsv'
AWS CLI 批量巡检
#!/bin/bash
# aws_health_check.sh
# 检查所有EC2实例状态
for region in $(aws ec2 describe-regions --query 'Regions[].RegionName' --output text); do
echo "Region: $region"
aws ec2 describe-instances \
--region $region \
--query 'Reservations[].Instances[].[
InstanceId,
State.Name,
InstanceType,
PublicIpAddress
]' \
--output table
done
Python脚本批量巡检
#!/usr/bin/env python3
# cloud_health_check.py
import json
import subprocess
from datetime import datetime
class CloudHealthChecker:
def __init__(self, cloud_provider='aliyun'):
self.cloud_provider = cloud_provider
def check_aliyun_instances(self):
"""巡检阿里云ECS实例"""
regions_cmd = "aliyun ecs DescribeRegions --output json"
regions_output = subprocess.check_output(regions_cmd, shell=True)
regions = json.loads(regions_output)['Regions']['Region']
health_report = []
for region in regions:
region_id = region['RegionId']
# 获取实例列表
cmd = f"aliyun ecs DescribeInstances --RegionId {region_id} --output json"
output = subprocess.check_output(cmd, shell=True)
instances = json.loads(output)['Instances']['Instance']
for instance in instances:
health_info = {
'instance_id': instance['InstanceId'],
'name': instance.get('InstanceName', 'N/A'),
'status': instance['Status'],
'region': region_id,
'check_time': datetime.now().isoformat()
}
# 检查健康状态
if instance['Status'] == 'Running':
# 检查CPU使用率
cpu_cmd = f"""aliyun cms DescribeMetricLast \
--Project acs_ecs_dashboard \
--Metric cpu_total \
--Period 300 \
--Dimensions "[{{\\\"instanceId\\\":\\\"{instance['InstanceId']}\\\"}}]" """
try:
cpu_output = subprocess.check_output(cpu_cmd, shell=True)
cpu_data = json.loads(cpu_output)
if 'Datapoints' in cpu_data:
health_info['cpu_usage'] = cpu_data['Datapoints'][-1]['Average']
except:
health_info['cpu_usage'] = 'N/A'
health_report.append(health_info)
return health_report
def generate_report(self, data):
"""生成巡检报告"""
print(f"\n{'='*60}")
print(f"云主机健康巡检报告 - {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
print(f"{'='*60}")
total = len(data)
running = sum(1 for i in data if i['status'] == 'Running')
stopped = sum(1 for i in data if i['status'] == 'Stopped')
print(f"\n统计信息:")
print(f" 总实例数: {total}")
print(f" 运行中: {running}")
print(f" 已停止: {stopped}")
print(f"\n实例详情:")
print(f"{'InstanceId':<20} {'Name':<20} {'Status':<10} {'Region':<15}")
print("-"*65)
for instance in data:
print(f"{instance['instance_id']:<20} "
f"{instance['name'][:20]:<20} "
f"{instance['status']:<10} "
f"{instance['region']:<15}")
# 保存报告
report_file = f"health_report_{datetime.now().strftime('%Y%m%d_%H%M%S')}.json"
with open(report_file, 'w', encoding='utf-8') as f:
json.dump(data, f, indent=2, ensure_ascii=False)
print(f"\n报告已保存至: {report_file}")
if __name__ == "__main__":
checker = CloudHealthChecker('aliyun')
report = checker.check_aliyun_instances()
checker.generate_report(report)
Ansible自动化巡检
---
# ansible_health_check.yml
- name: 云主机健康巡检
hosts: cloud_instances
gather_facts: yes
vars:
check_time: "{{ ansible_date_time.iso8601 }}"
tasks:
- name: 检查系统资源使用
block:
- name: CPU使用率
shell: |
top -bn1 | grep "Cpu(s)" | \
awk '{print "CPU_Usage: " $2 + $4 "%"}'
register: cpu_usage
- name: 内存使用率
shell: |
free | grep Mem | \
awk '{printf "RAM_Usage: %.2f%%", $3/$2 * 100}'
register: mem_usage
- name: 磁盘使用率
shell: |
df -h / | awk 'NR==2 {print "Disk_Usage: " $5}'
register: disk_usage
- name: 系统运行时间
shell: |
uptime
register: uptime_info
- name: 关键服务检查
shell: |
systemctl is-active --quiet sshd && echo "SSH: Running" || echo "SSH: Stopped"
systemctl is-active --quiet nginx && echo "Nginx: Running" || echo "Nginx: Stopped"
register: service_status
ignore_errors: yes
- name: 生成巡检报告
template:
src: health_report.j2
dest: "/tmp/health_{{ inventory_hostname }}_{{ check_time }}.txt"
delegate_to: localhost
- name: 汇总所有主机报告
hosts: localhost
tasks:
- name: 合并报告
assemble:
src: /tmp/
dest: "/tmp/health_report_{{ ansible_date_time.date }}.txt"
delimiter: "---"
when: false # 需要时启用
完整的巡检脚本示例
#!/bin/bash
# comprehensive_cloud_check.sh
echo "========================================"
echo "云主机综合巡检脚本"
echo "开始时间: $(date)"
echo "========================================"
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
# 配置文件
CONFIG_FILE="cloud_config.ini"
REPORT_DIR="./reports"
mkdir -p $REPORT_DIR
# 加载配置
load_config() {
if [ -f "$CONFIG_FILE" ]; then
source $CONFIG_FILE
else
echo "配置文件不存在,使用默认配置"
CLOUD_PROVIDER="aliyun"
REGIONS="cn-hangzhou,cn-beijing"
CHECK_INTERVAL=300
fi
}
# 巡检单个实例
check_instance() {
local instance_id=$1
local region=$2
echo -e "\n${YELLOW}检查实例: $instance_id${NC}"
# 获取实例状态
STATUS=$(aliyun ecs DescribeInstanceAttribute \
--InstanceId $instance_id \
--RegionId $region \
--output json | jq -r '.Status')
# 检查健康状态
if [ "$STATUS" == "Running" ]; then
echo -e "${GREEN}✓ 实例状态: Running${NC}"
# 获取监控数据
local cpu_output=$(aliyun cms DescribeMetricLast \
--Project acs_ecs_dashboard \
--Metric cpu_total \
--Period 300 \
--Dimensions "[{\"instanceId\":\"$instance_id\"}]" 2>/dev/null)
local mem_output=$(aliyun cms DescribeMetricLast \
--Project acs_ecs_dashboard \
--Metric memory_usedutilization \
--Period 300 \
--Dimensions "[{\"instanceId\":\"$instance_id\"}]" 2>/dev/null)
# 解析CPU使用率
if [ -n "$cpu_output" ]; then
local cpu_usage=$(echo $cpu_output | jq -r '.Datapoints[-1].Average // "N/A"')
echo "CPU使用率: ${cpu_usage}%"
if (( $(echo "$cpu_usage > 80" | bc -l) )); then
echo -e "${RED}⚠ CPU使用率过高${NC}"
fi
fi
# 解析内存使用率
if [ -n "$mem_output" ]; then
local mem_usage=$(echo $mem_output | jq -r '.Datapoints[-1].Average // "N/A"')
echo "内存使用率: ${mem_usage}%"
if (( $(echo "$mem_usage > 80" | bc -l) )); then
echo -e "${RED}⚠ 内存使用率过高${NC}"
fi
fi
else
echo -e "${YELLOW}⚠ 实例状态: $STATUS${NC}"
fi
# 记录结果
echo "$instance_id|$region|$STATUS|$(date +%Y-%m-%d_%H:%M:%S)" >> "$REPORT_DIR/health_$(date +%Y%m%d).log"
}
# 批量巡检
batch_check() {
local regions=$1
IFS=',' read -ra REGION_ARRAY <<< "$regions"
for region in "${REGION_ARRAY[@]}"; do
echo -e "\n${GREEN}巡检地域: $region${NC}"
# 获取该地域所有实例
aliyun ecs DescribeInstances \
--RegionId $region \
--output json | jq -r '.Instances.Instance[].InstanceId' | while read instance_id; do
check_instance $instance_id $region
done
done
}
# 生成HTML报告
generate_html_report() {
local report_date=$(date +%Y%m%d)
local log_file="$REPORT_DIR/health_${report_date}.log"
local html_file="$REPORT_DIR/report_${report_date}.html"
# 统计信息
local total=$(wc -l < $log_file)
local running=$(grep -c "Running" $log_file)
local stopped=$(grep -c "Stopped" $log_file)
cat > $html_file <<EOF
<!DOCTYPE html>
<html>
<head>云主机巡检报告</title>
<style>
body { font-family: Arial, sans-serif; margin: 20px; }
h1 { color: #333; }
.summary { background: #f5f5f5; padding: 15px; border-radius: 5px; }
.running { color: green; }
.stopped { color: red; }
table { border-collapse: collapse; width: 100%; }
th, td { border: 1px solid #ddd; padding: 8px; text-align: left; }
th { background-color: #4CAF50; color: white; }
</style>
</head>
<body>
<h1>云主机健康巡检报告</h1>
<p>生成时间: $(date '+%Y-%m-%d %H:%M:%S')</p>
<div class="summary">
<h2>统计概览</h2>
<p>总实例数: $total</p>
<p>运行中: <span class="running">$running</span></p>
<p>已停止: <span class="stopped">$stopped</span></p>
</div>
<h2>实例详情</h2>
<table>
<tr>
<th>实例ID</th>
<th>地域</th>
<th>状态</th>
<th>检查时间</th>
</tr>
EOF
while IFS='|' read -r id region status time; do
local status_class=""
[ "$status" == "Running" ] && status_class="running" || status_class="stopped"
cat >> $html_file <<EOF
<tr>
<td>$id</td>
<td>$region</td>
<td class="$status_class">$status</td>
<td>$time</td>
</tr>
EOF
done < $log_file
echo "</table></body></html>" >> $html_file
echo -e "${GREEN}HTML报告已生成: $html_file${NC}"
}
# 主程序
main() {
load_config
echo -e "${GREEN}开始批量巡检...${NC}"
batch_check $REGIONS
echo -e "\n${GREEN}生成报告...${NC}"
generate_html_report
echo -e "\n${GREEN}巡检完成!${NC}"
}
main "$@"
使用方法
- 配置云厂商CLI
# 安装CLI工具 pip install aliyun-cli # 或 brew install awscli
配置认证信息
aliyun configure
或
aws configure
2. **运行巡检脚本**
```bash
# 直接运行
bash comprehensive_cloud_check.sh
# Python脚本
python3 cloud_health_check.py
# Ansible
ansible-playbook -i inventory ansible_health_check.yml
- 设置定时任务
crontab -e
每天凌晨2点执行巡检
0 2 * /path/to/cloud_check.sh
这些脚本可以根据实际需求进行定制,添加更多检查项如磁盘IO、网络延迟、安全组规则等。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播