AWS SSM 自定义清单
AWS SSM Custom Inventory
我正在尝试设置自定义清单类型以显示 Linux 个实例的磁盘使用情况,因为它在本文中为 Windows 个实例显示:https://aws.amazon.com/blogs/mt/get-disk-utilization-of-your-fleet-using-ec2-systems-manager-custom-inventory-types/
我一直在尝试创建与上面 link 中的 PowerShell 脚本中给出的逻辑相同的逻辑,但我无法找到一种方法来转换我的 Linux 磁盘使用命令以 JSON 格式输出。我无法安装 jq
或任何其他软件。
这是我的脚本:
#!/bin/sh
output=$(df -hTP | grep -vE '^tmpfs|cdrom' | awk '{print ,,}')
content= echo "{\"SchemaVersion\":\"1.0\",\"TypeName\":\"Custom:LinuxDiskUsage\",\"Content\":{$output}}"
instanceid=$(wget -q -O - http://169.254.169.254/latest/meta-data/instance-id)
如何更改此脚本,以便获得与 Windows 个实例显示的结果相同的结果?
当前输出为:
{
"SchemaVersion" : "1.0",
"TypeName" : "Custom:LinuxDiskUsage",
"Content" : {
Filesystem Size Use% devtmpfs 474M 0% /dev/xvda1 8.0G 17%
}
}
但我希望得到以下信息:
{
"SchemaVersion" : "1.0",
"TypeName" : "Custom:LinuxDiskUsage",
"Content" : {
"Filesystem" : "/dev/xvda1",
"Size" : "8.0G",
"Use%": "17%"
}
}
output=$(df -hTP | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{print "{ \"Filesystem\": \"""\", \"Size\": \"""\", \"Use\%\": \"""\"},"}')
content= echo "{\"SchemaVersion\":\"1.0\",\"TypeName\":\"Custom:LinuxDiskUsage\",\"Content\":[$output]}"
会做的。基本上,由于您不使用任何东西来生成 JSON,因此您必须自己生成。您的输出中可能有太多逗号。这可以通过加入或删除最后一个字符来解决。
你完全可以用 awk 做到这一点:
df -h --output=source,size,pcent | awk '
BEGIN {
printf "{\n\t\"SchemaVersion\" : \"1.0\",\n\t\"TypeName\" : \"Customer:LinuxDiskUsage\",\n\t\"Content\" : "
}
NR > 1 && [=10=] !~ /tmpfs/ && [=10=] !~ /cdrom/ {
printf "\n\t\t{\n\t\t\t\"Filesystem\" : \"%s\"\n\t\t\t\"Size\" : \"%s\",\n\t\t\t\"Use%\" : \"%s\"\n\t\t}\n",,,
}
END {
printf "\t}\n"
}'
一个班轮:
df -h --output=source,size,pcent | awk 'BEGIN { printf "{\n\t\"SchemaVersion\" : \"1.0\",\n\t\"TypeName\" : \"Customer:LinuxDiskUsage\",\n\t\"Content\" : "} NR > 1 && [=11=] !~ /tmpfs/ && [=11=] !~ /cdrom/ { printf "\n\t\t{\n\t\t\t\"Filesystem\" : \"%s\"\n\t\t\t\"Size\" : \"%s\",\n\t\t\t\"Use%\" : \"%s\"\n\t\t}\n",,, } END { printf "\t}\n" }'
首先,使用 df 的输出标志从输出中去除任何“噪音”。也不需要先通过 grep 然后通过 awk。使用 awk 的 BEGIN 块打印 SchemaVersion、TypeName 和 Content 标签。在主块中,当没有遇到 tmpfs 和 cdrom 以及 headers (NR>1) 时,打印文件系统、使用和大小标签的 df 命令的输出。在 END 块中,打印结束标记。
我正在尝试设置自定义清单类型以显示 Linux 个实例的磁盘使用情况,因为它在本文中为 Windows 个实例显示:https://aws.amazon.com/blogs/mt/get-disk-utilization-of-your-fleet-using-ec2-systems-manager-custom-inventory-types/
我一直在尝试创建与上面 link 中的 PowerShell 脚本中给出的逻辑相同的逻辑,但我无法找到一种方法来转换我的 Linux 磁盘使用命令以 JSON 格式输出。我无法安装 jq
或任何其他软件。
这是我的脚本:
#!/bin/sh
output=$(df -hTP | grep -vE '^tmpfs|cdrom' | awk '{print ,,}')
content= echo "{\"SchemaVersion\":\"1.0\",\"TypeName\":\"Custom:LinuxDiskUsage\",\"Content\":{$output}}"
instanceid=$(wget -q -O - http://169.254.169.254/latest/meta-data/instance-id)
如何更改此脚本,以便获得与 Windows 个实例显示的结果相同的结果?
当前输出为:
{
"SchemaVersion" : "1.0",
"TypeName" : "Custom:LinuxDiskUsage",
"Content" : {
Filesystem Size Use% devtmpfs 474M 0% /dev/xvda1 8.0G 17%
}
}
但我希望得到以下信息:
{
"SchemaVersion" : "1.0",
"TypeName" : "Custom:LinuxDiskUsage",
"Content" : {
"Filesystem" : "/dev/xvda1",
"Size" : "8.0G",
"Use%": "17%"
}
}
output=$(df -hTP | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{print "{ \"Filesystem\": \"""\", \"Size\": \"""\", \"Use\%\": \"""\"},"}')
content= echo "{\"SchemaVersion\":\"1.0\",\"TypeName\":\"Custom:LinuxDiskUsage\",\"Content\":[$output]}"
会做的。基本上,由于您不使用任何东西来生成 JSON,因此您必须自己生成。您的输出中可能有太多逗号。这可以通过加入或删除最后一个字符来解决。
你完全可以用 awk 做到这一点:
df -h --output=source,size,pcent | awk '
BEGIN {
printf "{\n\t\"SchemaVersion\" : \"1.0\",\n\t\"TypeName\" : \"Customer:LinuxDiskUsage\",\n\t\"Content\" : "
}
NR > 1 && [=10=] !~ /tmpfs/ && [=10=] !~ /cdrom/ {
printf "\n\t\t{\n\t\t\t\"Filesystem\" : \"%s\"\n\t\t\t\"Size\" : \"%s\",\n\t\t\t\"Use%\" : \"%s\"\n\t\t}\n",,,
}
END {
printf "\t}\n"
}'
一个班轮:
df -h --output=source,size,pcent | awk 'BEGIN { printf "{\n\t\"SchemaVersion\" : \"1.0\",\n\t\"TypeName\" : \"Customer:LinuxDiskUsage\",\n\t\"Content\" : "} NR > 1 && [=11=] !~ /tmpfs/ && [=11=] !~ /cdrom/ { printf "\n\t\t{\n\t\t\t\"Filesystem\" : \"%s\"\n\t\t\t\"Size\" : \"%s\",\n\t\t\t\"Use%\" : \"%s\"\n\t\t}\n",,, } END { printf "\t}\n" }'
首先,使用 df 的输出标志从输出中去除任何“噪音”。也不需要先通过 grep 然后通过 awk。使用 awk 的 BEGIN 块打印 SchemaVersion、TypeName 和 Content 标签。在主块中,当没有遇到 tmpfs 和 cdrom 以及 headers (NR>1) 时,打印文件系统、使用和大小标签的 df 命令的输出。在 END 块中,打印结束标记。