[英]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/
我一直在尝试创建与上面链接中的 PowerShell 脚本中给出的逻辑相同的逻辑,但我无法找到将 Linux 磁盘使用情况命令输出转换为 JSON 格式的方法。 我无法安装jq
或任何其他软件。
这是我的脚本:
#!/bin/sh
output=$(df -hTP | grep -vE '^tmpfs|cdrom' | awk '{print $1,$3,$6}')
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\": \""$1"\", \"Size\": \""$3"\", \"Use\%\": \""$6"\"},"}')
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 && $0 !~ /tmpfs/ && $0 !~ /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",$1,$2,$3
}
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 && $0 !~ /tmpfs/ && $0 !~ /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",$1,$2,$3 } END { printf "\t}\n" }'
首先,使用 df 的输出标志从输出中去除任何“噪音”。 也不需要通过 grep 然后通过管道传输 awk。 使用 awk 的 BEGIN 块打印 SchemaVersion、TypeName 和 Content 标签。 在主块中,当没有遇到 tmpfs 和 cdrom 以及标头 (NR>1) 时,打印 Filesystem、Use 和 Size 标签的 df 命令的输出。 在 END 块中,打印结束标记。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.