/
c3mc-mon-aws-ec2-volume-dump
executable file
·104 lines (85 loc) · 2.33 KB
/
c3mc-mon-aws-ec2-volume-dump
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#!/data/Software/mydan/perl/bin/perl
use strict;
use warnings;
$|++;
=head1 SYNOPSIS
$0
=cut
my @id2ip = `c3mc-device-data-get curr compute aws-ec2 实例ID 内网IP`;
chomp @id2ip;
my %id2ip;
for ( @id2ip )
{
my @xx = split /\t/, $_;
$id2ip{$xx[0]} = $xx[1];
}
# Attachments.0.Device _vmuuid_ 必须放在最后。脚本后面会通过它来查找资源主机uuid和dev
my @col = qw( 实例ID 服务树 业务负责人 容量 类型 Attachments.0.Device _vmuuid_ );
my $col = join " ", @col;
my @x = `c3mc-device-data-get curr storage aws-ec2-volume $col`;
die "get data fail" if $?;
chomp @x;
my @mon = ();
my %mon;
for my $mon ( @mon )
{
my @xx = `c3mc-mon-aws-ec2-volume-${mon}-dump`;
die "get aws-ec2-volume $mon fail" if $?;
chomp @xx;
for ( @xx )
{
my ( $instance, $val ) = split /\t/, $_;
$mon{$mon}{$instance} = $val;
}
}
my @use = `c3mc-mon-aws-ec2-volume-dev-max-dump`;
chomp @use;
my %use;
for( @use )
{
my ($ip, $dev, $use ) = split /\t/, $_;
$use{$ip}{$dev} = $use;
if( $dev =~ m#/dev/nvme(\d+)# )
{
$use{$ip}{$1} = $use;
}
$use{$ip}{0} = $use if $dev eq '/dev/xvda';
$use{$ip}{1} = $use if $dev eq '/dev/xvdb';
}
sub getdevuse
{
my ( $ip, $dev ) = @_;
my $stat = 'unknown';
return $stat unless $ip && $dev;
my $devalias;
$devalias = 0 if $dev =~ /sda/;
$devalias = 1 if $dev =~ /sdb/;
$devalias = 2 if $dev =~ /sdc/;
$devalias = 0 if $dev =~ /xvda/;
$devalias = 1 if $dev =~ /xvdb/;
$devalias = 2 if $dev =~ /xvdc/;
if( defined $use{$ip} && defined $use{$ip}{$dev} )
{
return $use{$ip}{$dev};
}
elsif( defined $devalias && defined $use{$ip} && defined $use{$ip}{$devalias} )
{
return $use{$ip}{$devalias};
}
elsif( $use{$ip} )
{
warn sprintf "ERRRO: match dev fail: ip:$ip dev:$dev host dev:%s\n", join ',', sort keys %{$use{$ip}};
}
return $stat;
}
printf "%s\n", join "\t", @col, @mon, 'vmip', 'dev_use';
for my $x ( @x )
{
my @t = split /\t/, $x, scalar @col;
my $instance = $t[0];
$instance =~ s/.*:db://;
my $ip = $id2ip{$t[-1]} //= '';
my $dev = $t[-2] //= '';
my $devuse = getdevuse( $ip, $dev );
printf "%s\n", join "\t", $x, $ip, $devuse, map{ $mon{$_} && defined $mon{$_}{$instance} ? $mon{$_}{$instance} : 'unknown' }@mon;
}